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

⟦3addc6b26⟧ TextFile

    Length: 10112 (0x2780)
    Types: TextFile
    Notes: Mikados_K
    Names: »OBE1.K«

Derivation

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

Mikados K File

(*$P*)
PROCEDURE OBEY;
VAR I:INTEGER;
 
PROCEDURE PEXTRACT(RESPOS:INTEGER);
(*UDTRÆK NØGLE AF POST , OG GEM I KEYS*)
VAR I:INTEGER;
    J,KP :POSTADR;
BEGIN
  WITH FILEHEAD DO
  FOR I:=1 TO KEYFLDS DO            
  BEGIN                             
    KP:=KEYPOS(I)-1;                
    FOR J:=1 TO KEYLNG(I) DO        
    BEGIN                           
      KEYS(RESPOS):=REC^(KP+J);        
      RESPOS:=RESPOS+1              
    END                             
  END                               
END;
(*$P*)
PROCEDURE OUVRIR;
BEGIN 
  WITH USER(CURRUSER) DO
  IF STATUS(CURRFILE)=LUKKET THEN
  BEGIN
    CASE BESKED.IREC OF
    2:STATUS(CURRFILE):=LÆS;
    3:
    BEGIN
      STATUS(CURRFILE):=SKRIV;
      FOR I:=1 TO MAXUSERS DO
      IF USER(I).STATUS(CURRFILE)=XXCLUSIV THEN
      BEGIN
        IER:=-26;
        I:=MAXUSERS
      END 
    END;
    5:
    BEGIN
      STATUS(CURRFILE):=XXCLUSIV;
      FOR I:=1 TO MAXUSERS DO
      IF USER(I).STATUS(CURRFILE) IN (.SKRIV..XXCLUSIV.) THEN
      BEGIN
        IER:=-27;
        I:=MAXUSERS
      END 
    END 
    OTHERWISE IER:=-28;
    IF IER<>0 THEN BEGIN STATUS(CURRFILE):=LUKKET;EXIT(OBEY) END;
    IF NOT FILEHEAD.FILEOPEN THEN IER:=-3;
    IF IER<>0 THEN EXIT(OBEY);
    IF NOT FILEHEAD.FILEINIT THEN IER:=-12;
  END ELSE IER:=-25
END;
(*$P*)
PROCEDURE REED;
VAR K,KI,I,J:INTEGER;
BEGIN
  WITH USER(CURRUSER) DO WITH FILEHEAD DO
  BEGIN
    K:=KEYSTART;
    PEXTRACT(K);
    IF CURRFUNC=LÆSPOSTX THEN
    BEGIN
      FOR I:=1 TO MAXUSERS DO
      IF (USER(I).STATUS(CURRFILE)=XCLUSIV) AND (I<>CURRUSER) THEN
      BEGIN
        KI:=(I-1)*KEYSIZE;
        FOR J:=1 TO KEYSIZE DO
        IF KEYS(J+KI)<>KEYS(J-1+K) THEN J:=10000;
        IF J<10000 THEN
        BEGIN
          STATUS(CURRFILE):=SKRIV;
          IER:=-31;
          EXIT(OBEY)
        END
      END
    END;
    GETREC;  
    IF CURRFUNC=LÆSPOSTX THEN
    BEGIN
      IF STATUS(CURRFILE)=SKRIV THEN STATUS(CURRFILE):=XCLUSIV
    END
    ELSE
      IF STATUS(CURRFILE)=XCLUSIV THEN STATUS(CURRFILE):=SKRIV
  END   
END;
(*$P*)
PROCEDURE NÆKST;
VAR K,KI,I,J:INTEGER;
BEGIN
  WITH USER(CURRUSER) DO WITH FILEHEAD DO
  BEGIN
    K:=KEYSTART;
    NEXTREC;
    PEXTRACT(K);
    IF CURRFUNC=NÆSTEX THEN
    BEGIN
      FOR I:=1 TO MAXUSERS DO
      IF (USER(I).STATUS(CURRFILE)=XCLUSIV) AND (I<>CURRUSER) THEN
      BEGIN
        KI:=(I-1)*KEYSIZE;
        FOR J:=1 TO KEYSIZE DO
        IF KEYS(J+KI)<>KEYS(J-1+K) THEN J:=10000;
        IF J<10000 THEN
        BEGIN
          STATUS(CURRFILE):=SKRIV;
          IER:=-31;
          EXIT(OBEY)
        END
      END
    END;
    IF CURRFUNC=NÆSTEX THEN
    BEGIN
      IF STATUS(CURRFILE)=SKRIV THEN STATUS(CURRFILE):=XCLUSIV
    END
    ELSE
      IF STATUS(CURRFILE)=XCLUSIV THEN STATUS(CURRFILE):=SKRIV
  END   
END;
(*$P*)
PROCEDURE ERASAVE;  
VAR K,KI,I,J:INTEGER;
    HKEY:ARRAY (.1..MAXKEYSIZE.) OF INTEGER;
BEGIN
  WITH USER(CURRUSER) DO WITH FILEHEAD DO
  BEGIN
    K:=KEYSTART;
    IF STATUS(CURRFILE)=XCLUSIV THEN
    BEGIN
      (*
      FOR I:=1 TO FILEHEAD.KEYSIZE DO
          HKEY(I):=KEY(I-1+FILES(CURRHEAD).KEYSTART);
      *)
      MOVELEFT(KEYS(K),HKEY(1),2*KEYSIZE);
      PEXTRACT(K);
      FOR I:=1 TO KEYSIZE DO
          IF KEYS(I-1+K)<>HKEY(I) THEN I:=10000;
      IF I>10000 THEN 
      BEGIN
        STATUS(CURRFILE):=SKRIV;
        IER:=-33;
        EXIT(OBEY)
      END
    END;
    IF CURRFUNC=GEMPOST THEN
      PUTREC
    ELSE
    BEGIN
      DELETE;
      PEXTRACT(K);
      IF CURRFUNC=SLETX THEN                                               
      BEGIN                                                                 
        FOR I:=1 TO MAXUSERS DO                                             
        IF (USER(I).STATUS(CURRFILE)=XCLUSIV) AND (I<>CURRUSER) THEN  
        BEGIN                                                               
          KI:=(I-1)*KEYSIZE;
          FOR J:=1 TO KEYSIZE DO                         
          IF KEYS(J+KI)<>KEYS(J-1+K) THEN J:=10000;
          IF J<10000 THEN                                                   
          BEGIN                                                             
            STATUS(CURRFILE):=SKRIV;                                  
            IER:=-31;                                                       
            EXIT(OBEY)                                                      
          END                                                               
        END                                                                 
      END                                                                   
    END;
    IF CURRFUNC IN (.SLET,GEMPOST.) THEN
       IF STATUS(CURRFILE)=XCLUSIV THEN STATUS(CURRFILE):=SKRIV
  END
END;
(*$P*)
BEGIN (*OBEY*)
  WITH USER(CURRUSER) DO       
  BEGIN
(*PAS PÅ DATASTRUKTUR NÅR OBEY MISLYKKES*)
    CASE PROGRAMNR OF
    -1:IF CURRFUNC IN
       (.ÅBEN..INITIER,UAFMELD..PAFMELD,RETURNHEAD,RETURNSTAT.) THEN IER:=-22;
     0:IF CURRFUNC IN                                                         
       (.ÅBEN..INITIER,PAFMELD,RETURNHEAD,RETURNSTAT.) THEN IER:=-24 
       ELSE IF CURRFUNC IN (.UTILMELD,STOPSYS.) THEN IER:=-21 
    OTHERWISE
       IF CURRFUNC IN (.UTILMELD..PTILMELD,STOPSYS.) THEN IER:=-23;
    IF IER<>0 THEN EXIT(OBEY);
 
    IF CURRFUNC IN (.LÆSPOST..INITIER,RETURNHEAD.) THEN
       IF STATUS(CURRFILE)=LUKKET THEN BEGIN IER:=-3;EXIT(OBEY) END;
     
    IF CURRFUNC IN (.LÆSPOSTX,NÆSTEX,INDSÆT,INITIER.) THEN
       IF STATUS(CURRFILE)=LÆS THEN BEGIN IER:=-30;EXIT(OBEY) END;
 
    IF CURRFUNC IN (.SLET,SLETX,GEMPOST.) THEN
       IF NOT (STATUS(CURRFILE) IN (.XCLUSIV,XXCLUSIV.)) THEN
       BEGIN
         IER:=-32;
         EXIT(OBEY)
       END;
 
    CASE CURRFUNC OF                                                          
    ÅBEN:OUVRIR;
    LUK :STATUS(CFILE):=LUKKET;(*IKKE NØDV.CURRFILE, ZONEN BRUGES IKKE*)
    LÆSPOST,LÆSPOSTX:REED;
    NÆSTE,NÆSTEX:NÆKST;
    SLET,SLETX,GEMPOST:ERASAVE;
 
    INDSÆT:BEGIN
             INSERT;
             PEXTRACT(KEYSTART);
             IF STATUS(CURRFILE)=XCLUSIV THEN STATUS(CURRFILE):=SKRIV
           END;
 
    INITIER:BEGIN
              IREC:=BESKED.IREC;
              INITIATE
            END;
 
    UTILMELD:                                                                 
    BEGIN                                                                     
      PROGRAMNR:=0;                                            
      IF NROFUSERS=MAXUSERS THEN
      BEGIN
        IER:=-34;
        EXIT(OBEY)
      END;
      NROFUSERS:=NROFUSERS+1                                                  
    END;
 
    UAFMELD:                                                                  
    BEGIN                                                                     
      PROGRAMNR:=-1;                                           
      NROFUSERS:=NROFUSERS-1;                                                 
      FOR CFILE:=1 TO NROFFILES DO STATUS(CFILE):=LUKKET
    END;
 
    PTILMELD:PROGRAMNR:=BESKED.INFO;
 
    PAFMELD:PROGRAMNR:=0;
 
    STOPSYS:BEGIN
              IF BESKED.INFO=1 THEN NROFUSERS:=0;
              IER:=NROFUSERS 
            END;
 
    RETURNHEAD:RETURNEZ;
     
    RETURNSTAT:
    BEGIN
      REC^(1):=USER(STATUSER).PROGRAMNR;
      FOR CFILE:=1 TO NROFFILES DO
        IF ZONEPOST(CFILE)=0 THEN REC^(CFILE+1):=ORD(LUKKET)
        ELSE 
        REC^(CFILE+1):=ORD(USER(STATUSER).STATUS(CFILE))
    END 
 
    END (*CASE CURRFUNC*)
  END   
END; (*OBEY*)

Full view