File PCD.BA (BASIC source file)

Directory of image this file is from
This file as a plain text file

   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



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search