home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
fb386
/
fmsconv
/
fmsconv.bas
next >
Wrap
BASIC Source File
|
1980-01-02
|
4KB
|
88 lines
1000 ' FMBデータ→BASICデータ コンバーター
1010 ' for F-BASIC386 V1.1L20以上
1020 ' 初期設定
1030 DIM NUM(128),FM%(23) : N=1
1040 KEY 1,"Q:\FJ\FM\":CONSOLE 0,24,2:COLOR 7
1050 ON ERROR GOTO *ERROR
1060 ' コンバートデータの前手続き
1070 *LOAD_FILE
1080 PRINT "ロードするFMBファイルのファイル名を入力して下さい。"
1090 LINE INPUT "FILE NAME (.FMBは付けない) : ";FMB$
1100 LOAD@ FMB$+".FMB"
1110 PRINT:PRINT "コンバートする音色番号を入力して下さい。(0で終了)"
1120 *INPUT
1130 PRINT USING "### ";N;:INPUT ".音色番号 ( 1-128 or 0 ) : ",NUM(N)
1140 IF NUM(N)>128 THEN BEEP : GOTO *INPUT
1150 IF NUM(N)>0 THEN *CHECK
1160 *INPUT_END : N=N-1
1170 ON N+1 GOTO *END,*DATA_CONV
1180 PRINT "ソート中です。しばらくお待ち下さい。"
1190 FOR I=1 TO N-1
1200 FOR J=1 TO N-1
1210 IF NUM(J)>NUM(J+1) THEN SWAP NUM(J),NUM(J+1)
1220 NEXT J,I
1230 ' データのコンバート
1240 *DATA_CONV
1250 PRINT : PRINT "ディスクをドライブAに入れ、ファイルを書き込むディレクトリを指定して下さい。ルートディレクトリに書き込む場合は、そのままリターンキーを押して下さい。"
1260 INPUT "ディレクトリ : \",DIR$
1270 PRINT "ドライブAに"+CHR$(&H22)+"NONAME.FMS"+CHR$(&H22)+"が作成されます。"
1280 *SAVE_FILE
1290 OPEN "O",#1,"A:"+DIR$+"\NONAME.FMS"
1300 PRINT #1,"30000 *FM_SET"
1310 PRINT #1,"30010 DIM FM%(23)"
1320 PRINT #1,"30020 SAD=VARPTR(FM%(0))"
1330 PRINT #1,"30030 FOR I=1 TO";N
1340 PRINT #1,"30040 READ NUM"
1350 PRINT #1,"30050 FOR OFSET=8 TO 33"
1360 PRINT #1,"30060 READ DT$"
1370 PRINT #1,"30070 POKE SAD+OFSET,VAL(";CHR$(&H22);"&H";CHR$(&H22);"+DT$)"
1380 PRINT #1,"30080 NEXT"
1390 PRINT #1,"30090 VOICE NUM,FM%"
1400 PRINT #1,"30100 NEXT : RETURN"
1410 SAD=VARPTR(FM%(0)):POKE SAD+33,(PEEK(SAD+33) AND &H37)
1420 PRINT #1,"30110 'FM TONE DATA"
1430 FOR L=1 TO N:LNUM=30120+(L-1)*30
1440 VOICE COPY NUM(L),FM%
1450 PRINT #1,MID$(STR$(LNUM),2);" DATA";NUM(L);" '";
1460 FOR OFSET=0 TO 7:PRINT #1,CHR$(PEEK(SAD+OFSET));:NEXT:PRINT #1
1470 OFSET=8 :PRINT #1,MID$(STR$(LNUM+10),2);" DATA ";:GOSUB *PRINT
1480 FOR OFSET=9 TO 19:PRINT #1,",";:GOSUB *PRINT :NEXT:PRINT #1
1490 OFSET=20:PRINT #1,MID$(STR$(LNUM+20),2);" DATA ";:GOSUB *PRINT
1500 FOR OFSET=21 TO 33:PRINT #1,",";:GOSUB *PRINT :NEXT:PRINT #1
1510 NEXT L
1520 CLOSE #1
1530 ' 後処理
1540 PRINT "作成されたファイルの行番号は ";:COLOR 5
1550 PRINT "30000 ";:COLOR 7:PRINT "-";:COLOR 5
1560 PRINT LNUM+20;:COLOR 7:PRINT " です。"
1570 *END : PRINT "コンバートを終了しました。音プロ作り、頑張ってね。"
1580 END
1590 ' ディスクへの書き込みサブルーチン
1600 *PRINT
1610 DAT=PEEK(SAD+OFSET)
1620 IF DAT>15 THEN PRINT #1,HEX$(DAT); ELSE PRINT #1,"0";HEX$(DAT);
1630 RETURN
1640 *CHECK
1650 I=1
1660 WHILE I-N
1670 IF NUM(I)=NUM(N) THEN PRINT "データが重複しています。":BEEP:GOTO *INPUT
1680 I=I+1
1690 WEND:N=N+1:IF N=129 THEN *INPUT_END ELSE *INPUT
1700 ' エラートラップ
1710 *ERROR
1720 CLOSE
1730 IF ERR=72 THEN *ERR_1
1740 IF ERL=1100 THEN BEEP:RESUME *LOAD_FILE
1750 IF ERL=1290 THEN *ERR_2
1760 COLOR 2:PRINT USING "#####行にエラー発生!! ( ERROR ### )";ERL;ERR
1770 STOP
1780 *ERR_1:BEEP:PRINT "ディスクがセットされていません。正しくセットしたらリターンキーを押してください。"
1790 GOSUB *WAIT
1800 *ERR_2
1810 IF ERR=64 THEN KILL "A:"+DIR$+"\NONAME.FMS"
1820 IF ERR=63 THEN CMDLINE$="MKDIR A:\"+DIR$:SHELL CMDLINE$
1830 IF ERR=65 THEN BEEP:PRINT "ディレクトリ領域が一杯です。":RESUME *DATA_CONV
1840 IF ERR=67 THEN BEEP:PRINT "ディスクが一杯です。":RESUME *DATA_CONV
1850 RESUME *SAVE_FILE
1860 *WAIT:IF INKEY$<>CHR$(&HD) THEN *WAIT ELSE RETURN