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

⟦3c3cc7286⟧ TextFile

    Length: 4992 (0x1380)
    Types: TextFile
    Notes: Mikados_K
    Names: »IOPEN.K«

Derivation

└─⟦6b1c9961a⟧ Bits:30008989 INDPERM P1
    └─⟦this⟧ »IOPEN.K« 

Mikados K File

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*);

Full view