|
|
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: 4096 (0x1000)
Types: TextFile
Names: »DSIMTCPM.PAS«
└─⟦da1b76629⟧ Bits:30008866 Indeholder bla. RCKAT
└─⟦this⟧ »DSIMTCPM.PAS«
OVERLAY PROCEDURE CPM(FUN: CHAR; FILN: STRING14);
LABEL TEM;
TYPE
FCB_TYP = RECORD
DRIVE: BYTE;
FNAME: ARRAYÆ1..8Å OF CHAR;
FTYPE: ARRAYÆ1..3Å OF CHAR;
XXXXX: ARRAYÆ1..21Å OF CHAR;
RECNO: INTEGER;
END;
DMA_TYP = RECORD
DRIVE: BYTE;
FNAME: ARRAYÆ1..8Å OF CHAR;
FTYPE: ARRAYÆ1..3Å OF CHAR;
XXXXX: ARRAYÆ1..20Å OF CHAR;
END;
VAR
FCB: FCB_TYP;
DMA: ARRAYÆ0..3Å OF DMA_TYP;
GEM: ARRAYÆ1..100Å OF STRINGÆ11Å; (* AT $1E00; *)
NAVN: STRINGÆ14Å;
BEGIN
NYDISK;
BDOS(26,ADDR(DMA));
NAVN:=FILN;
WHILE (NAVN<>'') AND (NAVNÆ1Å=' ') DO DELETE(NAVN,1,1);
IF POS(':',NAVN)<=1 THEN FCB.DRIVE:=SUCC(MEMÆ$0004Å) ELSE
IF (NAVNÆ1Å='A') OR (NAVNÆ1Å='B') THEN FCB.DRIVE:=ORD(NAVNÆ1Å)-64 ELSE
BEGIN
WRITELN(' Fejl i kommando!!');
GOTO TEM;
END;
DELETE(NAVN,1,POS(':',NAVN));
IF NAVN='' THEN NAVN:=CONCAT(NAVN,'*.*') ELSE
IF POS('.',NAVN) = 0 THEN NAVN:=CONCAT(NAVN,'.*');
I:=0;
WHILE (I<PRED(POS('.',NAVN))) AND (I<8) DO
BEGIN
I:=SUCC(I);
IF NAVNÆIÅ<>'*' THEN FCB.FNAMEÆIÅ:=NAVNÆIÅ ELSE
BEGIN
REPEAT
FCB.FNAMEÆIÅ:='?';
I:=SUCC(I);
UNTIL I>8;
END;
END;
WHILE I<8 DO
BEGIN
I:=SUCC(I);
FCB.FNAMEÆIÅ:=' ';
END;
DELETE(NAVN,1,POS('.',NAVN));
I:=0;
WHILE (I<LEN(NAVN)) AND (I<3) DO
BEGIN
I:=SUCC(I);
IF NAVNÆIÅ<>'*' THEN FCB.FTYPEÆIÅ:=NAVNÆIÅ ELSE
BEGIN
REPEAT
FCB.FTYPEÆIÅ:='?';
I:=SUCC(I);
UNTIL I>3;
END;
END;
WHILE I<3 DO
BEGIN
I:=SUCC(I);
FCB.FTYPEÆIÅ:=' ';
END;
FILL(FCB.XXXXX,21,CHR(0));
I:=BDOSB(17,ADDR(FCB));
L:=0;
WHILE I<>255 DO
BEGIN
L:=SUCC(L);
GEMÆLÅÆ0Å:=CHR(11);
MOVE(DMAÆIÅ.FNAME,GEMÆLÅÆ1Å,11);
I:=BDOSB(18);
END;
FOR I:=1 TO L DO
FOR J:=SUCC(I) TO L DO
IF GEMÆIÅ>GEMÆJÅ THEN
BEGIN
GEMÆ100Å:=GEMÆIÅ; GEMÆIÅ:=GEMÆJÅ; GEMÆJÅ:=GEMÆ100Å;
END;
J:=0;
IF L=0 THEN WRITELN(' Ingen filer fundet!!') ELSE
BEGIN
FOR I:=1 TO L DO
BEGIN
IF COPY(GEMÆIÅ,9,3) = ' ' THEN CH:=' ' ELSE CH:='.';
WRITE(' ',CHR(FCB.DRIVE+64),':',
COPY(GEMÆIÅ,1,8),CH,COPY(GEMÆIÅ,9,3));
CASE FUN OF
'X': BEGIN
MOVE(GEMÆIÅÆ1Å,FCB.FNAME,11);
BDOS(35,ADDR(FCB));
J:=J+((FCB.RECNO+7) DIV 8);
WRITE(((FCB.RECNO+7) DIV 8):6,'k');
END;
'Z': BEGIN
IF L>1 THEN
BEGIN
WRITE(' ? (J/N): ');
REPEAT UNTIL GETCON(CH) AND (CH IN Æ'J','N'Å);
WRITE(CH);
END;
IF (L=1) OR (CH='J') THEN
BEGIN
MOVE(GEMÆIÅÆ1Å,FCB.FNAME,11);
BDOS(19,ADDR(FCB));
WRITE(' Slettet!!');
END;
END;
END;
WRITELN;
IF GETCON(CH) THEN REPEAT UNTIL GETCON(CH);
END;
IF FUN='X' THEN
BEGIN
WRITELN(' -------------- ----');
WRITELN(' TOTAL ',J:6,'k');
END;
END;
TEM:
END;
«eof»