|
|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7584 (0x1da0)
Notes: Mikados TextFile, Mikados_K
Names: »FILCATA«
└─⟦f1b095e24⟧ Bits:30005320 Katalogisering af disketter
└─⟦this⟧ »FILCATA«
PROGRAM FILCATA;
(* BR-08.05.85 *)
TYPE BLOCK = PACKED ARRAY (0..255) OF CHAR;
BINÆRTRÆ = ^KNUDE;
NAVNTYPE = STRING(8);
KNUDE = RECORD
NAVN : NAVNTYPE;
VENSTRE, HØJRE : BINÆRTRÆ;
END;
FILPOST = RECORD
FNAVN : NAVNTYPE;
FTYPE : CHAR;
END;
STR3 = STRING(3);
VAR DISCBUFFER : BLOCK;
DISC, ERRORCODE : INTEGER;
ROD, FIL : BINÆRTRÆ;
TRÆ : ARRAY('0'..'Å') OF BINÆRTRÆ;
FILTYPE : CHAR;
FUNDET : BOOLEAN;
DISKFIL : FILE OF FILPOST;
NUMMER : STR3;
DISKID : STRING(15);
PROCEDURE PSCIU(VAR DISCBUFFER: BLOCK; DISC, TRACK, SECTOR,
IOCODE: INTEGER; VAR ERRORCODE: INTEGER); EXTERNAL;
(********************************************************************)
PROCEDURE INITIALISER;
BEGIN
FOR FILTYPE:='0' TO 'Å' DO TRÆ(FILTYPE) :=NIL;
ERRORCODE:=1;
CLEARSCREEN;
WRITELN('KATALOGISERING AF FILER':45);
WRITELN('***********************':45);
WRITELN;
REPEAT
NUMMER:='000';
WRITE('Indlæs diskettens nummer : ');
EDIT(NUMMER:3);
UNTIL (NUMMER>'000') AND (NUMMER<='999');
DISKID:=CONCAT('DISK',NUMMER,':P3:5:F');
REWRITE(DISKFIL,DISKID);
END; (*INITIALISER*)
(********************************************************************)
PROCEDURE AFSLUT;
BEGIN
DISKFIL^.FNAVN:='########';
DISKFIL^.FTYPE:='#';
PUT(DISKFIL);
CLOSE(DISKFIL);
CLEARSCREEN;
WRITELN('MIKADOS VERSION 01.11.1984');
END; (*AFSLUT*)
(********************************************************************)
PROCEDURE LÆSFILCATALOG(NUMMER:STR3);
VAR DISKID: STRING(15);
BEGIN
DISKID:=CONCAT('DISK',NUMMER,':P3:5:F');
RESET(DISKFIL,DISKID);
WRITELN(LIST,'Filer på disk nr. ',NUMMER,' : ');
WRITELN(LIST);
WITH DISKFIL^ DO BEGIN
GET(DISKFIL);
WHILE FNAVN<>'########' DO BEGIN
WRITELN(LIST,FNAVN,' ',FTYPE);
GET(DISKFIL);
END;
END;
CLOSE(DISKFIL);
PAGE(LIST);
END;
(********************************************************************)
PROCEDURE TRÆINDSÆT(VAR ROD:BINÆRTRÆ; FIL:BINÆRTRÆ);
BEGIN
IF ROD=NIL THEN
ROD:=FIL
ELSE
IF FIL^.NAVN<ROD^.NAVN THEN
TRÆINDSÆT(ROD^.VENSTRE,FIL)
ELSE
TRÆINDSÆT(ROD^.HØJRE,FIL);
END; (*TRÆINDSÆT*)
(********************************************************************)
PROCEDURE TRÆGENNEMLØB(ROD:BINÆRTRÆ; FILTYPE:CHAR);
BEGIN
IF ROD<>NIL THEN
BEGIN
TRÆGENNEMLØB(ROD^.VENSTRE,FILTYPE);
WITH DISKFIL^ DO BEGIN
FNAVN:=ROD^.NAVN;
FTYPE:=FILTYPE;
PUT(DISKFIL);
END;
TRÆGENNEMLØB(ROD^.HØJRE,FILTYPE);
END;
END; (*TRÆGENNEMLØB*)
(********************************************************************)
PROCEDURE LÆSDISKCAT(DISC:INTEGER);
CONST CAT2 = 256; (*ANTAL SEKTORER I KATALOGEN FOR P1/P2*)
CAT3 = 64; (*ANTAL SEKTORER I KATALOGEN FOR P3*)
SPS2 = 32; (*ANTAL SEKTORER PR. SPOR FOR P1/P2*)
SPS3 = 16; (*ANTAL SEKTORER PR. SPOR FOR P3*)
VAR CATSIZE, SEKTMAX, N : INTEGER;
TRACK, SECTOR, IOCODE, J, L, CIFFER :INTEGER;
FILNAVN : STRING(9);
BEGIN
CASE DISC OF
1,2: BEGIN
CATSIZE:=CAT2;
SEKTMAX:=SPS2;
END;
3 : BEGIN
CATSIZE:=CAT3;
SEKTMAX:=SPS3;
END;
END;
FOR N:=1 TO CATSIZE DO
BEGIN
TRACK := N DIV SEKTMAX;
SECTOR:= N MOD SEKTMAX;
ERRORCODE:=0;
IOCODE := 1;
PSCIU(DISCBUFFER,DISC,TRACK,SECTOR,IOCODE,ERRORCODE);
IF ERRORCODE <> 0 THEN EXIT(LÆSDISKCAT);
J:=0;
REPEAT
FILNAVN:='*********';
FOR L := J TO J+8 DO
BEGIN
CIFFER := ORD(DISCBUFFER(L)) MOD 128;
IF (CIFFER <= 126) AND (CIFFER>=32) THEN FILNAVN(L-J+1):=CHR(CIFFER);
END;
FILTYPE:=FILNAVN(9);
FILNAVN:=COPY(FILNAVN,1,8);
IF (SCAN(8,='*',FILNAVN(1))=8) AND (FILTYPE IN (.'0'..'Å'.)) THEN
BEGIN
NEW(FIL);
FIL^.NAVN:=FILNAVN;
FIL^.VENSTRE:=NIL;
FIL^.HØJRE:=NIL;
TRÆINDSÆT(TRÆ(FILTYPE),FIL);
(* WRITELN(LIST,TRACK:3,' ',SECTOR:2,' ',FILNAVN,' ',FILTYPE);*)
END;
J:=J+13;
UNTIL (FILNAVN='********') OR (J>=242);
END; (*FOR N:=....*)
END; (*LÆSDISKCAT*)
(**********************************************************************)
PROCEDURE MAIN;
VAR FILNAVN : NAVNTYPE;
FTYPE : STRING(1);
BEGIN
INITIALISER;
IF NUMMER='001' THEN DISC:=1 ELSE
IF NUMMER='002' THEN DISC:=2 ELSE DISC:=3;
WRITELN;
WRITELN('Katalogen på disk nr. ',NUMMER,' læses. VENT !');
LÆSDISKCAT(DISC);
FOR FILTYPE:='0' TO 'Å' DO TRÆGENNEMLØB(TRÆ(FILTYPE),FILTYPE);
END; (*MAIN*)
(**********************************************************************)
BEGIN
MAIN;
IF ERRORCODE <> 0 THEN WRITELN ('ERRORCODE:', ERRORCODE:4);
AFSLUT;
LÆSFILCATALOG(NUMMER);
END.