DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

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

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦d19aec84c⟧

    Length: 7584 (0x1da0)
    Notes: Mikados TextFile, Mikados_K
    Names: »FILCATA«

Derivation

└─⟦f1b095e24⟧ Bits:30005320 Katalogisering af disketter
    └─ ⟦this⟧ »FILCATA« 

Text

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.