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

⟦5efc2c8a7⟧ TextFile

    Length: 65728 (0x100c0)
    Types: TextFile
    Notes: Mikados_K
    Names: »LIMPUDSK.K«

Derivation

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

Mikados K File

PROGRAM LIMPUDSK;
(*RESSOURCE- OG ORDRE-PLANLÆGNING*)
(*$L-*)
CONST MAXRECSIZE=1000;
(*@@*)
      PROGRAMNR=8;
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 WRITE(' ':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;
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;
OPERPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TILLÆG            :REAL;
  NR,
  GRUPPE,
  REBELAS           :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;
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;
REBEPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  NR,
  STARTDAG,
  ORDRENR,
  EMNENR,
  OPERANR,  
  SEKVNR,
  VARIGHED,
  GRUPPE,
  STTIME          :INTEGER 
END;
UGEDPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  UGENR,
  ARBDAGNR        :INTEGER 
END;
ARBEPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  NR               :INTEGER;
  DATO             :LONGINT;
  UGENR, 
  ARBTIMER         :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;
PLANPESC=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  RESSOURCE,
  ORDRE,
  EMNENR,
  STARTUGE,
  LINIENR,
  UGE,
  DAG,
  TIME,
  VARIGHED,
  FRALINIE,
  TILLINIE,
  ØLEVUGE,
  OPTION,
  AFDELING,
  GRUPPE,
  FAKTOR          :INTEGER 
END;
REBEXTRA=RECORD
  PLANLAGT:BOOLEAN;
  BETEGN:PACKED ARRAY (1..10) OF CHAR;
  BEKRÆLEV,
  ØNSKLEV:INTEGER;
  ANTALBES:REAL
END;
VAR FELT:NFELT;
    PICTURE:ARRAY (1..MAXFELTER) OF NFELT;
    OPTION,LINES,
    UDE,ANTLINE,PSTARTDAG,DIRECTION,HUSK,HUSKTID,
    I,J,ANTALFELTER:INTEGER;
    LINE:STRING;
    RESS:RESSPOST;
    RESSGRUP:REGRPOST;
    EMNE:EMNEPOST;
    OPERA:OPERPOST;
    PROD:PRODPOST;
    ORDRE:ORDRPOST;
    REBELAST:REBEPOST;
    SYSTEM:SYSRPOST;
    UGEDAG:UGEDPOST;
    ARBEDAG:ARBEPOST;
    POST:PLANPESC;
    LONGNUL:LONGINT;
    CH:CHAR;
    NEJ,JA,JAOGNEJ:SET OF CHAR;
    SKEMA:PACKED ARRAY (1..52) OF CHAR;
    PIND:PACKED ARRAY (1..50) 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 FORMULAR(I:INTEGER);
VAR LINES:INTEGER;
BEGIN
  CASE I OF
  1:BEGIN
      D(23,1);
      WRITE('Monter bredt 8.5" papir, RETURN ');
      READLN;
      WHILE QJN('Ønskes testprint') IN JA DO
      BEGIN
  WRITELN(LIST,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
               'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
        FOR LINES:=2 TO 50 DO WRITELN(LIST);
  WRITELN(LIST,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
               'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
      END 
    END;
  2:BEGIN
      D(23,1);
      WRITE('Monter generel formular, RETURN ');
      READLN;
      WHILE QJN('Ønskes testprint') IN JA DO
      BEGIN
        FOR LINES:=1 TO 4 DO WRITELN(LIST);
        WRITELN(LIST,' ':35,'XXXXXX');
        FOR LINES:=6 TO 72 DO WRITELN(LIST)
      END 
    END;
  3:BEGIN
      D(23,1);
      WRITE('Monter blankt A4 papir, RETURN ');
      READLN;
      WHILE QJN('Ønskes testprint') IN JA DO
      BEGIN
  WRITELN(LIST,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
               'XXXXXXXXXXXXXXXXXXXXXXXX');
        FOR LINES:=2 TO 71 DO WRITELN(LIST);
  WRITELN(LIST,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
               'XXXXXXXXXXXXXXXXXXXXXXXX')
      END 
    END
  END
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(RESSGRUP.A);    
  ICLOSE(EMNE.A);    
  ICLOSE(OPERA.A);   
  ICLOSE(ORDRE.A);    
  ICLOSE(PROD.A); 
  ICLOSE(REBELAST.A);
  ICLOSE(UGEDAG.A);
  ICLOSE(ARBEDAG.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 PLANUDSK;
VAR UDSKTYPE:INTEGER;
 
PROCEDURE BELASTPLAN;
VAR NSTARTDAG,RÅDIGTID,RESTETID,OVERSKUD,CURRUGE,NRPÅLIN:INTEGER;
    ORDRETIM:ARRAY (1..15,1..2) OF INTEGER;
    FØRSTE,SIDSTE:BOOLEAN;
 
PROCEDURE HOVED;
BEGIN
  WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
  WRITELN(LIST,'Belastningsplan for',RESS.NR:5,' ',RESS.BETEGN,
               ' ':10,'Kapacitetsfaktor',POST.FAKTOR:5,' ':28,
    'Udskriftsdato',SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2):9:-2);
  WRITELN(LIST,' ':86,'  Total Til      Akkumuleret');
  WRITELN(LIST,' ':86,'        rådighed overunderskud');
  LINES:=3
END;
 
PROCEDURE SKRIVLINIE;
VAR I:INTEGER;
BEGIN
  IF NRPÅLIN=0 THEN EXIT(SKRIVLINIE);
  IF LINES>45 THEN HOVED;
  IF FØRSTE THEN WRITE(LIST,'Ugenr') ELSE WRITE(LIST,' ':5);
  WRITE(LIST,' Ordre');
  FOR I:=1 TO 15 DO
    IF I>NRPÅLIN THEN WRITE(LIST,' ':5) ELSE WRITE(LIST,ORDRETIM(I,1):5);
  WRITELN(LIST);
  IF FØRSTE THEN
    IF CURRUGE=0 THEN WRITE(LIST,'  FØR') ELSE WRITE(LIST,CURRUGE:5) 
  ELSE WRITE(LIST,' ':5);
  WRITE(LIST,' Timer');
  FOR I:=1 TO 15 DO
  IF I>NRPÅLIN THEN WRITE(LIST,' ':5)
  ELSE
  BEGIN
    WRITE(LIST,ORDRETIM(I,2):5);
    RESTETID:=RESTETID+ORDRETIM(I,2)
  END;
  NRPÅLIN:=0;
  FØRSTE:=FALSE;
  IF SIDSTE THEN
  BEGIN
    SIDSTE:=FALSE;
    OVERSKUD:=OVERSKUD+POST.FAKTOR*RÅDIGTID-RESTETID;
    WRITELN(LIST,RESTETID:7,POST.FAKTOR*RÅDIGTID:9,OVERSKUD:14);
    RÅDIGTID:=0;
    RESTETID:=0
  END 
  ELSE WRITELN(LIST);
  WRITELN(LIST);
  LINES:=LINES+3
END;
(*$P*)
BEGIN (*BELASTPLAN*)
 REPEAT
  LÆSFELT(PICTURE(1));
  IF POST.RESSOURCE=0 THEN EXIT(BELASTPLAN);
  RESS.NR:=POST.RESSOURCE;
  GETREC(RESS.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(RESS.A);
  IF IER=-6 THEN BEGIN NONEXIST('Ressourcen'); EXIT(BELASTPLAN) END;
  POST.FAKTOR:=1;
  LÆSFELT(PICTURE(18));
  RESTETID:=0;
  RÅDIGTID:=0;
  OVERSKUD:=0;
  NRPÅLIN:=0;
  FØRSTE:=TRUE;
  SIDSTE:=FALSE;
  CURRUGE:=0;
  LINES:=51;
  NSTARTDAG:=PSTARTDAG;
  ARBEDAG.NR:=0;
  NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A);
  IER:=0;       (*GÅ FREM TIL DAGSDATO*)
  WHILE (IER=0) AND (ARBEDAG.DATO<>SYSTEM.DAGSDATO) DO NEXTREC(ARBEDAG.A);
  CHECK0(ARBEDAG.A);
  WHILE (IER=0) AND (ARBEDAG.NR<>NSTARTDAG) DO
  BEGIN (*OPTÆL TIMER FRA DAGSDATO TIL PERIODESTART*)
    RÅDIGTID:=RÅDIGTID+ARBEDAG.ARBTIMER;
    NEXTREC(ARBEDAG.A)
  END;
  CHECK0(ARBEDAG.A);
  REBELAST.NR:=RESS.NR;
  REBELAST.STARTDAG:=0;
  REBELAST.STTIME:=0;
  REBELAST.EMNENR:=0;
  REBELAST.OPERANR:=0;
  REBELAST.SEKVNR:=0;
  NEXTREC(REBELAST.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(REBELAST.A);
  IER:=0;
  WHILE (IER=0) AND (REBELAST.NR=RESS.NR)
        AND (REBELAST.STARTDAG<NSTARTDAG) DO
  BEGIN
 
    ORDRE.NR:=REBELAST.ORDRENR;
    ORDRE.EMNENR:=REBELAST.EMNENR;
    GETREC(ORDRE.A);CHECK0(ORDRE.A);
 
    PROD.ORDRENR:=REBELAST.ORDRENR;
    PROD.EMNENR:=REBELAST.EMNENR;
    PROD.SEKVENSN:=REBELAST.SEKVNR;
    PROD.OPERANR:=REBELAST.OPERANR;
    GETREC(PROD.A);CHECK0(PROD.A);
 
    IF NRPÅLIN=15 THEN SKRIVLINIE;
 
    NRPÅLIN:=NRPÅLIN+1;
    ORDRETIM(NRPÅLIN,1):=REBELAST.ORDRENR;
    ORDRETIM(NRPÅLIN,2):=
             ROUND((1.0-PROD.REAANTAL/ORDRE.ANTALBES)*REBELAST.VARIGHED);
    NEXTREC(REBELAST.A)
  END;
  IF NOT (-IER IN (.0,2,9.)) THEN ERROR(REBELAST.A);
  SIDSTE:=TRUE;
  SKRIVLINIE;
  IER:=0;
  WHILE (IER=0) AND (REBELAST.NR=RESS.NR) DO
  BEGIN
    FØRSTE:=TRUE;
    CURRUGE:=ARBEDAG.UGENR;
    WHILE (IER=0) AND (CURRUGE=ARBEDAG.UGENR) DO
    BEGIN
      RÅDIGTID:=RÅDIGTID+ARBEDAG.ARBTIMER;
      NEXTREC(ARBEDAG.A)
    END;
    IF NOT (-IER IN (.0,2,9.)) THEN ERROR(ARBEDAG.A);
    IF IER=0 THEN
      NSTARTDAG:=ARBEDAG.NR
    ELSE
      NSTARTDAG:=32000;
    IER:=0;
    WHILE (IER=0) AND (REBELAST.NR=RESS.NR)
          AND (REBELAST.STARTDAG<NSTARTDAG) DO
    BEGIN
   
      ORDRE.NR:=REBELAST.ORDRENR;
      ORDRE.EMNENR:=REBELAST.EMNENR;
      GETREC(ORDRE.A);CHECK0(ORDRE.A);
   
      PROD.ORDRENR:=REBELAST.ORDRENR;
      PROD.EMNENR:=REBELAST.EMNENR;
      PROD.SEKVENSN:=REBELAST.SEKVNR;
      PROD.OPERANR:=REBELAST.OPERANR;
      GETREC(PROD.A);CHECK0(PROD.A);
   
      IF NRPÅLIN=15 THEN SKRIVLINIE;
   
      NRPÅLIN:=NRPÅLIN+1;
      ORDRETIM(NRPÅLIN,1):=REBELAST.ORDRENR;
      ORDRETIM(NRPÅLIN,2):=
               ROUND((1.0-PROD.REAANTAL/ORDRE.ANTALBES)*REBELAST.VARIGHED);
      NEXTREC(REBELAST.A)
    END;
    IF NOT (-IER IN (.0,2,9.)) THEN ERROR(REBELAST.A);
    SIDSTE:=TRUE;
    SKRIVLINIE
  END;
  WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END
 UNTIL POST.RESSOURCE=0
END;
(*$P*)
PROCEDURE GANTTKORT;
VAR LINIER:INTEGER;
 
PROCEDURE SKRIVLINIE;
VAR I,AKTWEEK,AKTDAG:INTEGER;
    UDLINIE:PACKED ARRAY (1..52) OF CHAR;
BEGIN
  IF LINES>45 THEN
  BEGIN
    WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
    SKEMA:='.                                                  .';
    WRITELN(LIST,'GANTTKORT',' ':81,
    'Udskriftsdato',SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2):9:-2);
    WRITE(LIST,'Ressource:',RESS.NR:5,' ',RESS.BETEGN,' ':14);
    ARBEDAG.NR:=PSTARTDAG;
    GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);
    AKTWEEK:=0;
    FOR I:=1 TO 25 DO
    BEGIN
      IF AKTWEEK<>ARBEDAG.UGENR THEN
      BEGIN
        SKEMA(2*I-1):='.';
        AKTWEEK:=ARBEDAG.UGENR;
        WRITE(LIST,ARBEDAG.UGENR MOD 100:2)
      END
      ELSE WRITE(LIST,' ':2);
      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)
    END;
    WRITELN(LIST,' Leveres   Start Varig');
    WRITE(LIST,'Nr Ordre Betegnelse ',' ':20);
    ARBEDAG.NR:=PSTARTDAG;
    GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);
    AKTDAG:=0;
    AKTWEEK:=0;
    FOR I:=1 TO 25 DO
    BEGIN
      IF AKTWEEK<>ARBEDAG.UGENR THEN
      BEGIN AKTDAG:=0; AKTWEEK:=ARBEDAG.UGENR END;
      IF AKTDAG<5 THEN
      BEGIN
        AKTDAG:=AKTDAG+1;
        WRITE(LIST,AKTDAG:2)
      END
      ELSE WRITE(LIST,' ':2);
      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)
    END;
    WRITELN(LIST,' Uge  ant   time   hed');
    LINES:=3
  END;
  WITH REBELAST,EMNE,ORDRE DO
  BEGIN
    LINIER:=LINIER+1;
    WRITE(LIST,LINIER:2,ORDRENR:6,' ',BETEGN);
    UDLINIE:=SKEMA;
    IF (STARTDAG-PSTARTDAG) IN (.0..24.) THEN
    BEGIN
      I:=2*(STARTDAG-PSTARTDAG)+2;
      IF STTIME>4 THEN I:=I+1;
      IF STARTDAG-PSTARTDAG+VARIGHED DIV 8<26 THEN
        MOVELEFT(PIND(1),UDLINIE(I),(VARIGHED-1) DIV 4+1)
      ELSE
        MOVELEFT(PIND(1),UDLINIE(I),50-(STARTDAG-PSTARTDAG)*2) 
    END;
    WRITE(LIST,UDLINIE);
    IF BEKRÆLEV>0 THEN
      WRITE(LIST,BEKRÆLEV MOD 100:2,'!')
    ELSE
      WRITE(LIST,ØNSKLEV MOD 100:2,' ');
    WRITELN(LIST,ANTALBES:5:-2,STTIME:7,VARIGHED:6);
    LINES:=LINES+1
  END
END;
(*$P*)
PROCEDURE GETBELAST;
BEGIN
  REBELAST.NR:=RESS.NR;
  REBELAST.STARTDAG:=PSTARTDAG;
  REBELAST.ORDRENR:=0;
  NEXTREC(REBELAST.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(REBELAST.A);
  IER:=0;
  LINES:=51;
  LINIER:=0;
  WHILE (IER=0) AND (REBELAST.NR=RESS.NR) AND
        (REBELAST.STARTDAG-PSTARTDAG<25) DO
  BEGIN
    EMNE.NR:=REBELAST.EMNENR;
    GETREC(EMNE.A);CHECK0(EMNE.A);
    ORDRE.NR:=REBELAST.ORDRENR;
    ORDRE.EMNENR:=REBELAST.EMNENR;
    GETREC(ORDRE.A);CHECK0(ORDRE.A);
    SKRIVLINIE;
    NEXTREC(REBELAST.A)
  END;
  WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
  IF NOT (-IER IN (.0,2,9.)) THEN ERROR(REBELAST.A)
END;
(*$P*)
BEGIN (*GANTTKORT*)
  REPEAT
    LÆSFELT(PICTURE(15));
    CASE POST.OPTION OF
    1:REPEAT
        LÆSFELT(PICTURE(1));
        IF POST.RESSOURCE=0 THEN EXIT(GANTTKORT);
        RESS.NR:=POST.RESSOURCE;
        GETREC(RESS.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(RESS.A);
        IF IER=-6 THEN BEGIN NONEXIST('Ressourcen'); EXIT(GANTTKORT) END;
        GETBELAST
      UNTIL POST.RESSOURCE=0;
    2:REPEAT
        LÆSFELT(PICTURE(16));
        IF POST.AFDELING=0 THEN EXIT(GANTTKORT);
        RESS.NR:=0;
        NEXTREC(RESS.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(RESS.A);
        IER:=0;
        WHILE IER=0 DO
        BEGIN
          IF RESS.AFDELNR=POST.AFDELING THEN GETBELAST;
          NEXTREC(RESS.A)
        END;
        IF NOT (-IER IN (.2,9.)) THEN ERROR(RESS.A)
      UNTIL POST.AFDELING=0;
    3:REPEAT
        LÆSFELT(PICTURE(17));
        IF POST.GRUPPE=0 THEN EXIT(GANTTKORT);
        RESSGRUP.GRUPNR:=POST.GRUPPE;
        RESSGRUP.NR:=0;
        NEXTREC(RESSGRUP.A);
        IF NOT (-IER IN (.0..2,9.)) THEN ERROR(RESSGRUP.A);
        IER:=0;
        WHILE (IER=0) AND (RESSGRUP.GRUPNR=POST.GRUPPE) DO
        BEGIN
          RESS.NR:=RESSGRUP.NR;
          GETREC(RESS.A);CHECK0(RESS.A);
          GETBELAST;
          NEXTREC(RESSGRUP.A)
        END;
        IF NOT (-IER IN (.0,2,9.)) THEN ERROR(RESSGRUP.A)
      UNTIL POST.GRUPPE=0
    END
  UNTIL POST.OPTION=0
END;
(*$P*)
PROCEDURE PRODPLAN;
VAR LINIER,TVARIG,IUGE,STTID,SLTID:INTEGER;
    AFDOK:BOOLEAN;
 
PROCEDURE SKRIVLINIE;
VAR I,AKTWEEK,AKTDAG,STARTDAG,STTIME,VARIGHED:INTEGER;
    UDLINIE:PACKED ARRAY (1..52) OF CHAR;
BEGIN
  STARTDAG:=STTID MOD 1000;
  STTIME:=STTID DIV 1000;
  IF STARTDAG<PSTARTDAG THEN
  BEGIN
    STARTDAG:=PSTARTDAG;
    STTIME:=1
  END;
  VARIGHED:=SLTID-8*STARTDAG-STTIME+1;
  IF (VARIGHED<=0) OR NOT ((STARTDAG-PSTARTDAG) IN (.0..24.)) THEN
     EXIT(SKRIVLINIE);
  IF LINES>45 THEN
  BEGIN
    WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
    SKEMA:='.                                                  .';
    WRITELN(LIST,'Produktionsplan for afdeling ',POST.AFDELING,' ':64,
    'Udskriftsdato',SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2):9:-2);
    IF POST.AFDELING=3 THEN
      WRITE(LIST,' ':40,'Indl  stk tot  lev       ') 
    ELSE
      WRITE(LIST,' ':40,' tot form tot  lev       ');
    ARBEDAG.NR:=PSTARTDAG;
    GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);
    AKTWEEK:=0;
    FOR I:=1 TO 25 DO
    BEGIN
      IF AKTWEEK<>ARBEDAG.UGENR THEN
      BEGIN
        SKEMA(2*I-1):='.';
        AKTWEEK:=ARBEDAG.UGENR;
        WRITE(LIST,ARBEDAG.UGENR MOD 100:2)
      END
      ELSE WRITE(LIST,' ':2);
      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)
    END;
    WRITELN(LIST);
    WRITE(LIST,' Nr Ord. Betegnelse ',' ':13);
    IF POST.AFDELING=3 THEN
      WRITE(LIST,' kunde  uge   /t tid  uge antal ') 
    ELSE
      WRITE(LIST,'   mat   kg   nr tid  uge antal ');
    ARBEDAG.NR:=PSTARTDAG;
    GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);
    AKTDAG:=0;
    AKTWEEK:=0;
    FOR I:=1 TO 25 DO
    BEGIN
      IF AKTWEEK<>ARBEDAG.UGENR THEN
      BEGIN AKTDAG:=0; AKTWEEK:=ARBEDAG.UGENR END;
      IF AKTDAG<5 THEN
      BEGIN
        AKTDAG:=AKTDAG+1;
        WRITE(LIST,AKTDAG:2)
      END
      ELSE WRITE(LIST,' ':2);
      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)
    END;
    WRITELN(LIST);
    LINES:=3
  END;
  WITH EMNE,ORDRE DO
  BEGIN
    EMNE.NR:=EMNENR;
    GETREC(EMNE.A);CHECK0(EMNE.A);
    LINIER:=LINIER+1;
    WRITE(LIST,LINIER:3,ORDRE.NR:5,' ',BETEGN:24);
    IF POST.AFDELING=3 THEN
    BEGIN
      ARBEDAG.NR:=(IUGE-1) DIV 8;
      GETREC(ARBEDAG.A);IF IER=-6 THEN ARBEDAG.UGENR:=0 ELSE
                                       CHECK0(ARBEDAG.A);
      WRITE(LIST,KUNDENR(1)*10000.0+KUNDENR(2):6:-2,ARBEDAG.UGENR:5,
                 ANTALBES/TVARIG:5:-2,TVARIG:4,BEKRÆLEV:5,ANTALBES:6:-2)
    END
    ELSE
    BEGIN
      ARBEDAG.NR:=(SLTID-1) DIV 8;
      GETREC(ARBEDAG.A);IF IER=-6 THEN ARBEDAG.UGENR:=0 ELSE
                                       CHECK0(ARBEDAG.A);
      WRITE(LIST,MATNR:6,ANTALBES*NETTOVÆG/1000.0:5:-2,FORMNR:5,
                 TVARIG:4,ARBEDAG.UGENR:5,ANTALBES:6:-2)
    END;
    UDLINIE:=SKEMA;
    IF (STARTDAG-PSTARTDAG) IN (.0..24.) THEN
    BEGIN
      I:=2*(STARTDAG-PSTARTDAG)+2;
      IF STTIME>4 THEN I:=I+1;
      IF STARTDAG-PSTARTDAG+VARIGHED DIV 8<26 THEN
        MOVELEFT(PIND(1),UDLINIE(I),(VARIGHED-1) DIV 4+1)
      ELSE
        MOVELEFT(PIND(1),UDLINIE(I),50-(STARTDAG-PSTARTDAG)*2) 
    END;
    WRITELN(LIST,UDLINIE);
    LINES:=LINES+1
  END
END;
(*$P*)
PROCEDURE CHECKRESS(NR:INTEGER);
BEGIN
  IF AFDOK OR (NR<=0) THEN EXIT(CHECKRESS);
  RESS.NR:=NR;
  GETREC(RESS.A);CHECK0(RESS.A);
  AFDOK:=(RESS.AFDELNR=POST.AFDELING)
END;
 
PROCEDURE GETPROD;
BEGIN
  LINIER:=0;
  TVARIG:=0;
  IUGE:=0;
  STTID:=0;
  SLTID:=0;
  WITH PROD DO
  BEGIN
    ORDRENR:=0;
    EMNENR:=0;
    SEKVENSN:=0;
    OPERANR:=0;
    NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);
    IER:=0;
    ORDRE.NR:=ORDRENR;
    ORDRE.EMNENR:=EMNENR;
    GETREC(ORDRE.A);CHECK0(ORDRE.A);
    WHILE IER=0 DO
    BEGIN
      AFDOK:=FALSE;
      CHECKRESS(RESS1);
      CHECKRESS(RESS2);
      CHECKRESS(RESS3);
      IF AFDOK THEN
      BEGIN
        IF STTID=0 THEN STTID:=STARTTID;
        IF STARTTID MOD 1000*8+STARTTID DIV 1000+VARIGHED>SLTID THEN
           SLTID:=STARTTID MOD 1000*8+STARTTID DIV 1000+VARIGHED;
        TVARIG:=TVARIG+VARIGHED
      END
      ELSE
        IF STTID=0 THEN
          IF STARTTID MOD 1000*8+STARTTID DIV 1000+VARIGHED>IUGE THEN
             IUGE:=STARTTID MOD 1000*8+STARTTID DIV 1000+VARIGHED;
      NEXTREC(A);
      IF (IER=0) AND (ORDRENR<>ORDRE.NR) THEN
      BEGIN
        IF TVARIG>0 THEN SKRIVLINIE;
        IF IER=0 THEN
        BEGIN
          ORDRE.NR:=ORDRENR;
          ORDRE.EMNENR:=EMNENR;
          GETREC(ORDRE.A);CHECK0(ORDRE.A);
          TVARIG:=0;
          IUGE:=0;
          STTID:=0;
          SLTID:=0
        END
      END
    END;
    IF TVARIG>0 THEN SKRIVLINIE;
    WHILE LINES<51 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
  END
END;
(*$P*)
BEGIN (*PRODPLAN*)
 LINES:=51;
 REPEAT
   LÆSFELT(PICTURE(16));
   IF POST.AFDELING=0 THEN EXIT(PRODPLAN);
   GETPROD
 UNTIL POST.AFDELING=0
END;
(*$P*)
PROCEDURE OVERLAP;
VAR CURRRESS,CURRSLUT,CURRUGE:INTEGER;
 
PROCEDURE SKRIVLINIE;
BEGIN
  IF LINES>68 THEN
  BEGIN
    WHILE LINES<72 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END;
    WRITELN(LIST,'OVERLAPPENDE RESSOURCER',' ':20,
    'Udskriftsdato',SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2):9:-2);
    WRITELN(LIST,'Ressource     Nr   Uge');
    WRITELN(LIST);
    RESS.NR:=0;
    LINES:=3
  END;
  ARBEDAG.NR:=REBELAST.STARTDAG;
  GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);
  IF CURRRESS<>RESS.NR THEN
  BEGIN
    CURRUGE:=0;
    RESS.NR:=CURRRESS;
    GETREC(RESS.A);CHECK0(RESS.A);
    WRITE(LIST,RESS.BETEGN,RESS.NR:6)
  END
  ELSE
    IF CURRUGE<>ARBEDAG.UGENR THEN WRITE(LIST,' ':16);
  IF CURRUGE<>ARBEDAG.UGENR THEN
  BEGIN
    WRITELN(LIST,ARBEDAG.UGENR:6);
    CURRUGE:=ARBEDAG.UGENR;
    LINES:=LINES+1
  END
END;
 
BEGIN (*OVERLAP*)
  WITH REBELAST DO
  BEGIN
    NR:=0;
    STARTDAG:=0;
    STTIME:=0;
    EMNENR:=0;
    OPERANR:=0;
    SEKVNR:=0;
    ORDRENR:=0;
    CURRRESS:=0;
    CURRSLUT:=0;
    LINES:=72;
    NEXTREC(A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(A);
    IER:=0;
    WHILE IER=0 DO
    BEGIN
      IF NR<>CURRRESS THEN BEGIN CURRSLUT:=0;CURRRESS:=NR END;
      IF 8*STARTDAG+STTIME<CURRSLUT THEN SKRIVLINIE;
      IF CURRSLUT<8*STARTDAG+STTIME+VARIGHED THEN
        CURRSLUT:=8*STARTDAG+STTIME+VARIGHED;
      NEXTREC(A)
    END;
    IF NOT (-IER IN (.2,9.)) THEN ERROR(A);
    WHILE LINES<72 DO BEGIN WRITELN(LIST);LINES:=LINES+1 END
  END
END;
(*$P*)
BEGIN (*PLANUDSK*)
  D(10,7);
  WRITELN('0 Fortryd');
  WRITELN('1 Gantt-kort for ressource');
  WRITELN('2 Belastningsplan for ressource');
  WRITELN('3 Produktionsplan');
  WRITELN('4 Ressourceoverlap');
  LÆSFELT(PICTURE(13));
  CASE POST.OPTION OF
  1,2,3:FORMULAR(1);
  4:FORMULAR(3)
  END;
  CASE POST.OPTION OF
  1:GANTTKORT;
  2:BELASTPLAN;
  3:PRODPLAN;
  4:OVERLAP
  END
END;
(*$P*)
PROCEDURE MAINTAIN;
VAR CH:CHAR;
BEGIN (*MAINTAIN*)
  REPEAT
    LÆSFELT(PICTURE(4));
    UGEDAG.UGENR:=POST.STARTUGE;
    GETREC(UGEDAG.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(UGEDAG.A);
    IF IER=0 THEN
    BEGIN
      ARBEDAG.NR:=UGEDAG.ARBDAGNR;
      GETREC(ARBEDAG.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(ARBEDAG.A);
      IF (SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2))>
         (ARBEDAG.DATO(1)*10000.0+ARBEDAG.DATO(2)) THEN IER:=-6
    END
  UNTIL IER=0;
  PSTARTDAG:=UGEDAG.ARBDAGNR;
  PLANUDSK
END;
(*$P*)
BEGIN (*REGVEDL*)
  LONGNUL(1):=0;
  LONGNUL(2):=0;
  JA:=(.'J','j'.);
  NEJ:=(.'N','n'.);
  JAOGNEJ:=JA+NEJ;
  PIND:='**************************************************';
  CLEARSCREEN;
  LÆSDESC;
  MODE:=3;(*SKRIV*)
  (*$R-*)
  RESS.A(-4):=0;    
  RESSGRUP.A(-4):=0;    
  EMNE.A(-4):=0;    
  OPERA.A(-4):=0;   
  SYSTEM.A(-4):=0;
  PROD.A(-4):=0;             
  ORDRE.A(-4):=0;            
  REBELAST.A(-4):=0;
  UGEDAG.A(-4):=0;
  ARBEDAG.A(-4):=0;
  UGEDAG.A(-3):=21;
  ARBEDAG.A(-3):=22;
  RESS.A(-3):=4;    
  RESSGRUP.A(-3):=3;    
  EMNE.A(-3):=2;    
  OPERA.A(-3):=6;   
  SYSTEM.A(-3):=9;
  PROD.A(-3):=14;     
  ORDRE.A(-3):=10;    
  REBELAST.A(-3):=15;
  (*$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(ORDRE.A);     CHECK0(ORDRE.A);   
  IOPEN(REBELAST.A);  CHECK0(REBELAST.A);   
  IOPEN(PROD.A);      CHECK0(PROD.A);    
  IOPEN(UGEDAG.A);    CHECK0(UGEDAG.A);
  IOPEN(ARBEDAG.A);   CHECK0(ARBEDAG.A);
  IOPEN(RESSGRUP.A);  CHECK0(RESSGRUP.A);
  IOPEN(EMNE.A);      CHECK0(EMNE.A);
  IOPEN(RESS.A);      CHECK0(RESS.A);
  POST.STARTUGE:=0;
  REPEAT
    CLEARSCREEN;
    IF QJN('Flere planlægningsudskrifter') IN JA THEN
    BEGIN
      OPTION:=1;
      MAINTAIN
    END ELSE OPTION:=0 
  UNTIL OPTION=0;
 
  ICLOSE(ORDRE.A);    
  ICLOSE(REBELAST.A);
  ICLOSE(PROD.A); 
  ICLOSE(UGEDAG.A);
  ICLOSE(ARBEDAG.A);
  ICLOSE(RESSGRUP.A);
  ICLOSE(EMNE.A);
  ICLOSE(RESS.A);
  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:='PLANPESC:P2:05:J';
  IF RESPRINT THEN
  BEGIN
    REGVEDL; 
    FREEPR
  END;
  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