DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦0377eaee4⟧ TextFile

    Length: 12416 (0x3080)
    Types: TextFile
    Names: »CONFIG.PAS«

Derivation

└─⟦1a1ae220f⟧ Bits:30004190 COMPAS Pascal v.2.2
    └─ ⟦this⟧ »CONFIG.PAS« 
└─⟦693a7a378⟧ Bits:30003305 COMPAS, RcTekst, RcKalk, RCComal80 til RC703
    └─ ⟦this⟧ »CONFIG.PAS« 
└─⟦6bdda2365⟧ Bits:30005253 COMPAS Pascal v2.21 til CR7
    └─ ⟦this⟧ »CONFIG.PAS« 
└─⟦856c4d8a3⟧ Bits:30003073 SW1729 COMPAS Pascal v2.20 installationsdiskette til Piccolo
    └─ ⟦this⟧ »CONFIG.PAS« 
└─⟦dea633962⟧ Bits:30003306 PROMbrænder software til RC703
    └─ ⟦this⟧ »CONFIG.PAS« 
└─⟦f5abb7d57⟧ Bits:30005754 SW1329/D8 COMPAS Pascal v2.20 (RC703)
    └─ ⟦this⟧ »CONFIG.PAS« 

TextFile

PROGRAM CONFIG; æ$A+,C-,R-,W1å
LABEL EXIT;
TYPE
  STR4 = STRINGÆ4Å;
  STR5 = STRINGÆ5Å;
  STR8 = STRINGÆ8Å;
  STR12 = STRINGÆ12Å;
  STR16 = STRINGÆ16Å;
  STR24 = STRINGÆ24Å;
  STR32 = STRINGÆ32Å;
  STR36 = STRINGÆ36Å;
  CHARSET = SET OF CHAR;
  DATAREC = RECORD
	      WIDTH,HEIGHT: BYTE;
	      SCROLLF: BOOLEAN;
	      GXYLS: STR8;
	      GXYSS,GXYTS: STR4;
	      LINB4COL: BOOLEAN;
	      COOROFS,COORFMT: BYTE;
	      CESS,CELS: STR8;
	      GXYR,CESR,CELR: INTEGER;
	      PATCH: ARRAYÆ0..127Å OF BYTE;
	      CONFNAME: STR32;
	      BACKUPF,AUTOF: BOOLEAN;
	      KDELAY: INTEGER;
	      KEYS: ARRAYÆ1..2,1..24Å OF STR8;
	      ILNS,DLNS,RONS,ROFS: STR8;
	    END;
VAR
  CF: FILE;
  DF: FILE OF DATAREC;
  CFN: STR16;
  DATA,DBUF: DATAREC;
  LIST: ARRAYÆ1..50Å OF STR32;
  B1: ARRAYÆ0..255Å 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(YES: BOOLEAN): STR4;
BEGIN
  IF YES THEN YESNO:='YES' ELSE YESNO:='NO';
END;

FUNCTION KEYSEQ(KS: STR8): STR32;
VAR
  I: INTEGER;
  S: STR32;
BEGIN
  IF KS='' THEN KEYSEQ:='Undefined' ELSE
  BEGIN
    S:='';
    FOR I:=1 TO LEN(KS) DO
    CASE KSÆIÅ OF
      @32..@126,@128..@255: S:=S+'"'+KSÆIÅ+'" ';
      @8: S:=S+'BS ';
      @13: S:=S+'CR ';
      @27: S:=S+'ESC ';
      @127: S:=S+'DEL ';
    OTHERWISE
      S:=S+'^'+CHR(ORD(KSÆIÅ)+64)+' ';
    END;
    KEYSEQ:=COPY(S,1,LEN(S)-1);
  END;
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: BOOLEAN;
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');
  READYN:=S='YES'; WRITELN;
END;

FUNCTION SELECT(PROMPT: STR36; 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;

æ$I CFIGIF.PASå

PROCEDURE LSCONFIG(LOAD: BOOLEAN);
VAR
  I,C,CC: INTEGER;
  CH: CHAR;
  DONE: BOOLEAN;
  LS: STR4;

PROCEDURE LOADC;
VAR
  CH: CHAR;
BEGIN
  IF LISTÆ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(DF,C-1); WRITE(DF,DATA);
  LISTÆCÅ:=DATA.CONFNAME; 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),'. ',LISTÆ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>50 THEN CC:=1;
	  END;
    END;
  UNTIL DONE;
END;

PROCEDURE GETDATA;
VAR
  A,I,J: INTEGER;

PROCEDURE LVECT(VAR V: INTEGER; A: INTEGER);
BEGIN
  IF B1ÆAÅ=0 THEN V:=0 ELSE V:=B1ÆA+1Å+SWAP(B1ÆA+2Å);
END;

BEGIN
  WITH DATA DO
  BEGIN
    SEEK(CF,0); BLOCKREAD(CF,B1,2);
    A:=B1Æ1Å+SWAP(B1Æ2Å);
    B2S:=(A-$100) DIV 128; B2A:=(A-$100) MOD 128;
    SEEK(CF,B2S); BLOCKREAD(CF,B2,4);
    WIDTH:=B1Æ10Å;
    HEIGHT:=B1Æ11Å;
    SCROLLF:=B1Æ12Å=0;
    MOVE(B1Æ13Å,GXYLS,9);
    MOVE(B1Æ22Å,GXYSS,5);
    MOVE(B1Æ27Å,GXYTS,5);
    LINB4COL:=B1Æ32Å=0;
    COOROFS:=B1Æ33Å;
    COORFMT:=B1Æ34Å;
    MOVE(B1Æ35Å,CESS,9);
    MOVE(B1Æ44Å,CELS,9);
    LVECT(GXYR,53);
    LVECT(CESR,56);
    LVECT(CELR,59);
    MOVE(B1Æ64Å,PATCH,128);
    MOVE(B1Æ192Å,CONFNAMEÆ1Å,32);
    I:=223; WHILE (I>=192) AND (B1ÆIÅ=32) DO I:=I-1;
    CONFNAMEÆ0Å:=CHR(I-191);
    BACKUPF:=B2ÆB2A+5Å<>0;
    AUTOF:=B2ÆB2A+6Å<>0;
    KDELAY:=B2ÆB2A+7Å+SWAP(B2ÆB2A+8Å);
    A:=B2A+9;
    FOR I:=1 TO 2 DO FOR J:=1 TO 24 DO
    BEGIN
      MOVE(B2ÆAÅ,KEYSÆI,JÅ,B2ÆAÅ+1);
      A:=A+B2ÆAÅ+1;
    END;
    MOVE(B2ÆB2A+265Å,ILNS,9);
    MOVE(B2ÆB2A+274Å,DLNS,9);
    MOVE(B2ÆB2A+283Å,RONS,9);
    MOVE(B2ÆB2A+292Å,ROFS,9);
  END;
END;

PROCEDURE PUTDATA;
VAR
  A,I,J: INTEGER;

PROCEDURE SVECT(V,A: INTEGER);
BEGIN
  IF V=0 THEN
  BEGIN
    B1ÆAÅ:=$00; B1ÆA+1Å:=$B7; B1ÆA+2Å:=$C9;
  END ELSE
  BEGIN
    B1ÆAÅ:=$C3; B1ÆA+1Å:=LO(V); B1ÆA+2Å:=HI(V);
  END;
END;

BEGIN
  WITH DATA DO
  BEGIN
    B1Æ10Å:=WIDTH;
    B1Æ11Å:=HEIGHT;
    IF SCROLLF THEN B1Æ12Å:=0 ELSE B1Æ12Å:=255;
    MOVE(GXYLS,B1Æ13Å,9);
    MOVE(GXYSS,B1Æ22Å,5);
    MOVE(GXYTS,B1Æ27Å,5);
    IF LINB4COL THEN B1Æ32Å:=0 ELSE B1Æ32Å:=255;
    B1Æ33Å:=COOROFS;
    B1Æ34Å:=COORFMT;
    MOVE(CESS,B1Æ35Å,9);
    MOVE(CELS,B1Æ44Å,9);
    SVECT(GXYR,53);
    SVECT(CESR,56);
    SVECT(CELR,59);
    MOVE(PATCH,B1Æ64Å,128);
    MOVE(CONFNAMEÆ1Å,B1Æ192Å,LEN(CONFNAME));
    FOR I:=LEN(CONFNAME) TO 31 DO B1ÆI+192Å:=32;
    IF BACKUPF THEN B2ÆB2A+5Å:=255 ELSE B2ÆB2A+5Å:=0;
    IF AUTOF THEN B2ÆB2A+6Å:=255 ELSE B2ÆB2A+6Å:=0;
    B2ÆB2A+7Å:=LO(KDELAY);
    B2ÆB2A+8Å:=HI(KDELAY);
    A:=B2A+9;
    FOR I:=1 TO 2 DO FOR J:=1 TO 24 DO
    BEGIN
      MOVE(KEYSÆI,JÅ,B2ÆAÅ,LEN(KEYSÆI,JÅ)+1);
      A:=A+LEN(KEYSÆI,JÅ)+1;
    END;
    MOVE(ILNS,B2ÆB2A+265Å,9);
    MOVE(DLNS,B2ÆB2A+274Å,9);
    MOVE(RONS,B2ÆB2A+283Å,9);
    MOVE(ROFS,B2ÆB2A+292Å,9);
    SEEK(CF,0); BLOCKWRITE(CF,B1,2);
    SEEK(CF,B2S); BLOCKWRITE(CF,B2,4);
  END;
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;
  PRESSRETURN;
  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 V2.20 CONFIGURATION PROGRAM');
  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 NOT READYN THEN GOTO EXIT;
  WRITELN;
  ASSIGN(DF,'CONFIG.DAT'); æ$I-å RESET(DF) æ$I+å;
  IF IORES=0 THEN
  FOR I:=1 TO 50 DO
  BEGIN
    READ(DF,DBUF); LISTÆIÅ:=DBUF.CONFNAME;
  END ELSE
  BEGIN
    WRITELN('The CONFIG.DAT file is missing from the current drive. The');
    WRITELN('CONFIG program cannot be run without this file, so copy it');
    WRITELN('onto your disk, and run CONFIG 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');
      WRITELN('name. You may insert another disk if you wish.');
      WRITELN;
      BDOS(37,-1);
    END;
  UNTIL I=0;
  GETDATA;
  REPEAT
    WRITELN('CONFIGURATION PROGRAM MAIN MENU:');
    WRITELN;
    WRITELN('1. Load a standard configuration');
    WRITELN('2. Edit configuration parameters');
    WRITELN('3. Save a standard configuration');
    WRITELN;
    WRITELN('CURRENT CONFIGURATION: ',DATA.CONFNAME);
    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 THEN
  BEGIN
    PUTDATA; CLOSE(CF);
  END;
  CLOSE(DF);
  EXIT:
END.
«eof»