10 REM *********************************************** 20 REM BBC BASIC program to NC BASIC program converter 30 REM By Bruce Murray 40 REM *********************************************** 50 REM NC100/200 Version : 21/03/96 60 REM Downloaded from Tim's Amstrad NC User's Site 70 REM http://www.ncus.org.uk 80 REM Originally from the Amstrad Notepad Users' Web 90 ON ERROR PRINT TAB(4,5);:REPORT:GOTO 300 100 VDU23,1,0;0;0;0; 110 : 120 CLS 130 BtoZ = TRUE 140 fin$="" 150 fout$="" 160 ok%=FALSE 170 maxlen%=12 180 PROCprompts 190 Y% = 4 : PROCmoveptr 200 : 210 REPEAT 220 K%=GET 230 IF K%=9 OR K%=13 THEN PROCmoveptr 240 IF K% > 31 AND K% < 127 THEN PROCchar 250 UNTIL K% = &0D AND fout$ <>"" 260 : 270 PROCopenfiles 280 PAGE IFPAGEok%PAGETHENPAGEPRINTPAGETAB(0,6);"!!CONVERSION RUNNING":PROCconvert:PROCmsg("CONVERSION COMPLETED") 290 GOTO 120 300 VDU 23,1,1;0;0;0; 310 END 320 : 330 DEFPROCmoveptr 340 PRINT TAB(0,Y%);" " 350 Y% = (Y%+2)MOD6 360 IF Y%=2 THEN fin$="":PRINT TAB(22,2);SPC(maxlen%) 370 IF Y%=4 THEN fout$="":PRINT TAB(22,4);SPC(maxlen%) 380 PRINT TAB(0,Y%);"=>" 390 ENDPROC 400 : 410 DEFPROCprompts 420 PRINT TAB(4,0);"BBC TO Z80 BASIC PROGRAM CONVERTOR" 430 PRINT TAB(4,2);"INPUT FILENAME : " 440 PRINT TAB(4,4);"OUTPUT FILENAME : " 450 ENDPROC 460 : 470 DEFPROCchar 480 IF Y%=0 AND K%=32 THEN BtoZ = NOT(BtoZ) 490 IF BtoZ THEN PRINT TAB(4,0);"BBC TO Z80" ELSE PRINT TAB(4,0);"Z80 TO BBC" 500 IF Y%=2 THEN fin$=LEFT$(fin$+CHR$(K%),maxlen%):PRINT TAB(22,2);fin$ 510 IF Y%=4 THEN fout$=LEFT$(fout$+CHR$(K%),maxlen%):PRINT TAB(22,4);fout$ 520 ENDPROC 530 : 540 DEFPROCmsg(str$) 550 VDU 7 560 PRINT TAB(0,6);"!! "+str$ 570 TIME=0:REPEAT UNTIL TIME=300 580 PRINT TAB(0,6);SPC(4+LEN(str$)) 590 ENDPROC 600 : 610 DEFPROCreq(str$) 620 VDU 7 630 PRINT TAB(0,6);"!! "+str$ 640 K$=GET$:IF K$="Y" OR K$="y"THEN ok%=TRUE ELSE ok%=FALSE 650 PRINT TAB(0,6);SPC(4+LEN(str$)) 660 ENDPROC 670 : 680 DEFPROCopenfiles 690 : 700 IF fin$=fout$ THEN PROCmsg("INPUT = OUTPUT IS ILLEGAL"):ok%=FALSE:ENDPROC 710 : 720 fin% = OPENIN(fin$):IF fin%=0 THEN PROCmsg("INPUT FILE DOES NOT EXIST"):ok%=FALSE:ENDPROC 730 : 740 IF BtoZ THEN st%=BGET#fin%:IF st%<>&0D THEN PROCmsg("BAD PROGRAM"):CLOSE#fin%:ok%=FALSE:ENDPROC 750 : 760 test% = OPENIN(fout$):IF test%=0 THEN fout%=OPENOUT(fout$):ok%=TRUE:ENDPROC 770 : 780 CLOSE#test%:PROCreq("OUTPUT FILE EXISTS..OVERWRITE (Y/N)?") 790 : 800 IF ok% THEN fout%=OPENOUT(fout$) ELSE CLOSE#fin% 810 : 820 ENDPROC 830 : 840 DEFPROCconvert 850 : 860 IF NOT(BtoZ) THEN BPUT#fout%,&0D 870 : 880 REPEAT 890 : 900 A%=BGET#fin% 910 IF ((BtoZ EOR A%) AND &FF)=0 THEN PROCwriteend :UNTIL TRUE:ENDPROC 920 B%=BGET#fin% 930 C%=BGET#fin% 940 : 950 IF BtoZ THEN line_len%=C% ELSE line_len%=A% 960 : 970 BPUT#fout%,C% 980 BPUT#fout%,B% 990 BPUT#fout%,A% 1000 : 1010 FOR N%=1 TO line_len%-3 1020 BPUT#fout%,BGET#fin% 1030 NEXT N% 1040 : 1050 UNTIL FALSE 1060 : 1070 ENDPROC 1080 : 1090 DEFPROCwriteend 1100 IF BtoZ THEN BPUT#fout%,&00:BPUT#fout%,&FF 1110 BPUT#fout%,&FF 1120 PROCclosefiles 1130 ENDPROC 1140 : 1150 DEFPROCclosefiles 1160 CLOSE#fin% 1170 CLOSE#fout% 1180 ENDPROC