OSDN Git Service

最初のコミット
[winaudioj/stedx.git] / defload.cpp
1 /*
2  * STed: defload.c (def file)
3  */
4
5 #if 0
6 #include        "basic0.h"
7 #include        "BASIC.h"
8 #endif
9
10 #include        <stdio.h>
11 #include        <stdlib.h>
12 #include        <string.h>
13
14 #include        "iocslib.h"
15 #include        "doslib.h"
16 #include        "sted.h"
17
18 #if     STED
19 int     gpal_no[16]={
20   0,14*64+28*2048+28*2,28*64+28*2048+14*2,28*64+28*2048+28*2,
21   11*64+11*2048+11*2,6*64+6*2048+6*2,0x2708,
22
23   11*2048+14*2,14*2048+17*2, 17*2048,31*2048,31*2048+31*2,
24   17*64+17*2048,31*64+31*2048,16*64+16*2048+16*2,31*64+31*2048+31*2};
25
26 unsigned char   stgt_def[30]={
27   192,144, 96, 72, 48, 36, 24, 18, 12,  6,
28   188,140, 92, 68, 45, 34, 22, 16, 10,  5,
29   1, 15, 29, 43, 57, 71, 85, 99,113,127};
30 #endif
31
32 char    tim_asin2[33];
33 char    defrhyna[32][15];
34 unsigned char   defrhyno[32][2];
35
36 char    def_user_exc_memo[8][25];
37 unsigned char   def_user_exc_data[8][24];
38
39
40 /* ================================================== file */
41 #if     STED
42 void    rhinit()
43 {
44   int   i;
45
46   for(i=0;i<32;i++){rhinit2(i);}
47 }
48 void    rhinit2(int i)
49 {
50   strcpy(rhyna[i],defrhyna[i]);
51   rhyno[i][0]=defrhyno[i][0];rhyno[i][1]=defrhyno[i][1];
52 }
53 void    user_exc_init()
54 {
55   int   i;
56
57   for(i=0;i<8;i++){user_exc_init2(i);}
58 }
59 void    user_exc_init2(int i)
60 {
61   int   j;
62
63   strcpy(user_exc_memo[i],def_user_exc_memo[i]);
64   for(j=0;j<24;j++){user_exc_data[i][j]=def_user_exc_data[i][j];}
65 }
66
67 /***************************/
68 void    stgt_init()
69 {
70   int i;
71
72   for(i=0;i<30;i++){stgt_init2(i);}
73 }
74 void    stgt_init2(int i)
75 {
76   stgt_tbl[i]=stgt_def[i];
77 }
78 /***************************/
79 void    asin_change()
80 {
81   int   a,i;
82
83   if((mdlflag&3)==1){
84     for(i=1;i<=16;i++){if(tim_asin[i]<4){tim_asin[i]=0;}}
85     for(i=0x8d;i<=0x8d+8;i++){
86       a=cm6[i]+1;
87       if(a<17){
88         if( tim_asin[a]==0){
89           if(i<0x8d+8){tim_asin[a]=1;}else{tim_asin[a]=2;}
90         }
91       }
92     }
93     for(i=0x583c;i<=0x583c+5;i++){
94       a=cm6[i]+1;if(a<17){if( tim_asin[a]==0){tim_asin[a]=3;}}
95     }
96   }
97 }
98
99 void    asin_init()
100 {
101   int   i;
102   for(i=1;i<33;i++){tim_asin[i]=tim_asin2[i];}
103 }
104 /***************************/
105 void    cnfinit()
106 {
107   int i;
108
109   inpmode=0;grpmode=0;thrumode=0;vis_reso=100;
110
111   for(i=0;i<16;i++){mplay[i][0]=0;palet_dat[i]=gpal_no[i];}
112   strcpy(mplay[1],"rcp -pbs");strcpy(mplay[9],"rcp -ps");
113
114   for(i=0;i<128;i++){keyst_table[0][i]=0;keyst_table[1][i]=0;}
115   for(i=0;i<26*3*2;i++){repl_t[i][0]=0;repl_d[i][0]=0;}
116
117   for(i=0;i<16;i++){rhy_vel[i]=0;}
118   for(i=1;i<10;i++){rhy_vel[i]=i*14;}
119 }
120 #endif
121 /***************************/
122 void    definit()
123 {
124   int   i,j;
125
126   strcpy(card_name[0],"NoUse <<PCM CARD>>");
127   for(i=1;i<17;i++){strcpy(card_name[i]," --------");}
128
129   for(i=0;i<80*128;i++){tim_name[i][0]=0;}
130   for(i=0;i<400;i++){tim_top[i]=0;tim_name[i][0]=0;tim_head[i][0]=0;}
131
132   for(i=0;i<8;i++){for(j=0;j<24;j++){
133     def_user_exc_memo[i][j]=0;def_user_exc_data[i][j]=0xf7;}}
134
135   init_exc_data[0]=255;
136
137   for(i=0;i<18*128;i++){gs_bank[i]=0;}
138   for(i=0;i<18;i++){gs_mode[i]=0;}
139   gs_mode[16]=4;
140
141   for(i=0;i<16;i++){rfilt[i][0]=0;rfilt[i][1]=0;rfilt[i+16][0]=128;rfilt[i+16][1]=128;}
142
143   rec_met[0]=16;rec_met[1]=0;
144   rec_met[2]=64;rec_met[3]=2;rec_met[4]=117;
145   rec_met[5]=64;rec_met[6]=2;rec_met[7]=127;
146
147   rhy_stest[0]=10;rhy_stest[1]=-1;
148   rhy_stest[2]=-1;rhy_stest[4]=127;
149
150   player_name[0]=0;       /* Jun.28.1998 Daisuke Nagano */
151   midi_port_name[0]=0;    /* Sep.02.1998 Daisuke Nagano */
152   font_name[0]=0;         /* Sep.04.1998 */
153   player_flag=0;          /* Nov.25.1998 */
154
155   strcpy( KEY_XF1,    "Alt_L" );
156   strcpy( KEY_XF2,    "Muhenkan" );
157   strcpy( KEY_XF3,    "Henkan_Mode" );
158   strcpy( KEY_XF4,    "Hiragana_Katakana" );
159   strcpy( KEY_XF5,    "Alt_R" );
160   strcpy( KEY_KANA,   "Caps_Lock" );
161   strcpy( KEY_KIGO,   "F11" );
162   strcpy( KEY_TOROKU, "F12" );  /* Nov 25.1998 Daisuke Nagano */
163   strcpy( KEY_INS,    "Insert" );
164   strcpy( KEY_DEL,    "Delete" );
165   strcpy( KEY_HOME,   "Home" );
166   strcpy( KEY_UNDO,   "End" );
167   strcpy( KEY_RUP,    "Page_Up" );
168   strcpy( KEY_RDOWN,  "Page_Down" );
169   strcpy( KEY_OPT1,   "" );
170   strcpy( KEY_OPT2,   "" ); /* Dec.22.1998 Daisuke Nagano */
171
172
173   lsp_wait=1;bend_range=12;
174   tim_name_read();
175 }
176
177 /***************************/
178 /*
179   cmdflag=              gs_mode=        mdlfalg=
180   00        00             00              00
181   84218421 84218421     84218421        84218421
182   00000000 00000000     00000000        00000000
183   |||||||| ||||||||     ||   |||        ||||||||
184   |||||||| ||||||||     ||   |||        ||||++++MODULE ID(1=CM-64 2=SC-55
185   |||||||| ||||||||     ||   |||        ++++----          3=SC-88)
186   |||||||| ||||||||     ||   ||+bit0    1=capital down on
187   |||||||| ||||||||     ||   |+-bit1    1=rhy.cap down on
188   |||||||| ||||||||     ||   +--bit2    0=bank msb 1=bank lsb
189   |||||||| ||||||||     ||
190   |||||||| ||||||||     |+------bit6    1=rhythm mode on
191   |||||||| ||||||||     +-------bit7    1=bank mode on
192   |||||||| |||||||+TIMBRE NAME
193   |||||||| ||||||+-RET&SPC
194   |||||||| |||||+--SPC.CTRL SEL
195   |||||||| ||||+---BUF LOAD
196   |||||||| |||+----BUF SET
197   |||||||| ||+-----PROG_MIN
198   |||||||| |+------ALL NOTE OFF
199   |||||||| +-------RCD POINT PLAY
200   |||||||+Rol.Para HEX
201   ||||||+-MOUSE CONTROL (0=on 1=off)
202   |||||+--RHY AS. check (0=yes/no check 1=all yes)
203   ||||+---RHY AS. change(0=on 1=off)
204   |||+----timbre select (0=val 1=sel)
205   ||+-----timbre select mode(0=normal 1=bank)
206   |+------meas play mluti track lsp
207   +-------rcp panel mode
208
209   cnfflag=
210   00       00
211   84218421 84218421
212   00000000 00000000
213   |||||||| ||||||||
214   |||||||| |||||||+file selecter sort
215   |||||||| ||||||+-file write check
216   |||||||| |||||+--file back up
217   |||||||| ||||+---file selecter path move(0=on 1=off)
218   |||||||| |||+----
219         |||||||| ||+-----
220         |||||||| |+------file save mode(0=r36 1=rcp)
221         |||||||| +-------file load part assign read
222         ||||||||
223         |||||||+
224         ||||||+-t.set. option mode(0=option2 1=option1)
225         |||||+--t.edit option mode(0=option2 1=option1)
226         ||||+---
227         |||+----replace selecter mode(0=normal 1=select)
228         ||+-----one touch stgt  (0=normal 1=chord)
229         |+------visual edit     (0=normal 1=wide)
230         +-------gs bar display  (0=normal 1=reverse)
231         */
232
233 int     defload(char *fi,int md)
234 {
235   char  tmp0[2048],tmp1[1024],li[1024],li2[1024];
236   int   ad,nm,ln,n,i0=0,i1=0,f,mutef=0,initf=0;
237   int   last_no=4*128,last_co=0;
238   FILE  *fp;
239
240   if(str_search(fi,".dfb")||str_search(fi,".DFB")>0){return def_bload(fi,md);}
241
242   /*if(!(fp= fopen2(fi,"rb"))){return(-1);}*/
243
244   if ((fp=fopen2(fi,"rb"))==NULL) {
245     strcpy( tmp0, STED_DEFAULT_PATH );
246     if ( tmp0[strlen(tmp0)]!='/' ) strcat(tmp0,"/");
247     strcat( tmp0, (strrchr(fi,'/')==NULL)?fi:(strrchr(fi,'/')+1) );
248     if ((fp=fopen2( tmp0, "rb" ))==NULL) return(-1);
249   } /* Oct.13.1998 by Daisuke Nagano */
250   ln=fread(dat,1,work_size,fp);ad=0;nm=99999;
251
252 #if     STED
253   if(md==0){
254     /*B_PRINT("定義ファイルのロード中です。\r\n");*/ /* Oct.17.1998 by Daisuke Nagano */
255   }
256   if(md==1){
257     msg(_("Loading config file.\n"));
258   }
259 #endif
260 #if     CONV
261   B_PRINT(_("Compiling config file.\n"));
262 #endif
263
264   while(ln>0){
265   top:
266     n=0;
267     while(1){
268       unsigned char     a;
269     loop:
270       a=dat[ad++];
271       ln--;if(ln==0){ln=fread(dat,1,work_size,fp);ad=0;if(ln==0){break;}}
272       if(a<32){
273         /*if(a==13){break;}*/ /* Sep.02.1998 Daisuke Nagano */
274         if(a==13||a==0x0a){break;}
275         if(a==9){goto loop;}
276         a=32;
277       }else{
278         if(a=='*'){a=0;
279         if(n!=0 && li[n-1]=='\\'){n--;a='*';}
280         }
281         if(a=='=' && li[0]=='#'){while(li[n-1]==' '){n--;}}
282       }
283       li[n++]=a;
284     }
285     li[n]=0;li[1023]=0;
286     /*if(dat[ad]==0x0a){ad++;*/ /* Sep.02.1998 Daisuke Nagano */
287     if(dat[ad]==0x0a||dat[ad]==0x0d){ad++;
288     ln--;if(ln==0){ln=fread(dat,1,work_size,fp);ad=0;}
289     }
290
291     spcut(li);
292     if( li[0]==0 ){goto top;}
293
294     if( li[0]=='#' ){
295       strcpy(li2,li);jstrupr(li2);
296
297       if( str_search(li2,"#END")>0 ){break;}
298
299 #if     STED
300       if( str_search(li2,"#COMMENT=")>0 ){strcpy(comment,&li[9]);}
301
302       if( str_search(li2,"#DEF_FILE=")>0 ){
303         if(def_file[0]==0){strcpy(def_file,&li[10]);}}
304       if( str_search(li2,"#DEF_PATH=")>0 ){
305         if(def_path[0]==0){strcpy(def_path,&li[10]);}}
306
307       if( str_search(li2,"#FON_PATH=")>0 ){
308         if(fon_path[0]==0){strcpy(fon_path,&li[10]);}}
309       if( str_search(li2,"#HLP_PATH=")>0 ){
310         if(hlp_path[0]==0){strcpy(hlp_path,&li[10]);}}
311
312       if( str_search(li2,"#PRT_PATH=")>0 ){
313         if(prt_path[0]==0){strcpy(prt_path,&li[10]);}}
314       if( str_search(li2,"#TRK_PATH=")>0 ){
315         if(trk_path[0]==0){strcpy(trk_path,&li[10]);}}
316
317       if(str_search(li2,"#FSORT=ON"    )>0){cnfflag|=0x0001;}
318       if(str_search(li2,"#FCHECK=ON"   )>0){cnfflag|=0x0002;}
319       if(str_search(li2,"#FBACKUP=ON"  )>0){cnfflag|=0x0004;}
320       if(str_search(li2,"#FSEL_MOV=OFF")>0){cnfflag|=0x0008;}
321       if(str_search(li2,"#SAVE_DEF=RCP")>0){cnfflag|=0x0040;}
322       if(str_search(li2,"#PAS_READ=OFF")>0){cnfflag|=0x0080;}
323
324       /*                        if(str_search(li2,"#MAIN_OPT=ON" )>0){cnfflag|=0x0100;}*/
325       if(str_search(li2,"#TSET_OPT=ON" )>0){cnfflag|=0x0200;}
326       if(str_search(li2,"#TEDT_OPT=ON" )>0){cnfflag|=0x0400;}
327       if(str_search(li2,"#REPL_SEL=ON" )>0){cnfflag|=0x1000;}
328
329       if(str_search(li2,"#ONE_CHORD=ON")>0){cnfflag|=0x2000;}
330       if(str_search(li2,"#VIS_WIDE=ON" )>0){cnfflag|=0x4000;}
331       if(str_search(li2,"#BAR_REV=ON"  )>0){cnfflag|=0x8000;}
332
333       if(str_search(li2,"#TONENAME=OFF")>0){cmdflag|=0x0001;}
334       if(str_search(li2,"#ENTER=ON"    )>0){cmdflag|=0x0002;}
335       if(str_search(li2,"#SPC_SEL=ON"  )>0){cmdflag|=0x0004;}
336       if(str_search(li2,"#PROG_MIN=1"  )>0){cmdflag|=0x0020;}
337       if(str_search(li2,"#NOTEOFF=ON"  )>0){cmdflag|=0x0040;}
338       if(str_search(li2,"#ROL_HEX=ON"  )>0){cmdflag|=0x0100;}
339       if(str_search(li2,"#RHY_TRK=ON"  )>0){cmdflag|=0x0400;}
340       if(str_search(li2,"#RHY_TRK=OFF" )>0){cmdflag|=0x0800;}
341       if(str_search(li2,"#TONESEL=OFF" )>0){cmdflag|=0x1000;}
342       if(str_search(li2,"#TSELBANK=ON" )>0){cmdflag|=0x2000;}
343       if(str_search(li2,"#MP_MLSP=OFF" )>0){cmdflag|=0x4000;}
344
345       /*                        if(str_search(li2,"#RHY_SYM=ON"  )>0){cmdflag|=0x20000;}*/
346       if(str_search(li2,"#THRUMODE=ON" )>0){thrumode=1;}
347
348       if( str_search(li2,"#TIME_LAG=")>0){
349         int n=str_val(&li[10]);if( n>99 && n<65536 ){tm_lag=n;}
350       }
351       if( str_search(li2,"#EDIT_MODE=")>0){
352         int n=str_val(&li[11]);if( n>=0 && n<6 ){inpmode=n;}
353       }
354       if( str_search(li2,"#GRAP_MODE=")>0){
355         int n=str_val(&li[11]);if( n>=0 && n<8 ){grpmode=n;}
356       }
357
358       if( str_search(li2,"#VIS_RESO=")>0){
359         int n=str_val(&li[10]);if( n>=1 && n<=100 ){vis_reso=n;}
360       }
361
362       if( str_search(li2,"#PROGRAM=")>0 ){cnf_prog(li,li2,0);}
363       if( str_search(li2,"#SUBPROG=")>0 ){cnf_prog(li,li2,1);}
364
365       if( str_search(li2,"#REPLACE=")>0 ){cnf_repl(li,li2,0);}
366       if( str_search(li2,"#DELETE=")>0 ){cnf_repl(li,li2,1);}
367       if( str_search(li2,"#FIND=")>0 ){cnf_repl(li,li2,2);}
368
369       if( str_search(li2,"#MPLAY=")>0 ){
370         int     c,n;
371         n=li2[7]-'0';
372         if(n>=0 && n<16){
373           strcpy(tmp1,&li[9]);strcat(tmp1,",");
374           while(n<16){
375             c=str_search(tmp1,",");if( c==0 ){break;}
376             strcpy(tmp0,tmp1);tmp0[c-1]=0;spcut(tmp0);
377             strcpy(tmp1,&tmp1[c]);
378             tmp0[15]=0;
379             strcpy(mplay[n],tmp0);
380             n++;
381           }
382         }
383       }
384
385       if( str_search(li2,"#RHY_VEL=")>0 ){cnf_rvel(li);}
386
387       if( str_search(li2,"#FKEY_ST=")>0 ){cnf_stgt(li,0);}
388       if( str_search(li2,"#FKEY_GT=")>0 ){cnf_stgt(li,10);}
389       if( str_search(li2,"#FKEY_VE=")>0 ){cnf_stgt(li,20);}
390
391       if( str_search(li2,"#KEYST=")>0 ){
392         int     c,n,k=0;
393         strcpy(tmp1,&li[7]);strcat(tmp1,",");n=0;
394         while(n<3){
395           c=str_search(tmp1,",");if( c==0 ){break;}
396           strcpy(tmp0,tmp1);tmp0[c-1]=0;spcut(tmp0);
397           strcpy(tmp1,&tmp1[c]);
398           if(n==0){
399             k=ctc(64,tmp0,0);
400             if(k<0||k>127){break;}
401           }else{
402             keyst_table[n-1][k]=str_val(tmp0);
403           }
404           n++;
405         }
406       }
407
408       if( str_search(li2,"#PALET")>0 ){
409         int     c,n;
410         c=str_search(li,"=");
411         if(c){
412           li2[c]=0;n=str_val(&li2[6]);
413           if(n>=0 && n<16){
414             strcpy(tmp1,&li[c]);strcat(tmp1,",");
415             while(n<16){
416               c=str_search(tmp1,",");if( c==0 ){break;}
417               strcpy(tmp0,tmp1);tmp0[c-1]=0;
418               spcut(tmp0);palet_dat[n]=str_val(tmp0);
419               strcpy(tmp1,&tmp1[c]);n++;
420             }
421           }
422         }
423       }
424
425 #endif
426
427       if( str_search(li2,"#MODULE=")>0 ){strcpy(module,&li[8]);}
428
429       if( str_search(li2,"#ID=")>0 ){
430         strcpy(tmp1,&li2[4]);
431         if( str_search(tmp1,"CM64")>0 ){mdlflag|=1;}
432         if( str_search(tmp1,"SC55")>0 ){mdlflag|=2;}
433         if( str_search(tmp1,"SC88")>0 ){mdlflag|=3;}
434         if( str_search(tmp1,"05RW")>0 ){mdlflag|=4;}
435       }
436       if( str_search(li2,"#MUTE=")>0 ){
437         strcpy(tmp1,&li2[6]);mutef=0;
438         if( str_search(tmp1,"OFF")>0  ){mutef=1;}
439         if( str_search(tmp1,"CM64")>0 ){mutef=2;}
440         if( str_search(tmp1,"SC55")>0 ){mutef=3;}
441       }
442       if( str_search(li2,"#INIT=")>0 ){
443         strcpy(tmp1,&li2[6]);initf=0;
444         if( str_search(tmp1,"OFF")>0  ){initf=1;}
445         if( str_search(tmp1,"CM64")>0 ){initf=2;}
446         if( str_search(tmp1,"SC55")>0 ){initf=3;}
447         if( str_search(tmp1,"SC88")>0 ){initf=5;}
448       }
449
450       if( str_search(li2,"#LSP_WAIT=")>0){
451         int n=str_val(&li[10]);if( n>=-1 && n<16 ){lsp_wait=n;}
452       }
453       if( str_search(li2,"#PB_RANGE=")>0){
454         int n=str_val(&li[10]);if( n>0 && n<96 ){bend_range=n;}
455       }
456
457       if( str_search(li2,"#GROUP")>0 ){
458         int     c,n;
459         c=str_search(li,"=");
460         if(c!=0){
461           n=0;if(li2[7]=='B'){n=16;}
462           strcpy(tmp1,&li[c]);strcat(tmp1,",");
463           while(n<32){
464             c=str_search(tmp1,",");if(c==0){break;}
465             strcpy(tmp0,tmp1);tmp0[c-1]=0;
466             n++;tim_asin2[n]=str_val(tmp0);
467             strcpy(tmp1,&tmp1[c]);
468           }
469         }
470       }
471       if( str_search(li2,"#CARD_NO=")>0 ){
472         int n=str_val(&li[9]);if(n>=0 && n<=16){card_no[0]=n;}
473       }
474
475       if( str_search(li2,"#PART=")>0 ){
476         int     ch,c,n;
477         ch=str_val(&li2[6])-1;
478         c=str_search(li,",");
479         if(ch>=0 && ch<400){
480           strcpy(tmp1,&li[c]);strcat(tmp1,",");n=0;
481           while(n<2){
482             c=str_search(tmp1,",");if( c==0 ){break;}
483             strcpy(tmp0,tmp1);tmp0[c-1]=0;
484             if(n==0){strcpy(tim_head[ch],tmp0);}
485             else{strcpy(tim_sym[ch],tmp0);}
486             strcpy(tmp1,&tmp1[c]);n++;
487           }
488           nm=ch*128;if( ch==1 ){nm=192;}
489           if(tmp1[0]!=0){nm+=str_val(tmp1);}
490
491           if(ch>3){
492             if(last_no<80*128-1){
493               tim_name[last_no++][0]=0;
494               tim_top[ch]=last_no;last_co=0;
495               if(tmp1[0]!=0){last_co=str_val(tmp1);}
496             }
497           }
498         }
499       }
500       if( str_search(li2,"#USER_EXC=")>0 ){
501         int     ch,c;
502         char    tmp9[128];
503         ch=str_val(&li2[10]);
504         c=str_search(li,",");
505         if(ch>=0 && ch<=7){
506           int   i=0,j=0;
507           strcpy(tmp1,&li[c]);
508           c=str_search(tmp1,",");
509           strcpy(tmp0,tmp1);if(c){tmp0[c-1]=0;}
510           spcut(tmp0);
511
512           while(i<c && j<24 && tmp0[i]!=0){
513             int a;
514             if(tmp0[i]==32){i++;}else{
515               strcpy(tmp9,&tmp0[i]);
516               if(tmp9[1]==0){
517                 tmp9[1]='H';tmp9[2]=0;
518               }else{
519                 tmp9[2]='H';tmp9[3]=0;
520               }
521               a=str_val(tmp9);tmp9[2]=0;
522               if(strcmp(tmp9,"GT")==0){a=0x80;}
523               if(strcmp(tmp9,"VE")==0){a=0x81;}
524               if(strcmp(tmp9,"CH")==0){a=0x82;}
525               if(strcmp(tmp9,"CS")==0){a=0x83;}
526               if(strcmp(tmp9,"SS")==0){a=0x84;}
527
528               def_user_exc_data[ch][j++]=a;
529               i=i+2;
530             }
531           }
532           if(c){
533             strcpy(tmp0,&tmp1[c]);
534             tmp0[24]=0;strcpy(def_user_exc_memo[ch],tmp0);
535           }
536         }
537       }
538       if( str_search(li2,"#INIT_EXC=")>0 ){def_init(li);}
539
540       if( str_search(li2,"#CARD=")>0 ){
541         int     c,ch;
542         strcpy(tmp1,&li[6]);
543         c=str_search(tmp1,",");
544         if(c){
545           strcpy(tmp0,tmp1);tmp0[c-1]=0;ch=str_val(tmp0);
546           strcpy(tmp0,&tmp1[c]);
547           if(ch>0 && ch<17){
548             strcpy(card_name[ch],tmp0);
549             nm=(ch+15)*128;
550
551             if(last_no<80*128-1){
552               tim_name[last_no++][0]=0;
553               tim_top[ch+15]=last_no;last_co=0;
554             }
555           }
556         }
557       }
558
559       if( str_search(li2,"#GS_PBANK")>0 ){gs_mode[ 7]|=128   ;nm=0x10380;}
560       if( str_search(li2,"#GS_RBANK")>0 ){gs_mode[ 8]|=128+64;nm=0x10400;}
561       if( str_search(li2,"#GM_PBANK")>0 ){gs_mode[ 9]|=128   ;nm=0x10480;}
562       if( str_search(li2,"#GM_RBANK")>0 ){gs_mode[10]|=128+64;nm=0x10500;}
563       if( str_search(li2,"#GX_PBANK")>0 ){gs_mode[11]|=128   ;nm=0x10580;}
564       if( str_search(li2,"#GX_RBANK")>0 ){gs_mode[12]|=128+64;nm=0x10600;}
565       if( str_search(li2,"#GY_PBANK")>0 ){gs_mode[13]|=128   ;nm=0x10680;}
566       if( str_search(li2,"#GY_RBANK")>0 ){gs_mode[14]|=128+64;nm=0x10700;}
567
568       if( str_search(li2,"#GS_PGROUP")>0 ){gs_mode[16]|=128   ;nm=0x10800;}
569       if( str_search(li2,"#GS_RGROUP")>0 ){gs_mode[17]|=128+64;nm=0x10880;}
570
571       if( str_search(li2,"#GS_GMODE=")>0){
572         int     n=str_val(&li[10]);
573         if( n>=0 && n<16){gs_mode[16]&=0xf0;gs_mode[16]|=n;}
574       }
575
576       if( str_search(li2,"#GS_MODE=")>0){
577         int     n=str_val(&li[9]);
578         if( n>=0 && n<16){gs_mode[7]&=0xf0;gs_mode[7]|=n;}
579       }
580       if( str_search(li2,"#GM_MODE=")>0){
581         int     n=str_val(&li[9]);
582         if( n>=0 && n<16){gs_mode[9]&=0xf0;gs_mode[9]|=n;}
583       }
584       if( str_search(li2,"#GX_MODE=")>0){
585         int     n=str_val(&li[9]);
586         if( n>=0 && n<16){gs_mode[11]&=0xf0;gs_mode[11]|=n;}
587       }
588       if( str_search(li2,"#GY_MODE=")>0){
589         int     n=str_val(&li[9]);
590         if( n>=0 && n<16){gs_mode[13]&=0xf0;gs_mode[13]|=n;}
591       }
592
593       if( str_search(li2,"#RHY_AS=")>0 ){
594         int     c;
595         nm=0x10000+128*18;i0=0;i1=0;
596
597         c=str_search(li,"=");
598         if(c!=0){
599           int n=0;
600           strcpy(tmp1,&li[c]);strcat(tmp1,",");
601           while(n<6){
602             int cc;
603             c=str_search(tmp1,",");if(c==0){break;}
604             strcpy(tmp0,tmp1);tmp0[c-1]=0;
605             if(n==0){cc=strch(0,tmp0);
606             }else{cc=str_val(tmp0);}
607             if((cc>=0||(n>0 && n<5))&& cc<=127){rhy_stest[n]=cc;}
608             strcpy(tmp1,&tmp1[c]);
609             n++;
610           }
611         }
612       }
613
614
615       if( str_search(li2,"#REC_MET")>0 ){
616         int     c,n;
617         c=str_search(li,"=");
618         if(c!=0){
619           n=0;
620           strcpy(tmp1,&li[c]);strcat(tmp1,",");
621           while(n<10){
622             c=str_search(tmp1,",");if(c==0){break;}
623             strcpy(tmp0,tmp1);tmp0[c-1]=0;
624             rec_met[n++]=str_val(tmp0);
625             strcpy(tmp1,&tmp1[c]);
626           }
627         }
628       }
629
630       if( str_search(li2,"#DEFOFF")>0 ){nm=99999;}
631
632
633       /* the following configurations are introduced only UNIX version */
634
635       if( str_search(li2,"#PLAYER=")>0 ){
636         player_flag=li[8]-'0';strcpy(player_name,&li[10]); }
637       /* Jun.28.1998 Daisuke Nagano, Nov.12.1998 kino */
638
639       /*if( str_search(li2,"#ISSMFPLAYER=TRUE")>0 ){issmfplayer=1;}*/
640       /* Aug.09.1998 Daisuke Nagano, Nov.12.1998 kino */
641
642       if( str_search(li2,"#MIDI_PORT=")>0 ){
643         strcpy(midi_port_name, &li[11]); }
644       /* Sep.02.1998 Daisuke Nagano */
645
646       if( str_search(li2,"#FONT_NAME=")>0 ){
647         strcpy(font_name, &li[11]); }
648       /* Sep.04.1998 Daisuke Nagano */
649
650       if ( str_search(li2, "#KEY_XF1=")>0 )
651         strcpy( KEY_XF1, &li[9]);
652       if ( str_search(li2, "#KEY_XF2=")>0 )
653         strcpy( KEY_XF2, &li[9]);
654       if ( str_search(li2, "#KEY_XF3=")>0 )
655         strcpy( KEY_XF3, &li[9]);
656       if ( str_search(li2, "#KEY_XF4=")>0 )
657         strcpy( KEY_XF4, &li[9]);
658       if ( str_search(li2, "#KEY_XF5=")>0 )
659         strcpy( KEY_XF5, &li[9]);
660       if ( str_search(li2, "#KEY_KANA=")>0 )
661         strcpy( KEY_KANA, &li[10]);
662       if ( str_search(li2, "#KEY_KIGO=")>0 )
663         strcpy( KEY_KIGO, &li[10]);
664       if ( str_search(li2, "#KEY_TOROKU=")>0 )
665         strcpy( KEY_TOROKU, &li[12]);
666       /* Nov.25.1998 Daisuke Nagano */
667
668       if ( str_search(li2, "#KEY_INS=")>0 )
669         strcpy( KEY_INS, &li[9]);
670       if ( str_search(li2, "#KEY_DEL=")>0 )
671         strcpy( KEY_DEL, &li[9]);
672       if ( str_search(li2, "#KEY_HOME=")>0 )
673         strcpy( KEY_HOME, &li[10]);
674       if ( str_search(li2, "#KEY_UNDO=")>0 )
675         strcpy( KEY_UNDO, &li[10]);
676       if ( str_search(li2, "#KEY_RUP=")>0 )
677         strcpy( KEY_RUP, &li[9]);
678       if ( str_search(li2, "#KEY_RDOWM=")>0 )
679         strcpy( KEY_RDOWN, &li[11]);
680       if ( str_search(li2, "#KEY_OPT1=")>0 )
681         strcpy( KEY_OPT1, &li[10]);
682       if ( str_search(li2, "#KEY_OPT2=")>0 )
683         strcpy( KEY_OPT2, &li[10]);
684       /* Dec.22.1998 Daisuke Nagano */
685
686     }else{
687       int       c;
688       char      *pp=li,*tmp0;
689       strcat(li,",");
690       while( nm<99999 ){
691         c=str_search(pp,",");if( c==0 ){break;}
692         tmp0=pp;tmp0[c-1]=0;pp+=c;
693
694         if(nm<0x10000 ){
695           if(c>15){tmp0[14]=0;}
696           spcut(tmp0);
697
698           if( nm<0x200 ){
699             strcpy(tim_name[nm],tmp0);
700           }else{
701             if(last_no<80*128-1){
702               if(tmp0[0]!=0){
703                 strcpy(tim_name[last_no],tmp0);
704                 tim_name[last_no++][14]=last_co;
705               }
706               if(last_co++==127){nm=99999;}
707             }
708           }
709         }else{
710           if(nm<0x10900){
711             int ch=str_val(tmp0);
712             if(ch<400){
713               gs_bank[nm-0x10000]=ch;
714             }
715           }else{
716             if(i0<32){
717               if(i1){
718                 defrhyno[i0][i1-1]=str_val(tmp0);
719                 /*if(i1==1){
720                   defrhyno[i0][0]=ctc(60,tmp0,0);
721                   }else{
722                   defrhyno[i0][1]=str_val(tmp0);
723                   }*/
724               }else{
725                 if(c>15){tmp0[14]=0;}
726                 strcpy(defrhyna[i0],tmp0);
727               }
728               i1++;if(i1>=3){i1=0;i0++;}
729             }
730           }
731         }
732         nm++;
733       }
734       /*                        if(md==1){msg(fstr(last_no,5));}*/
735     }
736   }
737   fclose(fp);
738   tim_name[last_no++][0]=0;
739
740 #if     STED
741   f=(mdlflag&0x7);if(f>2){f=2;}
742   if(f>0 && f<4){rcd->moduletype=f-1;}
743
744   if(mutef){rcd->mute_mode=mutef-1;}
745   if(initf){rcd->init_mode=initf-1;}
746
747 #endif
748 #if     CONV
749   def_bsave(fi,last_no,mutef,initf);
750 #endif
751
752   return(0);
753 }
754
755 /***************************//*4.66(2.18) 4.00(1.85)*/
756 /***************************/
757 #if     STED
758 void    cnf_stgt(char *li,int nn)
759 {
760   int   c,n;
761   char  tmp0[1024];
762   char  tmp1[1024];
763
764   c=str_search(li,"=");
765   if(c!=0){
766     strcpy(tmp1,&li[c]);strcat(tmp1,",");n=nn;
767     while(n<30){
768       c=str_search(tmp1,",");if(c==0){break;}
769       strcpy(tmp0,tmp1);tmp0[c-1]=0;
770       stgt_def[n++]=str_val(tmp0);
771       strcpy(tmp1,&tmp1[c]);
772     }
773   }
774 }
775
776 /***************************/
777 void    cnf_rvel(char *li)
778 {
779   int   c,n;
780   char  tmp0[1024];
781   char  tmp1[1024];
782
783   c=str_search(li,"=");
784   if(c!=0){
785     n=0;
786     strcpy(tmp1,&li[c]);strcat(tmp1,",");
787     while(n<15){
788       int cc;
789       c=str_search(tmp1,",");if(c==0){break;}
790       strcpy(tmp0,tmp1);tmp0[c-1]=0;
791       n++;cc=str_val(tmp0);
792       if(cc>=0 && cc<=127){rhy_vel[n]=cc;}
793       strcpy(tmp1,&tmp1[c]);
794     }
795   }
796 }
797
798 /***************************/
799 void    cnf_prog(char *li,char *li2,int md)
800 {
801   int   i,c,n;
802   char  tmp0[1024];
803   char  tmp1[1024];
804
805   i=li2[9]-'A';
806
807   if(i>=0 && i<26){
808     if(md){i+=26;}
809     strcpy(tmp1,&li[11]);strcat(tmp1,",");n=0;
810     while(n<4){
811       c=str_search(tmp1,",");if( c==0 ){break;}
812
813       if(c>1 && tmp1[c-2]=='\\'){
814         int d;
815         strcpy(&tmp1[c-2],&tmp1[c-1]);
816
817         d=str_search(&tmp1[c-1],",");if( d==0 ){break;}
818         c+=d-1;
819       }
820
821       strcpy(tmp0,tmp1);tmp0[c-1]=0;spcut(tmp0);
822       strcpy(tmp1,&tmp1[c]);
823       if((n&1)==0){
824         tmp0[38+10]=0;
825         strcpy(chcom_s[i][n>>1],tmp0);
826       }else{
827         tmp0[15]=0;
828         strcpy(chcom_c[i][n>>1],tmp0);
829       }
830       n++;
831     }
832   }
833 }
834
835 /***************************/
836 void    cnf_repl(char *li,char *li2,int md)
837 {
838   int   i,c;
839   char  tmp0[1024];
840   char  tmp1[1024];
841
842   c=9;if(md){c=8;if(md>1){c=6;}}
843
844   i=li2[c]-'A';
845   if(li2[c]=='S' && li2[c+1]>='A' && li2[c+1]<='Z'){i=(li2[c+1]-'A')+26;c++;}else{
846     if(li2[c]==' '){i=(li2[c+1]-'A');c++;}}
847
848   c=str_search(li,",");if( c==0 ){return;}
849
850   if(i>=0 && i<52){
851     strcpy(tmp1,&li[c/*+2*/]);
852     c=str_search(tmp1,",");if( c==0 ){return;}
853     strcpy(tmp0,tmp1);tmp0[c-1]=0;spcut(tmp0);
854     strcpy(tmp1,&tmp1[c]);spcut(tmp1);
855
856     while(tmp1[0]==32){strcpy(tmp1,&tmp1[1]);}
857
858     tmp0[35]=0;strcpy(repl_t[i+md*52],tmp0);
859     tmp1[35]=0;strcpy(repl_d[i+md*52],tmp1);
860   }
861 }
862 #endif
863
864 /***************************/
865 void    def_init(char *li)
866 {
867   char  tmp0[1024];
868   char  tmp1[1024];
869   int   i=0,j=0,sum=0;
870
871   strcpy(tmp0,&li[10]);
872   spcut(tmp0);
873
874   while(j<256 && tmp0[i]!=0){
875     int a;
876     if(tmp0[i]==32){i++;
877     }else{
878       strcpy(tmp1,&tmp0[i]);
879       if(tmp1[1]==0){
880         tmp1[1]='H';tmp1[2]=0;
881       }else{
882         tmp1[2]='H';tmp1[3]=0;
883       }
884       a=str_val(tmp1);tmp1[2]=0;
885       if(strcmp(tmp1,"CS")==0){sum=0;goto ne;}
886       if(strcmp(tmp1,"SS")==0){a=(127-(sum&0x7f)&0x7f);}
887       init_exc_data[j++]=a;sum+=a;
888     }
889   ne:
890     i=i+2;
891   }
892   init_exc_data[j]=0xff;
893 }
894
895 /***************************/
896 #if     CONV
897 int     defsave(char *fi,int md,int mutef,int initf)
898 {
899   int   ln,n=0,i,j,k;
900   FILE  *fp;
901
902   char gggg[12][12]={"#gs_pbank","#gs_rbank","#gm_pbank","#gm_rbank",
903                      "#gx_pbank","#gx_rbank","#gy_pbank","#gy_rbank","",
904                      "#gs_pgroup","#gs_rgroup"};
905
906   char  li0[]= "*--------------------------------------------------------------------------------------\r\n";
907   char  li1[]= "*======================================================================================\r\n";
908
909   strmfe(fi,fi,"def");
910   if(!(fp=fopen2(fi,"wb"))){B_PRINT("ファイルがオープン出来ません。\r\n");exit(1);}
911
912   n=buf_put(li0,n);
913
914   n=buf_put("\r\n#module=",n);n=buf_put(module,n);n=buf_put("\r\n\r\n",n);
915
916
917   if(mdlflag&15){
918     n=buf_put("#id=",n);
919     if((mdlflag&15)==1){n=buf_put("cm64",n);}
920     if((mdlflag&15)==2){n=buf_put("sc55",n);}
921     if((mdlflag&15)==3){n=buf_put("sc88",n);}
922     if((mdlflag&15)==4){n=buf_put("05rw",n);}
923     n=buf_put("\r\n",n);
924   }
925
926   if( mutef>0 ){
927     n=buf_put("#mute=",n);
928     if(mutef==1){n=buf_put("off",n);}
929     if(mutef==2){n=buf_put("cm64",n);}
930     if(mutef==3){n=buf_put("sc55",n);}
931     n=buf_put("\r\n",n);
932   }
933   if( initf>0 ){
934     n=buf_put("#init=",n);
935     if(initf==1){n=buf_put("off",n);}
936     if(initf==2){n=buf_put("cm64",n);}
937     if(initf==3){n=buf_put("sc55",n);}
938     if(initf==5){n=buf_put("sc88",n);}
939     n=buf_put("\r\n",n);
940   }
941
942   n=buf_put("\r\n",n);
943   if(card_no[0]){
944     n=buf_put("#card_no=",n);n=buf_put(fstr(card_no[0],2),n);n=buf_put("\r\n",n);
945   }
946   n=buf_put("#lsp_wait=",n);n=buf_put(fstr(lsp_wait,2),n);n=buf_put("\r\n",n);
947   if(bend_range!=12){
948     n=buf_put("#pb_range=",n);n=buf_put(fstr(bend_range,2),n);n=buf_put("\r\n",n);
949   }
950   n=buf_put("\r\n",n);
951
952   n=buf_put(li1,n);
953
954   n=buf_put("\r\n#rec_met=",n);
955   for(i=0;i<8;i++){n=buf_put(fstr(rec_met[i],3),n);if(i<7){n=buf_put(",",n);}}
956   n=buf_put("\r\n\r\n",n);
957
958   n=buf_put(li1,n);
959
960
961   for(i=0;i<8;i++){
962     n=buf_put("#user_exc=",n);
963     n=buf_put(fstr(i,1),n);n=buf_put(",",n);
964     n=buf_put(exc_str(def_user_exc_data[i],24,0),n);
965     n=buf_put(",",n);
966     n=buf_put(def_user_exc_memo[i],n);n=buf_put("\r\n",n);
967   }
968   n=buf_put("\r\n",n);
969
970   if(init_exc_data[0]!=0xff){
971     n=buf_put("#init_exc=",n);
972     n=buf_put(exc_str(init_exc_data,256,1),n);
973     n=buf_put("\r\n\r\n",n);
974   }
975
976   n=buf_put(li1,n);
977
978   n=buf_put("#rhy_as=",n);
979   for(i=0;i<5;i++){n=buf_put(fstr(rhy_stest[i],3),n);if(i<4){n=buf_put(",",n);}}
980   n=buf_put("\r\n",n);
981   for(i=0;i<32;i++){
982     n=buf_put(defrhyna[i],n);n=buf_put(",",n);
983     n=buf_put(fstr(defrhyno[i][0],3),n);n=buf_put(",",n);
984     if(defrhyno[i][1]<100){
985       n=buf_put(fstr(defrhyno[i][1],2),n);
986     }else{
987       n=buf_put(fstr(defrhyno[i][1],3),n);
988     }
989     if((i&3)==3){n=buf_put("\r\n",n);}else{n=buf_put(",",n);}
990   }
991   n=buf_put("#defoff\r\n\r\n",n);
992
993   n=buf_put(li1,n);
994
995
996   n=buf_put("#group_a=",n);
997   for(i=1;i<17;i++){n=buf_put(fstr(tim_asin2[i],2),n);if(i<16){n=buf_put(",",n);}}
998   n=buf_put("\r\n",n);
999   n=buf_put("#group_b=",n);
1000   for(i=17;i<33;i++){n=buf_put(fstr(tim_asin2[i],2),n);if(i<32){n=buf_put(",",n);}}
1001   n=buf_put("\r\n\r\n",n);
1002
1003   if(gs_mode[7]&15){n=buf_put("#gs_mode=",n);
1004   n=buf_put(fstr(gs_mode[7]&15,3),n);n=buf_put("\r\n\r\n",n);}
1005   if(gs_mode[9]&15){n=buf_put("#gm_mode=",n);
1006   n=buf_put(fstr(gs_mode[9]&15,3),n);n=buf_put("\r\n\r\n",n);}
1007   if(gs_mode[11]&15){n=buf_put("#gx_mode=",n);
1008   n=buf_put(fstr(gs_mode[11]&15,3),n);n=buf_put("\r\n\r\n",n);}
1009   if(gs_mode[13]&15){n=buf_put("#gy_mode=",n);
1010   n=buf_put(fstr(gs_mode[13]&15,3),n);n=buf_put("\r\n\r\n",n);}
1011
1012   if(gs_mode[16]&128){n=buf_put("#gs_gmode=",n);
1013   n=buf_put(fstr(gs_mode[16]&15,3),n);n=buf_put("\r\n\r\n",n);}
1014   n=buf_put("\r\n",n);
1015
1016   for(i=7;i<18;i++){
1017     if(gs_mode[i]&0xf0){
1018       n=buf_put(gggg[i-7],n);n=buf_put("\r\n",n);
1019
1020       for(j=0;j<128;j++){
1021         n=buf_put(fstr(gs_bank[i*128+j],3),n);
1022         if((j&15)!=15){n=buf_put(",",n);}else{n=buf_put("\r\n",n);}
1023       }
1024       n=buf_put("\r\n",n);
1025     }
1026   }
1027
1028   n=buf_put(li1,n);
1029
1030   ln=fwrite(dat,1,n,fp);n=0;
1031
1032   for(i=1;i<4;i++){
1033     if( tim_top[i-1]!=0 || tim_head[i-1][0]!=0 ){
1034       int stp;
1035       n=buf_put("#part=",n);
1036       n=buf_put(fstr(i,3),n);n=buf_put(",",n);
1037       n=buf_put(tim_head[i-1],n);n=buf_put(",",n);
1038       n=buf_put(tim_sym[i-1],n);n=buf_put("\r\n",n);
1039       n=buf_put(li0,n);
1040
1041       stp=0;if( i==2 ){stp=64;}
1042
1043       for(j=stp;j<128;j++){
1044         n=buf_put(spadd(tim_names(j+i*128-128),10),n);
1045         if((j&7)!=7){n=buf_put(",",n);}else{n=buf_put("\r\n",n);}
1046       }
1047       n=buf_put(li0,n);
1048       n=buf_put("#defoff\r\n\r\n",n);
1049     }
1050   }
1051
1052   for(i=4;i<16;i++){
1053     if( tim_top[i-1]!=0 || tim_head[i-1][0]!=0 ){
1054
1055       n=buf_put("#part=",n);
1056       n=buf_put(fstr(i,3),n);n=buf_put(",",n);
1057       n=buf_put(tim_head[i-1],n);n=buf_put(",",n);
1058       n=buf_put(tim_sym[i-1],n);n=buf_put("\r\n",n);
1059       n=buf_put(li0,n);
1060
1061       for(j=0;j<128;j++){
1062         n=buf_put(tim_names(j+i*128-128),n);
1063         if((j&3)!=3){n=buf_put(",",n);}else{n=buf_put("\r\n",n);}
1064       }
1065       n=buf_put(li0,n);
1066       n=buf_put("#defoff\r\n\r\n",n);
1067     }
1068   }
1069
1070   for(i=1;i<17;i++){
1071     if( card_name[i][0]!=32 ){
1072       int edp;
1073       n=buf_put("#card=",n);
1074       n=buf_put(fstr(i,2),n);n=buf_put(",",n);
1075       n=buf_put(card_name[i],n);n=buf_put("\r\n",n);
1076       n=buf_put(li0,n);
1077
1078       edp=127;while(edp>=0){
1079         if(tim_names(edp+(15+i)*128)[0]!=0){break;}
1080         edp--;
1081       }
1082       if(edp>=0){
1083         edp|=7;
1084         for(j=0;j<=edp;j++){
1085           n=buf_put(spadd(tim_names(j+(15+i)*128),10),n);
1086           if((j&7)!=7){n=buf_put(",",n);}else{n=buf_put("\r\n",n);}
1087         }
1088       }
1089       n=buf_put(li0,n);
1090       n=buf_put("#defoff\r\n\r\n",n);
1091       tim_top[i+15]=0;
1092     }
1093   }
1094
1095   for(i=16;i<400;i++){
1096     if( tim_top[i-1]!=0 || tim_head[i-1][0]!=0 ){
1097
1098       n=buf_put("#part=",n);
1099       n=buf_put(fstr(i,3),n);n=buf_put(",",n);
1100       n=buf_put(tim_head[i-1],n);n=buf_put(",",n);
1101       n=buf_put(tim_sym[i-1],n);n=buf_put("\r\n",n);
1102       n=buf_put(li0,n);
1103
1104       for(j=0;j<128;j++){
1105         n=buf_put(tim_names(j+i*128-128),n);
1106         if((j&3)!=3){n=buf_put(",",n);}else{n=buf_put("\r\n",n);}
1107       }
1108       n=buf_put(li0,n);
1109       n=buf_put("#defoff\r\n\r\n",n);
1110     }
1111     if(i==100||i==200||i==300){ln=fwrite(dat,1,n,fp);n=0;}
1112   }
1113
1114   n=buf_put("#end\r\n\r\n",n);
1115   n=buf_put(li0,n);
1116
1117   ln=fwrite(dat,1,n,fp);
1118
1119   fclose(fp);
1120
1121   B_PRINT(_("Compile complete.\n"));
1122   exit(1);
1123
1124   return(0);
1125 }
1126
1127 /***************************//*4.66(2.18) 4.00(1.85)*/
1128 char    *exc_str(unsigned char *li,int ln,int md)
1129 {
1130   char  tmp0[1024];
1131   int   i=0;
1132
1133   strcpy(tmp0,"");
1134
1135   while(i<ln && tmp0[i]!=0){
1136     int a;
1137     a=tmp0[i];
1138
1139     if(a==0xff){break;}
1140     if(a==0xf7){if(md!=0){strcat(tmp0,"F7");}break;}
1141
1142     if(a<0x80){
1143       strcat(tmp0,hex_s(a,2));
1144     }else{
1145       if(a==0xf0){strcat(tmp0,"F0 ");}
1146
1147       if(a==0x80){strcat(tmp0,"gt ");}
1148       if(a==0x81){strcat(tmp0,"ve ");}
1149       if(a==0x82){strcat(tmp0,"ch ");}
1150       if(a==0x83){strcat(tmp0,"cs ");}
1151       if(a==0x84){strcat(tmp0,"cs ");}
1152     }
1153     i++;
1154   }
1155   return tmp0;
1156 }
1157
1158 /***************************/
1159 int     buf_put(char *ptr,int ln)
1160 {
1161   /*    if((rcd->bufcap)<(po+ln)){return(po+ln);}
1162    */
1163   while(*ptr){
1164     dat[ln++]=*ptr++;
1165   }
1166   return(ln);
1167 }
1168
1169 /***************************/
1170 int     def_bsave(char *fi,int last_no,int mutef,int initf)
1171 {
1172   int   i,ln,n,top_no,cc,ad;
1173   FILE  *fp;
1174
1175   strmfe(fi,fi,"dfb");
1176   if(!(fp=fopen2(fi,"wb"))){B_PRINT(_("Cannot open file.\n"));exit(1);}
1177
1178   for(i=0;i<work_size;i++){dat[i]=0;}
1179
1180   memcpy(&dat[0x0000],"STED2DEFFILE0.01",16);
1181   memcpy(&dat[0x0010],module,32);                                       /*module*/
1182   dat[0x30]=mdlflag;                                            /*id*/
1183   dat[0x32]=mutef;                                              /*mute*/
1184   dat[0x33]=initf;                                              /*init*/
1185   n=lsp_wait;if(n<0){n=128;}dat[0x34]=n;                                /*lsp_wait*/
1186   dat[0x36]=bend_range;                                         /*bend range*/
1187   dat[0x38]=card_no[0];                                         /*card_no*/
1188
1189   for(i=0;i<8;i++){
1190     memcpy(&dat[0x40+i*48],def_user_exc_memo[i],24);
1191     memcpy(&dat[0x40+i*48+24],def_user_exc_data[i],24); /*USER_EXC*/
1192   }
1193   memcpy(&dat[0x01c0],init_exc_data,256);                               /*INIT_EXC*/
1194
1195   for(i=0;i<10;i++){n=rec_met[i];if(n<0){n=128;}dat[0x2c0+i]=n;}        /*REC_MET*/
1196   for(i=0;i<6;i++){n=rhy_stest[i];if(n<0){n=128;}dat[0x2ca+i]=n;}       /*RHY_AS*/
1197
1198   for(i=0;i<32;i++){
1199     memcpy(&dat[0x300+i*16],defrhyna[i],14);
1200     dat[0x300+i*16+14]=defrhyno[i][0];dat[0x300+i*16+15]=defrhyno[i][1];
1201   }
1202   for(i=0;i<16;i++){memcpy(&dat[0x500+i*48],card_name[i+1],48);}        /*card*/
1203
1204   memcpy(&dat[0x800],&tim_asin2[1],32);                         /*group*/
1205   memcpy(&dat[0x820],&gs_mode[4],14*2);                         /*gsmode*/
1206   memcpy(&dat[0x840],&gs_bank[128*4],14*128*2);                 /*gsbank*/
1207
1208
1209   cc=0;for(i=0;i<400;i++){if(tim_top[i]>0 || tim_head[i][0]>0){cc++;}}
1210   dat[0x1640]=cc>>8;dat[0x1641]=cc&0xff;
1211   top_no=0;while(top_no<last_no){if(tim_name[top_no][0]){break;}top_no++;}
1212   dat[0x1642]=last_no>>8;dat[0x1643]=last_no&0xff;
1213   dat[0x1644]=top_no>>8;dat[0x1645]=top_no&0xff;
1214
1215   ad=0x1650;                                                    /*part*/
1216   for(i=0;i<400;i++){
1217     if(tim_top[i]>0 || tim_head[i][0]>0){
1218       memcpy(&dat[ad],tim_head[i],20);
1219       memcpy(&dat[ad+20],tim_sym[i],8);
1220       dat[ad+28]=i>>8;dat[ad+29]=i&0xff;
1221       dat[ad+30]=tim_top[i]>>8;dat[ad+31]=tim_top[i]&0xff;
1222       ad+=32;
1223     }
1224   }
1225
1226
1227   ln=fwrite(dat,1,ad,fp);
1228
1229   ln=last_no-top_no;
1230   if(ln){ln=fwrite(&tim_name[top_no][0],1,ln*15,fp);}           /*tim_name*/
1231
1232   fclose(fp);
1233
1234   B_PRINT(_("Compile complete.\n"));
1235   exit(1);
1236
1237   return(0);
1238 }
1239 #endif
1240
1241 /***************************/
1242 int     def_bload(char *fi,int md)
1243 {
1244   int   i,ln,n,f,top_no,last_no,mutef=0,initf=0,cc,ad;
1245   FILE  *fp;
1246
1247   strmfe(fi,fi,"dfb");
1248   /*if(!(fp=fopen2(fi,"rb"))){return(-1);}*/
1249   if (!(fp=fopen2(fi,"rb"))) {
1250     char tmp0[1024];
1251     strcpy( tmp0, STED_DEFAULT_PATH );
1252     strcat( tmp0, "//" );
1253     strcat( tmp0, (strrchr(fi,'/')==NULL)?fi:(strrchr(fi,'/')+1) );
1254     if (!(fp=fopen2( tmp0, "rb" ))) return(-1);
1255   } /* Oct.13.1998 by Daisuke Nagano */
1256
1257   ln=fread(dat,1,0x1650,fp);
1258
1259
1260 #if     STED
1261   if(md==0){
1262     B_PRINT(_("Loading config file.\n"));
1263   }
1264   if(md==1){
1265     msg(_("Loading config file.\n"));
1266   }
1267 #endif
1268 #if     CONV
1269   B_PRINT(_("Dis-compiling config file.\n"));
1270 #endif
1271
1272   if( strncmp((const char *)&dat[0x0000],"STED2DEFFILE0.01",16)!=0 ){
1273     if(md==0 || md==2){
1274       B_PRINT(_("Invalid version number of config file.\n"));
1275     }else{
1276       msg(_("Invalid version number of config file.\n"));
1277
1278     }
1279     /*fclose(fp);return(-2);*/
1280     fclose(fp);exit(1);
1281   }
1282
1283   memcpy(module,&dat[0x0010],32);                                       /*module*/
1284   mdlflag=dat[0x30];                                            /*id*/
1285   mutef=dat[0x32];                                              /*mute*/
1286   initf=dat[0x33];                                              /*init*/
1287   n=dat[0x34];if(n>127){n=-1;}lsp_wait=n;                               /*lsp_wait*/
1288   bend_range=dat[0x36];                                         /*bend range*/
1289   card_no[0]=dat[0x38];                                         /*card_no*/
1290
1291   for(i=0;i<8;i++){
1292     memcpy(def_user_exc_memo[i],&dat[0x40+i*48],24);
1293     memcpy(def_user_exc_data[i],&dat[0x40+i*48+24],24); /*USER_EXC*/
1294   }
1295   memcpy(init_exc_data,&dat[0x01c0],256);                               /*INIT_EXC*/
1296
1297   for(i=0;i<10;i++){n=dat[0x2c0+i];if(n>127){n=-1;}rec_met[i]=n;}       /*REC_MET*/
1298   for(i=0;i<6;i++){n=dat[0x2ca+i];if(n>127){n=-1;}rhy_stest[i]=n;}/*RHY_AS*/
1299
1300   for(i=0;i<32;i++){
1301     memcpy(defrhyna[i],&dat[0x300+i*16],14);
1302     defrhyno[i][0]=dat[0x300+i*16+14];
1303     defrhyno[i][1]=dat[0x300+i*16+15];
1304   }
1305
1306   for(i=0;i<16;i++){memcpy(card_name[i+1],&dat[0x500+i*48],48);}        /*card*/
1307   memcpy(&tim_asin2[1],&dat[0x800],32);                         /*group*/
1308   memcpy(&gs_mode[4],&dat[0x820],14*2);                         /*gsmode*/
1309   memcpy(&gs_bank[128*4],&dat[0x840],14*128*2);                 /*gsbank*/
1310
1311   cc=dat[0x1640]*256+dat[0x1641];
1312   last_no=dat[0x1642]*256+dat[0x1643];
1313   top_no=dat[0x1644]*256+dat[0x1645];
1314
1315   ln=fread(dat,1,cc*32,fp);
1316
1317   ad=0;                                                         /*part*/
1318   for(i=0;i<cc;i++){
1319     int n=dat[ad+28]*256+dat[ad+29];
1320     memcpy(tim_head[n],&dat[ad],20);
1321     memcpy(tim_sym[n],&dat[ad+20],8);
1322     tim_top[n]=dat[ad+30]*256+dat[ad+31];
1323     ad+=32;
1324   }
1325
1326   ln=last_no-top_no;
1327   if(ln){ln=fread(&tim_name[top_no][0],1,ln*15,fp);}            /*tim_name*/
1328
1329   fclose(fp);
1330
1331 #if     STED
1332   f=(mdlflag&0x7);if(f>2){f=2;}
1333   if(f>0 && f<4){rcd->moduletype=f-1;}
1334
1335   if(mutef){rcd->mute_mode=mutef-1;}
1336   if(initf){rcd->init_mode=initf-1;}
1337 #endif
1338
1339 #if     CONV
1340   defsave(fi,md,mutef,initf);
1341 #endif
1342
1343   return(0);
1344 }
1345