|
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 - 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.