OSDN Git Service

最初のコミット
[winaudioj/stedx.git] / trkset.cpp
1 /*
2  * STed: trkset.c (track set subroutine)
3  */
4
5 #include        "sted.h"
6
7
8 static void exetrk_dsp(int);
9
10 /***************************/
11 int     trk_sel(int cx)
12 {
13   int   ke,sh;
14
15   while( 1){
16     trk_no_cur(track,2);if(cx<0){trk_no_cur(track,1);}else{trk_lin(track,cx,1);}
17     ke=inkey2();sh=B_SFTSNS();
18     trk_no_cur(track,0);if(cx>=0){trk_lin(track,cx,0);}
19
20     if(sh&4){
21       int       ex;
22       char      t[32];
23       t[0]=ke;t[1]=0;
24       ex=str_search("1234567890,./*-+=\x0d",t); /* */
25       if( ex ){
26         ex--;track=ex;
27         if(ex<btrack || ex>btrack+17){
28           btrack=ex/9*9;if(btrack>18){btrack=18;}
29           form3();
30         }
31         track=ex;
32       }
33     }
34
35     if( ke==9 ){
36       int       j;
37       msg("TRACK No.=");j=vinput(track+1,0x802);msg_clr();
38       if(es==0 && j>0 && j<=36){
39         j--;track=j;
40         if(j<btrack || j>btrack+17){
41           btrack=j/9*9;if(btrack>18){btrack=18;}
42           form3();
43         }
44       }
45     }
46     if( ke==13 ){break;}
47     if( ke==27 ){return(-1);}
48
49     if( ke==0x0b ){track=btrack;}
50
51     if( ke==0x05 ){track--;if(track<btrack){track=btrack+17;}}
52     if( ke==0x18 ){track++;if(track>btrack+17){track=btrack;}}
53
54     if( ke==0x17 && btrack>0){
55       if(sh&1){btrack-=1;track-=1;}else{btrack-=9;track-=9;}
56       if(btrack<0){btrack=0;track=0;}
57       form3();snsclr();
58     }
59     if( ke==0x12 && btrack<18){
60       if(sh&1){btrack+=1;track+=1;}else{btrack+=9;track+=9;}
61       if(btrack>18){btrack=18;track=18;}
62       form3();snsclr();
63     }
64
65   }
66   trk_no_dis();return(0);
67 }
68
69 /***************************/
70 void    trk_no_cur(int i,int m)
71 {
72   int a,b;
73
74   if(m==0){a=15;b=8;}else{a=0;b=15;if(m==2){b=11;}}
75
76   if(i>=btrack && i<btrack+18){
77     vdis(13,192+(i-btrack)*16,i+1,2,a,b);
78   }
79 }
80
81 /***************************/
82 void    trk_no_dis()
83 {
84   vdis2(21+14,0,track+1,2,15,8);vdis2(21+14,512,track+1,2,15,8);
85 }
86
87 /***************************/
88 void    trk_set(int md)
89 {
90   int   ke,sh,cx,i,y;
91
92   edfield(-1);edit_scr=0;logo(-1);i=track;
93
94   cx=-1;
95   while( 1){
96   top:
97     trk_no_cur(i,2);if(cx<0){trk_no_cur(i,1);}else{trk_lin(i,cx,1);}
98     ke=inkey3();sh=ke>>8;ke=ke&0xff;
99     if(ke>='a' && ke<='z'){ke-=32;}
100     trk_no_cur(i,0);if(cx>=0){trk_lin(i,cx,0);}
101     track=i;
102
103     if( ke>='A' && ke<='Z' && (sh&4)!=0 ){
104       if(cnfflag&0x200){sh=1-(sh&1);}
105       if(sh&1){option(ke-'A',1);}else{option2(ke-'A',1,0,0);}
106       ke=0;
107     }
108
109     y=12+(i-btrack);
110
111     if( ke==0xe0 ){if((sh&1)==0){poplay(0,4);}else{poplay(0,5);}}
112     if( ke==0xe1 ){if((sh&1)==0){poplay(0,1);}else{poplay(0,2);}}
113
114
115     if(sh&4){
116       int       ex;
117       char t[32];
118       t[0]=ke;t[1]=0;
119       ex=str_search("1234567890,./*-+=\x0d",t); /* */
120       if( ex ){
121         i=ex-1;
122         if(i<btrack || i>=btrack+18){
123           btrack=i/9*9;if(btrack>18){btrack=18;}
124           form3();
125         }
126         track=i;ke=0;
127       }
128     }
129
130     /*          if(sh&8){
131                 int     ex;
132                 char t[32];
133                 t[0]=ke;t[1]=0;
134                 ex=str_search("1234567890,./ *-+=\x0d",t);
135                 if( ex ){
136                 if(cx==1){mch[i]=ex;ke=0;}
137                 }
138                 }
139                 */
140
141     if( ke==27 ){break;}
142     if( ke==9 ){
143       int       ex;
144       msg("TRACK No.=");ex=vinput(i+1,0x802);msg_clr();
145       if(es==0 && ex>0 && ex<=36){
146         i=ex-1;
147         if(i<btrack || i>=btrack+18){
148           btrack=i/9*9;if(btrack>18){btrack=18;}
149           form3();
150         }
151       }
152     }
153
154     if( ke==13 ){
155       trk_no_dis();
156       if( cx<0 || (sh&1)!=0 ){
157         if(md==0){
158           trk_ed();
159           i=track;
160           if(i<btrack || i>=btrack+18){
161             btrack=i/9*9;if(btrack>18){btrack=18;}
162             form3();
163           }
164           if(B_SFTSNS()&1){break;}
165         }else{
166           if(real_record()==0){form3();}
167           break;
168         }
169         goto top;
170       }
171
172       if( cx==0 ){
173         int     ex=trmod[i];trmod[i]=(ex&0xfc)+((ex+1)&3);
174       }
175       if( cx==1 ){
176         int     ex;
177         char    tmp0[64];
178
179         strcpy(tmp0,chstr(mch[i]));
180         B_LOCATE(21,y);sinput(tmp0,0x803);ex=strch(mch[i],tmp0);
181         /* May.06.2001 NAGANO Daisuke <breeze.nagano@nifty.ne.jp> */
182         if ( issted3 ) {
183           if(es==0 && ex<=STED3_MAX_PORT_NUMBER*16 && ex>=0 ){mch[i]=ex;}
184         } else {
185           if(es==0 && ex<33 && ex>=0 ){mch[i]=ex;}
186         }
187       }
188       if( cx==2 ){
189         int     ex=trst[i];if(ex>127){ex=ex-256;}
190         B_LOCATE(25,y);ex=vinput(ex,0x803);
191         if(es==0 && (ex>=-99 && ex<=99)){
192           if( ex<0 ){ex=ex+256;}
193           trst[i]=ex;}
194       }
195       if( cx==3 ){
196         int     ex=trkey[i];if( ex>63 && ex<128){ex=ex-128;}
197         B_LOCATE(29,y);ex=vinput(ex,0x803);
198         if(es==0 && ((ex>=-64 && ex<64) || ex==128)){
199           if( ex<0 ){ex=ex+128;}
200           trkey[i]=ex;}
201       }
202       if( cx==4 ){
203         int     ex=trrhy[i];
204         if(ex<0x80){ex=0x80;}else{if(ex==0x80){ex=0x90;}else{ex=0;}}
205         trrhy[i]=ex;
206       }
207
208       if( cx==5 ){B_LOCATE(37,y);sinput(trkmemo[i],36);}
209       B_CLR_AL();
210     }
211
212     if( ke>='0' && ke<='9' ){
213       trk_no_dis();
214
215       if( cx==1 ){
216         int     ex;
217         char    tmp0[64];
218
219         tmp0[0]=ke;tmp0[1]=0;
220         B_LOCATE(21,y);sinput(tmp0,0x403);ex=strch(mch[i],tmp0);
221         /* May.06.2001 NAGANO Daisuke <breeze.nagano@nifty.ne.jp> */
222         if ( issted3 ) {
223           if(es==0 && ex<=STED3_MAX_PORT_NUMBER*16 && ex>=0 ){mch[i]=ex;}
224         } else {
225           if(es==0 && ex<33 && ex>=0 ){mch[i]=ex;}
226         }
227       }
228       if( cx==2 ){
229         int     ex=trst[i];if(ex>127){ex=ex-256;}
230         B_LOCATE(25,y);ex=vinput(ke-'0',0x403);
231
232         if(es==0 && (ex>=-99 && ex<=99)){
233           if( ex<0 ){ex=ex+256;}
234           trst[i]=ex;}
235       }
236       if( cx==3 ){
237         int     ex=trkey[i];if( ex>63 && ex<128){ex=ex-128;}
238         B_LOCATE(29,y);ex=vinput(ke-'0',0x403);
239         if(es==0 && ((ex>=-64 && ex<64) || ex==128)){
240           if( ex<0 ){ex=ex+128;}
241           trkey[i]=ex;}
242       }
243       B_CLR_AL();
244     }
245
246     if( ke=='+' || ke=='>' || ke=='.' ){
247       if( cx==0 ){
248         int     ex=trmod[i];trmod[i]=(ex&0xfc)+((ex+1)&3);
249       }
250       if( cx==1 ){
251         int     ex=mch[i];ex++;if(ex>32){ex=0;}
252         mch[i]=ex;
253       }
254       if( cx==2 ){
255         int     ex=trst[i];if(ex>127){ex=ex-256;}
256         if(sh&1){ex+=12;}else{ex++;}
257         if(ex<=99){
258           if( ex<0 ){ex=ex+256;}
259           trst[i]=ex;}
260       }
261       if( cx==3 ){
262         int     ex=trkey[i];if( ex>63 && ex<128){ex=ex-128;}
263         if(sh&1){ex+=12;}else{ex++;}
264         if(ex<64){
265           if( ex<0 ){ex=ex+128;}
266           trkey[i]=ex;}
267       }
268       if( cx==4 ){
269         int     ex=trrhy[i];
270         if(ex<0x80){ex=0x80;}else{if(ex==0x80){ex=0x90;}else{ex=0;}}
271         trrhy[i]=ex;
272       }
273     }
274     if( ke=='-' || ke=='<' || ke==',' ){
275       if( cx==0 ){
276         int     ex=trmod[i];trmod[i]=(ex&0xfc)+((ex+3)&3);
277       }
278       if( cx==1 ){
279         int     ex=mch[i];ex--;if(ex<0){ex=32;}
280         mch[i]=ex;
281       }
282       if( cx==2 ){
283         int     ex=trst[i];if(ex>127){ex=ex-256;}
284         if(sh&1){ex-=12;}else{ex--;}
285         if(ex>=-99){
286           if( ex<0 ){ex=ex+256;}
287           trst[i]=ex;}
288       }
289       if( cx==3 ){
290         int     ex=trkey[i];if( ex>63 && ex<128){ex=ex-128;}
291         if(sh&1){ex-=12;}else{ex--;}
292         if(ex>=-64){
293           if( ex<0 ){ex=ex+128;}
294           trkey[i]=ex;}
295       }
296       if( cx==4 ){
297         int     ex=trrhy[i];
298         if(ex<0x80){ex=0x90;}else{if(ex==0x90){ex=0x80;}else{ex=0;}}
299         trrhy[i]=ex;
300       }
301
302     }
303     if( ke==32 ){
304       if( (sh&1)==0 ){
305         if( cx==0 ){trmod[i]=0;}
306         if( cx==1 ){mch[i]=0;}
307         if( cx==2 ){trst[i]=0;}
308         if( cx==3 ){trkey[i]=/*0x80*/0;}
309         if( cx==4 ){trrhy[i]=0;}
310       }else{
311         int j;
312         for(j=0;j<36;j++){
313           if(i!=j){
314             if( cx==0 ){trmod[j]=0;}
315             if( cx==1 ){mch[j]=0;}
316             if( cx==2 ){trst[j]=0;}
317             if( cx==3 ){trkey[j]=/*0x80*/0;}
318             if( cx==4 ){trrhy[j]=0;}
319             trk_lin(j,cx,0);
320           }
321         }
322       }
323     }
324     if( ke=='=' ){
325       if( cx==0 ){
326         int     ex=trmod[i]^1;trmod[i]=ex;
327       }
328       if( cx==1 ){
329         int     ex=mch[i];
330         if( ex>0 ){
331           if( ex>16 ){ex-=16;}else{ex+=16;}
332           mch[i]=ex;
333         }
334       }
335       if( cx==2 ){
336         int     ex=trst[i];if(ex>127){ex=ex-256;}
337         ex=-ex;
338         if(ex>=-99 && ex<=99){
339           if( ex<0 ){ex=ex+256;}
340           trst[i]=ex;}
341       }
342       if( cx==3 ){
343         int     ex=trkey[i];
344         if( ex>0 && ex<128){
345           if( ex>63 ){ex=ex-128;}
346           ex=-ex;if( ex<0 ){ex=ex+128;}
347         }else{ex=128-ex;}
348         trkey[i]=ex;
349       }
350       if( cx==4 ){trrhy[i]=(trrhy[i]^0x80);}
351     }
352
353
354     if( ke==0x0b ){i=btrack;}
355
356     if( ke==0x05 ){i--;if(i<btrack){i=btrack+17;}}
357     if( ke==0x18 ){i++;if(i>btrack+17){i=btrack;}}
358     if( ke==0x13 ){cx--;if(cx<-1){cx=5;}}
359     if( ke==0x04 ){cx++;if(cx>5){cx=-1;}}
360
361     if( ke==0x17 && btrack>0){
362       if(sh&1){btrack-=1;i-=1;}else{btrack-=9;i-=9;}
363       if(i<0){btrack=0;i=0;}
364       form3();snsclr();
365     }
366     if( ke==0x12 && btrack<18){
367       if(sh&1){btrack+=1;i+=1;}else{btrack+=9;i+=9;}
368       if(btrack>18){btrack=18;i=18;}
369       form3();snsclr();
370     }
371
372     if( cx==0 ){
373       if( ke=='P' ){trmod_set(i,0,sh&1);ke=0;}
374       if( ke=='M' ){trmod_set(i,1,sh&1);ke=0;}
375       if( ke=='X' ){trmod_set(i,2,sh&1);ke=0;}
376       if( ke=='R' ){trmod_set(i,3,sh&1);ke=0;}
377     }
378
379     if( ke=='X' ){
380       int       ex;
381       B_LOCATE(55,6);B_PRINT("ExChange Track Data");
382       B_LOCATE(72,7);B_PRINT("Source Track=");B_PRINT(fstr(i+1,2));
383       B_LOCATE(68,8);B_PRINT("Distnation Track=");
384     exc1:                       ex=trk_sel(cx);if(ex==0 && i==track){goto exc1;}
385     if(ex==0){
386       B_LOCATE(68+17,8);B_PRINT(fstr(track+1,2));
387       ts_swap(i,track);trk_lin(i,-1,0);trk_lin(track,-1,0);}
388     i=track;
389     B_CLR_AL();
390     }
391     if( ke=='C' ){
392       int       ex;
393       B_LOCATE(55,6);B_PRINT("Copy Track Data");
394       B_LOCATE(72,7);B_PRINT("Source Track=");B_PRINT(fstr(i+1,2));
395       B_LOCATE(68,8);B_PRINT("Distnation Track=");
396     cpy1:                       ex=trk_sel(cx);if(ex==0 && i==track){goto cpy1;}
397     if(ex==0){
398       B_LOCATE(68+17,8);B_PRINT(fstr(track+1,2));
399       ts_copy(i,track);trk_lin(track,-1,0);}
400     B_CLR_AL();
401     i=track;
402     }
403
404     if( ke=='I' ){
405       int       ex,j;
406       B_LOCATE(55,6);B_PRINT("Insert Track Data");
407       B_LOCATE(72,7);B_PRINT("Source Track=");B_PRINT(fstr(i+1,2));
408       B_LOCATE(68,8);B_PRINT("Distnation Track=");
409     ins1:                       ex=trk_sel(cx);if(ex==0 && i==track){goto ins1;}
410     if(ex==0){
411       B_LOCATE(68+17,8);B_PRINT(fstr(track+1,2));
412       ts_ins(i,track);for(j=0;j<36;j++){trk_lin(j,-1,0);}
413     }
414     i=track;
415     B_CLR_AL();
416     }
417
418     if( ke=='T' ){
419       int       ex,j;
420       B_LOCATE(55,6);B_PRINT("Sort Track Data");
421       B_LOCATE(72,7);B_PRINT("Start  Track=");B_PRINT(fstr(i+1,2));
422       B_LOCATE(72,8);B_PRINT("End    Track=");
423     srt1:                       ex=trk_sel(cx);if(ex==0 && i>=track){goto srt1;}
424     if(ex==0){
425       B_LOCATE(68+17,8);B_PRINT(fstr(track+1,2));
426       ts_sort(i,track);for(j=0;j<36;j++){trk_lin(j,-1,0);}
427     }
428     i=track;
429     B_CLR_AL();
430     }
431
432     if( ke=='M' ){
433       int       ex;
434       B_LOCATE(55,6);B_PRINT("Mix Track Data");
435       B_LOCATE(72,7);B_PRINT("Source Track 1=");B_PRINT(fstr(track+1,2));
436       B_LOCATE(72,8);B_PRINT("Source Track 2=");
437     mix1:                       ex=trk_sel(cx);if(ex==0 && i==track){goto mix1;}
438     if(ex==0){
439       int       i2;
440       B_LOCATE(72+15,8);B_PRINT(fstr(track+1,2));
441       B_LOCATE(71,9);B_PRINT("Distnation Track=");
442       i2=track;
443       ex=trk_sel(cx);
444       if(ex==0){
445         B_LOCATE(71+17,9);B_PRINT(fstr(track+1,2));
446         ts_mix(i,i2,track);
447         trk_lin(i,-1,0);trk_lin(i2,-1,0);trk_lin(track,-1,0);
448       }
449     }
450     i=track;
451     txerase(432,107-16,744,164+16);
452     }
453     if( ke==12 || ke=='D' ){
454       B_LOCATE(55,6);B_PRINT("Erase Track Data");
455       B_LOCATE(79,7);B_PRINT("Track=");B_PRINT(fstr(i+1,2));
456       msg(_("Delete all track data"));
457       if(yn_sel()>0){ts_clear(i);trk_lin(i,-1,0);}
458       B_CLR_AL();
459     }
460     if( ke=='O' ){
461       B_LOCATE(55,6);B_PRINT("Optimize Track Data");
462       B_LOCATE(79,7);B_PRINT("Track=");
463       if(sh&1){B_PRINT("All");}else{B_PRINT(fstr(i+1,2));}
464       msg(_("Optimize track data"));
465       if(yn_sel()>0){
466         if(sh&1){
467           int j;
468           for(j=0;j<36;j++){
469             exetrk_dsp(j);
470             if(tr_len[j]>4){
471               trk_opt_sub(j,0,tr_len[j]);trk_lin(j,-1,0);
472             }
473           }
474         }else{
475           trk_opt_sub(i,0,tr_len[i]);trk_lin(i,-1,0);
476         }
477       }
478       B_CLR_AL();
479     }
480     if( ke=='A' || ke=='R' ){
481       if( ke=='A' ){
482         B_LOCATE(55,6);B_PRINT("SameMeas Compress Track Data");
483       }else{
484         B_LOCATE(55,6);B_PRINT("Repeat Compress Track Data");
485       }
486       B_LOCATE(79,7);B_PRINT("Track=");
487       if(sh&1){B_PRINT("All");}else{B_PRINT(fstr(i+1,2));}
488       msg(_("Compress track data"));
489       if(yn_sel()>0){
490         int t=track;
491         size_ref();
492         if(sh&1){
493           int j;
494           for(j=0;j<36;j++){
495             exetrk_dsp(j);
496             if(tr_len[j]>4){
497               track=j;
498               if( ke=='A' ){
499                 same_meas_conv(j);
500               }else{
501                 repeat_comp(j);
502               }
503               trk_lin(j,-1,0);
504             }
505           }
506         }else{
507           if( ke=='A' ){
508             same_meas_conv(i);
509           }else{
510             repeat_comp(i);
511           }
512           trk_lin(i,-1,0);
513         }
514         track=t;
515       }
516       B_CLR_AL();
517     }
518
519     if( ke=='E' ){
520       B_LOCATE(55,6);B_PRINT("SameMeas/Repeat Extract Track Data");
521       B_LOCATE(79,7);B_PRINT("Track=");
522       if(sh&1){B_PRINT("All");}else{B_PRINT(fstr(i+1,2));}
523       msg(_("Extrack track data"));
524       if(yn_sel()>0){
525         if(sh&1){
526           int j;
527           for(j=0;j<36;j++){
528             exetrk_dsp(j);
529             if(tr_len[j]>4){ts_ext(j);trk_lin(j,-1,0);}
530           }
531         }else{
532           ts_ext(i);trk_lin(i,-1,0);
533         }
534       }
535       B_CLR_AL();
536     }
537
538     if( ke=='B' ){
539       B_LOCATE(55,6);B_PRINT("Meas End Rewrite");
540       B_LOCATE(79,7);B_PRINT("Track=");
541       if(sh&1){B_PRINT("All");}else{B_PRINT(fstr(i+1,2));}
542       ts_measend(i,sh);/*trk_lin(i,-1,0);*/
543       txerase(432,107-16,744,164+16);
544       B_CLR_AL();
545     }
546
547     if( ke=='L' ){
548       if((sh&1)==0){
549         char    tmp0[128],path2[128];
550
551         track=i;
552         trk_no_dis();
553         strcpy(path2,trk_path);fsel(trk_file,path2,0x005);
554         if( es==0 && trk_file[0]!=0 ){
555           strcpy(tmp0,path2);strcat(tmp0,trk_file);
556           msg(_("Loading track data ..."));
557           if(trk_load(tmp0)==0){
558             if(!(cnfflag&0x0008)){strcpy(trk_path,path2);}
559             trk_lin(track,-1,0);
560             msg_clr();
561           }
562         }
563       }else{load_sub(0);}
564     }
565     if( ke=='S' ){
566       if((sh&1)==0){
567         char    tmp0[128],path2[128];
568
569         track=i;
570         trk_no_dis();
571         strcpy(path2,trk_path);fsel(trk_file,path2,0x105);
572         if( es==0 && trk_file[0]!=0 ){
573           strcpy(tmp0,path2);strcat(tmp0,trk_file);
574           msg(_("Saving track data ..."));
575           if(trk_save(tmp0)==0){
576             if(!(cnfflag&0x0008)){strcpy(trk_path,path2);}
577             msg_clr();
578           }
579         }
580       }else{save_sub(0);}
581     }
582
583   }
584   logo(512);edit_scr=0;
585 }
586
587 /***************************/
588 /*「現在 Track 1 を処理しています」*/
589 void    exetrk_dsp(int i)
590 {
591   B_LOCATE(55,9);B_PRINT("TRACK=");B_PRINT(fstr(i+1,2));
592 }
593
594 /***************************/
595 void    trmod_set(int tr,int md,int sh)
596 {
597   int j,i=tr;
598
599   if(sh&1){
600     for(j=0;j<36;j++){
601       if(i!=j){
602         trmod[j]=md;
603         trk_lin(j,0,0);
604       }
605     }
606   }else{
607     trmod[i]=md;
608     trk_lin(i,0,0);
609   }
610 }
611
612 /***************************/
613 void    trk_lin(int i,int cx,int m)
614 {
615   int   c1,c2,ex,y;
616   char  tmp0[16];
617   static char   play_mode[5][5]={"Play","Mute"," Mix"," Rec"," Rec"};
618   static char   play_modec[5]={3,2,1,6,6};
619
620   if(i<btrack || i>btrack+17){return;}
621   y=192+(i-btrack)*16;
622
623   if(m==1){c1=0;c2=15;}else{c1=15;c2=0;}
624   if(m==2){c2=-1;}
625
626   if(cx<0){vdis2(13,y,i+1,2,15,-1);}
627
628   if(cx==0 || cx<0){
629     int cl0=play_modec[trmod[i]&3],cl1=c1,cl2=c2;
630     if(c1>0){cl1=cl0;}
631     if(c2>0){cl2=cl0;}
632     sdis2(16,y,play_mode[trmod[i]&3],4,cl1,cl2);}
633
634   if(cx==1 || cx<0){
635     ex=mch[i];
636     strcpy(tmp0,chstr(ex));
637     sdis2(21,y,tmp0,3,c1,c2);
638   }
639   if(cx==2 || cx<0){
640     ex=trst[i];
641     if( ex>127 ){ex=ex-256;}
642     vdis2(25,y,ex,3,c1,c2);
643   }
644   if(cx==3 || cx<0){
645     ex=trkey[i];
646     if(ex>=0x80){
647       sdis2(29,y,"OFF",3,c1,c2);
648     }else{
649       if( ex>63 ){ex=ex-128;}
650       vdis2(29,y,ex,3,c1,c2);
651     }
652   }
653   if(cx==4 || cx<0){
654     if(trrhy[i]&0x80){
655       strcpy(tmp0,"ON ");if(trrhy[i]>0x80){tmp0[2]='+';}
656       sdis2(33,y,tmp0,3,c1,c2);
657     }else{
658       sdis2(33,y,"OFF",3,c1,c2);}
659   }
660   /*  if(cx==5 || cx<0){sdis2(37,y,trkmemo[i],36,c1,c2);}*/
661   if(cx==5 || cx<0){sdis2(37,y,eucconv(trkmemo[i]),36,c1,c2);}
662   if(cx<0 && m<2){trksize(i);}
663 }
664
665 /***************************/
666 void    ts_swap(int a,int b)
667 {
668   char  tmp0[128];
669   int   i,j,d;
670
671   size_ref();
672   if(size_change(a,tr_len[b])){return;}
673   if(size_change(b,tr_len[a])){return;}
674
675   memcpy_l(dat,trk[a],tr_len[a]);
676   memcpy_l(trk[a],trk[b],tr_len[b]);
677   memcpy_l(trk[b],dat,tr_len[a]);
678
679   for(i=0;i<2;i++){for(j=0;j<4;j++){
680     d=tr_pos[a][i][j];tr_pos[a][i][j]=tr_pos[b][i][j];tr_pos[b][i][j]=d;}}
681
682   d=tr_len[a];tr_len[a]=tr_len[b];tr_len[b]=d;
683
684   d=trmod[a];trmod[a]=trmod[b];trmod[b]=d;
685   d=trrhy[a];trrhy[a]=trrhy[b];trrhy[b]=d;
686   d=mch[a];mch[a]=mch[b];mch[b]=d;
687   d=trkey[a];trkey[a]=trkey[b];trkey[b]=d;
688   d=trst[a];trst[a]=trst[b];trst[b]=d;
689   strcpy(tmp0,trkmemo[a]);strcpy(trkmemo[a],trkmemo[b]);strcpy(trkmemo[b],tmp0);
690 }
691
692 /***************************/
693 void    ts_ins(int a,int b)
694 {
695   int   i;
696
697   if(a<b){
698     for(i=a;i<b;i++){ts_swap(i,i+1);}
699   }else{
700     for(i=a-1;i>b-1;i--){ts_swap(i,i+1);}
701   }
702 }
703
704 /***************************/
705 void    ts_sort(int a,int b)
706 {
707   int   i,j;
708
709   for(i=a;i<=b-1;i++){
710     B_LOCATE(55,9);B_PRINT("TRACK=");B_PRINT(fstr(i+1,2));
711     for(j=i+1;j<=b;j++){
712       if( (mch[i]>mch[j] || ( mch[j]==10||mch[j]==26) ||mch[i]==0) && mch[j]!=0 ){
713         ts_swap(i,j);
714       }
715     }
716   }
717 }
718
719 /***************************/
720 void    ts_copy(int a,int b)
721 {
722   int   i,j;
723
724   size_ref();
725   if(size_change(b,tr_len[a])){return;}
726
727   memcpy_l(trk[b],trk[a],tr_len[a]);
728
729   for(i=0;i<2;i++){for(j=0;j<4;j++){tr_pos[b][i][j]=tr_pos[a][i][j];}}
730   tr_len[b]=tr_len[a];trmod[b]=trmod[a];
731   trrhy[b]=trrhy[a];
732   mch[b]=mch[a];trkey[b]=trkey[a];trst[b]=trst[a];
733   strcpy(trkmemo[b],trkmemo[a]);
734 }
735
736 /***************************/
737 void    ts_clear(int a)
738 {
739   int   j;
740
741   trk[a][0]=0xfe;tr_len[a]=4;
742   for(j=0;j<4;j++){tr_pos[a][0][j]=0;tr_pos[a][1][j]=0;}
743   trmod[a]=0;trno[a]=a+1;trrhy[a]=0;mch[a]=a+1;trkey[a]=0;trst[a]=0;
744   if(a==9){trrhy[9]=128;trkey[9]=128;}
745   if(a>15){mch[a]=0;}
746   trkmemo[a][0]=0;
747
748   size_ref();
749 }
750
751 /***************************/
752 void    ts_mix(int tr1,int tr2,int tr3)
753 {
754   int   po;
755
756   rcpf=0;cpleng=0;
757
758   msg("TRACK MIX...");
759
760   po=trk_ext_sub(tr1,(char*)cpbuf);if(po==0){return;}
761   po=trk_ext_sub(tr2,(char*)rcpbuf);if(po==0){return;}
762
763   po=trk_mix_sub(cpbuf,rcpbuf);
764   if(size_change(tr3,po+4)){return;}
765
766   memcpy_l(trk[tr3],dat,po);trk[tr3][po]=0xfe;tr_len[tr3]=po+4;
767
768   msg_clr();
769 }
770
771 /***************************/
772 void    ts_measend(int tr1,int sh)
773 {
774   static        unsigned char   bars[4*7]={
775     0xf9,0,0,0, 0xf9,0,0,0, 0,48,0,0, 0xf8,4,0,0, 0,0,0,0,
776     0xfd,0,0,0, 0xf8,3,0,0};
777
778   int   po,mc,barlen,ofs,maxm;
779
780   rcpf=0;cpleng=0;
781
782   msg("MEAS END CHANGE");
783 loop:
784   barlen = tbase * 4 * beat1 / beat2;
785   B_LOCATE(17,1);B_PRINT("MEAS ST=");
786   barlen=vinput(barlen,0x804);if(es!=0){msg_clr();return;}
787   if(barlen<24 || barlen>2000){goto loop;}
788 loop2:
789   B_LOCATE(30,1);B_PRINT("OFFSET=");
790   ofs=vinput(0,0x804);if(es!=0){msg_clr();return;}
791   if(ofs<0 || ofs>2000){goto loop2;}
792 loop3:
793   B_LOCATE(42,1);B_PRINT("LAST MEAS=");
794   maxm=vinput(0,0x804);if(es!=0){msg_clr();return;}
795   if(maxm<0 || maxm>2000){goto loop3;}
796
797   if(sh&1){tr1=0;}
798 loopx:
799   exetrk_dsp(tr1);
800
801   if(tr_len[tr1]<=4){goto skip;}
802
803   po=trk_ext_sub(tr1,(char*)cpbuf);if(po==0){return;}
804
805   po=0;mc=((tr_step[tr1]-ofs)/barlen);
806
807   if(maxm>0 && mc<maxm){mc=maxm;if(ofs){mc--;}}
808
809   if(ofs){
810     int i=ofs;
811     while(i>0){
812       dat[po]=0;dat[po+1]=0;dat[po+2]=0;dat[po+3]=0;
813       if(i<240){dat[po+1]=i;i=0;}else{dat[po+1]=240;i-=240;}
814       po+=4;
815     }
816     dat[po]=0xfd;po+=4;
817   }
818
819   while(mc>0){
820     memcpy(&dat[po],bars,4*7);
821     if(barlen<=240+15 ){
822       dat[po+9]=barlen;dat[po+13]=1;
823     }else{
824       int bl;
825       dat[po+9]=240;dat[po+13]=barlen/240;
826       bl=barlen-240*dat[po+13];
827       dat[po+17]=bl;
828     }
829
830     if(mc<240){dat[po+25]=mc;mc=0;}else{dat[po+25]=240;mc-=240;}
831     po+=4*7;
832   }
833   dat[po]=0xfe;po+=4;
834   po=repeat_ext(rcpbuf,po);
835
836   po=trk_mix_sub(rcpbuf,cpbuf);
837   if(size_change(tr1,po+4)){return;}
838
839   if(po>4 && dat[po-4]==0xfd && dat[po-8]==0xfd){po-=4;}
840
841   memcpy_l(trk[tr1],dat,po);
842   trk[tr1][po]=0xfe;tr_len[tr1]=po+4;
843
844   trk_lin(tr1,-1,0);
845 skip:
846   if(sh&1){
847     tr1++;if(tr1<36){goto loopx;}
848   }
849   msg_clr();
850 }
851
852 /***************************/
853 void    ts_ext(int i)
854 {
855   int   po;
856
857   rcpf=0;cpleng=0;
858
859   po=trk_ext_sub(i,(char*)cpbuf);if(po==0){return;}
860
861   size_ref();
862   if(size_change(i,po)){return;}
863
864   memcpy_l(trk[i],cpbuf,po);
865   tr_len[i]=po;
866   /*    trk_lin(i,-1,0);*/
867 }
868
869 /***************************/
870 void    trksize(int tr)
871 {
872   int   i,us=-(4*36),s,c=0,fr=buff_free,yy;
873
874   if(tr<0){c=-1;}else{tr_step[tr]=step_cluc2(tr,0,tr_len[tr]);}
875   for(i=0 ;i<36;i++){
876     us+=tr_len[i];
877     fr+=(tr_alc[i]-tr_len[i]);
878     if((tr==-1 || tr==i)&& i>=btrack && i<btrack+18){
879       yy=192+(i-btrack)*16;
880
881       vdis2(74,yy,(tr_len[i]-4)>>2,5,15,c);
882       s=tr_step[i];vdis2(80,yy,s,12,15,c);
883     }
884   }
885   vdis2(6,0,fr>>2,7,15,8);vdis2(6,512,fr>>2,7,15,8);
886   vdis2(21,0,us>>2,7,15,8);vdis2(21,512,us>>2,7,15,8);
887 }
888
889 /***************************/
890 void    trksize_c()
891 {
892   int   i;
893   for(i=0 ;i<36;i++){tr_step[i]=step_cluc2(i,0,tr_len[i]);}
894 }
895
896 /***************************/