File PCTEST.BA (BASIC source file)

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

5 REM --- PC - UEBERSETZER --- LOETHE PHE
6 REM     VERSION MIT KONTEXT VOM 15.6.78
10 REM === SCHLUESSELWOERTER ===
20 DATA "AUS","BEGINN","BIS","BEI","DANN","ENDE","FUEHRE","FUEHR","FUER"
30 DATA "FALLS","GLEICH","MACHE","MACH","SONST","SOLANGE","SCHRITTWEITE"
40 DATA "SCHRITT","VON","WENN","WIEDERHOLE","WIEDERHOL"
50 DATA "DIM","DRUCKE","DRUCK","DATEN","ED","FUNKTION$","FUNKTION"
60 DATA "LIES","OEFFNE","SCHREIBE","SCHREIB","SCHLIESSE","SCHLIESS"
70 DATA "DIM","PRINT#4:","PRINT#4:","DATA","END","","","INPUT","FILE"
80 DATA "PRINT","PRINT","CLOSE","CLOSE"
90 C$="EGDLFBHHKNOIICJLLKQMM[AAZZ$ BCAAZZ"
200 M$(0) = "              ADA9    A           "
201 M$(1) = "E EGCGEGEG  B1B2  B B   B4B     B "
202 M$(2) = "BGCGBGBGCG                        "
203 M$(3) = "EGEGEGEGEG  B1B2  B B   B4B     B "
204 M$(4) = "G G G G G                         "
205 M$(5) = "BGBGBGBGBG                        "
206 M$(6) = "EGEGEGEGEG  B1B2  B B   B4B  G        B1B2  B B   B4B       EG  B1B2  B B   B"EGEGEGEGEG  B1    B B  = "              5 8                 "
211 M$(11)= "      6       0                   "
212 M$(12)= "              FDF9                "
213 M$(13)= "E     EG    B1    B B   B4B     B "
214 M$(14)= "             215 M$(15)= "           
216 M$(16)= "CGCG      "
217 M$(17)= "          "
300 DIM R$(40)
301 R$="AAAFAAAIBCBFBBBJBBBDBBBBBBBFEBBBKBCFBGHB"
600 REM === VEREINBARUNGEN ===
610 DIM X$(34,12),Y$(13,8)
620 DIM Z$(72),S$(72)
622 DIM T$(2),U$(1),R0$(1),P1$(1)
625 DIM S0$(72),K3$(10,16)
630 DIM L1$(30,8),L2(30),L5$(40,8),L6(40)
650 DIM V$(50,72),N$(20)
655 DIM C$(34),C0$(1)
656 DIM B$(1),P0$(1)
660 DIM M$(18,34)
670 DIM P$(72)
680 REM === INITIALISIERUNGEN ===
681 FILEV#4:"SYS:PCWS.BA"
682 N=2
684 F=0
685 PRINT#4:STR$(1)&"DEFFNZ(X,Y)=X-Y*INT(X/Y)"
686 V=-1
687 REM === KONTEXT ===
688 PRINT "KONTEXT: ";
690 INPUT N$
695 IF N$<>"" GOTO 9000
700 REM === PROGRAMMNAME ===
710 PRINT "PROGRAMM: ";
711 INPUT N$
720 IF POS(N$,":",1)<>0 GOTO 740
730 N$="SYS:"&N$
740 IF POS(N$,".",1)<>0 GOTO 760
750 N$=N$&".PC"
760 FILE#2:N$
800 REM === INITIALISIERUNGEN ===
820 FOR B0=1 TO 34
821 READ X$(B0)
822 NEXT B0
830 FOR B0=1 TO 13
831 READ Y$(B0)
832 NEXT B0
870 C2=1
871 C1=1
872 P0$="A"
873 C0$="Z"
874 K0=0
882 A0=-1
8 P3=0
900 REM === EINGA920 IF END#2 GOTO 80300=== ZEICHENWEISE ANALYSELEN(Z$)
1020 IF P3=1 GOTO 3000
1030 Z=Z+1
1040 IF Z>Z0 GOTO 900
1050 B$=SEG$(Z$,Z,Z)
1100 REM --- EINZELZEICHEN ---
1110 IF B$="[" GOTO 3000
1120 IF B$="""" GOTO 2000
1130 IF B$=" " GOTO 1030
1140 IF B$=":" " GOTO 1900
1170 IF B$=--- FUNKTIONSDEF. ---
1
1215 IF P0$>"A" GOTO 9OTO 1300
1240 GOTO 12100
1300 REM --- SCHLUESSELWOERTER ---
1305 IF B$>"Z" GOTO 1460
1310 B1=POS("AB  DEF   GM S   VW  ",B$,1)
1320 IF B1=0 GOTO 1400
1330 B2=POS("A  BDE   FG M   SV  W",B$,1)
1340 FOR B0=B1 TO B2
1350 IF POS(Z$,X$(B0),Z)=Z GOTO 1600
1360 NEXT B0
1400 B1=POS("D   EF LOS   ",B$,1)+21
1410 IF B1=0 GOTO 1500
1420 B2=POS("   DE FLO   S",B$,1)+21
1430 FOR B0=B1 TO B2
1440 IF POS(Z$,X$(B0),Z)=Z GOTO 1700
1450 NEXT B0
1460 IF C0$="A" GOTO 2600
1500 REM --- ERSETZUNGEN ---
1510 IF V>=0 GOTO 9500
1530 REM --- UEBERTRAGEN EINES ZEICHENS ---
1550 S$=S$&B$
1560 GOTO 1030
1570 C2=1
1575 Z=Z+1
1580 GOTO 4900
1600 REM --- VERARBEITEN DER SCHLUESSELWORTER ---
1610 C2=ASC(SEG$(C$,B0,B0))
1620 Z=Z+LEN(X$(B0))
1630 GOTO 4900
1700 C0$=SEG$(C$,B0,B0)
1710 Z=Z+LEN(X$(B0))
1720 S$=S$&Y$(B0-21)
1730 GOTO 1040
1800 REM --- DOPPELPUNKT ---
1810 IF POS(Z$,":=",Z)=Z GOTO 1840
1820 IF C0$<"D" GOTO 1530
1830 IF K(K0)<>7 GOTO 80100
1831 C2=16
18321840 IF C1=10 GOTO 9000000
1860 IF C1=17 GOTO 980 Z=Z+2
1890 GOTO 10400
1910 IF C1=4  GOTO 1530
1920 IF C1=17 GOTO 1530
1925 IF C0$>"Z" GOTO 1530
1930 GOTO 90000
2000 REM --- ZEICHENKETTEN ---
2010 IF C0$="A" GOTO 2500
2015 IF Z=Z0 GOTO 90000
2020 Z1=POS(Z$,"""",Z+1)
2030 IF ZS$&SEG$(Z$,Z,Z1)
2050 Z500 REM --- TRENNER IM PINT" GOTO 2020
2520 IF (S$),LEN(S$)),1)<>0 GOTO 2020
2530 S$=S$&";"
2540 GOTO 2020
2600 IF B$<>"!" GOTO 2630
2610 S$=S$&";"
2620 GOTO 1030
2630 IF B$="," GOTO 1500
2640 IF SEG$(S$,LEN(S$),LEN(S$))<>"""" GOTO 1500
2645 IF B$="&" GOTO 1500
2650 S$=S$&";"
2660 GOTO 1500
3000 REM --- KOMMENTAR ---
3010 P3=1
3020 Z1=POS(Z$,"]",Z+1)
3030 IF Z1=0 GOTO 900
3040 Z=Z1+1
3045 P3=0
3060 GOTO 1040
4900 REM === ENTSCHEIDUNGEN NACH STRUKTUR ===
4910 T$=SEG$(M$(C1),2*C2-1,2*C2)
4920 IF T$="  " GOTO 90000
5000 REM --- RUECKSPRUNG FUER ENTSCHEIDUNGEN ---
5010 IF T$="" GOTO 5500
5020 U$=SEG$(T$,1,1)
5030 IF U$=" " GOTO 5500
5040 T$=SEG$(T$,2,2)
5045 IF U$>="0" GOTO 5200
5050 IF U$="A" GOTO 23100
5051 IF U$="B" GOTO 7010 
5052 IF U$="C" GOTO 7100
5060 IF U$="D" GOTO 23300
5061 IF U$="E" GOTO 10000
5062 IF U$="F" GOTO 23200
5070 IF U$="G" GOTO 6100 
5081 IF U$="H" GOTO 24100
5190 STOP
5200 REM --- ANFANGS ELEMENTE
5210 K0=K0+1
5220 IF K0>20 GOTO 90100
5230 K(K0)=VAL(U$)
5245250 IF U$<"3" GOTO 13000000
5260 IF U$="4" GOTGOTO 24000
5280 IF U$="1=10 GOTO 21000
5300 K0=K0-1
5310 K(K0)=VAL(U$)
5320 GOTO 23300
5500 C1=C2
5510 GOTO 1040
6000 REM === ENTSCHEIDUNGEN NACH KELLER ===
6010 K0=K0-1
6015 IF K(K0+1)=0 GOTO 5000
6020 IF K(K0+1)=5 GOTO 5000
6030 IF K(K0+1)=6 GOTO 5000
6100 IF K0=0 GOTO 5000
6102 IF K0<0 GOTO 90120
6110 IF K(K0)=8 GOTO 21100
6120 IF K(K0)=9 GOTO 23400
6130 IF K(K0)=10 GOTO 20100
6140 IF K(K0)=11 GOTO 22200
6200 R0$=SEG$(R$,(C2-1)*8+K(K0)+1,(C2-1)*8+K(K0)+1)
6300 IF R0$="A" GOTO 5000
6301 IF R0$="B" GOTO 90000
6302 IF R0$="C" GOTO 13500
6305 IF R0$="F" GOTO 20100
6306 IF R0$="G" GOTO 21100
6307 IF R0$="H" GOTO 23400
6308 IF R0$="I" GOTO 24300
6309 IF R0$="J" GOTO 24400
6335 IF R0$="K" GOTO 25200
6336 K(K0)=K(K0)+7
6337 IF R0$="D" GOTO 20200
6338 IF R0$="E" GOTO 5000
6340 STOP
7000 REM === KLEINE AKTIONEN ===
7010 REM --- FEHLER,FALLS S$ NICHT LEER
7020 IF S$<>"" GOTO 90000
7030 GOTO 5000
7100 REM --- UEBERLESEN, FALLS S$ LEER ---
7110 IF S$="" GOTO 5000
71=== KONTEXT === 
9010 FUT#2:Z$
9030 IF END#2 G,"==",1)
9050 IF P0=0 G70 IF V>50 GOTO 90100
9080 V$(V)=Z$
9090 GOTO 9020
9100 IF POS(Z$,"FUNKTION$",1)=1 GOTO 9200
9110 IF POS(Z$,"FUNKTION",1)=1 GOTO 9220
9120 PRINT#4:STR$(N)&Z$
9130 N=N+1
9140 GOTO 9020
9200 P1$="$"
9210 GOTO Z$=SEG$(Z$,POS(Z$," ",1)
9250 IF F>25 GOTO 90100)&P1$&SEG$(Z$,POS(Z$,"("#4:STR$(N)&P$
9265 N=N+1
9270 Z$=SEG$(Z$,1,POS(Z$,"(",1))&"=="&"FN"&CHR$(F)&P1$&"("
9280 GOTO 9060
9400 CLOSE#2
9410 GOTO 700
9500 REM === ERSETZUNGEN ===
9510 FOR V0=0 TO V
9515 P0=POS(V$(V0),"==",1)
9520 IF POS(Z$,SEG$(V$(V0),1,P0-1),Z)<>Z GOTO 9570
9530 S$=S$&SEG$(V$(V0),P0+2,LEN(V$(V0)))
9540 Z=Z+P0-1
9550 GOTO 1040
9570 NEXT V0
9580 GOTO 1530
10000 REM === EINFACHE ANWEISUNG ===
10010 IF S$="" GOTO 90000
10012 IF P0$<>"A" GOTO 10018
10014 IF C0$>"Z" GOTO 10900
10016 GOTO 90200
10018 IF C0$>"Z" GOTO 90200
10020 IF SEG$(S$,1,1)="@"GOTO 80200
10030 IF C0$="B" GOTO 10300
10070 IF POS(S$,"GEHNACH",1)=0 GOTO 10080
10071 S$=SEG$(S$,8,15)
10072 GOTO 80270
10080 IF POS(S$,"GEHENACH",1)=0 GOTO 10900
10081 S$=SEG$(S$,9,16)
10082 GOTO 80270
10300 REM --- LIES ---
10320 IF POS(S$,"ANFANG#:",6)=6 GOTO 10500
10330 IF POS(S$,"ANFANG#",6)=6 GOTO 10400
10340 IF POS(S$,"#:",6)=6 GOTO 10600
10350 GOTO 10900
10400 P$="RESTORE"&SEG$(S$,12,POS(S$,":",13)N)&P$
10410 N=N+1
1042$,12,LEN(S$))
10430 GOTTR$(N)&"RESTORE"
10505 EG$(S$,14,LEN(S$))
10520 GOTO 10900
10600 S$="READ"&SEG$(S$,8,LEN(S$))
10610 GOTO 10900
10700 REM --- MOD,DIV ---
10705 S0$=SEG$(S$,P4+1,LEN(S$))
10710 P5=POS(S0$,"MOD",1)
10720 IF P5<>0 GOTO 10770
10730 P5=PF P5=0 GOTO 10904
10750
10755 S$=S$&SEG$(S0$,1,LEN(S0$))&")"
10760 GOS$,1,P4)&"FNZ("
10775 S$=S$&SEG$(S0$,1,P5-1)&","&SEG$(S0$,P5+3,LEN(S0$))&")"
10780 GOTO 10904
10900 REM --- ANWEISUNG ---
10901 P4=POS(S$,"=",1)
10902 IF P4<>0 GOTO 10700
10904 PRINT#4:STR$(N)&S$
10905 C0$="Z"
10910 S$=""
10920 N=N+1
10930 GOTO 5000
11000 REM === LOGISCHE AUSDRUECKE ===
11010 IF S$="" GOTO 90000
11100 REM --- NICHT AUSDRUCK ---
11110 P5=POS(S$,"NICHT",1)
11111 IF P5=0 GOTO 11200
11120 P$="IF"&SEG$(S$,P5+5,LEN(S$))&"GOTO"&STR$(N+2)
11125 PRINT#4:STR$(N)&P$
11130 P$="GOTO"&STR$(N+3)
11135 PRINT#4:STR$(N+1)&P$
11140 N=N+2
11145 S$=""
11150 RETURN
11200 REM --- UND AUSDRUCK ---
11210 P5=POS(S$,"UND",1)
11211 IF P5=0 GOTO 11300
11220 P$="IF"&SEG$(S$,1,P5-1)&"GOTO"&STR$(N+2)
11225 PRINT#4:STR$(N)&P$
11230 P$="GOTO"&STR$(N+3)
11235 PRINT#4:STR$(N+1)&P$
11240 P$="IF"&SEG$(S$,P5+3,LEN(S$))&"GOTO"&STR$(N+4)
11245 PRINT#4:STR$(N+2)&P$
11250 N=N+3
11255 S$=""
11260 RETURN
11300 REM --- ODER AUSDRUCK ---
11310 P5=POS(S$,"ODER",1)0
11320 P$="IF"&SEG$(S$)
11325 PRINT#4:STR$(N)S$,P5+4,LEN(S$))&"GOTO"&:STR$(N+1)&P$
11340 N=N+2
11345 S$=""
11350 RETURN
11400 REM --- VERGLEICHSAUSDRUCK ---
11410 PRINT#4:STR$(N)&"IF"&S$&"GOTO"&STR$(N+2)
11420 N=N+1
11430 S$=""
11440 RETURN
11500 REM --- TEILT ---
11510 P5=PIF P5=0 GOTO 11400
1152,LEN(S$))&","&SEG$(S$,1,11400
12000 REM === FUN-- DEF FUNKTION ---
12110 F=F+1
12120 IF F>25 GOTO 90100
12130 V=V+1
12140 IF V>50 GOTO 90100
12150 V$(V)=S$&"(==FN"&CHR$(F)&C0$&"("
12160 S$="DEFFN"&CHR$(F)&C0$&"("
12170 C0$="["
12180 GOTO 1030
13000 REM === BEGINN ===
13010 IF P0$<>"A" GOTO 5000
13040 PRINT#4:STR$(N)&"REM FILEV#4:""LPT:"""
13050 P0$="B"
13060 N=N+1
13070 GOTO 5000
13500 REM --- ENDE ---
13510 K0=K0-1
13600 IF K0>0 GOTO 5000
13610 IF P0$="B" GOTO 13640
13620 PRINT#4:STR$(N)&"RETURN"
13625 N=N+1
13630 GOTO 5000
13640 PRINT#4:STR$(N)&"REM CLOSE#4"&CHR$(28)&"STOP"
13650 N=N+1
13660 P0$="C"
13670 GOTO 5000
20000 REM === IF ANFANG ===
20030 GOSUB 11000
20040 K1(K0)=N
20041 N=N+1
20050 GOTO 5000
20100 REM --- IF-THEN ENDE ---
20120 PRINT#4:STR$(K1(K0))&"GOTO"&STR$(N)
20130 GOTO 6000
20200 REM --- ELSE ANFANG ---
20210 PRINT#4:STR$(K1(K0))&"GOTO"&STR$(N+1)
20230 K1(K0)=N
20231 N=N+1
20240 GOTO 5000
21000 REM === WHILE ANFANG ===
21030 K2(K0)=N
21040 GOSUB 11000
2105021060 GOTO 5000
21100 R1120 PRINT#4:STR$(N)&"GON=N+1
21150 PRINT#4:STR
21160 GOTO 6000
22000 REM --- REPEAT ANFANG ===
22030 K1(K0)=N
22040 GOTO 5000
22200 REM --- REPEAT ENDE ---
22210 GOSUB 11000
22230 PRINT#4:STR$(N)&"GOTO"&STR$(K1(K0))
22240 N=N+1
22250 GOTO 6000
23000 REM === FOR ANFANG ===
23030 P5=POS(S$,"=",1)
23040 IF P5<=1 GOTO 90000
23050 K3$(K0)=SEG$(S$,1,P5-1)
23060 P$="FOR"&S$
23070 S$=""
23080 C1=0
23090 GOTO 1040
23100 REM --- FOR-TO ---
23110 P$=P$&"TO"&S$
23120 S$=""
23130 GOTO 5000
23200 REM --- FOR-TO-STEP ---
23210 P$=P$&"STEP"&S$
23215 S$=""
23220 GOTO 5000
23300 REM --- FOR-DO ---
23310 PRINT#4:STR$(N)&P$
23320 N=N+1
23330 GOTO 5000
23400 REM --- NEXT ---
23420 PRINT#4:STR$(N)&"NEXT"&K3$(K0)
23425 N=N+1
23430 K3$(K0)=""
23440 GOTO 6000
24000 REM === CASE ANFANG ===
24030 PRINT#4:STR$(N)&"GOTO"&STR$(N+2)
24040 K1(K0)=N+1
24050 N=N+2
24060 K3$(K0)=S$&"="
24070 S$=""
24090 GOTO 5000
24100 REM --- CASE LABEL ---
24101 N0=1
24102 P5=0
24103 P5=POS(S$,",",P5+1)
24104 IF P5=0 G
24106 GOTO 24103
2410)=N0-1
24110 P5=POS(S$,TO 24180
24130 PRINT#4:$(S$,1,P5-1)&"GOTO"&STR$(N0)
24150 N=N+1
24160 S$=SEG$(S$,P5+1,LEN(S$))
24170 GOTO 24110
24180 PRINT#4:STR$(N)&"IF"&K3$(K0)&S$&"GOTO"&STR$(N0)
24200 N=N+2
24205 S$=""
24210 GOTO 5000
24300 REM --- CASE FALL ETR$(N)&"GOTO"&STR$(K1(K0RINT#4:STR$(K2(K0))&"GOT
24340 GOTO 1040
24400 4410 PRINT#4:STR$(K1(K0))&"GOTO"&STR$(N)
24420 PRINT#4:STR$(K2(K0))&"GOTO"&STR$(N)
24425 K0=K0-1
24430 GOTO 5000
25000 REM === DATEI ANFANG ===
25100 REM --- DATEI ANFANG
25130 PRINT#4:STR$(N)&"DIMZ$(72)"
25140 PRINT#4:STR$(N+1)&"FILE#3:"&SEG$(S$,6,LEN(S$))
25150 PRINT#4:STR$(N+2)&"INPUT#3:Z$"
25160 K2(K0)=N+2
25170 K1(K0)=N+3
25180 N=N+4
25185 S$=""
25190 GOTO 5000
25200 REM --- DATEI ENDE ---
25210 PRINT#4:STR$(N)&"GOTO"&STR$(K2(K0))
25220 N=N+1
25230 PRINT#4:STR$(K1(K0))&"IFEND#3GOTO"&STR$(N)
25240 PRINT#4:STR$(N)&"CLOSE#3"
25250 N=N+1
25270 GOTO 6000
80000 REM === MARKEN,SPRUENGE ===
80100 REM --- MARKE EINTRAGEN ---
80111 S$=SEG$(S$,1,8)
80150 IF L3>=30 GOTO 90100
80160 L3=L3+1
80161 L1$(L3)=S$
80162 L2(L3)=N
80170 S$=""
80171 GOTO 1030
80200 REM --- SPRUNG EINTRAGEN ---
80211 S$=SEG$(S$,1,8)
80270 REM
80280 L7=L7+1
80281 L5$(L7)=S$
80282 L6(L7)=N
80290 S$=""
80291 N=N+1
80292 GOTO 5000
80300 REM --- MARKEN-SPRUNG-ZUORDNUNG --0310
80304 PRINT#4:STR$O L7
80320 FOR L4=0 TO $(L8) GOTO 80360
80332 " GOTO 80340
80334 PRINT#4:STR$(L6(L8))&"GOSUB"&STR$(L2(L4))
80336 GOTO 80380
80340 PRINT#4:STR$(L6(L8))&"GOTO"&STR$(L2(L4))
80350 GOTO 80380
80360 NEXT L4
80362 IF SEG$(L5$(L8),1,1)<>"@" GOTO 80370
80364 PRIN"VERFEINERUNG "";"""&L5$380
80370 PRINT "***FEHHLT"
80371 STOP
80380 TR$(N)&"END"
80410 GOTO 91000
90000 PRINT "***FEHLER ZWISCHEN DEN SCHLUESSELWOERTERN"
90001 PRINT "   MIT CODE C1=";C1;"UND C2=";C2
90002 STOP
90100 PRINT "---SYSTEMGRENZE:C1=";C1;"C2=";C2;"K(K0)=";K(K0)
90101 PRINT "   L3=";L3;"L7=";L7;"F=";F
90102 STOP
90120 PRINT "***FEHLER IN DER SCHACHTELUNG:K(K0)=";K(K0);"C2=";C2
90121 STOP
90200 PRINT "***FEHLER IM PROGRAMMAUFBAU"
90201 STOP
91000 CLOSE#2
91040 CLOSE#4
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