Date: 21 Mar 96 17:21:29 EST From: Bruce Murray <100425.3256@compuserve.com> Subject: Re: BBC Basic format converter 10 ON ERROR PRINT TAB(4,5);:REPORT:GOTO 230 20 VDU23,1,0;0;0;0; 30 : 40 CLS 50 BtoZ = TRUE 60 fin$="" 70 fout$="" 80 ok%=FALSE 90 maxlen%=12 100 PROCprompts 110 Y% = 4 : PROCmoveptr 120 : 130 REPEAT 140 K%=GET 150 IF K%=9 OR K%=13 THEN PROCmoveptr 160 IF K% > 31 AND K% < 127 THEN PROCchar 170 UNTIL K% = &0D AND fout$ <>"" 180 : 190 PROCopenfiles 200 IF ok% THEN PRINT TAB(0,6);"!! CONVERSION RUNNING":PROCconvert:PROCmsg("CONVERSION COMPLETED") 210 GOTO 40 220 230 VDU 23,1,1;0;0;0; 240 END 250 : 260 DEFPROCmoveptr 270 PRINT TAB(0,Y%);" " 280 Y% = (Y%+2)MOD6 290 IF Y%=2 THEN fin$="":PRINT TAB(22,2);SPC(maxlen%) 300 IF Y%=4 THEN fout$="":PRINT TAB(22,4);SPC(maxlen%) 310 PRINT TAB(0,Y%);"=>" 320 ENDPROC 330 : 340 DEFPROCprompts 350 PRINT TAB(4,0);"BBC TO Z80 BASIC PROGRAM CONVERTOR" 360 PRINT TAB(4,2);"INPUT FILENAME : " 370 PRINT TAB(4,4);"OUTPUT FILENAME : " 380 ENDPROC 390 : 400 DEFPROCchar 410 IF Y%=0 AND K%=32 THEN BtoZ = NOT(BtoZ) 420 IF BtoZ THEN PRINT TAB(4,0);"BBC TO Z80" ELSE PRINT TAB(4,0);"Z80 TO BBC" 430 IF Y%=2 THEN fin$=LEFT$(fin$+CHR$(K%),maxlen%):PRINT TAB(22,2);fin$ 440 IF Y%=4 THEN fout$=LEFT$(fout$+CHR$(K%),maxlen%):PRINT TAB(22,4);fout$ 450 ENDPROC 460 : 470 DEFPROCmsg(str$) 480 VDU 7 490 PRINT TAB(0,6);"!! "+str$ 500 TIME=0:REPEAT UNTIL TIME=300 510 PRINT TAB(0,6);SPC(4+LEN(str$)) 520 ENDPROC 530 : 540 DEFPROCreq(str$) 550 VDU 7 560 PRINT TAB(0,6);"!! "+str$ 570 K$=GET$:IF K$="Y" OR K$="y"THEN ok%=TRUE ELSE ok%=FALSE 580 PRINT TAB(0,6);SPC(4+LEN(str$)) 590 ENDPROC 600 : 610 DEFPROCopenfiles 611 : 620 IF fin$=fout$ THEN PROCmsg("INPUT = OUTPUT IS ILLEGAL"):ok%=FALSE:ENDPROC 621 : 630 fin% = OPENIN(fin$):IF fin%=0 THEN PROCmsg("INPUT FILE DOES NOT EXIST"):ok%=FALSE:ENDPROC 631 : 650 IF BtoZ THEN st%=BGET#fin%:IF st%<>&0D THEN PROCmsg("BAD PROGRAM"):CLOSE#fin%:ok%=FALSE:ENDPROC 651 : 661 test% = OPENIN(fout$):IF test%=0 THEN fout%=OPENOUT(fout$):ok%=TRUE:ENDPROC 662 : 680 CLOSE#test%:PROCreq("OUTPUT FILE EXISTS..OVERWRITE (Y/N)?") 681 : 690 IF ok% THEN fout%=OPENOUT(fout$) ELSE CLOSE#fin% 691 : 700 ENDPROC 710 : 720 DEFPROCconvert 730 : 750 IF NOT(BtoZ) THEN BPUT#fout%,&0D 760 : 770 REPEAT 780 : 790 A%=BGET#fin% 800 IF ((BtoZ EOR A%) AND &FF)=0 THEN PROCwriteend :UNTIL TRUE:ENDPROC 810 B%=BGET#fin% 820 C%=BGET#fin% 830 : 840 IF BtoZ THEN line_len%=C% ELSE line_len%=A% 850 : 860 BPUT#fout%,C% 870 BPUT#fout%,B% 880 BPUT#fout%,A% 890 : 900 FOR N%=1 TO line_len%-3 910 BPUT#fout%,BGET#fin% 920 NEXT N% 930 : 940 UNTIL FALSE 950 : 960 ENDPROC 970 : 980 DEFPROCwriteend 990 IF BtoZ THEN BPUT#fout%,&00:BPUT#fout%,&FF 1000 BPUT#fout%,&FF 1010 PROCclosefiles 1020 ENDPROC 1030 : 1040 DEFPROCclosefiles 1050 CLOSE#fin% 1060 CLOSE#fout% 1070 ENDPROC