10 '−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
20 '　　　　　ＢＡＳＩＣ　ＴＹＰＥ　ＣＯＮＶＥＲＴＥＲ
30 '　　　　　　　　　ＤＯＣＢＡＹ（毒兵衛）
40 '　　　　　　　　　　　　　ＰＲＯＧＲＡＭＥＤ　ＢＹ　ＴＯＲＥ
50 '                          ＤＡＴＥ　９５／０８／０１
60 '−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
70 '  ドキュメントファイルをＢＡＳＩＣエディタから見るツールです。
80 CLEAR:SCREEN 0:SCREEN@ 0:PALETTE:COLOR 7,0,7,4:CLS
90 WIDTH 80,25:CONSOLE 1,24,0
100 '
110 THISFILENAME$="q:\fb386\tool\docbay\docbay.bas"'このファイルの名前
120 DIR2$="d:\"                              '出力ファイルパス
130 FONT=12                                  'フォントサイズ 12 OR 16
140 GYO=(640-16)\(FONT/2)-10                 '一行の長さ  この式が最適
150 STLIN=10                                 '始めの行番号
160 STP=5                                    '行のSTEP数
170 KAK$="docgggtxtmanbas"                   '拡張子省略用 ３文字ずつ
180 LOADFILENAME$="q:\fb386\tool\docbay\docbay.bas"
190 '                                  読んだあとにロードするファイル名
200 '
210 LOCATE 0,0:COLOR 12:PRINT " basic type converter DOCBAY(毒兵衛) ";
220 COLOR 5:PRINT SPACE$(10)+"programed by ＴＯＲＥ (95/08/01)";
230 '
240 LOCATE 0,1:COLOR 7
250 DIM AR$(0),LD%(0)
260 ON ERROR GOTO *ERR
270 '
280 *MAIN
290 LINE INPUT"◎ input read filename ◎ ";NM$:DIR$=""
300 IF NM$="end" OR NM$="END" THEN END
310 IF NM$="cls" OR NM$="CLS" THEN CLS 1:GOTO*MAIN
320 IF LEFT$(NM$,3)="set" OR LEFT$(NM$,3)="SET" THEN GOSUB*SET:GOTO*MAIN
330 IF (LEFT$(NM$,2)="cd" OR LEFT$(NM$,2)="CD") AND LEN(NM$)>2 THEN SHELL"cd "+MID$(NM$,3):GOTO*MAIN
340 IF MID$(NM$,2)=":" THEN DIR$=NM$:FILES DIR$:SHELL DIR$:GOTO*MAIN
350 IF RIGHT$(NM$,1)="\" THEN DIR$=NM$:FILES DIR$:GOTO*MAIN
360 '
370 A=INSTR(NM$,"\")
380 IF A THEN DIR$=LEFT$(NM$,A):NM$=MID$(NM$,A+1):GOTO 370
390 IF A=0 AND MID$(NM$,2,1)=":" THEN DIR$=LEFT$(NM$,2):NM$=MID$(NM$,3)
400 A=INSTR(NM$,".")
410 IF 0<A AND A<=9 THEN NM$=LEFT$(NM$,A)+MID$(NM$,A+1,3)
420 IF A>9 THEN NM$=LEFT$(NM$,8)+MID$(NM$,A,4):BEEP
430 IF INSTR(NM$,".")=0 THEN NM$=LEFT$(NM$,8)+"."
440 '
450 NM2$=LEFT$(NM$,INSTR(NM$,"."))+"t00"
460 FILES DIR$+NM$,C,AR&:ERASE AR$:DIM AR$(AR&(1))
470 FILES DIR$+NM$,N,AR$
480 SIZE&=VAL(MID$(AR$(1),17,11)):ERASE LD%:DIM LD%(SIZE&\2)
490 LOAD@ DIR$+NM$,LD%:START&=VARPTR(LD%(0))
500 '
510 OPEN "I",#1,DIR$+NM$
520 OPEN "O",#2,DIR2$+NM2$
530 '
540 TIME$="00:00:00"
550 PRINT DIR$+NM$;" → ";DIR2$+NM2$
560 LN=STLIN:PT&=0:L=1
570 '
580 PRINT #2,"1"+CHR$(&H27),"フォント サイズ"+STR$(FONT),
590 PRINT #2,"一行の長さ"+STR$(GYO)
600 PRINT #2,"2"+CHR$(&H27)
610 PRINT SPACE$(10);CHR$(&H0D);
620 WHILE NOT EOF(1)
630   PRINT L;CHR$(&H0D);
640   LINE INPUT#1,A$:DS=LEN(A$):B$=A$
650   MPT&=PT&:NOER=0
660   WHILE LEN(B$)>GYO
670     A$=LEFT$(B$,GYO):B%=ASC(RIGHT$(A$,1)):MJ=GYO
680     IF LEN(KRIGHT$(A$,1))=1 THEN
690       IF (&H80<=B% AND B%<=&H9F) OR (&HE0<=B% AND B%<=&HFE) THEN
700         MJ=MJ+1
710       ENDIF
720     ENDIF
730     PRINT#2,MID$(STR$(LN),2)+CHR$(&H27)+LEFT$(B$,MJ):LN=LN+STP:L=L+1
740     PT&=PT&+MJ
750     B$=MID$(B$,MJ+1)
760   WEND
770   A$=B$:MJ=LEN(A$):PT&=PT&+MJ
780   IF DS<255 THEN PT&=PT&+2:GOTO 1050
790   WHILE NOER<2
800     NOER=0:YY=PT&
810     WHILE NOER=0
820       B%=PEEK(START&+PT&,1):PT&=PT&+1:MJ=MJ+1
830       IF MJ>=GYO THEN NOER=1
840       IF B%=&H0D THEN PT&=PT&+1:NOER=2
850       IF NOER<2 THEN A$=A$+CHR$(B%)
860     WEND
870     IF NOER=1 THEN
880       IF LEN(KRIGHT$(A$,1))=1 THEN
890         IF (&H80<=B% AND B%<=&H9F) OR (&HE0<=B% AND B%<=&HFE) THEN
900           B%=PEEK(START&+PT&,1):A$=A$+CHR$(B%):PT&=PT&+1
910         ENDIF
920       ENDIF
930       PRINT L;CHR$(&H0D);
940       PRINT#2,MID$(STR$(LN),2)+CHR$(&H27)+A$:LN=LN+STP:L=L+1
950       A$="":MJ=0
960     ENDIF
970     IF INKEY$=CHR$(&H1B) THEN NOER=3
980   WEND
990   C$=INPUT$(1,#1)
1000   T=PT&-MPT&-2048
1010   IF T>0 THEN
1020     WHILE T>255:C$=INPUT$(255,#1):T=T-255:WEND:C$=INPUT$(T,#1)
1030   ENDIF
1040   '
1050   PRINT#2,MID$(STR$(LN),2)+CHR$(&H27)+A$:LN=LN+STP:L=L+1
1060   IF NOER=3 OR INKEY$=CHR$(&H1B) THEN GOSUB*中断
1070 WEND
1080 '
1090 PRINT#2,"65500"+CHR$(&H27)
1100 PRINT#2,"65510"+"KILL"+CHR$(34)+DIR2$+NM2$
1110 PRINT#2,"65520"+"LOAD"+CHR$(34)+LOADFILENAME$
1120 CLOSE:DT=TIME
1130 '
1140 SAVE THISFILENAME$,A
1150 PRINT
1160 PRINT DIR$+NM$" → "DIR2$+NM2$"  コンバート成功"
1170 PRINT "フォントサイズ"FONT
1180 PRINT "一行の長さ    "GYO
1190 PRINT "時間          "DT"秒"
1200 WHILE INKEY$<>"":WEND
1210 COLOR 7:PRINT "   作成した物を表示しますか。（Ｙ／Ｎ）"
1220 A$=INPUT$(1)
1230 IF A$<>"n" AND A$<>"N" AND A$<>CHR$(&H1B) THEN LOAD DIR2$+NM2$
1240 END
1250 '
1260 *ERR
1270 IF ERL=330 AND ERR=63 THEN WRM=0:GOSUB*PERR:PRINT "そのディレクトリはありません。":RESUME*MAIN
1280 IF (ERL=340 OR ERL=350 OR ERL=460) AND ERR=72 THEN
1290   GOSUB*PERR:PRINT "そのドライブは使用不可能です。"
1300   RESUME*MAIN
1310 ENDIF
1320 IF ((ERL=460 OR ERL=470 OR ERL=490) AND (ERR=55 OR ERR=63))OR ERR=100 THEN
1330   IF ERR<>100 THEN GOSUB*PERR:PRINT DIR$+NM$"  はありません。"
1340   IF LEN(KAK$)=<KAK*3 THEN KAK=0:RESUME*MAIN
1350   NM$=LEFT$(NM$,INSTR(NM$,"."))+MID$(KAK$,KAK*3+1,3):KAK=KAK+1
1360   RESUME 340
1370 ENDIF
1380 IF ERL=490 AND ERR=75 THEN FILES DIR$+NM$:RESUME*MAIN
1390 IF ERL=520 THEN
1400   IF ERR=52 OR ERR=64 THEN NM2$=LEFT$(NM2$,INSTR(NM2$,"."))+RIGHT$(LEFT$("t0",3-LEN(HEX$(ER)))+HEX$(ER),3):ER=ER+1:RESUME
1410   IF ERR=55 THEN DIR2$=DIR2$+"\":RESUME 520
1420   IF ERR=63 OR ERR=72 OR ERR=73 THEN
1430     GOSUB*PERR:PRINT "DIR2$ が異常です。"
1440     PRINT "   "DIR2$+NM2$" はできませんでした。"
1450     FOR I=0 TO 2:BEEP:WAIT 30:NEXT
1460     PRINT "   何かキーを押してください。":A$=INPUT$(1):END
1470   ENDIF
1480 ENDIF
1490 IF ERL=1140 THEN
1500   IF ERR=64 THEN KILL THISFILENAME$:RESUME
1510   IF ERR=55 OR ERR=72 THEN WRM=1:GOSUB*PERR:PRINT "THISFILENAME$ が異常です。":RESUME NEXT
1520   IF ERR=73 THEN WRM=1:GOSUB*PERR:PRINT "書き込みを失敗しました。":RESUME NEXT
1530   IF ERR=75 THEN WRM=1:GOSUB*PERR:PRINT "レジューム機能が働きませんでした。":RESUME NEXT
1540 ENDIF
1550 PRINT ERR,ERL:ERROR ERR
1560 END
1570 *PERR
1580 IF WRM=0 THEN COLOR 2:PRINT "エラー "; ELSE COLOR 5:PRINT "警告 ";
1590 COLOR 7
1600 RETURN
1610 '
1620 *中断
1630 PRINT :PRINT "止めますか（Ｙ／Ｎ）":C$=INPUT$(1)
1640 IF C$="Y" OR C$="y" THEN END
1650 RETURN
