home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
s85xx
/
s8506b.d64
/
strubs.4.qp
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
20KB
|
681 lines
5 REM STRUBS4/4.9.83
10 '*******************************
15 '** ---- STRUBS.4.QP --- **
20 '** 4.9.83 **
22 '** STRUBS.2 -CODE **
25 '** BASIC PROG VORUEBERSETZEN **
30 '** UEBERSETZT MARKEN IN ZEI- **
32 '** LENNR. ( \NAME) **
35 '** LOESCHT KOMMENTARE '...' **
36 '** UND BLANKS **
40 '** BEFEHLE: MIT '!' **
41 '** LOOP,EXIT,ELOOP **
43 '** IF,ELSE,FI **
45 '** CASEOF,OF,ECASE **
46 '** WHILE,EWHILE **
47 '** REPEAT,UNTIL **
48 '** EXT: **
49 '*******************************
50 '
51 PRINT"[147]";TAB(10);"*****************"
52 PRINT TAB(10);"* --STRUBS.4 -- *"
55 PRINT TAB(10);"* M.TOERK *"
57 PRINT TAB(10);"* 4352 HERTEN *"
58 PRINT TAB(10);"*****************"
67 '
68 '
70 !IF PEEK(46)<40 OR (PEEK(46)=40 AND PEEK(45)<3)THEN'KEIN PROG IN EDITBEREICH
71 '
72 ' ** INIT EDIT U. VAR. BEREICH:
73 : POKE46,40:POKE45,3:POKE 40*256,0:CLR
75 !FI
78 '
80 EA=40*256+1' ** EDIT-BEREICH
100 GOSUB \INIT
140 GOTO \MENUE
148 '
149 '
200 '******************************
205 '** -- NEXT ZEICHEN --- **
208 '** HOLT AB ADR NC NAECHSTES **
210 '** RELEVANTES ZEICHEN **
212 '** UEBERLIEST BLANKS UND **
214 '** KOMMENTARE ZWISCHEN **
215 '** ' UND ' BZW ZEILENDE **
217 '** KOPIERT STRINGS UNVERAEN-**
218 '** DERT NACH Z$ **
220 '** EIN: NC -CHAR ADR **
222 '** CODE-VARIABLEN **
224 '** AUS: NC -ADR NEXT CHAR **
226 '** C -CHAR-CODE **
228 '** SEF: Z$ -ZEILENSTRING **
247 '******************************
248 '
250 \NEXCHAR:IF PEEK(NC)=BL'ANK' THEN NC=NC+1:GOTO \THIS ' **BLANKS UEBERLESEN
254 '
260 C=PEEK(NC)
265 IF C<>KO'MMENTAR' THEN \TESTSTRING
267 '
270 ' ** KOMMENTAR UEBERLESEN
280 NC=NC+1:C=PEEK(NC):IF C AND C<>KO THEN \THIS
290 IF C THEN NC=NC+1:C=PEEK(NC)
295 IF C=BL THEN \NEXCHAR
298 '
320 \TESTSTRING: IF C<>TE'XT' THEN NC=NC+1:RETURN
340 '
345 ' ** STRING NACH Z$ UEBERTRAGEN **
350 Z$=Z$+CHR$(C):NC=NC+1:C=PEEK(NC):IF C AND C<>TE'XT' THEN \THIS
370 NC=NC+1
390 RETURN
395 '
500 '******************************
505 '** -SCHREIB ZEILE AUF DISK- **
510 '** EIN: Z$ - ZEILENSTRING **
512 '** E/A: AA - LINKADRESSE **
513 '** DARF AUSSERHALB DIE-**
514 '** SER ROUTINE NICHT!! **
515 '** VERAENDERT WERDEN ! **
520 '** SEF: H% **
525 '** IMP: FNAD - ADRESSFUNKT. **
547 '******************************
548 '
550 \SCHREIBZEILE:IF LEN(Z$)<4 THEN RETURN' **LEERZEILE
555 PRINTFNAD(ZA+2)
560 AA=AA+LEN(Z$)+2 ' ** LINKADR
565 H%=AA/256
570 PRINT#1,CHR$(AA-256*H%);CHR$(H%);Z$;
580 RETURN
595 '
700 '*****************************
704 '** --- HOLNAME ---- **
706 '** LIEST NAME AB ADR NC **
708 '** BIS ":", ",", BLANK **
709 '** ODER ZEILENENDE **
710 '** EIN: NC **
715 '** AUS: NC -ADR. NEXT CHAR **
720 '** C -LETZTES GELESE-**
722 '** -NES ZEICHEN **
728 '** T$ -NAME **
747 '*****************************
748 '
750 \HOLNAME:T$=""
780 ' **** NAME LESEN
790 !LOOP
795 : C=PEEK(NC):IF C=DP OR C=KM OR C=BL OR C=0 THEN !EXIT
800 : NC=NC+1:T$=T$+CHR$(C)
810 !ELOOP
820 NC=NC+1:IF C=BL'ANK' THEN GOSUB \NEXCHAR
830 RETURN
835 '
1000 '*****************************
1004 '** -- UEBERSETZE MARKE -- **
1020 '** EIN: Z$ -ZEILENANFANG **
1022 '** NC -AKT.CHAR ADR **
1030 '** AUS: Z$ -Z$+SPRUNGZIEL **
1032 '** NC -AUF LETZTES **
1033 '** GELESENES CHAR **
1038 '** SEF: I,H,T$ **
1047 '*****************************
1048 '
1050 \MARKE:GOSUB \HOLNAME
1115 '
1120 !IF T$="THIS" THEN
1125 : H=FNAD(ZA+2)
1130 !ELSE '** MARKE SUCHEN ****
1140 : FOR I=0 TO MP:IF MA$(I)<>T$ THEN NEXT
1160 : IF I>MP THEN ER=2:GOTO \ERROR:'UNDEFINED LABEL
1170 : H=MA%(I)+DI
1175 !FI
1180 Z$=Z$+MID$(STR$(H),2)
1190 RETURN
1195 '
1495 '
1500 '*********************************
1504 '** --- BEFEHLE IM 1.LAUF ---- **
1510 '** SEF: SP,S%() STACK **
1530 '** I%() IF/CASE TABELLE**
1532 '** LO%(,) LOOPTABELLE **
1533 '** ER,ER%(),EP -ERRORTAB. **
1535 '** I,IN,TA,B$,H,L **
1540 '** IMP: HOLNAME,ERROR,ABBRUCH **
1547 '*********************************
1549 '
1550 \BEFEHL.L1:GOSUB \HOLNAME
1551 '
1560 FOR I=0 TO BM:IF T$<>BE$(I) THEN NEXT
1565 IF I>BM THEN ER=0:GOTO \ERROR ' FALSCHER BEFEHL
1567 B$=BE$(I):IF I=3 THEN B$="IF"
1568 '
1569 I=I+1 ' ** VERTEILER **
1570 ONIGOSUB\L1,\EX1,\EL1,\IF1,\ELS1,\FI1,\CA1,\OF1,\EC1,\ET1,\W1,\N1,\R1,\U1
1571 '
1572 '** BLOCKSTRUCKTUR AUSGEBEN **
1574 PRINTFNAD(ZA+2);
1575 IF IN'DENTMODUS'=0 THEN PRINT TAB(TA);B$:RETURN
1577 IF IN=1 THEN PRINT TAB(TA);B$:TA=TA+1:RETURN
1579 IF IN=2 THEN PRINT TAB(TA-1);B$:RETURN
1581 IF IN=3 THEN TA=TA-1:PRINT TAB(TA);B$:RETURN
1585 '
1586 RETURN
1588 '
1589 ' **** LOOP *****
1600 \L1: IF SP'TR'>SM'AX' THEN ER=3:GOTO \ABBRUCH
1605 : IF LP>LM THEN ER=5:GOTO \ABBRUCH
1609 ' * ZEILENNR MERKEN:
1610 : S'TACK'%(SP)=LP:SP=SP+1:LO%(LP,0)=FNAD(ZA+2)-DI:LP=LP+1
1615 : IN'DENTMODUS'=1:RETURN
1628 '
1629 ' **** ELOOP *****
1640 \EL1:SP=SP-1:IF S'TACK'P'OINTER'<0 THEN ER=1:GOTO \ABBRUCH
1649 ' * ZEILENNUMMERN ZU ENTSPRECHENDEM LOOP NACH LO%(,)
1650 : LO'OP'%(S%(SP),1)=FNAD(ZA+2)-DI
1660 : IN'DENTMODUS'=3:RETURN
1678 '
1679 ' ** EXIT *****
1680 \EX1: IN'DENTMODUS'=0:RETURN
1688 '
1689 '
1700 ' ** WHILE *****
1710 \W1: GOSUB \L1 'LOOP':RETURN
1715 '
1730 ' *** EWHILE ******
1740 \N1: GOSUB \EL1 'ELOOP':RETURN
1745 '
1800 ' ** REPEAT *******
1810 \R1: GOSUB \L1 'LOOP':RETURN
1815 '
1845 '
1850 ' ** UNTIL *******
1860 \U1: GOSUB \EL1 'ELOOP':RETURN
1948 '
1990 '
2000 ' **** IF *******
2005 ' LISTENPLATZ FUER SPAETEREN SPRUNGZIELEINTRAG MERKEN:
2010 \IF1: IF SP>SM THEN ER=3:GOTO \ABBRUCH
2011 : IF IP>IM THEN ER=4:GOTO \ABBRUCH
2020 : S%(SP)=IP:IP=IP+1:SP=SP+1
2025 : IN'DENTMODUS'=1:RETURN
2029 '
2030 ' **** ELSE *******
2035 ' ZEILENNR.+1 ALS SPRUNGZIEL FUER ZUGEHOERIGES IF EINTRAGEN:
2040 \ELS1:IF SP<1 THEN ER=1:GOTO \ABBRUCH
2041 : IF IP>IM THEN ER=4:GOTO \ABBRUCH
2044 : I%(S%(SP-1))=FNAD(ZA+2)+1-DI
2045 ' * INDEX FUER SPAETEREN SPRUNGZIELEINTRAG MERKEN:
2050 : S%(SP-1)=IP:IP=IP+1
2052 : IN'DENTMODUS'=2:RETURN
2058 '
2090 ' **** FI *******
2095 ' ZNR. ALS SPRUNGZIEL BEI IF BZW. ELSE EINTRAGEN
2100 \FI1: IF SP<1 THEN ER=1:GOTO \ABBRUCH
2105 : SP=SP-1:I%(S%(SP))=FNAD(ZA+2)-DI
2107 : IN'DENTMODUS'=3:RETURN
2108 '
2110 '
2150 ' **** CASEOF *****
2160 \CA1: IF SP>SM THEN ER=3:GOTO \ABBRUCH
2165 : S%(SP)=-1:SP=SP+1
2170 : GOSUB \IF1
2180 : IN'DENTM.'=1:RETURN
2185 '
2200 ' ***** OF ******
2210 \OF1: GOSUB \ELS1
2230 : GOSUB \IF1
2240 : IN'DENTM.'=2:RETURN
2245 '
2250 ' ***** ECASE *****
2260 \EC1: H=FNAD(ZA+2)-DI ' * ZEILENNR
2269 ' ** AUSGAENGE EINTRAGEN
2270 : !LOOP
2275 : IF SP<1 THEN ER=1:GOTO \ABBRUCH
2280 : SP=SP-1:I=S%(SP)
2290 : IF I<0 THEN !EXIT
2300 : I%(I)=H
2310 : !ELOOP
2320 : IN'DENTM.'=3:RETURN
2330 '
2399 ' *** EXT/CONST ***
2400 \ET1: !LOOP
2410 : IF MP>MM THEN ER=6:GOTO \ABBRUCH
2415 : IF C AND C<>LA'BEL' THEN GOSUB \NEXCHAR:GOTO \THIS
2420 : IF C THEN GOSUB \HOLNAME
2423 : IF C THEN GOSUB \NEXCHAR
2425 : IF C<48 OR C>57 THEN 'KEINE ZIFFER' ER=9:GOTO \ERROR
2430 : MA$(MP)=T$:H=C
2438 '
2439 ' ** WERT DES LABELS: **
2440 : GOSUB \HOLNAME
2450 : MA%(MP)=VAL(CHR$(H)+T$)-DI
2460 : MP=MP+1
2470 : IF C=0 THEN !EXIT
2480 !ELOOP
2481 '
2485 IN'DENTM.'=0:RETURN
2495 '
2497 '
2500 '*********************************
2504 '** --- BEFEHLE IM 2.LAUF ---- **
2510 '** SEF: STACK **
2530 '** IP,LP - TAB. POINTER **
2534 '** Z$ - ZEILENSTRING **
2540 '** IMP: HOLNAME **
2547 '*********************************
2549 '
2550 \BEFEHL.L2:GOSUB \HOLNAME
2551 '
2560 FOR I=0 TO BM:IF T$<>BE$(I) THEN NEXT
2565 IF I>BM THEN ER=0:GOTO \ERROR ' * FALSCHER BEFEHL
2567 '
2568 I=I+1 ' ** VERTEILER **
2570 ONIGOSUB\L2,\EX2,\EL2,\IF2,\ELS2,\FI2,\CA2,\OF2,\EC2,\ET2,\W2,\N2,\R2,\U2
2575 RETURN
2576 '
2589 ' **** LOOP *****
2590 \L2:IF C=0 THEN Z$=Z$+":"
2592 ' INDEX VON LOOP/ELOOP PAAR MERKEN
2595 : S%(SP)=LP:SP=SP+1:LP=LP+1
2597 : RETURN
2628 '
2629 ' **** ELOOP *****
2630 \EL2: SP=SP-1
2639 ' * SPRUNG ZU ENTSPR. LOOP
2640 : Z$=Z$+G'O'T'O'$+MID$(STR$(LO%(S%(SP),0)+DI),2)+NU$
2642 : GOSUB \SCHREIBZEILE
2645 ' * FOLGEZEILE ALS SPRUNGZIEL GENERIEREN
2647 : L=PEEK(ZA+2)+1:H=PEEK(ZA+3):IF L>255 THEN L=0:H=H+1
2648 : Z$=CHR$(L)+CHR$(H) +":"
2650 : RETURN
2652 '
2680 ' **** EXIT *****
2685 \EX2:B$="":IF RIGHT$(Z$,1)<>CHR$(167) 'THEN-CODE' THEN B$=G'O'T'O'$
2689 ' * SPRUNG ZU NAECHSTEM ELOOP
2693 : Z$=Z$+B$+MID$(STR$(LO%(S%(SP-1),1)+DI+1),2)
2695 : RETURN
2947 '
2955 '
3000 ' **** IF ********
3010 \IF2: Z$=Z$+I'F'C$+NO'T'$+"("+CHR$(C)
3020 : GOSUB \NEXCHAR:IF C<>TH'EN' AND C THEN Z$=Z$+CHR$(C): GOTO \THIS
3030 : Z$=Z$+")"+CHR$(TH'EN')+MID$(STR$(I%(IP)+DI),2)
3035 '
3036 : IP=IP+1:C=0:RETURN
3039 '
3080 ' **** ELSE ********
3090 \ELS2: Z$=Z$+G'O'T'O'$+MID$(STR$(I%(IP)+DI),2)+NU$
3100 : GOSUB \SCHREIBZEILE
3110 ' * FOLGEZEILE ALS SPRUNGZIEL GENERIEREN:
3120 : L=PEEK(ZA+2)+1:H=PEEK(ZA+3):IF L>255 THEN L=0:H=H+1
3130 : Z$=CHR$(L)+CHR$(H) +":"
3140 : IP=IP+1:RETURN
3149 '
3180 ' **** FI ********
3190 \FI2: L=PEEK(ZA+2):H=PEEK(ZA+3)
3195 ' * ZEILE ALS SPRUNGZIEL GENERIEREN:
3200 : Z$=CHR$(L)+CHR$(H) +":"
3210 : RETURN
3255 '
3259 ' ***** CASEOF ****
3260 \CA2: GOSUB \IF2:RETURN
3299 '
3300 ' ***** OF ******
3310 \OF2: GOSUB \ELS2
3320 : Z$=LEFT$(Z$,LEN(Z$)-1) ' ":" WEG
3330 : GOSUB \IF2
3340 : RETURN
3345 '
3350 ' ***** ECASE *****
3360 \EC2: GOSUB \FI2
3370 : RETURN
3380 '
3385 '
3399 ' *** EXT/CONST ***
3400 \ET2: Z$="":C=0:RETURN ' *ZEILE LOESCHEN
3405 '
3448 '
3449 ' *** WHILE *****
3450 \W2: GOSUB \L2 'LOOP'
3460 : Z$=Z$+I'F'C'ODE'$+NO'T'$+"("
3469 ' ** BEDINGUNG KOPIEREN:
3470 : IF C<>BE'FEHL' AND C THEN Z$=Z$+CHR$(C):GOSUB \NEXCHAR:GOTO \THIS
3480 : Z$=Z$+")"+CHR$(TH'EN')
3488 ' ** ANALOG EXIT:
3490 : Z$=Z$+MID$(STR$(LO%(S%(SP-1),1)+DI+1),2)
3495 : C=0:RETURN
3497 '
3498 '
3549 ' *** EWHILE *****
3550 \N2: GOSUB \EL2 'ELOOP':RETURN
3555 '
3557 '
3579 ' *** REPEAT *****
3580 \R2: GOSUB \L2 'LOOP':RETURN
3585 '
3599 ' *** UNTIL *****
3600 \U2: Z$=Z$+I'F'C$+NO'T'$+"("
3605 '
3609 ' * BEDINGUNG KOPIEREN
3610 : IF C THEN Z$=Z$+CHR$(C):GOSUB \NEXCHAR:GOTO \THIS
3619 ' * ANALOG ELOOP
3620 : SP=SP-1:IN'DENT'=3
3630 : Z$=Z$+")"+CHR$(TH'EN')+MID$(STR$(LO%(S%(SP),0)+DI),2)
3640 : RETURN
4000 '*****************************
4004 '** - BEARBEITE ZEILE - **
4020 '** EIN: ZA -ZEILENADR **
4028 '** AUS: Z$ -ZEILENSTRING **
4029 '** UEBERSETZTE Z. **
4035 '** LEFT$(Z$,2)=ZEILNR **
4040 '** IMP: \BEFEHL.L2 **
4045 '** \MARKE **
4047 '*****************************
4048 '
4050 ' ** ZEILENNR: **
4060 \ZEILE:Z$=CHR$(PEEK(ZA+2))+CHR$(PEEK(ZA+3))
4080 NC=ZA+4:GOSUB \NEXCHAR ' 1.ZEICHEN DER ZEILE
4082 '
4089 ' ** 'TABULATOR' **
4090 IF C=DP THEN GOSUB \NEXCHAR
4098 '
4099 ' ** MARKE UEBERLESEN: **
4100 !IF C=LA'BEL' THEN
4105 : GOSUB \HOLNAME:IF C=DP THEN GOSUB \NEXCHAR
4108 : IF C=0 THEN Z$=Z$+":"
4110 !FI
4111 '
4115 NC=NC-1:IF C=0 THEN Z$=Z$+NU'LL'$
4119 '
4120 ' ******** ZEILE LESEN ********
4130 !LOOP: IF C=0 THEN !EXIT
4131 '
4132 : GOSUB \NEXCHAR
4138 '
4150 : !IF C=BE'FEHL' THEN
4155 : GOSUB \BEFEHL.L2
4358 : !ELSE
4360 : IF C=LA'BEL' THEN GOSUB \MARKE
4378 : !FI
4380 : Z$=Z$+CHR$(C)
4395 ' ******** BIS ZEILENENDE *****
4396 !ELOOP
4398 RETURN
4399 '
5000 '*****************************
5005 '** --- UEBERSETZEN --- **
5047 '*****************************
5048 '
5049 '
5050 \UEBERSETZEN: PRINT"[147] ***** UEBERSETZEN ****"
5052 !IF FNAD(EA)<EA+5 OR FNAD(EA)>EA+83 THEN
5053 : PRINT"KEIN PROGRAMM VORHANDEN":GOSUB \WARTEN:RETURN
5054 !FI
5057 '
5058 PRINT"BITTE DISK EINLEGEN "
5059 '
5060 !LOOP PRINT"NAME FUER OBJEKT-PROGRAMM"
5065 : POKE198,1:POKE631,34 ' ** " FUER INPUT
5070 : [133] F$
5080 : [159] 1,8,1,F$[170]",P,W":[159] 15,8,15
5090 : [132]15,E,E$:[139] E[178]0 [167] !EXIT
5095 : [153]"DISK ERR:";E;E$
5096 : [133]"NEUER VERSUCH";Z$
5098 : [160]1:[160]15
5099 : [139] Z$[179][177]"J" [167] [142]
5100 !ELOOP
5118 '
5119 '
5120 AA[178]EA
5130 [152]1,[199](AA [175] 256);[199](AA[173]256);' [172][172] STARTADR.
5134 '
5135 [153]"1.LAUF"
5136 TA'BULA[164]R'[178]7 'FUER BLOCKSTRUKTUR AUSGABE
5140 [141] \1.LAUF
5142 '" ** ALLE BLOECKE GESCHLOSSEN?
5143 IF SP>0 THEN PRINT SP;:ER=8:GOTO \ABBRUCH
5144 '
5145 PRINT"2.LAUF"
5150 GOSUB \2.LAUF
5154 '
5160 PRINT#1,CHR$(0);CHR$(0);' **** PROG.ENDE MARKE
5180 CLOSE1:PRINT"**";EP;" ERRORS **":GOSUB \WARTEN
5190 RETURN
5198 '
5199 '
5500 '*****************************
5504 '** --- 1.LAUF --- **
5510 '** IMP: \NEXCHAR **
5512 '** \MARDEF **
5514 '** \BEFEHL.L1 **
5547 '*****************************
5548 '
5550 ' *** ZEILENAD.=EDITBEREICH ANF
5555 \1.LAUF: ZA=EA
5557 '
5560 ' ** WHILE NICHT PROGR.ENDE DO ***
5570 !WHILE ZA<>0 !DO
5580 : NC=ZA+4:C=PEEK(NC):NC=NC+1 '1.ZEICHEN DER ZEILE
5584 ' ** TAB UEBERLESEN:
5585 : IF C=D'OPPEL'P'UNKT' THEN GOSUB \NEXCHAR
5587 '
5589 ' ** MARKE DEFINIEREN
5590 : IF C=LA'BEL' THEN GOSUB \MARDEF:IF C=DP THEN GOSUB \NEXCHAR
5599 '
5619 ' ** BEFEHL:
5620 : IF C=BE'FEHL' THEN GOSUB \BEFEHL.L1
5920 : ZA=FNAD(ZA)
5930 !EWHILE
5935 RETURN
5940 ' **** ENDWHILE ******************
5995 '
5996 '
6000 '*******************************
6004 '** --- MARKE DEFINIEREN --- **
6015 '** EIN: ZA -ZEILENADR. **
6020 '** AUS: VERAENDERTE MARKEN- **
6022 '** LISTE MA$(),MA%(),MP **
6030 '** SEF: NC,T$ **
6047 '*******************************
6048 '
6050 \MARDEF: IF MP>MM'AX' THEN ER=6:GOTO \ABBRUCH
6070 GOSUB \HOLNAME
6095 '
6100 MA$(MP)=T$:MA%(MP)=FNAD(ZA+2)-DI:MP=MP+1
6120 RETURN
6130 '
6500 '*****************************
6504 '** --- 2.LAUF --- **
6510 '** IMP: \ZEILE **
6512 '** \SCHREIBZEILE **
6547 '*****************************
6548 '
6550 \2.LAUF: Z'EILEN'A'DRESSE'=E'DITBEREICH'A'NFANG':Z1=FNAD(ZA) 'ADR. 2.ZEILE
6560 LP=0:SP=0:IP=0 ' * POINTER RUECKSETZEN
6575 '
6580 !REPEAT
6585 : !IF PEEK(ZA+4)<>KO'MMENTAR' THEN
6590 : GOSUB \ZEILE ' BEARBEITEN
6600 : GOSUB \SCHREIBZEILE
6649 '
6650 : !FI
6655 : ZA=Z1:Z1=FNAD(Z1) ' ADRESSE NAECHSTE ZEILE
6660 !UNTIL Z1=0
6670 ' * PROGR. ENDE *
6680 RETURN
6685 '
8000 '*****************************
8004 '** --- ERROR ----- **
8047 '*****************************
8050 \ERROR:PRINT"ERROR IN";FNAD(ZA+2),ER$(ER)
8060 IF EP<EM THEN ER%(EP,0)=FNAD(ZA+2)-DI:ER%(EP,1)=ER:EP=EP+1
8080 Z$=LEFT$(Z$,2)+"***** ERR:"+ER$(ER)+"********"
8090 C$=NU$:C=0 'ZEILENENDE SETZEN
8099 RETURN
8799 '
8800 '*****************************
8805 '** UMSCHALTEN EDIT BEREICH **
8840 '** BASIC-ANFANG UMSETZEN **
8847 '*****************************
8849 '
8850 '
8860 \EDIT: PRINT"[147]"
8870 PRINTTAB(9);"*********************"
8880 PRINTTAB(9);"** ZURUECK MIT: **"
8882 PRINTTAB(9);"** ' ! ' [RETURN] **"
8940 PRINTTAB(9);"*********************"
8950 POKE44,EA/256:POKE EA-1,0:CLR:END
8990 END
40000 '****************************
40010 '** --- MENUE --- **
40048 '****************************
40049 '
40050 \MENUE:PRINT"[147]";TAB(10);"*****************"
40052 PRINT TAB(10);"* -- STRUBS -- *"
40053 PRINT TAB(10);"* PRECOMPILER *"
40055 PRINT TAB(10);"* BITTE WAEHLEN *"
40058 PRINT TAB(10);"*****************"
40060 PRINT"E[146]DIT"
40070 PRINT"U[146]EBERSETZEN"
40080 PRINT"M[146]ARKEN-TABELLE AUSGEBEN"
40090 PRINT"F[146]EHLER-TABELLE AUSGEBEN"
40100 PRINT"S[146]CHLUSS"
40150 '
40160 GET Z$:IF Z$="" THEN \THIS
40170 IF Z$="E" THEN \EDIT
40180 IF Z$="U" THEN GOSUB \UEBERSETZEN:GOTO \MENUE
40190 IF Z$="S" THEN SYS 64738 '** KALTSTART
40195 IF Z$="M" THEN GOSUB \MARKENTAB-AUS:GOTO \MENUE
40200 IF Z$="F" THEN GOSUB \ERRORTAB-AUS:GOTO \MENUE
40495 GOTO \MENUE
45000 '****************************
45010 '* --- INIT --- *
45048 '****************************
45049 '
45050 ' ** MARKEN-TABELLE:
45060 \INIT: MM'AX'=99:DIM MA$(MM),MA%(MM):MP=0
45069 '
45120 '
45130 ' ** LOOP-TABELLE:
45131 ' *LO(..,0)=ZNR.LOOP
45132 ' *LO(..,1)=ZNR. ZUGEHOERIGES ELOOP
45135 L'OOP'M'AX'=140:DIM LO'OP'%(LM,1):L'OOP'P'OINTER'=0
45138 '
45140 ' ** IF-TABELLE:
45145 IM'AX'=270:DIM I%(IM):IP=0
45149 '
45188 '
45189 ' ** STACK:
45190 SM'AX'=60:DIM S'TACK'%(SM):SP'TR'=0
45200 '
45209 '
45210 ' ** DIFFERENZ FUER ZEILENNR. IN INTEGER-ARRAY
45220 DI=32766
45225 '
45240 ' ** RELEVANTE ZEICHENCODES **
45250 DP=ASC(":"):KO'MMENTAR'=ASC("'"):LA'BEL'=ASC("\"):NU$=CHR$(0):BL=ASC(" ")
45253 BE'FEHL'=ASC("!"):TE'XT("")'=34:G'O'T'O-CODE'$=CHR$(137)
45254 I'F'C'ODE'$=CHR$(139):TH'EN-CODE'=167:NO'T'$=CHR$(168):K'OM'M'A-CODE'=44
45259 '
45260 '***** BEFEHLE: ****************
45265 BM=13:DIM BE$(BM)
45270 FOR I=0 TO BM:READ BE$(I):NEXT
45271 BE$(3)=I'F'C'ODE'$
45272 DATA LOOP,EXIT,ELOOP,IF,ELSE,FI
45273 DATA CASEOF,OF,ECASE,EXT
45274 DATA WHILE,EWHILE,REPEAT,UNTIL
45399 '
45400 ' ** ADRESSBERECHNUNG:
45410 DEF FNAD(X)=PEEK(X)+256*PEEK(X+1)
45412 '
45415 '
45470 ' ** ERROR-TABELLE:
45480 EM=40:DIM ER%(EM,1):EP=0:DIM ER$(40)
45490 ' ** FEHLERMELDUNGEN
45500 FORI=0TO9:READ ER$(I):NEXT
45510 DATA "FALSCHER BEFEHL","BLOCKSCHACHTELUNG: ANFANG FEHLT"
45511 DATA "UNDEFINIERTE MARKE","STACK VOLL"
45512 DATA "ZU VIELE IF/ELSE/CASE/OF","ZU VIELE LOOP/WHILE/REPEAT"
45513 DATA "ZU VIELE MARKEN",,"BLOCK NICHT GESCHLOSSEN"
45514 DATA "EXTERN DECLARATION"
45595 '
45599 ' ** INTERPRETERERW. '!' = POKE44,8:RUN
45600 I=0:READ W
45610 POKE 704+I,W:I=I+1:READ W:IF W<256 THEN \THIS
45620 DATA 32,115,0,8,201,33,240,4,40,76,231,167
45630 DATA 169,8,133,44,169,138,76,231,167,999
45640 ' * UMSCHALTEN:
45650 FOR I=0 TO 10:READ W:POKE 750+I,W
45660 NEXT
45670 SYS 750
45680 DATA 169,192,141,8,3,169,2,141,9,3,96
45690 '
45999 RETURN
48000 '********************************
48003 '** - MARKENTABELLE AUSGEBEN - **
48048 '********************************
48049 '
48050 \MARKENTAB-AUS:IF MP=0 THEN RETURN
48055 H=0 ' FLAG
48057 PRINT"[147] ** MARKENTABELLE AUSGEBEN **"
48060 INPUT" AUF DRUCKER (J/N)";B$
48070 !IF B$="J" THEN
48075 : PRINT" DRUCKER AN?":GOSUB \WARTEN
48080 : OPEN 1,4
48090 !ELSE
48100 : OPEN 1,3 'BILDSCHIRM
48102 : H=-1 ' FLAG
48104 !FI
48105 '
48120 FOR I=0 TO MP-1
48140 : PRINT#1,MA%(I)+DI,MA$(I)
48150 : IF I-INT(I/10)*10 =0 THEN IF I AND H THEN GOSUB \WARTEN
48180 NEXT
48185 CLOSE1:GOSUB \WARTEN
48190 RETURN
48195 '
49000 '********************************
49003 '** - FEHLERTABELLE AUSGEBEN - **
49048 '********************************
49049 '
49050 \ERRORTAB-AUS:IF EP=0 THEN RETURN
49055 H=0 ' FLAG
49057 PRINT"[147] ** FEHLERTABELLE AUSGEBEN **"
49060 INPUT" AUF DRUCKER (J/N)";B$
49070 !IF B$="J" THEN
49075 : PRINT" DRUCKER AN?":GOSUB \WARTEN
49080 : OPEN 1,4
49090 !ELSE
49100 : OPEN 1,3 'BILDSCHIRM
49102 : H=-1 ' FLAG
49104 !FI
49105 '
49110 PRINT#1,EP;" ERRORS"
49120 FOR I=0 TO EP-1
49140 : PRINT#1, ER%(I,0)+DI;ER$(ER%(I,1))
49150 : IF I-INT(I/10)*10 =0 THEN IF I AND H THEN GOSUB \WARTEN
49180 NEXT
49185 CLOSE1
49191 GOSUB \WARTEN
49190 RETURN
49195 '
49500 '********************************
49503 '** --- AUF TASTE WARTEN --- **
49548 '********************************
49549 '
49550 \WARTEN:PRINT"->[157][157]";
49560 GETB$:IF B$="" THEN \THIS
49570 RETURN
49598 '
49599 '
49950 '********************************
49955 '** --- PROGR.ABBRUCH --- **
49958 '** SCHLIESST FILE **
49970 '** GIBT FEHLERMELDUNG AUS **
49975 '** EIN: ER -FEHLERCODE **
49990 '********************************
50000 \ABBRUCH: PRINT "* FEHLER BEHEBEN, DANN NEU VERSUCHEN *"
50008 PRINT:PRINT ER$(ER);" IN ";FNAD(ZA+2)
50010 PRINT#1,CHR$(0);CHR$(0); ' **** PROG.ENDE MARKE
50020 CLOSE1
50030 GOSUB \WARTEN
50040 GOSUB \ERRORTAB-AUS
50050 RUN