PROGRAM HOVED;CONST LNGTH=20;      TIMER=120;TYPE'PARMARRAY=PACKED ARRAY (1..39) OF CHAR;'*DIRECTBUF=PACKED ARRAY (1..LNGTH) OF CHAR;*CLOCKRECORD = RECORD1               DATE:PACKED ARRAY (1..10) OF CHAR;1/               TIME:PACKED ARRAY (1..8) OF CHAR/              END;INIVEAU=(MENIG,SERGENT,L\JTNANT,KAPTAJN,MAJOR,OBERST,GENERAL,HSM,UMULIUS);IVAR    PARM:^PARMARRAY;       CLOCK:^CLOCKRECORD;2       STIMER,SV,TT,OFFSET,MIN,SEC,SEC100:INTEGER;2*       T[NDT,HOWL,ALARM,STOPWATCH:BOOLEAN;*-       ALARMTIME:PACKED ARRAY (1..8) OF CHAR;-       DBUF:DIRECTBUF;       USERNIVEAU:NIVEAU;       C,CH :CHAR;       F:STRING(18);       QUQ:^INTEGER;       I:INTEGER;%       FNAVN,REGNAVN,DESCNAVN:STRING;%(*$P*)SEGMENT PROCEDURE KODEVEDL;TYPEENTRY=RECORD        KODE:STRING(9);        NIV:INTEGEREND;KODER=ARRAY (1..20) OF ENTRY;KODEFIL=FILE OF KODER;VAR F:KODEFIL;    FNAVN:STRING(20);    USERKODE:STRING(9);&    NIVEAUD:ARRAY (0..6) OF STRING(8);&    I,J:INTEGER;BEGIN  NIVEAUD(0):='MENIG   ';  NIVEAUD(1):='SERGENT ';  NIVEAUD(2):='L\JTNANT';  NIVEAUD(3):='KAPTAJN ';  NIVEAUD(4):='MAJOR   ';  NIVEAUD(5):='OBERST  ';  NIVEAUD(6):='GENERAL ';  FNAVN:='KODEFIL:P2:1:J';  REWRITE(F,FNAVN);  SEEK(F,1);	  GET(F);	  CLEARSCREEN;I(*$XO*) FOR I:=1 TO 20 DO BEGIN F^(I).KODE:='         ';F^(I).NIV:=0 END;I(*$X-*)  IF PARM^(1)='0' THEN  BEGIN    USERKODE:='         ';
    REPEAT
      GOTOXY(1,1);      WRITELN('Indtast kode');$      GOTOXY(14,1);EDIT(USERKODE:9);$      FOR I:=1 TO 20 DO!      IF F^(I).KODE=USERKODE THEN!      BEGIN$        PARM^(1):=CHR(F^(I).NIV+48);$        I:=30	      END	    UNTIL I>30  END  ELSE  BEGIND    FOR I:=1 TO 20 DO WRITELN(F^(I).KODE,' ':10,NIVEAUD(F^(I).NIV));D
    REPEAT
      GOTOXY(1,23);*      WRITELN('Kode nr     0 for f{rdig');*      GOTOXY(9,23);      READLN;READ(I);      IF (I>0) AND (I<21) THEN      BEGIN        GOTOXY(1,22);        USERKODE:=F^(I).KODE;        EDIT(USERKODE:9);        F^(I).KODE:=USERKODE;        REPEAT          GOTOXY(20,22);'          USERKODE:=NIVEAUD(F^(I).NIV);'          EDIT(USERKODE:8);          FOR J:=0 TO 6 DO%          IF NIVEAUD(J)=USERKODE THEN%          BEGIN            F^(I).NIV:=J;            J:=20          END        UNTIL J>20	      END	    UNTIL I=0;    SEEK(F,1);
    PUT(F)
  END;  CLOSE(F);3  IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)3END;(*$P*)5PROCEDURE SETUP(VAR BUFFER:DIRECTBUF;LENGTH:INTEGER);5	EXTERNAL;	FUNCTION AVAIL:BOOLEAN;	EXTERNAL;	FUNCTION NEXT:CHAR;	EXTERNAL;	PROCEDURE FINIS;	EXTERNAL;	PROCEDURE UR;FORWARD;(*$P*)PROCEDURE REGVEDL;CONST MAXFELTER=30;      MAXN\GLER=9;      MAXZONE=450;      MAXPOST=150;(*$IISFHEAD*)ZZONE   =RECORD        H:ISFHEAD;&        T:ARRAY(1..MAXZONE) OF INTEGER&END;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:INTEGER;   L[NGDE:INTEGER;   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; FELTFIL=FILE OF FELTBESKRIVELSE; %ARAR=PACKED ARRAY (-11..-10) OF CHAR;%RAR=ARRAY (0..0) OF REAL;PPOST=RECORD      AA:ARAR;      A:AR;      AAA:RAR;-      CONTENTS: ARRAY (1..MAXPOST) OF INTEGER-END;VAR FELT:NFELT;    HUSKNIV:NIVEAU;*    PICTURE:ARRAY (1..MAXFELTER) OF NFELT;*)    N\GLER:ARRAY (1..MAXN\GLER) OF NFELT;)9    LINES,OPTION,IER,I,J,ANTALFELTER,ANTALN\GLER:INTEGER;9    CH:STRING(1);    LINE:STRING;    FFIL:FELTFIL;    REGISTER:ISF;    ZONE:ZZONE;    POST:PPOST;(*$L-*)(*$R-,IFORWARD*)(*$IINITIATE*)(*$IREPORT*)(*$IIOPEN*)(*$IICLOSE*)(*$IEXCOMCOP*)(*$IS[T\G*)(*$IREADPROC*)(*$IFINDPOST*)(*$IFORSKYD*)(*$IPUTGET*)(*$IINSERT*)(*$INEXTREC*)(*$IDELETE*)(*$P*)(*$L+*)!PROCEDURE ERROR(VAR FIL:FILNAVN);!BEGIN  IF LINES>0 THEN PAGE(LIST);=  WRITELN('FEJL I REGISTER ',FIL,' FEJLKODE ',IER,' RETURN');=<  CH:=' ';EDIT(CH);IF CH='R' THEN REPORT(ZONE.H,REGISTER,1);<  ICLOSE(ZONE.H,REGISTER);  EXIT(REGVEDL)END;!PROCEDURE OFEJL(VAR FIL:FILNAVN);!VAR I:INTEGER;BEGIN  GOTOXY(1,20);M  WRITELN('REGISTERFEJL ',IER,' I ',FIL,' . SITUATIONEN ER FORS\GT REDDET.');M.  WRITELN('TAST 0, HVIS DER SKAL FORTS[TTES');.7  REPEAT GOTOXY(40,21);READLN;READ(I) UNTIL IORESULT=0;7  IF I<>0 THEN ERROR(FIL);  CLEARSCREENEND;(*$P*)PROCEDURE L[SDESC;BEGIN  REWRITE(FFIL,DESCNAVN);   GET(FFIL);  I:=0;  ANTALN\GLER:=0;  WHILE FFIL^.INDPOS.X>0 DO  BEGIN    I:=I+1;    CASE FFIL^.FELTTYPE OF'    REEL:NEW(PICTURE(I),FELTDESC,REEL);'8    HELTAL,DOBBTAL,TEKST:NEW(PICTURE(I),FELTDESC,HELTAL)8    END;    FELT:=PICTURE(I);    WITH PICTURE(I)^ DO	    BEGIN	      DESCTYPE:=FELTDESC;      INDPOS.X:=FFIL^.INDPOS.X;      INDPOS.Y:=FFIL^.INDPOS.Y;      UDPOS.X:=FFIL^.UDPOS.X;      UDPOS.Y:=FFIL^.UDPOS.Y;%      KIKKENIVEAU:=FFIL^.KIKKENIVEAU;%%      [NDRENIVEAU:=FFIL^.[NDRENIVEAU;%!      IF [NDRENIVEAU=UMULIUS THEN!      BEGIN#        ANTALN\GLER:=ANTALN\GLER+1;#'        N\GLER(ANTALN\GLER):=PICTURE(I)'
      END;
!      LEDETEKST:=FFIL^.LEDETEKST;!#      F\LGETEKST:=FFIL^.F\LGETEKST;#!      EDITERING:=FFIL^.EDITERING;!      FELTTYPE:=FFIL^.FELTTYPE;      INDEKS:=FFIL^.INDEKS;      L[NGDE:=FFIL^.L[NGDE;      FORAN0:=FFIL^.FORAN0;+      IF FELTTYPE=REEL THEN DEC:=FFIL^.DEC;+"      WHILE FFIL^.N[STEVAL<>NIL DO"      BEGIN        GET(FFIL);        WITH FELT^ DO$        CASE FFIL^.VALIDITETSTYPE OF$          HINTERVAL:BEGIN7                      NEW(N[STEVAL,VALIDESC,HINTERVAL);7/                      N[STEVAL^.MIN:=FFIL^.MIN;/.                      N[STEVAL^.MAX:=FFIL^.MAX.                    END;          DINTERVAL:BEGIN7                      NEW(N[STEVAL,VALIDESC,DINTERVAL);7L                      N[STEVAL^.MIN1:=FFIL^.MIN1;N[STEVAL^.MIN2:=FFIL^.MIN2;LK                      N[STEVAL^.MAX1:=FFIL^.MAX1;N[STEVAL^.MAX2:=FFIL^.MAX2K                    END;          RINTERVAL:BEGIN7                      NEW(N[STEVAL,VALIDESC,RINTERVAL);71                      N[STEVAL^.RMIN:=FFIL^.RMIN;10                      N[STEVAL^.RMAX:=FFIL^.RMAX0                    END;.          DATO,CPR:NEW(N[STEVAL,VALIDESC,DATO).        END;        FELT:=FELT^.N[STEVAL;!        FELT^.DESCTYPE:=VALIDESC;!2        FELT^.VALIDITETSTYPE:=FFIL^.VALIDITETSTYPE2
      END;
      FELT^.N[STEVAL:=NIL    END;    GET(FFIL)  END;  CLOSE(FFIL);  ANTALFELTER:=IEND;(*$P*)"PROCEDURE MOVETOLINE(VAR F:NFELT);"VAR CH:STRING(1);    TAL,DECS,I:INTEGER;    RESULT,DM,DD:REAL;BEGIN
  CH:=' ';
      CASE F^.FELTTYPE OF      HELTAL:BEGIN               LINE:='';+               TAL:=ABS(POST.A(F^.INDEKS));+               REPEAT+                 CH(1):=CHR(TAL MOD 10+48);+'                 LINE:=CONCAT(CH,LINE);'                  TAL:=TAL DIV 10                UNTIL TAL=0;F               WHILE LENGTH(LINE)<F^.FORAN0 DO LINE:=CONCAT('0',LINE);FA               IF POST.A(F^.INDEKS)<0 THEN LINE:=CONCAT('-',LINE)A             END;     DOBBTAL:BEGIN               LINE:='';J               RESULT:=ABS(POST.A(F^.INDEKS)*10000.0+POST.A(F^.INDEKS+1));J               DM:=100000000.0;               REPEAT(                 I:=TRUNC(RESULT/DM)+48;(*                 RESULT:=RESULT-DM*(I-48);*                 DM:=DM/10(               UNTIL (I>48) OR (DM<1.0);(               REPEAT                 CH(1):=CHR(I);'                 LINE:=CONCAT(LINE,CH);'(                 I:=TRUNC(RESULT/DM)+48;(*                 RESULT:=RESULT-DM*(I-48);*                 DM:=DM/10.0               UNTIL DM<0.09;F               WHILE LENGTH(LINE)<F^.FORAN0 DO LINE:=CONCAT('0',LINE);FH               IF POST.A(F^.INDEKS)*10000.0+POST.A(F^.INDEKS+1)<0.0 THENH'                 LINE:=CONCAT('-',LINE)'             END;       TEKST:BEGIN               LINE:='';;               FOR I:=F^.INDEKS TO F^.INDEKS+F^.L[NGDE-1 DO;               BEGIN#                 CH(1):=POST.AA(I);#&                 LINE:=CONCAT(LINE,CH)&               END             END;        REEL:BEGIN0               RESULT:=ABS(POST.AAA(F^.INDEKS));0               DECS:=F^.DEC;               IF DECS=0 THEN                 DD:=0.0               ELSE               BEGIN                 DD:=0.1;L                 FOR I:=1 TO DECS DO BEGIN RESULT:=RESULT*10.0;DD:=DD*10 ENDL               END;               LINE:='';"               IF F^.FORAN0=0 THEN"               BEGIN$                 DM:=100000000000.0;$                 REPEAT*                   I:=TRUNC(RESULT/DM)+48;*,                   RESULT:=RESULT-DM*(I-48);,                   DM:=DM/10.04                 UNTIL (I>48) OR (DM<1.0) OR (DM=DD)4               END               ELSE               BEGIN                 DM:=1.0;6                 FOR I:=2 TO F^.FORAN0 DO DM:=DM*10.0;6(                 I:=TRUNC(RESULT/DM)+48;(*                 RESULT:=RESULT-DM*(I-48);*                 DM:=DM/10.0               END;               REPEAT                 CH(1):=CHR(I);'                 LINE:=CONCAT(LINE,CH);'6                 IF DM=DD THEN LINE:=CONCAT(LINE,'.');6(                 I:=TRUNC(RESULT/DM)+48;(*                 RESULT:=RESULT-DM*(I-48);*                 DM:=DM/10.0               UNTIL DM<0.09;E               IF POST.AAA(F^.INDEKS)<0.0 THEN LINE:=CONCAT('-',LINE)E             END	      END	END;(*$P*)PROCEDURE NULPOST;VAR I,J:INTEGER;BEGIN0  FOR J:=1 TO ANTALFELTER DO WITH PICTURE(J)^ DO0  BEGIN    CASE FELTTYPE OF    HELTAL:POST.A(INDEKS):=0;    DOBBTAL:BEGIN               POST.A(INDEKS):=0; !              POST.A(INDEKS+1):=0!            END;    REEL:POST.AAA(INDEKS):=0.0;-    TEKST:FOR I:=INDEKS TO L[NGDE+INDEKS-1 DO-            POST.AA(I):=' ';    END  ENDEND; !PROCEDURE SKRIVFELT(VAR F:NFELT);!BEGIN# IF USERNIVEAU>=F^.KIKKENIVEAU THEN# BEGIN   GOTOXY(F^.UDPOS.X,F^.UDPOS.Y);   WRITE(F^.LEDETEKST,' ');  MOVETOLINE(F);  WRITELN(LINE); ENDEND; PROCEDURE SKRIVPOST;VAR I:INTEGER;BEGIN  CLEARSCREEN;3  FOR I:=1 TO ANTALFELTER DO SKRIVFELT(PICTURE(I));3END; PROCEDURE PRINTPOST;VAR I:INTEGER;BEGIN  FOR I:=1 TO ANTALFELTER DO  BEGIN*    WRITE(LIST,PICTURE(I)^.LEDETEKST,' ');*    MOVETOLINE(PICTURE(I));    LINES:=LINES+1;    WRITELN(LIST,LINE)  ENDEND;(*$P*)PROCEDURE L[SFELT(VAR F:NFELT);VAR I,TAL,TAL1:INTEGER;    VAL:NFELT;    RESULT:REAL;    BUMMED:BOOLEAN; (*$P*)PROCEDURE L[SLINIE;VAR OK:BOOLEAN;    DECS,I,FORTEGN:INTEGER;    DM:REAL; BEGIN  REPEAT    OK:=FALSE;    RESULT:=0.0;    TAL:=0;    TAL1:=0;    GOTOXY(1,F^.INDPOS.Y);    WRITELN(' ':79);$    GOTOXY(F^.INDPOS.X,F^.INDPOS.Y);$8    WRITELN(F^.LEDETEKST,' ':F^.L[NGDE+2,F^.F\LGETEKST);8;    GOTOXY(F^.INDPOS.X+LENGTH(F^.LEDETEKST)+1,F^.INDPOS.Y);;    IF F^.EDITERING=0 THEN	    BEGIN	      READLN;READ(LINE)    END    ELSE	    BEGIN	      MOVETOLINE(F);      EDIT(LINE:F^.L[NGDE);B      WHILE LINE(LENGTH(LINE))=' ' DO LINE(0):=CHR(ORD(LINE(0))-1)B    END;    CASE F^.FELTTYPE OFTEKST:#    IF LENGTH(LINE)<=F^.L[NGDE THEN#	    BEGIN	      OK:=TRUE;%      WHILE LENGTH(LINE)<F^.L[NGDE DO%        IF F^.FORAN0=0 THEN           LINE:=CONCAT(LINE,' ')         ELSE           LINE:=CONCAT(' ',LINE)     END;HELTAL,DOBBTAL:    IF LENGTH(LINE)>0 THEN	    BEGIN	      I:=0;      FORTEGN:=1;      IF LINE(1)='-' THEN      BEGIN        FORTEGN:=-1;        I:=1
      END;
      WHILE LENGTH(LINE)>I DO      BEGIN        OK:=TRUE;        I:=I+1;-        IF NOT (LINE(I) IN (.'0'..'9'.)) THEN-        BEGIN          OK:=FALSE;          I:=LENGTH(LINE)        END;)        RESULT:=10*RESULT+ORD(LINE(I))-48)
      END;
      RESULT:=RESULT*FORTEGN;      IF OK THEN      CASE F^.FELTTYPE OFJ      HELTAL:IF ABS(RESULT)<=32767 THEN TAL:=TRUNC(RESULT) ELSE OK:=FALSE;J.      DOBBTAL:IF ABS(RESULT)<=327679999.0 THEN.              BEGIN+                TAL:=TRUNC(RESULT/10000.0);+/                TAL1:=TRUNC(RESULT-10000.0*TAL)/              END              ELSE OK:=FALSE	      END	    END ELSE OK:=TRUE;REEL:    IF LENGTH(LINE)>0 THEN	    BEGIN	      I:=0;      FORTEGN:=1;      DECS:=-1;      IF LINE(1)='-' THEN      BEGIN        FORTEGN:=-1;        I:=1
      END;
,      WHILE (LENGTH(LINE)>I) AND (DECS<0) DO,      BEGIN        OK:=TRUE;        I:=I+1;'        IF LINE(I) IN (.'0'..'9'.) THEN'+          RESULT:=10*RESULT+ORD(LINE(I))-48+        ELSE.        IF (LINE(I)='.') OR (LINE(I)=',') THEN.          DECS:=0        ELSE        BEGIN          OK:=FALSE;          I:=LENGTH(LINE)        END
      END;
      DM:=1.0;      WHILE LENGTH(LINE)>I DO      BEGIN        I:=I+1;        DM:=DM/10.0;'        IF LINE(I) IN (.'0'..'9'.) THEN'        BEGIN.          RESULT:=RESULT+DM*(ORD(LINE(I))-48);.          DECS:=DECS+1        END        ELSE        BEGIN          OK:=FALSE;          I:=LENGTH(LINE)        END
      END;
      RESULT:=FORTEGN*RESULT;#      IF DECS>F^.DEC THEN OK:=FALSE#    END    ELSE OK:=TRUE    END
  UNTIL OK
END;(*$P*)PROCEDURE CHECKVAL;#VAR I,DAT0,M]NED,]R,MODULC:INTEGER;#!    CPN:ARRAY (1..10) OF INTEGER;!BEGIN  CASE VAL^.VALIDITETSTYPE OF  HINTERVAL:/    BUMMED:=((TAL<VAL^.MIN) OR (TAL>VAL^.MAX));/  DINTERVAL:>    BUMMED:=((TAL*10000.0+TAL1<VAL^.MIN1*10000.0+VAL^.MIN2) OR>=             (TAL*10000.0+TAL1>VAL^.MAX1*10000.0+VAL^.MAX2));=  RINTERVAL:7    BUMMED:=((RESULT<VAL^.RMIN) OR (RESULT>VAL^.RMAX));7  DATO:    IF LENGTH(LINE)=6 THEN	    BEGIN	/      ]R:=10*(ORD(LINE(1))-48)+ORD(LINE(2))-48;/2      M]NED:=10*(ORD(LINE(3))-48)+ORD(LINE(4))-48;21      DAT0:=10*(ORD(LINE(5))-48)+ORD(LINE(6))-48;1L      IF (DAT0<1) OR (M]NED<1) OR (M]NED>12) OR (DAT0>31) THEN BUMMED:=TRUE;L      IF NOT BUMMED THEN      CASE M]NED OF-      4,6,9,11: IF DAT0>30 THEN BUMMED:=TRUE;-I      2: IF (DAT0>29) OR ((DAT0=29) AND (]R MOD 4 <>0)) THEN BUMMED:=TRUEI	      END	    END    ELSE BUMMED:=TRUE;  CPR:    IF LENGTH(LINE)=10 THEN	    BEGIN	0      FOR I:=1 TO 10 DO CPN(I):=ORD(LINE(I))-48;0      DAT0:=CPN(1)*10+CPN(2);      M]NED:=CPN(3)*10+CPN(4);      ]R:=CPN(5)*10+CPN(6);L      IF (DAT0<1) OR (M]NED<1) OR (M]NED>12) OR (DAT0>31) THEN BUMMED:=TRUE;L      IF NOT BUMMED THEN      CASE M]NED OF-      4,6,9,11: IF DAT0>30 THEN BUMMED:=TRUE;-H      2: IF (DAT0>29) OR ((DAT0=29) AND (]R MOD 4<>0)) THEN BUMMED:=TRUEH
      END;
      IF NOT BUMMED THEN      BEGINM      MODULC:=CPN(1)*4+CPN(2)*3+CPN(3)*2+CPN(4)*7+CPN(5)*6+CPN(6)*5+CPN(7)*4+M(              CPN(8)*3+CPN(9)*2+CPN(10);(-        IF MODULC MOD 11<>0 THEN BUMMED:=TRUE-	      END	    END    ELSE BUMMED:=TRUE;  ENDEND;(*$P*)(*PROCEDURE L[SFELT*)BEGIN# IF USERNIVEAU>=F^.[NDRENIVEAU THEN# BEGIN  REPEAT    L[SLINIE;    VAL:=F^.N[STEVAL;    BUMMED:=FALSE;(    WHILE (VAL<>NIL) AND (NOT BUMMED) DO(	    BEGIN	      CHECKVAL;      VAL:=VAL^.N[STEVAL    END  UNTIL NOT BUMMED;  CASE F^.FELTTYPE OF   HELTAL:POST.A(F^.INDEKS):=TAL;   DOBBTAL:BEGIN#            POST.A(F^.INDEKS):=TAL;#%            POST.A(F^.INDEKS+1):=TAL1%          END;#  REEL:POST.AAA(F^.INDEKS):=RESULT;#   TEKST:FOR I:=1 TO F^.L[NGDE DO +            POST.AA(I+F^.INDEKS-1):=LINE(I)+  END ENDEND;(*$P*)PROCEDURE MAINTAIN;VAR J:INTEGER;    CH:STRING(1);BEGIN      CLEARSCREEN;      IF OPTION<>4 THEN      BEGIN        HUSKNIV:=USERNIVEAU;        USERNIVEAU:=UMULIUS;        NULPOST;        J:=1;        L[SFELT(N\GLER(J));,        WHILE (J<ANTALN\GLER) AND NOT EOF DO,        BEGIN          J:=J+1;          L[SFELT(N\GLER(J))        END;        USERNIVEAU:=HUSKNIV;'        GETREC(ZONE.H,REGISTER,POST.A);'>        IF (IER<>0) AND (IER<>-6) THEN ERROR(ZONE.H.FILENAME);>        IF EOF THEN        BEGIN          IF IER=-6 THEN          BEGIN,            NEXTREC(ZONE.H,REGISTER,POST.A);,9            IF (IER<>-1) AND (IER<>-2) AND (IER<>-9) THEN9$              ERROR(ZONE.H.FILENAME)$          END;          REPEAT            SKRIVPOST;            GOTOXY(1,23);            CH:='F';=            WRITELN('Rigtig post R, Flere poster F, Stop S');=            GOTOXY(39,23);            EDIT(CH);            IF CH='F' THEN            BEGIN.              NEXTREC(ZONE.H,REGISTER,POST.A);.:              IF (IER<>0) AND (IER<>-2) AND (IER<>-9) THEN:&                ERROR(ZONE.H.FILENAME)&            END          UNTIL CH<>'F';'          GOTOXY(1,23);WRITELN(' ':77);'"          IF OPTION=2 THEN CH:='S'"        END        ELSE        BEGIN          IF IER=0 THEN          BEGIN            CH:='R';            SKRIVPOST          END          ELSE          BEGIN            CH:='S';?            GOTOXY(1,23);WRITELN('Posten findes ikke, RETURN');?             GOTOXY(28,23);READLN           END        END
      END;
$      IF (OPTION=4) OR (CH='R') THEN$      CASE OPTION OF        1: BEGIN             REPEAT               REPEAT                 GOTOXY(1,23);                 J:=0;;                 WRITELN('Feltnr, 0 for f{rdig ',J,' ':57);;&                 GOTOXY(22,23);READLN;&;                 IF NOT (EOLN OR (INPUT^=' ')) THEN READ(J);B               UNTIL (IORESULT=0) AND (J>=0) AND (J<=ANTALFELTER);B                IF J>0 THEN BEGIN F                             L[SFELT(PICTURE(J));SKRIVFELT(PICTURE(J))F                           END             UNTIL J=0;,             PUTREC(ZONE.H,REGISTER,POST.A);,2             IF IER<>0 THEN ERROR(ZONE.H.FILENAME)2           END;3        2: BEGIN WRITELN('Tryk RETURN');READLN END;3        3: BEGIN             REPEAT               GOTOXY(1,23);5               WRITELN('Antal poster, 0 for resten');5               GOTOXY(28,23);               READLN;READ(J)D             UNTIL (IORESULT=0) AND (J>=0) AND (J<=ZONE.H.RECINUSE);D             REPEAT0               IF (LINES+2+ANTALFELTER)>=72 THEN0               BEGIN/                 IF LINES<>100 THEN PAGE(LIST);/3                 WRITELN(LIST,REGNAVN,' UDSKRIFT');3                 WRITELN(LIST);                 LINES:=2               END;               PRINTPOST;               J:=J-1;:               WRITELN(LIST);WRITELN(LIST);LINES:=LINES+2;:/               NEXTREC(ZONE.H,REGISTER,POST.A);/0               IF (IER=-2) AND (J>0) THEN IER:=00%             UNTIL (J=0) OR (IER<>0);%9             IF (IER<>0) AND (IER<>-2) AND (IER<>-9) THEN92                ERROR(ZONE.H.FILENAME) ELSE IER:=02           END;        4: BEGIN             NULPOST;             SKRIVPOST;!             HUSKNIV:=USERNIVEAU;!!             USERNIVEAU:=UMULIUS;!'             FOR J:=1 TO ANTALFELTER DO'             BEGIN#               L[SFELT(PICTURE(J));#$               SKRIVFELT(PICTURE(J))$             END;!             USERNIVEAU:=HUSKNIV;!B             IF (NOT ZONE.H.FILEINIT) AND (ZONE.H.RECINUSE=0) THENB             BEGIN               GOTOXY(1,23);6               WRITELN('ANTAL INITIALISERINGSPOSTER');6               GOTOXY(30,23);               READLN;READ(J);+               INITIATE(ZONE.H,REGISTER,J);+4               IF IER<>0 THEN ERROR(ZONE.H.FILENAME)4             END;,             INSERT(ZONE.H,REGISTER,POST.A);,             IF IER<>0 THEN             IF IER=-7 THEN             BEGIN6               WRITELN('Posten findes, RETURN');READLN6             END(             ELSE ERROR(ZONE.H.FILENAME)(           END;        5: BEGIN             GOTOXY(1,20);             CH:='J';-             WRITELN('Sletning korrekt J/N');-$             GOTOXY(22,20);EDIT(CH);$             IF CH='J' THEN             BEGIN.               DELETE(ZONE.H,REGISTER,POST.A);.               IF IER=-9 THEN               BEGINB                 WRITELN('Eneste post, kan ikke slettes, RETURN');B                 READLN;                 IER:=0               END;4               IF IER<>0 THEN ERROR(ZONE.H.FILENAME)4             END           END	      END	END;(*$P*)BEGIN  CLEARSCREEN;  LINES:=100;  ZONE.H.FILENAME:='        ';?  FOR I:=1 TO POS(':',FNAVN)-1 DO ZONE.H.FILENAME(I):=FNAVN(I);?  REWRITE(REGISTER,FNAVN);E  IOPEN(ZONE.H,REGISTER,SKRIV);IF IER<>0 THEN OFEJL(ZONE.H.FILENAME);E.(*$XT*) WRITELN('MEMAVAIL ',MEMAVAIL); (*$X-*).
  L[SDESC;
5(*$XT*) WRITELN('MEMAVAIL ',MEMAVAIL);READLN; (*$X-*)5  REPEAT    CLEARSCREEN;    GOTOXY(10,10);H    WRITELN(REGNAVN,' R E G I S T E R - V E D L I G E H O L D E L S E');H    GOTOXY(10,12);    WRITELN('0 F{rdig');    WRITELN(' ':9,'1 [ndring');)    WRITELN(' ':9,'2 Udskrift p} sk{rm');)+    WRITELN(' ':9,'3 Udskrift p} printer');+"    WRITELN(' ':9,'4 Oprettelse');"     WRITELN(' ':9,'5 Sletning'); 
    REPEAT
      GOTOXY(10,19);      WRITELN('V{lg 0-5');      GOTOXY(21,19);UR;      OPTION:=SV&    UNTIL (OPTION>=0) AND (OPTION<=6);&    IF OPTION>0 THEN	    BEGIN	.      IF (OPTION=6) AND (USERNIVEAU>=HSM) THEN.      BEGIN/        WRITELN('REPORT, SBUC');READLN;READ(I);/-        IF I>0 THEN REPORT(ZONE.H,REGISTER,I)-	      END	
      ELSE
!        IF OPTION<6 THEN MAINTAIN!    END  UNTIL OPTION=0;   IF LINES<>100 THEN PAGE(LIST);   ICLOSE(ZONE.H,REGISTER);  CLEARSCREEN;  WRITELN('ICLOSE ',IER)END;(*$P*)PROCEDURE UR;BEGIN  SETUP(DBUF,LNGTH);	  C:=' ';	  IF T[NDT THEN  BEGIN  GOTOXY(62,1);WRITE('Alarm');8  IF ALARM THEN BEGIN GOTOXY(72,1);WRITE(ALARMTIME) END;8  GOTOXY(62,2);WRITE('Time');  END;	  SV:=-1;	  REPEAT  IF C<>CLOCK^.TIME(8) THEN  BEGIN   IF T[NDT THEN   BEGIN    GOTOXY(67,2);    WRITE(CLOCK^.TIME);   END;    C:=CLOCK^.TIME(8);    OFFSET:=TIME;%    IF STIMER>0 THEN STIMER:=STIMER-1%  END;  IF T[NDT THEN  BEGIN  GOTOXY(76,2);!  WRITE((TIME-OFFSET) MOD 100:4);!  END;  IF STOPWATCH THEN  BEGIN    IF (TIME<0) AND (TT>0) THEN.      SEC100:=SEC100+(32767-TT)+(32767+TIME+2).    ELSE      SEC100:=SEC100+TIME-TT;    TT:=TIME;3    SEC:=SEC+SEC100 DIV 100;SEC100:=SEC100 MOD 100;3,    MIN:=MIN+SEC DIV 60;    SEC:=SEC MOD 60;,    IF T[NDT THEN	    BEGIN	    GOTOXY(60,3);     WRITE(MIN:4,SEC:3,SEC100:3);     END;  END;:  IF ALARM THEN IF ALARMTIME<=CLOCK^.TIME THEN HOWL:=TRUE;:  IF T[NDT THEN  IF HOWL THEN WRITE(CHR(7));  IF AVAIL THEN  BEGIN    CH:=NEXT;5    IF T[NDT OR (CH='T') OR (CH IN (.'0'..'9'.)) THEN5    CASE CH OF    'S':BEGIN$          STOPWATCH:=NOT(STOPWATCH);$G          IF STOPWATCH THEN BEGIN MIN:=0;SEC:=0;SEC100:=0;TT:=TIME END;G        END;E    'U':BEGIN GOTOXY(67,2);FOR I:=1 TO 8 DO CLOCK^.TIME(I):=NEXT END;E+    'C':BEGIN STOPWATCH:=TRUE;TT:=TIME END;+    'T':T[NDT:=NOT T[NDT;='0','1','2','3','4','5','6','7','8','9':BEGIN SV:=ORD(CH)-48;=;                                              IF AVAIL THEN;G                                                SV:=10*SV+ORD(NEXT)-48;G4                                              FINIS;48                                        WRITELN(SV) END;8    'M':BEGIN          GOTOXY(70,3);          IF STOPWATCH THEN)             WRITE(MIN:4,SEC:3,SEC100:3);)        END;    'A':BEGIN          HOWL:=FALSE;          ALARM:=NOT(ALARM);          CLOCK^.DATE(9):='0';          IF ALARM THEN          BEGIN             CLOCK^.DATE(9):='1';             GOTOXY(72,1);8            FOR I:=1 TO 8 DO BEGIN CLOCK^.DATE(I):=NEXT;8?                                   ALARMTIME(I):=CLOCK^.DATE(I)?!                             END;!)            GOTOXY(72,1);WRITE(ALARMTIME))          END;        END;    END;  END;  UNTIL SV>-1END;(*$P*)PROCEDURE DOIT;TYPEFILDESC=RECORD/  FILNAVN,DESCNAVN,POSTNAVN,REGNAVN:STRING(18);/  VEDLNIVEAU:NIVEAUEND;FILEDESC=FILE OF FILDESC;PROGDESC=RECORD  PROGFIL,PROGNAVN:STRING(18);  PROGNIVEAU:NIVEAUEND;PROGFILE=FILE OF PROGDESC;VAR ISFFILES:FILEDESC;    PROGS:PROGFILE;    ISFFNAVN:STRING(18);    SCH:STRING(1);    J,FILNR,AKNR:INTEGER;PROCEDURE IOC;VAR CH:STRING(1);    IOR:INTEGER;BEGIN  IOR:=IORESULT;  IF IOR<>0 THEN  BEGIN    CLEARSCREEN;    GOTOXY(1,10);*    WRITELN('Pladefejl ',IOR:5,' RETURN');*    CH:=' ';    EDIT(CH);    IF CH<>'R' THEN EXIT(DOIT)  ENDEND;BEGIN#    ISFFNAVN:='PROGFILE:P2:0000:S';#     REWRITE(PROGS,ISFFNAVN);IOC; 
    REPEAT
      SEEK(PROGS,1);IOC;      GET(PROGS);      CLEARSCREEN;      FILNR:=1;!      WRITELN(' ':20,'  0 Stop');!      WRITELN;5      WRITELN(' ':20,'  1 Kartoteksvedligeholdelse');5&      WHILE PROGS^.PROGNAVN(1)<>'@' DO&      BEGIN        FILNR:=FILNR+1;-        IF PROGS^.PROGNIVEAU<=USERNIVEAU THEN-2          WRITELN(' ':20,FILNR:3,PROGS^.PROGNAVN);2        GET(PROGS);IOC
      END;
:      WRITELN(' ':20,FILNR+1:3,' Indtast ny adgangskode');:!      IF USERNIVEAU>=GENERAL THEN!      BEGIN        WRITELN;=        WRITELN(' ':20,FILNR+2:3,' Privilegerede funktioner')=
      END;
,      GOTOXY(1,22);WRITELN('V{lg funktion');,      GOTOXY(15,22);      STIMER:=TIMER;	      UR;	A      IF STIMER=0 THEN BEGIN USERNIVEAU:=MENIG;PARM^(1):='0' END;A      I:=SV;"      IF (I>1) AND (I<=FILNR) THEN"      BEGIN        SEEK(PROGS,I-1);IOC;        GET(PROGS);IOC;-        IF PROGS^.PROGNIVEAU<=USERNIVEAU THEN-        BEGIN          F:='';          SCH:=' ';          J:=0;          WHILE J<18 DO          BEGIN            J:=J+1;*            IF PROGS^.PROGFIL(J)<>' ' THEN*            BEGIN(              SCH(1):=PROGS^.PROGFIL(J);(              F:=CONCAT(F,SCH)            END            ELSE J:=18          END        END
      END;
6    UNTIL (I=0) OR (I=1) OR (I=FILNR+1) OR (F<>' ') OR62          ((I=FILNR+2) AND (USERNIVEAU>=GENERAL));2    IF I=FILNR+2 THEN       BEGIN         CLEARSCREEN;          IF USERNIVEAU>=HSM THEN          BEGIN2         WRITELN(' ':20,'1 Sk{rmbilledopbygning');2,         WRITELN(' ':20,'2 Listedefinition'),         END;5         WRITELN(' ':20,'3 [ndring af adgangskoder');5         GOTOXY(1,20);"         WRITELN('V{lg funktion');"         REPEAT         GOTOXY(15,20);         READLN;READ(I)0         UNTIL (IORESULT=0) AND (I>0) AND (I<4);0         CASE I OF5         1: IF USERNIVEAU>=HSM THEN F:='SK[RMBIL:P2';55         2: IF USERNIVEAU>=HSM THEN F:='LISTEGEN:P2';5         3: KODEVEDL;         END
       END
       ELSE       IF I=FILNR+1 THEN       BEGIN         PARM^(1):='0';         KODEVEDL;         I:=ORD(PARM^(1))-48;         USERNIVEAU:=MENIG;         WHILE I>0 DO         BEGIN(           USERNIVEAU:=SUCC(USERNIVEAU);(           I:=I-1         END
       END
       ELSE IF I=1 THEN       BEGIN(         ISFFNAVN:='ISFFILES:P2:0000:S';((         REWRITE(ISFFILES,ISFFNAVN);IOC;(         REPEAT           CLEARSCREEN;            SEEK(ISFFILES,1);IOC;            GET(ISFFILES);IOC;           FILNR:=0;-           WHILE ISFFILES^.FILNAVN(1)<>'@' DO-           BEGIN             FILNR:=FILNR+1;5             IF ISFFILES^.VEDLNIVEAU<=USERNIVEAU THEN5B               WRITELN(FILNR:4,' ',ISFFILES^.REGNAVN,'-register');B             GET(ISFFILES);IOC           END;1           GOTOXY(1,23);WRITELN('V{lg register');1           REPEAT,             GOTOXY(15,23);READLN;READ(AKNR),>           UNTIL (IORESULT=0) AND (AKNR>=0) AND (AKNR<=FILNR);>           IF AKNR>0 THEN           BEGIN%             SEEK(ISFFILES,AKNR);IOC;%             GET(ISFFILES);IOC           END>         UNTIL (AKNR=0) OR (ISFFILES^.VEDLNIVEAU<=USERNIVEAU);>         IF AKNR>0 THEN         BEGIN$           FNAVN:=ISFFILES^.FILNAVN;$(           DESCNAVN:=ISFFILES^.DESCNAVN;(&           REGNAVN:=ISFFILES^.REGNAVN;&           CLOSE(ISFFILES);IOC;           MARK(QUQ);           REGVEDL;           RELEASE(QUQ)         END
       END
       ELSE IF I=0 THEN         F:='STOP';END;(*$P*)BEGIN  ALARM:=CLOCK^.DATE(9)='1';>  IF ALARM THEN FOR I:=1 TO 8 DO ALARMTIME(I):=CLOCK^.DATE(I);>,  HOWL:=FALSE;STOPWATCH:=FALSE;T[NDT:=FALSE;,  I:=ORD(PARM^(1))-48;  USERNIVEAU:=MENIG;  WHILE I>0 DO  BEGIN!    USERNIVEAU:=SUCC(USERNIVEAU);!
    I:=I-1
  END;  REPEAT    F:=' ';    CLEARSCREEN;	    DOIT;	  UNTIL F<>' ';  IF F<>'STOP' THEN  BEGIN    FNAVN:=' ';    FNAVN(1):=PARM^(1);9    CHAIN('L       *1',CONCAT('INTRE,',F,',',FNAVN),QUQ);95    IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)5  ENDEND.  HEN WRITELN('IORESULT ',IORESULT)5  ENDEND.  ;	    DOIT;	  UNTIL F<>' ';  IF F<>'STOP' THEN  BEGIN    FNAVN:=' ';    FNAVN(1):=PARM^(1);9    CHAIN('L       *1',CONCAT('INTRE,',F,',',FNAVN),QUQ);95    IF IORESULT<>0 THEN WRITELN('IORESULT ',IORESULT)5  ENDEND.  T)5  ENDEND.  ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 