OSDN Git Service

最初のコミット
[winaudioj/stedx.git] / assign.cpp
1 /*
2  * STed: assign.c (assign)
3  */
4 //#include "stdafx.h"
5
6 #include        "sted.h"
7
8 static char     *filter_name[14]={
9   "PROGRAM CHANGE",
10   "PITCH BEND",
11   "AFTER TOUCH(CH. )",
12   "AFTER TOUCH(POLY)",
13   "PEDAL(HOLD1)",
14   "MODULATION",
15   /*            "BREATH",2*/
16   "VOLUME",
17   "EXPRESSION",
18   /*            "PANPOT",10*/
19   "ALL NOTE OFF",
20   "CONTROL CHANGE",
21   "EXCLUSIVE MESSAGE",
22   "KEY# H:    L:",
23   "KEY SHIFT   :",
24   "VELOCITY    :",
25 };
26 /*
27 DISPLAY              
28 GATE TIME (GT)   :
29 VELOCITY  (VEL)  :
30 PITCH BEND       :
31 VOLUME           :
32 MODULATION       :
33 EXPRESSION       :
34 NOTE HEAD        :
35 NOTE HOOK        :
36 TIME SCALE x 2   :
37 QUANTIZE  (6)    :
38 TEMPO            :
39 */
40
41 unsigned char   stgt_name[10][4]={
42   "æ^","æ_","æ`","æa","æb","æc","æd","æe","æf","æh"};
43
44 /***************************/
45 void    rhy_as()
46 {
47   int   a,i,j,xx,x=0,y=0,f,gy,sh;
48   char  tmp1[256];
49   int   rno[32];
50
51   for(i=0;i<32;i++){rno[i]=rhyno[i][0];}
52
53   gy=scyp;
54   fill(0,544,767,1023,0);
55 top:
56   fill(2,666,564,708,14);box(2,708,564,986,14,65535);
57   box(4,710,282,984,14,65535);box(284,710,562,984,14,65535);
58   box(6,618,200+80,660,14,65535);box(8,620,198+80,658,14,65535);
59   home2(512);
60   rhy_as_para();
61
62   es=0;B_COLOR(3);
63
64   B_LOCATE(1,10);B_PRINT("RHYTHM ASSIGN");B_LOCATE(1,11);
65   B_PRINT(" NO RHYTHM NAME     K#         GT  ");
66   B_PRINT(" NO RHYTHM NAME     K#         GT  ");
67 redis:
68   for(i=0;i<32;i++){
69     int a;
70     B_LOCATE((i>>4)*35+2,(i&15)+13);
71     B_PRINT(fstr(i+1,2));B_PRINT(":");B_PRINT(spadd(rhyna[i],14));
72     a=rhyno[i][0];
73     if(a==0){
74       B_PRINT(" OFF      ");
75     }else{
76       B_PRINT(fstr(a,4));B_PRINT(" (");
77       B_PRINT(keystr(a));B_PRINT(")");
78     }
79     B_PRINT(fstr(rhyno[i][1],5));
80   }
81
82 ass_ret:
83   while( 1){
84     if(x<3){f=0;}else{f=1;}
85     i=y+f*16;xx=f*35+5;f=x-f*3;
86
87     j=3;
88     if( f==0 ){
89       j=14;
90     }else{
91       if( f==1 ){xx=xx+15;}else{xx=xx+26;}
92     }
93
94     tcur(xx,y+13,j,3);
95     a=inkey2();sh=B_SFTSNS();
96     if(a>='a' && a<='z'){a=a-32;}
97
98     if(a==0x15){
99       int a;
100       a=rhy_stest[2];if(gs_mode[16]&4){a*=256;}
101       s_test(rhy_stest[0],a,rhy_stest[1],rhyno[i][0],rhy_stest[4]);
102
103     }
104     if(a=='r'||a=='R'){s_test(11,-1,64,rhyno[i][0],rhy_stest[4]);}
105     if(a=='e'||a=='E'){s_test(11,-1,65,rhyno[i][0],rhy_stest[4]);}
106
107     tcur(xx,y+13,j,3);
108
109     if( a==0x05 ){y--;if( y<0 ){y=15;}}
110     if( a==0x18 ){y++;if( y>15 ){y=0;}}
111     if( a==0x13 ){x--;if( x<0 ){x=5;}}
112     if( a==0x04 ){x++;if( x>5 ){x=0;}}
113     if( a==0x0b ){y=0;x=0;goto redis;}
114
115     if( a==9 ){
116       msg("No.=");j=vinput(f*16+y+1,0x802);msg_clr();
117       if(es==0 && j>0 && j<=32){j-=1;x=(j>>4)*3;y=j&15;}
118
119     }
120     if( a==12 ){
121       msg(_("Initialize assign"));
122       if(yn_sel()>0){msg_clr();rhinit();goto redis;}
123     }
124     if( a==32 ){
125       rhinit2(i);goto redis;
126     }
127     if(a=='C'){
128       int n;
129       char      tmp0[64];
130
131       B_LOCATE(6,7);
132       strcpy(tmp0,chstr(rhy_stest[0]));
133       sinput(tmp0,0x803);n=strch(rhy_stest[0],tmp0);
134       /* May.06.2001 NAGANO Daisuke <breeze.nagano@nifty.ne.jp> */
135       if ( issted3 ) {
136         if(es==0 && n>=0 && n<=STED3_MAX_PORT_NUMBER*16){rhy_stest[0]=n;}
137       }
138       else {
139         if(es==0 && n>=0 && n<=32){rhy_stest[0]=n;}
140       }
141       rhy_as_para();
142     }
143     if(a=='B'){
144       int n;
145
146       n=rhy_stest[2];
147       B_LOCATE(21,7);n=vinput(n,0x803);
148       if(es==0 && n>=-1 && n<=127){rhy_stest[2]=n;}
149       rhy_as_para();
150     }
151     if(a=='V'){
152       int n;
153
154       n=rhy_stest[4];
155       B_LOCATE(29,7);n=vinput(n,0x803);
156       if(es==0 && n>=0 && n<=127){rhy_stest[4]=n;}
157       rhy_as_para();
158     }
159     if(a=='G'){
160       int n;
161       if((cmdflag&0x1000)==0){goto retimsel;}
162     timnore:
163       n=rhy_stest[1];
164       if((cmdflag&0x20)!=0 ){n++;}
165       B_LOCATE(6,8);n=vinput(n,0xb03);
166       if((cmdflag&0x20)!=0 ){n--;}
167
168       if(es==0){
169         if(ecode==0x18){
170           int a;
171         retimsel:
172           /*                                    if(rhy_stest[2]>=0){a=rhy_stest[2]*256;}*/
173
174           a=0;
175           if(rhy_stest[2]>=0){
176             a=rhy_stest[2];if(gs_mode[16]&4){a*=256;}
177           }
178
179           n=timsel(rhy_stest[0],a,36,rhy_stest[1]);
180
181           if(n<0){goto timnore;}
182           if(n>=0){n=n&0xff;}
183         }
184         if(n>=-1 && n<128){rhy_stest[1]=n;}
185       }
186       rhy_as_para();
187     }
188
189     if( a==13 ){
190       int       n;
191     timnore2:
192       B_LOCATE(xx,y+13);
193       if( f==0 ){
194         sinput(rhyna[i],14);
195       }else{
196         if( f==1 ){
197           b_striS(tmp1,256,rhyno[i][0]);sinput(tmp1,0xb03);
198           if(es==0){
199             n=ctc(rhyno[i][0],tmp1,0);
200             if(ecode==0x18){
201               tdis(xx,(i&15)+13,tmp1,j,11);
202               n=rhy_stest[1];if(n<0){n=0;}
203               if(rhy_stest[2]>=0){n+=rhy_stest[2]*256;}
204               n=timsel(rhy_stest[0]+0x100,n,36,0);
205               if(n<0){goto timnore2;}
206             }
207             if( n>=0 && n<128 ){
208               int as,bk;
209               rhyno[i][0]=n;
210               as=tim_asin[rhy_stest[0]];
211               bk=rhy_stest[1];
212               if(as==8 || as==10 || as==12 || as==14){
213                 varia(tmp1,bk,n,as);
214                 tmp1[15]=0;strcpy(rhyna[i],tmp1+1);
215               }
216               if(as==2 && n){
217                 if(n>=24){
218                   strcpy(rhyna[i],tim_name[cm6[0x130+(n-24)*4]+128]);
219                 }else{
220                   rhyna[i][0]=0;
221                 }
222               }
223             }
224           }
225         }else{
226           n=vinput(rhyno[i][1],0x803);
227           if( n>=0 && n<=255){rhyno[i][1]=n;}
228         }
229       }
230       goto redis;
231     }
232
233     if( a>='0' && a<='9' ){
234       int       n;
235     timnore3:
236       B_LOCATE(xx,y+13);
237       if( f==0 ){
238         /*sinput(rhyna[i],14);*/
239       }else{
240         if( f==1 ){
241           tmp1[0]=a;tmp1[1]=0;sinput(tmp1,0x603);
242           if(es==0){
243             n=ctc(rhyno[i][0],tmp1,0);
244             if(ecode==0x18){
245               tdis(xx,(i&15)+13,tmp1,j,11);
246               n=rhy_stest[1];if(n<0){n=0;}
247               if(rhy_stest[2]>=0){n+=rhy_stest[2]*256;}
248               n=timsel(rhy_stest[0]+0x100,n,36,0);
249               if(n<0){goto timnore3;}
250             }
251             if( n>=0 && n<128 ){rhyno[i][0]=n;}
252           }
253         }else{
254           n=vinput(a-'0',0x403);
255           if( n>=0 && n<=255){rhyno[i][1]=n;}
256         }
257       }
258       goto redis;
259     }
260
261
262     if( (a=='+' || a=='>' || a=='.') && f>0 ){
263       int n=rhyno[i][f-1];
264       if(sh&1){n+=12;}else{n++;}
265       if( f==1 ){n=n&127;}else{n=n&255;}
266       rhyno[i][f-1]=n;
267       goto redis;
268     }
269     if( (a=='-' || a=='<' || a==',') && f>0 ){
270       int n=rhyno[i][f-1];
271       if(sh&1){n+=244;}else{n+=255;}
272       if( f==1 ){n=n&127;}else{n=n&255;}
273       rhyno[i][f-1]=n;
274       goto redis;
275     }
276
277     if( a=='L' ){
278       char      tmp0[256],tmp1[256],path2[256];
279
280       C_CLS_AL();
281
282       strcpy(path2,prt_path);tmp1[0]=0;
283       fsel(tmp1,path2,0x00b);
284       if( es==0 && tmp1[0]!=0){
285         strcpy(tmp0,path2);strcat(tmp0,tmp1);
286         msg(_("Loading Rhythm assign file"));
287         if(ras_load(tmp0)==0 ){msg_clr();
288         if(!(cnfflag&0x0008)){strcpy(prt_path,path2);}
289         }
290       }
291       goto top;
292     }
293     if( a=='S' ){
294       char      tmp0[256],tmp1[256],path2[256];
295
296       C_CLS_AL();
297
298       strcpy(path2,prt_path);tmp1[0]=0;
299       fsel(tmp1,path2,0x10b);
300       if( es==0 && tmp1[0]!=0){
301         strcpy(tmp0,path2);strcat(tmp0,tmp1);
302         msg(_("Saving Rhythm assign file"));
303         if(ras_save(tmp0)==0 ){msg_clr();
304         if(!(cnfflag&0x0008)){strcpy(prt_path,path2);}
305         }
306       }
307       goto top;
308     }
309
310     if(a=='A'){
311       int i,n,a;
312       msg(_("Change all rhythm name"));
313       a=yn_sel();msg_clr();if(a==0){goto ass_ret;}
314
315       for(i=0;i<32;i++){
316         n=rhyno[i][0];
317         if( n>=0 && n<128 /*&& rhyno[i][1]!=0*/){
318           int as,bk;
319           as=tim_asin[rhy_stest[0]];
320           bk=rhy_stest[1];
321           if(rhy_stest[2]>=0){bk+=rhy_stest[2]*256;}
322
323           if(as==8 || as==10 || as==12 || as==14){
324             varia(tmp1,bk,n,as);
325             tmp1[15]=0;strcpy(rhyna[i],tmp1+1);
326           }
327           if(as==2 && n){
328             if(n>=24){
329               strcpy(rhyna[i],tim_name[cm6[0x130+(n-24)*4]+128]);
330             }else{
331               rhyna[i][0]=0;
332             }
333           }
334         }else{
335           strcpy(rhyna[i],"");
336         }
337       }
338       goto redis;
339     }
340
341     if(a=='X'){
342       int ex,n;
343       char tmp0[128];
344       B_LOCATE(35,6);B_PRINT("ExChange Rhythm Data");
345       B_LOCATE(52,7);B_PRINT("Source No.=");B_PRINT(fstr(i+1,2));
346       B_LOCATE(48,8);B_PRINT("Distnation No.=");
347     exc1:                       ex=rhy_as_sel(i);if(ex==i){goto exc1;}
348     txerase(35*8,6*16,40*8,3*16);
349
350     if(ex>=0){
351       n=rhyno[i][0];rhyno[i][0]=rhyno[ex][0];rhyno[ex][0]=n;
352       n=rhyno[i][1];rhyno[i][1]=rhyno[ex][1];rhyno[ex][1]=n;
353
354       strcpy(tmp0,rhyna[i]);strcpy(rhyna[i],rhyna[ex]);
355       strcpy(rhyna[ex],tmp0);
356
357       goto redis;
358     }
359     }
360
361     if( a==27 ){
362       int i,j,f;
363       f=0;
364       for(i=0;i<31;i++){
365         for(j=i+1;j<32;j++){
366           if(rhyno[i][0]==rhyno[j][0] && rhyno[i][0]!=0){
367             f++;
368           }
369         }
370       }
371       if( f==0 ){break;}
372       msg(_("Find repetition of key number. Ok"));
373       if(yn_sel()<1){msg_clr();goto redis;}
374       break;
375
376     }
377   }
378
379   f=0;
380   for(i=0;i<32;i++){if(rno[i]!=rhyno[i][0]){f=1;}}
381
382   if(f!=0 && (cmdflag&0x800)==0){
383     int a=1;
384     if((cmdflag&0x400)==0){
385       msg(_("Replace all track datas"));
386       a=yn_sel();if(a==0){msg_clr();goto ass_ret;}
387     }
388     if(a>0){
389       int       i,j,n;
390       msg(_("Now processing ..."));
391       for(i=0;i<36;i++){
392         if((trrhy[i]&128)!=0){
393           for(j=0;j<tr_len[i];j=j+4){
394             unsigned char       a=trk[i][j];
395             if(a<128 && a!=0 && trk[i][j+2]>0 && trk[i][j+3]>0){
396               n=0;while(n<32){
397                 if(a==rno[n] && rhyno[n][0]!=0){
398                   trk[i][j]=rhyno[n][0];
399                   break;
400                 }
401                 n++;
402               }
403             }
404           }
405         }
406       }
407     }
408   }
409   msg_clr();
410   B_CLR_AL();home2(gy);
411 }
412
413 /***************************/
414 int     rhy_as_sel(int no)
415 {
416   int   a,j,xx,x,y;
417
418   x=no>>4;y=no&15;
419
420   while( 1){
421     xx=x*35+1;
422
423     tcur(xx,y+13,3,3);
424     a=inkey2();
425     tcur(xx,y+13,3,3);
426
427     if( a==0x05 ){y--;if( y<0 ){y=15;}}
428     if( a==0x18 ){y++;if( y>15 ){y=0;}}
429     if( a==0x13 ){x--;if( x<0 ){x=1;}}
430     if( a==0x04 ){x++;if( x>1 ){x=0;}}
431     if( a==0x0b ){y=0;x=0;}
432
433     if( a==9 ){
434       msg("No.=");j=vinput(x*16+y+1,0x802);msg_clr();
435       if(es==0 && j>0 && j<=32){j-=1;x=j>>4;y=j&15;}
436     }
437     if( a==13 ){return x*16+y;}
438     if( a==27 ){return -1;}
439
440   }
441 }
442
443 /***************************/
444 void    rhy_as_para()
445 {
446   B_LOCATE(2,7);B_PRINT("CH.=");B_PRINT(chstr(rhy_stest[0]));
447   B_LOCATE(11,7);
448   if(gs_mode[16]&4){
449     B_PRINT("BANK LSB=");
450   }else{
451     B_PRINT("BANK MSB=");
452   }
453   B_PRINT(fstr(rhy_stest[2],3));
454
455   B_LOCATE(25,7);B_PRINT("VEL=");B_PRINT(fstr(rhy_stest[4],3));
456
457   B_LOCATE(2,8);B_PRINT("PRG=");
458   B_PRINT(prog_name(rhy_stest[0],rhy_stest[2]*256,rhy_stest[1],1));
459 }
460
461 /***************************/
462 int     tagj(int *po,int fl)
463 {
464   int   a,i,y=0;
465   char  tmp0[128];
466
467   fill(315,566,453,1001,0);
468   box(316,588-16,444,999,14,65535);
469   box(317,626-16,443,998,14,65535);
470   fill(316,588-16,444,626-16,14);
471
472   es=0;
473   B_LOCATE(40,4);if(fl==0){B_PRINT("### TAG JUMP ##");}else{B_PRINT("### TAG SET ###");}
474   B_LOCATE(40,5);B_PRINT("NO.TR MEAS  ST ");
475
476   B_COLOR(3);
477
478   for(i=0 ;i<23;i++){
479     strcpy(tmp0," : ");tmp0[0]=i+'A';if(i==22){tmp0[0]=32;}
480
481     if(tag[i][0]>=0){
482       if(tag[i][0]<255){
483         strcat(tmp0,fstr(tag[i][0]+1,2));
484       }else{
485         strcat(tmp0,"--");
486       }
487       strcat(tmp0,fstr(tag[i][1],5));strcat(tmp0,fstr(tag[i][2],5));
488     }
489     B_LOCATE(40,i+7);B_PRINT(tmp0);
490   }
491   while( 1){
492     tmp0[0]=0;
493     if(tag[y][0]>=0){
494       if(tag[y][0]<255){
495         strcpy(tmp0,fstr(tag[y][0]+1,3));
496       }else{
497         strcpy(tmp0," --");
498       }
499       strcat(tmp0,fstr(tag[y][1],5));strcat(tmp0,fstr(tag[y][2],5));
500     }
501     tdis(42,y+7,tmp0,13,11);
502     a=inkey2();
503     tdis(42,y+7,tmp0,13,3);
504
505     if(a>='A' && a<='V'){y=a-'A';}
506     if(a>='a' && a<='v'){y=a-'a';}
507     if( a==0x05 ){y--;if( y<0 ){y=22;}}
508     if( a==0x18 ){y++;if( y>22 ){y=0;}}
509     if( a==0x0b ){y=0;break;}
510     if( a==13 || a==32 ){es= 0;break;}
511     if( a==27 ){es= 1;break;}
512   }
513   txerase(40*8,5*16-16,20*8,25*16+16);
514   fill(315,587-16,445,1001,0);
515
516   if( es==0 ){
517     if( fl==0 ){
518       if(tag[y][0]>=0){
519
520         tag[22][0]=track;tag[22][1]=meas_no(*po);
521         tag[22][2]=sttm_no(*po);
522
523         if(tag[y][0]<255){track=tag[y][0];}
524         *po=meas_add(tag[y][1]);
525         if(*po<0){
526           *po=tr_len[track]-4;
527         }else{
528           i=tag[y][2];*po=sttm_ad(*po,i);
529         }
530       }else{es=1;}
531     }else{
532       if(a==13){tag[y][0]=track;}else{tag[y][0]=255;}
533       tag[y][1]=meas_no(*po);tag[y][2]=sttm_no(*po);
534     }
535   }
536   return(es);
537 }
538
539 /***************************/
540  void   part_as()
541 {
542   int   ke,sh,i,j,x=0,y=0,scr,gy;
543   char  tmp[128];
544
545   gy=scyp;
546   scr=edit_scr;edit_scr=0;
547
548   fill(0,512+32,767,1023,0);
549   box(15,116+512,496,411+512,14,65535);
550   box(17,133+512,494,409+512,14,65535);
551   sdis(2, 84+512," PART ASSIGN",13,15,8);
552   sdis(2 ,116+512," CH.  PART NAME",30,15,14);
553   sdis(32,116+512," CH.  PART NAME",30,15,14);
554   home2(512);
555 top:
556   for(i=1;i<17;i++){
557     for(j=0;j<2;j++){
558       strcpy(tmp,chstr(i+j*16));
559       tdis(3+j*30,8+i,tmp,3,3);
560
561       ke=tim_asin[i+j*16];
562       if(ke!=0){strcpy(tmp,tim_head[ke-1]);}
563       else{strcpy(tmp,"No Assign");}
564       tdis(8+j*30,8+i,tmp,20,3);
565     }
566   }
567
568   while( 1){
569     int nn=y+x*16+1;
570     ke=tim_asin[nn];
571     if(ke!=0){strcpy(tmp,tim_head[ke-1]);}
572     else{strcpy(tmp,"No Assign");}
573
574     tdis(x*30+8,9+y,tmp,20,11);
575     ke=inkey2();sh=B_SFTSNS();
576     tdis(x*30+8,9+y,tmp,20,3);
577
578     if(sh&4){
579       int       ex;
580       char      t[32];
581       t[0]=ke;t[1]=0;
582       ex=str_search("1234567890,./*-+=\x0d",t);
583       if(ex>0 && ex<19){ex--;x=ex>>4;y=ex&15;ke=0;}
584     }
585
586     if( ke==27 ){break;}
587     if( ke==13 ){
588       tdis(x*30+8,9+y,tmp,20,10);
589       i=part_sel(tim_asin[nn]);
590       if(i>=0){tim_asin[nn]=i;}
591     }
592
593     if( ke>='0' && ke<='9' ){
594       tim_asin[nn]=ke-'0';
595     }
596     if((ke>='a' && ke<='f')||(ke>='A' && ke<='F')){
597       tim_asin[nn]=(ke&15)+9;
598     }
599
600     if( ke==0x05 ){y--;if( y<0 ){y=15;}}
601     if( ke==0x18 ){y++;if( y>15 ){y=0;}}
602     if( ke==0x13 || ke==0x04 ){x++;if( x>1 ){x=0;}}
603
604     if( ke==9 ){
605       msg("No.=");j=vinput(x*16+y+1,0x802);msg_clr();
606       if(es==0 && j>0 && j<=32){j-=1;x=j>>4;y=j&15;}
607     }
608
609     if( ke==12 ){
610       msg(_("Initialize assign"));
611       if(yn_sel()>0){msg_clr();asin_init();goto top;}
612     }
613   }
614   edit_scr=scr;
615   C_CLS_AL();home2(gy);
616 }
617
618 /***************************/
619 int     part_sel(int yy)
620 {
621   int   ke,i,j,y=yy;
622   char  tmp[128];
623
624   box(527,116+512,752,411+512,14,65535);
625   box(529,133+512,750,409+512,14,65535);
626   sdis(66,84+512," PART SELECT",13,15,8);
627   sdis(66,116+512," No.  PART NAME",28,15,14);
628   home2(512);
629
630   for(i=0;i<16;i++){
631     strcpy(tmp,fstr(i,2));
632     tdis(67,9+i,tmp,3,3);
633
634     if(i!=0){strcpy(tmp,tim_head[i-1]);}
635     else{strcpy(tmp,"No Assign");}
636     tdis(70,9+i,tmp,20,3);
637   }
638
639   while( 1){
640     if(y!=0){strcpy(tmp,tim_head[y-1]);}
641     else{strcpy(tmp,"No Assign");}
642
643     tdis(70,9+y,tmp,20,11);
644     ke=inkey2();
645     tdis(70,9+y,tmp,20,3);
646
647     if( ke==27 ){y=-1;break;}
648     if( ke==13 ){break;}
649     if( ke==0x05 ){y--;if( y<0 ){y=15;}}
650     if( ke==0x18 ){y++;if( y>15 ){y=0;}}
651
652     if( ke==9 ){
653       msg("No.=");j=vinput(y+1,0x802);msg_clr();
654       if(es==0 && j>0 && j<=16){j-=1;y=j&15;}
655     }
656
657   }
658   txerase(527,32,767,511);
659   fill(527,512+32,767,1023,0);
660   return y;
661 }
662
663 /***************************/
664  void   rec_filter(int md)
665 {
666   int   i,y=0,x=0,gy;
667   char  tmp[128];
668
669   gy=scyp;
670
671   if(md==0){
672     fill(0,512+32,767,1023,0);
673   }else{
674     txerase(22*8,9*16,59*8,18*16);
675     fill(174,115+512,641,379+512,0);
676   }
677
678   box(174,115+512,361,379+512,14,65535);
679   box(176,133+512,359,377+512,14,65535);
680   sdis(22,116+512," RECORD FILTER",23,15,14);
681
682   box(366,115+512,641,379+512,14,65535);
683   box(368,133+512,639,377+512,14,65535);
684
685   box(495,133+512+4,511,377+512-4,14,65535);
686
687   sdis(46,116+512," Control Change Convert",34,15,14);
688   sdis(46+16,128+512+16*7+8,"->",2,15,-1);
689
690   home2(512);
691 top:
692   for(i=0;i<14;i++){
693     int ke,ka,kb;
694
695     tdis(23,9+i,filter_name[i],18,3);
696     ke=rfilt[i][0];
697     if(ke){strcpy(tmp,": ON");}else{strcpy(tmp,":OFF");}
698     tdis(40,9+i,tmp,4,3);
699
700     ka=rfilt[i+16][0];kb=rfilt[i+16][1];
701
702     if(ka==128){strcpy(tmp,"---  --------");}else{
703       strcpy(tmp,fstr(ka,3));strcat(tmp,"  ");
704       strcat(tmp,ctrl_type(ka));}
705     tdis(41+7,9+i,tmp,13,3);
706
707     if(kb==128){strcpy(tmp,"---  --------");}else{
708       strcpy(tmp,fstr(kb,3));strcat(tmp,"  ");
709       strcat(tmp,ctrl_type(kb));}
710     tdis(41+24,9+i,tmp,13,3);
711   }
712   tdis(40-10,9+11,fstr(rfilt[11][1],3),3,3);
713   tdis(40-4,9+11,fstr(rfilt[11][2],3),3,3);
714   tdis(40-4,9+12,fstr(rfilt[12][1]-128,3),3,3);
715   tdis(40-4,9+13,fstr(rfilt[13][1],3),3,3);
716
717   while( 1){
718     int ke;
719
720     tcur(41+x*7,9+y,3,3);
721     if(x){tcur(41+x*7+17,9+y,3,3);}
722
723     ke=inkey2();
724     tcur(41+x*7,9+y,3,3);
725     if(x){tcur(41+x*7+17,9+y,3,3);}
726
727     if( ke==27 ){break;}
728     if( ke==13 ){
729       if(x==0){rfilt[y][0]=1-rfilt[y][0];
730       if(rfilt[y][0]){tdis(41,y+9,"ON ",3,3);}
731
732       if(y==11 && rfilt[y][0]){
733         int ct;
734         char tmp0[64];
735
736         B_LOCATE(41-11,y+9);tmp0[0]=0;
737         b_striS(tmp0,64,rfilt[y][1]);
738         sinput(tmp0,0xb04);
739
740         if(es==0){
741           ct=ctc(60,tmp0,0);
742           if(ct>=0 && ct<=127){rfilt[y][1]=ct;}
743
744           B_LOCATE(41-5,y+9);tmp0[0]=0;
745           b_striS(tmp0,64,rfilt[y][2]);
746           sinput(tmp0,0xb04);
747
748           if(es==0){
749             ct=ctc(60,tmp0,0);
750             if(ct>=0 && ct<=127){rfilt[y][2]=ct;}
751           }
752         }
753       }
754       if(y==12 && rfilt[y][0]){
755         int ct;
756         ct=rfilt[y][1]-128;
757         B_LOCATE(41-5,y+9);ct=vinput(ct,0x803);
758         if(es==0 && (ct>=-99 && ct<99)){
759           rfilt[y][1]=ct+128;}
760       }
761       if(y==13 && rfilt[y][0]){
762         int ct;
763         char tmp0[64];
764
765         B_LOCATE(41-5,y+9);tmp0[0]=0;
766         b_striS(tmp0,64,rfilt[y][1]);
767         sinput(tmp0,0xb03);
768
769         if(es==0){
770           ct=str_val(tmp0);
771           if(ct>=0 && ct<=127){rfilt[y][1]=ct;}
772         }
773       }
774
775
776       }
777       if(x!=0){
778         int ct,ctl;
779         char tmp0[64];
780
781         B_LOCATE(41+7,y+9);tmp0[0]=0;
782         if(rfilt[y+16][0]<128){b_striS(tmp0,64,rfilt[y+16][0]);}
783         sinput(tmp0,0xb05);
784
785         if(es==0){
786           ct=spc_code(tmp0,&ctl);
787           if(ct==0xeb && ctl>=0){rfilt[y+16][0]=ctl;}
788
789           B_LOCATE(41+24,y+9);tmp0[0]=0;
790           if(rfilt[y+16][1]<128){b_striS(tmp0,64,rfilt[y+16][1]);}
791           sinput(tmp0,0xb05);
792
793           if(es==0){
794             ct=spc_code(tmp0,&ctl);
795             if(ct==0xeb && ctl>=0){rfilt[y+16][1]=ctl;}
796           }
797         }
798
799       }
800       goto top;}
801
802     if( ke==0x05 ){y--;if( y<0 ){y=13;}}
803     if( ke==0x18 ){y++;if( y>13 ){y=0;}}
804
805     if( ke==0x13 ){x--;if( x<0 ){x=1;}}
806     if( ke==0x04 ){x++;if( x>1 ){x=0;}}
807
808     if( ke==12 ){
809       msg(_("Init. Ok"));
810       if(yn_sel()>0){
811         msg_clr();filt_init();goto top;
812       }
813     }
814   }
815   txerase(22*8,9*16,59*8,18*16);home2(gy);
816   fill(174,115+512,641,379+512,0);
817
818 }
819
820 /***************************/
821 void    filt_init()
822 {
823   int   i;
824
825   for(i=0;i<16;i++){
826     rfilt[i][0]=0;rfilt[i][1]=0;
827     rfilt[i+16][0]=128;rfilt[i+16][1]=128;
828   }
829   rfilt[11][1]=127;rfilt[11][2]=0;
830   rfilt[12][1]=128;
831   rfilt[13][1]=127;
832
833 }
834
835 /***************************/
836 void    stgt_as()
837 {
838   int   a,n,i,xx,yy,x=0,y=0,scr,sh;
839
840   scr=edit_scr;edit_scr=0;
841
842   fill(316,566,453,997,0);
843   box(316,643,452,996-8,14,65535);
844   box(317,644,451,995-8,14,65535);
845   fill(316,602,452,644,14);
846
847   es=0;B_COLOR(3);
848
849   B_LOCATE(40,6);
850   B_PRINT("* ST/GT ASSIGN *");
851
852 redis:
853   B_LOCATE(40,7);
854   if(x<2){
855     B_PRINT("NO.       ST  GT");
856   }else{
857     B_PRINT("NO.   ST  GT VEL");
858   }
859
860   for(i=0;i<10;i++){
861     B_LOCATE(40,i*2+9);
862     B_PRINT("F");B_PRINT(fstr(i+1,2));B_PRINT(": ");
863     if(x<2){
864       B_PRINT((const char *)stgt_name[i]);
865       B_PRINT(fstr(stgt_tbl[i],5));
866       B_PRINT(fstr(stgt_tbl[i+10],4));
867     }else{
868       B_PRINT(fstr(stgt_tbl[i],3));
869       B_PRINT(fstr(stgt_tbl[i+10],4));
870       B_PRINT(fstr(stgt_tbl[i+20],4));
871     }
872   }
873   while( 1){
874     i=y+x*10;xx=49/*+(x&1)*4*/;if(x){xx+=4;}
875     yy=y*2+9;
876
877     tcur(xx,yy,3,3);
878     a=inkey2();sh=B_SFTSNS();
879     tcur(xx,yy,3,3);
880
881     if( a==0x05 ){y--;if( y<0 ){y=9;/*SKEYSET(0x85);SKEYSET(0x5);*/}}
882     if( a==0x18 ){y++;if( y>9 ){y=0;}}
883     if( a==0x13 ){x--;if( x<0 ){x=2;}if(x==2||x==1){goto redis;}}
884     if( a==0x04 ){x++;if( x>2 ){x=0;}if(x==2||x==0){goto redis;}}
885     if( a==0x0b ){y=0;x=0;break;}
886     /*
887       if( a==9 ){
888       msg("No.=");j=vinput(y+1,0x802);msg_clr();
889       if(es==0 && j>0 && j<=10){y=j-1;}
890       }
891       */
892     if( a==12 ){
893       msg(_("Initialize assign"));
894       if(yn_sel()>0){msg_clr();stgt_init();goto redis;}
895     }
896     if( a==32 ){
897       stgt_init2(i);goto redis;
898     }
899
900     if( a==13 ){
901       B_LOCATE(xx,yy);
902       n=vinput(stgt_tbl[i],0x803);
903       if(es==0 && n>=0 && ((x<2 && n<=255) || n<=127)){stgt_tbl[i]=n;}
904       goto redis;
905     }
906     if( a>='0' && a<='9' ){
907       B_LOCATE(xx,yy);
908       n=vinput(a-'0',0x403);
909       if(es==0 && n>=0 && ((x<2 && n<=255) || n<=127)){stgt_tbl[i]=n;}
910       goto redis;
911     }
912
913     if( a=='+' || a=='>' || a=='.' ){
914       int n=stgt_tbl[i];
915       if(sh&1){n+=12;}else{n++;}
916
917       n=n&255;
918       if(x==2){n=n&127;}
919       stgt_tbl[i]=n;
920       goto redis;
921     }
922     if( a=='-' || a=='<' || a==',' ){
923       int n=stgt_tbl[i];
924       if(sh&1){n+=244;}else{n+=255;}
925       n=n&255;
926       if(x==2){n=n&127;}
927       stgt_tbl[i]=n;
928       goto redis;
929     }
930
931     if( a==27 ){break;}
932   }
933
934   edit_scr=scr;
935   txerase(40*8,5*16,16*8,25*16);
936   fill(316,537,453,997,0);
937
938 }
939
940 /***************************/