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

⟦46369b3d2⟧ TextFile

    Length: 20224 (0x4f00)
    Types: TextFile
    Notes: Mikados_K
    Names: »LIMTIDSF.K«

Derivation

└─⟦6c21327e0⟧ Bits:30008986 LINIMATIC K-FILER (IKKE HELT UPTODTATE)
    └─⟦this⟧ »LIMTIDSF.K« 

Mikados K File

PROGRAM LIMTIDSF;
(*REGISTRERING AF TIDSFORBRUG*)
(*$L-*)
CONST MAXRECSIZE=1000;
(*@@*)
      PROGRAMNR=6;
TYPE
PARMARRAY=PACKED ARRAY (1..39) OF CHAR;
NIVEAU=(MENIG,SERGENT,LØJTNANT,KAPTAJN,MAJOR,OBERST,GENERAL,HSM,UMULIUS);
POSTADR=0..MAXRECSIZE;
COMMBUF =ARRAY (POSTADR) OF INTEGER;(*commbuf(0)=filnr,resten er posten*)
POINTREC=^COMMBUF;
NAME    =STRING(10);
PCB     =^INTEGER;
MESSAGETYPE=(ÅBEN,LUK,LÆSPOST,LÆSPOSTX,NÆSTE,NÆSTEX,SLET,SLETX,GEMPOST,
             INDSÆT,INITIER,UTILMELD,UAFMELD,PTILMELD,PAFMELD,STOPSYS,        
             RETURNHEAD,RETURNSTAT);                                    
MESSAGE =RECORD
           KOMMANDO:MESSAGETYPE;
           INFO,IREC:INTEGER 
         END;
AR=ARRAY (-4..-4) OF INTEGER;
VAR    PARM:^PARMARRAY;
       USERNIVEAU:NIVEAU;
       F:STRING(18);
       QUQ:^INTEGER;
       IER,IREC,STATUSER,MODE,REMUSERS,
       FILNR,I:INTEGER;
       FNAVN,REGNAVN,DESCNAVN:STRING(18);
       SEMAFOR:NAME;
       FILEINIT:BOOLEAN;
       SNYD:AR;
       CPPCB:PCB;
       COMREC:POINTREC;
       BESKED:MESSAGE;
(*$P*)
(*$L-*)
PROCEDURE D(FRA,NR:INTEGER);
VAR I:INTEGER;
BEGIN
  GOTOXY(1,FRA);
  FOR I:=1 TO NR DO WRITELN(' ':79);
  GOTOXY(1,FRA)
END;
PROCEDURE NONEXIST(S:STRING);
BEGIN
  D(23,1);
  WRITE(S,' findes ikke, RETURN ');
  READLN;D(23,1) 
END;
PROCEDURE BAD(IDENT,STATUS:INTEGER);
BEGIN
  D(23,1);
  WRITE('BAD',IDENT:5,STATUS:5);
  READLN
END;
(*$P*)
PROCEDURE ALLOCA(VAR ADDRESS:POINTREC;LENGTH:INTEGER;
                 VAR STATUS:INTEGER);
EXTERNAL;
PROCEDURE DEALLO(ADDRESS:POINTREC;VAR STATUS:INTEGER);
EXTERNAL;
PROCEDURE SENDM(RECEIVER:PCB;VAR CONTENTS:MESSAGE;
                LENGTH:INTEGER;VAR STATUS:INTEGER);
EXTERNAL;
PROCEDURE RECEIV(VAR SENDER:PCB;VAR CONTENTS:MESSAGE;
                 VAR LENGTH:INTEGER);
EXTERNAL;
PROCEDURE RESERV(RESOURCE:NAME;EXCLUSIVE,WAIT:BOOLEAN;
                 VAR STATUS:INTEGER);
EXTERNAL;
PROCEDURE RELEAS(RESOURCE:NAME;VAR STATUS:INTEGER);
EXTERNAL;
(*$IRESPRINT*)
(*$P*)
(*$IUDFØR*)
(*$IFISFPROC*)
(*$P*)
PROCEDURE REGVEDL;
CONST MAXFELTER=30;
(*@@*)
TYPE
NFELT=^FELTBESKRIVELSE;
SKÆRMPOS=RECORD
   X,Y:INTEGER
END;
FTYPE=(HELTAL,DOBBTAL,REEL,TEKST);
VTYPE=(HINTERVAL,DINTERVAL,RINTERVAL,DATO,CPR);
BESKRIVELSESTYPE=(FELTDESC,VALIDESC);
FELTBESKRIVELSE=RECORD
   NÆSTEVAL:NFELT;
   FELTNAVN:STRING(8);
   CASE DESCTYPE:BESKRIVELSESTYPE OF
   FELTDESC:
  (INDPOS,UDPOS:SKÆRMPOS;
   KIKKENIVEAU,ÆNDRENIVEAU:NIVEAU;
   EDITERING:INTEGER;
   LEDETEKST,FØLGETEKST:STRING;
   INDEKS,
   LÆNGDE,
   HÆGTE,
   FORAN0:INTEGER;
   CASE FELTTYPE:FTYPE OF
   REEL:(DEC:INTEGER);
   HELTAL,DOBBTAL,TEKST:());
   VALIDESC:
  (CASE VALIDITETSTYPE:VTYPE OF
      HINTERVAL:(MIN,MAX:INTEGER);
      DINTERVAL:(MIN1,MIN2,MAX1,MAX2:INTEGER);
      RINTERVAL:(RMIN,RMAX:REAL);
      DATO,CPR:())
END;
ARAR=PACKED ARRAY (-11..-10) OF CHAR;
RAR=ARRAY (0..0) OF REAL;
LONGINT = ARRAY (1..2) OF INTEGER;
(*@@EVT. TOTAL POSTERKLÆRING,FLERE POSTER*)
(*$P*)
(*$L+*)
MEDAPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TIMESATS,
  PERSTIME,
  TOTTIMLØ,
  PRODTIME,
  AKKORDLØ,
  AKKORDAR          :REAL;
  NR,
  AFDELING          :INTEGER;
  NAVN              :PACKED ARRAY (1..30) OF CHAR
END;
PRODPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  KRSTK,    (*SAMLET TIMESATS FOR ALLE RESSOURCER*)
  REAANTAL          :REAL;
  ORDRENR,
  SEKVENSN,
  OPERANR,
  STARTTID,
  OPERAFSL,
  STKH,
  RESS1,
  RESS2,
  RESS3,
  RESS4,
  RESS5,
  EMNENR,
  VARIGHED          :INTEGER 
END;
OMVPPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  ORDRENR,
  SEKVENSN,
  OPERANR,
  EMNENR            :INTEGER 
END;
ORDRPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  ANTALBES,
  SALGSPRI,
  MATOMK,
  LØNOMK,
  MASKINOM,
  SMEOMK,
  MATFORB           :REAL;
  NR                :INTEGER;
  KUNDENR           :LONGINT;
  EMNENR            :INTEGER;
  REGDATO           :LONGINT;
  ØNSKLEV,
  BEKRÆLEV          :INTEGER;
  KUNDORDR          :PACKED ARRAY (1..16) OF CHAR;
  INITIALE          :PACKED ARRAY (1..4) OF CHAR 
END;
REGLPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TID,
  MÆNGDE,
  LØN              :REAL;
  ORDRENR,
  EMNENR,
  OPERANR,
  MEDARBNR         :INTEGER;
  DATO             :LONGINT;
  RTYPE            :INTEGER
END;
OMVRPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  MEDARBNR,
  ORDRENR,
  EMNENR,
  OPERANR          :INTEGER;
  DATO             :LONGINT 
END;
SYSRPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  AKKTIME          :ARRAY (1..9) OF REAL;
  NR               :INTEGER;
  DAGSDATO,                 
  PERSTDAT         :LONGINT;
  ARBTIMDA,         
  ORDRENR          :INTEGER 
END;
(*$P*)
VAR FELT:NFELT;
    HUSKNIV:NIVEAU;
    PICTURE:ARRAY (1..MAXFELTER) OF NFELT;
    OPTION,LINES,
    I,J,ANTALFELTER:INTEGER;
    LINE:STRING;
    MEDARB:MEDAPOST;
    PROD:PRODPOST;
    OMVPROD:OMVPPOST;
    ORDRE:ORDRPOST;
    POST:REGLPOST;
    OMVRREGL:OMVRPOST;
    SYSTEM:SYSRPOST;
    LONGNUL:LONGINT;
    CH:CHAR;
    NEJ,JA,JAOGNEJ:SET OF CHAR;
(*$P*)
(*$L-*)
FUNCTION QJN(S:STRING):CHAR;
VAR CH:STRING(1);
BEGIN
  REPEAT
    D(23,1);
    WRITE(S,' J/N ');
    CH:='J';
    EDIT(CH)
  UNTIL CH(1) IN JAOGNEJ;
  QJN:=CH(1);
  D(23,1) 
END;
PROCEDURE ERROR(VAR REC:AR);
VAR CH:STRING(1);
    I:INTEGER;
BEGIN
  D(23,1);
                                                                     (*$R-*)
  WRITE('FEJL I REGISTER ',REC(-3),' FEJLKODE ',IER,' RETURN');      (*$R+*)
  CH:=' ';EDIT(CH);
  IF CH='Æ' THEN BEGIN IER:=0;EXIT(ERROR) END;
  ICLOSE(MEDARB.A);  
  ICLOSE(POST.A); 
  ICLOSE(OMVPROD.A); 
  ICLOSE(SYSTEM.A);
  ICLOSE(ORDRE.A);
  ICLOSE(OMVRREGL.A);
  ICLOSE(PROD.A); 
  EXIT(REGVEDL)
END;
PROCEDURE CHECK0(VAR REC:AR);
BEGIN
  IF IER<>0 THEN ERROR(REC)
END;
(*$P*)
(*$L-*)
(*$IRLÆSDESC*)
(*$P*)
(*$IMOVETOLI*)
(*$P*)
(*$L+*)
PROCEDURE MAINTAIN;
VAR CH:CHAR;
    C:STRING(1);
    POSTFOUND,
    PRODFOUND:BOOLEAN;
    LINIER:INTEGER;
 
PROCEDURE SUMTID;
VAR SUM:REAL;
BEGIN
  SUM:=0.0;
  POST.MEDARBNR:=0;
  POST.DATO:=LONGNUL;
  REPEAT
    NEXTRECX(POST.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(POST.A);
    SUM:=SUM+POST.TID 
  UNTIL POST.DATO(1)>99;
  POST.TID:=SUM
END;
 
PROCEDURE FINDTOTAL;
VAR TOTAL:REAL;
BEGIN
  TOTAL:=0.0;
  PROD.SEKVENSN:=0;
  PROD.OPERANR:=0;
  REPEAT
    NEXTRECX(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);IER:=0;
    IF (PROD.SEKVENSN<>OMVPROD.SEKVENSN) OR (PROD.OPERANR<>POST.OPERANR) THEN
      TOTAL:=PROD.REAANTAL
  UNTIL (PROD.SEKVENSN=OMVPROD.SEKVENSN) AND (PROD.OPERANR=POST.OPERANR);
  POST.MÆNGDE:=TOTAL
END;
(*$P*)
PROCEDURE REGLINIE;
VAR HTID,HMÆNGDE,HLØN:REAL;
    HDATO1,HTYPE:INTEGER;
 
PROCEDURE AFSLUTNING;
BEGIN
  WITH POST DO
  BEGIN
      LØN:=0.0;
      LÆSFELT(PICTURE(12));
      TID:=TID/100.0;
      IF TID=0.0 THEN SUMTID;
      GOTOXY(55,LINIER+3);
      WRITE(TID:8:2,'  Afslutning');
      D(15,5);
      WRITELN('  Total mængde beregnes efter');
      WRITELN('1 Hidtil realiserede tal');
      WRITELN('2 Indtastet antal');
      WRITELN('3 Ordreantal');
      WRITELN('4 Forrige operations total');
      REPEAT
        D(20,1);
        WRITE('Vælg 1-4 ');
        READLN;READ(OPTION);
        IF NOT PRODFOUND AND (OPTION IN (.1,4.)) THEN OPTION:=0
      UNTIL (IORESULT=0) AND (OPTION IN (.1..4.));
      D(15,6);
      CASE OPTION OF
      1:MÆNGDE:=PROD.REAANTAL;
      2:BEGIN
          LÆSFELT(PICTURE(11)) 
        END;
      3:MÆNGDE:=ORDRE.ANTALBES;
      4:MÆNGDE:=-1.0
      END;
      IF OPTION=4 THEN FINDTOTAL;
      GOTOXY(32,LINIER+3);WRITE(MÆNGDE:6:-2);
      IF QJN('Skal linien accepteres') IN NEJ THEN
      BEGIN
        D(LINIER+3,1);
        IF NOT POSTFOUND THEN
        BEGIN
          GETRECX(A);CHECK0(A);
          DELETE(A);IF NOT (-IER IN (.0,2.)) THEN ERROR(A)
        END;
        EXIT(REGLINIE)
      END;
      PROD.REAANTAL:=MÆNGDE;
      PROD.OPERAFSL:=1;
      HTID:=TID;
      HMÆNGDE:=MÆNGDE;
      GETRECX(A);CHECK0(A);
      TID:=HTID;
      MÆNGDE:=HMÆNGDE;
      LØN:=0.0;
      RTYPE:=0;
      PUTREC(A);
      CHECK0(A);
      D(LINIER+3,1)
  END
END;
(*$P*)
PROCEDURE SLETLINIE;
VAR CH:CHAR;
BEGIN
  CH:='N';
  IF PRODFOUND AND (PROD.OPERAFSL=1) THEN
  BEGIN
    POST.DATO(1):=POST.DATO(1)+100;
    GETRECX(POST.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(POST.A);
    IF IER=0 THEN
      CH:=QJN('Ønskes afslutningsregistreringen slettet')
    ELSE
      POST.DATO(1):=POST.DATO(1)-100 
  END;
  IF CH IN JA THEN
  BEGIN
    PROD.OPERAFSL:=0;
    PROD.REAANTAL:=0;
    D(LINIER+3,1)
  END
  ELSE
  BEGIN
    GETRECX(POST.A);CHECK0(POST.A);
    IF POST.RTYPE>0 THEN
      PROD.REAANTAL:=PROD.REAANTAL-POST.MÆNGDE;
    IF ABS(POST.RTYPE)=1 THEN
      MEDARB.PRODTIME:=MEDARB.PRODTIME-POST.TID
    ELSE
    IF ABS(POST.RTYPE)=2 THEN
    BEGIN
      MEDARB.AKKORDAR:=MEDARB.AKKORDAR-POST.TID;
      IF PROD.STKH>0 THEN  
        MEDARB.AKKORDLØ:=MEDARB.AKKORDLØ-POST.MÆNGDE/PROD.STKH
      ELSE
        MEDARB.AKKORDLØ:=
        MEDARB.AKKORDLØ-POST.MÆNGDE/ORDRE.ANTALBES*PROD.STKH/100.0
    END
    ELSE
    BEGIN
      MEDARB.AKKORDAR:=MEDARB.AKKORDAR-POST.TID;
      MEDARB.AKKORDLØ:=MEDARB.AKKORDLØ-POST.TID 
    END
  END;
  PUTREC(PROD.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(PROD.A);
  WITH OMVRREGL DO
  BEGIN
    MEDARBNR:=POST.MEDARBNR;
    ORDRENR:=POST.ORDRENR;
    EMNENR:=POST.EMNENR;
    OPERANR:=POST.OPERANR;
    DATO:=POST.DATO;
    GETRECX(A);IF NOT (-IER IN (.0,6.)) THEN ERROR(A);
    IF IER=0 THEN
    BEGIN
      DELETE(A);IF NOT (-IER IN (.0,2,9.)) THEN ERROR(A)
    END
  END;
  DELETE(POST.A);IF NOT (-IER IN (.0,2,9.)) THEN ERROR(POST.A) 
END;
(*$P*)
PROCEDURE AFLØN;
BEGIN
    WITH POST DO
    BEGIN
      D(16,4);
      WRITELN('  Aflønning efter');
      WRITELN('1 Medarbejders timesats');
      WRITELN('2 Indtastet timesats');
      WRITELN('3 Indtastet akkordnr');
      WRITELN('4 Indtastet kr pr stk');
      REPEAT
        D(21,1);
        WRITE('Vælg 1-4 ');
        READLN;READ(OPTION);
        IF NOT PRODFOUND AND (OPTION=3) THEN OPTION:=0
      UNTIL (IORESULT=0) AND (OPTION IN (.1..4.));
      D(16,6);
      CASE OPTION OF
      1:  LØN:=(MEDARB.TIMESATS+MEDARB.PERSTIME)*TID;
      2:BEGIN
          LÆSFELT(PICTURE(9)); 
          LØN:=(LØN+MEDARB.PERSTIME)*TID 
        END;
      3:BEGIN
          RTYPE:=RTYPE*2;
          LÆSFELT(PICTURE(10));
          IF PROD.STKH>0.0 THEN
            LØN:=TID*MEDARB.PERSTIME+
                 MÆNGDE/PROD.STKH*SYSTEM.AKKTIME(DATO(1)) 
          ELSE
            LØN:=TID*MEDARB.PERSTIME-
               MÆNGDE/ORDRE.ANTALBES*PROD.STKH/100.0*SYSTEM.AKKTIME(DATO(1)) 
        END;
      4:BEGIN
          RTYPE:=RTYPE*3;
          LÆSFELT(PICTURE(13));
          LØN:=TID*MEDARB.PERSTIME+MÆNGDE*LØN;
        END
      END; 
      GOTOXY(40,LINIER+3);WRITE(LØN:10:2) 
    END
END;
(*$P*)
BEGIN (*REGLINIE*)
  WITH POST DO
  BEGIN
    LÆSFELT(PICTURE(6));
 
    HDATO1:=DATO(1);
    DATO:=SYSTEM.DAGSDATO;
    IF HDATO1=0 THEN BEGIN DATO(1):=DATO(1)+100;MEDARBNR:=10000 END;
    TID:=0.0;
    RTYPE:=0;
    MÆNGDE:=0.0;
    LØN:=0.0;
    C:='A';
    INSERT(A);IF NOT (-IER IN (.0,7.)) THEN ERROR(A);
    IF IER=-7 THEN
    BEGIN
      POSTFOUND:=TRUE;
      GOTOXY(1,21);
      WRITELN('ORDRE-EMNE-OPERATION-MEDARBEJDER-DATO ',
              'KOMBINATIONEN FINDES ALLEREDE');
      WRITELN('Ønskes: Nyindtastning: N, Addition til ',
              'eksisterende: A , Sletning: S');
      REPEAT
        D(23,1);
        WRITE('Vælg N/A/S ');
        C:='N';
        EDIT(C) 
      UNTIL C(1) IN (.'N','n','a','A','S','s'.);
      D(21,3) 
    END ELSE POSTFOUND:=FALSE;
    IF C(1) IN (.'N','n'.) THEN EXIT(REGLINIE);
    PROD.ORDRENR:=ORDRENR;
    PROD.EMNENR:=EMNENR;
    PROD.OPERANR:=OPERANR;
    PROD.SEKVENSN:=OMVPROD.SEKVENSN;
    GETRECX(PROD.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(PROD.A);
    IF C(1) IN (.'A','a'.) THEN
    BEGIN
      IF HDATO1>0 THEN
      BEGIN
        DATO(1):=HDATO1;
        LÆSFELT(PICTURE(7));
        IF DATO(2)>0 THEN
          TID:=(DATO(2)-DATO(1))/100.0
        ELSE
          TID:=DATO(1)/100.0;
        GOTOXY(55,LINIER+3);
        WRITE(TID:8:2);
        REPEAT
          LÆSFELT(PICTURE(8))
        UNTIL PRODFOUND OR (LENGTH(LINE)>0);
        RTYPE:=-1;
        IF LENGTH(LINE)>0 THEN
        BEGIN
          RTYPE:=1;
          PROD.REAANTAL:=PROD.REAANTAL+MÆNGDE
        END
        ELSE
        IF PROD.STKH>=0 THEN
          MÆNGDE:=PROD.STKH*TID
        ELSE
          MÆNGDE:=-TID*ORDRE.ANTALBES/PROD.STKH*100.0;
        GOTOXY(32,LINIER+3);WRITE(MÆNGDE:6:-2);
        AFLØN;
        HTYPE:=RTYPE;
        HLØN:=LØN;
        HTID:=TID;
        HMÆNGDE:=MÆNGDE;
        DATO:=SYSTEM.DAGSDATO;
        IF QJN('Skal linien accepteres') IN NEJ THEN
        BEGIN
          D(LINIER+3,1);
          IF NOT POSTFOUND THEN
          BEGIN
            GETRECX(A);CHECK0(A);
            DELETE(A);IF NOT (-IER IN (.0,2.)) THEN ERROR(A)
          END;
          EXIT(REGLINIE)
        END;
        LINIER:=LINIER+1;
        CASE ABS(RTYPE) OF
        1:MEDARB.PRODTIME:=MEDARB.PRODTIME+TID;
        2:BEGIN
            IF PROD.STKH>0.0 THEN
              MEDARB.AKKORDLØ:=MEDARB.AKKORDLØ+MÆNGDE/PROD.STKH
            ELSE
              MEDARB.AKKORDLØ:=MEDARB.AKKORDLØ-
                 MÆNGDE/ORDRE.ANTALBES*PROD.STKH/100.0;
            MEDARB.AKKORDAR:=MEDARB.AKKORDAR+TID 
          END;
        3:BEGIN
            MEDARB.AKKORDAR:=MEDARB.AKKORDAR+TID;
            MEDARB.AKKORDLØ:=MEDARB.AKKORDLØ+TID 
          END
        END;
        GETRECX(A);CHECK0(A);
        RTYPE:=HTYPE;
        LØN:=LØN+HLØN;
        TID:=TID+HTID;
        MÆNGDE:=MÆNGDE+HMÆNGDE;
        PUTREC(A);CHECK0(A) 
      END
      ELSE
        AFSLUTNING  
    END
    ELSE
    BEGIN
      SLETLINIE;
      EXIT(REGLINIE)
    END;
    OMVRREGL.MEDARBNR:=MEDARBNR;
    OMVRREGL.ORDRENR:=ORDRENR;
    OMVRREGL.EMNENR:=EMNENR;
    OMVRREGL.OPERANR:=OPERANR;
    OMVRREGL.DATO:=DATO;
    INSERT(OMVRREGL.A);IF NOT (-IER IN (.0,7.)) THEN ERROR(OMVRREGL.A);
    PUTREC(PROD.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(PROD.A)
  END
END;
(*$P*)
BEGIN (*MAINTAIN*)
  WITH POST DO
  REPEAT
    NULPOST;
    CLEARSCREEN;
    WRITELN('REGISTRERING AF TIMESEDLER');
    LINIER:=0;
    WRITELN('ORDRE     EMNE      OPERATION',
            '  MÆNGDE         LØN          TID');
    LÆSFELT(PICTURE(1));
    IF MEDARBNR>0 THEN
    BEGIN
      SKRIVFELT(PICTURE(1));
      MEDARB.NR:=MEDARBNR;
      GETRECX(MEDARB.A);
      IF IER=-6 THEN
        NONEXIST('Medarbejder')
      ELSE
      BEGIN
        CHECK0(MEDARB.A);
        LÆSFELT(PICTURE(2));TID:=TID/100.0;SKRIVFELT(PICTURE(2));
        DATO:=SYSTEM.DAGSDATO;
        LÆSFELT(PICTURE(14));
        SYSTEM.DAGSDATO:=DATO;
        MEDARB.TOTTIMLØ:=MEDARB.TOTTIMLØ+TID;
        REPEAT
          MEDARBNR:=MEDARB.NR;
          IF LINIER>12 THEN BEGIN D(3,12);LINIER:=0 END;
          LÆSFELT(PICTURE(3));
          IF ORDRENR>0 THEN 
          BEGIN
            GOTOXY(1,LINIER+3);WRITE(ORDRENR:5);
            LÆSFELT(PICTURE(4));
            GOTOXY(10,LINIER+3);WRITE(EMNENR:5);
            ORDRE.NR:=ORDRENR;
            ORDRE.EMNENR:=EMNENR;
            GETREC(ORDRE.A);
            IF NOT (-IER IN (.0,6.)) THEN ERROR(ORDRE.A);
            IF IER=-6 THEN
              NONEXIST('Ordren')
            ELSE
            BEGIN
              LÆSFELT(PICTURE(5));
              GOTOXY(20,LINIER+3);WRITE(OPERANR:10);
              OMVPROD.ORDRENR:=ORDRENR;
              OMVPROD.EMNENR:=EMNENR;
              OMVPROD.OPERANR:=OPERANR;
              OMVPROD.SEKVENSN:=0;
              NEXTREC(OMVPROD.A);
              IF NOT (-IER IN (.1,2,9.)) THEN ERROR(OMVPROD.A);
              CH:='J';
              PRODFOUND:=TRUE;
              IF OMVPROD.OPERANR<>OPERANR THEN
              BEGIN
                PRODFOUND:=FALSE;
                D(22,1);
                WRITELN('Operationen findes ikke på forkalkulationen');
                CH:=QJN('Ønskes registreringen fortsat');
                D(22,1)
              END;
              IF CH IN JA THEN REGLINIE
            END 
          END
        UNTIL ORDRENR=0;
        PUTREC(MEDARB.A);CHECK0(MEDARB.A)
      END
    END
  UNTIL MEDARBNR=0
END;
(*$P*)
BEGIN (*REGVEDL*)
  LONGNUL(1):=0;
  LONGNUL(2):=0;
  JA:=(.'J','j'.);
  NEJ:=(.'N','n'.);
  JAOGNEJ:=JA+NEJ;
  CLEARSCREEN;
  LÆSDESC;
  MODE:=3;(*SKRIV*)
  (*$R-*)
  MEDARB.A(-4):=0;  
  POST.A(-4):=0; 
  SYSTEM.A(-4):=0;
  PROD.A(-4):=0;             
  OMVPROD.A(-4):=0;          
  OMVRREGL.A(-4):=0;         
  ORDRE.A(-4):=0;
  MEDARB.A(-3):=7;  
  POST.A(-3):=16;(*REGL*)
  SYSTEM.A(-3):=9;
  PROD.A(-3):=14;     
  ORDRE.A(-3):=10;
  OMVPROD.A(-3):=13;  
  OMVRREGL.A(-3):=23;  
  (*$R+*)
  (*@@EVT. ÅBNING AF ANDRE ANDRE DATAFILER*)
  IOPEN(SYSTEM.A); CHECK0(SYSTEM.A); 
  SYSTEM.NR:=0;
  GETREC(SYSTEM.A);CHECK0(SYSTEM.A);
  ICLOSE(SYSTEM.A);
  IOPEN(MEDARB.A); CHECK0(MEDARB.A); 
  IOPEN(POST.A); CHECK0(POST.A); 
  IOPEN(PROD.A); CHECK0(PROD.A); 
  IOPEN(OMVPROD.A); CHECK0(OMVPROD.A); 
  IOPEN(ORDRE.A); CHECK0(ORDRE.A);
  IOPEN(OMVRREGL.A); CHECK0(OMVRREGL.A); 
  MAINTAIN;
  ICLOSE(MEDARB.A);
  ICLOSE(POST.A);
  ICLOSE(ORDRE.A);
  ICLOSE(PROD.A);
  ICLOSE(OMVPROD.A);
  ICLOSE(OMVRREGL.A);
  (*@@EVT. LUKNING AF ANDRE DATAFILER*)
  CLEARSCREEN 
END;
(*$P*)
BEGIN
  SEMAFOR:='ALLOCOMBUF';
  I:=ORD(PARM^(1))-48;
  USERNIVEAU:=MENIG;
  WHILE I>0 DO
  BEGIN
    USERNIVEAU:=SUCC(USERNIVEAU);
    I:=I-1
  END;                                                                 (*$R-*)
  SNYD(-3):=0;
  FOR I:=6 DOWNTO 2 DO SNYD(-3):=10*SNYD(-3)+ORD(PARM^(I))-48;
  IF PARM^(7)='-' THEN SNYD(-3):=-SNYD(-3);                            (*$R+*)
  UDFØR(PTILMELD,SNYD);
  UDFØRT(PTILMELD,SNYD);
  IF IER<>0 THEN BAD(1,IER);
(*@@TILPASSES*)
  DESCNAVN:='TIDSPESC:P2:05:J';
  REGVEDL;
  UDFØR(PAFMELD,SNYD);
  UDFØRT(PAFMELD,SNYD);
  IF IER<>0 THEN BAD(2,IER);
  FNAVN:='       ';
  FOR I:=1 TO 7 DO FNAVN(I):=PARM^(I);
  CHAIN('HOVED   *1',FNAVN,QUQ);
  IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)
END.

Full view