PROGRAM SYSTEM(INPUT,OUTPUT); (* 7.10.1986 FLORIAN MATTHES *) (* 1.7.1989 U1: ENDADRESSE SYSTEM. *) (* INSTALLATION DES PASCAL-SYSTEMS *) CONST COLD = -798; (* AUS SCR.MOD6.S *) COLTAB = 5120; (* AUS SCR.SYST? *) SYSNAME = 'SYSTEM.M'; EDITORNAME = 'EDITOR.M'; COMPILERNAME = 'COMPILER.M'; ERRORNAME = 'ERRORS.TXT'; PASCAL = 'PASCAL'; LIBNAME = 'PAS.LIB'; TYPE TNAME = STRING [20]; VAR CH : CHAR; REGS : RECORD SR,AKKU,X,Y: BYTE END; CMD : TEXT; ERRTXT : ARRAY[0..200] OF STRING; ERRORLINES : INTEGER; PROCEDURE WAITKEY; BEGIN WRITELN(#13 ' ×EITER MIT EINER BELIEBIGEN ÔASTE'); REPEAT UNTIL KEYPRESSED; END; (* WAITKEY *) PROCEDURE DISK (KIND: STRING); VAR ERR: INTEGER; TEXT: STRING; BEGIN READ(CMD,ERR); IF ERR>20 THEN BEGIN READLN(CMD,TEXT); WRITELN; WRITELN; WRITELN(KIND,'FEHLER ÎUMMER', ERR); WRITELN('(',TEXT,')'); WAITKEY; END; END; (* DISK *) PROCEDURE LOAD(S:TNAME;TARGETBANK:INTEGER); VAR I: INTEGER; BEGIN BANK:=15; WITH REGS DO BEGIN AKKU:=TARGETBANK; X:=1; (* NAME IN BANK 1 *) SYS(-152,REGS); (* SETBNK *) AKKU:=LENGTH(S); I:= ADDU(ADR(S),1); X:=I; Y:=HBYTE(I); SYS( -67,REGS); (* SETNAM *) AKKU:=0; X:=8; Y:=1; SYS( -70,REGS); (* SETLFS *) AKKU:=0; SYS(-43,REGS); (* LOAD *) END; DISK('ÌESE'); END; (* LOAD *) PROCEDURE SAVE(S:TNAME;SOURCEBANK:INTEGER; FIRST,LAST: INTEGER); VAR I : INTEGER; ZP: INTEGER[252]; BEGIN BANK:=15; WITH REGS DO BEGIN AKKU:=SOURCEBANK; X:=1; (* NAME IN BANK 1 *) SYS(-152,REGS); (* SETBNK *) AKKU:=LENGTH(S); I:= ADDU(ADR(S),1); X:=I; Y:=HBYTE(I); SYS( -67,REGS); (* SETNAM *) AKKU:=0; X:=8; Y:=1; SYS( -70,REGS); (* SETLFS *) ZP:=FIRST; AKKU:=ADR(ZP); X:=LAST; Y:=HBYTE(LAST); SYS(-40,REGS); (* SAVE *) END; DISK('ÓCHREIB'); END; (* SAVE *) PROCEDURE WRITEHEAD; BEGIN WRITE(#147 #14); DISPLAY(1,13,3,'ÐASCAL-ÓYSTEM'); DISPLAY(1,13,4,'============='); END; (* WRITEHEAD *) PROCEDURE LOADERRORS; VAR ERR: TEXT; BEGIN IF ERRORLINES=0 THEN BEGIN OPEN(ERR,8,3,ERRORNAME+',S,R'); REPEAT READLN(ERR,ERRTXT[ERRORLINES]); ERRORLINES:=ERRORLINES+1; UNTIL EOF(ERR); CLOSE(ERR); DISK('ÌESE'); END; END; (* LOADERRORS *) PROCEDURE SAVEERRORS; VAR ERR: TEXT; I : INTEGER; BEGIN IF ERRORLINES>0 THEN BEGIN OPEN(ERR,8,3,ERRORNAME+',S,W'); FOR I:=0 TO ERRORLINES-1 DO WRITELN(ERR,ERRTXT[I]); CLOSE(ERR); DISK('ÓCHREIB'); END; END; (* SAVEERRORS *) PROCEDURE INSERTDISK; BEGIN WRITELN; WRITELN('ÂITTE LEGEN ÓIE JETZT DIE FORMATIERTE'); WRITELN('ÚIELDISKETTE IN DAS ÄISKETTENLAUFWERK.'); WAITKEY; END; (* INSERTDISK *) PROCEDURE INSTALL; CONST COLSTR = '?Ÿœ??•–—˜™š›'; (* KONTROLLZEICHEN *) VAR INDEX,J: INTEGER; CH : CHAR; TAB : ARRAY[0..8] OF BYTE; PROCEDURE SHOW(INDEX: INTEGER; S:STRING); BEGIN WRITELN(INDEX:3,': ',S); IF INDEX IN [3,6,7] THEN CASE TAB[INDEX-1] OF 0:S:='SCHWARZ'; 8:S:='ROT'; 1:S:='GRAU 1'; 9:S:='HELLROT'; 2:S:='BLAU'; 10:S:='LILA'; 3:S:='HELLBLAU'; 11:S:='VIOLETT'; 4:S:='GRUEN'; 12:S:='BRAUN'; 5:S:='HELLGRUEN'; 13:S:='GELB'; 6:S:='BEIGE'; 14:S:='HELLGRAU'; 7:S:='ZYNOBER'; 15:S:='WEISS'; END (* CASE *) ELSE CASE TAB[INDEX-1] OF 0:S:='SCHWARZ'; 8:S:='ORANGE'; 1:S:='WEISS'; 9:S:='BRAUN'; 2:S:='ROT'; 10:S:='HELLROT'; 3:S:='CYAN'; 11:S:='GRAU 1'; 4:S:='VIOLETT'; 12:S:='GRAU 2'; 5:S:='GRUEN'; 13:S:='HELLGRUEN'; 6:S:='BLAU'; 14:S:='HELLBLAU'; 7:S:='GELB'; 15:S:='GRAU 3'; END; (* CASE *) WRITELN('[':6,S,']'); END; (* SHOW *) BEGIN FOR INDEX:= 0 TO 6 DO TAB[INDEX]:= PEEK(COLTAB+INDEX); FOR INDEX:= 7 TO 8 DO BEGIN TAB[INDEX]:=0; (* ZUR SICHERHEIT ! *) FOR J:= 1 TO 16 DO IF PEEK(COLTAB+INDEX)=ORD(COLSTR[J]) THEN TAB[INDEX]:=J-1; END; WRITELN(#147 #13 'ÚUR ÁUSWAHL DER ÆARBEN IM ÐASCAL-'); WRITELN('ÓYSTEM KOENNEN ÓIE IM FOLGENDEN ÂILD'); WRITELN('MIT DEN ÔASTEN >1< BIS >9< JEDE ÆARBE'); WRITELN('SEPARAT EINSTELLEN.'); WRITELN(#13, 'ÄIE ÅINSTELLUNG WIRD MIT DER ÔASTE'); WRITELN('>0< BEENDET. ÁENDERUNGEN WERDEN NUR'); WRITELN('BEIM ÅRSTELLEN EINER NEUEN ÓYSTEM-'); WRITELN('DISKETTE PERMANENT GESPEICHERT.'); WAITKEY; REPEAT FOR INDEX:= 0 TO 6 DO POKE(COLTAB+INDEX,TAB[INDEX]); FOR INDEX:= 7 TO 8 DO POKE(COLTAB+INDEX,ORD(COLSTR[TAB[INDEX]+1])); WRITE(#147); SHOW(1,'ÆARBE DES ÂILDSCHIRMRANDES (40)'); SHOW(2,'ÆARBE DES ÈINTERGRUNDES (40)'); SHOW(3,'ÆARBE DES ÈINTERGRUNDES (80)'); SHOW(4,'ÆARBE DER ËOPFZEILE (40)'); SHOW(5,'ÆARBE DES ÔEXTFENSTERS (40)'); SHOW(6,'ÆARBE DER ËOPFZEILE (80)'); SHOW(7,'ÆARBE DES ÔEXTFENSTERS (80)'); SHOW(8,'ÆARBE DER ÃOMPILERTEXTE (40)'); SHOW(9,'ÆARBE DER ÃOMPILERTEXTE (80)'); WRITELN(#13 ' 0: ÂEENDEN DER ÁENDERUNGEN'); REPEAT GETKEY(CH) UNTIL CH<>#0; INDEX := ORD(CH)-ORD('0')-1; IF INDEX IN [0..15] THEN TAB[INDEX]:= (TAB[INDEX]+1) AND 15; UNTIL INDEX=-1; END; (* INSTALL *) BEGIN ERRORLINES:= 0; WRITE(#147); IF RWINDOW(2)=80 THEN BEGIN WINDOW(20,0,60,24,1); FAST END; WRITEHEAD; OPEN(CMD,8,15); LOAD(SYSNAME,0); LOAD(EDITORNAME,0); LOAD(COMPILERNAME,1); REPEAT WRITEHEAD; DISPLAY(1,1, 7,'1. ÓYSTEM STARTEN'); DISPLAY(1,1, 9,'2. ÆEHLERMELDUNGEN KOPIEREN'); DISPLAY(1,1,11,"3. 'ÐÁÓ.ÌÉÂ' KOPIEREN"); DISPLAY(1,1,13,'4. ÓYSTEMDISKETTE KOPIEREN'); DISPLAY(1,1,15,'5. ÓYSTEM NEU KONFIGURIEREN'); DISPLAY(1,1,17,'6. ÁBBRUCH (ÁUSGANG ZU ÂÁÓÉÃ)'); DISPLAY(1,0,20,'==>1' #157); READLN(CH); CASE CH OF '1': BEGIN BANK:=0; SYS(COLD); END; '2': BEGIN LOADERRORS; INSERTDISK; SAVEERRORS END; '3': BEGIN INSERTDISK; SAVE(LIBNAME,1,1024,8192); END; '4': BEGIN LOADERRORS; INSERTDISK; SAVE(PASCAL,0,7169,PEEK(4624)+256*PEEK(4625)); SAVE(SYSNAME,0,5120,5623); (* U1: ENDE HOCH *) SAVE(EDITORNAME,0,-9472,-256); SAVE(COMPILERNAME,1,-25856,-256); SAVE(LIBNAME,1,1024,8192); SAVEERRORS; END; '5': INSTALL; ELSE END; (* CASE *) UNTIL CH='6'; END.