|
|
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: »DISKCOPY«
└─⟦f1b095e24⟧ Bits:30005320 Katalogisering af disketter
└─⟦this⟧ »DISKCOPY«
PROGRAM DISKCOPY;
(* BR-18.03.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;
VAR DISCBUFFER : BLOCK;
DISC, ERRORCODE : INTEGER;
ROD, FIL : BINÆRTRÆ;
TRÆ2, TRÆ3 : ARRAY('0'..'Å') OF BINÆRTRÆ;
FILTYPE : CHAR;
FUNDET : BOOLEAN;
DISKCAT3, MONIFP : TEXT;
MONIF32, MONIF23 : TEXT;
NYTNAVN : NAVNTYPE;
TAL : INTEGER;
PROCEDURE PSCIU(VAR DISCBUFFER: BLOCK; DISC, TRACK, SECTOR,
IOCODE: INTEGER; VAR ERRORCODE: INTEGER); EXTERNAL;
(********************************************************************)
PROCEDURE RANDOMIZE;
BEGIN
TAL:=ROUND(1+TIME/100);
END; (*RANDOMIZE*)
(********************************************************************)
PROCEDURE INITIALISER;
BEGIN
FOR FILTYPE:='0' TO 'Å' DO TRÆ2(FILTYPE):=NIL;
FOR FILTYPE:='0' TO 'Å' DO TRÆ3(FILTYPE) :=NIL;
ERRORCODE:=1;
TAL:=1;
RANDOMIZE;
REWRITE(DISKCAT3,'DISKCAT3:P2:10');
REWRITE(MONIF32,'MONIF32:P2:10');
WRITELN(MONIF32,'>FCOPY,R');
REWRITE(MONIF23,'MONIF23:P2:10');
WRITELN(MONIF23,'>FCOPY,R');
REWRITE(MONIFP,'MONIFP:P2:10');
WRITELN(MONIFP,'>FPURG');
CLEARSCREEN;
WRITELN('KOPIERING AF DISKETTER FRA P3 TIL P2 OG RETUR':50);
WRITELN('*********************************************':50);
WRITELN;
END; (*INITIALISER*)
(********************************************************************)
PROCEDURE AFSLUT;
BEGIN
CLOSE(DISKCAT3);
CLEARSCREEN;
WRITELN('MIKADOS VERSION 01.11.1984');
END; (*AFSLUT*)
(********************************************************************)
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 FINDFIL(ROD:BINÆRTRÆ; FILNAVN:NAVNTYPE; VAR FUNDET:BOOLEAN);
BEGIN
IF ROD=NIL THEN
FUNDET:=FALSE
ELSE
IF ROD^.NAVN=FILNAVN THEN
FUNDET:=TRUE
ELSE
IF ROD^.NAVN>FILNAVN THEN
FINDFIL(ROD^.VENSTRE,FILNAVN,FUNDET)
ELSE
FINDFIL(ROD^.HØJRE,FILNAVN,FUNDET);
END; (*FINDFIL*)
(********************************************************************)
PROCEDURE RANDOMNAVN(VAR NAVN:NAVNTYPE);
VAR I, NUMMER : INTEGER;
(*******************)
FUNCTION RND(VAR INT:INTEGER): REAL;
BEGIN
INT:=253*INT+1;
RND:=0.5+INT/65536.0;
END;
(*******************)
BEGIN
FOR I:=1 TO LENGTH(NAVN) DO
NAVN(I):=CHR(ORD('A')+TRUNC(RND(TAL)*(ORD('Å')-ORD('A'))));
END; (*RANDOMNAVN*)
(********************************************************************)
PROCEDURE TRÆGENNEMLØB(ROD:BINÆRTRÆ; FILTYPE:CHAR);
BEGIN
IF ROD<>NIL THEN
BEGIN
TRÆGENNEMLØB(ROD^.VENSTRE,FILTYPE);
(* WRITELN(LIST,ROD^.NAVN,' ',FILTYPE); *)
(* WRITELN(DISKCAT3,ROD^.NAVN,' ',FILTYPE);*)
NYTNAVN:=ROD^.NAVN;
FINDFIL(TRÆ2(FILTYPE),ROD^.NAVN,FUNDET);
IF FUNDET THEN
REPEAT
WRITE(NYTNAVN,' ',FILTYPE,' FINDES PÅ P2');
RANDOMNAVN(NYTNAVN);
WRITELN(' NYT NAVN : ',NYTNAVN);
FINDFIL(TRÆ2(FILTYPE),NYTNAVN,FUNDET);
UNTIL NOT FUNDET
ELSE
WRITELN(ROD^.NAVN,' ',FILTYPE,' FINDES IKKE PÅ P2');
WRITELN(MONIF32,ROD^.NAVN);
WRITELN(MONIF32,NYTNAVN);
WRITELN(MONIF23,NYTNAVN);
WRITELN(MONIF23,ROD^.NAVN);
WRITELN(MONIFP,NYTNAVN);
WRITELN(MONIFP,FILTYPE);
WRITELN(MONIFP,'2');
TRÆGENNEMLØB(ROD^.HØJRE,FILTYPE);
END;
END; (*TRÆGENNEMLØB*)
(********************************************************************)
PROCEDURE LÆSFILCAT(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ÆSFILCAT);
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;
CASE DISC OF
1,2: TRÆINDSÆT(TRÆ2(FILTYPE),FIL);
3 : TRÆINDSÆT(TRÆ3(FILTYPE),FIL);
END;
(* WRITELN(LIST,TRACK:3,' ',SECTOR:2,' ',FILNAVN,' ',FILTYPE);*)
END;
J:=J+13;
UNTIL (FILNAVN='********') OR (J>=242);
END; (*FOR N:=....*)
END; (*LÆSFILCAT*)
(**********************************************************************)
PROCEDURE MAIN;
VAR FILNAVN : NAVNTYPE;
FTYPE : STRING(1);
PCB1, PCB2, PCB3 : ^INTEGER;
BEGIN
INITIALISER;
FOR DISC:=3 DOWNTO 2 DO BEGIN
WRITELN('Katalogen på disk P',DISC,' læses. VENT !');
LÆSFILCAT(DISC);
WRITELN;
END;
FOR FILTYPE:='0' TO 'Å' DO
IF TRÆ3(FILTYPE)<>NIL THEN BEGIN
WRITELN(MONIF32,'3');
WRITELN(MONIF32,'2');
WRITELN(MONIF32,FILTYPE);
WRITELN(MONIF23,'2');
WRITELN(MONIF23,'3');
WRITELN(MONIF23,FILTYPE);
TRÆGENNEMLØB(TRÆ3(FILTYPE),FILTYPE);
WRITELN(MONIF32,' ');
WRITELN(MONIF23,' ');
END;
WRITELN(MONIF32,'><');
WRITELN(MONIF23,'><');
WRITELN(MONIFP,'><');
CLOSE(MONIF32);
CLOSE(MONIF23);
CLOSE(MONIFP);
WRITELN;
(*WRITE('Fortryder du så tryk på <ESC>, ellers tryk på <RETURN> ');*)
(*READLN;*)
(*IF NOT EOF THEN BEGIN*)
(* CHAIN('MONITOR *1','MONIF32:P2 ',PCB1); *)
(* WRITE('INDSÆT NY DISKETTE OG TRYK PÅ <RETURN> ');*)
(* READLN;*)
(* CHAIN('MONITOR *1','MONIF23:P2 ',PCB2);*)
(* CHAIN('MONITOR *1','MONIFP:P2 ',PCB3);*)
(*END;*)
END; (*MAIN*)
(**********************************************************************)
BEGIN
MAIN;
IF ERRORCODE <> 0 THEN WRITELN ('ERRORCODE:', ERRORCODE:4);
AFSLUT;
END.