source: buchla-68k/ram/msm.c@ e225e77

Last change on this file since e225e77 was e225e77, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Added missing includes and declarations.

  • Property mode set to 100644
File size: 18.7 KB
Line 
1/*
2 =============================================================================
3 msm.c -- MIDAS-VII -- MIDI state machine
4 Version 75 -- 1988-11-02 -- D.N. Lynx Crowe
5
6 List with pr -e4 option to expand tabs to 4 spaces instead of 8.
7 =============================================================================
8*/
9
10#include "biosdefs.h"
11#include "stddefs.h"
12#include "graphdef.h"
13#include "hwdefs.h"
14#include "smdefs.h"
15#include "sclock.h"
16#include "score.h"
17#include "vsdd.h"
18
19#include "midas.h"
20#include "scfns.h"
21
22extern int16_t newsv(int16_t grp, int16_t src, int16_t ival);
23extern void asgvce(int16_t grp, int16_t port, int16_t chan, int16_t key, int16_t vel);
24extern void clkset(int16_t st);
25extern void dsanval(int16_t var);
26extern void dsclk(void);
27extern void execkey(int16_t trg, int16_t pch, int16_t vce, int16_t tag);
28extern void getasg(int16_t n);
29extern void mpcupd(void);
30extern void ne_bgn(int16_t grp, int16_t key, int16_t vel);
31extern void ne_end(int16_t trg, int16_t grp);
32extern void newpps(int16_t trg, int16_t grp, int16_t src, int16_t ival);
33extern void procpfl(uint16_t trig);
34extern void sdwins(void);
35extern void se_disp(struct s_entry *ep, int16_t sd, struct gdsel *gdstb[], int16_t cf);
36extern void stmproc(uint16_t trg);
37
38extern int16_t ancmsw; /* analog variable r/p control source */
39extern int16_t angroup; /* analog variable group being displayed */
40extern int16_t clkctl; /* clock control sources */
41extern int16_t ctrsw; /* se_disp center update switch */
42extern int16_t curasg; /* current assignment table */
43extern int16_t curvce; /* current voice being edited */
44extern int16_t dsp_ok; /* display update OK this cycle flag */
45extern int16_t editsw; /* edit switch state */
46extern int16_t mascntr; /* MIDI active sensing timeout counter */
47extern int16_t mdb1; /* current MIDI data byte 1 */
48extern int16_t mdb2; /* current MIDI data byte 2 */
49extern int16_t michan; /* current MIDI channel */
50extern int16_t midiclk; /* MIDI clock switch */
51extern int16_t midigo; /* MIDI run switch */
52extern int16_t mistat; /* current MIDI status */
53extern int16_t ndisp; /* current display */
54extern int16_t recsw; /* record/play switch */
55extern int16_t prgchan; /* MIDI program change channel */
56
57/*
58
59*/
60
61extern int8_t masens[]; /* MIDI port active sensing flags */
62extern int8_t mctlval[]; /* MIDI controller values */
63extern int8_t mdbyte[]; /* MIDI data byte buffers */
64extern int8_t mpsust[]; /* MIDI sustain status, by port and channel */
65extern int8_t mrstat[]; /* MIDI running status */
66extern int8_t trgtab[]; /* trigger status */
67
68extern int16_t grpmode[]; /* group mode table */
69extern int16_t grpstat[]; /* group status table */
70extern int16_t key2grp[]; /* key to group map */
71extern int16_t vce2grp[]; /* voice to group map */
72extern int16_t veltab[]; /* velocity */
73extern int16_t mctlnum[]; /* MIDI controller number map */
74extern int16_t mpbend[]; /* MIDI pitch bend data, by port and channel */
75extern int16_t msmstv[]; /* MIDI state machine state variables */
76extern int16_t prstab[]; /* pressure */
77extern int16_t src2var[]; /* source to variable number map */
78extern int16_t tuntab[]; /* current tuning table */
79extern int16_t vce2trg[]; /* voice to trigger map (-1 EQ NULL) */
80
81extern int16_t grp2prt[][2]; /* group to port/channel map */
82extern int16_t varmode[][16]; /* analog variable record mode */
83
84extern struct gdsel *gdstbc[]; /* group status table - center slice */
85
86/* initialized stuff */
87
88/* mpmap[] -- MIDI port to BIOS device table */
89
90int16_t mpmap[3] = {MC1_DEV, MC2_DEV, CON_DEV};
91
92/* msmnext[] -- MIDI state machine -- channel message next state table */
93
94int16_t msmnext[8] = {2, 2, 2, 2, 1, 1, 2, 0};
95
96/* msmcnxt[] -- MIDI state machine -- system message next state table */
97
98int16_t msmcnxt[8] = {0, 0, 2, 1, 0, 0, 0, 0};
99
100/* ctl2src -- controller to source table */
101
102int16_t ctl2src[] = {SM_VTMW, SM_LPBR, SM_CTL1, SM_PED1};
103
104/*
105
106*/
107
108/*
109 =============================================================================
110 msm() -- MIDI state machine
111 =============================================================================
112*/
113
114void msm(void)
115{
116 register int16_t miport;
117 register int16_t midiin;
118 register int16_t i;
119 register int16_t t1;
120 register int16_t t2;
121 register struct s_entry *ep;
122 int16_t j, nvel;
123 int32_t where;
124
125 for (miport = 0; miport < NMPORTS; miport++) { /* for each port ... */
126
127 while (BIOS(B_RDAV, mpmap[miport])) { /* anything there ? */
128
129 dsp_ok = FALSE; /* disallow display update */
130
131 midiin = 0x00FF & BIOS(B_GETC, mpmap[miport]); /* get input */
132
133 if (masens[miport]) /* update active sensing */
134 masens[miport] |= 0x0F;
135
136 switch (msmstv[miport]) { /* switch on state */
137/*
138
139*/
140 case 0: /* waiting for status */
141
142 if (0x0080 & midiin) { /* status */
143
144 michan = 0x000F & midiin;
145 mistat = 0x000F & (midiin >> 4);
146
147 if (midiin < 0x00F0) { /* channel */
148
149 msmstv[miport] = msmnext[mistat & 0x07];
150 mrstat[miport] = midiin;
151
152 } else if (midiin < 0x00F8) { /* common */
153
154 msmstv[miport] = msmcnxt[michan & 0x07];
155 mrstat[miport] = midiin;
156/*
157
158*/
159 } else { /* real-time */
160
161 switch (0x0007 & midiin) {
162
163 case 0: /* clock */
164
165 if (midiclk AND midigo)
166 if ((fc_val += 2) > 0x00FFFFFFL)
167 fc_val = 0x00FFFFFFL;
168
169 break;
170
171 case 2: /* start */
172
173 if ((clkctl EQ CK_MIDI) AND
174 (NOT midigo)) {
175
176 midigo = TRUE;
177
178 if (fc_val)
179 sc_goto(fc_val = 0L);
180
181 clkset(TRUE);
182 dsclk();
183 }
184
185 break;
186
187 case 3: /* continue */
188
189 if ((clkctl EQ CK_MIDI) AND
190 (NOT midigo)) {
191
192 midigo = TRUE;
193 clkset(TRUE);
194 dsclk();
195 }
196
197 break;
198/*
199
200*/
201 case 4: /* stop */
202
203 if ((clkctl EQ CK_MIDI) AND
204 midigo) {
205
206 midigo = FALSE;
207 clkset(FALSE);
208 dsclk();
209 }
210
211 break;
212
213 case 6: /* active sensing */
214
215 masens[miport] |= 0x00FF;
216 break;
217
218 case 7: /* reset */
219
220 for (i = 0; i < NMPORTS; i++) {
221
222 mrstat[i] = 0;
223 msmstv[i] = 0;
224 masens[i] = 0;
225 }
226
227 break;
228 }
229 }
230 }
231
232 continue;
233/*
234
235*/
236 case 1: /* waiting for 1 data byte */
237
238 if (0x80 & midiin) { /* status */
239
240 michan = 0x0F & midiin;
241 mistat = 0x0F & (midiin >> 4);
242
243 if (midiin < 0x00F0) { /* channel */
244
245 msmstv[miport] = msmnext[mistat & 0x07];
246 mrstat[miport] = midiin;
247
248 } else if (midiin < 0x00F8) { /* common */
249
250 msmstv[miport] = msmcnxt[michan & 0x07];
251 mrstat[miport] = midiin;
252/*
253
254*/
255 } else { /* real-time */
256
257 switch (0x0007 & midiin) {
258
259 case 0: /* clock */
260
261 if (midiclk AND midigo)
262 if ((fc_val += 2) > 0x00FFFFFFL)
263 fc_val = 0x00FFFFFFL;
264
265 break;
266
267 case 2: /* start */
268
269 if ((clkctl EQ CK_MIDI) AND
270 (NOT midigo)) {
271
272 midigo = TRUE;
273
274 if (fc_val)
275 sc_goto(fc_val = 0L);
276
277 clkset(TRUE);
278 dsclk();
279 }
280
281 break;
282
283 case 3: /* continue */
284
285 if ((clkctl EQ CK_MIDI) AND
286 (NOT midigo)) {
287
288 midigo = TRUE;
289 clkset(TRUE);
290 dsclk();
291 }
292
293 break;
294/*
295
296*/
297 case 4: /* stop */
298
299 if ((clkctl EQ CK_MIDI) AND
300 midigo) {
301
302 midigo = FALSE;
303 clkset(FALSE);
304 dsclk();
305 }
306
307 break;
308
309 case 6: /* active sensing */
310
311 masens[miport] |= 0x00FF;
312 break;
313
314 case 7: /* reset */
315
316 for (i = 0; i < NMPORTS; i++) {
317
318 mrstat[i] = 0;
319 msmstv[i] = 0;
320 masens[i] = 0;
321 }
322
323 break;
324 }
325 }
326/*
327
328*/
329 } else { /* data */
330
331 michan = 0x000F & mrstat[miport];
332 mistat = 0x000F & (mrstat[miport] >> 4);
333
334 if (mistat EQ 0x0C) {
335
336 /* program change */
337
338 if ((miport EQ 0) AND
339 ((michan + 1) EQ prgchan) AND
340 (midiin LT NASGS)) {
341
342 getasg(curasg = midiin);
343 mpcupd();
344 }
345/*
346
347*/
348 } else if (mistat EQ 0x0D) {
349
350 /* channel pressure */
351
352 mdb1 = SM_SCALE(midiin);
353 t1 = (miport << 11) | (michan << 7);
354 t2 = t1 + 128;
355
356 for (i = t1; i < t2; i++)
357 prstab[i] = mdb1;
358
359 for (i = 0; i < 12; i++) {
360
361 if ((grp2prt[i][0] EQ (miport + 1)) AND
362 (grp2prt[i][1] EQ (michan + 1))) {
363
364 if (newsv(i, SM_KPRS, mdb1)) {
365
366 if (recsw AND grpstat[i] AND
367 (2 EQ (ancmsw ? varmode[5][i] : grpmode[i]))) {
368
369 if (E_NULL NE (ep = e_alc(E_SIZE2))) {
370
371 ep->e_time = t_cur;
372 ep->e_type = EV_ANVL;
373 ep->e_data1 = 0x0050 | i;
374 ep->e_dn = (struct s_entry *)((int32_t)mdb1 << 16);
375 p_cur = e_ins(ep, ep_adj(p_cur, 0, t_cur))->e_fwd;
376 ctrsw = TRUE;
377 se_disp(ep, D_FWD, gdstbc, 1);
378 ctrsw = FALSE;
379 }
380
381 } else if ((angroup - 1) EQ i) {
382
383 dsanval(5);
384 }
385 }
386 }
387 }
388/*
389
390*/
391 } else if ((mistat EQ 0x0F) AND
392 (michan EQ 3) AND
393 (NOT midigo)) { /* song select */
394
395 if (midiin < N_SCORES) {
396
397 selscor(midiin);
398
399 if (ndisp EQ 2)
400 sdwins();
401 }
402
403 } else { /* error -- state mismatch */
404
405 msmstv[miport] = 0;
406 mrstat[miport] = 0;
407 }
408 }
409
410 continue;
411/*
412
413*/
414 case 2: /* waiting for 1st data byte */
415
416 if (0x80 & midiin) { /* status */
417
418 michan = 0x0F & midiin;
419 mistat = 0x0F & (midiin >> 4);
420
421 if (midiin < 0x00F0) { /* channel */
422
423 msmstv[miport] = msmnext[mistat & 0x07];
424 mrstat[miport] = midiin;
425
426 } else if (midiin < 0x00F8) { /* common */
427
428 msmstv[miport] = msmcnxt[michan & 0x07];
429 mrstat[miport] = midiin;
430/*
431
432*/
433 } else { /* real-time */
434
435 switch (0x0007 & midiin) {
436
437 case 0: /* clock */
438
439 if (midiclk AND midigo)
440 if ((fc_val += 2) > 0x00FFFFFFL)
441 fc_val = 0x00FFFFFFL;
442
443 break;
444
445 case 2: /* start */
446
447 if ((clkctl EQ CK_MIDI) AND
448 (NOT midigo)) {
449
450 midigo = TRUE;
451
452 if (fc_val)
453 sc_goto(fc_val = 0L);
454
455 clkset(TRUE);
456 dsclk();
457 }
458
459 break;
460
461 case 3: /* continue */
462
463 if ((clkctl EQ CK_MIDI) AND
464 (NOT midigo)) {
465
466 midigo = TRUE;
467 clkset(TRUE);
468 dsclk();
469 }
470
471 break;
472/*
473
474*/
475 case 4: /* stop */
476
477 if ((clkctl EQ CK_MIDI) AND
478 midigo) {
479
480 midigo = FALSE;
481 clkset(FALSE);
482 dsclk();
483 }
484
485 break;
486
487 case 6: /* active sensing */
488
489 masens[miport] |= 0x00FF;
490 break;
491
492 case 7: /* reset */
493
494 for (i = 0; i < NMPORTS; i++) {
495
496 mrstat[i] = 0;
497 msmstv[i] = 0;
498 masens[i] = 0;
499 }
500
501 break;
502 }
503 }
504
505 } else { /* data */
506
507 mdbyte[miport] = midiin;
508 msmstv[miport] = 3;
509 }
510
511 continue;
512/*
513
514*/
515 case 3: /* waiting for 2nd data byte */
516
517 if (0x80 & midiin) { /* status */
518
519 michan = 0x0F & midiin;
520 mistat = 0x0F & (midiin >> 4);
521
522 if (midiin < 0x00F0) { /* channel */
523
524 msmstv[miport] = msmnext[mistat & 0x07];
525 mrstat[miport] = midiin;
526
527 } else if (midiin < 0x00F8) { /* common */
528
529 msmstv[miport] = msmcnxt[michan & 0x07];
530 mrstat[miport] = midiin;
531/*
532
533*/
534 } else { /* real-time */
535
536 switch (0x0007 & midiin) {
537
538 case 0: /* clock */
539
540 if (midiclk AND midigo)
541 if ((fc_val += 2) > 0x00FFFFFFL)
542 fc_val = 0x00FFFFFFL;
543
544 break;
545
546 case 2: /* start */
547
548 if ((clkctl EQ CK_MIDI) AND
549 (NOT midigo)) {
550
551 midigo = TRUE;
552
553 if (fc_val)
554 sc_goto(fc_val = 0L);
555
556 clkset(TRUE);
557 dsclk();
558 }
559
560 break;
561
562 case 3: /* continue */
563
564 if ((clkctl EQ CK_MIDI) AND
565 (NOT midigo)) {
566
567 midigo = TRUE;
568 clkset(TRUE);
569 dsclk();
570 }
571
572 break;
573/*
574
575*/
576 case 4: /* stop */
577
578 if ((clkctl EQ CK_MIDI) AND
579 midigo) {
580
581 midigo = FALSE;
582 clkset(FALSE);
583 dsclk();
584 }
585
586 break;
587
588 case 6: /* active sensing */
589
590 masens[miport] |= 0x00FF;
591 break;
592
593 case 7: /* reset */
594
595 for (i = 0; i < NMPORTS; i++) {
596
597 mrstat[i] = 0;
598 msmstv[i] = 0;
599 masens[i] = 0;
600 }
601
602 break;
603 }
604 }
605/*
606
607*/
608 } else { /* data */
609
610 michan = 0x0F & mrstat[miport];
611 mistat = 0x0F & (mrstat[miport] >> 4);
612 mdb1 = mdbyte[miport];
613 mdb2 = midiin;
614 msmstv[miport] = 2;
615
616 switch (mistat) { /* switch on status */
617
618 case 9: /* note on */
619
620 if (mdb2) {
621
622 t1 = (miport << 11) + (michan << 7) + mdb1;
623 trgtab[t1] |= mpsust[(miport << 4) + michan] | M_KSTATE;
624 veltab[t1] = nvel = SM_SCALE(mdb2);
625 prstab[t1] = 0;
626
627 stmproc(t1); /* process as a patch stimulus */
628
629 if (editsw) { /* edit mode */
630
631 execkey(t1, tuntab[mdb1], curvce, 0);
632 break;
633 }
634
635 if (miport) { /* port 1 or 2 */
636
637 for (i = 0; i < 12; i++)
638 if ((grp2prt[i][0] EQ (miport + 1)) AND
639 (grp2prt[i][1] EQ (michan + 1))) {
640
641 asgvce(i, miport, michan, mdb1, nvel);
642 ne_bgn(i, mdb1, nvel);
643 }
644
645 } else { /* port 0 */
646
647 t2 = ((mdb1 < 21) OR (mdb1 > 108)) ?
648 0 : key2grp[mdb1 - 21];
649
650 for (i = 0; i < 12; i++)
651 if ((t2 & (0x0001 << i)) AND
652 (grp2prt[i][1] EQ (michan + 1))) {
653
654 asgvce(i, miport, michan, mdb1, nvel);
655 ne_bgn(i, mdb1, nvel);
656 }
657 }
658
659 break;
660 }
661/*
662
663*/
664 case 8: /* note off */
665
666 t1 = (miport << 11) + (michan << 7) + mdb1;
667 trgtab[t1] &= ~M_KSTATE;
668
669 if (0 EQ trgtab[t1]) {
670
671 for (i = 0; i < 12; i++) {
672
673 if (vce2trg[i] EQ t1) {
674
675 vce2trg[i] = -1;
676 procpfl(t1);
677 }
678
679 if ((grp2prt[i][0] EQ (miport + 1)) AND
680 (grp2prt[i][1] EQ (michan + 1)))
681 ne_end(t1, i);
682 }
683
684 stmproc(0x8000 | t1); /* process as a patch stimulus */
685 }
686
687 break;
688
689 case 10: /* poly pressure */
690
691 t1 = (miport << 11) + (michan << 7) + mdb1;
692 t2 = SM_SCALE(mdb2);
693 prstab[t1] = t2;
694
695 for (i = 0; i < 12; i++)
696 if ((grp2prt[i][0] EQ (miport + 1)) AND
697 (grp2prt[i][1] EQ (michan + 1)))
698 newpps(t1, i, SM_KPRS, t2);
699
700 break;
701/*
702
703*/
704 case 11: /* control change */
705
706 mctlval[(miport << 11) + (michan << 7) + mdb1] = mdb2;
707
708 if (mdb1 EQ MIDISUS) {
709
710 /* sustain changed */
711
712 t1 = (miport << 11) | (michan << 7);
713 t2 = t1 + 128;
714
715 if (mdb2 GT MSW_ON) { /* switch on */
716
717 mpsust[(miport << 4) + michan] = M_CHNSUS;
718
719 for (i = t1; i < t2; i++)
720 if (trgtab[i])
721 trgtab[i] |= M_CHNSUS;
722
723 } else if (mdb2 LT MSW_OFF) { /* switch off */
724
725 mpsust[(miport << 4) + michan] = 0;
726
727 for (i = t1; i < t2; i++) {
728
729 if (trgtab[i]) {
730
731 trgtab[i] &= ~M_CHNSUS;
732
733 if (0 EQ trgtab[i]) {
734
735 for (t1 = 0; t1 < 12; t1++) {
736
737 if (vce2trg[t1] EQ i) {
738
739 vce2trg[t1] = -1;
740 procpfl(i);
741 }
742
743 if ((grp2prt[t1][0] EQ (miport + 1)) AND
744 (grp2prt[t1][1] EQ (michan + 1)))
745 ne_end(i, t1);
746 }
747 }
748 }
749 }
750 }
751/*
752
753*/
754 } else if (mdb1 EQ MIDIHLD) {
755
756 /* hold changed */
757
758 t1 = (miport << 11) | (michan << 7);
759 t2 = t1 + 128;
760
761 if (mdb2 GT MSW_ON) { /* switch on */
762
763 for (i = t1; i < t2; i++)
764 if (trgtab[i] & M_KSTATE) {
765
766 for (t1 = 0; t1 < 12; t1++)
767 if ((vce2trg[t1] & ~(MKEYHELD << 8)) EQ i)
768 vce2trg[t1] |= (M_CHNHLD << 8);
769 }
770
771 } else if (mdb2 LT MSW_OFF) { /* switch off */
772
773 for (i = 0; i <12; i++) {
774
775 if (vce2trg[i] NE -1) {
776
777 vce2trg[i] &= ~(M_CHNHLD << 8);
778
779 if (0 EQ (vce2trg[i] & (MKEYHELD << 8))) {
780
781 t1 = vce2trg[i];
782
783 if (0 EQ trgtab[t1]) {
784
785 vce2trg[i] = -1;
786 procpfl(t1);
787 }
788 }
789 }
790 }
791 }
792/*
793
794*/
795 } else { /* other controllers */
796
797 t1 = (miport << 11) | (michan << 7) | mdb1;
798 t2 = SM_SCALE(mdb2);
799 mctlval[t1] = t2;
800
801 for (j = 0; j < 4; j++) {
802
803 if ((mctlnum[j] & 0x00FF) EQ mdb1) {
804
805 i = ctl2src[j];
806
807 for (t1 = 0; t1 < 12; t1++) {
808
809 if ((mctlnum[j] & CTAG1) OR
810 ((grp2prt[t1][0] EQ (miport + 1)) AND
811 (grp2prt[t1][1] EQ (michan + 1)))) {
812
813 if (newsv(t1, i, t2)) {
814
815 if (recsw AND grpstat[t1] AND
816 (2 EQ (ancmsw ? varmode[src2var[i]][t1] : grpmode[t1]))) {
817
818 if (E_NULL NE (ep = e_alc(E_SIZE2))) {
819
820 ep->e_time = t_cur;
821 ep->e_type = EV_ANVL;
822 ep->e_data1 = (src2var[i] << 4) | t1;
823 ep->e_dn = (struct s_entry *)((int32_t)t2 << 16);
824 p_cur = e_ins(ep, ep_adj(p_cur, 0, t_cur))->e_fwd;
825 ctrsw = TRUE;
826 se_disp(ep, D_FWD, gdstbc, 1);
827 ctrsw = FALSE;
828 }
829
830 } else if ((angroup - 1) EQ t1) {
831
832 dsanval(src2var[i]);
833 }
834 }
835 }
836 }
837 }
838 }
839 }
840
841 break;
842/*
843
844*/
845 case 14: /* pitch bend */
846
847 t1 = (miport << 4) | michan;
848 t2 = ((mdb2 << 9) | (mdb1 << 2)) ^ 0x8000;
849 mpbend[t1] = t2;
850
851 for (i = 0; i < 12; i++) {
852
853 if ((grp2prt[i][0] EQ (miport + 1)) AND
854 (grp2prt[i][1] EQ (michan + 1))) {
855
856 if (newsv(i, SM_HTPW, t2)) {
857
858 if (recsw AND grpstat[i] AND
859 (2 EQ (ancmsw ? varmode[0][i] : grpmode[i]))) {
860
861 if (E_NULL NE (ep = e_alc(E_SIZE2))) {
862
863 ep->e_time = t_cur;
864 ep->e_type = EV_ANVL;
865 ep->e_data1 = i;
866 ep->e_dn = (struct s_entry *)((int32_t)t2 << 16);
867 p_cur = e_ins(ep, ep_adj(p_cur, 0, t_cur))->e_fwd;
868 ctrsw = TRUE;
869 se_disp(ep, D_FWD, gdstbc, 1);
870 ctrsw = FALSE;
871 }
872
873 } else if ((angroup - 1) EQ i) {
874
875 dsanval(0);
876 }
877 }
878 }
879 }
880
881 break;
882/*
883
884*/
885 case 15: /* common */
886
887 if (michan EQ 2) { /* song position */
888
889 if ((clkctl EQ CK_MIDI) AND
890 (NOT midigo)) {
891
892 where = 12 * ((mdb1 << 7) | mdb2);
893
894 if (fc_val NE where)
895 sc_goto(fc_val = where);
896 }
897
898 break;
899
900 } else { /* bad running status */
901
902 msmstv[miport] = 0;
903 mrstat[miport] = 0;
904 break;
905 }
906
907 default: /* error -- bad status */
908
909 msmstv[miport] = 0;
910 mrstat[miport] = 0;
911 break;
912
913 } /* end switch (on status) */
914
915 } /* end if (status) */
916
917 continue;
918
919 default: /* error -- bad state */
920
921 msmstv[miport] = 0;
922 mrstat[miport] = 0;
923 break;
924
925 } /* end switch (on state) */
926 } /* end while (data available) */
927 } /* end for (each port) */
928}
Note: See TracBrowser for help on using the repository browser.