|
|
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: 3840 (0xf00)
Types: TextFile
Names: »CREATE.PAS«
└─⟦dea633962⟧ Bits:30003306 PROMbrænder software til RC703
└─⟦this⟧ »CREATE.PAS«
PROGRAM MASTERCREATE; æ$R-,A+,W1å
TYPE
STR3 = STRINGÆ3Å;
STR5 = STRINGÆ5Å;
STR12 = STRINGÆ12Å;
STR64 = STRINGÆ64Å;
CHARSET = SET OF CHAR;
VAR
SERIAL,NFILES,I: INTEGER;
CH: CHAR;
DCODE: STR3;
NAME: ARRAYÆ1..20Å OF STR12;
SF: TEXT;
FUNCTION BCD(NUMBER,DIGITS: INTEGER): STR5;
VAR
D: INTEGER;
B: STR5;
BEGIN
BÆ0Å:=CHR(DIGITS);
FOR D:=DIGITS DOWNTO 1 DO
BEGIN
BÆDÅ:=CHR(NUMBER MOD 10+48); NUMBER:=NUMBER DIV 10;
END;
BCD:=B;
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 SELECT(PROMPT: STR64; 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)) ELSE
BEGIN
WRITELN(CH);
END;
SELECT:=CH;
END;
PROCEDURE CREATEDISK;
VAR
NS,I: INTEGER;
DEST: CHAR;
S: STR5;
CFI,CFO: FILE;
B: ARRAYÆ0..32767Å OF BYTE;
PROCEDURE LOADBLOCK;
VAR
L: INTEGER;
BEGIN
L:=LENGTH(CFI)-POSITION(CFI);
IF L>256 THEN NS:=256 ELSE NS:=L;
IF NS>0 THEN BLOCKREAD(CFI,B,NS);
END;
PROCEDURE SAVEBLOCK;
BEGIN
IF NS>0 THEN BLOCKWRITE(CFO,B,NS);
END;
PROCEDURE COPYFILE(FN: STR12);
BEGIN
WRITELN('Kopierer ',FN);
ASSIGN(CFI,'A:'+FN); RESET(CFI); LOADBLOCK;
ASSIGN(CFO,DEST+':'+FN); REWRITE(CFO); SAVEBLOCK;
REPEAT
LOADBLOCK; SAVEBLOCK;
UNTIL NS=0;
CLOSE(CFO); CLOSE(CFI);
END;
BEGIN æCREATEDISKå
DEST:=SELECT('Kopier til hvilken diskettestation (B-F)? ',Æ'A'..'F',^MÅ);
IF DEST<>^M THEN
BEGIN
BDOS(37,-1);
WRITELN;
WRITELN('Serienummeret på denne kopi er ',DCODE,BCD(SERIAL,4));
WRITELN;
WRITELN('Kopierer COMPAS.COM');
ASSIGN(CFI,'A:COMPAS.COM'); RESET(CFI); LOADBLOCK;
FOR I:=1 TO 3 DO BÆI+2Å:=ORD(DCODEÆIÅ)+$57;
S:=BCD(SERIAL,4);
FOR I:=1 TO 4 DO BÆI+5Å:=ORD(SÆIÅ)+$57;
ASSIGN(CFO,DEST+':COMPAS.COM'); REWRITE(CFO); SAVEBLOCK;
REPEAT
LOADBLOCK; SAVEBLOCK;
UNTIL NS=0;
CLOSE(CFO); CLOSE(CFI);
FOR I:=1 TO NFILES DO COPYFILE(NAMEÆIÅ);
SERIAL:=SERIAL+1;
WRITELN;
END;
END;
PROCEDURE SETSERIAL;
VAR
CH: CHAR;
BEGIN
WRITELN('Det næste serienummer er ',BCD(SERIAL,4));
CH:=SELECT('Ønskes dette rettet (J/N)? ',Æ'J','N'Å);
IF CH='J' THEN
BEGIN
WRITE('Næste serienummer? '); SERIAL:=READNUM(0,9999);
END;
WRITELN;
END;
BEGIN æCREATEå
WRITELN;
WRITELN(' COMPAS MASTER DISK KOPIERINGSPROGRAM');
WRITELN;
WRITELN(' Copyright (C) 1983 by');
WRITELN(' Poly-Data microcenter ApS');
WRITELN;
WRITELN;
ASSIGN(SF,'A:CREATE.DAT'); RESET(SF);
READLN(SF,DCODE);
READLN(SF,SERIAL);
NFILES:=0;
WHILE NOT EOF(SF) DO
BEGIN
NFILES:=NFILES+1; READLN(SF,NAMEÆNFILESÅ);
END;
CLOSE(SF);
REPEAT
WRITELN('VÆLG FRA DENNE MENU:');
WRITELN;
WRITELN('1. Kopier en ny master disk');
WRITELN('2. Ret serienummer');
WRITELN;
CH:=SELECT('Funktion(1-2), Slut(S)? ',Æ'1'..'2','S'Å);
WRITELN;
CASE CH OF
'1': CREATEDISK;
'2': SETSERIAL;
END;
UNTIL CH='S';
REWRITE(SF);
WRITELN(SF,DCODE);
WRITELN(SF,SERIAL);
FOR I:=1 TO NFILES DO WRITELN(SF,NAMEÆIÅ);
CLOSE(SF);
END.
«eof»