$CONTROL MAP,CODE,USLINIT                                               00010000
<<MEMTIMER>>                                                            00015000
<< HP32002C MPE SOURCE C.00.00 >>                                       00020000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00025000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00030000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00035000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00040000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00045000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00050000
$CONTROL MAIN=MEMTIMER,SEGMENT=MEMTIMER                                 00055000
$CONTROL PRIVILEGED                                                     00060000
$CONTROL UNCALLABLE                                                     00065000
$TITLE "- ERROR CORRECTING MEMORY LOGGING INTERVAL UTILITY"             00070000
$THIRTY                                                                 00075000
BEGIN                                                                   00080000
                                                                        00085000
<<------------------------------------------------------------          00090000
*                                                            *          00095000
*     ERROR CORRECTING MEMORY LOGGING INTERVAL UTILITY       *          00100000
*                                                            *          00105000
------------------------------------------------------------>>          00110000
                                                                        00115000
DEFINE                                                         <<01.01>>00120000
PTITLE=(" MEMTIMER C.00.00 (C) HEWLETT-PACKARD CO., 1976")#;   <<04931>>00125000
                                                               <<01.01>>00130000
$INCLUDE INCLVUF                                               <<04931>>00135000
$INCLUDE INCLTRL                                               <<07433>>00140000
                                                                        00145000
INTEGER PARM = Q-4;                                                     00150000
                                                                        00155000
INTEGER I,DST,PCBX;                                                     00160000
                                                               <<01168>>00165000
DOUBLE CAPD;      << CAPABILITIES FROM WHO INTRINSIC >>        <<01168>>00170000
LOGICAL CAP=CAPD;                                              <<01168>>00175000
DEFINE SYSMGR = CAP.(0:1)#;                                    <<01168>>00180000
DEFINE                                                         <<01168>>00185000
SYSMGR'MSG = (" ** PROGRAM REQUIRES SYS. MGR. CAPABILITY **")#;<<01168>>00190000
                                                                        00195000
LOGICAL FOUND:=FALSE,                                          <<07433>>00200000
        MPEV := FALSE,                                         <<07433>>00205000
        MOURNWAIT ;                                            <<07433>>00210000
                                                                        00215000
<<INTEGER POINTER TRL = 10;>>  <<TIMER REQUEST LIST>>          <<07433>>00220000
LOGICAL POINTER PCBPTR = 3;  << PCB TABLE        >>            <<07433>>00225000
                                                                        00230000
INTEGER ARRAY DBARRAY(*) = DB+0;                                        00235000
                                                                        00240000
ARRAY MSG(0:36);                                               <<01.01>>00245000
BYTE ARRAY BMSG(*)=MSG;  << NEEDED FOR VUF >>                  <<04931>>00250000
                                                                        00255000
EQUATE                                                                  00260000
     SYSDB      = 512,                                                  00265000
     MEMLOGPINX = SYSDB+%154;  <<MEMLOGP PCB INDEX>>                    00270000
                                                                        00275000
DEFINE                                                         <<00.01>>00280000
      PENABLE = ASSEMBLE(PSEB)#,                               <<00.01>>00285000
      PDISABLE= ASSEMBLE(PSDB)#;                               <<00.01>>00290000
                                                               <<00.01>>00295000
PROCEDURE  UNIMPEDE(PCBPT);                                    <<00.01>>00300000
VALUE  PCBPT;                                                  <<00.01>>00305000
INTEGER  PCBPT;                                                <<00.01>>00310000
OPTION EXTERNAL;                                               <<00.01>>00315000
                                                               <<00.01>>00320000
INTEGER PROCEDURE EXCHANGEDB(DST);                                      00325000
VALUE DST; INTEGER DST;                                                 00330000
OPTION EXTERNAL;                                                        00335000
                                                                        00340000
INTRINSIC PRINT,TERMINATE,WHO;                                 <<01168>>00345000
                                                                        00350000
SUBROUTINE SETDELAY;                                                    00355000
BEGIN                                                                   00360000
     IF PARM <= 0 THEN                                                  00365000
     BEGIN                                                              00370000
          MOVE MSG:="** INVALID PARM (DELAY) VALUE **";                 00375000
          PRINT(MSG,-32,0);                                             00380000
          TERMINATE;                                                    00385000
     END;                                                               00390000
     PCBX:=ABSOLUTE(MEMLOGPINX);                               <<00.01>>00395000
     IF MPEV THEN                                              <<07433>>00400000
        MOURNWAIT := PCBPTR(PCBX+4).(0:1)  <<MOURNING>>        <<07433>>00405000
     ELSE MOURNWAIT := ABSOLUTE(PCBX+ABSOLUTE(3)+4).(0:1);     <<07433>>00410000
     IF MOURNWAIT THEN                                         <<07433>>00415000
     BEGIN                                                              00420000
          MOVE MSG:="** MEMORY LOGGING PROCESS NOT ACTIVE **";          00425000
          PRINT(MSG,-39,0);                                             00430000
          TERMINATE;                                                    00435000
     END;                                                               00440000
     IF MPEV THEN DST:=PCBPTR(PCBX+3).(2:14)                   <<07433>>00445000
     ELSE DST := ABSOLUTE(PCBX+ABSOLUTE(3)+3).(1:10);          <<07433>>00450000
     EXCHANGEDB(DST);                                                   00455000
     DBARRAY(DBARRAY):=PARM;  <<SET DELAY AT STACK DB+0>>               00460000
     EXCHANGEDB(0);                                                     00465000
END  <<SETDELAY>>;                                                      00470000
                                                                        00475000
SUBROUTINE FIXTIMEREQUEST;                                              00480000
BEGIN                                                                   00485000
     PDISABLE;  <<PSEUDO-DISABLE>>                             <<00.01>>00490000
     IF MPEV THEN                                              <<07433>>00495000
     BEGIN                                                     <<07433>>00500000
       FOR I:=%14 STEP TRLENTRYSIZE UNTIL                      <<07433>>00505000
           TRLNUMENTRIES * TRLENTRYSIZE DO                     <<07433>>00510000
       IF LOGICAL(TRL(I).(0:1)) THEN <<ACTIVE>>                <<07433>>00515000
       IF TRL(I+1) = PCBX THEN  <<MEMLOGP DELAY ENTRY>>        <<07433>>00520000
       BEGIN                                                   <<07433>>00525000
            FOUND:=TRUE;                                       <<07433>>00530000
            UNIMPEDE(PCBX);                                    <<07433>>00535000
            I:=TRLNUMENTRIES * TRLENTRYSIZE;  <<STOP LOOP>>    <<07433>>00540000
       END;                                                    <<07433>>00545000
     END                                                       <<07433>>00550000
     ELSE                                                      <<07433>>00555000
     BEGIN                                                     <<07433>>00560000
       FOR I:=%14 STEP 4 UNTIL (TRL(1) & LSR(6)) DO            <<07433>>00565000
<< MPE IV OPERATING SYSTEM >>                                  <<07433>>00570000
     IF LOGICAL(TRL(I).(0:1)) THEN <<ACTIVE>>                           00575000
     IF TRL(I+1) = PCBX THEN  <<MEMLOGP DELAY ENTRY>>                   00580000
     BEGIN                                                              00585000
          FOUND:=TRUE;                                                  00590000
          UNIMPEDE(PCBX);                                      <<00.01>>00595000
            I:=(TRL(1) & LSR(6));  <<STOP LOOP>>               <<07433>>00600000
       END;                                                    <<07433>>00605000
     END;                                                      <<07433>>00610000
     PENABLE;   <<PSEUDO-ENABLE >>                             <<00.01>>00615000
     IF NOT FOUND THEN                                                  00620000
     BEGIN                                                              00625000
          MOVE MSG:="** MEMLOGP TIMER ENTRY NOT FOUND **";              00630000
          PRINT(MSG,-35,0);                                             00635000
     END;                                                               00640000
END <<FIXTIMEREQUEST>>;                                                 00645000
                                                                        00650000
<<                 O-U-T-E-R   B-L-O-C-K                  >>            00655000
                                                                        00660000
   IF PCBPTR(1) > 16 THEN MPEV := TRUE;                        <<07433>>00665000
   MOVE MSG := PTITLE,2;                                       <<01.01>>00670000
   I := TOS-@MSG;                                              <<01.01>>00675000
   MOVE BMSG(10) := OFFICIAL'VUUFF;                            <<04931>>00680000
   PRINT(MSG,I,0);                                             <<01.01>>00685000
                                                               <<01168>>00690000
   WHO(,CAPD);                                                 <<01168>>00695000
   IF NOT SYSMGR THEN                                          <<01168>>00700000
     BEGIN                                                     <<01168>>00705000
     MOVE MSG := SYSMGR'MSG,2;                                 <<01168>>00710000
     I := TOS - @MSG;                                          <<01168>>00715000
     PRINT(MSG,I,0);                                           <<01168>>00720000
     TERMINATE;                                                <<01168>>00725000
     END;                                                      <<01168>>00730000
                          SETDELAY;                                     00735000
                       FIXTIMEREQUEST;                                  00740000
                            END.                                        00745000
