source: buchla-68k/ram/ptfield.c@ 6262b5c

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

Added include files for global functions and variables.

  • Property mode set to 100644
File size: 16.8 KB
Line 
1/*
2 =============================================================================
3 ptfield.c -- MIDAS-VII patch display field functions
4 Version 35 -- 1989-11-16 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#define DEBUGXP 0
9
10#define USEVECTR 0 /* to force vector cursor control */
11
12#include "all.h"
13
14#if DEBUGXP
15extern short debugsw;
16
17short debugxp = 1;
18#endif
19
20#if USEVECTR
21short usevect = TRUE;
22
23extern void (*cx_key)(void);
24extern void (*cy_key)(void);
25#endif
26
27extern void (*xy_up)(void);
28extern void (*xy_dn)(void);
29extern void (*premove)(void);
30extern void (*pstmove)(void);
31extern int16_t (*curtype)(void);
32
33extern uint16_t fromfpu(uint16_t fputime);
34
35extern void select(void);
36extern void nokey(void);
37extern int16_t nonf(int16_t k);
38extern int16_t stdctp5(void);
39extern void cxkstd(void);
40extern void cykstd(void);
41extern void stdmkey(void);
42extern void stddkey(int16_t k);
43extern void stopcm(void);
44extern void smxupd(void);
45extern void smyupd(void);
46extern void aftercm(void);
47extern void ptdkey(int16_t k);
48
49extern int16_t astat;
50extern int16_t chtime;
51extern int16_t chwait;
52extern int16_t cmfirst;
53extern int16_t cmtype;
54extern int16_t curhold;
55extern int16_t cvtime;
56extern int16_t cvwait;
57extern int16_t ncvwait;
58extern int16_t ptbflag;
59extern int16_t ptecpos;
60extern int16_t ptedef;
61extern int16_t ptedfok;
62extern int16_t pteset;
63extern int16_t ptestm;
64extern int16_t ptestok;
65extern int16_t ss_ptsw;
66extern int16_t ss_sqsw;
67extern int16_t stccol;
68extern int16_t stcrow;
69extern int16_t syrate;
70extern int16_t tvcwval;
71extern int16_t vcwval;
72
73extern int16_t crate1[];
74
75extern int8_t ptdebuf[];
76
77extern struct selbox *csbp;
78extern struct selbox ptboxes[];
79
80extern struct patch ptebuf;
81
82void ptxkey(void);
83void ptmkey(void);
84void ptekey(void);
85
86extern int16_t findnxt(int16_t cp);
87extern int16_t findprv(int16_t cp);
88extern int8_t *fr2dec(int16_t v, int8_t *s);
89extern void UpdVid(int16_t row, int16_t col, int8_t *str, uint16_t atr);
90extern void cnvc2p(int8_t *buf, int16_t cv);
91extern void curset(struct curpak *s);
92extern void dptw(void);
93extern void dt_del(uint16_t de);
94extern void int2rat(int16_t rat);
95extern void movectc(int16_t r, int16_t c);
96extern void pt_del(uint16_t pe);
97extern void pte2buf(void);
98extern void voidpb(void);
99
100/*
101
102*/
103
104int8_t *trdata[] = { "Trans", "Stop ", "Start" };
105int8_t *ssdata[] = { "Stop ", "Start" };
106
107int8_t *stdata[] = { "Srce" , "Mult", "Time", "Valu", "Func" };
108
109int8_t *smdata[] = {
110
111 " ", /* SM_NONE 0 No source - always 0 */
112 "Randm", /* SM_RAND 1 Random source */
113 "GPC/V", /* SM_CTL1 2 Control Voltage 1 / MIDI GPC 1 */
114 "??3??", /* ------- 3 -unused- */
115 "??4??", /* ------- 4 -unused- */
116 "Pitch", /* SM_PTCH 5 Key Pitch */
117 "KeyPr", /* SM_KPRS 6 Key Pressure */
118 "KeyVL", /* SM_KVEL 7 Key Velocity */
119 "Pedal", /* SM_PED1 8 Pedal 1 */
120 "??9??", /* ------- 9 -unused- */
121 "Freq ", /* SM_FREQ 10 Key Frequency */
122 "PchWh", /* SM_HTPW 11 Tablet X / MIDI Pitch Wheel */
123 "ModWh", /* SM_VTMW 12 Tablet Y / MIDI Mod Wheel */
124 "Breth", /* SM_LPBR 13 LongPot / MIDI Breath Controller */
125};
126
127struct curpak pt_flds = {
128
129 stdctp5, /* curtype */
130 nokey, /* premove */
131 aftercm, /* pstmove */
132 cxkstd, /* cx_key */
133 cykstd, /* cy_key */
134 smxupd, /* cx_upd */
135 smyupd, /* cy_upd */
136 stopcm, /* xy_up */
137 nokey, /* xy_dn */
138 ptxkey, /* x_key */
139 ptekey, /* e_key */
140 ptmkey, /* m_key */
141 ptdkey, /* d_key */
142 nonf, /* not_fld */
143 (struct fet *)NULL, /* curfet */
144 ptboxes, /* csbp */
145 crate1, /* cratex */
146 crate1, /* cratey */
147 CT_SMTH, /* cmtype */
148 CTOX(2), /* cxval */
149 RTOY(DATAROW) /* cyval */
150};
151
152/*
153
154*/
155
156/*
157 =============================================================================
158 ptmkey() -- M key processing for the patch display
159 =============================================================================
160*/
161
162void ptmkey(void)
163{
164 register int16_t nc;
165
166 if (astat) {
167
168 if (stccol EQ 48) {
169
170 if (ss_sqsw EQ 0) {
171
172 (*xy_dn)(); /* handle KEY_DOWN functions */
173
174 (*premove)(); /* handle PRE-MOVE functions */
175
176 nc = (*curtype)(); /* get new CURSOR TYPE wanted */
177
178 cvtime = syrate;
179 ncvwait = curhold;
180
181 ss_ptsw = -1;
182 cmtype = nc;
183 cvwait = 1;
184 }
185
186 } else
187 stdmkey();
188
189 } else {
190
191 if (stccol EQ 48) {
192
193 ss_ptsw = 0;
194 cvwait = 1;
195 ncvwait = cvtime;
196 cmfirst = TRUE;
197
198 if (ss_sqsw EQ 0)
199 (*xy_up)();
200
201 (*pstmove)(); /* handle POST-MOVE functions */
202
203 } else
204 stdmkey();
205 }
206}
207
208/*
209
210*/
211
212/*
213 =============================================================================
214 ptekey() -- E key processing for the patch display
215 =============================================================================
216*/
217
218void ptekey(void)
219{
220 register int16_t nc;
221
222 if (astat) {
223
224 if (stccol EQ 48) {
225
226 if (ss_sqsw EQ 0) {
227
228 (*xy_dn)(); /* handle KEY_DOWN functions */
229
230 (*premove)(); /* handle PRE-MOVE functions */
231
232 nc = (*curtype)(); /* get new CURSOR TYPE wanted */
233
234 cvtime = syrate;
235 ncvwait = curhold;
236
237 ss_ptsw = 1;
238 cmtype = nc;
239 cvwait = 1;
240 }
241
242 } else
243 select();
244
245 } else {
246
247 if (stccol EQ 48) {
248
249 ss_ptsw = 0;
250 cvwait = 1;
251 ncvwait = cvtime;
252 cmfirst = TRUE;
253
254 if (ss_sqsw EQ 0)
255 (*xy_up)();
256
257 (*pstmove)(); /* handle POST-MOVE functions */
258
259 } else
260 select();
261 }
262}
263
264/*
265
266*/
267
268/*
269 =============================================================================
270 ptxkey() -- X key processing for the patch display
271 =============================================================================
272*/
273
274void ptxkey(void)
275{
276 register int16_t i, cp, pp, sp, stm;
277
278 if (NOT astat) /* only on key closures ... */
279 return;
280
281 if (inrange(stccol, 2, 13)) { /* definer -- clear definer */
282
283 if (ptecpos AND NOT ptbflag) { /* refresh data entry stuff */
284
285 memcpyw(&ptebuf.defnum, &patches[ptecpos].defnum, 6);
286 pteset = TRUE;
287 pte2buf();
288 }
289
290 ptedef = NULL_DEF;
291 ptedfok = TRUE;
292
293 memset(&ptdebuf[2], ' ', 12);
294
295 for (i = 0; i < 48; i++)
296 if (ptdebuf[i] EQ '\0')
297 ptdebuf[i] = ' ';
298
299 ptdebuf[0] = '\260';
300 ptdebuf[48] = '\0';
301
302 UpdVid(7, 0, ptdebuf, PTEATR);
303 movectc(stcrow, stccol);
304
305/*
306
307*/
308 } else if (inrange(stccol, 15, 26)) { /* stimulus -- clear stimulus */
309
310 if (ptecpos AND NOT ptbflag) { /* refresh data entry stuff */
311
312 memcpyw(&ptebuf.defnum, &patches[ptecpos].defnum, 6);
313 pteset = TRUE;
314 pte2buf();
315 }
316
317 ptestm = NULL_DEF;
318 ptestok = FALSE;
319
320 memset(&ptdebuf[15], ' ', 12);
321
322 for (i = 0; i < 48; i++)
323 if (ptdebuf[i] EQ '\0')
324 ptdebuf[i] = ' ';
325
326 ptdebuf[0] = '\260';
327 ptdebuf[48] = '\0';
328
329 UpdVid(7, 0, ptdebuf, PTEATR);
330 movectc(stcrow, stccol);
331
332 } else if (inrange(stccol, 28, 40)) { /* destination -- clear line */
333
334 voidpb(); /* void the patch buffer */
335
336 ptdebuf[0] = '\260';
337 ptdebuf[48] = '\0';
338
339 UpdVid(7, 0, ptdebuf, PTEATR);
340 movectc(stcrow, stccol);
341/*
342
343*/
344 } else if (inrange(stccol, 42, 46)) { /* datum -- delete the patch */
345
346 if (ptecpos) {
347
348 cp = ptecpos; /* setup indices */
349 pp = patches[cp].prevstm;
350 sp = patches[cp].nextstm;
351
352 stm = patches[cp].stmnum; /* get stimulus used */
353#if DEBUGXP
354 if (debugsw AND debugxp)
355 printf("ptxkey(): DELETING PATCH pp = %d cp = %d sp = %d\n",
356 pp, cp, sp);
357#endif
358
359 if (pp) /* adjust predecessor */
360 patches[pp].nextstm = sp;
361 else /* adjust stmptr */
362 stmptr[TRG_MASK & stm] = sp;
363
364 if (sp) /* adjust successor */
365 patches[sp].prevstm = pp;
366
367 if (sp = findnxt(cp)) /* adjust ptecpos */
368 ptecpos = sp;
369 else if (pp = findprv(cp))
370 ptecpos = pp;
371 else
372 ptecpos = 0;
373
374 pt_del(cp); /* delete the patch entry */
375/*
376
377*/
378 for (i = 0; i < NDEFSTMS; ++i) { /* adjust defptr list */
379
380 if (cp = defptr[i]) { /* in use ? */
381
382 pp = 0; /* initial predecessor */
383
384 while (cp) { /* check the chain */
385
386 sp = defents[cp].nextdef; /* successor */
387
388 if (defents[cp].stm EQ stm) {
389
390#if DEBUGXP
391 if (debugsw AND debugxp) {
392
393 printf("ptxkey(): DELETING DEF trg=$%04.4X stm=$%04.4X\n",
394 i, stm);
395
396 printf("ptxkey(): DELETING DEF pp=%d cp=%d sp=%d\n",
397 pp, cp, sp);
398 }
399#endif
400
401 if (pp) /* adjust predecessor */
402 defents[pp].nextdef = sp;
403 else /* adjust defptr */
404 defptr[i] = sp;
405
406 dt_del(cp); /* delete def entry */
407
408 } else {
409
410 pp = cp; /* update predecessor index */
411 }
412
413 cp = sp; /* next defent */
414 }
415 }
416 }
417
418 dptw(); /* update the display */
419 }
420 }
421}
422
423/*
424
425*/
426
427/*
428 =============================================================================
429 dspdfst() -- convert a patch DEF or STM value for display
430 =============================================================================
431*/
432
433void dspdfst(int8_t *buf, uint16_t val)
434{
435 register uint16_t chan, port, stim;
436
437 if (val EQ NULL_DEF) { /* handle possible blank definer */
438
439 strcpy(buf, " ");
440 return;
441 }
442
443 port = (val >> 11) & 0x0003;
444 chan = (val >> 7) & 0x000F;
445 stim = val & 0x007F;
446
447 switch (port) { /* use port to decode possible types */
448
449 case 0: /* MIDI-1 - Keys */
450 case 1: /* MIDI-2 - Keys */
451
452 sprintf(buf, "%s %03u %u %02u",
453 (val & 0x8000) ? "Rel" : "Key",
454 1 + stim, 1 + port, 1 + chan);
455
456 break;
457/*
458
459*/
460
461 case 2: /* Local Keys */
462
463 switch (chan) { /* use channel to further decode */
464
465 case 0: /* Keys - Local Keyboard */
466
467 sprintf(buf, "%s %03u L ",
468 (val & 0x8000) ? "Rel" : "Key",
469 1 + stim);
470
471 break;
472
473 case 2: /* Triggers */
474
475 sprintf(buf, "Trig %02u ", 1 + stim);
476 break;
477
478 case 3: /* Pulses */
479
480 sprintf(buf, "Pulse %u ", 1 + stim);
481 break;
482
483 default: /* spurious type -- shouldn't happen */
484
485 sprintf(buf, "%s?? %03u L %02u",
486 (val & 0x8000) ? "r" : "c",
487 1 + stim, 1 + chan);
488 break;
489
490 }
491
492 break;
493
494 default: /* spurious port -- should never happen */
495
496 sprintf(buf, "??? %03u %u %02u", 1 + stim, 1 + port, 1 + chan);
497 break;
498 }
499}
500
501/*
502
503*/
504
505/*
506 =============================================================================
507 dfpdat() -- convert FPU datum for display
508 =============================================================================
509*/
510
511int8_t *dfpdat(struct patch *pp)
512{
513 static int8_t buf[32];
514 uint16_t sgn, vp1, vp2;
515 int16_t val;
516
517 val = pp->padat2;
518
519 switch (pp->padat1) {
520
521 case PSA_SRC: /* source */
522
523 strcpy(buf, smdata[val]);
524 break;
525
526 case PSA_MLT: /* multiplier */
527
528 fr2dec(val, ebuf);
529
530 buf[0] = ebuf[3];
531 buf[1] = ebuf[0];
532 buf[2] = '.';
533 buf[3] = ebuf[1];
534 buf[4] = ebuf[2];
535 buf[5] = '\0';
536 break;
537/*
538
539*/
540 case PSA_VAL: /* value */
541
542 val >>= 5;
543
544 if (val < 0) {
545
546 val = -val;
547 sgn = '-';
548
549 } else {
550
551 sgn = '+';
552 }
553
554 vp1 = val / 100;
555 vp2 = val - (vp1 * 100);
556
557 if (vp1 > 9) {
558
559 vp1 = 0;
560
561 if (sgn EQ '+')
562 sgn = '\240';
563 else
564 sgn = '\241';
565 }
566
567 sprintf(buf, "%c%u.%02u", sgn, vp1, vp2);
568 break;
569/*
570
571*/
572 case PSA_TIM: /* time */
573
574 vp1 = fromfpu(val);
575
576 sprintf(buf, "%5u", vp1);
577 break;
578
579 case PSA_FNC: /* function / control */
580
581 if ((PE_SPEC & pp->paspec) EQ PA_AUX)
582 sprintf(buf, "%s", (val & 0x0001) ? "On " : "Off ");
583 else
584 sprintf(buf, "%s", (val & 0x0001) ? "Start" : "Stop ");
585
586 break;
587
588 default:
589
590 sprintf(buf, "$%04.4X", val);
591 break;
592 }
593
594 return(buf);
595}
596
597/*
598
599*/
600
601/*
602 =============================================================================
603 pafpu1() -- convert patch for display -- aaaaa ssss tn ddddd
604
605 Level, Filtr, Fil Q, Loctn, Dynmc
606 =============================================================================
607*/
608
609void pafpu1(int8_t *bf, int8_t *ad, uint16_t gt, uint16_t gn, struct patch *pp)
610{
611 sprintf(bf, "%s %s %c%c %s", ad, stdata[pp->padat1], gt, gn, dfpdat(pp));
612}
613
614/*
615 =============================================================================
616 pafpu2() -- convert patch for display -- aaa n ssss tn ddddd
617
618 Index, Freq
619 =============================================================================
620*/
621
622void pafpu2(int8_t *bf, int8_t *ad, uint16_t os, uint16_t gt, uint16_t gn, struct patch *pp)
623{
624 sprintf(bf, "%s %d %s %c%c %s", ad, os, stdata[pp->padat1], gt, gn, dfpdat(pp));
625}
626
627/*
628 =============================================================================
629 pafpu3() -- convert patch for display -- aaaaa ssss ddddd
630
631 Aux, Rate, Inten, Depth, Vlt
632 =============================================================================
633*/
634
635void pafpu3(int8_t *bf, int8_t *ad, struct patch *pp)
636{
637 sprintf(bf, "%s %s %s", ad, stdata[pp->padat1], dfpdat(pp));
638}
639
640/*
641
642*/
643
644/*
645 =============================================================================
646 dspdest() -- convert patch destination and datum for display
647 =============================================================================
648*/
649
650void dspdest(int8_t *buf, struct patch *pp)
651{
652 uint16_t chan, osc, port, stim, vg, vgt, vgn, vp1, vp2, sgn;
653 int16_t val;
654 int8_t buf2[16], *rtype;
655
656 port = (pp->pasuba >> 11) & 0x0003; /* for trg types */
657 chan = (pp->pasuba >> 7) & 0x000F;
658 stim = pp->pasuba & 0x007F;
659
660 vg = (pp->pasuba >> 8) & 0x00FF; /* for vg types */
661 osc = (pp->pasuba & 0x00FF) + 1;
662
663 if (vg > 11) {
664
665 vgt = 'G';
666 vgn = vg - 11;
667
668 } else {
669
670 vgt = 'V';
671 vgn = vg + 1;
672 }
673
674 vgn = vgn + ((vgn > 9) ? '\242' : '0');
675
676/*
677
678*/
679 switch (PE_SPEC & pp->paspec) {
680
681 case PA_KEY: /* key action */
682
683 sprintf(buf, "K %03u %u %02u %s",
684 1 + stim, 1 + port, 1 + chan,
685 trdata[pp->padat2 & 0x0003]);
686
687 break;
688
689 case PA_TRG:
690
691 sprintf(buf, "Trigger %02u %s",
692 1 + stim,
693 ssdata[pp->padat2 & 0x0001]);
694
695 break;
696
697 case PA_PLS:
698
699 sprintf(buf, "Pulse %u %s",
700 1 + stim,
701 trdata[pp->padat2 & 0x0003]);
702
703 break;
704/*
705
706*/
707 case PA_LED:
708
709 if (pp->pasuba & 0x0001) {
710
711 sprintf(buf, "LED %c %c%c%c%c",
712 'A' + pp->pasuba,
713 '0' + ((pp->padat1 >> 14) & 0x0003),
714 '0' + ((pp->padat1 >> 12) & 0x0003),
715 '0' + ((pp->padat1 >> 10) & 0x0003),
716 '0' + ((pp->padat1 >> 8) & 0x0003));
717
718 } else {
719
720 sprintf(buf, "LED %c %c%c%c",
721 'A' + pp->pasuba,
722 '0' + ((pp->padat1 >> 14) & 0x0003),
723 '0' + ((pp->padat1 >> 12) & 0x0003),
724 '0' + ((pp->padat1 >> 10) & 0x0003));
725 }
726
727 break;
728
729 case PA_SLIN:
730
731 sprintf(buf, "Seq %02u Lin %03u",
732 1 + pp->pasuba,
733 pp->padat1);
734
735 break;
736
737 case PA_SCTL:
738
739 sprintf(buf, "Seq %02u Ctl %s",
740 1 + pp->pasuba,
741 ssdata[pp->padat2 & 0x0001]);
742
743 break;
744
745 case PA_TUNE:
746
747 sprintf(buf, "Tune Table %u",
748 pp->padat1);
749
750 break;
751/*
752
753*/
754 case PA_RSET:
755
756 rtype = "Set";
757 goto doregs;
758
759 case PA_RADD:
760
761 rtype = "Add";
762
763doregs:
764
765 if (pp->padat1 & 0x0001) {
766
767 sprintf(buf, "Reg %02u %s R%02u",
768 1 + pp->pasuba, rtype,
769 1 + pp->padat2);
770
771 } else {
772
773 if ((val = pp->padat2) < 0) {
774
775 sgn = '-';
776 val = - val;
777
778 } else {
779
780 sgn = '+';
781 }
782
783 sprintf(buf, "Reg %02u %s %c%02u",
784 1 + pp->pasuba, rtype,
785 sgn, val);
786 }
787
788 break;
789
790 case PA_INST:
791
792 sprintf(buf, "Instrument %c%c %02u",
793 vgt, vgn, pp->padat1);
794
795 break;
796/*
797
798*/
799 case PA_OSC:
800
801 val = pp->padat2 >> 1;
802
803 switch (pp->padat1) {
804
805 case PSO_INT: /* interval */
806
807 if (val < 0) {
808
809 sgn = '-';
810 val = -val;
811
812 } else {
813
814 sgn = '+';
815 }
816
817 sprintf(buf, "Osc %u Int %c%c %c%04u",
818 osc, vgt, vgn, sgn, val);
819
820 break;
821
822 case PSO_RAT: /* ratio */
823
824 int2rat(val);
825
826 sprintf(buf, "Osc %u Rat %c%c %s",
827 osc, vgt, vgn, ebuf);
828
829 break;
830
831 case PSO_FRQ: /* frequency */
832
833 vp1 = val / 10;
834 vp2 = val - (vp1 * 10);
835
836 sprintf(buf, "Osc %u Frq %c%c %02u.%u",
837 osc, vgt, vgn, vp1, vp2);
838
839 break;
840/*
841
842*/
843 case PSO_PCH: /* pitch */
844
845 cnvc2p(ebuf, val);
846
847 sprintf(buf, "Osc %u Pch %c%c %s",
848 osc, vgt, vgn, ebuf);
849
850 break;
851
852 default:
853
854 break;
855 }
856
857 break;
858/*
859
860*/
861 case PA_WAVA:
862
863 sgn = 'A';
864 goto dowaves;
865
866 case PA_WAVB:
867
868 sgn = 'B';
869
870dowaves:
871
872 sprintf(buf, "Waveshape%c %c%c %02u",
873 sgn, vgt, vgn, pp->padat1);
874
875 break;
876
877 case PA_CNFG:
878
879 sprintf(buf, "Configure %c%c %02u",
880 vgt, vgn, pp->padat1);
881
882 break;
883/*
884
885*/
886 case PA_LEVL:
887
888 pafpu1(buf, "Level", vgt, vgn, pp);
889 break;
890
891 case PA_INDX:
892
893 pafpu2(buf, "Ind", osc, vgt, vgn, pp);
894 break;
895
896 case PA_FREQ:
897
898 pafpu2(buf, "Frq", osc, vgt, vgn, pp);
899 break;
900
901 case PA_FILT:
902
903 pafpu1(buf, "Filtr", vgt, vgn, pp);
904 break;
905
906 case PA_FILQ:
907
908 pafpu1(buf, "Fil Q", vgt, vgn, pp);
909 break;
910
911 case PA_LOCN:
912
913 pafpu1(buf, "Loctn", vgt, vgn, pp);
914 break;
915
916 case PA_DYNM:
917
918 pafpu1(buf, "Dynmc", vgt, vgn, pp);
919 break;
920/*
921
922*/
923 case PA_AUX:
924
925 pafpu3(buf, "Aux ", pp);
926 break;
927
928 case PA_RATE:
929
930 pafpu3(buf, "Rate ", pp);
931 break;
932
933 case PA_INTN:
934
935 pafpu3(buf, "Inten", pp);
936 break;
937
938 case PA_DPTH:
939
940 pafpu3(buf, "Depth", pp);
941 break;
942
943 case PA_VOUT:
944
945 sprintf(buf2, "Vlt %u", pp->pasuba);
946 pafpu3(buf, buf2, pp);
947 break;
948
949 default:
950
951 break;
952 }
953}
954
955/*
956
957*/
958
959/*
960 =============================================================================
961 ptfield() -- setup field routines for the patch editor
962 =============================================================================
963*/
964
965void ptfield(void)
966{
967 curset(&pt_flds);
968
969#if USEVECTR
970 if (usevect) {
971
972 cx_key = cxkstd;
973 cy_key = cykstd;
974 }
975#endif
976
977}
978
Note: See TracBrowser for help on using the repository browser.