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

⟦cffaa816e⟧

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

Derivation

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

Text

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.