OSDN Git Service

最初のコミット
[winaudioj/stedx.git] / sted.cpp
1 /*\r
2  * MIDI Music Composer STed v2.07 (c)1996/11/17 by TURBO\r
3  *      MIDI Sequencer\r
4  *\r
5  * v2.06f 95/04/18 YUI-NETのSYSOP(ゆい工房)さんにソース公開\r
6  */\r
7 #include        "sted.h"\r
8 \r
9  struct RCD_HEAD        *rcd;\r
10  char rcd_version[5];\r
11 \r
12 /* etc */\r
13  char   hlp_path[128];                  /* help file path & name        */\r
14  char   fon_path[128];                  /* font file path & name        */\r
15 \r
16  char   def_path[128];                  /* .def path name               */\r
17  char   rcp_path[128];                  /* .rcp path name               */\r
18  char   prt_path[128];                  /* .prt path name               */\r
19  char   trk_path[128];                  /* .trk path name               */\r
20 \r
21  char   def_file[128];                  /* .def file name               */\r
22  char   rcp_file[128];                  /* .rcp file name               */\r
23  char   prt_file[128];                  /* .prt file name               */\r
24  char   trk_file[128];                  /* .trk file name               */\r
25 \r
26  char   repl[128];                      /* replace string               */\r
27  char   delt[128];                      /* delete string                */\r
28  char   srch[128];                      /* find string                  */\r
29 \r
30  char   repl_t[26*6][40];\r
31  char   repl_d[26*6][50];\r
32 \r
33  int    tr_step[36];                    /* track total step temp        */\r
34  int    tr_alc[36];                     /* track aloc size              */\r
35  int    tr_len[36];                     /* track used size              */\r
36  int    tr_pos[36][2][4];               /* track cursor position        */\r
37  int    tag[26+2][4];                   /* tag jamp list buffer         */\r
38 \r
39  int    es,ecode,scyp;                  /* input subroutine exit code   */\r
40 \r
41  int    btrack;                         /* track set top track          */\r
42  int    track,track1,track2;            /* edit track no.               */\r
43  int    edit_scr;                       /* 0=l_track 1=r_track 2=rhythm */\r
44  int    cmdflag,cnfflag,mdlflag;        /* STed2 system flag            */\r
45  int    poft;\r
46 \r
47  int    TRACK_SIZE,work_size;           /* buffer size                  */\r
48  int    buff_size,buff_free,buff_max;\r
49  int    cpcy,cpadd,cplen;\r
50  int    cpleng,rcpf,rcplen;             /* copy flag                    */\r
51 \r
52  void   *ErrorTrap_Old;                 /* err trap vecter/flag         */\r
53  int    ErrFlag;\r
54 \r
55 /* cnf */\r
56  char   comment[64];                    /* comment                      */\r
57 \r
58  int    tm_lag;                         /* graphic rewrite time lag     */\r
59  char   inpmode;                        /* editor input mode            */\r
60  char   grpmode;                        /* editor graphic mode          */\r
61  char   thrumode;                       /* edit midi in thru mode       */\r
62  int    rec_getch,rec_putmd;            /* recoding ch./put mode        */\r
63  int    vis_reso;                       /**/\r
64 \r
65  unsigned char  rfilt[32][4];           /* record filter */\r
66  unsigned char  pfilt[32][4];           /* play   filter */\r
67 \r
68  char   mplay[16][16];\r
69  int    palet_dat[16];\r
70 \r
71  unsigned char  keyst_table[2][128];    /* key# -> st/gt convert table  */\r
72  unsigned char  stgt_tbl[60];           /* f.key -> st/gt table         */\r
73 \r
74  char   rhy_vel[16];\r
75 \r
76  char   chcom_s[26*2][2][50];           /* child command comment        */\r
77  char   chcom_c[26*2][2][16];           /* child command parameter      */\r
78 \r
79 /* def */\r
80  char   module[64];                     /* module name                  */\r
81 \r
82  int    lsp_wait;                       /* last para. transfer wait     */\r
83  int    bend_range;                     /* piche bend range             */\r
84 \r
85  char   tim_asin[33];                   /* tone list channle assign     */\r
86  char   tim_head[400][24];              /* tone list title              */\r
87  char   tim_sym[400][8];                /* tone list symbol             */\r
88  char   tim_name[80*128][15];           /* tone name buffer             */\r
89  short  tim_top[400];                   /* tone name buffer address     */\r
90 \r
91  char   card_name[21][64];              /* pcm card name list           */\r
92  char   card_no[2];                     /* used pcm card no.            */\r
93 \r
94  short  gs_bank[18*128];                /* gs bank part no.(8+1 group)  */\r
95  short  gs_mode[18];                    /* gs bank mode    (8+1 group)  */\r
96 \r
97  char   rhy_stest[8];                   /* rhythm sound test ch. & para */\r
98  char   rec_met[10];                    /* recording metoro tone        */\r
99 \r
100  unsigned char  init_exc_data[258];     /* init exclusive data          */\r
101 \r
102 /*** rcp format head parameter ***/\r
103  char   mtitle[65];                     /* music title                  */\r
104  char   memo[12][29];                   /* memo                         */\r
105  int    tbase,mtempo;\r
106  int     beat1,beat2,bkey,pbias;                /* common parameter             */\r
107  char   cm6_file[128],gsd_file[128];    /* controol file name           */\r
108 \r
109  char   rhyna[32][15];                  /* rhythm assign name           */\r
110  unsigned char  rhyno[32][2];           /* rhythm assign key & gate     */\r
111 \r
112  char   user_exc_memo[8][25];           /* user exclusive memo          */\r
113  unsigned char  user_exc_data[8][24];   /* user exclusive data          */\r
114 \r
115  unsigned char  trno[36];               /* track no.                    */\r
116  unsigned char  trmod[36];              /* track play mode              */\r
117  unsigned char  trrhy[36];              /* track rhythm sw.             */\r
118  unsigned char  mch[36];                /* track midi ch.               */\r
119  unsigned char  trkey[36];              /* track key shift              */\r
120  unsigned char  trst[36];               /* track st shift               */\r
121  char   trkmemo[36][37];                /* track comment                */\r
122 \r
123 /* buffer */\r
124  unsigned char  lcbuf[1024*4+4];        /* delete line buffer           */\r
125  unsigned char  rlcbuf[132];            /* delete rhythm line buffer    */\r
126  unsigned char  cm6[22601],gsd[4096];   /* control file buffer          */\r
127  unsigned char  hed[1414];              /* rcp header temporary         */\r
128 \r
129  unsigned char  *trk[36];               /* track buffer pointer         */\r
130  unsigned char  *cpbuf;                 /* track copy buffer            */\r
131  unsigned char  *rcpbuf;                /* rhythm track copy buffer     */\r
132  unsigned char  *dat;                   /* temporary & recording buffer */\r
133  unsigned char  *dat2;                  /* temporary                    */\r
134 \r
135 /* the following variables is only PC version available */\r
136 \r
137  int issted3;                     /* Am I a new version ? */\r
138  int isconsole;                   /* is console mode? */\r
139  int isxwin;                      /* is X mode? */\r
140  char euc_text[1024];             /* code convert buffer */\r
141  char player_name[1024];          /* midi player name */\r
142  char midi_port_name[1024];       /* midi_port device name */\r
143  char font_name[1024];            /* X font set name */\r
144  int player_flag;                 /* is player able to play only SMF? */\r
145 \r
146  char KEY_XF1[];                  /* keysym names */\r
147  char KEY_XF2[];\r
148  char KEY_XF3[];\r
149  char KEY_XF4[];\r
150  char KEY_XF5[];\r
151  char KEY_KANA[];\r
152  char KEY_KIGO[];\r
153  char KEY_TOROKU[];\r
154  char KEY_INS[];\r
155  char KEY_DEL[];\r
156  char KEY_HOME[];\r
157  char KEY_UNDO[];\r
158  char KEY_RUP[];\r
159  char KEY_RDOWN[];\r
160  char KEY_OPT1[];\r
161  char KEY_OPT2[];\r
162 \r
163 int eucenv;\r
164 int str_vala;\r
165 \r
166 int iswindowopened;\r
167 int iocs_graph_home; /* 0 or 1 */\r
168 \r
169 char fnc_func[10][32];\r
170 char fnc_sfunc[10][32];\r
171 char fnc_key[12][6];\r
172 \r
173 \r
174 //! メニュー文字列\r
175 static char     menu1[18][9] = {\r
176   "LOAD    ","SAVE    ","EDIT&SET","PLAY    ","RECORD  ","FILTER  ",\r
177   "TIME&KEY","TITLE   ","MEMO    ","PART ASS","RHY ASSI","USER EXC",\r
178   "CM64 CON","SC55 CON","OPTION  ","UNIT SEL","INIT    ","EXIT    "};\r
179 /*\r
180 static char     menu2[18][9]={\r
181         "BTM.LOAD","R36.SAVE","EDIT&SET","PANEL   ","MIDI MON","FILTER  ",\r
182         "TIME&KEY","TITLE   ","MEMO    ","PART ASS","RHY ASSI","USER EXC",\r
183         "CM64 CON","SC55 CON","OPTION  ","UNIT SEL","INIT    ","強制EXIT"};\r
184 */\r
185 \r
186 /*\r
187 static char     beats[21][5]={\r
188         "1/2","2/2","2/3",\r
189         "1/4","2/4","3/4","4/4","5/4","6/4",\r
190         "1/8","2/8","3/8","4/8","5/8","6/8","7/8","8/8","9/8","10/8","11/8","12/8"};\r
191 */\r
192 \r
193 //! タイムベーステーブル\r
194 static int      tbase_tbl[]={48,60,80,96,120,160,192,240,384,480};\r
195 /*RCM V2.5G  : 48,60,80,96,120,160,240,480*/\r
196 \r
197 //! ファンクションキー定義\r
198 static unsigned char    fnckey[12]={\r
199   0x12,0x17,0x01,0x07,  0x05,0x13,0x04,0x18,    0x0C,0x16,0x0B,0x15};\r
200 /*      R.UP,R.DOWN,INS,DEL,    UP,LEFT,RIGHT,DOWN,     CLR,HELP,HOME,UNDO*/\r
201 \r
202 unsigned char   fnckey0[712],fnckey1[712];\r
203 char    fonbuf[188*32];\r
204 \r
205 char    env_opt[32][128];\r
206 char    rc_path[256];\r
207 \r
208 int     cmdflagold,used_u=0;\r
209 \r
210 static char version_id[1024];\r
211 const char* get_version_id(void) {return (const char *)version_id;}\r
212 \r
213 #define Trap14          (0x002e)        /*TRAP  #14で参照するベクタ*/\r
214 \r
215 /********** program start **********/\r
216 int     main(int argc,char *argv[])\r
217 {\r
218   int   i,\r
219           f = 0,\r
220           lzf = 0,\r
221           work_size2 = 0,\r
222           eoptc=0;\r
223   char   tmp0[1024],\r
224           tmp1[1024],\r
225           cmdline[2048],\r
226           cmd[1024];\r
227   char  *p;\r
228   FILE  *fp;\r
229 \r
230   STed_system_initialize( &argc, &argv ); /* Aug.08.1998 Daisuke Nagano */\r
231 \r
232 #ifdef VERSION_ID\r
233   strcpy(version_id, "2.07m + ");\r
234   strcat(version_id, VERSION_ID);\r
235 #else /* VERSION_ID */\r
236   strcpy(version_id, "2.07m");\r
237 #endif /* VERSION_ID */\r
238 \r
239   rcd_check();\r
240   H_INIT();\r
241   keyclr();\r
242 \r
243   ErrorTrap_Old = NULL;\r
244   ErrFlag=0;\r
245 \r
246   TRACK_SIZE = 64;\r
247   buff_max = 256 * 36 * 1024;\r
248   rcp_path[0] = 0;\r
249   prt_path[0] = 0;\r
250   trk_path[0] = 0;\r
251   rcp_file[0] = 0;\r
252   prt_file[0] = 0;\r
253   trk_file[0] = 0;\r
254   def_path[0] = 0;\r
255   def_file[0] = 0;\r
256   fon_path[0] = 0;\r
257   hlp_path[0] = 0;\r
258   rc_path[0] = 0;\r
259   card_no[0] = 0;\r
260 \r
261   track=0;poft=0;rcpf=0;rcplen=0;cpadd=0;cplen=0;cpleng=0;\r
262   cmdflag=0;cnfflag=0;mdlflag=0;\r
263 \r
264   lcbuf[0]=255;rlcbuf[0]=255;\r
265   btrack=0;rec_getch=0;rec_putmd=1;\r
266 \r
267   cnfinit();\r
268 \r
269   if ((p=getenv("RCP_DIR"))==(char*)0) p=getenv("rcp_dir");\r
270   if (p!=(char*)0){strcpy(rcp_path,p);}\r
271 \r
272   if ((p=getenv("PRT_DIR"))==(char*)0) p=getenv("prt_dir");\r
273   if (p!=(char*)0){strcpy(prt_path,p);}\r
274 \r
275   if ((p=getenv("RC_PATH"))==(char*)0) p=getenv("rc_path");\r
276   if (p!=(char*)0){strcpy(rc_path,p);}\r
277 \r
278   if ((p=getenv("STED2"))==(char*)0) p=getenv("sted2");\r
279   if (p!=(char*)0){strcpy(cmdline,p);eoptc=option_read(cmdline);}\r
280 \r
281   i=snprintf(tmp0,1024,"MIDI Music Composer STed %s Copyright 1990-97 TURBO\r\n",version_id);\r
282   if ( i > 0 ) {\r
283     B_PRINT( tmp0 );\r
284   }\r
285   /*B_PRINT("X68k MIDI Music Composer STed v2.07m Copyright 1990-97 TURBO\r\n");*/\r
286   /*B_PRINT("X68k MIDI Sequencer STed v2.07m Copyright 1990-97 TURBO\r\n");*/\r
287 \r
288   if( argc>1 ){\r
289     for(i=1;i<argc;i++){if(eoptc<32){strcpy(env_opt[eoptc++],argv[i]);}}\r
290 \r
291     for(i=0;i<eoptc;i++){\r
292       strcpy(cmd,env_opt[i]);\r
293 \r
294       if( cmd[0]=='-' ){\r
295         switch(cmd[1]){\r
296 \r
297         case 'M':\r
298         case 'm':TRACK_SIZE=str_val(&cmd[2]);break;\r
299 \r
300         case 'U':\r
301         case 'u':buff_max=str_val(&cmd[2])*1024;\r
302           used_u=1;break;\r
303 \r
304         case 'W':\r
305         case 'w':work_size2=str_val(&cmd[2])*1024;break;\r
306 \r
307         case 'B':\r
308         case 'b':card_no[0]=str_val(&cmd[2]);break;\r
309 \r
310         case 'D':\r
311         case 'd':\r
312           strcpy(rcp_path,&cmd[2]);\r
313           if(rcp_path[0]==0){\r
314             if(i+1<eoptc && env_opt[i+1][0]!='-'){\r
315               i++;strcpy(rcp_path,env_opt[i]);}\r
316           }\r
317           break;\r
318 \r
319         case 'F':\r
320         case 'f':\r
321           strcpy(def_file,&cmd[2]);\r
322           if(def_file[0]==0){\r
323             if(i+1<eoptc && env_opt[i+1][0]!='-'){\r
324               i++;strcpy(def_file,env_opt[i]);}\r
325           }\r
326           break;\r
327 \r
328         case 'P':\r
329         case 'p':cmdflag|=0x8000;break;\r
330 \r
331         case 'R':\r
332         case 'r':cmdflag|=0x0080;break;\r
333 \r
334         case 'L':\r
335         case 'l':cmdflag|=0x0008;break;\r
336 \r
337         case 'S':\r
338         case 's':cmdflag|=0x0010;break;\r
339 \r
340         case 'O':\r
341         case 'o':cmdflag|=0x0200;break;\r
342 \r
343         default:f=1;break;\r
344         }\r
345       }else{\r
346         strcpy(rcp_file,cmd);\r
347       }\r
348     }\r
349   }\r
350 \r
351   if( f!=0 ){\r
352     B_PRINT("usage: STed2 [option...] [file name] (.RCP/.R36/.MDF)\n");\r
353     B_PRINT("options\r\n");\r
354     B_PRINT( _("\t-M<size>\t Set the max size of track\n") );\r
355     B_PRINT( _("\t-U<size>\t Set the size of track buffer\n") );\r
356     B_PRINT( _("\t-W<size>\t Set the size of recording buffer\n") );\r
357     B_PRINT( _("\t-F<file>\t Specify Module configuration file\n") );\r
358     B_PRINT( _("\t-B<num>\t\t Specify the name of PCM card (CM64)\n") );\r
359     B_PRINT( _("\t-D<path>\t Specify the data directory\n") );\r
360     B_PRINT( _("\t-R\t\t Do pointplay with RCD function\n") );\r
361     B_PRINT( _("\t-P\t\t Set panel displaying as default playing command\n") );\r
362     B_PRINT( _("\t-L\t\t Read the data in RCD buffer at boot time\n") );\r
363     B_PRINT( _("\t-S\t\t Don't copy the data to RCD buffer when exit\n\n") );\r
364     exit(1);\r
365   }\r
366 \r
367   if( (int)rcd==0 ) {\r
368     B_PRINT(_("RCD is not running.\n"));exit(1);\r
369   }else{\r
370     if( strcmp(rcd_version,"3.01")<0 || strcmp(rcd_version,"3.09")>0 ){\r
371       B_PRINT(_("Invalid RCD version.\n"));\r
372       exit(1);\r
373     }\r
374   }\r
375 \r
376   if( card_no[0]<0 || card_no[0]>16 || TRACK_SIZE<32 || TRACK_SIZE>256 ||\r
377       buff_max<64*1024 || buff_max>256*36*1024 ){\r
378     B_PRINT(_("Invalid options.\n"));exit(1);\r
379   }\r
380 \r
381   TRACK_SIZE=TRACK_SIZE*1024-48;buff_size=TRACK_SIZE*36;\r
382   if(buff_size>buff_max){buff_size=buff_max;}\r
383 \r
384   work_size=TRACK_SIZE+32*1024;if(work_size<work_size2){work_size=work_size2;}\r
385 \r
386   cpbuf=(unsigned char *)MALLOC(TRACK_SIZE);\r
387   rcpbuf=(unsigned char *)MALLOC(TRACK_SIZE);\r
388 \r
389   dat=(unsigned char *)MALLOC(work_size);\r
390   dat2=(unsigned char *)MALLOC(work_size);\r
391   /* May.06.2001 NAGANO Daisuke <breeze.nagano@nifty.ne.jp> */\r
392 #if 0\r
393   if((int)dat>=0x81000000){\r
394     B_PRINT(_("Cannot allocate track buffers.\n"));exit(1);}\r
395 #endif\r
396 \r
397 realc:\r
398   trk[0]=(unsigned char *)MALLOC(buff_size);\r
399 #if 0\r
400   if((int)trk[0]>=0x81000000) {\r
401     if(!used_u){\r
402       buff_size=((int)trk[0])&0xfffffc;if(buff_size>=64*1024){goto realc;}\r
403     }\r
404     B_PRINT(_("Cannot allocate track buffers.\n"));exit(1);\r
405   }\r
406 #endif\r
407 \r
408   buff_max=buff_size;\r
409 \r
410   /*\r
411   if(TGUSEMD(0,-1)==1){\r
412     B_PRINT(_("G-RAM is active. Init. OK?(Y/N)"));\r
413     while(1){\r
414       i=inkey2();\r
415       if(i=='Y'||i=='y'){break;}\r
416       if(i=='N'||i=='n'){B_PRINT(_(": Terminated.\r\n"));exit(1);}\r
417     }\r
418   }\r
419   */\r
420 \r
421   str_change(rcp_path);str_change(prt_path);str_change(trk_path);\r
422   str_change(rcp_file);str_change(def_file);str_change(rc_path);\r
423 \r
424   if( rcp_file[0]!=0 ){\r
425     if(str_search(rcp_file,".MDF")>0 || str_search(rcp_file,".mdf")>0){\r
426       lzf=1;\r
427     }else{\r
428       if(str_search(rcp_file,".")==0){\r
429         /*\r
430           strmfe(rcp_file,rcp_file,'DEF");\r
431           if(!(fp= fopen2(rcp_file,"rb"))){\r
432           strmfe(rcp_file,rcp_file,'DFB");\r
433           if(!(fp= fopen2(rcp_file,"rb"))){\r
434           */\r
435         strmfe(rcp_file,rcp_file,"MDF");\r
436         if(!(fp= fopen2(rcp_file,"rb"))){\r
437           strmfe(rcp_file,rcp_file,"R36");\r
438           if(!(fp= fopen2(rcp_file,"rb"))){\r
439             strmfe(rcp_file,rcp_file,"RCP");\r
440           }else{\r
441             fclose(fp);\r
442           }\r
443         }else{\r
444           lzf=1;\r
445           fclose(fp);\r
446         }\r
447         /*\r
448           }else{\r
449           strcpy(def_file,rcp_file);\r
450           rcp_file[0]=0;\r
451           fclose(fp);\r
452           }\r
453           }else{\r
454           strcpy(def_file,rcp_file);\r
455           rcp_file[0]=0;\r
456           fclose(fp);\r
457           }\r
458           */\r
459       }\r
460     }\r
461 \r
462     if(!(fp= fopen2(rcp_file,"rb"))){\r
463       B_PRINT(rcp_file);\r
464       B_PRINT(_(": File not found.\n"));exit(1);\r
465     }\r
466     fclose(fp);\r
467     path_cut(rcp_path,rcp_file);\r
468   }\r
469 \r
470   /* load sted2 configuration file */\r
471   definit();\r
472 \r
473   strmfe(tmp0,argv[0],"cnf");\r
474   /*\r
475   if(defload(tmp0,2)!=0){\r
476     B_PRINT(tmp0);B_PRINT(_(": File not found.\n"));exit(1);}*/\r
477   defload(tmp0, 2);\r
478 \r
479   strmfe(tmp0,argv[0],"cf2");defload(tmp0,2);\r
480   /*            1997-07-20      STed2.cf2があればそれも読み込むようにした*/\r
481 \r
482   p = getenv("HOME");\r
483   if (p && ( strlen(p) < sizeof(tmp0)-9 )) {\r
484     strcpy(tmp0, p);\r
485     strcat(tmp0, "/.sted2rc");\r
486     defload(tmp0, 2);  /* Mar.05.1999 */\r
487   }\r
488 \r
489   if(tm_lag==0){tm_lag=8000;}\r
490   cmdflagold=cmdflag;\r
491 \r
492   stgt_init();filt_init();\r
493 \r
494   /* load module definition file */\r
495 \r
496   if(def_file[0]==0){strcpy(def_file,argv[0]);strmfe(def_file,def_file,"def");}\r
497   str_change(def_file);\r
498 \r
499   {\r
500     int lvl=0;\r
501     if(str_search(def_file,".")==0){lvl=2;}\r
502   loop:\r
503     if(lvl==2){strmfe(def_file,def_file,"dfb");}\r
504     if(lvl==1){strmfe(def_file,def_file,"def");}\r
505 \r
506     i=defload(def_file,0);\r
507     if(i!=0){\r
508       strcpy(tmp0,def_path);\r
509       if(str_last((uint8*)tmp0)!='/'){strcat(tmp0,"/");}\r
510       strcat(tmp0,def_file);\r
511 \r
512       i=defload(tmp0,0);\r
513       if(i!=0){\r
514         strcpy(tmp1,argv[0]);path_cut(tmp0,tmp1);\r
515         strcat(tmp0,def_file);\r
516 \r
517         i=defload(tmp0,0);\r
518         if(i!=0){\r
519           if(lvl==2){lvl--;goto loop;}\r
520           /*\r
521           if(i==-1){B_PRINT(def_file);B_PRINT(_(": File not found.\n"));}*/\r
522           if (i==-1) goto not_found;\r
523           exit(1);}\r
524           }\r
525       strcpy(def_file,tmp0);\r
526     }else{\r
527       strcpy(tmp1,def_file);path_cut(tmp0,tmp1);\r
528       if(tmp0[0]==0){def_file[0]=0;path_set(def_file);strcat(def_file,tmp1);}\r
529     }\r
530   }\r
531 not_found:\r
532 \r
533   path_cut(def_path,def_file);\r
534 \r
535   card_name_get();\r
536 \r
537   fonread((uint8*)fonbuf);\r
538   if(fon_path[0]==0){\r
539     strmfe(fon_path,argv[0],"fon");\r
540   }else{\r
541     str_change(fon_path);\r
542     if(str_last((uint8*)fon_path)!='/'){strcat(fon_path,"/");}\r
543     strcpy(tmp0,argv[0]);strmfe(tmp0,tmp0,"fon");\r
544     path_cut(tmp1,tmp0);strcat(fon_path,tmp0);\r
545   }\r
546   fonload(fon_path);\r
547 \r
548   if(hlp_path[0]==0){\r
549     strmfe(hlp_path,argv[0],"hlp");\r
550   }else{\r
551     str_change(hlp_path);\r
552     if(str_last((uint8*)hlp_path)!='/'){strcat(hlp_path,"/");}\r
553     strcpy(tmp0,argv[0]);strmfe(tmp0,tmp0,"hlp");\r
554     path_cut(tmp1,tmp0);strcat(hlp_path,tmp0);\r
555   }\r
556 \r
557 \r
558   for(i=0;i<12;i++){fnckey1[0x280+i*6]=fnckey[i];}\r
559   FNCKEYGT(0,(char*)fnckey0);FNCKEYST(0,(char*)fnckey1);\r
560 \r
561   path_set(rcp_path);path_set(def_path);\r
562 \r
563   if(trk_path[0]==0){\r
564     strcpy(trk_path,prt_path);\r
565     if(prt_path[0]==0){strcpy(trk_path,rcp_path);}}\r
566   if(prt_path[0]==0){strcpy(prt_path,rcp_path);}\r
567 \r
568   if(str_last((uint8*)rcp_path)!='/'){strcat(rcp_path,"/");}\r
569   if(str_last((uint8*)prt_path)!='/'){strcat(prt_path,"/");}\r
570   if(str_last((uint8*)trk_path)!='/'){strcat(trk_path,"/");}\r
571   if(str_last((uint8*)def_path)!='/'){strcat(def_path,"/");}\r
572   if(rc_path[0]!=0 && str_last((uint8*)rc_path)!='/'){strcat(rc_path,"/");}\r
573 \r
574   dinit();\r
575   if(lzf){\r
576     char        tmp[128];int    ec;\r
577 \r
578     strcpy(tmp0,rcp_path);strcat(tmp0,rcp_file);\r
579     strcpy(tmp,"lzm -x ");strcat(tmp,tmp0);ec=exe(tmp);\r
580     if(ec<0){tmp[2]='z';ec=exe(tmp);}\r
581     if(ec!=0 && ec<32){FNCKEYST(0,(char*)fnckey0);fonset((uint8*)fonbuf);exit(1);}\r
582     cmdflag|=0x8;\r
583   }\r
584 \r
585   set_errvect();\r
586   rcd_open_device();\r
587 \r
588   C_CUROFF();LEDMOD(4,1);C_FNKMOD(3);sinit();/*MS_CUROF();*/\r
589 \r
590   if((cmdflag&0x8)!=0){\r
591     if(bufload()!=0){bufset();}\r
592   }else{\r
593     bufset();\r
594     if( rcp_file[0]!=0 ){\r
595       strcpy(tmp0,rcp_path);strcat(tmp0,rcp_file);dload(tmp0,0);\r
596 \r
597       if(cm6_file[0]!=0){\r
598         strcpy(tmp0,rcp_path);strcat(tmp0,cm6_file);\r
599         if(timload(tmp0)!=0){\r
600           msg(cm6_file);\r
601           B_PRINT(_(": File not found.\n"));cm6_file[0]=0;\r
602         }\r
603       }\r
604       if(gsd_file[0]!=0){\r
605         strcpy(tmp0,rcp_path);strcat(tmp0,gsd_file);\r
606         if(gsdload(tmp0)!=0){\r
607           msg(gsd_file);\r
608           B_PRINT(_(": File not found.\n"));gsd_file[0]=0;\r
609         }\r
610       }\r
611     }\r
612   }\r
613   form();timtra();/*key_vect_set();*/com_sel();/*key_vect_reset();*/\r
614 \r
615   end_proc();exit(0);\r
616 }\r
617 \r
618 /***************************/\r
619 void    end_proc()\r
620 {\r
621   /*  msg_clr();tpl(0);G_CLR_ON();CRTMOD(16);C_FNKMOD(0);C_CURON();LEDMOD(4,0);*/ /* Aug.09.1998 Daisuke Nagano */\r
622   msg_clr();tpl(0);G_CLR_ON();CRTMOD(17);C_FNKMOD(0);C_CURON();LEDMOD(4,0);\r
623   if(!(cmdflag&0x10)){bufset();}\r
624   FNCKEYST(0,(char*)fnckey0);fonset((uint8*)fonbuf);\r
625   close_midi_device(); /* Sep.02.1998 Daisuke Nagano */\r
626 \r
627   rst_errvect();exit(0);\r
628 }\r
629 \r
630 /***************************/\r
631 void    set_errvect()\r
632 {\r
633 \r
634   return;\r
635 #ifdef X680x0\r
636   if (NULL == (ErrorTrap_Old=(void *)B_INTVCS(Trap14,(int)*ErrorTrap)) ) {\r
637     B_PRINT("TRAP14が再設定できませんでした。中止します。\r\n");\r
638     exit(1);\r
639   }\r
640 #endif /* X680x0 */\r
641 }\r
642 \r
643 void    rst_errvect()\r
644 {\r
645 \r
646   return;\r
647 #ifdef X680x0\r
648   if (ErrorTrap_Old != NULL) {\r
649     B_INTVCS(Trap14,(int)ErrorTrap_Old);\r
650   }\r
651 #endif /* X680x0 */\r
652 }\r
653 \r
654 /***************************/\r
655 void    com_sel()\r
656 {\r
657   int   ke,sh,cy=0,i;\r
658   char  tmp0[128],tmp1[128],path2[128];\r
659 \r
660   for(i=0;i<18;i++){sdis(1,112+i*21,menu1[i],8,15,8);}\r
661 \r
662   C_WINDOW(0,31);\r
663 \r
664   while( 1){\r
665     sdis(1,112+cy*21,menu1[cy],8,0,15);\r
666     ke=inkey3();sh=ke>>8;ke=ke&0xff;\r
667     if(ke>='a' && ke<='z'){ke-=32;}\r
668     sdis(1,112+cy*21,menu1[cy],8,15,8);\r
669 \r
670     if( ke==0xe0 ){if((sh&1)==0){poplay(0,4);}else{poplay(0,5);}}\r
671     if( ke==0xe1 ){if((sh&1)==0){poplay(0,1);}else{poplay(0,2);}}\r
672 \r
673     if( ke>='A' && ke<='Z' && (sh&4)!=0 ){option(ke-'A',0);ke=0;}\r
674     if(ke=='L'){cy=0;ke=13;}\r
675     if(ke=='S'){cy=1;ke=13;}\r
676     if(ke=='E'){cy=2;ke=13;}\r
677     if(ke=='P' || ke==0x10){cy=3;ke=13;}\r
678     if(ke=='R'){cy=4;ke=13;}\r
679     if(ke=='F'){cy=5;ke=13;}\r
680 \r
681     if(ke=='K'){cy=6;ke=13;}\r
682     if(ke=='T'){cy=7;ke=13;}\r
683     if(ke=='M'){cy=8;ke=13;}\r
684     if(ke=='G'){cy=9;ke=13;}\r
685     if(ke=='A'){cy=10;ke=13;}\r
686     if(ke=='U'){cy=11;ke=13;}\r
687     if(ke=='C'){cy=12;ke=13;if(sh&1){cy=13;}}\r
688 \r
689     if(ke=='O'){cy=14;ke=13;}\r
690     if(ke=='D'){cy=15;ke=13;}\r
691     if(ke=='I'){cy=16;ke=13;}\r
692     if(ke=='X'){cy=17;ke=13;}\r
693 \r
694     if(ke=='Z'){timtra();}\r
695 \r
696     if( ke==13 || ke==32 ){\r
697       /*if(sh&1){\r
698         sdis(1,112+cy*21,menu2[cy],8,0,11);\r
699         }else*/{\r
700           sdis(1,112+cy*21,menu1[cy],8,0,11);\r
701         }\r
702 \r
703         if( cy==0 ){load_sub(sh);}\r
704         if( cy==1 ){save_sub(sh);}\r
705         if( cy==2 ){trk_set(0);}\r
706         if( cy==3 ){dplay(sh&3,0,0);}\r
707         if( cy==4 ){if((sh & 1)!=0){inpmon();}else{trk_set(1);}}\r
708         if( cy==5 ){rec_filter(0);}\r
709         if( cy==6 ){beat_set();}\r
710         if( cy==7 ){\r
711           if(sh&1){\r
712             msg(_("Input new title"));\r
713             if(yn_sel()>0){mtitle[0]=0;}\r
714           }\r
715           B_LOCATE(28,3);sinput(mtitle,64);rcp_dat2(0,0);}\r
716         /*B_LOCATE(28,3);sinput(eucconv(mtitle),65);rcp_dat2(0,0);} /* code converted! */\r
717 \r
718 \r
719         if( cy==8 ){memo_ed(sh);}\r
720         if( cy==9 ){part_as();}\r
721         if( cy==10 ){rhy_as();}\r
722         if( cy==11 ){user_exc_as(0);}\r
723         if( cy==12 ){cm64_con();}\r
724         if( cy==13 ){gsd_con();}\r
725         if( cy==14 ){option(-1,0);}\r
726 \r
727         if( cy==15 ){\r
728           strcpy(tmp1,def_file);strcpy(path2,def_path);\r
729           fsel(tmp1,path2,0x004);\r
730           if( es==0 && tmp1[0]!=0){\r
731             int n;\r
732             strcpy(tmp0,path2);strcat(tmp0,tmp1);\r
733             card_no[0]=0;card_no[1]=0;definit();\r
734             cmdflag=cmdflagold;mdlflag=0;\r
735             n=defload(tmp0,1);\r
736             if(n==0){\r
737               card_name_get();\r
738 \r
739               if(!(cnfflag&0x0008)){strcpy(def_path,path2);}\r
740               strcpy(def_file,tmp1);\r
741               if(cm6_file[0]==0){cminit();}\r
742               if(gsd_file[0]==0){gsinit();}\r
743               asin_init();if(rcp_file[0]==0){user_exc_init();}\r
744               msg_clr();sdis2(30+9,0,module,22,15,8);\r
745             }else{if(n==-1){msg(_(": File not found.\n"));}}\r
746           }\r
747         }\r
748 \r
749         if( cy==16 ){\r
750           msg(_("Initialize all data"));\r
751           if(yn_sel()>0){dinit();rcp_file[0]=0;timtra();form2();}\r
752         }\r
753         if( cy==17 ){\r
754           if((sh & 1)!=0){end_proc();}\r
755           msg(_("Exit"));\r
756           if(yn_sel()>0){end_proc();}\r
757         }\r
758         C_WINDOW(0,31);B_LOCATE(0,2);C_CLS_ED();\r
759     }\r
760 \r
761     if( ke==5 || ke==0x3c ){cy--;if(cy<0){cy=17;}}\r
762     if( ke==24 || ke==0x3e ){cy++;if(cy>17){cy=0;}}\r
763   }\r
764 }\r
765 \r
766 /***************************/\r
767 void    load_sub(int sh)\r
768 {\r
769   char  tmp0[128],tmp1[128],path2[128];\r
770 \r
771   strcpy(tmp1,rcp_file);\r
772   strcpy(path2,rcp_path);fsel(tmp1,path2,0x001);\r
773   if( es==0 && tmp1[0]!=0){\r
774     strcpy(tmp0,path2);strcat(tmp0,tmp1);\r
775     msg(_("Loading ..."));\r
776     if(dload(tmp0,sh&1)==0 ){\r
777       cminit();gsinit();\r
778       strcpy(tmp0,path2);strcat(tmp0,cm6_file);\r
779       if(cm6_file[0]!=0){\r
780         if(timload(tmp0)!=0){\r
781           msg(cm6_file);B_PRINT(_(": File not found.\n"));\r
782           cm6_file[0]=0;\r
783         }\r
784       }\r
785       strcpy(tmp0,path2);strcat(tmp0,gsd_file);\r
786       if(gsd_file[0]!=0){\r
787         if(gsdload(tmp0)!=0){\r
788           msg(gsd_file);B_PRINT(_(": File not found.\n"));\r
789           gsd_file[0]=0;\r
790         }\r
791       }\r
792       if(!(cnfflag&0x0008)){strcpy(rcp_path,path2);}\r
793       strcpy(rcp_file,tmp1);\r
794       form2();timtra();msg_clr();\r
795     }\r
796   }\r
797 }\r
798 \r
799 void    save_sub(int sh)\r
800 {\r
801   char  tmp0[128],tmp1[128],path2[128];\r
802 \r
803   strcpy(tmp1,rcp_file);\r
804 \r
805   if(tmp1[0]==0 || (sh&1)==0){\r
806     if(cnfflag&0x0040){sh=1-(sh&1);}\r
807   }else{\r
808     if(str_search(rcp_file,".R36")>0){\r
809       strmfe(tmp1,tmp1,"RCP");sh=0;\r
810     }else{\r
811       strmfe(tmp1,tmp1,"R36");sh=1;\r
812     }\r
813   }\r
814 \r
815   strcpy(path2,rcp_path);fsel(tmp1,path2,0x100+(sh&1));\r
816   if( es==0 && tmp1[0]!=0 ){\r
817     strcpy(tmp0,path2);strcat(tmp0,tmp1);\r
818     msg(_("Saving ..."));\r
819     if(dsave(tmp0)==0){\r
820       if(!(cnfflag&0x0008)){strcpy(rcp_path,path2);}\r
821       strcpy(rcp_file,tmp1);\r
822       msg_clr();\r
823     }\r
824   }\r
825   sdis2(28,64,rcp_file,22,15,0);\r
826 }\r
827 \r
828 /***************************/\r
829 void    memo_ed(int sh)\r
830 {\r
831   int   ke,i,y=0;\r
832   char  tmp[128];\r
833 \r
834   tmp[0]=0;\r
835 \r
836   if(sh&1){\r
837   redraw:\r
838     msg(_("Initialize memo"));\r
839     if(yn_sel()>0){for(i=0;i<12;i++){memo[i][0]=0;}}\r
840   }\r
841   msg_clr();\r
842 \r
843   fill(0,512+32,767,1023,0);\r
844   box(263,152+512,504,375+512,14,65535);\r
845   box(265,169+512,502,373+512,14,65535);\r
846   sdis(33,152+512," MEMO",30,15,14);\r
847   home2(512);\r
848 top:\r
849   /*for(i=0;i<12;i++){tdis(34,11+i,memo[i],28,3);}*/\r
850   for(i=0;i<12;i++){tdis(34,11+i,eucconv(memo[i]),28,3);} /* code converted! */\r
851 \r
852   while( 1){\r
853     /*tdis(34,11+y,memo[y],28,11);*/\r
854     tdis(34,11+y,eucconv(memo[y]),28,11); /* code converted! */\r
855     ke=inkey2();\r
856     /*tdis(34,11+y,memo[y],28,3);*/\r
857     tdis(34,11+y,eucconv(memo[y]),28,3); /* code converted! */\r
858 \r
859     if( ke==0xc ){goto redraw;}\r
860     if( ke==27 ){C_CLS_AL();home2(0);break;}\r
861     if( ke==13 ){B_LOCATE(34,11+y);sinput(memo[y],28);}\r
862     /*if( ke==13 ){B_LOCATE(34,11+y);sinput(eucconv(memo[y]),28);} /* code converted! */\r
863     if( ke==0x05 ){y--;if( y<0 ){y=11;}}\r
864     if( ke==0x18 ){y++;if( y>11 ){y=0;}}\r
865 \r
866     if( ke==7 ){\r
867       strcpy(tmp,memo[y]);\r
868       for(i=y;i<11;i++){\r
869         strcpy(memo[i],memo[i+1]);}\r
870       strcpy(memo[11],"");goto top;\r
871     }\r
872     if( ke==0x15 ){\r
873       for(i=11;i>y;i--){\r
874         strcpy(memo[i],memo[i-1]);}\r
875       strcpy(memo[y],tmp);goto top;\r
876     }\r
877   }\r
878 }\r
879 \r
880 /***************************/\r
881 int     option(int md,int sm)\r
882 {\r
883   int   ke,i,y=0,ex=0,gy=scyp;\r
884   int   cmd=0;\r
885   char  path2[128],tmp0[128],tmp1[128],tmp2[128];\r
886 \r
887   B_CLR_AL();\r
888   fill(0,544,767,1001,0);box(0,556,320,1001,14,65535);fill(1,556+17,8,1000,8);\r
889   sdis(0,556," OPTION COMMAND",40,15,14);home2(512);\r
890 \r
891   for(i=0;i<26;i++){\r
892     tmp0[0]=i+'A';tmp0[1]=32;tmp0[2]=0;strcat(tmp0,chcom_s[i][0]);\r
893     tdis(0,4+i,tmp0,39,3);}\r
894 \r
895   if(md>=0){y=md;goto cexec;}\r
896 \r
897   while( 1){\r
898   top:\r
899     md=-1;\r
900     tdis(2,4+y,chcom_s[y][0],37,11);\r
901     ke=inkey2();\r
902     tdis(2,4+y,chcom_s[y][0],37,3);\r
903 \r
904     if( ke==27 ){break;}\r
905     if( ke==0x05 ){y--;if( y<0 ){y=25;}}\r
906     if( ke==0x18 ){y++;if( y>25 ){y=0;}}\r
907     if(ke>='a' && ke<='z'){y=ke-'a';ke=13;}\r
908     if(ke>='A' && ke<='Z'){y=ke-'A';ke=13;}\r
909 \r
910     if( (ke==13 || ke==32)&& chcom_s[y][1][0]!=0 ){\r
911     cexec:\r
912       tdis(2,4+y,chcom_s[y][0],37,9);\r
913       strcpy(tmp0,chcom_s[y][1]);\r
914       strcpy(tmp2,chcom_c[y][0]);\r
915 \r
916       cmd=progmode(tmp2);\r
917 \r
918       if((cmd&512)!=0 && sm){\r
919         msg(_("This function is not available except for Main Menu."));\r
920         if(md<0){goto top;}\r
921         break;\r
922       }\r
923 \r
924       if((cmd&32)!=0 && chcom_c[y][1][0]!=0){\r
925         tmp1[0]=0;\r
926         strcpy(path2,rcp_path);fsel(tmp1,path2,y+64);\r
927         if( es==0 && tmp1[0]!=0 ){\r
928           strcat(tmp0," ");\r
929           strcat(tmp0,path2);strcat(tmp0,tmp1);\r
930         }else{tmp0[0]=0;}\r
931       }\r
932       if((cmd&64)!=0){\r
933         if(rcp_file[0]!=0){\r
934           strcpy(tmp1,rcp_file);\r
935           if(chcom_c[y][1][0]!=0){\r
936             strmfe(tmp1,tmp1,chcom_c[y][1]);\r
937           }\r
938           strcat(tmp0," ");\r
939           strcat(tmp0,rcp_path);strcat(tmp0,tmp1);\r
940         }else{tmp0[0]=0;}\r
941       }\r
942 \r
943       if(tmp0[0]!=0){ex=paraexe(tmp0,0,0,sm,cmd);break;}\r
944     }\r
945   }\r
946   B_CLR_AL();home2(gy);\r
947   return 1;\r
948 }\r
949 \r
950 /***************************/\r
951 int     option22(int md,int sm,int ad,int ew)\r
952 {\r
953   int   ke,i,y=0,ex=0,gy=scyp,cx,gx;\r
954   int   cmd=0;\r
955   char  path2[128],tmp0[128],tmp1[128],tmp2[128];\r
956 \r
957   if(ew==0){cx=41+16-16;gx=327+128-128;}else{cx=1+16-2;gx=7+128-16;}\r
958 \r
959   cons_md(0);\r
960 redraw:\r
961   edit_scr=ew;noed_cls();edit_scr=0;\r
962 \r
963   box(gx,556,gx+320,1001,14,65535);fill(gx+1,556+17,gx+8,1000,8);\r
964   sdis(cx,556," OPTION COMMAND",40,15,14);home2(512);\r
965 \r
966   for(i=0;i<26;i++){\r
967     tmp0[0]=i+'A';tmp0[1]=32;tmp0[2]=0;strcat(tmp0,chcom_s[i+26][0]);\r
968     tdis(cx,4+i,tmp0,39,3);}\r
969 \r
970   if(md>=0){y=md;goto cexec;}\r
971 \r
972   while( 1){\r
973   top:\r
974     md=-1;\r
975     tdis(cx+2,4+y,chcom_s[y+26][0],37,11);\r
976     ke=inkey2();\r
977     tdis(cx+2,4+y,chcom_s[y+26][0],37,3);\r
978 \r
979     if( ke==27 ){break;}\r
980     if( ke==0x05 ){y--;if( y<0 ){y=25;}}\r
981     if( ke==0x18 ){y++;if( y>25 ){y=0;}}\r
982     if(ke>='a' && ke<='z'){y=ke-'a';ke=13;}\r
983     if(ke>='A' && ke<='Z'){y=ke-'A';ke=13;}\r
984 \r
985     /*          if( ke==0x17 || ke==0x13 ){pg-=26;if(pg<0){pg=26;}goto redraw;}\r
986                 if( ke==0x12 || ke==0x04 ){pg+=26;if(pg>26){pg=0;}goto redraw;}\r
987                 */\r
988     if( (ke==13 || ke==32)&& chcom_s[y+26][1][0]!=0 ){\r
989     cexec:\r
990       tdis(cx+2,4+y,chcom_s[y+26][0],37,9);\r
991       strcpy(tmp0,chcom_s[y+26][1]);\r
992       strcpy(tmp2,chcom_c[y+26][0]);\r
993 \r
994       cmd=progmode(tmp2);\r
995 \r
996       if((cmd&512)!=0 && sm){\r
997         msg(_("This function is not available except for Main Menu."));\r
998         if(md<0){goto top;}\r
999         break;\r
1000       }\r
1001 \r
1002       if((cmd&32)!=0 && chcom_c[y+26][1][0]!=0){\r
1003         tmp1[0]=0;\r
1004         strcpy(path2,rcp_path);\r
1005 \r
1006         edit_scr=ew;noed_cls_t();noed_cls();edit_scr=0;\r
1007 \r
1008         if(sm==2){fsel(tmp1,path2,y+64+(ew&1)*0x200+26);\r
1009         }else{fsel(tmp1,path2,y+64);}\r
1010         if( es==0 && tmp1[0]!=0 ){\r
1011           strcat(tmp0," ");\r
1012           strcat(tmp0,path2);strcat(tmp0,tmp1);\r
1013         }else{tmp0[0]=0;}\r
1014         if(es!=0){goto redraw;}\r
1015 \r
1016       }\r
1017       if((cmd&64)!=0){\r
1018         if(rcp_file[0]!=0){\r
1019           strcpy(tmp1,rcp_file);\r
1020           if(chcom_c[y+26][1][0]!=0){\r
1021             strmfe(tmp1,tmp1,chcom_c[y+26][1]);\r
1022           }\r
1023           strcat(tmp0," ");\r
1024           strcat(tmp0,rcp_path);strcat(tmp0,tmp1);\r
1025         }else{tmp0[0]=0;}\r
1026       }\r
1027 \r
1028       if(tmp0[0]!=0){\r
1029         edit_scr=ew;noed_cls_t();noed_cls();edit_scr=0;\r
1030         ex=paraexe(tmp0,ad,ew,sm,cmd);break;}\r
1031       else{\r
1032         goto redraw;}\r
1033     }\r
1034   }\r
1035 \r
1036   if(ke==27){edit_scr=ew;noed_cls_t();noed_cls();edit_scr=0;}\r
1037 \r
1038   cons_md(1);\r
1039   home2(gy);\r
1040   return ex;\r
1041 }\r
1042 \r
1043 /***************************/\r
1044 int     option2(int md,int sm,int ad,int ew)\r
1045 {\r
1046   int   y,ex=0,gy;\r
1047   int   cmd=0;\r
1048   char  path2[128],tmp0[128],tmp1[128],tmp2[128];\r
1049   gy=scyp;y=md+26;\r
1050 \r
1051   if( chcom_s[y][1][0]!=0 ){\r
1052     strcpy(tmp0,chcom_s[y][1]);\r
1053     strcpy(tmp2,chcom_c[y][0]);\r
1054 \r
1055     cmd=progmode(tmp2);\r
1056 \r
1057     if((cmd&512)!=0 && sm){\r
1058       msg(_("This function is not available except for Main Menu."));\r
1059       goto ext;\r
1060     }\r
1061 \r
1062     if((cmd&32)!=0 && chcom_c[y][1][0]!=0){\r
1063       tmp1[0]=0;\r
1064       strcpy(path2,rcp_path);\r
1065 \r
1066       if(sm==2){fsel(tmp1,path2,y+64+(ew&1)*0x200);\r
1067       }else{fsel(tmp1,path2,y+64);}\r
1068 \r
1069       if( es==0 && tmp1[0]!=0 ){\r
1070         strcat(tmp0," ");\r
1071         strcat(tmp0,path2);strcat(tmp0,tmp1);\r
1072       }else{tmp0[0]=0;}\r
1073     }\r
1074 \r
1075     if((cmd&64)!=0){\r
1076       if(rcp_file[0]!=0){\r
1077         strcpy(tmp1,rcp_file);\r
1078         if(chcom_c[y][1][0]!=0){\r
1079           strmfe(tmp1,tmp1,chcom_c[y][1]);\r
1080         }\r
1081         strcat(tmp0," ");\r
1082         strcat(tmp0,rcp_path);strcat(tmp0,tmp1);\r
1083       }else{tmp0[0]=0;}\r
1084     }\r
1085 \r
1086     if(tmp0[0]!=0){ex=paraexe(tmp0,ad,ew,sm,cmd);}\r
1087   }\r
1088 ext:\r
1089   home2(gy);\r
1090   return(ex);\r
1091 }\r
1092 \r
1093 int     paraexe(char *tmp0,int ad,int ew,int sm,int cmd)\r
1094 {\r
1095   int   a,i,ex,im;\r
1096   char  tmp1[256],tmp2[256];\r
1097   int   dlen=0,dadd=0,dlen2=0;\r
1098 \r
1099   if( (cplen<0 && cpadd!=ad) && sm==2){\r
1100     dadd=cpadd;\r
1101     dlen=abs(dadd-ad);if(dadd>ad ){dadd=ad;}\r
1102     dlen2=dlen;\r
1103   }else{dlen=tr_len[track];}\r
1104 \r
1105   tmp1[0]=0;\r
1106 \r
1107   i=0;\r
1108   while((a=tmp0[i++])!=0){\r
1109     if(a=='%'){\r
1110       a=tmp0[i++];if(a==0){break;}\r
1111       switch( a){\r
1112       case  't':strcat(tmp1,nstr(track+1));break;\r
1113       case  'm':strcat(tmp1,nstr(meas_no(ad)));break;\r
1114 \r
1115       case  'o':strcat(tmp1,nstr(ad+44));break;\r
1116 \r
1117       case  'u':strcat(tmp1,nstr(dadd+44));break;\r
1118       case  'd':strcat(tmp1,nstr(dadd+dlen+40));break;\r
1119       case  'l':strcat(tmp1,nstr(dlen2));break;\r
1120 \r
1121       case  'w':strcat(tmp1,nstr(ew));break;\r
1122       case  's':strcat(tmp1,nstr(sm));break;\r
1123 \r
1124       default:tmp2[0]=a;tmp2[1]=0;strcat(tmp1,tmp2);break;\r
1125       }\r
1126     }else{\r
1127       tmp2[0]=a;tmp2[1]=0;strcat(tmp1,tmp2);\r
1128     }\r
1129   }\r
1130 \r
1131 \r
1132   if((cmd&1)!=0){\r
1133     if((cmd&0x2000)==0){bufset();}else{bufset_trk(track);}\r
1134   }\r
1135   if((cmd&8)!=0){all_note_off(2);}\r
1136 \r
1137   C_CURON();C_FNKMOD(0);FNCKEYST(0,(char*)fnckey0);\r
1138   C_WINDOW(0,31);B_COLOR(3);B_LOCATE(0,0);\r
1139 \r
1140   if((cmd&0x400)==0){B_CLR_AL();dpl(0);tpl(0);}\r
1141   else{B_LOCATE(0,1);}\r
1142 \r
1143   if((cmd&0x800)!=0 && sm==2){if(grpmode){grpmode=0;/*noed_cls();*/}}\r
1144 \r
1145   im=(B_SFTSNS()&4096);\r
1146   ex=exe(tmp1);\r
1147   if(im){LEDMOD(4,1);}else{LEDMOD(4,0);}\r
1148 \r
1149   if(ex==0 && sm==2){cplen=0;}\r
1150 \r
1151   C_FNKMOD(3);fnc_dis(-1);FNCKEYST(0,(char*)fnckey1);\r
1152   if((cmd&16)!=0){(*rcd->end)();}\r
1153   if((cmd&128)!=0 || (ex!=0 && (cmd&0x400)==0)){key_pause();}\r
1154   B_COLOR(3);C_CUROFF();\r
1155 \r
1156   if((cmd&0x400)==0){B_CLR_AL();CRTMOD(16+256);OnGraphic();}\r
1157   dpl(1);tpl(1);\r
1158   if(sm<2){home2(0);}else{home2(512);}\r
1159   WINDOW(0,0,1023,1023);\r
1160 \r
1161   ex=0;if(point(0,0)!=8||(cmd&0x100)!=0){sinit();ex=1;}\r
1162   if((cmd&(2+4))!=0){\r
1163     poft=0;\r
1164     if((cmd&0x2000)==0){bufload();form2();\r
1165     }else{bufload_trk(track);trk_lin(track,-1,0);}\r
1166     ex=1;\r
1167     if((cmd&2)!=0){timtra();}\r
1168   }else{\r
1169     if(ex!=0){form();}\r
1170   }\r
1171 \r
1172   rcd->data_valid=0;\r
1173   return ex;\r
1174 }\r
1175 \r
1176 /***************************/\r
1177 int     progmode(char *tmp2)\r
1178 {\r
1179   int   a,i,cmd=0;\r
1180 \r
1181   jstrupr(tmp2);\r
1182 \r
1183   i=0;\r
1184   while((a=tmp2[i++])!=0){\r
1185     if(a=='B'){cmd|=0x0001;}    /*bufset*/\r
1186     if(a=='L'){cmd|=0x0002;}    /*bufread*/\r
1187     if(a=='N'){cmd|=0x0004;}    /*bufread non cm6/gsd*/\r
1188     if(a=='O'){cmd|=0x0008;}    /* 実行前に演奏を停止する*/\r
1189     if(a=='E'){cmd|=0x0010;}    /* 実行後に演奏を停止する*/\r
1190     if(a=='S'){cmd|=0x0020;}    /*select*/\r
1191     if(a=='F'){cmd|=0x0040;}    /*ext change*/\r
1192     if(a=='P'){cmd|=0x0080;}    /*pause*/\r
1193     if(a=='G'){cmd|=0x0100;}    /*rewrite*/\r
1194     if(a=='M'){cmd|=0x0200;}    /*main only*/\r
1195     if(a=='U'){cmd|=0x0400;}    /*not screen clr*/\r
1196     if(a=='R'){cmd|=0x0800;}    /*not edit window clr*/\r
1197 \r
1198     /*if(a=='C'){cmd|=0x1000;}*/        /*command.x*/\r
1199     if(a=='T'){cmd|=0x2000;}    /*trk dataのみバッファアクセスする*/\r
1200   }\r
1201   return cmd;\r
1202 }\r
1203 \r
1204 /***************************/\r
1205 void    key_pause()\r
1206 {\r
1207   B_COLOR(1);B_LOCATE(0,31);B_PRINT(_("Return to STed2 ! Press [RET]"));\r
1208   while(inkey2()!=13){}\r
1209   B_COLOR(1);B_LOCATE(0,31);B_PRINT("                                        ");\r
1210 }\r
1211 \r
1212 /***************************/\r
1213 int     yn_sel()\r
1214 {\r
1215   int   ke,ec=0;\r
1216   int y,n;\r
1217 \r
1218   y=*_("Y");\r
1219   n=*_("N");\r
1220   B_PRINT(_("? (Y/N)"));\r
1221   while(1){\r
1222     ke=inkey2();\r
1223     if(ke==y || ke==tolower(y)||ke==13){ec= 1;break;}\r
1224     if(ke==n || ke==tolower(n)){ec=-1;break;}\r
1225     if(ke==27){break;}\r
1226   }\r
1227   msg_clr();\r
1228   return(ec);\r
1229 }\r
1230 \r
1231 /***************************/\r
1232 void    form()\r
1233 {\r
1234   rcp_dat();trk_dat();\r
1235 }\r
1236 \r
1237 /***************************/\r
1238 void    form2()\r
1239 {\r
1240   fill(102,43,767,485,0);form();\r
1241 }\r
1242 \r
1243 /***************************/\r
1244 void    form3()\r
1245 {\r
1246   fill(103,188,743,484,0);trk_dat();\r
1247 }\r
1248 \r
1249 /***************************/\r
1250 void    sinit()\r
1251 {\r
1252   int   i;\r
1253 \r
1254   CRTMOD(16);G_CLR_ON();WINDOW(0,0,1023,1023);home2(0);C_WINDOW(0,32);\r
1255   B_CLR_AL();dpl(1);tpl(1);logo(0);logo(512);sdis2(30+9,0,module,22,15,8);\r
1256   box(0,43,96,99,14,65535);\r
1257   for(i=0;i<18;i++){sdis(1,112+i*21,menu1[i],8,15,8);}\r
1258 }\r
1259 \r
1260 /***************************/\r
1261 void    logo(int y)\r
1262 {\r
1263   if(y<0){\r
1264     fill(496,512,767,512+31,0);\r
1265     fill(496,512,767,512+15,8);box(496,512,767,512+15,14,65535);\r
1266     y=510;\r
1267   }else{\r
1268     sdis2(0,y," FREE:",14,15,8);sdis2(15,y," USED:",14,15,8);\r
1269     sdis2(30,y," TR.: 1",8,15,8);\r
1270     fill(496,y,767,y+31,8);box(496,y,767,y+31,14,65535);\r
1271     symbol(496+5,y+18,comment,1,1,0,15,0);\r
1272     trksize(-2);\r
1273   }\r
1274   g_print(496+24,y+2,"STed v2.07  (c)1990-97 TURBO",15);\r
1275 /*\r
1276   g_print(496+13,y+3,"・・・ ・・・m・1990-97・・・・",0);\r
1277   g_print(496+12,y+2,"・・・ ・・・m・1990-97・・・・",15);\r
1278 */\r
1279   /*    g_print(496   ,y+2,"・・・・・・・・ ・1990-97・・・・",15);*/\r
1280   /*    g_print(496+8 ,y+2,"・・・・・・・・ ・1990-97 TURBO",15);*/\r
1281 }\r
1282 /* JIS-[7621] SJIS-[EB9F]\r
1283 ----------------------------------------------------------------\r
1284 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・\r
1285 \r
1286 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・\r
1287 ----------------------------------------------------------------\r
1288 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・\r
1289 \r
1290 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・\r
1291 ----------------------------------------------------------------\r
1292 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・\r
1293 \r
1294 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・\r
1295 ----------------------------------------------------------------\r
1296 */\r
1297 \r
1298 /***************************/\r
1299 void    trk_dat()\r
1300 {\r
1301   int   i;\r
1302   static        short   xpos[7]={163,195,227,259,291,589,637};\r
1303 \r
1304   fill(103,189,120,484,8);\r
1305   for(i=0;i<7;i++){line(xpos[i],171,xpos[i],484,14,65535);}\r
1306 \r
1307   for(i=btrack;i<btrack+18;i++){trk_lin(i,-1,2);}\r
1308   trksize(-1);\r
1309 }\r
1310 \r
1311 /***************************/\r
1312 void    rcp_dat()\r
1313 {\r
1314   box(102,43,744,99-16,14,65535);\r
1315   sdis(14,48,"MUSIC TITLE  :",0,15,-1);sdis(14,64,"FILE NAME    :",0,15,-1);\r
1316   sdis(14+37,80-16,"/",0,15,-1);sdis(14+37+19,80-16,"/",0,15,-1);\r
1317 \r
1318   box(102,106-16,424,164,14,65535);box(432,106-16,744,164,14,65535);\r
1319 \r
1320   sdis(14, 96,"TEMPO    :",0,15,-1);    sdis(34, 96,"TIMEBASE :",0,15,-1);\r
1321   sdis(14,112,"PLAY BIAS:",0,15,-1);    /*midi thru*/\r
1322   sdis(14,128,"KEY  :",0,15,-1);                /*sync mode*/\r
1323   sdis(14,144,"BEAT  :    /",0,15,-1);  sdis(34,144,"MIDI IN :",9,15,-1);\r
1324 \r
1325   rcp_dat2(-1,0);\r
1326 \r
1327   box(102,171,744,485,14,65535);\r
1328   sdis(13,172,"TR MODE CH. ST+ K#+ RHY    TRACK MEMO                         STEP     TOTAL ST",80,15,14);\r
1329 }\r
1330 \r
1331 /***************************/\r
1332 void    rcp_dat2(int n,int m)\r
1333 {\r
1334   int   i,c1,c2;\r
1335 \r
1336   if(m==1){c1=0;c2=15;}else{c1=15;c2=0;}\r
1337   if(m==2){c2=-1;}\r
1338 \r
1339   /*if(n==0 || n<0){sdis2(28,48,mtitle,64,c1,c2);}*/\r
1340   if(n==0 || n<0){sdis2(28,48,eucconv(mtitle),65,c1,c2);} /* code converted! */\r
1341   if(n==1 || n<0){sdis2(28,64,rcp_file,22,c1,c2);}\r
1342   if(n==2 || n<0){sdis2(28+25,64,cm6_file,12,c1,c2);sdis2(28+44,64,gsd_file,16,c1,c2);}\r
1343   if(n==3 || n<0){vdis(25,96,mtempo,3,c1,c2);}\r
1344   if(n==4 || n<0){i=pbias;if(i>127){i=i-256;}vdis(25,112,i,3,c1,c2);}\r
1345   if(n==5 || n<0){sdis2(20,128,scale_str(bkey),13,c1,c2);}\r
1346   if(n==6 || n<0){vdis(22,144,beat1,2,c1,c2);vdis(26,144,beat2,2,c1,c2);}\r
1347   if(n==7 || n<0){vdis(45,96,tbase,3,c1,c2);}\r
1348   if(n==8 || n<0){sdis2(44,144,mdinport(),8,c1,c2);}\r
1349 }\r
1350 \r
1351 /***************************/\r
1352 void    beat_set()\r
1353 {\r
1354   int   ke,sh,ex,cx=0,i=0,mm=0;\r
1355 \r
1356   while(1){\r
1357 \r
1358     if(cx==0 && i==0){mm=3;}\r
1359     if(         i==1){mm=4;}\r
1360     if(         i==2){mm=5;}\r
1361     if(         i==3){mm=6;}\r
1362     if(cx==1 && i==0){mm=7;}\r
1363 \r
1364     rcp_dat2(mm,1);\r
1365     ke=inkey3();sh=ke>>8;ke=ke&0xff;\r
1366     rcp_dat2(mm,0);\r
1367 \r
1368     if( ke==27 ){break;}\r
1369 \r
1370     if( ke==13 ){\r
1371       if( mm==3 ){\r
1372         B_LOCATE(25,6);ex=vinput(mtempo,0x803);\r
1373         if(es==0 && ex>7 && ex<256 ){mtempo=ex;}\r
1374       }\r
1375       if( mm==4 ){\r
1376         ex=pbias;if(ex>127){ex=ex-256;}\r
1377         B_LOCATE(25,7);ex=vinput(ex,0x803);\r
1378         if(ex>=-36 && ex<=36){\r
1379           if(ex<0){ex=ex+256;}\r
1380           if(es==0 && ex>=0 && ex<=255){pbias=ex;}\r
1381         }\r
1382       }\r
1383       if( mm==5 ){\r
1384         sdis2(20,128,"",13,0,7);\r
1385         ex=scale_sel(20,8,bkey);\r
1386         if(ex>=0){bkey=ex;}\r
1387       }\r
1388       if( mm==6 ){\r
1389         B_LOCATE(22,9);ex=vinput(beat1,0x802);\r
1390         if(es==0 && ex>0 && ex<=32){beat1=ex;}\r
1391         B_LOCATE(26,9);ex=vinput(beat2,0x802);\r
1392         if(es==0 && ex>1 && ex<=8){beat2=ex;}\r
1393       }\r
1394       if( mm==7 ){\r
1395         B_LOCATE(45,6);ex=vinput(tbase,0x803);\r
1396         if(es==0 && ex>=48 && ex<=480){tbase=ex;}\r
1397       }\r
1398       B_LOCATE(0,2);C_CLS_ED();\r
1399     }\r
1400 \r
1401     if( ke>='0' && ke<='9' ){\r
1402       if( mm==3 ){\r
1403         B_LOCATE(25,6);ex=vinput(ke-'0',0x403);\r
1404         if(es==0 && ex>7 && ex<256 ){mtempo=ex;}\r
1405       }\r
1406       if( mm==4 ){\r
1407         ex=pbias;if(ex>127){ex=ex-256;}\r
1408         B_LOCATE(25,7);ex=vinput(ke-'0',0x403);\r
1409         if(ex>=-36 && ex<=36){\r
1410           if(ex<0){ex=ex+256;}\r
1411           if(es==0 && ex>=0 && ex<=255){pbias=ex;}\r
1412         }\r
1413       }\r
1414       if( mm==6 ){\r
1415         B_LOCATE(22,9);ex=vinput(ke-'0',0x402);\r
1416         if(es==0 && ex>0 && ex<=32){beat1=ex;}\r
1417         B_LOCATE(26,9);ex=vinput(beat2,0x802);\r
1418         if(es==0 && ex>1 && ex<=8){beat2=ex;}\r
1419       }\r
1420       if( mm==7 ){\r
1421         B_LOCATE(45,6);ex=vinput(ke-'0',0x403);\r
1422         if(es==0 && ex>=48 && ex<=480){tbase=ex;}\r
1423       }\r
1424       B_LOCATE(0,2);C_CLS_ED();\r
1425     }\r
1426 \r
1427     if( ke=='+' || ke=='>' || ke=='.' ){\r
1428       if( mm==3 ){\r
1429         if(sh&1){mtempo+=10;}else{mtempo++;}\r
1430         if(mtempo>255){mtempo=255;}}\r
1431       if( mm==4 ){\r
1432         ex=pbias;if(ex>127){ex=ex-256;}\r
1433         if(sh&1){ex+=12;}else{ex++;}\r
1434         if(ex<=36){\r
1435           if(ex<0){ex=ex+256;}\r
1436           pbias=ex;\r
1437         }\r
1438       }\r
1439       if( mm==5 ){bkey++;if(bkey>31){bkey=0;}}\r
1440       if( mm==7 ){\r
1441         int j;\r
1442         for(j=0;j<10;j++){\r
1443           if(tbase<tbase_tbl[j]){tbase=tbase_tbl[j];break;}\r
1444         }\r
1445       }\r
1446     }\r
1447     if( ke=='-' || ke=='<' || ke==',' ){\r
1448       if( mm==3 ){\r
1449         if(sh&1){mtempo-=10;}else{mtempo--;}\r
1450         if(mtempo<8){mtempo=8;}}\r
1451       if( mm==4 ){\r
1452         ex=pbias;if(ex>127){ex=ex-256;}\r
1453         if(sh&1){ex-=12;}else{ex--;}\r
1454         if(ex>=-36){\r
1455           if(ex<0){ex=ex+256;}\r
1456           pbias=ex;\r
1457         }\r
1458       }\r
1459       if( mm==5 ){bkey--;if(bkey<0){bkey=31;}}\r
1460       if( mm==7 ){\r
1461         int j;\r
1462         for(j=10-1;j>=0;j--){\r
1463           if(tbase>tbase_tbl[j]){tbase=tbase_tbl[j];break;}\r
1464         }\r
1465       }\r
1466     }\r
1467 \r
1468     if( ke==32 ){\r
1469       if( mm==3 ){mtempo=120;}\r
1470       if( mm==4 ){pbias=0;}\r
1471       if( mm==5 ){bkey=0;}\r
1472       if( mm==6 ){beat1=4;beat2=4;}\r
1473       if( mm==7 ){tbase=48;}\r
1474     }\r
1475     if( ke==0x0b ){i=0;}\r
1476 \r
1477     if( ke==0x05 ){i--;if(i<0){i=3;}}\r
1478     if( ke==0x18 ){i++;if(i>3){i=0;}}\r
1479     if( ke==0x13 ){cx--;if(cx<0){cx=1;}}\r
1480     if( ke==0x04 ){cx++;if(cx>1){cx=0;}}\r
1481   }\r
1482 }\r
1483 \r
1484 /***************************/\r
1485 char    *mdinport()\r
1486 {\r
1487   static        char tmp0[64];\r
1488   char *a;\r
1489 \r
1490   /*\r
1491   if(rcd->rcd_type==4){strcpy(tmp0,"RS-232C");\r
1492   }else{\r
1493     if(rcd->rcd_type==3){strcpy(tmp0,"POLYPHON");\r
1494     }else{\r
1495       if(rcd->put_mode==2){\r
1496         if(rcd->rcd_type==0){strcpy(tmp0,"RS-232C");\r
1497         }else{strcpy(tmp0,"POLYPHON");}\r
1498       }else{strcpy(tmp0,"CZ-6BM1");}\r
1499     }\r
1500   }\r
1501   */\r
1502   \r
1503   if ( midi_port_name[0] != 0 ) {  /* Sep.02.1998 Daisuke Nagano */\r
1504     a = strrchr( midi_port_name, '/' );\r
1505     if ( a==NULL ) a=midi_port_name-1;\r
1506     strncpy( tmp0, a+1, 63 );\r
1507   } else {\r
1508     strcpy( tmp0, "NoConnect" );\r
1509   }\r
1510   return tmp0;\r
1511 }\r
1512 \r
1513 /***************************/\r
1514 void    dpl(int a)\r
1515 {\r
1516   int   i;\r
1517 \r
1518   for(i=0;i<=15;i++){if(a==0){GPALET(i,0);}else{GPALET(i,palet_dat[i]);}}\r
1519 }\r
1520 \r
1521 /***************************/\r
1522 void    tpl(int a)\r
1523 {\r
1524   int   i;\r
1525 \r
1526   for(i=1;i<=3;i++){if(a==0){TPALET(i,-2);}else{TPALET(i,palet_dat[i]);}}\r
1527 }\r
1528 \r
1529 /***************************/\r
1530 void    fonload(char *fi)\r
1531 {\r
1532 #if 0\r
1533   FILE  *fp;\r
1534   char tmp0[1024];\r
1535 \r
1536   if(!(fp= fopen2(fi,"rb"))){\r
1537     strcpy( tmp0, STED_DEFAULT_PATH );\r
1538     strcat( tmp0, "/" );\r
1539     strcat( tmp0, (strrchr(fi,'/')==NULL)?fi:(strrchr(fi,'/')+1) );\r
1540     if (!(fp=fopen2( tmp0, "rb" ))) {\r
1541       B_PRINT(fi);B_PRINT(_(": File not found.\n"));exit(1);\r
1542     }\r
1543   } /* Oct.13.1998 by Daisuke Nagano */\r
1544   fread(dat,1,12*1024,fp);fclose(fp);\r
1545   fonset(dat);\r
1546 #endif\r
1547 }\r
1548 \r
1549 /***************************/\r
1550 void    fonread(unsigned char *buf)\r
1551 {\r
1552   int   i;\r
1553 \r
1554   struct        X68_FNTBUF      *fntb,buff;\r
1555   fntb=&buff;\r
1556 \r
1557   for(i=0;i<94;i++){\r
1558     FNTGET(8,0x7621+i,fntb);memcpy(&buf[i*32      ],fntb->buffer,32);\r
1559     FNTGET(8,0x7721+i,fntb);memcpy(&buf[i*32+94*32],fntb->buffer,32);\r
1560   }\r
1561 }\r
1562 \r
1563 /***************************/\r
1564 void    fonset(unsigned char *buf)\r
1565 {\r
1566   int   i;\r
1567 \r
1568   for(i=0;i<94;i++){\r
1569     DEFCHR(8,0x7621+i,&buf[i*32      ]);\r
1570     DEFCHR(8,0x7721+i,&buf[i*32+94*32]);\r
1571   }\r
1572 }\r
1573 \r
1574 /***************************/\r
1575 int     option_read(char *env_option)\r
1576 {\r
1577   int   i,s,nn;\r
1578 \r
1579   strcat(env_option," ");i=0;s=0;nn=0;\r
1580 \r
1581   while(env_option[i]!=0){\r
1582     if(env_option[i]==32){\r
1583       if(s>0){\r
1584         env_opt[nn][s]=0;nn++;s=0;if(nn>31){break;}\r
1585       }\r
1586     }else{\r
1587       env_opt[nn][s]=env_option[i];s++;\r
1588     }\r
1589     i++;\r
1590   }\r
1591   return(nn);\r
1592 }\r
1593 \r
1594 /***************************/\r
1595 int     exe(char *cl)\r
1596 {\r
1597   int   ec,er,use;\r
1598   char  tmp0[128];\r
1599 \r
1600   rst_errvect();\r
1601   size_ref();\r
1602 \r
1603   if(used_u==0){\r
1604     use=buff_size-buff_free;\r
1605     SETBLOCK((void *)trk[0],use);\r
1606 \r
1607     ec=-1;\r
1608     if(rc_path[0]!=0){strcpy(tmp0,rc_path);strcat(tmp0,cl);ec=child(tmp0);}\r
1609     if(ec<0){ec=child(cl);}\r
1610 \r
1611     buff_size=buff_max;\r
1612     /*realc:*/\r
1613     er=SETBLOCK((void *)trk[0],buff_size);\r
1614     /*\r
1615       if(er>=0x81000000){\r
1616       msg("トラックバッファが再確保出来ません。");\r
1617       buff_size=er&0xfffffc;\r
1618       if(er<0x82000000){goto realc;}\r
1619       }\r
1620 \r
1621       buff_free=buff_size-use;\r
1622       */\r
1623   }else{\r
1624     ec=child(cl);\r
1625   }\r
1626   /*    trksize(-2);*/\r
1627   set_errvect();\r
1628   return(ec);\r
1629 }\r
1630 \r
1631 /***************************/\r
1632 void    ErrorTrap(void)\r
1633 {\r
1634 \r
1635   fprintf(stderr,"ErrorTrap\n");\r
1636   exit(-1);\r
1637 #ifdef X680x0\r
1638 \r
1639   register int  ErrCode asm(" d7");\r
1640 \r
1641   if (((unsigned int)ErrCode >=0x1000) && ((unsigned int)ErrCode <= 0x7fff)) {\r
1642     switch ( (unsigned int)ErrCode ) {\r
1643       /*case 0x01:msg("無効なユニットを指定しました。");break;\r
1644         case 0x02:msg("ドライブの準備ができていません。");break;\r
1645         case 0x03:msg("無効なコマンドを指定しました。");break;*/\r
1646     case 0x04:msg("CRCエラー");break;\r
1647     case 0x05:msg("管理領域が異常です。");break;\r
1648     case 0x06:msg("シークエラー");break;\r
1649     case 0x07:msg("無効なメディアです。");break;\r
1650     case 0x08:msg("セクタが見つかりません。");break;\r
1651     case 0x0a:msg("書き込みエラー");break;\r
1652     case 0x0b:msg("読み込みエラー");break;\r
1653     case 0x0d:msg("ライトプロテクトされてます。");break;\r
1654     case 0x0e:msg("書き込みが禁止されています。");break;\r
1655       /*case 0x0f:msg("ファイル共有違反です。");break;*/\r
1656 \r
1657     case 0x09:/*msg("プリンタオフライン");*/;\r
1658       /*case 0x1f:msg("インタラプトが押されました。");*/\r
1659       IJUMP_RTE();return;break;\r
1660     default:\r
1661       IJUMP(ErrorTrap_Old);return;break;\r
1662     }\r
1663     /*bufset();IJUMP(ErrorTrap_Old);*/\r
1664     \r
1665     (0);B_LOCATE(0,2);C_CLS_ED();fcloseall();\r
1666 \r
1667     asm("andi.w #$d8ff,sr");\r
1668     IJUMP((int)*com_sel);\r
1669   } else {\r
1670     IJUMP(ErrorTrap_Old);\r
1671   }\r
1672 \r
1673 #endif\r
1674 }\r
1675 \r
1676 /***************************/\r