|
|
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: 8192 (0x2000)
Types: TextFile
Names: »DSIMTLSP.PAS«
└─⟦da1b76629⟧ Bits:30008866 Indeholder bla. RCKAT
└─⟦this⟧ »DSIMTLSP.PAS«
OVERLAY PROCEDURE LAES(FILN: STRING14);
BEGIN
ASSIGN(FIL,FILN);
RESET(FIL);
IF IORES<>0 THEN WRITELN(CHR(07),
' Fejl, Kan ikke finde "',FILN,'" !!') ELSE
BEGIN
BUFPEG:=BUFMAXÆ1Å;
PAKCHR:=CHR(0);
BUFPOSÆ2,1Å:=BUFPEG;
J:=BUFPEG; L:=1;
I:=-1;
WHILE (POSITION(FIL)<LENGTH(FIL)) AND
(BUFPEG<SIZE(BUFFER)) AND
(I<>MAXINT) DO
BEGIN
BLOCKREAD(FIL,IOBUFÆ1Å,1);
I:=0;
WHILE I<128 DO
BEGIN
I:=SUCC(I);
IF DEF.BFTYPE<4 THEN IOBUFÆIÅ:=CHR(ORD(IOBUFÆIÅ) AND $7F);
IF (IOBUFÆIÅ=CHR(26)) AND (NOT DUPR) THEN I:=MAXINT ELSE
BEGIN
IF PUTBUF(IOBUFÆIÅ) THEN ;
IF CRLF_SW THEN
BEGIN
L:=SUCC(L);
J:=BUFPEG;
IF (PRED(L) MOD 20)=0 THEN
BUFPOSÆ2,SUCC(PRED(L) DIV 20)Å:=BUFPEG;
END;
END;
END;
END;
IF (BUFPEG>=SIZE(BUFFER)) OR (I<0) THEN
BEGIN
IF I<0 THEN WRITELN(' Indlæsning ok, men filen er tom !!') ELSE
WRITELN(CHR(07),' Ikke nok plads i fil-bufferen !!');
BUF_CLR(2);
END ELSE
BEGIN
BUFELINÆ2Å:=L;
FNAV:=FILN;
BUFMINÆ2Å:=SIZE(BUFFER)-(BUFPEG-BUFMAXÆ1Å);
BUF_RES(2);
MOVE(BUFFERÆSUCC(BUFMAXÆ1Å)Å,BUFFERÆSUCC(BUFMINÆ2Å)Å,
BUFPEG-BUFMAXÆ1Å);
FOR I:=1 TO (SUCC(PRED(L) DIV 20)) DO
BUFPOSÆ2,IÅ:=BUFPOSÆ2,IÅ+BUFMINÆ2Å-BUFMAXÆ1Å;
BUFMAXÆ2Å:=SIZE(BUFFER);
WRITELN(' Indlæsning ok.');
END;
END;
CLOSE(FIL);
END;
OVERLAY PROCEDURE SKRIV(FRA,TIL: INTEGER; FILN: STRING14);
LABEL SLUT;
BEGIN
NYDISK;
ASSIGN(FIL,FILN);
RESET(FIL);
I:=IORES;
CLOSE(FIL);
IF I=0 THEN
BEGIN
WRITE(' Filen findes i forvejen. Overskriv? (J/N): ');
REPEAT UNTIL GETCON(CH) AND ((CH='J') OR (CH='N'));
IF CH='N' THEN
BEGIN
WRITELN('N');
WRITELN(' Intet skrevet, filen uændret!!');
GOTO SLUT;
END;
WRITELN('J');
END;
ASSIGN(FIL,FILN);
REWRITE(FIL);
IF IORES<>0 THEN
BEGIN
CLOSE(FIL);
WRITELN(' Kan ikke åbne "',FILN,'"');
GOTO SLUT;
END;
FIND(SUCC(TIL)); I:=BUFPEG;
FIND(FRA);
SETBUF(BUFPEG);
IF DUPR THEN I:=PRED(I) ELSE
BEGIN
CH:=BUFFERÆSUCC(I)Å;
BUFFERÆSUCC(I)Å:=CHR(26);
END;
J:=0;
WHILE (BUFPEG<SUCC(I)) OR (PAKCNT<>0) DO
BEGIN
GETBUF(CH2);
OK_SW:=CRTL;
IF NOT CRTL THEN
CASE CH OF
@10,@13,@26,@32..@127: OK_SW:=TRUE;
END;
IF OK_SW THEN
BEGIN
J:=SUCC(J);
IOBUFÆJÅ:=CH2;
IF EKKO THEN IF CH2<>CHR(26) THEN PUTCON(CH2);
END;
IF (J=128) OR ((BUFPEG>=SUCC(I)) AND (PAKCNT=0)) THEN
BEGIN
BLOCKWRITE(FIL,IOBUFÆ1Å,1);
J:=0;
END;
END;
IF (NOT DUPR) THEN BUFFERÆSUCC(I)Å:=CH;
J:=IORES;
CLOSE(FIL);
IF EKKO THEN WRITELN;
CASE J OF
0: WRITELN(' Udskrivning ok.');
13: WRITELN(' Fejl i udskrivning, disk fuld !!');
OTHERWISE
WRITELN(' Fejl i udskrivning, I/O error ',J);
END;
SLUT:
END;
OVERLAY PROCEDURE PRINT(FRA,TIL: INTEGER);
LABEL UD;
BEGIN
FIND(SUCC(TIL)); I:=BUFPEG;
FIND(FRA);
SETBUF(BUFPEG);
WHILE (BUFPEG<I) OR (PAKCNT<>0) DO
BEGIN
IF GETCON(CH) THEN
BEGIN
IF EKKO THEN
BEGIN
WRITELN; WRITELN;
END;
WRITE(CHR(07),' Afbrydelse !! ',SUCC(I-BUFPEG):5,
' Bytes tilbage i bufferen. Stop? (J/N): ');
REPEAT UNTIL GETCON(CH) AND (CH IN Æ'J','N'Å);
WRITELN(CH);
IF CH = 'J' THEN
BEGIN
WRITELN(' Print stoppet.');
GOTO UD;
END;
IF EKKO THEN WRITELN;
END;
GETBUF(CH);
OK_SW:=CRTL;
IF NOT CRTL THEN
CASE CH OF
@10,@13,@26,@32..@127: OK_SW:=TRUE;
END;
IF OK_SW THEN
BEGIN
WRITE(LST,CH);
IF EKKO THEN PUTCON(CH);
END ELSE
BEGIN
WRITELN(LST,'<',CRTLTABÆORD(CH)Å,'>');
IF EKKO THEN WRITELN('<',CRTLTABÆORD(CH)Å,'>');
END;
END;
UD:
WRITELN(LST);
END;
OVERLAY PROCEDURE DUMP(FRA,TIL: INTEGER);
LABEL UD;
VAR
DLIN: INTEGER;
S0: STRINGÆ10Å;
S1: STRINGÆ50Å;
S2: STRINGÆ16Å;
HX: ARRAYÆ0..15Å OF CHAR;
SW: BOOLEAN;
PROCEDURE SKR;
BEGIN
IF DLIN>0 THEN
BEGIN
STR(DLIN+10000:5,S0);
S0:=CONCAT(COPY(S0,2,4),' ');
END ELSE S0:=' ';
S0:=CONCAT(S0,HXÆ(O DIV 4096) MOD 16Å,HXÆ(O DIV 256) MOD 16Å,
HXÆ(O DIV 16) MOD 16Å,HXÆO MOD 16Å);
WHILE LEN(S1)<48 DO S1:=CONCAT(S1,' ');
WHILE LEN(S2)<16 DO S2:=CONCAT(S2,' ');
IF DUPR THEN WRITELN(LST,S0,' ',S1,' >',S2,'<');
IF (NOT DUPR) OR EKKO THEN WRITELN(S0,' ',S1,' >',S2,'<');
O:=O+16; W:=SUCC(W);
DLIN:=-1; SW:=FALSE;
S1:=''; S2:='';
END;
BEGIN
HX:='0123456789ABCDEF'; S1:=''; S2:='';
FIND(SUCC(TIL)); I:=BUFPEG;
FIND(FRA);
SETBUF(BUFPEG);
LIN:=FRA; O:=0; W:=0; DLIN:=FRA; SW:=FALSE;
WHILE (BUFPEG<I) OR (PAKCNT<>0) DO
BEGIN
IF GETCON(CH) AND DUPR THEN
BEGIN
WRITE(CHR(07),' Afbrydelse !! ',SUCC(I-BUFPEG):5,
' Bytes tilbage i bufferen. Stop? (J/N): ');
REPEAT UNTIL GETCON(CH) AND (CH IN Æ'J','N'Å);
WRITELN(CH);
IF CH = 'J' THEN
BEGIN
WRITELN(' Dump stoppet.');
WRITELN(LST);
GOTO UD;
END;
END;
IF SW AND (DLIN<0) THEN DLIN:=LIN;
GETBUF(CH);
S1:=CONCAT(S1,HXÆORD(CH) DIV 16Å,HXÆORD(CH) MOD 16Å,' ');
CASE CH OF
@32..@127: S2:=CONCAT(S2,CH);
OTHERWISE
S2:=CONCAT(S2,'.');
END;
IF LEN(S2)=16 THEN
BEGIN
SKR;
IF ((W MOD 20)=0) AND (NOT DUPR) THEN
BEGIN
WRITE('Tryk RETURN for at fortsætte eller ESC for stop...');
REPEAT UNTIL GETCON(CH) AND (CH IN Æ@13,@27Å);
IF CH=CHR(27) THEN
BEGIN
WRITELN;
WRITE('Dump stoppet.');
GOTO UD;
END;
WRITE(CHR(13));
END;
END;
IF CH=CHR(10) THEN
BEGIN
LIN:=SUCC(LIN);
SW:=TRUE;
END;
END;
IF LEN(S2)<>0 THEN SKR;
UD:
WRITELN;
END;
«eof»