PROGRAM LIMPLANL;(*$D-*)#(*RESSOURCE- OG ORDRE-PLANL[GNING*)#(*$L-*)CONST MAXRECSIZE=1000;(*@@*)      PROGRAMNR=8;TYPE'PARMARRAY=PACKED ARRAY (1..39) OF CHAR;'INIVEAU=(MENIG,SERGENT,L\JTNANT,KAPTAJN,MAJOR,OBERST,GENERAL,HSM,UMULIUS);IPOSTADR=0..MAXRECSIZE;ICOMMBUF =ARRAY (POSTADR) OF INTEGER;(*commbuf(0)=filnr,resten er posten*)IPOINTREC=^COMMBUF;NAME    =STRING(10);PCB     =^INTEGER;GMESSAGETYPE=(]BEN,LUK,L[SPOST,L[SPOSTX,N[STE,N[STEX,SLET,SLETX,GEMPOST,GN             INDS[T,INITIER,UTILMELD,UAFMELD,PTILMELD,PAFMELD,STOPSYS,        NH             RETURNHEAD,RETURNSTAT);                                    H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*)5PROCEDURE ALLOCA(VAR ADDRESS:POINTREC;LENGTH:INTEGER;5%                 VAR STATUS:INTEGER);%	EXTERNAL;	6PROCEDURE DEALLO(ADDRESS:POINTREC;VAR STATUS:INTEGER);6	EXTERNAL;	2PROCEDURE SENDM(RECEIVER:PCB;VAR CONTENTS:MESSAGE;23                LENGTH:INTEGER;VAR STATUS:INTEGER);3	EXTERNAL;	5PROCEDURE RECEIV(VAR SENDER:PCB;VAR CONTENTS:MESSAGE;5%                 VAR LENGTH:INTEGER);%	EXTERNAL;	6PROCEDURE RESERV(RESOURCE:NAME;EXCLUSIVE,WAIT:BOOLEAN;6%                 VAR STATUS:INTEGER);%	EXTERNAL;	3PROCEDURE RELEAS(RESOURCE:NAME;VAR STATUS:INTEGER);3	EXTERNAL;	(*$IRESPRINT*)(*$P*)(*$IUDF\R*)(*$IFISFPROC*)(*$P*)PROCEDURE REGVEDL;CONST MAXFELTER=20;(*@@*)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;2  BETEGN             :PACKED ARRAY (1..10) OF CHAR2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,	2  ALTERNP           :PACKED ARRAY (1..30) OF CHAR;21  TEGNNR            :PACKED ARRAY (1..20) OF CHAR1END;OPERPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
  TILL[G            :REAL;  NR,	  GRUPPE,	  REBELAS           :INTEGER;1  BETEGN            :PACKED ARRAY (1..30) OF CHAR1END;PRODPOST=RECORD
  AA:ARAR;
  A:AR;
  AAA:RAR;
3  KRSTK,    (*SAMLET TIMESATS FOR ALLE RESSOURCER*)3  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;2  KUNDORDR          :PACKED ARRAY (1..16) OF CHAR;21  INITIALE          :PACKED ARRAY (1..4) OF CHAR 1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;*  (*PRODPLAN:BOOLEAN;*)    OPTION,LINES,1    UDE,ANTLINE,PSTARTDAG,DIRECTION,HUSK,HUSKTID,1    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;    DAGSDATO,    LONGNUL:LONGINT;    CH:CHAR;    NEJ,JA,JAOGNEJ:SET OF CHAR;(*$P*)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);
L                                                                     (*$R-*)LL  WRITE('FEJL I REGISTER ',REC(-3),' FEJLKODE ',IER,' RETURN');      (*$R+*)L  CH:=' ';EDIT(CH);.  IF CH='[' THEN BEGIN IER:=0;EXIT(ERROR) END;.  ICLOSE(SYSTEM.A);      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 RESSPLAN;VAR CH:STRING(1);    CHECKOK:BOOLEAN;'    SKEMA:PACKED ARRAY (1..52) OF CHAR;'$    REBENR:ARRAY (1..20) OF INTEGER;$&    REBELIN:ARRAY (1..20) OF REBEPOST;&&    REBXTRA:ARRAY (1..20) OF REBEXTRA;& APROCEDURE RESSBILLEDE(FRA,TIL:INTEGER); (*FRA=0 => ALLE + HOVED*)AVAR I,AKTWEEK,AKTDAG,    REST,C:INTEGER;$    ESC:PACKED ARRAY (1..2) OF CHAR;$    CH:CHAR;BEGIN  ESC:=' N';ESC(1):=CHR(27);  IF FRA=0 THEN  BEGIN    CLEARSCREEN;B    SKEMA:='~                                                  ~';B(    WRITE('Ressource:',RESS.NR:5,' ':5);(    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(ARBEDAG.UGENR MOD 100:2)&	      END	      ELSE WRITE(' ':2);J      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)J    END;    WRITELN(' Leveres');"    WRITE('Nr Ordre Betegnelse ');"    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$2      BEGIN AKTDAG:=0; AKTWEEK:=ARBEDAG.UGENR END;2      IF AKTDAG<5 THEN      BEGIN        AKTDAG:=AKTDAG+1;        WRITE(AKTDAG:2)	      END	      ELSE WRITE(' ':2);J      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)J    END;    WRITELN(' Uge  ant');
    FRA:=1
  END;  FOR I:=FRA TO TIL DO/  WITH REBELIN(REBENR(I)),REBXTRA(REBENR(I)) DO/  BEGIN    GOTOXY(1,I+2);*    WRITE(I:2,ORDRENR:6,' ',BETEGN,SKEMA);*-    IF (STARTDAG-PSTARTDAG) IN (.0..24.) THEN-	    BEGIN	,      GOTOXY(21+2*(STARTDAG-PSTARTDAG),I+2);,"      IF STTIME>4 THEN WRITE(' ');"6      IF STARTDAG-PSTARTDAG+(VARIGHED-1) DIV 8<26 THEN6        REST:=VARIGHED
      ELSE
)        REST:=200-(STARTDAG-PSTARTDAG)*8;)      CASE STTIME MOD 4 OF%      0:BEGIN C:=40;REST:=REST-1 END;%      2:CASE VARIGHED OF'        1:BEGIN C:=36;REST:=REST-1 END;''        2:BEGIN C:=38;REST:=REST-2 END;'/        OTHERWISE BEGIN C:=46;REST:=REST-3 END;/7      3:IF VARIGHED=1 THEN BEGIN C:=34;REST:=REST-1 END7*        ELSE BEGIN C:=42;REST:=REST-2 END;*      OTHERWISE C:=0;      IF C>0 THEN      BEGIN        CH:=CHR(C);        WRITE(ESC,CH)
      END;
      CH:=CHR(47);      WHILE REST>3 DO      BEGIN        WRITE(ESC,CH);        REST:=REST-4
      END;
      CASE REST OF      1:C:=33;      2:C:=37;      3:C:=39;      OTHERWISE C:=0;      IF C>0 THEN      BEGIN        CH:=CHR(C);        WRITE(ESC,CH)
      END 
    END;    GOTOXY(72,I+2);    IF BEKR[LEV>0 THEN#      WRITE(BEKR[LEV MOD 100:2,'!')#    ELSE#      WRITE(\NSKLEV MOD 100:2,' ');#    WRITE(ANTALBES:5:-2)  ENDEND;(*$P*)PROCEDURE GETBELAST;BEGIN  REBELAST.NR:=POST.RESSOURCE;  REBELAST.STARTDAG:=PSTARTDAG;  REBELAST.ORDRENR:=0;I  NEXTREC(REBELAST.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(REBELAST.A);I	  IER:=0;	  ANTLINE:=0;)  UDE:=0; (*FLYTTET TIL ANDEN RESSOURCE*))4  WHILE (IER=0) AND (REBELAST.NR=POST.RESSOURCE) AND4<        (REBELAST.STARTDAG-PSTARTDAG<25) AND (ANTLINE<20) DO<  BEGIN    ANTLINE:=ANTLINE+1;    REBENR(ANTLINE):=ANTLINE;(*$R-*)5    MOVELEFT(REBELAST.A(1),REBELIN(ANTLINE).A(1),18);5(*$R+*)    EMNE.NR:=REBELAST.EMNENR;"    GETREC(EMNE.A);CHECK0(EMNE.A);";    MOVELEFT(EMNE.BETEGN(1),REBXTRA(ANTLINE).BETEGN(1),10);;    ORDRE.NR:=REBELAST.ORDRENR;"    ORDRE.EMNENR:=REBELAST.EMNENR;"$    GETREC(ORDRE.A);CHECK0(ORDRE.A);$.    REBXTRA(ANTLINE).BEKR[LEV:=ORDRE.BEKR[LEV;.    IF ORDRE.BEKR[LEV>0 THEN/      REBXTRA(ANTLINE).\NSKLEV:=ORDRE.BEKR[LEV /    ELSE.      REBXTRA(ANTLINE).\NSKLEV:=ORDRE.\NSKLEV;..    REBXTRA(ANTLINE).ANTALBES:=ORDRE.ANTALBES;.%    REBXTRA(ANTLINE).PLANLAGT:=FALSE;%    NEXTREC(REBELAST.A)  END;3  IF NOT (-IER IN (.0,2,9.)) THEN ERROR(REBELAST.A)3END;(*$P*)PROCEDURE [START;BEGIN WITH POST DO BEGIN;  L[SFELT(PICTURE(5));IF LINIENR>ANTLINE THEN EXIT([START);;  L[SFELT(PICTURE(6));  IF UGE IN (.1..20.) THEN  BEGIN%    IF UGE>ANTLINE THEN EXIT([START);%#    IF UGE<LINIENR THEN UGE:=UGE-1;#$    WITH REBELIN(REBENR(LINIENR)) DO$    IF UGE=0 THEN	    BEGIN	      STARTDAG:=PSTARTDAG;      STTIME:=1    END    ELSE	    BEGIN	.      STARTDAG:=REBELIN(REBENR(UGE)).STARTDAG+.4                REBELIN(REBENR(UGE)).VARIGHED DIV 8;4*      STTIME:=REBELIN(REBENR(UGE)).STTIME+*2              REBELIN(REBENR(UGE)).VARIGHED MOD 8;2      IF STTIME>8 THEN      BEGIN        STARTDAG:=STARTDAG+1;        STTIME:=STTIME-8	      END	    END;    IF UGE>LINIENR THEN	    BEGIN	      HUSK:=REBENR(LINIENR);8      FOR I:=LINIENR TO UGE-1 DO REBENR(I):=REBENR(I+1);8      REBENR(UGE):=HUSK;      RESSBILLEDE(LINIENR,UGE)    END    ELSE	    BEGIN	      HUSK:=REBENR(LINIENR);<      FOR I:=LINIENR DOWNTO UGE+2 DO REBENR(I):=REBENR(I-1);<      REBENR(UGE+1):=HUSK;       RESSBILLEDE(UGE+1,LINIENR)     END  END  ELSE  BEGIN    L[SFELT(PICTURE(7));    L[SFELT(PICTURE(8));$    WITH REBELIN(REBENR(LINIENR)) DO$	    BEGIN	!      HUSKTID:=8*STARTDAG+STTIME;!      UGEDAG.UGENR:=UGE;D      GETREC(UGEDAG.A);IF IER=-6 THEN EXIT([START);CHECK0(UGEDAG.A);D&      STARTDAG:=UGEDAG.ARBDAGNR+DAG-1;&      STTIME:=TIME;H      IF HUSKTID<8*STARTDAG+STTIME THEN DIRECTION:=1 ELSE DIRECTION:=-1;H!      HUSKTID:=8*STARTDAG+STTIME;!      I:=LINIENR;#      IF ((I=1) AND (DIRECTION=-1))#>         OR ((I=ANTLINE) AND (DIRECTION=1)) THEN DIRECTION:=0;>      HUSK:=REBENR(I);      WHILE DIRECTION*HUSKTID>9      DIRECTION*(REBELIN(REBENR(I+DIRECTION)).STARTDAG*8+98                REBELIN(REBENR(I+DIRECTION)).STTIME) DO 8      BEGIN'        REBENR(I):=REBENR(I+DIRECTION);'        I:=I+DIRECTION;%        IF ((I=1) AND (DIRECTION=-1))%?           OR ((I=ANTLINE) AND (DIRECTION=1)) THEN DIRECTION:=0?
      END;
      REBENR(I):=HUSK;J      IF I<LINIENR THEN RESSBILLEDE(I,LINIENR) ELSE RESSBILLEDE(LINIENR,I)J    END  END ENDEND; (*$P*)PROCEDURE [VARIG;BEGIN WITH POST DO BEGIN;  L[SFELT(PICTURE(5));IF LINIENR>ANTLINE THEN EXIT([VARIG);;.  VARIGHED:=REBELIN(REBENR(LINIENR)).VARIGHED;.  L[SFELT(PICTURE(9));.  REBELIN(REBENR(LINIENR)).VARIGHED:=VARIGHED;.  RESSBILLEDE(LINIENR,LINIENR) ENDEND;(*$P*)PROCEDURE [RESS;BEGIN WITH POST DO BEGIN:  L[SFELT(PICTURE(5));IF LINIENR>ANTLINE THEN EXIT([RESS);:  HUSK:=POST.RESSOURCE;  L[SFELT(PICTURE(1));  RESS.NR:=POST.RESSOURCE;  POST.RESSOURCE:=HUSK;@  GETREC(RESS.A);IF IER=-6 THEN EXIT([RESS) ELSE CHECK0(RESS.A);@'  REBELIN(REBENR(LINIENR)).NR:=RESS.NR;'  HUSK:=REBENR(LINIENR);8  FOR I:=LINIENR TO ANTLINE-1 DO REBENR(I):=REBENR(I+1);8  REBENR(ANTLINE):=HUSK;  D(ANTLINE+2,1);  ANTLINE:=ANTLINE-1;  UDE:=UDE+1;  RESSBILLEDE(LINIENR,ANTLINE) ENDEND;(*$P*)PROCEDURE SEKVUDL;BEGIN WITH POST DO BEGIN>  L[SFELT(PICTURE(10));IF FRALINIE>ANTLINE THEN EXIT(SEKVUDL);>  IF FRALINIE=0 THEN  BEGIN    TILLINIE:=ANTLINE;+    REBELIN(REBENR(1)).STARTDAG:=PSTARTDAG;+!    REBELIN(REBENR(1)).STTIME:=1;!    FRALINIE:=1  END;>  L[SFELT(PICTURE(11));IF TILLINIE>ANTLINE THEN EXIT(SEKVUDL);>  I:=FRALINIE;  IF FRALINIE<TILLINIE THEN  BEGIN    WHILE I<TILLINIE DO	    BEGIN	       WITH REBELIN(REBENR(I)) DO       HUSKTID:=STARTDAG*8+               STTIME+               VARIGHED;"      WITH REBELIN(REBENR(I+1)) DO"      BEGIN$        STARTDAG:=(HUSKTID-1) DIV 8;$$        STTIME:=(HUSKTID-1) MOD 8 +1$
      END;
      I:=I+1    END;"    RESSBILLEDE(FRALINIE,TILLINIE)"  END  ELSE  BEGIN    WHILE I>TILLINIE DO	    BEGIN	       WITH REBELIN(REBENR(I)) DO       HUSKTID:=STARTDAG*8+               STTIME;"      WITH REBELIN(REBENR(I-1)) DO"      BEGIN"        HUSKTID:=HUSKTID-VARIGHED;"$        STARTDAG:=(HUSKTID-1) DIV 8;$$        STTIME:=(HUSKTID-1) MOD 8 +1$
      END;
      I:=I-1    END;"    RESSBILLEDE(TILLINIE,FRALINIE)"  END; ENDEND;(*$P*)PROCEDURE CHECKPLAN;9VAR K,THISSTART,THISSLUT,LASTSTART,LASTSLUT,DIFF:INTEGER;96    PRODLINE:ARRAY (1..50) OF ARRAY (1..4) OF INTEGER;6 'PROCEDURE NU(ORDRE,EMNE,OPERA:INTEGER);'BEGIN
  D(24,1);
K  WRITE('Nu behandles:  Ordre',ORDRE:5,' Emne',EMNE:5,' Operation',OPERA:5)KEND; BEGIN   (*CHECKPLAN*)  CHECKOK:=TRUE;  FOR I:=1 TO ANTLINE+UDE DO  WITH REBELIN(REBENR(I)) DO)  IF NOT REBXTRA(REBENR(I)).PLANLAGT THEN)  BEGIN    NU(ORDRENR,EMNENR,OPERANR);    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVNR;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"M    IF STARTDAG*8+STTIME<PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000 THENM	    BEGIN	H      (*OPERATIONEN ER LAGT TIDLIGERE, CHECK FORANLIGGENDE OPERATIONER*)H      PROD.SEKVENSN:=0;      PROD.OPERANR:=0;      J:=0;E      NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);E      IER:=0;$      WHILE PROD.OPERANR<>OPERANR DO$      BEGIN        J:=J+1;%        PRODLINE(J,1):=PROD.SEKVENSN;%$        PRODLINE(J,2):=PROD.OPERANR;$%        PRODLINE(J,3):=PROD.STARTTID;%%        PRODLINE(J,4):=PROD.VARIGHED;%&        NEXTREC(PROD.A);CHECK0(PROD.A)&
      END;
#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#      WHILE J>0 DO      BEGINC        THISSTART:=PRODLINE(J,3) MOD 1000*8+PRODLINE(J,3) DIV 1000;C*        THISSLUT:=THISSTART+PRODLINE(J,4);*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT<DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF>0 THEN          J:=0        ELSE        BEGIN5          NU(PROD.ORDRENR,PROD.EMNENR,PRODLINE(J,2));5$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"&          FOR K:=I+1 TO ANTLINE+UDE DO&$          WITH REBELIN(REBENR(K)) DO$'          IF (ORDRENR=PROD.ORDRENR) AND'%             (EMNENR=PROD.EMNENR) AND%'             (SEKVNR=PRODLINE(J,1)) AND')             (OPERANR=PRODLINE(J,2)) THEN)          BEGIN*            STARTDAG:=(LASTSTART-1) DIV 8;**            STTIME:=(LASTSTART-1) MOD 8+1;*-            REBXTRA(REBENR(I)).PLANLAGT:=TRUE-          END        END;        J:=J-1;N        (*CHECK FRA I+1 TIL ANTLINE+UDE OM DENNE PROD ER P] PLANL[GNINGSSIDEN,NL          DEN SKAL I S] FALD HAVE [NDRET TIDEN, PLANLAGT:=TRUE, SORTERES INDL!          P] PLADS SOM I [START*)!
      END;
      IF J=0 THEN      BEGIN5        ARBEDAG.NR:=(LASTSTART-1) DIV 8;        (*!*)5,        GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);,3        IF ARBEDAG.DATO(1)*10000.0+ARBEDAG.DATO(2)<3/           DAGSDATO(1)*10000.0+DAGSDATO(2) THEN/        BEGIN          GOTOXY(1,23);:          WRITE('Startdato ligger f|r dagsdato, RETURN ');:          READLN;          CHECKOK:=FALSE;          EXIT(CHECKPLAN)        END	      END	    END;I    IF STARTDAG*8+STTIME+VARIGHED>PROD.STARTTID MOD 1000*8+PROD.VARIGHED+IM                                  PROD.STARTTID DIV 1000                 THENM	    BEGIN	F      (*OPERATIONEN SLUTTER SENERE END PLANLAGT, CHECK EFTERF\LGENDE*)F#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#E      NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);E      IER:=0;J      WHILE (IER=0) AND (PROD.ORDRENR=ORDRENR) AND (PROD.EMNENR=EMNENR) DOJ      BEGINC        THISSTART:=PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000;C*        THISSLUT:=THISSTART+PROD.VARIGHED;*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT>DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF<0 THEN          IER:=-1        ELSE        BEGIN4          NU(PROD.ORDRENR,PROD.EMNENR,PROD.OPERANR);4$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"&          FOR K:=I+1 TO ANTLINE+UDE DO&$          WITH REBELIN(REBENR(K)) DO$'          IF (ORDRENR=PROD.ORDRENR) AND'%             (EMNENR=PROD.EMNENR) AND%'             (SEKVNR=PROD.SEKVENSN) AND'(             (OPERANR=PROD.OPERANR) THEN(          BEGIN*            STARTDAG:=(LASTSTART-1) DIV 8;**            STTIME:=(LASTSTART-1) MOD 8+1;*-            REBXTRA(REBENR(I)).PLANLAGT:=TRUE-          END;N        (*CHECK FRA I+1 TIL ANTLINE+UDE OM DENNE PROD ER P] PLANL[GNINGSSIDEN,NL          DEN SKAL I S] FALD HAVE [NDRET TIDEN, PLANLAGT:=TRUE, SORTERES INDL!          P] PLADS SOM I [START*)!          NEXTREC(PROD.A)        END
      END;
5      IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);5      IF IER<>-1 THEN      BEGIN'        ARBEDAG.NR:=(LASTSLUT-1) DIV 8;',        GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);,8        IF ARBEDAG.UGENR>REBXTRA(REBENR(I)).\NSKLEV THEN8        BEGIN7          IF QJN('Skal leveringsuge rykkes') IN JA THEN7          BEGIN6            REBXTRA(REBENR(I)).\NSKLEV:=ARBEDAG.UGENR;61            IF REBXTRA(REBENR(I)).BEKR[LEV>0 THEN18              REBXTRA(REBENR(I)).BEKR[LEV:=ARBEDAG.UGENR8          END          ELSE          BEGIN            CHECKOK:=FALSE;            EXIT(CHECKPLAN)          END        END	      END	    END  END  ELSE&    REBXTRA(REBENR(I)).PLANLAGT:=FALSE&END;(*$P*)PROCEDURE UDFPLAN;9VAR K,THISSTART,THISSLUT,LASTSTART,LASTSLUT,DIFF:INTEGER;96    PRODLINE:ARRAY (1..50) OF ARRAY (1..4) OF INTEGER;6 'PROCEDURE NU(ORDRE,EMNE,OPERA:INTEGER);'BEGIN
  D(24,1);
K  WRITE('Nu behandles:  Ordre',ORDRE:5,' Emne',EMNE:5,' Operation',OPERA:5)KEND; 'PROCEDURE DESERVER(VAR RESSNR:INTEGER);'BEGIN  IF RESSNR>0 THEN  WITH REBELAST DO  BEGIN    RESS.NR:=RESSNR;"    GETREC(RESS.A);CHECK0(RESS.A);"    IF RESS.RESSTYPE>0 THEN 	    BEGIN	      NR:=RESSNR;,      GOTOXY(52,24);WRITE('Ressource',NR:5);,      ORDRENR:=PROD.ORDRENR;      EMNENR:=PROD.EMNENR;      OPERANR:=PROD.OPERANR;      SEKVNR:=PROD.SEKVENSN;'      STARTDAG:=PROD.STARTTID MOD 1000;'%      STTIME:=PROD.STARTTID DIV 1000;%      VARIGHED:=PROD.VARIGHED;      GETRECX(A);CHECK0(A);      DELETE(A);CHECK0(A)    END  ENDEND;(*$P*)'PROCEDURE RESERVER(VAR RESSNR:INTEGER);'BEGIN  IF RESSNR>0 THEN  WITH REBELAST DO  BEGIN    RESS.NR:=RESSNR;"    GETREC(RESS.A);CHECK0(RESS.A);"    IF RESS.RESSTYPE>0 THEN 	    BEGIN	      NR:=RESSNR;,      GOTOXY(52,24);WRITE('Ressource',NR:5);,      ORDRENR:=PROD.ORDRENR;      EMNENR:=PROD.EMNENR;      OPERANR:=PROD.OPERANR;      SEKVNR:=PROD.SEKVENSN;'      STARTDAG:=PROD.STARTTID MOD 1000;'%      STTIME:=PROD.STARTTID DIV 1000;%      VARIGHED:=PROD.VARIGHED;      INSERT(A);CHECK0(A)    END  ENDEND;(*$P*) BEGIN  CHECKOK:=TRUE;  FOR I:=1 TO ANTLINE+UDE DO  WITH REBELIN(REBENR(I)) DO)  IF NOT REBXTRA(REBENR(I)).PLANLAGT THEN)  BEGIN    NU(ORDRENR,EMNENR,OPERANR);    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVNR;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"    DESERVER(PROD.RESS1);    DESERVER(PROD.RESS2);    DESERVER(PROD.RESS3);M    IF STARTDAG*8+STTIME<PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000 THENM	    BEGIN	H      (*OPERATIONEN ER LAGT TIDLIGERE, CHECK FORANLIGGENDE OPERATIONER*)H      PROD.SEKVENSN:=0;      PROD.OPERANR:=0;      J:=0;E      NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);E      IER:=0;$      WHILE PROD.OPERANR<>OPERANR DO$      BEGIN        J:=J+1;%        PRODLINE(J,1):=PROD.SEKVENSN;%$        PRODLINE(J,2):=PROD.OPERANR;$%        PRODLINE(J,3):=PROD.STARTTID;%%        PRODLINE(J,4):=PROD.VARIGHED;%&        NEXTREC(PROD.A);CHECK0(PROD.A)&
      END;
#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#      WHILE J>0 DO      BEGINC        THISSTART:=PRODLINE(J,3) MOD 1000*8+PRODLINE(J,3) DIV 1000;C*        THISSLUT:=THISSTART+PRODLINE(J,4);*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT<DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF>0 THEN          J:=0        ELSE        BEGIN+          NU(ORDRENR,EMNENR,PRODLINE(J,2));+$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"           PROD.ORDRENR:=ORDRENR;           PROD.EMNENR:=EMNENR;'          PROD.SEKVENSN:=PRODLINE(J,1);'&          PROD.OPERANR:=PRODLINE(J,2);&)          GETRECX(PROD.A);CHECK0(PROD.A);)          DESERVER(PROD.RESS1);          DESERVER(PROD.RESS2);          DESERVER(PROD.RESS3);J          PROD.STARTTID:=(LASTSTART-1) DIV 8+((LASTSTART-1) MOD 8+1)*1000;J          RESERVER(PROD.RESS1);          RESERVER(PROD.RESS2);          RESERVER(PROD.RESS3);&          FOR K:=I+1 TO ANTLINE+UDE DO&$          WITH REBELIN(REBENR(K)) DO$'          IF (ORDRENR=PROD.ORDRENR) AND'%             (EMNENR=PROD.EMNENR) AND%'             (SEKVNR=PROD.SEKVENSN) AND'(             (OPERANR=PROD.OPERANR) THEN(          BEGIN*            STARTDAG:=(LASTSTART-1) DIV 8;**            STTIME:=(LASTSTART-1) MOD 8+1;*-            REBXTRA(REBENR(I)).PLANLAGT:=TRUE-          END;'          PUTREC(PROD.A);CHECK0(PROD.A)'        END;        J:=J-1N        (*CHECK FRA I+1 TIL ANTLINE+UDE OM DENNE PROD ER P] PLANL[GNINGSSIDEN,NL          DEN SKAL I S] FALD HAVE [NDRET TIDEN, PLANLAGT:=TRUE, SORTERES INDL!          P] PLADS SOM I [START*)!	      END	    END;    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVNR;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"I    IF STARTDAG*8+STTIME+VARIGHED>PROD.STARTTID MOD 1000*8+PROD.VARIGHED+IM                                  PROD.STARTTID DIV 1000                 THENM	    BEGIN	F      (*OPERATIONEN SLUTTER SENERE END PLANLAGT, CHECK EFTERF\LGENDE*)F#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#F      NEXTRECX(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);F      IER:=0;J      WHILE (IER=0) AND (PROD.ORDRENR=ORDRENR) AND (PROD.EMNENR=EMNENR) DOJ      BEGINC        THISSTART:=PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000;C*        THISSLUT:=THISSTART+PROD.VARIGHED;*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT>DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF<0 THEN          IER:=-1        ELSE        BEGIN4          NU(PROD.ORDRENR,PROD.EMNENR,PROD.OPERANR);4$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"          DESERVER(PROD.RESS1);          DESERVER(PROD.RESS2);          DESERVER(PROD.RESS3);J          PROD.STARTTID:=(LASTSTART-1) DIV 8+((LASTSTART-1) MOD 8+1)*1000;J          RESERVER(PROD.RESS1);          RESERVER(PROD.RESS2);          RESERVER(PROD.RESS3);&          FOR K:=I+1 TO ANTLINE+UDE DO&$          WITH REBELIN(REBENR(K)) DO$'          IF (ORDRENR=PROD.ORDRENR) AND'%             (EMNENR=PROD.EMNENR) AND%'             (SEKVNR=PROD.SEKVENSN) AND'(             (OPERANR=PROD.OPERANR) THEN(          BEGIN*            STARTDAG:=(LASTSTART-1) DIV 8;**            STTIME:=(LASTSTART-1) MOD 8+1;*-            REBXTRA(REBENR(I)).PLANLAGT:=TRUE-          END;(          PUTREC(PROD.A);CHECK0(PROD.A);(N        (*CHECK FRA I+1 TIL ANTLINE+UDE OM DENNE PROD ER P] PLANL[GNINGSSIDEN,NL          DEN SKAL I S] FALD HAVE [NDRET TIDEN, PLANLAGT:=TRUE, SORTERES INDL!          P] PLADS SOM I [START*)!          NEXTRECX(PROD.A)        END
      END;
5      IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A) 5    END;    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVNR;    PROD.OPERANR:=OPERANR;#    GETRECX(PROD.A);CHECK0(PROD.A);#(    PROD.STARTTID:=STARTDAG+1000*STTIME;(    PROD.VARIGHED:=VARIGHED;5    IF PROD.RESS1=POST.RESSOURCE THEN PROD.RESS1:=NR;55    IF PROD.RESS2=POST.RESSOURCE THEN PROD.RESS2:=NR;55    IF PROD.RESS3=POST.RESSOURCE THEN PROD.RESS3:=NR;5    RESERVER(PROD.RESS1);    RESERVER(PROD.RESS2);    RESERVER(PROD.RESS3);"    PUTREC(PROD.A);CHECK0(PROD.A);"    ORDRE.NR:=ORDRENR;    ORDRE.EMNENR:=EMNENR;%    GETRECX(ORDRE.A);CHECK0(ORDRE.A);%/    ORDRE.BEKR[LEV:=REBXTRA(REBENR(I)).\NSKLEV;/#    PUTREC(ORDRE.A);CHECK0(ORDRE.A)#  ENDEND;(*$P*)PROCEDURE AFSLUT;BEGIN:  IF QJN('\nskes check og {ndringer foretaget') IN JA THEN:  BEGIN'    GETRECX(SYSTEM.A);CHECK0(SYSTEM.A);'    CHECKPLAN;    IF CHECKOK THEN 	    BEGIN	      UDFPLAN;      GETBELAST;      RESSBILLEDE(0,ANTLINE)    END    ELSE CH(1):='5';%    PUTREC(SYSTEM.A);CHECK0(SYSTEM.A)%  ENDEND;(*$P*)BEGIN (*RESSPLAN*) CHECKOK:=FALSE; REPEAT  L[SFELT(PICTURE(1));*  IF POST.RESSOURCE=0 THEN EXIT(RESSPLAN);*  RESS.NR:=POST.RESSOURCE;=  GETREC(RESS.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(RESS.A);=B  IF IER=-6 THEN BEGIN NONEXIST('Ressourcen'); EXIT(RESSPLAN) END;B  GETBELAST;  RESSBILLEDE(0,ANTLINE);  REPEAT    D(23,2);>    WRITELN('[ndring af 1: Starttid 2: Varighed 3: Ressource',>#            '           V{lg 1-6');#?    WRITE('4: Sekventiel udl{gning  5: Check plan  6: Afslut');?
    REPEAT
      CH:='1';      GOTOXY(75,23);      EDIT(CH)     UNTIL CH(1) IN (.'1'..'6'.);     CASE CH(1) OF    '1':[START;    '2':[VARIG;    '3':[RESS;    '4':SEKVUDL;3    '5':BEGIN CHECKPLAN;RESSBILLEDE(0,ANTLINE) END;3    '6':AFSLUT    END  UNTIL CH(1)='6' UNTIL POST.RESSOURCE=0END;(*$P*)PROCEDURE ORDREPLAN;VAR CH:STRING(1);    CHECKOK:BOOLEAN;'    SKEMA:PACKED ARRAY (1..52) OF CHAR;'&    REBXTRA:ARRAY (1..20) OF REBEXTRA;&$    ORDENR:ARRAY (1..20) OF INTEGER;$&    ORDELIN:ARRAY (1..20) OF PRODPOST;& @PROCEDURE ORDBILLEDE(FRA,TIL:INTEGER); (*FRA=0 => ALLE + HOVED*)@%VAR I,AKTWEEK,AKTDAG,STARTDAG,STTIME,%    REST,C:INTEGER;$    ESC:PACKED ARRAY (1..2) OF CHAR;$    CH:CHAR;BEGIN  ESC:=' N';ESC(1):=CHR(27);  IF FRA=0 THEN  BEGIN    CLEARSCREEN;B    SKEMA:='~                                                  ~';B)    WRITE('Ordrenr  :',ORDRE.NR:5,' ':5);)    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(ARBEDAG.UGENR MOD 100:2)&	      END	      ELSE WRITE(' ':2);J      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)J    END;    WRITELN(' Leveres');"    WRITE('Nr Opera Betegnelse ');"    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$2      BEGIN AKTDAG:=0; AKTWEEK:=ARBEDAG.UGENR END;2      IF AKTDAG<5 THEN      BEGIN        AKTDAG:=AKTDAG+1;        WRITE(AKTDAG:2)	      END	      ELSE WRITE(' ':2);J      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)J    END;    WRITELN(' Uge  ant');
    FRA:=1
  END;  FOR I:=FRA TO TIL DO/  WITH ORDELIN(ORDENR(I)),REBXTRA(ORDENR(I)) DO/  BEGIN:    STARTDAG:=STARTTID MOD 1000;STTIME:=STARTTID DIV 1000;:    GOTOXY(1,I+2);*    WRITE(I:2,OPERANR:6,' ',BETEGN,SKEMA);*-    IF (STARTDAG-PSTARTDAG) IN (.0..24.) THEN-	    BEGIN	,      GOTOXY(21+2*(STARTDAG-PSTARTDAG),I+2);,"      IF STTIME>4 THEN WRITE(' ');"6      IF STARTDAG-PSTARTDAG+(VARIGHED-1) DIV 8<26 THEN6        REST:=VARIGHED
      ELSE
)        REST:=200-(STARTDAG-PSTARTDAG)*8;)      CASE STTIME MOD 4 OF%      0:BEGIN C:=40;REST:=REST-1 END;%      2:CASE VARIGHED OF'        1:BEGIN C:=36;REST:=REST-1 END;''        2:BEGIN C:=38;REST:=REST-2 END;'/        OTHERWISE BEGIN C:=46;REST:=REST-3 END;/7      3:IF VARIGHED=1 THEN BEGIN C:=34;REST:=REST-1 END7*        ELSE BEGIN C:=42;REST:=REST-2 END;*      OTHERWISE C:=0;      IF C>0 THEN      BEGIN        CH:=CHR(C);        WRITE(ESC,CH)
      END;
      CH:=CHR(47);      WHILE REST>3 DO      BEGIN        WRITE(ESC,CH);        REST:=REST-4
      END;
      CASE REST OF      1:C:=33;      2:C:=37;      3:C:=39;      OTHERWISE C:=0;      IF C>0 THEN      BEGIN        CH:=CHR(C);        WRITE(ESC,CH)
      END 
    END;    GOTOXY(72,I+2);    IF BEKR[LEV>0 THEN#      WRITE(BEKR[LEV MOD 100:2,'!')#    ELSE#      WRITE(\NSKLEV MOD 100:2,' ');#    WRITE(ORDRE.ANTALBES:5:-2)  ENDEND;(*$P*)PROCEDURE GETPROD;BEGIN  PROD.ORDRENR:=POST.ORDRE;  PROD.EMNENR:=POST.EMNENR;  PROD.SEKVENSN:=0;  PROD.OPERANR:=0;A  NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);A	  IER:=0;		  UDE:=0;	  ANTLINE:=0;K  WHILE (IER=0) AND (PROD.ORDRENR=POST.ORDRE) AND (PROD.EMNENR=POST.EMNENR)KA    AND (PROD.STARTTID MOD 1000-PSTARTDAG<25) AND (ANTLINE<20) DOA  BEGIN,   IF PROD.STARTTID MOD 1000>=PSTARTDAG THEN,   BEGIN    ANTLINE:=ANTLINE+1;    ORDENR(ANTLINE):=ANTLINE;(*$R-*)1    MOVELEFT(PROD.A(1),ORDELIN(ANTLINE).A(1),42);1(*$R+*)    OPERA.NR:=PROD.OPERANR;$    GETREC(OPERA.A);CHECK0(OPERA.A);$<    MOVELEFT(OPERA.BETEGN(1),REBXTRA(ANTLINE).BETEGN(1),10);<.    REBXTRA(ANTLINE).BEKR[LEV:=ORDRE.BEKR[LEV;.    IF ORDRE.BEKR[LEV>0 THEN/      REBXTRA(ANTLINE).\NSKLEV:=ORDRE.BEKR[LEV /    ELSE.      REBXTRA(ANTLINE).\NSKLEV:=ORDRE.\NSKLEV;.%    REBXTRA(ANTLINE).PLANLAGT:=FALSE;%   END;   NEXTREC(PROD.A)  END;/  IF NOT (-IER IN (.0,2,9.)) THEN ERROR(PROD.A)/END;(*$P*)PROCEDURE [START; VAR GSTTIME,STTIME,DIFF:INTEGER; BEGIN WITH POST DO BEGIN;  L[SFELT(PICTURE(5));IF LINIENR>ANTLINE THEN EXIT([START);;  L[SFELT(PICTURE(6));  IF UGE IN (.1..20.) THEN  BEGIN    IF (UGE>ANTLINE) ORM       (UGE=LINIENR) OR (UGE>LINIENR+1) OR (UGE<LINIENR-1) THEN EXIT([START);M3    STTIME:=ORDELIN(ORDENR(UGE)).STARTTID DIV 1000+35            ORDELIN(ORDENR(UGE)).STARTTID MOD 1000*8;5(    DIFF:=ORDELIN(ORDENR(UGE)).VARIGHED-(,          ORDELIN(ORDENR(LINIENR)).VARIGHED;,4    IF DIFF*(UGE-LINIENR)<0 THEN STTIME:=STTIME+DIFF4  END  ELSE  BEGIN    L[SFELT(PICTURE(7));    L[SFELT(PICTURE(8));    UGEDAG.UGENR:=UGE;B    GETREC(UGEDAG.A);IF IER=-6 THEN EXIT([START);CHECK0(UGEDAG.A);B     DIFF:=UGEDAG.ARBDAGNR+DAG-1; A    IF (DIFF<PSTARTDAG) OR (DIFF>PSTARTDAG+25) THEN EXIT([START);A    STTIME:=DIFF*8+TIME;8    GSTTIME:=ORDELIN(ORDENR(LINIENR)).STARTTID DIV 1000+8:             ORDELIN(ORDENR(LINIENR)).STARTTID MOD 1000*8;:2    IF (STTIME>GSTTIME) AND (LINIENR<ANTLINE) THEN2	    BEGIN	>      IF STTIME>ORDELIN(ORDENR(LINIENR+1)).STARTTID DIV 1000+ >C                ORDELIN(ORDENR(LINIENR+1)).STARTTID MOD 1000*8 THENC?         STTIME:=ORDELIN(ORDENR(LINIENR+1)).STARTTID DIV 1000+ ?@                 ORDELIN(ORDENR(LINIENR+1)).STARTTID MOD 1000*8;@:      DIFF:=ORDELIN(ORDENR(LINIENR+1)).STARTTID DIV 1000+ :;            ORDELIN(ORDENR(LINIENR+1)).STARTTID MOD 1000*8+;7            ORDELIN(ORDENR(LINIENR+1)).VARIGHED-STTIME-7.            ORDELIN(ORDENR(LINIENR)).VARIGHED;.(      IF DIFF<0 THEN STTIME:=STTIME+DIFF(    END;,    IF (STTIME<GSTTIME) AND (LINIENR>1) THEN,	    BEGIN	>      IF STTIME<ORDELIN(ORDENR(LINIENR-1)).STARTTID DIV 1000+ >C                ORDELIN(ORDENR(LINIENR-1)).STARTTID MOD 1000*8 THENC?         STTIME:=ORDELIN(ORDENR(LINIENR-1)).STARTTID DIV 1000+ ?@                 ORDELIN(ORDENR(LINIENR-1)).STARTTID MOD 1000*8;@:      DIFF:=ORDELIN(ORDENR(LINIENR-1)).STARTTID DIV 1000+ :;            ORDELIN(ORDENR(LINIENR-1)).STARTTID MOD 1000*8+;7            ORDELIN(ORDENR(LINIENR-1)).VARIGHED-STTIME-7.            ORDELIN(ORDENR(LINIENR)).VARIGHED;.(      IF DIFF>0 THEN STTIME:=STTIME+DIFF(    END  END;%  ORDELIN(ORDENR(LINIENR)).STARTTID:=%7            (STTIME-1) DIV 8+((STTIME-1) MOD 8+1)*1000;7  ORDBILLEDE(LINIENR,LINIENR) ENDEND; (*$P*)PROCEDURE [VARIG;BEGIN WITH POST DO BEGIN;  L[SFELT(PICTURE(5));IF LINIENR>ANTLINE THEN EXIT([VARIG);;.  VARIGHED:=ORDELIN(ORDENR(LINIENR)).VARIGHED;.  L[SFELT(PICTURE(9));  IF (LINIENR<ANTLINE) AND6     (VARIGHED>ORDELIN(ORDENR(LINIENR)).VARIGHED) THEN6>            IF (ORDELIN(ORDENR(LINIENR+1)).STARTTID DIV 1000+ >?                ORDELIN(ORDENR(LINIENR+1)).STARTTID MOD 1000*8+?5                ORDELIN(ORDENR(LINIENR+1)).VARIGHED)<5;               (ORDELIN(ORDENR(LINIENR)).STARTTID DIV 1000+;>                ORDELIN(ORDENR(LINIENR)).STARTTID MOD 1000*8+ >E                                         VARIGHED) THEN EXIT([VARIG);E  IF (LINIENR>1) AND6     (VARIGHED<ORDELIN(ORDENR(LINIENR)).VARIGHED) THEN6>            IF (ORDELIN(ORDENR(LINIENR-1)).STARTTID DIV 1000+ >?                ORDELIN(ORDENR(LINIENR-1)).STARTTID MOD 1000*8+?5                ORDELIN(ORDENR(LINIENR-1)).VARIGHED)>5;               (ORDELIN(ORDENR(LINIENR)).STARTTID DIV 1000+;>                ORDELIN(ORDENR(LINIENR)).STARTTID MOD 1000*8+ >E                                         VARIGHED) THEN EXIT([VARIG);E.  ORDELIN(ORDENR(LINIENR)).VARIGHED:=VARIGHED;.  ORDBILLEDE(LINIENR,LINIENR) ENDEND;(*$P*)PROCEDURE SEKVUDL;7VAR THISSTART,THISSLUT,LASTSTART,LASTSLUT,DIFF:INTEGER;7BEGIN WITH POST DO BEGIN>  L[SFELT(PICTURE(10));IF FRALINIE>ANTLINE THEN EXIT(SEKVUDL);>  IF FRALINIE=0 THEN  BEGIN    TILLINIE:=ANTLINE;0    ORDELIN(ORDENR(1)).STARTTID:=PSTARTDAG+1000;0    FRALINIE:=1  END;>  L[SFELT(PICTURE(11));IF TILLINIE>ANTLINE THEN EXIT(SEKVUDL);>  I:=FRALINIE;  IF FRALINIE<TILLINIE THEN  BEGIN    WHILE I<TILLINIE DO	    BEGIN	       WITH ORDELIN(ORDENR(I)) DO #      HUSKTID:=STARTTID MOD 1000*8+#!               STARTTID DIV 1000+!               VARIGHED;8      ORDELIN(ORDENR(I+1)).STARTTID:=(HUSKTID-1) DIV 8 +8@                                     ((HUSKTID-1) MOD 8+1)*1000;@      I:=I+1    END;    LASTSTART:=HUSKTID;;    LASTSLUT:=ORDELIN(ORDENR(TILLINIE)).VARIGHED+LASTSTART;;    I:=TILLINIE+1;    WHILE I<=ANTLINE DO    WITH ORDELIN(ORDENR(I)) DO	    BEGIN	7      THISSTART:=STARTTID MOD 1000*8+STARTTID DIV 1000;7#      THISSLUT:=THISSTART+VARIGHED;#       DIFF:=LASTSTART-THISSTART; =      IF LASTSLUT-THISSLUT>DIFF THEN DIFF:=LASTSLUT-THISSLUT;=      IF DIFF>0 THEN      BEGIN"        LASTSTART:=THISSTART+DIFF;"         LASTSLUT:=THISSLUT+DIFF; C        STARTTID:=(LASTSTART-1) DIV 8+((LASTSTART-1) MOD 8+1)*1000;C        I:=I+1	      END	      ELSE I:=ANTLINE+1    END;     ORDBILLEDE(FRALINIE,ANTLINE)   END  ELSE  BEGIN    WHILE I>TILLINIE DO	    BEGIN	       WITH ORDELIN(ORDENR(I)) DO 5      HUSKTID:=STARTTID MOD 1000*8+STARTTID DIV 1000;5"      WITH ORDELIN(ORDENR(I-1)) DO"      BEGIN"        HUSKTID:=HUSKTID-VARIGHED;"-        STARTTID:=(HUSKTID-1) DIV 8 +        -,                  ((HUSKTID-1) MOD 8+1)*1000,
      END;
      I:=I-1    END;    LASTSTART:=HUSKTID;;    LASTSLUT:=ORDELIN(ORDENR(TILLINIE)).VARIGHED+LASTSTART;;    I:=TILLINIE-1;    WHILE I>0 DO    WITH ORDELIN(ORDENR(I)) DO	    BEGIN	7      THISSTART:=STARTTID MOD 1000*8+STARTTID DIV 1000;7#      THISSLUT:=THISSTART+VARIGHED;#       DIFF:=LASTSTART-THISSTART; =      IF LASTSLUT-THISSLUT<DIFF THEN DIFF:=LASTSLUT-THISSLUT;=      IF DIFF<0 THEN      BEGIN"        LASTSTART:=THISSTART+DIFF;"         LASTSLUT:=THISSLUT+DIFF; C        STARTTID:=(LASTSTART-1) DIV 8+((LASTSTART-1) MOD 8+1)*1000;C        I:=I-1	      END	      ELSE I:=0    END;    ORDBILLEDE(1,FRALINIE)  END; ENDEND;(*$P*)PROCEDURE CHECKPLAN;IVAR STARTDAG,STTIME,K,THISSTART,THISSLUT,LASTSTART,LASTSLUT,DIFF:INTEGER;I6    PRODLINE:ARRAY (1..50) OF ARRAY (1..4) OF INTEGER;6 PROCEDURE NU(OPERA:INTEGER);BEGIN
  D(24,1);
+  WRITE('Nu behandles:  Operation',OPERA:5)+END; BEGIN (*CHECKPLAN*)  CHECKOK:=TRUE;  WITH ORDELIN(ORDENR(1)) DO  BEGIN     STARTDAG:=STARTTID MOD 1000;     STTIME:=STARTTID DIV 1000;    NU(OPERANR);    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVENSN;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"M    IF STARTDAG*8+STTIME<PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000 THENM	    BEGIN	H      (*OPERATIONEN ER LAGT TIDLIGERE, CHECK FORANLIGGENDE OPERATIONER*)H      PROD.SEKVENSN:=0;      PROD.OPERANR:=0;      J:=0;E      NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);E      IER:=0;$      WHILE PROD.OPERANR<>OPERANR DO$      BEGIN        J:=J+1;%        PRODLINE(J,1):=PROD.SEKVENSN;%$        PRODLINE(J,2):=PROD.OPERANR;$%        PRODLINE(J,3):=PROD.STARTTID;%%        PRODLINE(J,4):=PROD.VARIGHED;%&        NEXTREC(PROD.A);CHECK0(PROD.A)&
      END;
#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#      WHILE J>0 DO      BEGINC        THISSTART:=PRODLINE(J,3) MOD 1000*8+PRODLINE(J,3) DIV 1000;C*        THISSLUT:=THISSTART+PRODLINE(J,4);*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT<DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF>0 THEN          J:=0        ELSE        BEGIN          NU(PRODLINE(J,2));$          LASTSTART:=THISSTART+DIFF;$!          LASTSLUT:=THISSLUT+DIFF!        END;        J:=J-1
      END;
      IF J=0 THEN      BEGIN5        ARBEDAG.NR:=(LASTSTART-1) DIV 8;        (*!*)5,        GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);,3        IF ARBEDAG.DATO(1)*10000.0+ARBEDAG.DATO(2)<3/           DAGSDATO(1)*10000.0+DAGSDATO(2) THEN/        BEGIN          GOTOXY(1,23);:          WRITE('Startdato ligger f|r dagsdato, RETURN ');:          READLN;          CHECKOK:=FALSE;          EXIT(CHECKPLAN)        END	      END	    END;  END;"  WITH ORDELIN(ORDENR(ANTLINE)) DO"  BEGIN     STARTDAG:=STARTTID MOD 1000;     STTIME:=STARTTID DIV 1000;    NU(OPERANR);    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVENSN;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"I    IF STARTDAG*8+STTIME+VARIGHED>PROD.STARTTID MOD 1000*8+PROD.VARIGHED+IM                                  PROD.STARTTID DIV 1000                 THENM	    BEGIN	F      (*OPERATIONEN SLUTTER SENERE END PLANLAGT, CHECK EFTERF\LGENDE*)F#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#E      NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);E      IER:=0;J      WHILE (IER=0) AND (PROD.ORDRENR=ORDRENR) AND (PROD.EMNENR=EMNENR) DOJ      BEGINC        THISSTART:=PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000;C*        THISSLUT:=THISSTART+PROD.VARIGHED;*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT>DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF<0 THEN          IER:=-1        ELSE        BEGIN          NU(PROD.OPERANR);$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"          NEXTREC(PROD.A)        END
      END;
5      IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);5      IF IER<>-1 THEN      BEGIN'        ARBEDAG.NR:=(LASTSLUT-1) DIV 8;',        GETREC(ARBEDAG.A);CHECK0(ARBEDAG.A);,>        IF ARBEDAG.UGENR>REBXTRA(ORDENR(ANTLINE)).\NSKLEV THEN>        BEGIN7          IF QJN('Skal leveringsuge rykkes') IN JA THEN7           FOR I:=1 TO ANTLINE DO           BEGIN6            REBXTRA(ORDENR(I)).\NSKLEV:=ARBEDAG.UGENR;61            IF REBXTRA(ORDENR(I)).BEKR[LEV>0 THEN18              REBXTRA(ORDENR(I)).BEKR[LEV:=ARBEDAG.UGENR8          END          ELSE          BEGIN            CHECKOK:=FALSE;            EXIT(CHECKPLAN)          END        END	      END	    END  ENDEND;(*$P*)PROCEDURE UDFPLAN;IVAR STARTDAG,STTIME,K,THISSTART,THISSLUT,LASTSTART,LASTSLUT,DIFF:INTEGER;I6    PRODLINE:ARRAY (1..50) OF ARRAY (1..4) OF INTEGER;6 PROCEDURE NU(OPERA:INTEGER);BEGIN
  D(24,1);
+  WRITE('Nu behandles:  Operation',OPERA:5)+END; 'PROCEDURE DESERVER(VAR RESSNR:INTEGER);'BEGIN  IF RESSNR>0 THEN  WITH REBELAST DO  BEGIN    RESS.NR:=RESSNR;"    GETREC(RESS.A);CHECK0(RESS.A);"    IF RESS.RESSTYPE>0 THEN 	    BEGIN	      NR:=RESSNR;,      GOTOXY(31,24);WRITE('Ressource',NR:5);,      ORDRENR:=PROD.ORDRENR;      EMNENR:=PROD.EMNENR;      OPERANR:=PROD.OPERANR;      SEKVNR:=PROD.SEKVENSN;'      STARTDAG:=PROD.STARTTID MOD 1000;'%      STTIME:=PROD.STARTTID DIV 1000;%      VARIGHED:=PROD.VARIGHED;      GETRECX(A);CHECK0(A);      DELETE(A);CHECK0(A)    END  ENDEND;(*$P*)'PROCEDURE RESERVER(VAR RESSNR:INTEGER);'BEGIN  IF RESSNR>0 THEN  WITH REBELAST DO  BEGIN    RESS.NR:=RESSNR;"    GETREC(RESS.A);CHECK0(RESS.A);"    IF RESS.RESSTYPE>0 THEN 	    BEGIN	      NR:=RESSNR;      ORDRENR:=PROD.ORDRENR;      EMNENR:=PROD.EMNENR;      OPERANR:=PROD.OPERANR;      SEKVNR:=PROD.SEKVENSN;'      STARTDAG:=PROD.STARTTID MOD 1000;'%      STTIME:=PROD.STARTTID DIV 1000;%      VARIGHED:=PROD.VARIGHED;      INSERT(A);CHECK0(A)    END  ENDEND;(*$P*) BEGIN  FOR I:=1 TO ANTLINE DO  WITH ORDELIN(ORDENR(I)) DO  BEGIN     STARTDAG:=STARTTID MOD 1000;     STTIME:=STARTTID DIV 1000;    NU(OPERANR);    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVENSN;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"    DESERVER(PROD.RESS1);    DESERVER(PROD.RESS2);    DESERVER(PROD.RESS3);J    IF (STARTDAG*8+STTIME<PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000)J       AND (I=1) THEN	    BEGIN	H      (*OPERATIONEN ER LAGT TIDLIGERE, CHECK FORANLIGGENDE OPERATIONER*)H      PROD.SEKVENSN:=0;      PROD.OPERANR:=0;      J:=0;E      NEXTREC(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);E      IER:=0;$      WHILE PROD.OPERANR<>OPERANR DO$      BEGIN        J:=J+1;%        PRODLINE(J,1):=PROD.SEKVENSN;%$        PRODLINE(J,2):=PROD.OPERANR;$%        PRODLINE(J,3):=PROD.STARTTID;%%        PRODLINE(J,4):=PROD.VARIGHED;%&        NEXTREC(PROD.A);CHECK0(PROD.A)&
      END;
#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#      WHILE J>0 DO      BEGINC        THISSTART:=PRODLINE(J,3) MOD 1000*8+PRODLINE(J,3) DIV 1000;C*        THISSLUT:=THISSTART+PRODLINE(J,4);*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT<DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF>0 THEN          J:=0        ELSE        BEGIN          NU(PRODLINE(J,2));$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"           PROD.ORDRENR:=ORDRENR;           PROD.EMNENR:=EMNENR;'          PROD.SEKVENSN:=PRODLINE(J,1);'&          PROD.OPERANR:=PRODLINE(J,2);&)          GETRECX(PROD.A);CHECK0(PROD.A);)          DESERVER(PROD.RESS1);          DESERVER(PROD.RESS2);          DESERVER(PROD.RESS3);J          PROD.STARTTID:=(LASTSTART-1) DIV 8+((LASTSTART-1) MOD 8+1)*1000;J          RESERVER(PROD.RESS1);          RESERVER(PROD.RESS2);          RESERVER(PROD.RESS3);'          PUTREC(PROD.A);CHECK0(PROD.A)'        END;        J:=J-1	      END	    END;     STARTDAG:=STARTTID MOD 1000;     STTIME:=STARTTID DIV 1000;    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVENSN;    PROD.OPERANR:=OPERANR;"    GETREC(PROD.A);CHECK0(PROD.A);"J    IF (STARTDAG*8+STTIME+VARIGHED>PROD.STARTTID MOD 1000*8+PROD.VARIGHED+JN                                  PROD.STARTTID DIV 1000) AND (I=ANTLINE) THENN	    BEGIN	F      (*OPERATIONEN SLUTTER SENERE END PLANLAGT, CHECK EFTERF\LGENDE*)F#      LASTSTART:=STARTDAG*8+STTIME;##      LASTSLUT:=LASTSTART+VARIGHED;#F      NEXTRECX(PROD.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A);F      IER:=0;J      WHILE (IER=0) AND (PROD.ORDRENR=ORDRENR) AND (PROD.EMNENR=EMNENR) DOJ      BEGINC        THISSTART:=PROD.STARTTID MOD 1000*8+PROD.STARTTID DIV 1000;C*        THISSLUT:=THISSTART+PROD.VARIGHED;*"        DIFF:=LASTSTART-THISSTART;"?        IF LASTSLUT-THISSLUT>DIFF THEN DIFF:=LASTSLUT-THISSLUT;?        IF DIFF<0 THEN          IER:=-1        ELSE        BEGIN          NU(PROD.OPERANR);$          LASTSTART:=THISSTART+DIFF;$"          LASTSLUT:=THISSLUT+DIFF;"          DESERVER(PROD.RESS1);          DESERVER(PROD.RESS2);          DESERVER(PROD.RESS3);J          PROD.STARTTID:=(LASTSTART-1) DIV 8+((LASTSTART-1) MOD 8+1)*1000;J          RESERVER(PROD.RESS1);          RESERVER(PROD.RESS2);          RESERVER(PROD.RESS3);(          PUTREC(PROD.A);CHECK0(PROD.A);(          NEXTRECX(PROD.A)        END
      END;
5      IF NOT (-IER IN (.0..2,9.)) THEN ERROR(PROD.A) 5    END;    PROD.ORDRENR:=ORDRENR;    PROD.EMNENR:=EMNENR;    PROD.SEKVENSN:=SEKVENSN;    PROD.OPERANR:=OPERANR;#    GETRECX(PROD.A);CHECK0(PROD.A);#    PROD.STARTTID:=STARTTID;    PROD.VARIGHED:=VARIGHED;    RESERVER(PROD.RESS1);    RESERVER(PROD.RESS2);    RESERVER(PROD.RESS3);"    PUTREC(PROD.A);CHECK0(PROD.A);"    IF I=ANTLINE THEN	    BEGIN	      ORDRE.NR:=ORDRENR;      ORDRE.EMNENR:=EMNENR;'      GETRECX(ORDRE.A);CHECK0(ORDRE.A);'1      ORDRE.BEKR[LEV:=REBXTRA(ORDENR(I)).\NSKLEV;1%      PUTREC(ORDRE.A);CHECK0(ORDRE.A)%    END  ENDEND;(*$P*)PROCEDURE AFSLUT;BEGIN:  IF QJN('\nskes check og {ndringer foretaget') IN JA THEN:  BEGIN'    GETRECX(SYSTEM.A);CHECK0(SYSTEM.A);'    CHECKPLAN;    IF CHECKOK THEN	    BEGIN	      UDFPLAN;      GETPROD;      ORDBILLEDE(0,ANTLINE)    END    ELSE CH(1):='4';%    PUTREC(SYSTEM.A);CHECK0(SYSTEM.A)%  ENDEND;(*$P*)BEGIN (*ORDREPLAN*) CHECKOK:=FALSE; REPEAT  L[SFELT(PICTURE(2));'  IF POST.ORDRE=0 THEN EXIT(ORDREPLAN);'  L[SFELT(PICTURE(3));  ORDRE.NR:=POST.ORDRE;  ORDRE.EMNENR:=POST.EMNENR;?  GETREC(ORDRE.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(ORDRE.A);??  IF IER=-6 THEN BEGIN NONEXIST('Ordren'); EXIT(ORDREPLAN) END;?
  GETPROD;
  ORDBILLEDE(0,ANTLINE);  REPEAT    D(23,2);>    WRITELN('[ndring af 1: Starttid 2: Varighed             ',>#            '           V{lg 1-5');#?    WRITE('3: Sekventiel udl{gning  4: Check plan  5: Afslut');?
    REPEAT
      CH:='1';      GOTOXY(75,23);      EDIT(CH)     UNTIL CH(1) IN (.'1'..'5'.);     CASE CH(1) OF    '1':[START;    '2':[VARIG;    '3':SEKVUDL;2    '4':BEGIN CHECKPLAN;ORDBILLEDE(0,ANTLINE) END;2    '5':AFSLUT    END  UNTIL CH(1)='5' UNTIL POST.ORDRE=0END;(*$P*)PROCEDURE UDL[GORDRE;EVAR VARIGHED,TIDSFORB,\LEVDAG,DAGE,TIMER,STARTTIME,STARTDAY :INTEGER;E 'PROCEDURE RESERVER(VAR RESSNR:INTEGER);'BEGIN  IF RESSNR<0 THEN  WITH RESSGRUP DO  BEGIN    GRUPNR:=-RESSNR;
    NR:=0;
    REBELAST.GRUPPE:=GRUPNR;9    NEXTREC(A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(A);9&    IF GRUPNR=-RESSNR THEN RESSNR:=NR &  END   ELSE REBELAST.GRUPPE:=0;  IF RESSNR>0 THEN  WITH REBELAST DO  BEGIN    RESS.NR:=RESSNR;"    GETREC(RESS.A);CHECK0(RESS.A);"    IF RESS.RESSTYPE>0 THEN 	    BEGIN	      NR:=RESSNR;      ORDRENR:=PROD.ORDRENR;      EMNENR:=PROD.EMNENR;      OPERANR:=PROD.OPERANR;      SEKVNR:=PROD.SEKVENSN;'      STARTDAG:=PROD.STARTTID MOD 1000;'%      STTIME:=PROD.STARTTID DIV 1000;%      VARIGHED:=PROD.VARIGHED;      INSERT(A);CHECK0(A)    END  ENDEND;(*$P*)BEGIN  (*UDL[GORDRE*)  REPEAT    L[SFELT(PICTURE(2));*    IF POST.ORDRE=0 THEN EXIT(UDL[GORDRE);*    L[SFELT(PICTURE(3));    ORDRE.NR:=POST.ORDRE;    ORDRE.EMNENR:=POST.EMNENR;B    GETRECX(ORDRE.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(ORDRE.A);B    IF IER=-6 THEN      NONEXIST('Ordren')    ELSE	    BEGIN	      IF ORDRE.BEKR[LEV<>0 THEN      BEGIN        D(23,1);+        WRITE('Ordren er allerede udlagt');+        READLN	      END	
      ELSE
      WITH PROD DO      BEGIN        ORDRE.BEKR[LEV:=-1;        TIDSFORB:=0;        ORDRENR:=ORDRE.NR;        EMNENR:=ORDRE.EMNENR;        SEKVENSN:=0;        OPERANR:=0;=        NEXTREC(A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(A);=        IER:=0;I        WHILE (IER=0) AND (ORDRENR=ORDRE.NR) AND (EMNENR=ORDRE.EMNENR) DOI        BEGIN+          TIDSFORB:=TIDSFORB+PROD.VARIGHED;+!          OPERA.NR:=PROD.OPERANR;!*          GETREC(OPERA.A);CHECK0(OPERA.A);*1          TIDSFORB:=TIDSFORB+ROUND(OPERA.TILL[G);1          NEXTREC(A)        END;1        IF NOT (-IER IN (.0,2,9.)) THEN ERROR(A);1$        UGEDAG.UGENR:=ORDRE.\NSKLEV;$*        GETREC(UGEDAG.A);CHECK0(UGEDAG.A);*!        \LEVDAG:=UGEDAG.ARBDAGNR;!        DAGE:=TIDSFORB DIV 8;        TIMER:=TIDSFORB MOD 8;        STARTTIME:=1;        STARTDAY:=\LEVDAG-DAGE;        IF TIMER>0 THEN        BEGIN          STARTDAY:=STARTDAY-1;          STARTTIME:=9-TIMER        END;        ORDRENR:=ORDRE.NR;        EMNENR:=ORDRE.EMNENR;        SEKVENSN:=0;        OPERANR:=0;>        NEXTRECX(A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(A);>        IER:=0;I        WHILE (IER=0) AND (ORDRENR=ORDRE.NR) AND (EMNENR=ORDRE.EMNENR) DOI        BEGIN!          OPERA.NR:=PROD.OPERANR;!*          GETREC(OPERA.A);CHECK0(OPERA.A);*          GOTOXY(1,24);C          WRITE('Nu behandles operation ',OPERA.BETEGN,OPERA.NR:5);C%          IF STARTDAY>=PSTARTDAG THEN%2            PROD.STARTTID:=1000*STARTTIME+STARTDAY2          ELSE*            PROD.STARTTID:=1000+PSTARTDAG;*          RESERVER(PROD.RESS1);          RESERVER(PROD.RESS2);          RESERVER(PROD.RESS3);          PUTREC(A);CHECK0(A);<          STARTTIME:=STARTTIME+VARIGHED+ROUND(OPERA.TILL[G);<-          STARTDAY:=STARTDAY+STARTTIME DIV 8;-%          STARTTIME:=STARTTIME MOD 8;%          IF STARTTIME=0 THEN          BEGIN!            STARTDAY:=STARTDAY-1;!            STARTTIME:=8          END;           NEXTRECX(A)        END;1        IF NOT (-IER IN (.0,2,9.)) THEN ERROR(A);1        D(24,1)
      END;
%      PUTREC(ORDRE.A);CHECK0(ORDRE.A)%    END  UNTIL POST.ORDRE=0END;(*$P*)PROCEDURE MAINTAIN;VAR CH:CHAR;BEGIN (*MAINTAIN*)  REPEAT    L[SFELT(PICTURE(4));     UGEDAG.UGENR:=POST.STARTUGE; C    GETREC(UGEDAG.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(UGEDAG.A);C    IF IER=0 THEN	    BEGIN	"      ARBEDAG.NR:=UGEDAG.ARBDAGNR;"G      GETREC(ARBEDAG.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(ARBEDAG.A);G+      IF (DAGSDATO(1)*10000.0+DAGSDATO(2))>+?         (ARBEDAG.DATO(1)*10000.0+ARBEDAG.DATO(2)) THEN IER:=-6?    END  UNTIL IER=0;  PSTARTDAG:=UGEDAG.ARBDAGNR;  CASE OPTION OF  1:RESSPLAN;  2:ORDREPLAN;  3:UDL[GORDRE  END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-*)	  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); %)  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(RESS.A);      CHECK0(RESS.A);%-  IOPEN(RESSGRUP.A);  CHECK0(RESSGRUP.A);    -+  IOPEN(EMNE.A);      CHECK0(EMNE.A);      ++  IOPEN(OPERA.A);     CHECK0(OPERA.A);     +  SYSTEM.NR:=0;$  GETREC(SYSTEM.A);CHECK0(SYSTEM.A);$  DAGSDATO:=SYSTEM.DAGSDATO;  SYSTEM.NR:=1;  POST.STARTUGE:=0;  REPEAT    CLEARSCREEN;    GOTOXY(1,10);    WRITELN('0 F{rdig');&    WRITELN('1 Ressourceplanl{gning');&"    WRITELN('2 Ordreplanl{gning');"$    WRITELN('3 Udl{gning af ordre');$    L[SFELT(PICTURE(13));    OPTION:=POST.OPTION;    IF OPTION>0 THEN MAINTAIN  UNTIL OPTION=0;   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);  ICLOSE(SYSTEM.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
N  END;                                                                 (*$R-*)N  SNYD(-3):=0;>  FOR I:=6 DOWNTO 2 DO SNYD(-3):=10*SNYD(-3)+ORD(PARM^(I))-48;>N  IF PARM^(7)='-' THEN SNYD(-3):=-SNYD(-3);                            (*$R+*)N  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); 3  IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)3END.  FMELD,SNYD);  IF IER<>0 THEN BAD(2,IER);  FNAVN:='       ';&  FOR I:=1 TO 7 DO FNAVN(I):=PARM^(I);&   CHAIN('HOVED   *1',FNAVN,QUQ); 3  IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)3END.  .  );.    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$2      BEGIN AKTDAG:=0; AKTWEEK:=ARBEDAG.UGENR END;2      IF AKTDAG<5 THEN      BEGIN        AKTDAG:=AKTDAG+1;        WRITE(LIST,AKTDAG:2)	      END	      ELSE WRITE(LIST,' ':2);J      NEXTREC(ARBEDAG.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(ARBEDAG.A)J    END;*    WRITELN(LIST,' Uge  ant  time   hed');*    LINES:=2  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;2      IF STARTDAG-PSTARTDAG+VARIGHED DIV 8<26 THEN29        MOVELEFT(PIND(1),UDLINIE(I),(VARIGHED-1) DIV 4+1)9
      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,' ');(4    WRITELN(LIST,ANTALBES:5:-2,STTIME:6,VARIGHED:6);4    LINES:=LINES+1  ENDEND;(*$P*)PROCEDURE GETBELAST;BEGIN  REBELAST.NR:=RESS.NR;  REBELAST.STARTDAG:=PSTARTDAG;  REBELAST.ORDRENR:=0;I  NEXTREC(REBELAST.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(REBELAST.A);I	  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;;3  IF NOT (-IER IN (.0,2,9.)) THEN ERROR(REBELAST.A)3END;(*$P*)BEGIN (*GANTTKORT*)  REPEAT    L[SFELT(PICTURE(15));    CASE POST.OPTION OF    1:REPEAT        L[SFELT(PICTURE(1));1        IF POST.RESSOURCE=0 THEN EXIT(GANTTKORT);1         RESS.NR:=POST.RESSOURCE; C        GETREC(RESS.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(RESS.A);CI        IF IER=-6 THEN BEGIN NONEXIST('Ressourcen'); EXIT(GANTTKORT) END;I        GETBELAST      UNTIL POST.RESSOURCE=0;    2:REPEAT        L[SFELT(PICTURE(16));0        IF POST.AFDELING=0 THEN EXIT(GANTTKORT);0        RESS.NR:=0;G        NEXTREC(RESS.A);IF NOT (-IER IN (.0..2,9.)) THEN ERROR(RESS.A);G        IER:=0;        WHILE IER=0 DO        BEGIN7          IF RESS.AFDELNR=POST.AFDELING THEN GETBELAST;7          NEXTREC(RESS.A)        END;3        IF NOT (-IER IN (.2,9.)) THEN ERROR(RESS.A)3      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;9        IF NOT (-IER IN (.0,2,9.)) THEN ERROR(RESSGRUP.A)9      UNTIL POST.GRUPPE=0    END  UNTIL POST.OPTION=0END;(*$P*)PROCEDURE PRODPLAN; BEGIN END; BEGIN (*PLANUDSK*)
  D(10,7);
(  WRITELN('1 Gantt-kort for ressource');(-  WRITELN('2 Belastningsplan for ressource');-  WRITELN('3 Produktionsplan');  L[SFELT(PICTURE(14));  CASE POST.OPTION OF  1:GANTTKORT;  2:BELASTPLAN;  3:PRODPLAN  ENDEND;(*$P*)PROCEDURE MAINTAIN;VAR CH:CHAR;BEGIN (*MAINTAIN*)  REPEAT    L[SFELT(PICTURE(4));     UGEDAG.UGENR:=POST.STARTUGE; C    GETREC(UGEDAG.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(UGEDAG.A);C    IF IER=0 THEN	    BEGIN	"      ARBEDAG.NR:=UGEDAG.ARBDAGNR;"G      GETREC(ARBEDAG.A);IF NOT (-IER IN (.0,6.)) THEN ERROR(ARBEDAG.A);G9      IF (SYSTEM.DAGSDATO(1)*10000.0+SYSTEM.DAGSDATO(2))>9?         (ARBEDAG.DATO(1)*10000.0+ARBEDAG.DATO(2)) THEN IER:=-6?    END  UNTIL IER=0;  PSTARTDAG:=UGEDAG.ARBDAGNR;  CASE OPTION OF  1:RESSPLAN;  2:ORDREPLAN;  3:UDL[GORDRE;  4:PLANUDSK  END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);(  POST.STARTUGE:=0;  REPEAT    CLEARSCREEN;    GOTOXY(1,10);    WRITELN('0 F{rdig');&    WRITELN('1 Ressourceplanl{gning');&"    WRITELN('2 Ordreplanl{gning');"$    WRITELN('3 Udl{gning af ordre');$(    WRITELN('4 Planl{gningsudskrifter');(    L[SFELT(PICTURE(13));    OPTION:=POST.OPTION;    IF OPTION>0 THEN 	    BEGIN	      CASE OPTION OF      1:BEGIN-          IOPEN(RESS.A);      CHECK0(RESS.A);-,          IOPEN(EMNE.A);      CHECK0(EMNE.A),        END;      2:BEGIN-          IOPEN(OPERA.A);     CHECK0(OPERA.A)-        END;      3:BEGIN-          IOPEN(RESS.A);      CHECK0(RESS.A);-1          IOPEN(RESSGRUP.A);  CHECK0(RESSGRUP.A);1-          IOPEN(OPERA.A);     CHECK0(OPERA.A)-        END;      4:BEGIN1          IOPEN(RESSGRUP.A);  CHECK0(RESSGRUP.A);1-          IOPEN(EMNE.A);      CHECK0(EMNE.A);-,          IOPEN(RESS.A);      CHECK0(RESS.A),        END
      END;
       MAINTAIN;       CASE OPTION OF      1:BEGIN          ICLOSE(RESS.A);          ICLOSE(EMNE.A)        END;      2:BEGIN          ICLOSE(OPERA.A)        END;      3:BEGIN          ICLOSE(RESSGRUP.A);          ICLOSE(RESS.A);          ICLOSE(OPERA.A)        END;      4:BEGIN          ICLOSE(RESSGRUP.A);          ICLOSE(EMNE.A);          ICLOSE(RESS.A)        END	      END	     END  UNTIL OPTION=0;   ICLOSE(ORDRE.A);      ICLOSE(REBELAST.A);  ICLOSE(PROD.A);   ICLOSE(UGEDAG.A);  ICLOSE(ARBEDAG.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
N  END;                                                                 (*$R-*)N  SNYD(-3):=0;>  FOR I:=6 DOWNTO 2 DO SNYD(-3):=10*SNYD(-3)+ORD(PARM^(I))-48;>N  IF PARM^(7)='-' THEN SNYD(-3):=-SNYD(-3);                            (*$R+*)N  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); 3  IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)3END.      WRITELN('3 Udl{gning af ordre');$(    WRITELN('4 Planl{gningsudskrifter');(    L[SFELT(PICTURE(13));    OPTION:=POST.OPTION;    IF OPTION>0 THEN 	    BEGIN	      CASE OPTION OF      1:BEGIN-          IOPEN(RESS.A);      CHECK0(RESS.A);-,          IOPEN(EMNE.A);      CHECK0(EMNE.A),        END;      2:BEGIN-          IOPEN(OPERA.A);     CHECK0(OPERA.A)-        END;      3:BEGIN-          IOPEN(RESS.A);      CHECK0(RESS.A);-1          IOPEN(RESSGRUP.A);  CHECK0(RESSGRUP.A);1-          IOPEN(OPERA.A);     CHECK0(OPERA.A)-        END;      4:BEGIN1          IOPEN(RESSGRUP.A);  CHECK0(RESSGRUP.A);1-          IOPEN(EMNE.A);      CHECK0(EMNE.A);-,          IOPEN(RESS.A);      CHECK0(RESS.A),        END
      END;
       MAINTAIN;       CASE OPTION OF      1:BEGIN          ICLOSE(RESS.A);          ICLOSE(EMNE.A)        END;      2:BEGIN          ICLOSE(OPERA.A)        END;      3:BEGIN          ICLOSE(RESSGRUP.A);          ICLOSE(RESS.A);          ICLOSE(OPERA.A)        END;      4:BEGIN          ICLOSE(RESSGRUP.A);          ICLOSE(EMNE.A);          ICLOSE(RESS.A)        END	      END	     END  UNTIL OPTION=0;   ICLOSE(ORDRE.A);      ICLOSE(REBELAST.A);  ICLOSE(PROD.A);   ICLOSE(UGEDAG.A);  ICLOSE(ARBEDAG.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
N  END;                                                                 (*$R-*)N  SNYD(-3):=0;>  FOR I:=6 DOWNTO 2 DO SNYD(-3):=10*SNYD(-3)+ORD(PARM^(I))-48;>N  IF PARM^(7)='-' THEN SNYD(-3):=-SNYD(-3);                            (*$R+*)N  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); 3  IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)3END.  KTIONSORDREPOST, ELLER MARKERER KUNL%PRODUKTIONSORDREPOSTEN MED SLUTDATO*)%CONST MAXRECSIZE=10;(*@@*)      PROGRAMNR=8;TYPE'PARMARRAY=PACKED ARRAY (1..39) OF CHAR;'INIVEAU=(MENIG,SERGENT,L\JTNANT,KAPTAJN,MAJOR,OBERST,GENERAL,HSM,UMULIUS);IPOSTADR=0..MAXRECSIZE;ICOMMBUF =ARRAY (POSTADR) OF INTEGER;(*commbuf(0)=filnr,resten er posten*)IPOINTREC=^COMMBUF;NAME    =STRING(10);PCB     =^INTEGER;GMESSAGETYPE=(]BEN,LUK,L[SPOST,L[SPOSTX,N[STE,N[STEX,SLET,SLETX,GEMPOST,GN             INDS[T,INITIER,UTILMELD,UAFMELD,PTILMELD,PAFMELD,STOPSYS,        NH             RETURNHEAD,RETURNSTAT);                                    H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,DESCNAVN:STRING(18);!       SEMAFOR:NAME;       FILEINIT:BOOLEAN;       SNYD:AR;       CPPCB:PCB;       COMREC:POINTREC;       BESKED:MESSAGE;(*$P*)(*$L-*)$PROCEDURE BAD(IDENT,STATUS:INTEGER);$BEGIN  GOTOXY(1,23);   WRITE('BAD',IDENT:5,STATUS:5);   READLNEND;(*$P*)5PROCEDURE ALLOCA(VAR ADDRESS:POINTREC;LENGTH:INTEGER;5%                 VAR STATUS:INTEGER);%	EXTERNAL;	6PROCEDURE DEALLO(ADDRESS:POINTREC;VAR STATUS:INTEGER);6	EXTERNAL;	2PROCEDURE SENDM(RECEIVER:PCB;VAR CONTENTS:MESSAGE;23                LENGTH:INTEGER;VAR STATUS:INTEGER);3	EXTERNAL;	5PROCEDURE RECEIV(VAR SENDER:PCB;VAR CONTENTS:MESSAGE;5%                 VAR LENGTH:INTEGER);%	EXTERNAL;	6PROCEDURE RESERV(RESOURCE:NAME;EXCLUSIVE,WAIT:BOOLEAN;6%                 VAR STATUS:INTEGER);%	EXTERNAL;	3PROCEDURE RELEAS(RESOURCE:NAME;VAR STATUS:INTEGER);3	EXTERNAL;	(*$P*)(*$IUDF\R*)(*$IFISFPROC*)(*$P*)(*$L+*)PROCEDURE REGVEDL;CONST MAXFELTER=30;      MAXN\GLER=9;(*@@*)      MAXPOST=10;      MAXH[GTER=9;      MAXHPOST=20;      MAXIDENT=9;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=RECORc