REM --- PC - UEBERSETZER --- LOETHE PHE REM VERSION MIT KONTEXT VOM 15.6.78 REM === VEREINBARUNGEN === DIM X$(34,12),Y$(13,8) DIM Z$(72),S$(72) DIM T$(2),U$(1),R0$(1),P1$(1) DIM S0$(72),K3$(10,16) DIM L1$(30,8),L2(30),L5$(40,8),L6(40) DIM V$(50,72),N$(20) DIM C$(34),C0$(1) DIM B$(1),P0$(1) DIM M$(18,34) DIM P$(250,72) REM === SCHLUESSELWOERTER === DATA "AUS","BEGINN","BIS","BEI","DANN","ENDE","FUEHRE","FUEHR","FUER" DATA "FALLS","GLEICH","MACHE","MACH","SONST","SOLANGE","SCHRITTWEITE" DATA "SCHRITT","VON","WENN","WIEDERHOLE","WIEDERHOL" DATA "DIM","DRUCKE","DRUCK","DATEN","ED","FUNKTION$","FUNKTION" DATA "LIES","OEFFNE","SCHREIBE","SCHREIB","SCHLIESSE","SCHLIESS" DATA "DIM","PRINT#4:","PRINT#4:","DATA","END","","","INPUT","FILE" DATA "PRINT","PRINT","CLOSE","CLOSE" C$="EGDLFBHHKNOIICJLLKQMM[AAZZ$ BCAAZZ" M$(0) = " ADA9 A " M$(1) = "E EGCGEGEG B1B2 B B B4B B " M$(2) = "BGCGBGBGCG " M$(3) = "EGEGEGEGEG B1B2 B B B4B B " M$(4) = "G G G G G " M$(5) = "BGBGBGBGBG " M$(6) = "EGEGEGEGEG B1B2 B B B4B B " M$(7) = "E EG B1B2 B B B4B B " M$(8) = "E EG B1B2 B B B4B B " M$(9) = "EGEGEGEGEG B1 B B B4B B " M$(10)= " 5 8 " M$(11)= " 6 0 " M$(12)= " FDF9 " M$(13)= "E EG B1 B B B4B B " M$(14)= " 7 " M$(15)= " H " M$(16)= "CGCG B1B2 B B B4B B " M$(17)= " 3 " DIM R$(40) R$="AAAFAAAIBCBFBBBJBBBDBBBBBBBFEBBBKBCFBGHB" REM === INITIALISIERUNGEN === P$(1)="DEFFNZ(X,Y)=X-Y*INT(X/Y)" N=2 F=64 V=-1 REM === KONTEXT === PRINT "KONTEXT: "; INPUT N$ IF N$<>"" GOTO 9000 700 REM === PROGRAMMNAME === PRINT "PROGRAMM: "; INPUT N$ IF POS(N$,":",1)<>0 GOTO 740 N$="SYS:"&N$ 740 IF POS(N$,".",1)<>0 GOTO 760 N$=N$&".PC" 760 FILE#2:N$ REM === INITIALISIERUNGEN === FOR B0=1 TO 34 READ X$(B0) NEXT B0 FOR B0=1 TO 13 READ Y$(B0) NEXT B0 C2=1 C1=1 P0$="A" C0$="Z" K0=0 A0=-1 L3=-1 L7=-1 P3=0 900 REM === EINGABE === INPUT#2:Z$ IF END#2 GOTO 80300 PRINT Z$ REM === ZEICHENWEISE ANALYSE === Z=0 Z0=LEN(Z$) IF P3=1 GOTO 3000 1030 Z=Z+1 1040 IF Z>Z0 GOTO 900 B$=SEG$(Z$,Z,Z) REM --- EINZELZEICHEN --- IF B$="[" GOTO 3000 IF B$="""" GOTO 2000 IF B$=" " GOTO 1030 IF B$=":" GOTO 1800 IF B$="=" GOTO 1900 IF B$=";" GOTO 1570 REM --- FUNKTIONSDEF. --- IF C0$>="A" GOTO 1300 IF P0$>"A" GOTO 90200 IF B$<> "(" GOTO 1300 GOTO 12100 1300 REM --- SCHLUESSELWOERTER --- IF B$>"Z" GOTO 1460 IF B$<"A" GOTO 1460 B1=POS("AB DEF GM S VW ",B$,1) IF B1=0 GOTO 1400 B2=POS("A BDE FG M SV W",B$,1) FOR B0=B1 TO B2 IF POS(Z$,X$(B0),Z)=Z GOTO 1600 NEXT B0 1400 B1=POS("D EF LOS ",B$,1)+21 IF B1=0 GOTO 1500 B2=POS(" DE FLO S",B$,1)+21 FOR B0=B1 TO B2 IF POS(Z$,X$(B0),Z)=Z GOTO 1700 NEXT B0 1460 IF C0$="A" GOTO 2600 1500 REM --- ERSETZUNGEN --- IF V>=0 GOTO 9500 1530 REM --- UEBERTRAGEN EINES ZEICHENS --- S$=S$&B$ GOTO 1030 1570 C2=1 Z=Z+1 GOTO 4900 1600 REM --- VERARBEITEN DER SCHLUESSELWORTER --- C2=ASC(SEG$(C$,B0,B0))-64 Z=Z+LEN(X$(B0)) GOTO 4900 1700 C0$=SEG$(C$,B0,B0) Z=Z+LEN(X$(B0)) S$=S$&Y$(B0-21) GOTO 1040 1800 REM --- DOPPELPUNKT --- IF POS(Z$,":=",Z)=Z GOTO 1840 IF C0$<"D" GOTO 1530 IF K(K0)<>7 GOTO 80100 C2=16 Z=Z+1 GOTO 4900 1840 IF C1=10 GOTO 90000 IF C1=4 GOTO 90000 IF C1=17 GOTO 90000 S$=S$&"=" Z=Z+2 GOTO 1040 1900 IF C1=10 GOTO 1530 IF C1=4 GOTO 1530 IF C1=17 GOTO 1530 IF C0$="[" GOTO 1530 IF C0$<"A" GOTO 1530 GOTO 90000 2000 REM --- ZEICHENKETTEN --- IF C0$="A" GOTO 2500 IF Z=Z0 GOTO 90000 2020 Z1=POS(Z$,"""",Z+1) IF Z1=0 GOTO 90000 S$=S$&SEG$(Z$,Z,Z1) Z=Z1+1 GOTO 1040 2500 REM --- TRENNER IM PRINT --- IF S$="PRINT" GOTO 2020 IF POS(":;,""&",SEG$(S$,LEN(S$),LEN(S$)),1)<>0 GOTO 2020 S$=S$&";" GOTO 2020 2600 IF B$<>"!" GOTO 2630 S$=S$&";" GOTO 1030 2630 IF B$="," GOTO 1500 IF SEG$(S$,LEN(S$),LEN(S$))<>"""" GOTO 1500 IF B$="&" GOTO 1500 S$=S$&";" GOTO 1500 3000 REM --- KOMMENTAR --- P3=1 Z1=POS(Z$,"]",Z+1) IF Z1=0 GOTO 900 Z=Z1+1 P3=0 GOTO 1040 4900 REM === ENTSCHEIDUNGEN NACH STRUKTUR === T$=SEG$(M$(C1),2*C2-1,2*C2) IF T$=" " GOTO 90000 5000 REM --- RUECKSPRUNG FUER ENTSCHEIDUNGEN --- IF T$="" GOTO 5500 U$=SEG$(T$,1,1) IF U$=" " GOTO 5500 T$=SEG$(T$,2,2) IF U$>="0" GOTO 5047 5047 IF U$<="9" GOTO 5200 IF U$="A" GOTO 23100 IF U$="B" GOTO 7010 IF U$="C" GOTO 7100 IF U$="D" GOTO 23300 IF U$="E" GOTO 10000 IF U$="F" GOTO 23200 IF U$="G" GOTO 6100 IF U$="H" GOTO 24100 STOP 5200 REM --- ANFANGS ELEMENTE K0=K0+1 IF K0>20 GOTO 90100 K(K0)=VAL(U$) IF U$="0" GOTO 25000 IF U$<"3" GOTO 13000 IF U$="3" GOTO 20000 IF U$="4" GOTO 22000 IF U$="7" GOTO 24000 IF U$="6" GOTO 23000 IF C1=10 GOTO 21000 K0=K0-1 K(K0)=VAL(U$) GOTO 23300 5500 C1=C2 GOTO 1040 6000 REM === ENTSCHEIDUNGEN NACH KELLER === K0=K0-1 IF K(K0+1)=0 GOTO 5000 IF K(K0+1)=5 GOTO 5000 IF K(K0+1)=6 GOTO 5000 6100 IF K0=0 GOTO 5000 IF K0<0 GOTO 90120 IF K(K0)=8 GOTO 21100 IF K(K0)=9 GOTO 23400 IF K(K0)=10 GOTO 20100 IF K(K0)=11 GOTO 22200 R0$=SEG$(R$,(C2-1)*8+K(K0)+1,(C2-1)*8+K(K0)+1) IF R0$="A" GOTO 5000 IF R0$="B" GOTO 90000 IF R0$="C" GOTO 13500 IF R0$="F" GOTO 20100 IF R0$="G" GOTO 21100 IF R0$="H" GOTO 23400 IF R0$="I" GOTO 24300 IF R0$="J" GOTO 24400 IF R0$="K" GOTO 25200 K(K0)=K(K0)+7 IF R0$="D" GOTO 20200 IF R0$="E" GOTO 5000 STOP REM === KLEINE AKTIONEN === 7010 REM --- FEHLER,FALLS S$ NICHT LEER IF S$<>"" GOTO 90000 GOTO 5000 7100 REM --- UEBERLESEN, FALLS S$ LEER --- IF S$="" GOTO 5000 GOTO 10000 9000 REM === KONTEXT === FILE#2:N$&".KO" 9020 INPUT#2:Z$ IF END#2 GOTO 9400 P0=POS(Z$,"==",1) IF P0=0 GOTO 9100 9060 V=V+1 IF V>50 GOTO 90100 V$(V)=Z$ GOTO 9020 9100 IF POS(Z$,"FUNKTION$",1)=1 GOTO 9200 IF POS(Z$,"FUNKTION",1)=1 GOTO 9220 P$(N)=Z$ N=N+1 GOTO 9020 9200 P1$="$" D6=POS(Z$,":",1) IF D6=0 GOTO 9230 Z$=SEG$(Z$,1,D6-1)&","&SEG$(Z$,D6+1,LEN(Z$)) GOTO 9230 9220 P1$="" 9230 Z$=SEG$(Z$,POS(Z$," ",1)+1,LEN(Z$)) F=F+1 IF F>89 GOTO 90100 P$(N)="DEFFN"&CHR$(F)&P1$&SEG$(Z$,POS(Z$,"(",1),LEN(Z$)) N=N+1 Z$=SEG$(Z$,1,POS(Z$,"(",1))&"=="&"FN"&CHR$(F)&P1$&"(" GOTO 9060 9400 CLOSE#2 GOTO 700 9500 REM === ERSETZUNGEN === FOR V0=0 TO V P0=POS(V$(V0),"==",1) IF POS(Z$,SEG$(V$(V0),1,P0-1),Z)<>Z GOTO 9570 S$=S$&SEG$(V$(V0),P0+2,LEN(V$(V0))) Z=Z+P0-1 GOTO 1040 9570 NEXT V0 GOTO 1530 10000 REM === EINFACHE ANWEISUNG === IF S$="" GOTO 90000 IF P0$<>"A" GOTO 10018 IF C0$="[" GOTO 10900 IF C0$<"A" GOTO 10900 GOTO 90200 10018 IF C0$<"A" GOTO 90200 IF C0$="[" GOTO 90200 IF SEG$(S$,1,1)="@"GOTO 80200 IF C0$="B" GOTO 10300 IF POS(S$,"GEHNACH",1)=0 GOTO 10080 S$=SEG$(S$,8,15) GOTO 80270 10080 IF POS(S$,"GEHENACH",1)=0 GOTO 10900 S$=SEG$(S$,9,16) GOTO 80270 10300 REM --- LIES --- IF POS(S$,"ANFANG#:",6)=6 GOTO 10500 IF POS(S$,"ANFANG#",6)=6 GOTO 10400 IF POS(S$,"#:",6)=6 GOTO 10600 GOTO 10900 10400 P$(N)="RESTORE"&SEG$(S$,12,POS(S$,":",13)-1) N=N+1 S$=SEG$(S$,1,5)&SEG$(S$,12,LEN(S$)) GOTO 10900 10500 P$(N)="RESTORE" N=N+1 S$="READ"&SEG$(S$,14,LEN(S$)) GOTO 10900 10600 S$="READ"&SEG$(S$,8,LEN(S$)) GOTO 10900 10700 REM --- MOD,DIV --- S0$=SEG$(S$,P4+1,LEN(S$)) P5=POS(S0$,"MOD",1) IF P5<>0 GOTO 10770 P5=POS(S0$,"DIV",1) IF P5=0 GOTO 10904 S$=SEG$(S$,1,P4)&"INT(" S$=S$&SEG$(S0$,1,P5-1)&"/"&SEG$(S0$,P5+3,LEN(S0$))&")" GOTO 10904 10770 S$=SEG$(S$,1,P4)&"FNZ(" S$=S$&SEG$(S0$,1,P5-1)&","&SEG$(S0$,P5+3,LEN(S0$))&")" GOTO 10904 10900 REM --- ANWEISUNG --- P4=POS(S$,"=",1) IF P4<>0 GOTO 10700 10904 P$(N)=S$ C0$="Z" S$="" N=N+1 GOTO 5000 11000 REM === LOGISCHE AUSDRUECKE === IF S$="" GOTO 90000 REM --- NICHT AUSDRUCK --- P5=POS(S$,"NICHT",1) IF P5=0 GOTO 11200 P$(N)="IF"&SEG$(S$,P5+5,LEN(S$))&"GOTO"&STR$(N+2) P$(N+1)="GOTO"&STR$(N+3) N=N+2 S$="" RETURN 11200 REM --- UND AUSDRUCK --- P5=POS(S$,"UND",1) IF P5=0 GOTO 11300 P$(N)="IF"&SEG$(S$,1,P5-1)&"GOTO"&STR$(N+2) P$(N+1)="GOTO"&STR$(N+3) P$(N+2)="IF"&SEG$(S$,P5+3,LEN(S$))&"GOTO"&STR$(N+4) N=N+3 S$="" RETURN 11300 REM --- ODER AUSDRUCK --- P5=POS(S$,"ODER",1) IF P5=0 GOTO 11500 P$(N)="IF"&SEG$(S$,1,P5-1)&"GOTO"&STR$(N+3) P$(N+1)="IF"&SEG$(S$,P5+4,LEN(S$))&"GOTO"&STR$(N+3) N=N+2 S$="" RETURN 11400 REM --- VERGLEICHSAUSDRUCK --- P$(N)="IF"&S$&"GOTO"&STR$(N+2) N=N+1 S$="" RETURN 11500 REM --- TEILT --- P5=POS(S$,"TEILT",1) IF P5=0 GOTO 11400 S$="FNZ("&SEG$(S$,P5+5,LEN(S$))&","&SEG$(S$,1,P5-1)&")=0" GOTO 11400 REM === FUNKTIONEN === 12100 REM --- DEF FUNKTION --- F=F+1 IF F>89 GOTO 90100 V=V+1 IF V>50 GOTO 90100 V$(V)=S$&"(==FN"&CHR$(F)&C0$&"(" S$="DEFFN"&CHR$(F)&C0$&"(" C0$="[" GOTO 1030 13000 REM === BEGINN === IF P0$<>"A" GOTO 5000 P0$="B" N=N+1 GOTO 5000 13500 REM --- ENDE --- K0=K0-1 IF K0>0 GOTO 5000 IF P0$="B" GOTO 13640 P$(N)="RETURN" N=N+1 GOTO 5000 13640 P$(N)="STOP" N=N+1 P0$="C" GOTO 5000 20000 REM === IF ANFANG === GOSUB 11000 K1(K0)=N N=N+1 GOTO 5000 20100 REM --- IF-THEN ENDE --- P$(K1(K0))="GOTO"&STR$(N) GOTO 6000 20200 REM --- ELSE ANFANG --- P$(K1(K0))="GOTO"&STR$(N+1) K1(K0)=N N=N+1 GOTO 5000 21000 REM === WHILE ANFANG === K2(K0)=N GOSUB 11000 K1(K0)=N N=N+1 GOTO 5000 21100 REM --- WHILE ENDE --- P$(N)="GOTO"&STR$(K2(K0)) N=N+1 P$(K1(K0))="GOTO"&STR$(N) GOTO 6000 22000 REM --- REPEAT ANFANG === K1(K0)=N GOTO 5000 22200 REM --- REPEAT ENDE --- GOSUB 11000 P$(N)="GOTO"&STR$(K1(K0)) N=N+1 GOTO 6000 23000 REM === FOR ANFANG === P5=POS(S$,"=",1) IF P5<=1 GOTO 90000 K3$(K0)=SEG$(S$,1,P5-1) P$(N)="FOR"&S$ S$="" C1=0 GOTO 1040 23100 REM --- FOR-TO --- P$(N)=P$(N)&"TO"&S$ S$="" GOTO 5000 23200 REM --- FOR-TO-STEP --- P$(N)=P$(N)&"STEP"&S$ S$="" GOTO 5000 23300 REM --- FOR-DO --- N=N+1 GOTO 5000 23400 REM --- NEXT --- P$(N)="NEXT"&K3$(K0) N=N+1 K3$(K0)="" GOTO 6000 24000 REM === CASE ANFANG === P$(N)="GOTO"&STR$(N+2) K1(K0)=N+1 N=N+2 K3$(K0)=S$&"=" S$="" GOTO 5000 24100 REM --- CASE LABEL --- N0=1 P5=0 24103 P5=POS(S$,",",P5+1) IF P5=0 GOTO 24107 N0=N0+1 GOTO 24103 24107 N0=N0+N+1 K2(K0)=N0-1 24110 P5=POS(S$,",",1) IF P5=0 GOTO 24180 P$(N)="IF"&K3$(K0)&SEG$(S$,1,P5-1)&"GOTO"&STR$(N0) N=N+1 S$=SEG$(S$,P5+1,LEN(S$)) GOTO 24110 24180 P$(N)="IF"&K3$(K0)&S$&"GOTO"&STR$(N0) N=N+2 S$="" GOTO 5000 24300 REM --- CASE FALL ENDE --- P$(N)="GOTO"&STR$(K1(K0)) N=N+1 P$(K2(K0))="GOTO"&STR$(N) C1=15 GOTO 1040 24400 REM --- CASE ENDE --- P$(K1(K0))="GOTO"&STR$(N) P$(K2(K0))="GOTO"&STR$(N) K0=K0-1 GOTO 5000 25000 REM === DATEI ANFANG === REM --- DATEI ANFANG P$(N)="DIMZ$(72)" P$(N+1)="FILE#3:"&SEG$(S$,6,LEN(S$)) P$(N+2)="INPUT#3:Z$" K2(K0)=N+2 K1(K0)=N+3 N=N+4 S$="" GOTO 5000 25200 REM --- DATEI ENDE --- P$(N)="GOTO"&STR$(K2(K0)) N=N+1 P$(K1(K0))="IFEND#3GOTO"&STR$(N) P$(N)="CLOSE#3" N=N+1 GOTO 6000 REM === MARKEN,SPRUENGE === 80100 REM --- MARKE EINTRAGEN --- S$=SEG$(S$,1,8) IF L3>=30 GOTO 90100 L3=L3+1 L1$(L3)=S$ L2(L3)=N S$="" GOTO 1030 80200 REM --- SPRUNG EINTRAGEN --- S$=SEG$(S$,1,8) 80270 REM L7=L7+1 L5$(L7)=S$ L6(L7)=N S$="" N=N+1 GOTO 5000 80300 REM --- MARKEN-SPRUNG-ZUORDNUNG --- IF S$="" GOTO 80310 P$(N)=S$ 80310 FOR L8=0 TO L7 FOR L4=0 TO L3 IF L1$(L4)<>L5$(L8) GOTO 80360 IF SEG$(L1$(L4),1,1)<>"@" GOTO 80340 P$(L6(L8))="GOSUB"&STR$(L2(L4)) GOTO 80380 80340 P$(L6(L8))="GOTO"&STR$(L2(L4)) GOTO 80380 80360 NEXT L4 IF SEG$(L5$(L8),1,1)<>"@" GOTO 80370 P$(L6(L8))="PRINT""VERFEINERUNG "";"""&L5$(L8)&"""" GOTO 80380 80370 PRINT "***FEHLER:MARKE ";L5$(L8);" FEHLT" STOP 80380 NEXT L8 P$(N)="END" GOTO 91000 90000 PRINT "***FEHLER ZWISCHEN DEN SCHLUESSELWOERTERN" PRINT " MIT CODE C1=";C1;"UND C2=";C2 STOP 90100 PRINT "---SYSTEMGRENZE:C1=";C1;"C2=";C2;"K(K0)=";K(K0) PRINT " L3=";L3;"L7=";L7;"F=";F STOP 90120 PRINT "***FEHLER IN DER SCHACHTELUNG:K(K0)=";K(K0);"C2=";C2 STOP 90200 PRINT "***FEHLER IM PROGRAMMAUFBAU" STOP 91000 CLOSE#2 FILEV#2:SEG$(N$,1,POS(N$,".",1))&"BA" FOR I=1 TO N PRINT#2:STR$(I)&P$(I) NEXT I CLOSE#2 99999 END