1 ! PILGEN VERSION 1 EDIT 2 4/ 8/75 2 ! W$=RESIDENT OF THESE PROGRAMS FOR CHAINING 3 W$="" 4 IF E% THEN RETURN 100 !**************PILOT-PART 2,PILOT TO BASIC CODE GENERATION******* PILGEN 300 CHAIN W$+"PILOT" ! YOU CAN'T RUN PILGEN??!!!?? 400 E%=-1%:GOSUB 3:GOTO 1800 500 !*******************DEFINITIONS AND SUBROUTINES 600 !**********NUM$ WITHOUT SPACES********** 700 DEF FNA$(A)=MID(NUM$(A),2,LEN(NUM$(A))-2) 800 !*******SUBROUTINE FOR GENERATING BASIC CONDITIONS********** 900 X%=INSTR(1,A$,CHR$(1)):A1$=LEFT(A$,X%-1%):A$=RIGHT(A$,X%+1%) 1000 IF A1$="Y" THEN C$="IF Y1% " ELSE IF A1$="N" THEN C$="IF NOT Y1%" ELSE IF LEN(A1$)=1 THEN C$="IF "+A1$+"<>0" ELSE C$="IF "+A1$ 1100 C$=C$+" THEN " 1200 RETURN 1300 !********RETURN'S -1% IF THERE IS A CONDITION IN LINE***** 1400 DEF FNA%=(INSTR(1,A$,CHR$(1))>0) 1500 !********RETURN'S PILOT STRING****** 1600 DEF FNB$(A):IF D>26 THEN FNB$='A$('+FNA$(A)+')' ELSE FNB$=CHR$(64+A)+"$" 1700 FNEND 1800 !*********INITIALIZE PILGEN************* 1900 PRINT "PASS 2" ! BECAUSE IT IS??!!?? 2000 J$=NUM$(ASCII(SYS(CHR$(6)+CHR$(9)))/2) ! JOB NUMBER 2100 IF LEN(J$)=3 THEN J$="0"+J$ 2200 OPEN "COMP"+J$ AS FILE 1 2300 OPEN "COML"+J$ AS FILE 2 2400 Z1$=SYS(CHR$(7)):Z1$=LEFT(Z1$,INSTR(1,Z1$,"."))+"BAS" 2500 OPEN Z1$ AS FILE 3 2600 DIM #1,C$(300)=128% ! STATEMENTS OBJECTS 2700 DIM #2,A%(300),B$(300)=8,D$(300)=8 2800 D=CVT$%(D$(0)):A=A%(0):K=CVT$%(B$(0)) ! NEEDEN VALUES FROM PILOT 2900 L$=CHR$(13)+CHR$(10):L1$=CHR$(10)+CHR$(13)+CHR$(0) ! HANDY STRING 3000 !*************START OFF BASIC PROGRAM********** 3100 C$="1 ! PILOT PROGRAM TRANSLATED TO BASIC BY"+L$+"2 ! OMSI PILOT-73 AT " : C$=C$+TIME$(0)+" ON "+DATE$(0)+" (DO SOMETHING TRULY ABSURD TODAY)" : PRINT #3%, C$ ! GET CREDIT 3200 PRINT #3,"3 DIM B$(90)" 3300 ! DEFINE STRINGS SO THEY CAN APPEAR IN TEXT WHERE THEY ARE UNKNOWN 3400 C$="" ! RESET WORK STRING 3500 C$=C$+":"+FNB$(C)+'="'+D$(C)+'"' FOR C=1 TO D 3600 X=4 ! INIT. LINE COUNTER (TEMPORARY) 3700 IF LEN(C$)<250 THEN PRINT #3%,X;RIGHT(C$,2):GOTO 4000 3800 X%=INSTR(230,C$,":"):C1$=LEFT(C$,X%-1%):C$=RIGHT(C$,X%) 3900 PRINT #3%,X;RIGHT(C1$,2):X=X+1:GOTO 3700 4000 IF X>=20 THEN PRINT "STRING OVERFLOW- Warning Only":X=16 4100 !********ADD THIS FOR ALL THOSE POTENTIAL RETURNS***** 4200 C$=FNA$(X+1)+" GOSUB "+FNA$(X+3)+L$+FNA$(X+2)+" GOTO 32767 "+L$ :C$=C$+FNA$(X+3)+" ! SIMPILCITY ITSELF ":PRINT #3,C$ 4300 !*********LOOP CONTROL********************************* 4400 FOR B=1 TO A 4500 B1=B*20 4600 A$=C$(B) ! NO LINE TERMINATORS 4700 C$,C1$="":X,X1=0 ! INIT. COUNTERS 4800 IF FNA% THEN GOSUB 800 4900 !*******THIS SECTION IS DEVOTED TO LONELY LABELS****** 5000 IF A%(B)>0 THEN 5300 ! NO LONELY LABEL HERE 5100 IF B$(B)="" THEN 10300 ! JUST A NUL LINE (SOB) 5200 PRINT #3%,B1;" ! LONELY LABEL HERE ":GOTO 10300 ! EXIT 5300 !***********BRANCH CONTROL*********************** 5400 ON A%(B) GOTO 5500,5500,5500,7300,7900,7900,8500,9500,9700,9900,10100 5500 !***********'Y:','N:','T:'************************** 5600 X%=INSTR(1,A$,'"'):X1%=INSTR(1,A$,"'") 5700 IF X%<>0% AND X1%<>0% THEN 10200 !FATAL ERROR 5800 IF X% THEN Q$="'" ELSE Q$='"' ! THESE ARE THE KIND OF QUOTES ! TO USE 5900 DIM C%(128) 6000 C1$="" ! RESET JUST TO MAKE SURE 6100 CHANGE A$ TO C% 6200 FOR C%=1% TO C%(0) 6300 IF C%(C%)<>2 AND C%(C%)<>35 THEN C1$=C1$+CHR$(C%(C%)):GOTO 6700 6400 C1$=C1$+Q$ ! ADD THOSE NECESSARY QUOTES 6500 X%=1%:IF C%(C%)=2 THEN X%=X%+1% UNTIL C%(C%+X%)=2% :X1%=VAL(MID(A$,C%+1%,X%-1%)):C%=C%+X%: C1$=C1$+FNB$(X1%):C1$=C1$+Q$:GOTO 6700 6600 IF C%(C%+1%)>64 AND C%(C%+1%)<91 THEN C1$=C1$+CHR$(C%(C%+1%)): C1$=C1$+Q$:C%=C%+1% 6700 NEXT C% 6800 C$=C$+"PRINT" 6900 IF RIGHT(C1$,LEN(C1$))="+" THEN C1$=LEFT(C1$,LEN(C1$)-1): C1$=C1$+Q$+";" 7000 IF LEN(C1$)>1 THEN C$=C$+Q$+C1$ 7100 PRINT #3%,B1;C$ ! FINALLY FINISHED 7200 GOTO 10300 7300 !********************'A:' CODE GENERATION*************** 7400 Q%=1% ! MARKER VAR. THAT SAYS WE GOT HERE! 7500 IF ASCII(A$)=35 THEN C$=C$+"INPUT "+MID(A$,2,1)+":M1$=NUM$(" :C$=C$+MID(A$,2,1)+")":GOTO 7800 7600 IF ASCII(A$)=2 THEN C1$=FNB$(VAL(MID(A$,2,INSTR(2,A$,CHR$(2))-2))): C$=C$+C1$+"=FNB$("+C1$+")":GOTO 7800 7700 C$=C$+'M1$=FNB$("") 7800 PRINT #3%,B1;C$:GOTO 10300 ! EXIT 7900 !******************('J:' AND 'U:' CODE GENERATION**************** 8000 FOR C%=1% TO A: IF B$(C%)=LEFT(A$,8%) THEN 8300 8100 NEXT C% 8200 PRINT "THE LABEL '*";A$;"' IS NOT DEFINED IN STATEMENT"B :PRINT "IN THE LINE: '"; 8210 IF B$(B)<>"" THEN PRINT "*";B$(B);" "; 8220 PRINT MID("JU",A%(B)-4,1); 8223 IF INSTR(1,C$(B),CHR$(1%))>0% THEN PRINT LEFT(C$(B),1%); 8225 PRINT ": *";A$;"'" 8227 INPUT "CONTINUE (Y-N)";A$: Y0%=ASCII(A$): IF Y0%=89% OR Y0%=121% THEN Y0$=' PRINT " TYPE '+"'"+'CONT'+"' TO CONTINUE"+'": STOP' : PRINT #3%,B1;" ";Y0$+"! UNDEFINED LABEL HERE": GOTO 10300 !EXIT HERE 8230 PRINT "TRANSLATION ABORTED": KILL "COML"+J$: KILL "COMP"+J$: CHAIN W$+"PILOT" 8300 IF A%(B)=5 THEN C$=C$+" GOTO " ELSE C$=C$+" GOSUB " 8400 C$=C$+NUM$(C%*20):PRINT #3%,B1;C$:GOTO 10300 ! EXIT 8500 !*************('M:' CODE GENERATION)***************** 8600 C1$="":C%=0%:Q1%=1% ! INIT. VAR. AND SAY WE WHERE HERE (Q1%=1%) 8800 X%=INSTR(1,A$,","):IF X%=0% THEN 9100 8900 C%=C%+1%:C2$=LEFT(A$,X%-1%):A$=RIGHT(A$,X%+1%) 9000 C1$=C1$+":B$("+FNA$(C%)+')="'+C2$+'"':GOTO 8800 9100 X1%=B1:C$=C$+"X1$=FNA$ "+C1$+":Y1%=FNA("+FNA$(C%)+")" 9200 IF LEN(C$)<250 THEN PRINT #3%,X1%;C$:GOTO 10300 9300 X%=INSTR(200,C$ ,":"):C2$=LEFT(C$,X%-1%):C$=RIGHT(C$,X%+1%) 9400 PRINT #3%,X1%;C2$:X1%=X1%+1%:GOTO 9200 9500 !***********('E:' CODE GENERATION)*************************** 9600 PRINT #3%,B1;C$;" RETURN ":GOTO 10300 ! SIMPLE EH?? 9700 !******************************('R:' CODE GENERATION)******* 9800 PRINT #3%,B1;"REMARK: "A$:GOTO 10300 ! SIMPLE AGAIN!?? 9900 !***********('C:' CODE GENERATION)**************** 10000 PRINT #3%,B1;C$;A$:GOTO 10300 ! AND AGAIN SIMPLE. 10100 !*****************BIG MISTAKE HERE***************** 10200 PRINT "FATAL PILOT ERROR. COMPILATION ABORTED!!!! ":GOTO 12100 10300 NEXT B 10400 IF Q%=0% THEN 11000 10500 !*************ADD DEFINITION FOR ACCEPTING.************** 10600 C$="32000 DEF FNB$(A$):INPUT LINE M1$" 10605 C$=C$+L$+"32001 M1$=LEFT(M1$,LEN(M1$)-1):W1%=ASCII(RIGHT("+L1$ :C$=C$+"M1$,LEN(M1$))):IF W1%=10 OR W1%=13 THEN 32001" 10610 C$=C$+L$+"32002 IF M1%=0% THEN M1%=1%:"+L1$: C$=C$+"T1$=T1$+CHR$(A1%) FOR A1%=0% TO 96%": C$=C$+":T1$=T1$+CHR$(A1%) FOR A1%=65 TO 90:": C$=C$+"T1$=T1$+CHR$(A1%) FOR A1%=103 TO 127" 10620 C$=C$+L$+"32003 M1$=' '+XLATE(M1$,T1$)+' '" 10630 C$=C$+L$+"32004 IF M1$=' ' THEN FNB$=A$ ELSE FNB$=M1$" 10640 C$=C$+L$+"32005 FNEND" 10900 PRINT #3%,C$ 11000 IF Q1%=0% THEN 11300 11100 C$="32100 DEF FNA$:X1$=' '+M1$+' '"+L$+ "32110 X1%=INSTR(1%,X1$,' '): IF X1% THEN "+L1$+ "X1$=LEFT(X1$,X1%-1%)+RIGHT(X1$,X1%+1%): GOTO 32110 " 11200 C$=C$+L$+"32120 FNA$=X1$:FNEND":PRINT #3%,C$ 11210 C$="32200 DEF FNA(A):FOR X1=1 TO A"+L$ 11220 C$=C$+"32210 IF INSTR(1,X1$,B$(X1))<>0 THEN FNA=-1%:GOTO 32230"+L$ 11230 C$=C$+"32220 NEXT X1:FNA=0%"+L$ 11240 C$=C$+"32230 FNEND": PRINT #3%,C$ 11300 !**********************EXIT ROUTINE*********************** 11400 PRINT #3%,"32767 END " ! FINALLY CAN YOU BELIEVE IT? 11500 PRINT "RUN TIME WAS ";(TIME(1)-K)/10;" CPU SECONDS." 11600 CLOSE 1,2,3:KILL "COML"+J$:KILL"COMP"+J$ 11700 PRINT "EXECUTE ";:INPUT LINE B$:T%=ASCII(B$):IF T%=13 THEN PRINT "VALID RESPONSES ARE YES, NO AND EXIT ":GOTO 11700 11800 IF T%=10 OR T%=89 THEN CHAIN LEFT(Z1$,INSTR(1,Z1$,".")) 11900 IF T%=ASCII("N") THEN CHAIN W$+"PILOT" 12000 IF T%<>ASCII("E") THEN PRINT "VALID RESPONSES ARE: " "YES, NO AND EXIT ":GOTO 11700 12100 END