|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 19840 (0x4d80)
Types: TextFile
Names: »INSTALL.PAS«
└─⟦8e533ec5a⟧ Bits:30004189 COMPAS Pascal v3.02 til CR7
└─⟦this⟧ »INSTALL.PAS«
PROGRAM INSTALL; (*$A+,C-,R-*)
LABEL EXIT;
CONST
MAXTERM = 50;
TYPE
STR2 = STRINGÆ2Å;
STR3 = STRINGÆ3Å;
STR4 = STRINGÆ4Å;
STR5 = STRINGÆ5Å;
STR8 = STRINGÆ8Å;
STR12 = STRINGÆ12Å;
STR16 = STRINGÆ16Å;
STR24 = STRINGÆ24Å;
STR31 = STRINGÆ31Å;
STR36 = STRINGÆ36Å;
STR48 = STRINGÆ48Å;
CHARSET = SET OF CHAR;
TNAMSTR = STRINGÆ31Å;
DATAREC = RECORD
TERMNAME: TNAMSTR;
WIDTH,HEIGHT: BYTE;
GXYLS: STR8;
GXYSS,GXYTS: STR4;
COLB4LIN,COOROFS,COORFMT: BYTE;
CLHS,CESS,CELS,ILNS,DLNS,RONS,ROFS: STR8;
VGXY,VLCS,VLCI,VLCO,VLLO,VLAO,VLAI: INTEGER;
PATCH: ARRAYÆ0..511Å OF BYTE;
BACKF,INSMF,AUTOF,TABSF: BYTE;
RDELAY: INTEGER;
ALTKEY: ARRAYÆ0..255Å OF BYTE;
END;
VAR
CF: FILE;
TF: FILE OF TNAMSTR;
DF: FILE OF DATAREC;
CFN: STR16;
DATA: DATAREC;
TNAM: ARRAYÆ1..MAXTERMÅ OF STR31;
B1: ARRAYÆ0..767Å OF BYTE;
B2: ARRAYÆ0..511Å OF BYTE;
I,B2S,B2A: INTEGER;
CH: CHAR;
FUNCTION UPCASE(S: STR24): STR24;
VAR
I: INTEGER;
U: STR24;
BEGIN
U:='';
FOR I:=1 TO LEN(S) DO
IF (SÆIÅ>='a') AND (SÆIÅ<='z') THEN
U:=U+CHR(ORD(SÆIÅ)-32) ELSE U:=U+SÆIÅ;
UPCASE:=U;
END;
FUNCTION HEX(NUMBER,DIGITS: INTEGER): STR4;
CONST
HEXDIGITS: ARRAYÆ0..15Å OF CHAR = '0123456789ABCDEF';
VAR
D: INTEGER;
H: STR4;
BEGIN
HÆ0Å:=CHR(DIGITS);
FOR D:=DIGITS DOWNTO 1 DO
BEGIN
HÆDÅ:=HEXDIGITSÆNUMBER AND 15Å;
NUMBER:=NUMBER SHR 4;
END;
HEX:=H;
END;
FUNCTION HEXSEQ(SEQ: STR8): STR24;
VAR
I: INTEGER;
S: STR24;
BEGIN
IF SEQ='' THEN HEXSEQ:='Unconfigured' ELSE
BEGIN
S:='';
FOR I:=1 TO LEN(SEQ) DO S:=S+HEX(ORD(SEQÆIÅ),2)+' ';
HEXSEQ:=COPY(S,1,LEN(S)-1);
END;
END;
FUNCTION YESNO(FLAG: INTEGER): STR4;
BEGIN
IF FLAG<>0 THEN YESNO:='YES' ELSE YESNO:='NO';
END;
PROCEDURE BACKSP(N: INTEGER);
VAR
I: INTEGER;
BEGIN
FOR I:=1 TO N DO WRITE(^H' '^H);
END;
FUNCTION READNUM(MIN,MAX: INTEGER): INTEGER;
VAR
N,P: INTEGER;
OK: BOOLEAN;
S: STR5;
BEGIN
REPEAT
BUFLEN:=5; READ(S);
IF S='' THEN OK:=FALSE ELSE
BEGIN
VAL(S,N,P);
OK:=(P=0) AND (N>=MIN) AND (N<=MAX);
END;
IF NOT OK THEN BACKSP(LEN(S));
UNTIL OK;
WRITELN; READNUM:=N;
END;
FUNCTION READSEQ(MAXLEN: INTEGER): STR8;
CONST
HEXDIGITS: SET OF '0'..'f' = Æ'0'..'9','A'..'F','a'..'f'Å;
VAR
D,H,N,P: INTEGER;
ERROR: BOOLEAN;
SEQ: STR8;
S: STR24;
BEGIN
REPEAT
BUFLEN:=23; READ(S); S:=S+^M;
ERROR:=FALSE; P:=1; N:=0;
REPEAT
WHILE SÆPÅ=' ' DO P:=P+1;
IF (SÆPÅ IN HEXDIGITS) AND (N<MAXLEN) THEN
BEGIN
H:=0;
REPEAT
IF SÆPÅ IN Æ'0'..'9'Å THEN D:=ORD(SÆPÅ)-48 ELSE
IF SÆPÅ IN Æ'A'..'F'Å THEN D:=ORD(SÆPÅ)-55 ELSE
D:=ORD(SÆPÅ)-87;
H:=H*16+D; P:=P+1;
UNTIL NOT(SÆPÅ IN HEXDIGITS);
N:=N+1; SEQÆNÅ:=CHR(H);
END;
IF NOT(SÆPÅ IN Æ^M,' 'Å) THEN ERROR:=TRUE;
UNTIL (SÆPÅ=^M) OR ERROR;
IF ERROR THEN BACKSP(LEN(S)-1);
UNTIL NOT ERROR;
SEQÆ0Å:=CHR(N); WRITELN;
READSEQ:=SEQ;
END;
FUNCTION READYN: INTEGER;
VAR
S: STR4;
BEGIN
REPEAT
BUFLEN:=3; READ(S); S:=UPCASE(S);
IF (S<>'YES') AND (S<>'NO') THEN BACKSP(LEN(S));
UNTIL (S='YES') OR (S='NO');
IF S='YES' THEN READYN:=255 ELSE READYN:=0;
WRITELN;
END;
FUNCTION SELECT(PROMPT: STR48; OKCH: CHARSET): CHAR;
VAR
CH: CHAR;
BEGIN
WRITE(PROMPT,': ');
REPEAT
READ(KBD,CH);
IF (CH>='a') AND (CH<='z') THEN CH:=CHR(ORD(CH)-32);
UNTIL CH IN OKCH;
IF CH=^M THEN BACKSP(LEN(PROMPT)+2) ELSE
BEGIN
WRITELN(CH); WRITELN;
END;
SELECT:=CH;
END;
PROCEDURE PRESSRETURN;
VAR
CH: CHAR;
BEGIN
WRITE('Press RETURN...');
REPEAT READ(KBD,CH) UNTIL CH=^M;
BACKSP(15);
END;
PROCEDURE RESETDISKS;
BEGIN
BDOS(37,-1);
END;
PROCEDURE CONFIGURE;
VAR
CH: CHAR;
(*$I INSTCRT.PAS*)
PROCEDURE KEYBOARD;
TYPE
KEYREC = RECORD
VAL: BYTE; STR: STR12;
END;
CONST
STDKEY: ARRAYÆ1..40Å OF STR2 =
(^J,^S,^D,^A,^F,^Q^S,^Q^D,^E,^X,^Q^E,^Q^X,^R,^C,^Q^R,^Q^C,
@127,^G,^Q@127,^Q^Y,^T,^Y,^M,^I,^N,^V,^Z,^B,^W,^Q^F,^Q^A,
^L,^K^B,^K^K,^K^Y,^K^C,^K^V,^K^P,^K^H,^K^D,^K^X);
VAR
C,I,N,M: INTEGER;
CH,MC: CHAR;
S: STR12;
AKEY: ARRAYÆ1..40Å OF KEYREC;
FUNCTION KEYSTR(CH: CHAR): STR3;
BEGIN
CASE CH OF
@32..@126,@128..@255: KEYSTR:='"'+CH+'"';
@8: KEYSTR:='BS';
@13: KEYSTR:='CR';
@27: KEYSTR:='ESC';
@127: KEYSTR:='DEL';
OTHERWISE
KEYSTR:='^'+CHR(ORD(CH)+64);
END;
END;
FUNCTION KEYSEQ(KS: STR12): STR48;
VAR
I: INTEGER;
S: STR48;
BEGIN
S:='';
FOR I:=1 TO LEN(KS) DO S:=S+KEYSTR(KSÆIÅ)+' ';
KEYSEQ:=COPY(S,1,LEN(S)-1);
END;
PROCEDURE DELAKEY(I: INTEGER);
VAR
P: INTEGER;
BEGIN
FOR P:=I+1 TO N DO AKEYÆP-1Å:=AKEYÆPÅ; N:=N-1;
END;
PROCEDURE ADDAKEY;
VAR
I,L: INTEGER;
CH: CHAR;
S: STR12;
BEGIN
L:=0; FOR I:=1 TO N DO L:=L+LEN(AKEYÆNÅ.STR)+2;
IF (N=40) OR (L>240) THEN
WRITELN('No room for further definitions') ELSE
BEGIN
WRITE('Standard: ');
REPEAT
READ(KBD,CH);
I:=1; WHILE (I<40) AND (CH<>STDKEYÆIÅÆ1Å) DO I:=I+1;
IF STDKEYÆIÅÆ1Å=CH THEN
BEGIN
S:=CH; WRITE(KEYSEQ(CH),' '); L:=LEN(KEYSEQ(CH))+1;
IF LEN(STDKEYÆIÅ)=2 THEN
BEGIN
READ(KBD,CH); S:=S+CH;
I:=1; WHILE (I<40) AND (S<>STDKEYÆIÅ) DO I:=I+1;
IF S=STDKEYÆIÅ THEN
BEGIN
S:=S+CH; WRITE(KEYSEQ(CH),' '); L:=L+LEN(KEYSEQ(CH))+1;
END ELSE
BEGIN
S:=''; BACKSP(L);
END;
END;
END ELSE S:='';
UNTIL S<>'';
WRITE('':9-L,'Alternate: ');
S:='';
REPEAT
READ(KBD,CH);
IF (LEN(S)<12) AND (CH<>^M) THEN
BEGIN
IF LEN(S)>=1 THEN IF CH IN Æ^A..^ZÅ THEN CH:=CHR(ORD(CH)+64);
WRITE(KEYSTR(CH),' '); S:=S+CH;
END;
UNTIL CH=^M;
N:=N+1; AKEYÆNÅ.VAL:=I; AKEYÆNÅ.STR:=S;
WRITELN;
END;
WRITELN;
END;
PROCEDURE HELP;
BEGIN
WRITELN('To be able to benefit fully from the special keys offered by');
WRITELN('your terminal''s keyboard, COMPAS allows you to define alternate');
WRITELN('keys to invoke selected editor functions. A typical example of');
WRITELN('alternate keys is defining your cursor arrows to do the same as');
WRITELN('^S, ^D, ^E and ^X');
WRITELN;
WRITELN('To add an alternate key definition, you must first select the');
WRITELN('function for which you want to create an alternative. This you');
WRITELN('do by entering the standard key sequence, i.e. the sequence lis-');
WRITELN('ted in the manual. Once you have selected a function, you will');
WRITELN('be prompted for an alternate key sequence, to which you must an-');
WRITELN('swer by entering the alternate sequence. To end the alternate');
WRITELN('sequence, press RETURN.');
WRITELN;
WRITELN('Note that it is actually possible to override the standard key');
WRITELN('sequences. If you for instance define ^J to be an alternate key');
WRITELN('for the ^X function, the original ^J function will become inac-');
WRITELN('cessible unless you define an alternate sequence for it as well.');
WRITELN;
PRESSRETURN;
END;
BEGIN (*KEYBOARD*)
WITH DATA DO
BEGIN
I:=0; N:=0; C:=1;
WHILE ALTKEYÆIÅ<>0 DO
BEGIN
N:=N+1;
MOVE(ALTKEYÆIÅ,AKEYÆNÅ,ALTKEYÆI+1Å+2);
I:=I+ALTKEYÆI+1Å+2;
END;
REPEAT
WRITELN('ALTERNATE KEY DEFINITIONS:');
WRITELN;
IF N=0 THEN
BEGIN
WRITELN('No alternate keys defined'); WRITELN;
CH:=SELECT('Add(Z), Exit(X), Help(Y)',Æ'Z','X','Y'Å);
END ELSE
BEGIN
IF C+9>N THEN M:=N-C ELSE M:=9;
FOR I:=0 TO M DO
BEGIN
S:=KEYSEQ(STDKEYÆAKEYÆC+IÅ.VALÅ);
WRITE(CHR(I+65),'. Standard: ',S,'':9-LEN(S));
WRITELN('Alternate: ',KEYSEQ(AKEYÆC+IÅ.STR));
END;
IF N>10 THEN
BEGIN
WRITELN; WRITELN('Press RETURN to view more');
END;
WRITELN;
MC:=CHR(M+65);
CH:=SELECT('Delete(A-'+MC+'), Add(Z), Exit(X), Help(Y)',
Æ'A'..MC,'Z','X','Y',^MÅ);
END;
CASE CH OF
'A'..'J': DELAKEY(C+ORD(CH)-65);
'Z': ADDAKEY;
'Y': HELP;
^M: BEGIN
C:=C+10; IF C>N THEN C:=1;
END;
END;
UNTIL CH='X';
I:=0;
FOR N:=1 TO N DO
BEGIN
MOVE(AKEYÆNÅ,ALTKEYÆIÅ,LEN(AKEYÆNÅ.STR)+2);
I:=I+LEN(AKEYÆNÅ.STR)+2;
END;
FILL(ALTKEYÆIÅ,256-I,0);
END;
END;
PROCEDURE MISC;
CONST
PA: STR36 = 'A. Use BAK files (YES/NO).........: ';
PB: STR36 = 'B. Insert mode on (YES/NO)........: ';
PC: STR36 = 'C. Auto-indent on (YES/NO)........: ';
PD: STR36 = 'D. TABS mode on (YES/NO)..........: ';
PE: STR36 = 'E. Replace prompt delay...........: ';
PF: STR36 = 'F. Configuration name.............: ';
VAR
CH: CHAR;
PROCEDURE HELP;
BEGIN
WRITELN('USE BAK FILES. This field must be either YES or NO. If it is');
WRITELN('set to YES, duplicate files will have their type changed to');
WRITELN('BAK when the SAVE command is used to save a file. Otherwise,');
WRITELN('such files are simply deleted.');
WRITELN;
WRITELN('INSERT MODE ON. This field defined the initial state of the');
WRITELN('INSERT mode when COMPAS is cold-started. YES means on and NO');
WRITELN('means off.');
WRITELN;
WRITELN('AUTO-INDENT ON. This field defines the initial state of the');
WRITELN('auto-indent tabulator when COMPAS is cold-started.');
WRITELN;
WRITELN('TABS MODE ON. This field defines the initial state of the TABS');
WRITELN('mode when COMPAS is cold-started.');
WRITELN;
PRESSRETURN;
WRITELN('REPLACE PROMPT DELAY. This field is used only by the find/re-');
WRITELN('place function in the editor. It defines the delay used when mo-');
WRITELN('ving the cursor alternately between the replace prompt and the');
WRITELN('text. Experiment to find a suitable value (typical values range');
WRITELN('from 200 to 1000).');
WRITELN;
WRITELN('CONFIGURATION NAME. This field defines the name of the current');
WRITELN('configuration (usually, it is the name of your computer). Up to');
WRITELN('31 characters may be entered.');
WRITELN;
PRESSRETURN;
END;
BEGIN (*MISC*)
WITH DATA DO
REPEAT
WRITELN('MISCELLANEOUS DATA:');
WRITELN;
WRITELN(PA,YESNO(BACKF));
WRITELN(PB,YESNO(INSMF));
WRITELN(PC,YESNO(AUTOF));
WRITELN(PD,YESNO(TABSF));
WRITELN(PE,RDELAY);
WRITELN(PF,TERMNAME);
WRITELN;
CH:=SELECT('Edit(A-F), Exit(X), Help(Y)',Æ'A'..'F','X','Y'Å);
CASE CH OF
'A': BEGIN
WRITE(PA); BACKF:=READYN; WRITELN;
END;
'B': BEGIN
WRITE(PB); INSMF:=READYN; WRITELN;
END;
'C': BEGIN
WRITE(PC); AUTOF:=READYN; WRITELN;
END;
'D': BEGIN
WRITE(PD); TABSF:=READYN; WRITELN;
END;
'E': BEGIN
WRITE(PE); RDELAY:=READNUM(0,32767); WRITELN;
END;
'F': BEGIN
WRITE(PF); BUFLEN:=31; READLN(TERMNAME); WRITELN;
END;
'Y': HELP;
END;
UNTIL CH='X';
END;
PROCEDURE CLEAR;
BEGIN
WRITE('Clear configuration data (YES/NO)? ');
IF READYN<>0 THEN
BEGIN
FILL(DATA,SIZE(DATA),0);
WITH DATA DO
BEGIN
WIDTH:=79; HEIGHT:=24; GXYLS:=@27'=';
COOROFS:=32; CLHS:=@26; BACKF:=255;
INSMF:=255; AUTOF:=255; RDELAY:=1000;
END;
END;
WRITELN;
END;
PROCEDURE HELP;
BEGIN
WRITELN('To do a complete installation of COMPAS you should go through');
WRITELN('all functions of this menu (the order in which you do it is of');
WRITELN('no importance, as long as you make sure that all fields within');
WRITELN('all menus have be inspected and modified if necessary).');
WRITELN;
WRITELN('CRT CONFIGURATION. This function is used to view and/or modify');
WRITELN('the CRT configuration table and the user patch area.');
WRITELN;
WRITELN('KEYBOARD CONFIGURATION. This function is used to view and/or');
WRITELN('modify alternate key definitions.');
WRITELN;
WRITELN('MISCELLANEOUS DATA. This function allows you to view and/or');
WRITELN('modify various system informations.');
WRITELN;
WRITELN('CLEAR CONFIGURATION DATA. This function will initialize all con-');
WRITELN('figuration data fields to some appropriate default values. If');
WRITELN('you are about to install a new terminal, use this function be-');
WRITELN('fore the above ones - this will save you the trouble of manually');
WRITELN('removing the existing values.');
WRITELN;
PRESSRETURN;
END;
BEGIN (*CONFIGURE*)
WITH DATA DO
REPEAT
WRITELN('MAIN CONFIGURATION MENU:');
WRITELN;
WRITELN('1. CRT configuration');
WRITELN('2. Keyboard configuration');
WRITELN('3. Miscellaneous data');
WRITELN('4. Clear configuration data');
WRITELN;
CH:=SELECT('Function(1-4), Exit(X), Help(Y)',Æ'1'..'4','X','Y'Å);
CASE CH OF
'1': CRT;
'2': KEYBOARD;
'3': MISC;
'4': CLEAR;
'Y': HELP;
END;
UNTIL CH='X';
END;
PROCEDURE LSCONFIG(LOAD: BOOLEAN);
VAR
I,C,CC: INTEGER;
CH: CHAR;
DONE: BOOLEAN;
LS: STR4;
PROCEDURE LOADC;
VAR
CH: CHAR;
BEGIN
IF TNAMÆCÅ<>'' THEN
BEGIN
SEEK(DF,C-1); READ(DF,DATA); DONE:=TRUE;
END ELSE
BEGIN
WRITE('ERROR: Undefined configuration. Press RETURN...');
REPEAT READ(KBD,CH) UNTIL CH=^M;
BACKSP(47);
END;
END;
PROCEDURE SAVEC;
BEGIN
SEEK(TF,C-1); WRITE(TF,DATA.TERMNAME);
SEEK(DF,C-1); WRITE(DF,DATA);
TNAMÆCÅ:=DATA.TERMNAME; DONE:=TRUE;
END;
PROCEDURE LOADH;
BEGIN
WRITELN('To load a standard configuration, simply press the letter de-');
WRITELN('noting that configuration. If none of the standard configura-');
WRITELN('tions mentioned match your computer system, you will have to');
WRITELN('install COMPAS manually (using function 2 on the main menu).');
WRITELN;
PRESSRETURN;
END;
PROCEDURE SAVEH;
BEGIN
WRITELN('To save the current configuration as a standard configuration,');
WRITELN('use the RETURN key to move to a section that contains an empty');
WRITELN('entry, and enter the letter of that entry. You may, if you wish');
WRITELN('save the current configuration on top of an existing configura-');
WRITELN('tion, in which case that cofiguration is lost. Note that if the');
WRITELN('terminal name of the configuration you save is empty, you will');
WRITELN('not be able to load the configuration again.');
WRITELN;
PRESSRETURN;
END;
BEGIN (*LSCONFIG*)
CC:=1; DONE:=FALSE; IF LOAD THEN LS:='Load' ELSE LS:='Save';
REPEAT
WRITELN('STANDARD CONFIGURATIONS (MENU ',(CC+9) DIV 10,'):');
WRITELN;
FOR I:=0 TO 9 DO
WRITELN(CHR(I+65),'. ',TNAMÆCC+IÅ);
WRITELN;
WRITELN('Press RETURN to view more');
WRITELN;
CH:=SELECT(LS+'(A-J), Exit(X), Help(Y)',Æ'A'..'J','X','Y',^MÅ);
CASE CH OF
'A'..'J': BEGIN
C:=CC+ORD(CH)-65; IF LOAD THEN LOADC ELSE SAVEC;
END;
'X': DONE:=TRUE;
'Y': IF LOAD THEN LOADH ELSE SAVEH;
^M: BEGIN
CC:=CC+10; IF CC>MAXTERM THEN CC:=1;
END;
END;
UNTIL DONE;
END;
PROCEDURE GETDATA;
VAR
A: INTEGER;
BEGIN
SEEK(CF,0); BLOCKREAD(CF,B1,6);
A:=B1Æ1Å+SWAP(B1Æ2Å)+3;
B2S:=A DIV 128-2; B2A:=A MOD 128;
SEEK(CF,B2S); BLOCKREAD(CF,B2,4);
MOVE(B1Æ$20Å,DATA.TERMNAME,$285);
MOVE(B2ÆB2AÅ,DATA.BACKF,$106);
END;
PROCEDURE PUTDATA;
VAR
I: INTEGER;
BEGIN
MOVE(DATA.TERMNAME,B1Æ$20Å,$285);
MOVE(DATA.BACKF,B2ÆB2AÅ,$106);
SEEK(CF,0); BLOCKWRITE(CF,B1,6);
SEEK(CF,B2S); BLOCKWRITE(CF,B2,4);
END;
PROCEDURE HELP;
BEGIN
WRITELN('LOAD STANDARD CONFIGURATION. This function is used to load a');
WRITELN('standard configuration, i.e. to load all the parameters that');
WRITELN('define a specific computer system. If your computer system is');
WRITELN('among the standard configurations, then all you need to do to');
WRITELN('install COMPAS is to load that configuration and exit. If it');
WRITELN('is not, you must define your computer system manually, using');
WRITELN('the function described below.');
WRITELN;
WRITELN('EDIT CONFIGURATION PARAMETERS. This function is used to set up');
WRITELN('new configurations and to edit an existing configuration. It');
WRITELN('allows you to view and/or modify all parameters that define a');
WRITELN('specific computer system. If your computer is not mentioned in');
WRITELN('the list of standard configurations (see above), you must use');
WRITELN('this function to define it manually.');
WRITELN;
WRITELN('SAVE A STANDARD CONFIGURATION. This function is used to add');
WRITELN('an entry to the list of standard configurations. Normally, you');
WRITELN('will not need to use this function.');
WRITELN;
PRESSRETURN;
END;
BEGIN
WRITELN;
WRITELN(' COMPAS-80 V3.02 INSTALL PROGRAM');
WRITELN(' CP/M-80 version');
WRITELN;
WRITELN(' Copyright (C) 1983 by');
WRITELN(' Poly-Data microcenter ApS');
WRITELN;
WRITELN;
WRITELN('This program is used to view and/or modify the configuration');
WRITELN('parameters of COMPAS. If you have bought an unconfigured copy');
WRITELN('of COMPAS, you should use this program to define your computer');
WRITELN('system before running COMPAS. If your copy is already set up');
WRITELN('for a specific computer system, there is no need to run this');
WRITELN('program, unless you wish to make changes to suit your indivi-');
WRITELN('dual needs.');
WRITELN;
WRITE('Do you wish to proceed (YES/NO)? ');
IF READYN=0 THEN GOTO EXIT;
WRITELN;
ASSIGN(TF,'INSTALL.TRM'); ASSIGN(DF,'INSTALL.DAT');
(*$I-*) RESET(TF); RESET(DF); (*$I+*)
IF IORES=0 THEN
FOR I:=1 TO MAXTERM DO READ(TF,TNAMÆIÅ) ELSE
BEGIN
WRITELN('The INSTALL.TRM and INSTALL.DAT files are not present on the');
WRITELN('current drive. The INSTALL program cannot be run without these');
WRITELN('files, so copy them onto your disk, and run INSTALL again.');
GOTO EXIT;
END;
REPEAT
WRITE('Input file name (RETURN for COMPAS.COM)? ');
BUFLEN:=14; READLN(CFN); WRITELN;
IF CFN='' THEN CFN:='COMPAS.COM';
ASSIGN(CF,CFN); (*$I-*) RESET(CF) (*$I+*);
I:=IORES;
IF I>0 THEN
BEGIN
WRITELN('That file does not exist. Please specify another file name.');
WRITELN('You may insert another disk if you wish.');
WRITELN;
RESETDISKS;
END;
UNTIL I=0;
GETDATA;
REPEAT
WRITELN('COMPAS-80 INSTALL PROGRAM MAIN MENU:');
WRITELN;
WRITELN('1. Load a standard configuration');
WRITELN('2. Edit configuration parameters');
WRITELN('3. Save a standard configuration');
WRITELN;
WRITE('CURRENT CONFIGURATION: ');
IF DATA.TERMNAME<>'' THEN
WRITELN(DATA.TERMNAME) ELSE WRITELN('No terminal selected');
WRITELN;
CH:=SELECT('Function(1-3), Exit(X), Help(Y)',Æ'1'..'3','X','Y'Å);
CASE CH OF
'1': LSCONFIG(TRUE);
'2': CONFIGURE;
'3': LSCONFIG(FALSE);
'Y': HELP;
END;
UNTIL CH='X';
WRITE('Save configuration in ',CFN,' (YES/NO)? ');
IF READYN<>0 THEN
BEGIN
PUTDATA; CLOSE(CF);
END;
CLOSE(TF); CLOSE(DF);
EXIT:
END.
«eof»