PROGRAM PASCAL14(INPUT,OUTPUT); (* 9.12.'85 FLORIAN MATTHES VC-20 (C-64) *) (*PCODE-START:9917 (VC-20) *) (*PCODE START:17939 (C-64) *) LABEL 8,(*ABORT LABEL MIT RETURN-ABFRAGE *) 9;(*ABORT LABEL DIREKTE RUECKKEHR *) CONST TXMAX=400;MXLBL=10;MXCASE=35; AL=6; (*LAENGE BEZ. (2*AL+2 ZEICHEN) *) HEAD=11; (*PLATZ SL,DL,RA IM CODE *) SETSIZE=95;(*ORD(SETELEM) IN [0..95] *) (*CODES VON GETSYM: "()*+,-./:;<=>[]^" *) KLAUF =40;KLZU =41;STERN =42;PLUS =43; KOMMA =44;MINUS =45;PUNKT =46;QUER =47; DPKT =58;SEMI =59;KLEINER=60;GLEICH=61; GROESSER=62;EKLAUF=91;EKLZU =93;PFEIL =94; IDENT=252;INTNUM=253;REALNUM=254;EOFILE=255; (*INDIZES DER STANDARDTYPEN IN TABBEZ *) BOOL = 2;INT =4;CHART= 5;REALS=6;NILS=7; STRNG = 8;SETT=9;TXTF =10; INFILE=45;OUTFILE=46; (*M-CODE-ADRESSEN FUER HILFSROUTINEN: *) (*\VC-20*) UGEN =8428;VORBEL=8685;UINIT=9042; UHOLE=9116;UPOSI =9836; (*VC-20*) (*\C-64 UGEN =16462;VORBEL=16695;UINIT =17052; UHOLE=17131;UPOSI =17858;TEMPFLG=907; (*C-64*) (*BEFEHLSCODES: P-CODE V1.31 *) SSYM=0;LSYM=4;LDCSYM=8;CSTSYM=9;MOVSYM=10; POPSYM=11;OVRSYM=12;ALCSYM=13;TSTSYM=15; JCDSYM=16;JNCSYM=17;JMPSYM=18;JMCSYM=19; JMLSYM=20;CUPSYM=21;HLTSYM=23;RPRSYM=24; RFISYM=25;RFRSYM=26;MSTSYM=27;ERRSYM=28; FSYM=29;INVSYM=39;CHSSYM=46;NOTSYM=47; ABISYM=48;BEQSYM=49; LRCSYM=68;FLTSYM=69;FLOSYM=70;INTSYM=71; MONSYM=72;DYASYM=73;CMPSYM=74; SRSYM=75; LRSYM=79; SSASYM=83;LSASYM=84;GS1SYM=85;GS2SYM=86; NULSYM=87;UNISYM=88;ISCSYM=89;DIFSYM=90; INNSYM=91;SGESYM=92;SLESYM=93;SEQSYM=94; SPASYM=95;LPASYM=96;ADUSYM=97; CASERR=3;(*FEHLERCODE 'NO LABEL IN CASE' *) (*\VC-20*) IBUF=4631;OBUF=4639;ORG=8165;HEAPPTR=59; (*VC-20*) (*\C-64 IBUF=2071;OBUF=2079;ORG=5611;HEAPPTR=59; OVERFLOW=13803;(* = ORG+ $2000 *) (*C-64*) TYPE TBEZ=ARRAY[0..AL]OF INTEGER; (*ZWEI 'GEPACKTE' ZEICHEN PRO WORT *) TART=(NUL,KONST,STDTYP,AUFZHL,AUSSCH,FELDTYP, VERBTYP,MENGE,SEQTYP,ZEIGTYP,SAMET, SELECT,VARBLE,PROZ,FKT); TAB=ARRAY[0..TXMAX]OF INTEGER; VARDESCRIPTOR=RECORD VTYP,OFFSET,LEVEL:INTEGER; ACCESS:(BASEOFFSET, ABSOLUTE, BASESTACK); ISPACKED:BOOLEAN END; VAR ADR :INTEGER[8483];(*FUER FIXUP *) BYTE :INTEGER[8485];(*FUER FIXUP *) PC :INTEGER[8487];(*ADRESSE PCODE *) NUM :INTEGER[8489];(*LETZTE ZAHL *) ZNR :INTEGER[8491];(*NR. LFD ZEILE *) SYM :INTEGER[8495];(*LETZTES SYMBOL *) POS :INTEGER[8497];(*POSITION IN BEZTAB *) FLOAT :REAL [8499];(*ZAHL WENN SYM=REALNUM*) ID :TBEZ [8504];(*LETZER BEZEICHNER *) INDEX :INTEGER[8519];(*L-BYTE: LFD. SPALTE *) LBYTE :INTEGER[8520];(*HILFSADRESSEN FUER *) HBYTE :INTEGER[8521];(*ZUGRIFF AUF H-BYTE *) TSTFLG:BOOLEAN[8522];(*RUN-TIME CHECKING *) TABA1 :TAB[31963]; (*ATTRIBUTE DER BEZ. *) TABA2 :TAB[31158]; (*ATTRIBUTE DER BEZ. *) TABA3 :TAB[30353]; (*ATTRIBUTE DER BEZ. *) (* ADR :INTEGER[16493];(*FUER FIXUP *) (* BYTE :INTEGER[16495];(*FUER FIXUP *) (* PC :INTEGER[16497];(*ADRESSE PCODE *) (* NUM :INTEGER[16499];(*LETZTE ZAHL *) (* ZNR :INTEGER[16501];(*NR. LFD ZEILE *) (* SYM :INTEGER[16505];(*LETZTES SYMBOL *) (* POS :INTEGER[16507];(*POSITION IN BEZTAB *) (* FLOAT :REAL [16509];(*ZAHL WENN SYM=REALN.*) (* ID :TBEZ [16514];(*LETZER BEZEICHNER *) (* INDEX :INTEGER[16529];(*L-BYTE: LFD. SPALTE *) (* LBYTE :INTEGER[16530];(*HILFSADRESSEN FUER *) (* HBYTE :INTEGER[16531];(*ZUGRIFF AUF H-BYTE *) (* TSTFLG:BOOLEAN[16532];(*RUN-TIME CHECKING *) (* TABA1,TABA2,TABA3:TAB;(*ATTRIBUTE DER BEZ. *) TABBEZ:ARRAY[0..TXMAX]OF TBEZ; TABART:ARRAY[0..TXMAX]OF TART; DUMMY :TBEZ; LBL :ARRAY[0..MXLBL]OF RECORD VAL,LEV,ADR:INTEGER END; OPCODE:ARRAY[0..13]OF INTEGER; ZU :VARDESCRIPTOR; TX,LAST:INTEGER; FWD,WITHIND,WITHADR,FWDTYP:INTEGER; PRTFLG:BOOLEAN; ERRORPC,FEHLER,STARTPC:INTEGER; GENFLG:(MEMORY,ONFILE,DETECT,SYNTAX); CH:CHAR; INCLUDE,LIST:TEXT; (*\C-64 COMMAND,CFILE:TEXT; FFILE:FILE OF RECORD V,N:INTEGER END; (*C-64*) (*\CROSS IBUF,OBUF,OFFSET,HEAPPTR:INTEGER; (*CROSS*) (*$"INTERRUPT.E" *) PROCEDURE BLOCK(BLKTYP:TART;LVL,LBLIND:INTEGER); (*BLKTYP=NUL,PROZ,FKT *) VAR BLK,FIXADR,LBLI2,LAST2,DX,DX2,TX2,K:INTEGER; ISFWD:BOOLEAN; (*$"LEN.E" *) FUNCTION EXPRESSION:INTEGER;FORWARD; (*$"EXPAND.E" *) (*$"CALL.E" *) (*$"EXPRESSION.E"*) (*$"STATEMENT.E" *) (*$"FPARM.E" *)