0 MODE7 1 a=1 10 CLS 12 REMTRAN3 (C)NOV 1990 BY KEITH JOHNSON 20 L$="" 22 F$="" 30 DIM N(20) 40 DIM proc$(20) 44 R$="KJ" 50 tw=0 60 def=1 62 two$="" 66 c$=" " 67 d$="0" 68 h=0 70 num=0:nextline=20:M$="" :condition=0:p=0 80 REM translation prog part 2 TRAN2 88 PRINT'"TRANSLATION BBC TO GW BASIC BY K JOHNSON" 90 PRINT''"THIS PROGRAM TRAN2 PULLS IN A NAMED *SPOOL FILE READS ITS LINE NUMBERS AND WRITES TO A SECOND NAMED FILE" 100 PRINT"BEFORE IT WRITES TO THE SECOND FILE IT ALTERS COMMANDS IN BBC BASIC TO COMMANDS IN IBM GW BASIC AND FORMS A SPOOL FILE OF THE TRANSLATED PROGRAM NOTE FIRST USE DEFT1 ON THE BBC PROGRAM BEFORE USING " 110 PRINT" THIS PROGRAM" 120 PRINT"PROCEDURE-LOAD-RENUMBER-NOTE LAST LINE NUMBER-*SPOOL-LIST- *SPOOL -RUN THIS PROGRAM- *EXEC-SECOND PROG-LIST SAVE" 130 REM DATA TO COMPUTER 140 INPUT'"ENTER NAME OF FILE TO BE ALTERED "file1$ 150 INPUT'"ENTER last line number "lastnum 160 INPUT'"ENTER NAME OF FINAL TRANSLATION " file2$ 170 run=1 180 CLS 190 IF run=2 THEN tw=0:def=1:num=0:nextline=10:M$="" 200 IF run=1 THEN Y=OPENIN(file1$) 210 IF run=1 THEN X=OPENOUT(file2$) 220 PRINT'''"LAST LINE NUMBER IS ";lastnum 230 IF run=1 THEN PRINTTAB(0,11)"OUTPUT TO FILE "file2$ 240 REPEAT 250 CHST=0 260 D=BGET#Y 270 L$=L$+CHR$(D) 280 A$=L$ 290 B$=CHR$(10) 300 m=LEN(B$) 310 FOR K=1 TO LEN(L$):A=K 320 IF MID$(A$,A,m)=B$ THEN GOTO 340 330 GOTO 370 340 IF MID$(A$,A-5,4)="GOTO" THEN GOTO 370 350 IF MID$(A$,A-4,4)="GOTO" THEN GOTO 370 360 line$=LEFT$(L$,A-1):L$=MID$(L$,A+1):CHST=1:nextline=nextline+10 370 NEXT 380 IF CHST=1 THEN A$=line$ :GOSUB 450 382 IF LEN(L$)=240 THEN L$="" 390 UNTIL EOF#(Y) 400 A$=L$:line$=L$:GOSUB 450 410 CLOSE#X 420 CLOSE#Y 430 IF run=2 THEN GOTO 180 440 END 450 REM JUMPS HERE ON GOSUB 460 tline$=A$ 470 PROCmode 480 PROCmove 490 REM REPEAT UNTILS DONE ON FIRST RUN 500 PROCdraw 510 PROCdraw 520 PROCdraw 530 PROCinkey 540 PROCtab 544 PROCslash 550 PROCinput 590 PROCchain 600 PROCgets 610 PROCdeg 620 PROCdeg 630 PROCdeg 640 PROCdeg 650 PROCdeg 660 PROCdeg 670 PROCdeg 680 PROCdeg 690 PROCdeg 700 PROCdeg 710 PROCrad 720 PROCrad 730 PROCrad 740 PROCrad 750 PROCrad 760 PROCrad 770 PROCrad 780 PROCrad 790 PROCrad 800 PROCrad 810 PROCrad 820 PROCrad 830 PROCdr 833 PROCplot 835 PROCslash 840 PROCwrite 850 tw=0:REM on run 1 defprocs endprocs sorted and line nums remembered 860 RETURN 862 END 870 m=LEN(STR$(nextline)) 880 tw=0:REM comes here on run 2 to sort out procs into gosubs 890 A$=line$ 900 PROCproc 910 IF CHST=1 THEN GOTO 930 920 GOTO940 930 PROCwritetline 940 IF tw=1 THEN GOTO 960 950 PROCwrite 970 PRINTTAB(0,12)" inputting line number ";nextline 980 PRINTTAB(0,15)" outputting line number ";nextline ;TAB(33,15)"----" 990 CHST=0 1000 DEFPROCparse 1010 CHST=0 1020 FOR K=1 TO LEN(A$):A=K 1030 IF MID$(A$,A,num)=B$ THEN M$=LEFT$(A$,A-1):R$=MID$(A$,A+num):CHST=1:tw=1:K=LEN(A$) 1040 NEXT 1050 ENDPROC 1060 REM 1070 REM=****** MOVE 1080 REM 1090 DEFPROCmove 1100 B$="MOVE" 1110 num=LEN(B$) 1120 PROCparse 1130 IF CHST=1 THEN GOTO 1140 ELSE GOTO 1250 1140 CHST=0 1150 B$=",":num=1 1160 FOR K=1 TO LEN(R$):A=K 1170 IF MID$(R$,A,num)=B$ THEN X%=VAL(LEFT$(R$,A-num)):Y%=VAL(MID$(R$,A+num)):r=LEN(STR$(Y%)):remain$=MID$(R$,A+1+num+r):CHST=1 1180 NEXT 1190 REM TRAN FOR SCREEN 2 1200 LET x%=X%/2 1210 LET y%=(1024-Y%)/5.12 1220 insert$="LINE("+STR$(x%)+","+STR$(y%)+")-("+STR$(x%)+","+STR$(y%)+")" 1230 tline$=M$+insert$+remain$ 1240 A$=tline$ 1250 ENDPROC 1260 REM 1270 REM*** DRAW 1280 REM 1290 DEFPROCdraw 1300 B$="DRAW":num=LEN(B$) 1310 PROCparse 1320 IF CHST=1 THEN GOTO 1330 ELSE GOTO 1432 1330 CHST=0 1340 B$=",":num=1 1350 FOR K=1 TO LEN(R$):A=K 1360 IF MID$(R$,A,num)=B$ THEN X%=VAL(LEFT$(R$,A-num)):Y%=VAL(MID$(R$,A+num)):r=LEN(STR$(Y%)):remain$=MID$(R$,A+1+num+r):a=A:CHST=1 1370 NEXT 1380 REM TRAN FOR SCREEN 2 1390 LET x%=X%/2 1400 LET y%=(1024-Y%)/5.12 1410 insert$="LINE-("+STR$(x%)+","+STR$(y%)+")" 1412 IF X%=0 AND Y%=0 THEN insert$="LINE-("+LEFT$(R$,a-num)+","+MID$(R$,a+num):GOTO 1423 1420 tline$=M$+insert$+remain$ 1422 GOTO1430 1423 tline$=M$+insert$ 1430 A$=tline$ 1432 ENDPROC 1433 REM 1434 REM*** PLOT 1435 REM 1436 DEFPROCplot 1440 B$="PLOT":num=LEN(B$) 1450 PROCparse 1460 IF CHST=1 THEN GOTO 1470 ELSE GOTO 1562 1470 A$=M$+R$ 1471 B$="85,":num=LEN(B$) 1472 PROCparse 1473 A$=M$+R$ 1475 CHST=0 1480 B$=",":num=1 1490 FOR K=1 TO LEN(R$):A=K 1500 IF MID$(R$,A,num)=B$ THEN X%=VAL(LEFT$(R$,A-num)):Y%=VAL(MID$(R$,A+num)):r=LEN(STR$(Y%)):remain$=MID$(R$,A+num+r):CHST=1 1510 NEXT 1520 REM TRAN FOR SCREEN 2 1530 LET x%=X%/2 1540 LET y%=(1024-Y%)/5.12 1550 insert$="LINE-("+STR$(x%)+","+STR$(y%)+")" 1560 tline$=M$+insert$ 1561 A$=tline$ 1562 ENDPROC 1570 REM** MODE 1580 REM 1600 DEFPROCmode 1610 B$="MODE" 1620 num=LEN(B$) 1630 PROCparse 1640 IF CHST=1 THEN tline$=M$+"SCREEN 2 :CLS":A$=tline$ 1650 ENDPROC 1660 DEFPROCdeg 1670 B$="DEG" 1680 num=LEN(B$) 1690 PROCparse 1700 IF CHST=1 THEN tline$=M$+"180/PI*"+R$ 1710 A$=tline$ 1720 ENDPROC 1730 DEFPROCrad 1740 B$="RAD" 1750 num=LEN(B$) 1760 PROCparse 1770 IF CHST=1 THEN tline$=M$+"PI/180*"+R$ 1780 A$=tline$ 1790 ENDPROC 1800 DEFPROCproc 1810 B$="PROC" 1820 num=LEN(B$) 1830 PROCparse 1840 IF CHST=1 THEN GOTO 1850 ELSE GOTO 1910 1850 FOR K=1 TO 20 1860 d%=LEN(proc$(K))-LEN(R$) 1870 IF d%<0 THEN R$=LEFT$(R$,LEN(R$)+d%) 1880 IF d%>=0 THEN proc$(K)=LEFT$(proc$(K),LEN(proc$(K))-d%) 1890 IF proc$(K)=R$ THEN tline$=M$+"GOSUB"+STR$(N(K)) :K=21 1900 NEXT 1910 ENDPROC 1920 DEFPROCwrite 1930 A$=tline$ 1940 PRINTTAB(0,18)" " 1944 *FX15,0 1950 PRINTTAB(0,18)A$ 1960 BPUT#X ,&0D 1970 FOR K=1 TO LEN(A$):A=K 1980 BPUT#X ,ASC(MID$(A$,A,1)) 1990 NEXT 2000 ENDPROC 2010 DEFPROCwritetline 2020 tw=1 2030 A$=tline$ 2040 PRINTTAB(0,18)" " 2050 PRINTTAB(0,18)tline$ 2060 BPUT#X ,&0D 2070 FOR K=1 TO LEN(A$):A=K 2080 BPUT#X ,ASC(MID$(A$,A,1)) 2090 NEXT 2100 ENDPROC 2110 DEFPROCrepeat 2120 B$="REPEAT" 2130 num=LEN(B$) 2140 PROCparse 2150 IF CHST=1 THEN rline$=M$ :tline$=M$+"REM REPEAT" 2160 ENDPROC 2170 REM 2180 REM*** *DR.2 2190 REM 2200 DEFPROCdr 2210 B$="*DR.2" 2220 num=LEN(B$) 2230 CHST=0 2240 num=LEN(B$) 2250 PROCparse 2260 IF CHST=1 THEN tline$=CHR$(10) 2270 ENDPROC 2280 DEFPROCnrt 2290 IF CHST=1 THEN B$=CHR$(10):num=LEN(B$) 2300 PROCparse 2310 IF CHST=1 THEN A$=M$ 2320 ENDPROC 2330 DEFPROCgets 2340 B$="GET$" 2350 num=LEN(B$) 2360 A$=tline$ 2370 PROCparse 2380 IF CHST=1 THEN M$=(LEFT$(M$,LEN(M$)-3)):tline$=M$+"INPUT A$"+R$ 2390 ENDPROC 2400 REM 2410 REM INKEY 2420 REM 2430 DEFPROCinkey 2440 B$="INKEY" 2450 num=LEN(B$) 2460 A$=tline$ 2470 PROCparse 2480 IF CHST=1 THEN m$=M$ :r$=R$ :GOTO 2500 2490 GOTO 2630 2500 B$="(" 2510 num=LEN(B$) 2520 A$=r$ 2530 PROCparse 2540 IF CHST=1 THEN t$=R$:GOTO 2560 2550 GOTO 2630 2560 A$=R$ 2570 B$=")":num=1 2580 PROCparse 2590 IF CHST=1 THEN V=VAL(M$) :e$=R$:GOTO 2600 ELSE GOTO 2620 2600 PROCchange 2610 tline$=m$+" ASC(A$)="+STR$(asc)+e$ 2620 A$=tline$ 2630 ENDPROC 2640 DEFPROCchange 2650 IF V=-49 THEN asc=49 2660 IF V=-50 THEN asc=50 2670 IF V=-18 THEN asc=51 2680 IF V=-19 THEN asc=52 2690 IF V=-20 THEN asc=53 2700 IF V=-53 THEN asc=54 2710 IF V=-37 THEN asc=55 2720 IF V=-22 THEN asc=56 2730 IF V=-39 THEN asc=57 2740 IF V=-66 THEN asc=65 2750 IF V=-101 THEN asc=66 2760 IF V=-83 THEN asc=67 2770 IF V=-51 THEN asc=68 2780 IF V=-35 THEN asc=69 2790 IF V=-68 THEN asc=70 2800 IF V=-84 THEN asc=71 2810 IF V=-85 THEN asc=72 2820 IF V=-38 THEN asc=73 2830 IF V=-70 THEN asc=74 2840 IF V=-71 THEN asc=75 2850 IF V=-87 THEN asc=76 2860 IF V=-102 THEN asc=77 2870 IF V=-86 THEN asc=78 2880 IF V=-56 THEN asc=80 2890 IF V=-17 THEN asc=81 2900 IF V=-99 THEN asc=32 2901 IF V=-100 THEN asc=86 2902 IF V=-54 THEN asc=85 2903 IF V=-55 THEN asc=79 2904 IF V=-52 THEN asc=82 2906 IF V=-82 THEN asc=83 2907 IF V=-36 THEN asc=84 2908 IF V=-34 THEN asc=87 2909 IF V=-67 THEN asc=88 2910 IF V=-69 THEN asc=89 2911 IF V=-98 THEN asc=90 2912 IF V=-40 THEN asc=48 2913 ENDPROC 2920 REM 2930 REM***** CHAIN 2940 REM 2950 DEFPROCchain 2960 ch=0 2970 ch=ch+1 2980 IF ch=1 THEN B$="CHAIN" ELSE B$="CH." 2990 num=LEN(B$) 3000 A$=tline$ 3010 PROCparse 3020 IF CHST=1 THEN m$=M$+"LOAD"+CHR$(34):r$=R$:GOTO 3040 3030 GOTO 3110 3040 A$=r$ 3050 B$=CHR$(34):num=1 3060 PROCparse 3061 IF CHST=1 THEN A$=M$+R$ 3062 B$=CHR$(34):num=1 3064 PROCparse 3070 IF CHST=1 THEN prog$=M$ 3080 IF CHST=1 THEN tline$=m$+prog$+CHR$(34)+",R"+R$ 3090 IF ch=1 THEN GOTO 2970 3100 A$=tline$ 3110 ENDPROC 3111 REM 3112 REM** TAB 3113 REM 3120 DEFPROCtab 3122 m$="":r$="" 3130 B$="TAB(" 3140 num=LEN(B$) 3150 PROCparse 3160 IF CHST=1 THEN m$=M$:r$=R$:GOTO 3180 3170 GOTO 3380 3180 A$=r$ 3190 yy=VAL(r$) 3200 A$=r$ 3202 B$="," 3203 num=LEN(B$) 3210 PROCparse 3220 IF CHST=1 THEN two$=R$ 3230 xx=VAL(two$) 3240 B$=")" 3244 A$=two$ 3245 num=LEN(B$) 3250 PROCparse 3260 IF CHST=1 THEN last$=R$ :i$=M$ 3302 A$=m$ 3303 B$="PRINT" 3304 num=LEN(B$) 3305 PROCparse 3306 IF CHST=1 THEN m$=M$ 3350 PROCswop 3360 IF STR$(xx)=i$ THEN one$=m$+"LOCATE "+d$+","+STR$(yy)+":PRINT" 3362 IF STR$(xx)<>i$ THEN one$=m$+"LOCATE "+i$+","+STR$(yy)+":PRINT" 3370 tline$=one$+last$ 3375 A$=tline$ 3380 ENDPROC 3390 DEFPROCswop 3400 h%=xx 3410 IF h%>=18 THEN h=18+(32-h%)*0.5 3412 IF h%<18 THEN h=h% 3420 d%=h 3430 d$=STR$(d%) 3440 ENDPROC 3444 REM 3445 REM* GETS 3446 REM 3450 DEFPROCget 3460 B$="GET$" 3470 num=LEN(B$) 3480 PROCparse 3490 IF CHST=1 THEN M$=LEFT$(M$,(LEN(M$)-3)):tline$=M$+R$:A$=tline$ 3500 ENDPROC 3600 REM 3610 REM *** ' *** 3620 REM 3630 DEFPROCslash 3640 B$="'" 3650 num=1 3660 PROCparse 3670 IF CHST=1 THEN A$=M$+R$ 3680 tline$=A$ 3690 ENDPROC 3700 REM 3710 REM INPUT 3720 REM 3730 DEFPROCinput 3740 B$="INPUT" 3744 CHST=0 3750 num=LEN(B$) 3760 PROCparse 3770 IF CHST=0 THEN 3840 3771 IF CHST=1 THEN F$=M$ 3772 IF MID$(R$,1,1)=CHR$(34) THEN A$=MID$(R$,2) ELSE GOTO 3840 3780 B$=CHR$(34) 3790 num=LEN(B$) 3800 PROCparse 3810 IF CHST=1 THEN in$=M$ 3820 tline$=F$+"INPUT"+CHR$(34)+in$+CHR$(34)+";"+R$ 3830 A$=tline$ 3840 ENDPROC