|
|
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: »RFILE1«
└─⟦f1b095e24⟧ Bits:30005320 Katalogisering af disketter
└─⟦this⟧ »RFILE1«
PROGRAM RFILE1; (* BR-29.04.85 *)
(*******************************************)
(* PROGRAM TIL RETABLERING AF FIL POINTERE *)
(*******************************************)
TYPE BLOCK = PACKED ARRAY (0..255) OF CHAR;
VAR DISCBUFI,DISCBUFU : BLOCK;
DISC, TRACK, SECTOR, IOCODE, ERRORCODE,
I, J, K, L, P, CHARCODE, CIF1, CIF2: INTEGER;
STRENG: STRING;
PROCEDURE PSCIU(VAR DISCBUFFER: BLOCK; DISC, TRACK, SECTOR,
IOCODE: INTEGER; VAR ERRORCODE: INTEGER);
EXTERNAL;
(*********************************************************************)
PROCEDURE LÆSFILTOP;
BEGIN
IOCODE := 1;
PSCIU(DISCBUFI,DISC,TRACK,SECTOR,IOCODE,ERRORCODE);
IF ERRORCODE <> 0 THEN WRITELN ('ERRORCODE:', ERRORCODE:4);
END; (*LÆSFILTOP*)
(*********************************************************************)
PROCEDURE GEMFILTOP;
BEGIN
IOCODE := 2;
PSCIU(DISCBUFU,DISC,TRACK,SECTOR,IOCODE,ERRORCODE);
IF ERRORCODE <> 0 THEN WRITELN ('ERRORCODE:', ERRORCODE:4);
END; (*GEMFILTOP*)
(*********************************************************************)
PROCEDURE WRITEHEX(I:INTEGER);
BEGIN
P:=P+1;
IF I<10 THEN STRENG(P):=CHR(I+ORD('0')) ELSE STRENG(P):=CHR(I+ORD('7'));
END; (*WRITEHEX*)
(*********************************************************************)
PROCEDURE SKRIVFILTOP(DISCBUFFER:BLOCK);
BEGIN
WRITELN(LIST);
STRENG:=' 0';
(*$R-*) STRENG(0):=CHR(64) (*$R+*);
FILLCHAR(STRENG(3),62,' ');
FOR I:=0 TO 1 DO
BEGIN
P:=0;
WRITEHEX(I);
P:=5;
J:=I*16;
K:=J+15;
FOR L:=J TO K DO
BEGIN
IF L MOD 4 =0 THEN P:=P+1;
P:=P+1;
CIF1:=ORD(DISCBUFFER(L)) MOD 128;
IF (CIF1<=126) AND (CIF1>=32) THEN STRENG(P):=CHR(CIF1)
ELSE STRENG(P):='.';
END;
P:=P+3;
FOR L:=J TO K DO
BEGIN
IF L MOD 4 =0 THEN P:=P+1;
CIF1:=ORD(DISCBUFFER(L)) DIV 16;
CIF2:=ORD(DISCBUFFER(L)) MOD 16;
WRITEHEX(CIF1);
WRITEHEX(CIF2);
END;
WRITELN(LIST,STRENG);
END; (*FOR I:=0*)
END; (*SKRIVFILTOP*)
(*********************************************************************)
PROCEDURE REDFILTOP;
VAR FILNAVN : STRING(8);
FILTYPE, UDVKODE : STRING(1);
BYTENR : 0..31;
SPOR,SEKTOR,RECLEN : INTEGER;
ANTUDV,ANTSEKT : INTEGER;
ANTAL : INTEGER;
BEGIN
WRITELN;
DISCBUFU:=DISCBUFI;
FILNAVN:=' ';
FOR BYTENR:=0 TO 7 DO
IF ORD(DISCBUFU(BYTENR)) IN (.32..126.) THEN
FILNAVN(BYTENR+1):=DISCBUFU(BYTENR)
ELSE
FILNAVN(BYTENR+1):='.';
WRITE('Filnavn : ');
EDIT(FILNAVN:8);
FOR BYTENR:=0 TO 7 DO DISCBUFU(BYTENR):=FILNAVN(BYTENR+1);
FILTYPE:=' ';
FILTYPE(1):=DISCBUFU(8);
WRITE('Type : ');
EDIT(FILTYPE:1);
DISCBUFU(8):=FILTYPE(1);
UDVKODE:=' ';
UDVKODE(1):=DISCBUFU(9);
WRITE('Udv. kode : ');
EDIT(UDVKODE:1);
DISCBUFU(9):=UDVKODE(1);
ANTUDV:=ORD(DISCBUFU(10));
WRITE('Antal udvidelser : ',ANTUDV:4,' nyt ant. : ');
READLN;
READ(ANTAL);
DISCBUFU(10):=CHR(ANTAL);
ANTSEKT:=ORD(DISCBUFU(11))+256*ORD(DISCBUFU(12));
WRITE('Antal sektorer/udv.: ',ANTSEKT:4,' nyt ant. : ');
READLN;
READ(ANTAL);
DISCBUFU(11):=CHR(ANTAL MOD 256);
DISCBUFU(12):=CHR(ANTAL DIV 256);
SPOR:=ORD(DISCBUFU(13))+256*ORD(DISCBUFU(14));
WRITE('Spor nr. næste udv.: ',SPOR:4,' nyt nr. : ');
READLN;
READ(ANTAL);
DISCBUFU(13):=CHR(ANTAL MOD 256);
DISCBUFU(14):=CHR(ANTAL DIV 256);
SEKTOR:=ORD(DISCBUFU(15));
WRITE('Sekt.nr. næste udv.: ',SEKTOR:4,' nyt nr. : ');
READLN;
READ(ANTAL);
DISCBUFU(15):=CHR(ANTAL MOD 256);
SPOR:=ORD(DISCBUFU(16))+256*ORD(DISCBUFU(17));
WRITE('Spor nr. forr. udv.: ',SPOR:4,' nyt nr. : ');
READLN;
READ(ANTAL);
DISCBUFU(16):=CHR(ANTAL MOD 256);
DISCBUFU(17):=CHR(ANTAL DIV 256);
SEKTOR:=ORD(DISCBUFU(18));
WRITE('Sekt.nr. forr. udv.: ',SEKTOR:4,' nyt nr. : ');
READLN;
READ(ANTAL);
DISCBUFU(18):=CHR(ANTAL MOD 256);
SPOR:=ORD(DISCBUFU(19))+256*ORD(DISCBUFU(20));
WRITE('Spor nr. næste fil : ',SPOR:4,' nyt nr. : ');
READLN;
READ(ANTAL);
DISCBUFU(19):=CHR(ANTAL MOD 256);
DISCBUFU(20):=CHR(ANTAL DIV 256);
SEKTOR:=ORD(DISCBUFU(21));
WRITE('Sekt.nr. næste fil : ',SEKTOR:4,' nyt nr. : ');
READLN;
READ(ANTAL);
DISCBUFU(21):=CHR(ANTAL MOD 256);
RECLEN:=ORD(DISCBUFU(25));
WRITE('Record længde : ',RECLEN:4,' ny længde: ');
READLN;
READ(ANTAL);
DISCBUFU(25):=CHR(ANTAL MOD 256);
END; (*REDFILTOP*)
(*********************************************************************)
BEGIN
CLEARSCREEN;
REPEAT
WRITELN('':15,'Retablering af fil pointere');
WRITELN('':15,'***************************');
WRITELN;
WRITE( 'pladelagerbetegnelse: P');
READLN;
IF EOF THEN EXIT(PROGRAM);
READ(DISC);
WRITE( 'spornummer : ');
READLN;
IF EOF THEN EXIT(PROGRAM);
READ(TRACK);
WRITE( 'sektornummer : ');
READLN;
IF EOF THEN EXIT(PROGRAM);
READ(SECTOR);
LÆSFILTOP;
SKRIVFILTOP(DISCBUFI);
REDFILTOP;
SKRIVFILTOP(DISCBUFU);
WRITELN;
WRITE('Fortryder du, tryk på <ESC> . OK, tryk på <RETURN> ');
READLN;
IF NOT EOF THEN GEMFILTOP;
WRITELN;
WRITE('Flere retableringer, tryk på <RETURN> Afslut, tryk på <ESC> ');
READLN;
PAGE(LIST);
UNTIL EOF;
WRITELN('RFILE1 terminated');
END.