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

⟦1b245fe16⟧ TextFile

    Length: 12640 (0x3160)
    Types: TextFile
    Notes: Mikados_K
    Names: »RAPPORT.K«

Derivation

└─⟦5630b2e42⟧ Bits:30009005 START APRIL 1985 aft april 1985 (PASCAL kildetekster)
    └─⟦this⟧ »RAPPORT.K« 
└─⟦6c21327e0⟧ Bits:30008986 LINIMATIC K-FILER (IKKE HELT UPTODTATE)
    └─⟦this⟧ »RAPPORT.K« 

Mikados K File

PROGRAM RAPPORT;
CONST MAXZONE=1000;
       LÆS  = 0;
       SKRIV= 1;
TYPE  ISF = FILE OF ARRAY (1..232) OF INTEGER;
      AR  = ARRAY (-4..-4) OF INTEGER;
      FILNAVN=PACKED ARRAY (1..8) OF CHAR;
      ISFHEAD = RECORD
               NBUC,NBLK,NREC,
               BLKPRBUC,RECPRBUC,RECPRBLK,
               KEYFLDS,
               FLHSIZE,BUTSIZE,BLTSIZE,BLKSIZE,RECSIZE,KEYSIZE,
               SEGINFLH,SEGINBUT,SEGINBUC,SEGINBLT,SEGINBLK,
               INITREC,BUCINUSE,BLKINUSE,RECINUSE,
               BUCINZONE,BLKINZONE,BLKENTRY,
               UPSTAT,IRPRBUC,IRPRBLK,
               BUT,BLT,BLK,KEY1,KEY2,ENTRYSIZE         :INTEGER;
               FILEINIT,FILEOPEN,BUTCHG,BLTCHG,BLKCHG  :BOOLEAN;
               KEYPOS,KEYLNG,KEYSGN : ARRAY (1..9) OF INTEGER;
               Z:AR;
               FILENAME:FILNAVN
            END;
ZZONE   =RECORD
        H:ISFHEAD;
        T:ARRAY(1..MAXZONE) OF INTEGER
END;
VAR I,IER:INTEGER;
    CH:STRING(1);
    REGISTER:ISF;
    FNAVN                 :STRING;
    ZONE:ZZONE;
(*$P*)
(*$R-*)
PROCEDURE COPSEGS(VAR Z:AR;VAR F:ISF;SEGADR,WORDS,WORDADR,INOUT:INTEGER);
VAR I:INTEGER;
BEGIN
  WORDADR:=WORDADR-1;
  IF INOUT=LÆS THEN
  BEGIN
    SEEK(F,SEGADR);
    IER:=IORESULT;
    IF IER<>0 THEN EXIT(COPSEGS);
    REPEAT
       GET(F);
       IF IORESULT<>0 THEN
       BEGIN
         IER:=IORESULT;
         EXIT(COPSEGS)
       END;
       IF WORDS>231 THEN
       BEGIN
         FOR I:=1 TO 232 DO Z(WORDADR+I):=F^(I);
         WORDADR:=WORDADR+232;
       END ELSE FOR I:=1 TO WORDS DO Z(WORDADR+I):=F^(I);
       WORDS:=WORDS-232
    UNTIL WORDS<1
  END ELSE
  BEGIN
    SEEK(F,SEGADR);
    IER:=IORESULT;
    IF IER<>0 THEN EXIT(COPSEGS);
    REPEAT
       IF WORDS>231 THEN
       BEGIN
         FOR I:=1 TO 232 DO F^(I):=Z(WORDADR+I);
         WORDADR:=WORDADR+232;
       END ELSE FOR I:=1 TO WORDS DO F^(I):=Z(WORDADR+I);
       WORDS:=WORDS-232;
       PUT(F);
       IF IORESULT<>0 THEN
       BEGIN
         IER:=IORESULT;
         EXIT(COPSEGS)
       END
    UNTIL WORDS<1
  END
END;
(*$P*)
PROCEDURE IOPEN(VAR ZO:ISFHEAD;VAR F:ISF;MODE:INTEGER);
       (*F ER ÅBNET FØR KALD; MED REWRITE*)
VAR I,J,NUM,BUC,K,BLKNUM:INTEGER;
BEGIN
  WITH ZO DO
  BEGIN
    SEEK(F,1);
    IER:=IORESULT;
    IF IER<>0 THEN EXIT(IOPEN);
    GET(F);
    IER:=IORESULT;
    IF IER<>0 THEN EXIT (IOPEN);
    NBUC       := F^(1);
    NBLK       := F^(2);
    NREC       := F^(3);
    BLKPRBUC   := F^(4);
    RECPRBUC   := F^(5);
    RECPRBLK   := F^(6);
    KEYFLDS    := F^(7);
    FLHSIZE    := F^(8);
    BUTSIZE    := F^(9);
    BLTSIZE    := F^(10);
    BLKSIZE    := F^(11);
    RECSIZE    := F^(12);
    KEYSIZE    := F^(13);
    SEGINFLH   := F^(14);
    SEGINBUT   := F^(15);
    SEGINBUC   := F^(16);
    SEGINBLT   := F^(17);
    SEGINBLK   := F^(18);
    INITREC    := F^(19);
    BUCINUSE   := F^(20);
    BLKINUSE   := F^(21);
    RECINUSE   := F^(22);
    FILEINIT   := F^(23)=1;
    FILEOPEN   := F^(24)=1;
    FOR I:=1 TO 9 DO
    BEGIN
       KEYPOS(I):= F^(22+I*3);
       KEYLNG(I):= F^(23+I*3);
       KEYSGN(I):= F^(24+I*3)
    END;
    BUTCHG:=FALSE;
    BLTCHG:=FALSE;
    BLKCHG:=FALSE;
    BUCINZONE:=0;
    BLKINZONE:=0;
    BLKENTRY:=0;
    UPSTAT:=MODE;
    BUT:=1;
    BLT:=BUT+BUTSIZE;
    BLK:=BLT+BLTSIZE;
    KEY1:=BLK+BLKSIZE+RECSIZE;
    KEY2:=BLK+BLKSIZE;
    ENTRYSIZE:=KEYSIZE+2;
    IF RECPRBUC<>RECPRBLK*BLKPRBUC THEN
    BEGIN
       IER:=-4;
       EXIT (IOPEN)
       (*FILEN ER IKKE ISF*)
    END;
    IF FILEINIT THEN COPSEGS(Z,F,2,BUTSIZE,BUT,LÆS);
    IF IER<>0 THEN EXIT (IOPEN);
    IF FILEOPEN THEN
    BEGIN
       IER:=-18;
       IF NOT FILEINIT THEN
       BEGIN
         IER:=-19;
         INITREC:=0;
         BUCINUSE:=0;
         BLKINUSE:=0;
         RECINUSE:=0
       END
       ELSE
       BEGIN
         BUCINUSE:=0;
         BLKINUSE:=0;
         RECINUSE:=0;
         FOR I:=1 TO NBUC DO
         BEGIN
           BUC:=BUT+(I-1)*ENTRYSIZE+1;
           COPSEGS(Z,F,Z(BUC-1),BLTSIZE,BLT,LÆS);
           IF IER<>0 THEN EXIT (IOPEN);
           IER:=-18;
           NUM:=0;
           FOR J:=1 TO BLKPRBUC DO
           BEGIN
             BLKNUM:=BLT+1+(J-1)*ENTRYSIZE;
             IF Z(BLKNUM)>0 THEN
             BEGIN
               NUM:=NUM+Z(BLKNUM);
               BLKINUSE:=BLKINUSE+1;
               K:=BLKNUM
             END
           END;
           IF NUM>0 THEN
           BEGIN
             RECINUSE:=RECINUSE+NUM;
             BUCINUSE:=BUCINUSE+1;
             FOR J:=1 TO KEYSIZE DO
               Z(BUC+J):=Z(K+J)
           END;
           BUTCHG:=TRUE;
           Z(BUC):=NUM
         END;   (*FOR I*)
         BUCINZONE:=NBUC
       END
     END;  (*FILEOPEN*)
     FILEOPEN:=TRUE;
     IF UPSTAT=SKRIV THEN
     BEGIN
       F^(1):=NBUC;
       F^(2):=NBLK;
       F^(3):=NREC;
       F^(4):=BLKPRBUC;
       F^(5):=RECPRBUC;
       F^(6):=RECPRBLK;
       F^(7):=KEYFLDS;
       F^(8):=FLHSIZE;
       F^(9):=BUTSIZE;
       F^(10):=BLTSIZE;
       F^(11):=BLKSIZE;
       F^(12):=RECSIZE;
       F^(13):=KEYSIZE;
       F^(14):=SEGINFLH;
       F^(15):=SEGINBUT;
       F^(16):=SEGINBUC;
       F^(17):=SEGINBLT;
       F^(18):=SEGINBLK;
       F^(19):=INITREC;
       F^(20):=BUCINUSE;
       F^(21):=BLKINUSE;
       F^(22):=RECINUSE;
       IF FILEINIT THEN F^(23):=1 ELSE F^(23):=0;
       IF FILEOPEN THEN F^(24):=1 ELSE F^(24):=0;
       FOR I:=1 TO 9 DO
       BEGIN
         F^(22+I*3):=KEYPOS(I);
         F^(23+I*3):=KEYLNG(I);
         F^(24+I*3):=KEYSGN(I)
       END;
       SEEK(F,1);
       I:=IER;
       IER:=IORESULT;
       IF IER<>0 THEN EXIT(IOPEN);
       PUT(F);
       IER:=IORESULT;
       IF IER<>0 THEN EXIT(IOPEN);
       IER:=I
     END
   END
END  (*IOPEN*);
(*$P*)
PROCEDURE READTABLE(VAR ZO:ISFHEAD;VAR F:ISF;BUTENTRY:INTEGER);
BEGIN
  IER:=0;
  WITH ZO DO
    IF BUTENTRY<>BUCINZONE THEN
    BEGIN
      IF BLKCHG THEN
      BEGIN
        IF UPSTAT=SKRIV THEN
        COPSEGS(Z,F,Z((BLKINZONE-1)*ENTRYSIZE+BLT),BLKSIZE,BLK,SKRIV);
        IF IER<>0 THEN EXIT(READTABLE)
      END;
      IF BLTCHG THEN
      BEGIN
        IF UPSTAT=SKRIV THEN
        COPSEGS(Z,F,Z((BUCINZONE-1)*ENTRYSIZE+BUT),BLTSIZE,BLT,SKRIV);
        IF IER<>0 THEN EXIT(READTABLE)
      END;
      BLKCHG:=FALSE;
      BLTCHG:=FALSE;
      COPSEGS(Z,F,Z((BUTENTRY-1)*ENTRYSIZE+BUT),BLTSIZE,BLT,LÆS);
      IF IER<>0 THEN EXIT(READTABLE);
      BUCINZONE:=BUTENTRY;
      BLKINZONE:=0
    END
END;
 
PROCEDURE READBLOCK(VAR ZO:ISFHEAD;VAR F:ISF;BLTENTRY,STARTPOST:INTEGER);
BEGIN
  IER:=0;
  WITH ZO DO
  IF BLTENTRY<>BLKINZONE THEN
  BEGIN
    IF BLKCHG THEN
    BEGIN
      IF UPSTAT=SKRIV THEN
      COPSEGS(Z,F,Z((BLKINZONE-1)*ENTRYSIZE+BLT),BLKSIZE,BLK,SKRIV);
      BLKCHG:=FALSE;
      IF IER<>0 THEN EXIT(READBLOCK)
    END;
    COPSEGS(Z,F,Z((BLTENTRY-1)*ENTRYSIZE+BLT),BLKSIZE,BLK+(STARTPOST-1)*
                                                         RECSIZE,LÆS);
    IF IER<>0 THEN EXIT(READBLOCK);
    BLKINZONE:=BLTENTRY
  END
END;
(*$P*)
PROCEDURE REPORT(VAR ZO:ISFHEAD;VAR F:ISF;SBUC:INTEGER);
VAR I,J,K,L,N:INTEGER;
PROCEDURE W(T:STRING;NR:INTEGER);
BEGIN
  N:=N+1;
  WRITE(LIST,'  ',T,NR:6);
  IF N=6 THEN
  BEGIN
    WRITELN(LIST);
    N:=0
  END
END;
BEGIN
  WITH ZO DO
  BEGIN
    WRITELN(LIST,'REPORT');
    WRITELN(LIST);
    WRITELN(LIST,'FILEHEAD-INFORMATION');
    WRITELN(LIST);
    N:=0;
    W('NBUC    :',NBUC);W('NBLK    :',NBLK);
    W('NREC    :',NREC);
    W('BLKPRBUC:',BLKPRBUC);
    W('RECPRBUC:',RECPRBUC);
    W('RECPRBLK:',RECPRBLK);
    W('KEYFLDS :',KEYFLDS);
    W('FLHSIZE :',FLHSIZE);
    W('BUTSIZE :',BUTSIZE);
    W('BLTSIZE :',BLTSIZE);
    W('BLKSIZE :',BLKSIZE);
    W('RECSIZE :',RECSIZE);
    W('KEYSIZE :',KEYSIZE);
    W('SEGINFLH:',SEGINFLH);
    W('SEGINBUT:',SEGINBUT);
    W('SEGINBUC:',SEGINBUC);
    W('SEGINBLT:',SEGINBLT);
    W('SEGINBLK:',SEGINBLK);
    WRITELN(LIST);
    WRITELN(LIST,'FILE-STATUS');
    WRITELN(LIST);
    W('INITREC :',INITREC);
    W('BUCINUSE:',BUCINUSE);
    W('BLKINUSE:',BLKINUSE);
    N:=5;
    W('RECINUSE:',RECINUSE);
    WRITE(LIST,'  FILEINIT: ');
    IF FILEINIT THEN WRITE(LIST,' TRUE') ELSE WRITE(LIST,'FALSE');
    WRITE(LIST,'  FILEOPEN: ');
    IF FILEOPEN THEN WRITELN(LIST,' TRUE') ELSE WRITELN(LIST,'FALSE');
    WRITELN(LIST);
    WRITELN(LIST,'KEY-DESCRIPTION');
    WRITELN(LIST);
    WRITELN(LIST,'   KEYFLD   KEYPOS   KEYLNG   KEYSGN');
    FOR I:=1 TO KEYFLDS DO
       WRITELN(LIST,I:9,KEYPOS(I):9,KEYLNG(I):9,KEYSGN(I):9);
    WRITELN(LIST);
    WRITELN(LIST,'BUCKETTABLE');
    WRITELN(LIST);
    WRITELN(LIST,'   ADR   NUM      KEY');
    FOR I:=1 TO NBUC DO
    BEGIN
       WRITE(LIST,Z((I-1)*ENTRYSIZE+1):6,Z((I-1)*ENTRYSIZE+2):6);
       FOR J:=1 TO KEYSIZE DO WRITE(LIST,Z((I-1)*ENTRYSIZE+2+J):6);
       WRITELN(LIST)
    END;
    WRITELN(LIST);
    FOR I:=SBUC TO NBUC DO
    BEGIN
      WRITELN(LIST,I:5,'. BUCKET');
      WRITELN(LIST);
      READTABLE(ZO,F,I);
      IF IER<>0 THEN EXIT(REPORT);
      WRITELN(LIST,'BLOCKTABLE');
      WRITELN(LIST);
      WRITELN(LIST,'   ADR   NUM      KEY');
      FOR J:=1 TO BLKPRBUC DO
      BEGIN
        WRITE(LIST,Z((J-1)*ENTRYSIZE+BLT):6,Z((J-1)*ENTRYSIZE
              +BLT+1):6);
        FOR K:=1 TO KEYSIZE DO WRITE(LIST,Z((J-1)*ENTRYSIZE+BLT+1+K):6);
        WRITELN(LIST)
      END;
(*    WRITELN(LIST);
      FOR J:=1 TO BLKPRBUC DO
      BEGIN
        WRITE(LIST,I:5,'. BUCKET ',J:5,'. BLOCK');
        READBLOCK(ZO,F,J,1);
        IF IER<>0 THEN EXIT(REPORT);
        FOR K:=1 TO RECPRBLK DO
        BEGIN
          IF K>Z(BLT+(J-1)*ENTRYSIZE+1) THEN
               WRITE(LIST,' *')
               ELSE WRITE(LIST,'  ');
          FOR L:=1 TO RECSIZE DO
               WRITE(LIST,Z(BLK+(K-1)*RECSIZE+L-1));
               WRITELN(LIST);
        END;
        WRITELN(LIST)
      END;*)
      WRITELN(LIST)
    END
  END
END;
(*$P*)
PROCEDURE ERROR(VAR FIL:FILNAVN);
BEGIN
  WRITELN('FEJL I REGISTER ',FIL,' FEJLKODE ',IER,' RETURN');
  CH:=' ';EDIT(CH);IF CH='R' THEN REPORT(ZONE.H,REGISTER,1);
  EXIT(RAPPORT)
END;
PROCEDURE OFEJL(VAR FIL:FILNAVN);
VAR I:INTEGER;
BEGIN
  GOTOXY(1,20);
  WRITELN('REGISTERFEJL ',IER,' I ',FIL,' . SITUATIONEN ER FORSØGT REDDET.');
  WRITELN('TAST 0, HVIS DER SKAL FORTSÆTTES');
  REPEAT GOTOXY(40,21);READLN;READ(I) UNTIL IORESULT=0;
  IF I<>0 THEN ERROR(FIL);
  CLEARSCREEN
END;
(*$P*)
BEGIN
  CLEARSCREEN;
  WRITE('INDTAST FILNAVN ');READLN;READ(FNAVN);
  ZONE.H.FILENAME:='        ';
  FOR I:=1 TO POS(':',FNAVN)-1 DO ZONE.H.FILENAME(I):=FNAVN(I);
  REWRITE(REGISTER,FNAVN);
  IOPEN(ZONE.H,REGISTER,LÆS);IF IER<>0 THEN OFEJL(ZONE.H.FILENAME);
  WRITELN('REPORT, SBUC');READLN;READ(I);
  REPORT(ZONE.H,REGISTER,I) 
END.

Full view