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);"!!燭ONVERSION 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