|
|
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 - download
Length: 4992 (0x1380)
Types: TextFile
Notes: Mikados_K
Names: »IOPEN.K«
└─⟦a3d38fea3⟧ Bits:30008985 PRODUKTION NBT.
└─⟦this⟧ »IOPEN.K«
SEGMENT 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*);