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

⟦71ea12dd6⟧ TextFile

    Length: 35392 (0x8a40)
    Types: TextFile
    Notes: Mikados_K
    Names: »LIMORDRE.K«

Derivation

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

Mikados K File

PROGRAM LIMORDRE;
(*ORDREREGISTRERING, ORDRESPECIFIK FORKALKULATION,
  UDSKRIFT AF FORKALKULATION*)
(*$L-*)
CONST MAXRECSIZE=1000;
(*@@*)
      PROGRAMNR=4;
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+*)
RESSPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TSATSF,
  SAMOMS,
  SAMOMSSÅ,
  SAMDB,
  SAMDBSÅ,
  KØBSPRIS,
  SALGSPRI            :REAL;
  NR,
  AFDELNR,
  PRODTIM,
  VEDLTIM,
  OPSTILT,
  OVERTIM,
  REPTIME,
  TOTALTI,
  PRODTIMS,
  VEDLTIMS,
  OPSTILTS,
  OVERTIMS,
  REPTIMES,
  TOTALTIS,                    
  RESSTYPE           :INTEGER;
  DATOFLEV           :LONGINT;
  HYLDENR            :INTEGER;
  BETEGN             :PACKED ARRAY (1..10) OF CHAR
END;
KUNDPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  NR                 :LONGINT;
  NAVN               :PACKED ARRAY (1..26) OF CHAR;
  KONTAKT1,
  KONTAKT2,
  KONTAKT3,
  KONTAKT4           :PACKED ARRAY (1..30) OF CHAR
END;
REGRPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  GRUPNR,
  NR                 :INTEGER 
END;
EMNEPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  ÅRSFORBR,
  NETTOVÆG,
  BRUTTOVÆ,
  SAMSALG,
  DÆKBID,
  DÆKBIDSÅ,
  SAMSALGS          :REAL;
  NR,
  FORMNR            :INTEGER;
  KUNDENR           :LONGINT;
  MASKINE           :INTEGER;
  TILDATO           :LONGINT;
  MATNR,
  SVIND,
  SMELTTIL,
  STKHSA,
  STKHBA            :INTEGER;
  BEMÆRK,
  BETEGN,
  ALTERNP           :PACKED ARRAY (1..30) OF CHAR;
  TEGNNR            :PACKED ARRAY (1..20) OF CHAR
END;
RÅVAPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  PRISKG,
  OMSÆTP,
  DBP,
  KOSTPRIS,
  OMSÆTSP,
  DBSÅ,   
  KOSTPRSÅ,
  LAGER,    
  MINLAGE,  
  RESERVER, 
  SMEPRIS,   
  KGINDKØB,  
  KGFORBRU,  
  KGSOLGT           :REAL;   
  NR,
  LEVUGE,
  SMESVIND          :INTEGER;
  BETEGN            :PACKED ARRAY (1..16) OF CHAR
END;
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;
OPERPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TILLÆG            :REAL;
  NR,
  GRUPPE,
  REBELAS           :INTEGER;
  BETEGN            :PACKED ARRAY (1..30) OF CHAR
END;
LØNGPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TIMESATS          :REAL;
  NR                :INTEGER;
  BETEGN            :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;
EMNFPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  FORMNR,
  EMNENR            :INTEGER 
END;
KUNEPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  KUNDENR           :LONGINT;
  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;
OTEXPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  NR,
  EMNENR,
  LBNR              :INTEGER;
  TEKST             :PACKED ARRAY (1..70) OF CHAR
END;
OMVPPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  ORDRENR,
  SEKVENSN,
  OPERANR,
  EMNENR            :INTEGER 
END;
FORKPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  KRSTK             :REAL;
  EMNENR,
  SEKVENSN,
  OPERANR,
  LØNTYPE,
  STKH,
  RESS1,
  RESS2,
  RESS3,
  RESS4,
  RESS5             :INTEGER;
  ORDRENR:INTEGER;
  KUNDENR:LONGINT;
  ØLEVTERM:INTEGER;
  INIT:PACKED ARRAY (1..4) OF CHAR;
  KUORDNR:PACKED ARRAY (1..16) OF CHAR
END;
KUNOPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  KUNDENR           :LONGINT;
  ORDRENR,
  EMNENR            :INTEGER 
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;
    RESS:RESSPOST;
    KUNDE:KUNDPOST;
    RESSGRUP:REGRPOST;
    EMNE:EMNEPOST;
    RÅVARE:RÅVAPOST;
    MEDARB:MEDAPOST;
    OPERA:OPERPOST;
    LØNGRUP:LØNGPOST;
    PROD:PRODPOST;
    OMVPROD:OMVPPOST;
    ORDRE:ORDRPOST;
    ORDTEKST:OTEXPOST;
    KUNEMNE:KUNEPOST;
    KUNORDRE:KUNOPOST;
    EMNIFORM:EMNFPOST;
    POST:FORKPOST;
    SYSTEM:SYSRPOST;
    LONGNUL:LONGINT;
    CH:CHAR;
    NEJ,JA,JAOGNEJ:SET OF CHAR;
    RESSTEXT:ARRAY (10..13) OF PACKED ARRAY (1..10) 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(RESS.A);    
  ICLOSE(KUNDE.A);
  ICLOSE(RESSGRUP.A);
  ICLOSE(EMNE.A);    
  ICLOSE(RÅVARE.A);
  ICLOSE(MEDARB.A);  
  ICLOSE(OPERA.A);   
  ICLOSE(LØNGRUP.A); 
  ICLOSE(POST.A); 
  ICLOSE(OMVPROD.A); 
  ICLOSE(ORDRE.A);    
  ICLOSE(KUNEMNE.A); 
  ICLOSE(KUNORDRE.A);
  ICLOSE(EMNIFORM.A);
  ICLOSE(PROD.A); 
  ICLOSE(ORDTEKST.A);
  ICLOSE(SYSTEM.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;
    FELTNR:INTEGER;
    KALKULER:BOOLEAN;
 
(*
PROCEDURE SKRIVLINIE;
VAR J:INTEGER;
    HKRSTK:REAL;
BEGIN
  WITH POST DO
  BEGIN
    SKRIVFELT(PICTURE(1));
    SKRIVFELT(PICTURE(2));
    SKRIVFELT(PICTURE(3));
    OPERA.NR:=OPERANR;
    GETREC(OPERA.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(OPERA.A);
    IF IER=0 THEN BEGIN GOTOXY(25,6);WRITE(OPERA.BETEGN) END;
    GOTOXY(1,7);
    WRITE(' 4 Stk/h       :');
    IF STKH<0 THEN WRITE('T');
    WRITE(ABS(STKH));
    HKRSTK:=KRSTK;KRSTK:=0.0;
    FOR J:=5 TO 9 DO SKRIVFELT(PICTURE(J));
    KRSTK:=HKRSTK;
    IF LØNTYPE>0 THEN SKRIVFELT(PICTURE(4+LØNTYPE));
    GOTOXY(1,13);
    FOR J:=10 TO 13 DO
    BEGIN
      WRITE(J:2,' ',RESSTEXT(J),'  :');
      CASE J OF
      10:IF RESS1<0 THEN WRITELN('*',-RESS1:6) ELSE WRITELN(RESS1:7);
      11:IF RESS2<0 THEN WRITELN('*',-RESS2:6) ELSE WRITELN(RESS2:7);
      12:IF RESS3<0 THEN WRITELN('*',-RESS3:6) ELSE WRITELN(RESS3:7);
      13:IF RESS4<0 THEN WRITELN('*',-RESS4:6) ELSE WRITELN(RESS4:7) 
      END
    END
  END
END;
*)
(*$P*)
(*
PROCEDURE ÆNDLINIE(FELTNR:INTEGER);
VAR CH:CHAR;
    RESSURS:INTEGER;
BEGIN
 WITH POST DO
 BEGIN
  IF FELTNR IN (.5..9.) THEN
  BEGIN
    KRSTK:=0.0;
    IF LØNTYPE>0 THEN SKRIVFELT(PICTURE(LØNTYPE+4));
    LØNTYPE:=FELTNR-4
  END;
  IF FELTNR IN (.5..7.) THEN BEGIN LÆSFELT(PICTURE(FELTNR));
                                   SKRIVFELT(PICTURE(FELTNR))
                               END;
  CASE FELTNR OF
  4:BEGIN
    REPEAT
      STKH:=0;
      D(23,1);
      WRITE(' Stk/h ');
      READLN;
      IF NOT EOLN THEN
      BEGIN
        IF INPUT^ IN (.'T','t'.) THEN READ(CH);
        IF INPUT^ IN (.'0'..'9'.) THEN READ(STKH);  
        IF CH IN (.'T','t'.) THEN STKH:=-STKH
      END
    UNTIL STKH<>0;
    GOTOXY(17,7);
    IF STKH<0 THEN WRITE('T',-STKH) ELSE WRITE(STKH) 
    END;
  8:REPEAT
      LÆSFELT(PICTURE(FELTNR));  
      SKRIVFELT(PICTURE(FELTNR));
      LØNGRUP.NR:=TRUNC(KRSTK);
      GETREC(LØNGRUP.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(LØNGRUP.A);
      IF IER=-6 THEN NONEXIST('Løngruppe')
    UNTIL IER=0;
  9:REPEAT
      LÆSFELT(PICTURE(FELTNR));  
      SKRIVFELT(PICTURE(FELTNR));
      MEDARB.NR:=TRUNC(KRSTK);
      GETREC(MEDARB.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(MEDARB.A);
      IF IER=-6 THEN NONEXIST('Medarbejder')
    UNTIL IER=0;
  10,11,12,13:
    BEGIN
    REPEAT
      CH:='Æ';
      D(23,1);
      WRITE(FELTNR:2,' ',RESSTEXT(FELTNR),'  :');
      READLN;
      IF EOLN THEN
      BEGIN
        CH:='Å';
        RESSURS:=0
      END
      ELSE
      IF INPUT^='*' THEN
      BEGIN
        READ(CH);
        IF INPUT^ IN (.'0'..'9'.) THEN
        BEGIN
          READ(RESSURS);
          RESSURS:=-RESSURS;
          RESSGRUP.GRUPNR:=-RESSURS;
          RESSGRUP.NR:=-1;
          NEXTREC(RESSGRUP.A);IF NOT (-IER IN (.1,2,9.)) THEN
                                          ERROR(RESSGRUP.A);
          IF RESSGRUP.GRUPNR<>-RESSURS THEN
            NONEXIST('Ressourcegruppe')
          ELSE CH:='Å'
        END
      END
      ELSE
      BEGIN
        IF INPUT^ IN (.'0'..'9'.) THEN
        BEGIN
          READ(RESSURS);
          IF RESSURS<>0 THEN
          BEGIN
            RESS.NR:=RESSURS;
            GETREC(RESS.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(RESS.A);
            IF IER=-6 THEN NONEXIST('Ressource')
            ELSE CH:='Å'
          END ELSE CH:='Å'
        END
      END 
    UNTIL CH='Å';
    GOTOXY(1,FELTNR+3);
    WRITE(FELTNR:2,' ',RESSTEXT(FELTNR),'  :');
    IF RESSURS<0 THEN WRITE('*',-RESSURS:6) ELSE WRITE(RESSURS:7);
    CASE FELTNR OF
    10:RESS1:=RESSURS;
    11:RESS2:=RESSURS;
    12:RESS3:=RESSURS;
    13:RESS4:=RESSURS 
    END
    END
  END
 END
END;
*)
(*$P*)
PROCEDURE TILPASFORK;
VAR FELTNR:INTEGER;
 
PROCEDURE FIXSATS(VAR RESSURS:INTEGER;VAR OMKOST:REAL);
VAR SATS:REAL;
BEGIN
  IF RESSURS>0 THEN
  BEGIN
    RESS.NR:=RESSURS;
    GETREC(RESS.A);IF IER<>0 THEN ERROR(RESS.A);
    SATS:=RESS.TSATSF
  END
  ELSE 
  IF RESSURS<0 THEN
  BEGIN
    RESSGRUP.GRUPNR:=-RESSURS;
    RESSGRUP.NR:=-1;
    NEXTREC(RESSGRUP.A);IF NOT (-IER IN (.1,2,9.)) THEN
                                      ERROR(RESSGRUP.A);IER:=0;
    RESS.NR:=RESSGRUP.NR;
    GETREC(RESS.A);IF IER<>0 THEN ERROR(RESS.A);
    SATS:=RESS.TSATSF
  END
  ELSE SATS:=0.0;
  IF SATS<>0.0 THEN
  WITH PROD,ORDRE DO
  BEGIN
    IF STKH<=0 THEN
      OMKOST:=-STKH*SATS/ANTALBES/100.0+OMKOST
    ELSE 
      OMKOST:=SATS/STKH+OMKOST;
    KRSTK:=KRSTK+SATS
  END 
END;
(*$P*)
BEGIN (*TILPASFORK*)
  POST.EMNENR:=EMNE.NR;
  POST.SEKVENSN:=0;
  POST.OPERANR:=0;
  NEXTREC(POST.A);IF NOT (-IER IN (.1,2,9.)) THEN ERROR(POST.A);IER:=0;
  WHILE (IER=0) AND (POST.EMNENR=EMNE.NR) DO
  BEGIN
    (*
    CLEARSCREEN;
    SKRIVLINIE;
    IF QJN('Skal operationen med') IN JA THEN
    BEGIN
      REPEAT
        REPEAT
          D(23,1);
          WRITE('Ændring af feltnr 4-13, 0 for færdig ');
          READLN;READ(FELTNR)
        UNTIL (IORESULT=0) AND (FELTNR IN (.0,4..13.));
        IF FELTNR>0 THEN ÆNDLINIE(FELTNR)
      UNTIL FELTNR=0;
      *)
      PROD.ORDRENR:=ORDRE.NR;
      PROD.EMNENR:=ORDRE.EMNENR;
      PROD.SEKVENSN:=POST.SEKVENSN;
      PROD.OPERANR:=POST.OPERANR;
      PROD.STKH:=POST.STKH;
      PROD.REAANTAL:=0.0;
      PROD.STARTTID:=0;
      PROD.OPERAFSL:=0;
      PROD.RESS1:=POST.RESS1;
      PROD.RESS2:=POST.RESS2;
      PROD.RESS3:=POST.RESS3;
      PROD.RESS4:=POST.RESS4;
      PROD.RESS5:=POST.RESS5;
      CASE POST.LØNTYPE OF
      1:IF POST.STKH<0 THEN
          PROD.KRSTK:=-POST.KRSTK/POST.STKH/100.0
        ELSE
          PROD.KRSTK:=POST.KRSTK*POST.STKH;
      2:PROD.KRSTK:=POST.KRSTK;
      3:PROD.KRSTK:=SYSTEM.AKKTIME(TRUNC(POST.KRSTK));
      4:BEGIN
          LØNGRUP.NR:=TRUNC(POST.KRSTK);
          GETREC(LØNGRUP.A);IF IER<>0 THEN ERROR(LØNGRUP.A);
          PROD.KRSTK:=LØNGRUP.TIMESATS 
        END;
      5:BEGIN
          MEDARB.NR:=TRUNC(POST.KRSTK);
          GETREC(MEDARB.A);IF IER<>0 THEN ERROR(MEDARB.A);
          PROD.KRSTK:=MEDARB.TIMESATS 
        END 
      END;
      IF PROD.STKH<=0 THEN
      BEGIN
        PROD.VARIGHED:=ROUND(-PROD.STKH/100.0+0.499);
        ORDRE.LØNOMK:=-PROD.STKH*PROD.KRSTK/ORDRE.ANTALBES/100.0+ORDRE.LØNOMK
      END
      ELSE 
      BEGIN
        PROD.VARIGHED:=ROUND(ORDRE.ANTALBES/PROD.STKH+0.499);
        ORDRE.LØNOMK:=PROD.KRSTK/PROD.STKH+ORDRE.LØNOMK 
      END;
      FIXSATS(PROD.RESS1,ORDRE.MASKINOM);(*MASKINE*)
      FIXSATS(PROD.RESS2,ORDRE.LØNOMK);  (*OPERATØR*)
      FIXSATS(PROD.RESS3,ORDRE.MASKINOM);(*VÆRKTØJ*)
      FIXSATS(PROD.RESS4,ORDRE.MASKINOM);(*HJÆLPEVÆRKTØJ*)
      INSERT(PROD.A);IF IER<>0 THEN ERROR(PROD.A);
      OMVPROD.ORDRENR:=PROD.ORDRENR;
      OMVPROD.SEKVENSN:=PROD.SEKVENSN;
      OMVPROD.OPERANR:=PROD.OPERANR;
      OMVPROD.EMNENR:=PROD.EMNENR;
      INSERT(OMVPROD.A);IF IER<>0 THEN ERROR(OMVPROD.A)
  (*END*);
    NEXTREC(POST.A)
  END;
  IF NOT (-IER IN (.0..2,9.)) THEN ERROR(POST.A)
END;
(*$P*)
PROCEDURE BEREGNMAT;
VAR SMELT,FORBRUG,OMK:REAL;
 
BEGIN
  RÅVARE.NR:=EMNE.MATNR;
  GETREC(RÅVARE.A);IF IER<>0 THEN ERROR(RÅVARE.A);
  WITH RÅVARE,EMNE DO
  BEGIN
    SMELT:=NETTOVÆG*(1000.0+SVIND)/1000.0*(1000.0+SMELTTIL)/1000.0*
           (1000.0+SMESVIND)/1000.0;
    OMK:=SMELT*SMEPRIS/1000.0;
  (*WRITELN(LIST,'SMELTEOMKOSTNINGER',SMELT:7:3,' g a',SMEPRIS:5:2,
                 ' Kr pr. g',OMK:8:3);*)
    ORDRE.SMEOMK:=OMK;
    FORBRUG:=SMELT-NETTOVÆG*(1000.0+SVIND)/1000.0*SMELTTIL/1000.0;
    OMK:=FORBRUG*KOSTPRIS/1000.0;
  (*WRITELN(LIST,'MATERIALEFORBRUG  ',FORBRUG:7:3,' g a',KOSTPRIS:5:2,
                 ' Kr pr. g',OMK:8:3);*)
    ORDRE.MATFORB:=OMK;
    ORDRE.MATOMK:=ORDRE.SMEOMK+OMK
  END
 
END;
(*$P*)
PROCEDURE FORKALKULATION;  
VAR LINES:INTEGER;
    EMNFOUND,KUNFOUND:BOOLEAN;
    TTPSTK,TTOTTID,TKRPSTK:REAL;
 
PROCEDURE HEADING;
BEGIN
  WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
  FOR LINES:=1 TO 2 DO WRITELN(LIST);
  WRITELN(LIST,' ':52,'kunde-ordrenr',' ':6,'linimatic ordrenr',' ':5,
               'emnenr',' ':6,'dato');
  WRITELN(LIST,'FORKALKULATION',' ':38,ORDRE.KUNDORDR,
               ORDRE.NR:20,ORDRE.EMNENR:11,
               SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2):10:-2);
  WRITELN(LIST,'tegn. nr',' ':22,'benævnelse',' ':26,'kunde',
               ' ':31,'kundenr');
  IF EMNFOUND THEN
    WRITE(LIST,EMNE.TEGNNR,' ':10,EMNE.BETEGN,' ':6) 
  ELSE WRITE(LIST,'IKKE OPRETTET':66);
  IF KUNFOUND THEN WRITE(LIST,KUNDE.NAVN)
  ELSE WRITE(LIST,'IKKE OPRETTET':26);
  WRITELN(LIST,ORDRE.KUNDENR(1)*10000.0+ORDRE.KUNDENR(2):17:-2);
  WRITELN(LIST);
  WRITELN(LIST,'op op- betegnelse        antal a mas-  stk   tid  total',
               '    time    kr');
  WRITELN(LIST,'nr art                           kine   /h  /stk    tid',
               '    sats  /stk');
  WRITELN(LIST);
  LINES:=10 
END;
PROCEDURE BOTTOM;
BEGIN
  WITH ORDRE DO
  BEGIN
    WRITELN(LIST,'---------------------------------------------------------',
                 '------------');
    WRITELN(LIST,'TOTAL',' ':35,TTPSTK:8:3,TTOTTID:7:2,TKRPSTK:14:3);
    WRITELN(LIST);
    IF LINES>34 THEN HEADING;
  (*IF KALKULER THEN BEREGNMAT
    ELSE
    BEGIN*)
      WRITELN(LIST,'SMELTEOMKOSTNINGER',' ':27,SMEOMK:8:3);
      WRITELN(LIST,'MATERIALEFORBRUG  ',' ':27,MATFORB:8:3)
  (*END*);
    WRITELN(LIST,' ':45,'----------------');
    WRITELN(LIST,'MAT.-OMKOSTNINGER ',' ':27,MATOMK:8:3,MATOMK:8:3);
    WRITELN(LIST,'LØNOMKOSTNINGER   ',' ':35,LØNOMK:8:3);
    WRITELN(LIST,'MASKINOMKOSTNINGER',' ':35,MASKINOM:8:3);
    WRITELN(LIST,' ':53,'----------------');
    WRITELN(LIST,'EMNEPRIS          ',' ':35,MATOMK+
                 LØNOMK+MASKINOM:8:3,MATOMK+LØNOMK+MASKINOM:8:3);
    WRITELN(LIST,'DÆKNINGSBIDRAG    ',' ':35,-MATOMK+
                      SALGSPRI-LØNOMK-MASKINOM:16:3);
    WRITELN(LIST,' ':61,'--------');
    WRITELN(LIST,'SALGSPRIS         ',' ':35,SALGSPRI:16:3);
    WRITELN(LIST,' ':61,'========') 
  END;
  LINES:=LINES+15;
  WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END 
END;
(*$P*)
BEGIN (*FORKALKULATION*)
 (*
 REPEAT
   CH:=QJN('Ønskes testprint');
   IF CH IN JA THEN
   BEGIN
     FOR LINES:=1 TO 4 DO WRITELN(LIST);
     WRITELN(LIST,' ':35,'XXXXXX');
     FOR LINES:=6 TO 51 DO WRITELN(LIST)
   END 
 UNTIL CH IN NEJ;
 *)
 LINES:=51;
 WITH PROD DO
 BEGIN
 
  WITH KUNDE DO
  BEGIN
  NR:=ORDRE.KUNDENR;
  GETREC(A);IF NOT (-IER IN (.0,6.)) THEN ERROR(A);
  KUNFOUND:=(IER=0)
  END;
 
  WITH EMNE DO
  BEGIN
  NR:=ORDRE.EMNENR;
  GETREC(A);IF NOT (-IER IN (.0,6.)) THEN ERROR(A);
  EMNFOUND:=(IER=0)
  END;
 
  TTPSTK:=0.0;
  TTOTTID:=0.0;
  TKRPSTK:=0.0;
 
  ORDRENR:=ORDRE.NR;
  EMNENR:=ORDRE.EMNENR;
  SEKVENSN:=0;
  OPERANR:=0;
  NEXTREC(A);IF NOT (-IER IN (.1,2,9.)) THEN ERROR(A);
  IER:=0;
  WHILE (IER=0) AND (EMNENR=ORDRE.EMNENR) AND (ORDRENR=ORDRE.NR) DO
  BEGIN
    IF LINES>48 THEN HEADING;
    LINES:=LINES+1;
    WRITE(LIST,SEKVENSN:2,OPERANR:4,' ');
    WITH OPERA DO
    BEGIN
      NR:=OPERANR;
      GETREC(A);IF NOT (-IER IN (.0,6.)) THEN ERROR(A);
      IF IER=0 THEN WRITE(LIST,BETEGN:17)
      ELSE WRITE(LIST,'IKKE OPRETTET':17) 
    END;
    WRITE(LIST,ORDRE.ANTALBES:6:-2);
    IF RESS1>0 THEN
    WITH RESS DO
    BEGIN
      NR:=RESS1;
      GETREC(A);IF NOT (-IER IN (.0,6.)) THEN ERROR(A);
      IF IER=0 THEN
        WRITE(LIST,AFDELNR:2,NR:5)
      ELSE WRITE(LIST,'UO',RESS1:5)
    END
    ELSE
    IF RESS1=0 THEN WRITE(LIST,' ':7)
    ELSE WRITE(LIST,'  *',-RESS1:4);
    IF STKH<=0 THEN
    BEGIN
      TTOTTID:=TTOTTID-STKH/100.0;
      WRITE(LIST,-STKH/100.0:18:2)
    END
    ELSE
    BEGIN
      TTPSTK:=TTPSTK+1/STKH;
      TTOTTID:=TTOTTID+ORDRE.ANTALBES/STKH;
      WRITE(LIST,STKH:5,1/STKH:6:3,ORDRE.ANTALBES/STKH:7:2) 
    END;
    WRITE(LIST,KRSTK:8:2);
    IF STKH<=0 THEN
    BEGIN
      TKRPSTK:=TKRPSTK-STKH*KRSTK/ORDRE.ANTALBES/100.0;
      WRITELN(LIST,-STKH*KRSTK/ORDRE.ANTALBES/100.0:6:3)
    END
    ELSE
    BEGIN
      TKRPSTK:=TKRPSTK+KRSTK/STKH;
      WRITELN(LIST,KRSTK/STKH:6:3) 
    END;
    NEXTREC(A)
  END;
  BOTTOM;
  IF NOT (-IER IN (.0,2,9.)) THEN ERROR(A)
 END
END;
(*$P*)
PROCEDURE OPRETORDRE;
VAR I,ANTALEMN:INTEGER;
 
PROCEDURE OHOVED(VAR I:INTEGER);
BEGIN
  LÆSFELT(PICTURE(I));
  SKRIVFELT(PICTURE(I));
  CASE I OF
  12:ORDRE.ANTALBES:=POST.KRSTK;
  13:ORDRE.SALGSPRI:=POST.KRSTK;
  14:ORDRE.ØNSKLEV:=POST.ØLEVTERM;
  15:ORDRE.INITIALE:=POST.INIT; 
  16:ORDRE.KUNDORDR:=POST.KUORDNR
  END
END;
(*$P*)
PROCEDURE VÆLGFELT(FRA:INTEGER);
VAR I:INTEGER;
BEGIN
  REPEAT
    REPEAT
      D(23,1);
      WRITE('Ændring af felt',FRA:2,'-7, 0 for færdig ');
      READLN;
      READ(I)
    UNTIL (IORESULT=0) AND ((I IN (.0,4..7.)) OR (I=FRA));
    I:=I+9;
    IF I>9 THEN OHOVED(I) 
  UNTIL I=9 
END;
 
PROCEDURE COMMENT;
VAR COMLINE:STRING(70);
    I:INTEGER;
BEGIN
 WITH ORDTEKST DO
 BEGIN
  NR:=ORDRE.NR;
  EMNENR:=ORDRE.EMNENR;
  (*$R-*)
  COMLINE(0):=CHR(70);
  (*$R+*)
  D(22,2);
  WRITE('Indtast kommentarlinier. Slut med "." i position 1');
  I:=0;
  REPEAT
    I:=I+1;
    FILLCHAR(COMLINE(2),69,' ');
    COMLINE(1):='.';
    GOTOXY(1,23);
    EDIT(COMLINE);
    IF COMLINE(1)<>'.' THEN
    BEGIN
      MOVELEFT(COMLINE(1),TEKST,70);
      LBNR:=I;
      INSERT(A);IF IER<>0 THEN ERROR(A)
    END ELSE I:=10
  UNTIL I=10;
  D(22,2)
 END
END;
(*$P*)
(*$L+*)
BEGIN (*OPRETORDRE*)
 
  REPEAT
    LÆSFELT(PICTURE(11));
    SKRIVFELT(PICTURE(11));
    KUNDE.NR:=POST.KUNDENR;
    GETREC(KUNDE.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(KUNDE.A);
    IF IER=-6 THEN NONEXIST('Kunden')
  UNTIL IER=0;
  GOTOXY(40,5);WRITELN(KUNDE.NAVN);
 
  IF QJN('Rigtig kunde') IN JA THEN
  BEGIN
 
    GOTOXY(1,6);
    WRITELN('Kundens emner');
    KUNEMNE.KUNDENR:=KUNDE.NR;
    KUNEMNE.EMNENR:=0;
    NEXTREC(KUNEMNE.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(KUNEMNE.A);
    IER:=0;
    ANTALEMN:=0;
    WHILE (IER=0) AND (KUNEMNE.KUNDENR=KUNDE.NR) DO
    BEGIN
      WRITE(KUNEMNE.EMNENR:10);
      ANTALEMN:=ANTALEMN+1;
      IF ANTALEMN MOD 7=0 THEN WRITELN;
      NEXTREC(KUNEMNE.A)
    END;
    IF NOT (-IER IN (.0..2,9.)) THEN ERROR(KUNEMNE.A);
 
    REPEAT
      LÆSFELT(PICTURE(1));
      SKRIVFELT(PICTURE(1));
      IF POST.EMNENR=0 THEN EXIT(OPRETORDRE);
      EMNE.NR:=POST.EMNENR;
      GETREC(EMNE.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(EMNE.A);
      IF IER=-6 THEN NONEXIST('Emnet');
      IF EMNE.KUNDENR<>KUNDE.NR THEN
      BEGIN
        NONEXIST('Emne-kunde');
        IER:=-6
      END
    UNTIL IER=0;
    D(6,(ANTALEMN-1) DIV 7+2);
    WRITELN('Emner i formen');
 
    EMNIFORM.FORMNR:=EMNE.FORMNR;
    EMNIFORM.EMNENR:=0;
    NEXTREC(EMNIFORM.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(EMNIFORM.A);
    IER:=0;
    ANTALEMN:=0;
    WHILE (IER=0) AND (EMNIFORM.FORMNR=EMNE.FORMNR) DO
    BEGIN
      EMNE.NR:=EMNIFORM.EMNENR;
      ANTALEMN:=ANTALEMN+1;
      GETREC(EMNE.A);IF IER<>0 THEN ERROR(EMNE.A);
      WRITELN(EMNE.NR:6,' ',EMNE.BEMÆRK);
      NEXTREC(EMNIFORM.A)
    END;
    IF NOT (-IER IN (.0..2,9.)) THEN ERROR(EMNIFORM.A);
    IF ANTALEMN>1 THEN
    BEGIN
      D(23,1);
      WRITE('Bemærk flere emner i form, RETURN ');
      READLN;
      D(23,1)
    END;
    D(6,ANTALEMN+1);
 
    EMNE.NR:=POST.EMNENR;
    GETREC(EMNE.A);IF IER<>0 THEN ERROR(EMNE.A);
    ORDRE.KUNDENR:=KUNDE.NR;
    ORDRE.EMNENR:=EMNE.NR;
    ORDRE.REGDATO:=SYSTEM.DAGSDATO;
    ORDRE.BEKRÆLEV:=0;
 
    LÆSFELT(PICTURE(10));
    IF POST.ORDRENR>0 THEN
      ORDRE.NR:=POST.ORDRENR
    ELSE
    BEGIN
      GETRECX(SYSTEM.A);IF IER<>0 THEN ERROR(SYSTEM.A);
      ORDRE.NR:=SYSTEM.ORDRENR;
      POST.ORDRENR:=ORDRE.NR;
      SYSTEM.ORDRENR:=SYSTEM.ORDRENR+1;
      PUTREC(SYSTEM.A);IF IER<>0 THEN ERROR(SYSTEM.A)
    END;
    SKRIVFELT(PICTURE(10));
 
    POST.INIT:='    ';
    POST.KUORDNR:='                ';
    FOR I:=12 TO 16 DO OHOVED(I);
    VÆLGFELT(3);
 
    COMMENT;
 
    KUNORDRE.ORDRENR:=ORDRE.NR;
    KUNORDRE.KUNDENR:=ORDRE.KUNDENR;
    KUNORDRE.EMNENR:=ORDRE.EMNENR;
    INSERT(KUNORDRE.A);IF NOT (-IER IN (.0.)) THEN ERROR(KUNORDRE.A);
 
    ORDRE.MATOMK:=0.0;
    ORDRE.LØNOMK:=0.0;
    ORDRE.MASKINOM:=0.0;
    ORDRE.SMEOMK:=0.0;
    ORDRE.MATFORB:=0.0;
 
    TILPASFORK;
 
    KALKULER:=TRUE;
    (*
    REPEAT
      FORKALKULATION;
      CH:=QJN('Kalkulation færdig');
      IF CH IN NEJ THEN
      BEGIN
        CLEARSCREEN;
        SKRIVFELT(PICTURE(1));
        POST.KRSTK:=ORDRE.ANTALBES;
        FOR I:=10 TO 12 DO SKRIVFELT(PICTURE(I));
        POST.KRSTK:=ORDRE.SALGSPRI;
        FOR I:=13 TO 16 DO SKRIVFELT(PICTURE(I));
        VÆLGFELT(4)
      END
    UNTIL CH IN JA;
    *)
    BEREGNMAT;
 
    INSERT(ORDRE.A);IF IER<>0 THEN ERROR(ORDRE.A)
  END
END;
(*$P*)
PROCEDURE SLETORDRE;
BEGIN
  IF QJN('Sletning korrekt') IN JA THEN
  BEGIN
 
    KUNORDRE.ORDRENR:=ORDRE.NR;
    KUNORDRE.KUNDENR:=ORDRE.KUNDENR;
    KUNORDRE.EMNENR:=ORDRE.EMNENR;
    GETRECX(KUNORDRE.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(KUNORDRE.A);
    DELETE(KUNORDRE.A);IF NOT (-IER IN (.0.)) THEN ERROR(KUNORDRE.A);
 
    PROD.ORDRENR:=ORDRE.NR;
    PROD.EMNENR:=ORDRE.EMNENR;
    PROD.SEKVENSN:=0;
    PROD.OPERANR:=0;
    NEXTRECX(PROD.A);IF NOT (-IER IN (.1,2,9.)) THEN ERROR(PROD.A);IER:=0;
    WHILE (PROD.ORDRENR=ORDRE.NR) AND (PROD.EMNENR=ORDRE.EMNENR) AND
          (IER=0) DO DELETEX(PROD.A);
    IF NOT (-IER IN (.0,2,9.)) THEN ERROR(PROD.A);
    GETREC(PROD.A);IF IER<>0 THEN ERROR(PROD.A);
   
    OMVPROD.ORDRENR:=ORDRE.NR;
    OMVPROD.EMNENR:=ORDRE.EMNENR;
    OMVPROD.SEKVENSN:=0;
    OMVPROD.OPERANR:=0;
    NEXTRECX(OMVPROD.A);IF NOT (-IER IN (.1,2,9.)) THEN
                        ERROR(OMVPROD.A);IER:=0;
    WHILE (OMVPROD.ORDRENR=ORDRE.NR) AND (OMVPROD.EMNENR=ORDRE.EMNENR) AND
          (IER=0) DO DELETEX(OMVPROD.A);
    IF NOT (-IER IN (.0,2,9.)) THEN ERROR(OMVPROD.A);
    GETREC(OMVPROD.A);IF IER<>0 THEN ERROR(OMVPROD.A);
   
    ORDTEKST.NR:=ORDRE.NR;
    ORDTEKST.EMNENR:=ORDRE.EMNENR;
    ORDTEKST.LBNR:=0;
    NEXTRECX(ORDTEKST.A);IF NOT (-IER IN (.1,2,9.)) THEN
                        ERROR(ORDTEKST.A);IER:=0;
    WHILE (ORDTEKST.NR=ORDRE.NR) AND (ORDTEKST.EMNENR=ORDRE.EMNENR) AND
          (IER=0) DO DELETEX(ORDTEKST.A);
    IF NOT (-IER IN (.0,2,9.)) THEN ERROR(ORDTEKST.A);
    GETREC(ORDTEKST.A);IF IER<>0 THEN ERROR(ORDTEKST.A);
 
    DELETE(ORDRE.A);IF NOT (-IER IN (.0,2,9.)) THEN ERROR(ORDRE.A) 
 
  END
  ELSE
    OPTION:=0
END;
(*$P*)
BEGIN (*MAINTAIN*)
  CLEARSCREEN;
  KALKULER:=FALSE;
  REPEAT
    GOTOXY(1,20);
    WRITELN('1 Oprettelse af ny ordre');
    WRITELN('2 Sletning af ordre');
    WRITELN('3 Udskrift af forkalkulation');
    D(23,1);
    WRITE('Vælg 1-3 ');
    READLN;
    IF NOT EOLN THEN READ(OPTION)
  UNTIL (IORESULT=0) AND (OPTION IN (.1..3.));
  D(20,4);
  IF OPTION IN (.2..3.) THEN
  BEGIN
    LÆSFELT(PICTURE(10));SKRIVFELT(PICTURE(10));
    ORDRE.NR:=POST.ORDRENR;
    ORDRE.EMNENR:=0;
    NEXTRECX(ORDRE.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ORDRE.A);IER:=0;
    CH:='N';
    IF ORDRE.NR<>POST.ORDRENR THEN BEGIN NONEXIST('Ordren');OPTION:=-1 END
    ELSE
    WHILE (IER=0) AND (ORDRE.NR=POST.ORDRENR) AND (CH IN NEJ) DO
    BEGIN
      CLEARSCREEN;
      POST.ORDRENR:=ORDRE.NR;
      POST.KUNDENR:=ORDRE.KUNDENR;
      POST.EMNENR:=ORDRE.EMNENR;
      POST.ØLEVTERM:=ORDRE.ØNSKLEV;
      POST.INIT:=ORDRE.INITIALE;
      POST.KUORDNR:=ORDRE.KUNDORDR;
      POST.KRSTK:=ORDRE.ANTALBES;
      SKRIVFELT(PICTURE(1));
      FOR I:=10 TO 12 DO SKRIVFELT(PICTURE(I));
      POST.KRSTK:=ORDRE.SALGSPRI;
      FOR I:=13 TO 16 DO SKRIVFELT(PICTURE(I));
      WITH ORDRE DO
      BEGIN
         GOTOXY(40,8);WRITE('Bekr. levterm',BEKRÆLEV:5);
         GOTOXY(1,11);WRITELN('Reg. dato',
                              REGDATO(1)*10000.0+REGDATO(2):10:-2);
         WRITELN('SMELTEOMKOSTNINGER',' ':25,SMEOMK:8:3);
         WRITELN('MATERIALEFORBRUG  ',' ':25,MATFORB:8:3);
         WRITELN(' ':43,'----------------');
         WRITELN('MAT.-OMKOSTNINGER ',' ':25,MATOMK:8:3,MATOMK:8:3);
         WRITELN('LØNOMKOSTNINGER   ',' ':33,LØNOMK:8:3);
         WRITELN('MASKINOMKOSTNINGER',' ':33,MASKINOM:8:3);
         WRITELN(' ':51,'----------------');
         WRITELN('EMNEPRIS          ',' ':33,MATOMK+
                 LØNOMK+MASKINOM:8:3,MATOMK+LØNOMK+MASKINOM:8:3);
         WRITELN('DÆKNINGSBIDRAG    ',' ':33,-MATOMK+
                      SALGSPRI-LØNOMK-MASKINOM:16:3);
         WRITELN(' ':59,'--------');
         WRITELN('SALGSPRIS         ',' ':33,SALGSPRI:16:3) 
      END;
      CH:=QJN('Rigtig ordre');
      IF CH IN NEJ THEN NEXTRECX(ORDRE.A)
    END;
    IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ORDRE.A);
    IF ORDRE.NR<>POST.ORDRENR THEN OPTION:=0 
  END;
  IF (OPTION=2) AND (ORDRE.BEKRÆLEV<>0) THEN
  BEGIN
    D(23,1);
    WRITE('Ordren er indgået i planlægningen og må ikke slettes, RETURN ');
    OPTION:=0;
    READLN
  END;
  CASE OPTION OF
  1:(*IF RESPRINT THEN BEGIN*) OPRETORDRE;(*FREEPR END;*)
  2:SLETORDRE;
  3:IF RESPRINT THEN BEGIN FORKALKULATION;FREEPR END
  END;
 
  IF OPTION=0 THEN
  BEGIN GETREC(ORDRE.A);IF IER<>0 THEN ERROR(ORDRE.A) END (*FJERN XSTATUS*)
 
END;
(*$P*)
BEGIN (*REGVEDL*)
  LONGNUL(1):=0;
  LONGNUL(2):=0;
  JA:=(.'J','j'.);
  NEJ:=(.'N','n'.);
  JAOGNEJ:=JA+NEJ;
  RESSTEXT(10):='Maskine   ';
  RESSTEXT(11):='Operatør  ';
  RESSTEXT(12):='Værktøj   ';
  RESSTEXT(13):='Hjælpeværk';
  CLEARSCREEN;
  LÆSDESC;
  MODE:=3;(*SKRIV*)
  (*$R-*)
  RESS.A(-4):=0;    
  KUNDE.A(-4):=0;
  RESSGRUP.A(-4):=0;
  EMNE.A(-4):=0;    
  RÅVARE.A(-4):=0;
  MEDARB.A(-4):=0;  
  OPERA.A(-4):=0;   
  LØNGRUP.A(-4):=0; 
  POST.A(-4):=0; 
  SYSTEM.A(-4):=0;
  PROD.A(-4):=0;             
  OMVPROD.A(-4):=0;          
  ORDRE.A(-4):=0;            
  KUNEMNE.A(-4):=0;          
  KUNORDRE.A(-4):=0;         
  EMNIFORM.A(-4):=0;         
  ORDTEKST.A(-4):=0;         
  RESS.A(-3):=4;    
  KUNDE.A(-3):=1;
  RESSGRUP.A(-3):=3;
  EMNE.A(-3):=2;    
  RÅVARE.A(-3):=5;
  MEDARB.A(-3):=7;  
  OPERA.A(-3):=6;   
  LØNGRUP.A(-3):=8; 
  POST.A(-3):=11; 
  SYSTEM.A(-3):=9;
  PROD.A(-3):=14;     
  OMVPROD.A(-3):=13;  
  ORDRE.A(-3):=10;    
  KUNEMNE.A(-3):=19;  
  KUNORDRE.A(-3):=18; 
  EMNIFORM.A(-3):=20; 
  ORDTEKST.A(-3):=25; 
  (*$R+*)
  (*@@EVT. ÅBNING AF ANDRE ANDRE DATAFILER*)
  IOPEN(RESS.A);    IF IER<>0 THEN ERROR(RESS.A);     
  IOPEN(KUNDE.A);   IF IER<>0 THEN ERROR(KUNDE.A);    
  IOPEN(RESSGRUP.A);IF IER<>0 THEN ERROR(RESSGRUP.A); 
  IOPEN(EMNE.A);    IF IER<>0 THEN ERROR(EMNE.A);     
  IOPEN(RÅVARE.A);  IF IER<>0 THEN ERROR(RÅVARE.A);   
  IOPEN(MEDARB.A);  IF IER<>0 THEN ERROR(MEDARB.A);   
  IOPEN(OPERA.A);   IF IER<>0 THEN ERROR(OPERA.A);    
  IOPEN(LØNGRUP.A); IF IER<>0 THEN ERROR(LØNGRUP.A);  
  IOPEN(POST.A);    IF IER<>0 THEN ERROR(POST.A);     
  IOPEN(OMVPROD.A); IF IER<>0 THEN ERROR(OMVPROD.A);  
  IOPEN(ORDRE.A);   IF IER<>0 THEN ERROR(ORDRE.A);     
  IOPEN(KUNEMNE.A); IF IER<>0 THEN ERROR(KUNEMNE.A);  
  IOPEN(KUNORDRE.A);IF IER<>0 THEN ERROR(KUNORDRE.A); 
  IOPEN(EMNIFORM.A);IF IER<>0 THEN ERROR(EMNIFORM.A); 
  IOPEN(PROD.A);    IF IER<>0 THEN ERROR(PROD.A);     
  IOPEN(ORDTEKST.A);IF IER<>0 THEN ERROR(ORDTEKST.A); 
  IOPEN(SYSTEM.A);  IF IER<>0 THEN ERROR(SYSTEM.A); 
  SYSTEM.NR:=0;
  GETREC(SYSTEM.A);IF IER<>0 THEN ERROR(SYSTEM.A);
  REPEAT
    CLEARSCREEN;
    GOTOXY(10,10);
    WRITELN('O R D R E S P E C I F I K   F O R K A L K U L A T I O N');
    CH:=QJN('Flere forkalkulationer');
    IF CH IN JA THEN MAINTAIN 
  UNTIL CH IN NEJ;
  ICLOSE(RESS.A);    
  ICLOSE(KUNDE.A);
  ICLOSE(RESSGRUP.A);
  ICLOSE(EMNE.A);    
  ICLOSE(RÅVARE.A);
  ICLOSE(MEDARB.A);  
  ICLOSE(OPERA.A);   
  ICLOSE(LØNGRUP.A); 
  ICLOSE(POST.A); 
  ICLOSE(OMVPROD.A); 
  ICLOSE(ORDRE.A);    
  ICLOSE(KUNEMNE.A); 
  ICLOSE(KUNORDRE.A);
  ICLOSE(EMNIFORM.A);
  ICLOSE(PROD.A); 
  ICLOSE(ORDTEKST.A);
  ICLOSE(SYSTEM.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*)
  FILNR:=11;
  DESCNAVN:='ORDRFORK:P2:05:J';
  REGNAVN:='FORKALKULATION';
  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