$CONTROL MAP,CODE,USLINIT                                               00010000
<<MEMTIMER>>                                                            00012000
<< HP32002C MPE SOURCE C.00.00 >>                                       00014000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00016000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00018000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00020000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00022000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00024000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00026000
$CONTROL MAIN=MEMTIMER,SEGMENT=MEMTIMER                                 00028000
$CONTROL PRIVILEGED                                                     00030000
$CONTROL UNCALLABLE                                                     00032000
$TITLE "- ERROR CORRECTING MEMORY LOGGING INTERVAL UTILITY"             00034000
$THIRTY                                                                 00036000
BEGIN                                                                   00038000
                                                                        00040000
<<------------------------------------------------------------          00042000
*                                                            *          00044000
*     ERROR CORRECTING MEMORY LOGGING INTERVAL UTILITY       *          00046000
*                                                            *          00048000
------------------------------------------------------------>>          00050000
                                                                        00052000
DEFINE                                                         <<01.01>>00054000
PTITLE=("MEMTIMER C00.00 (C) HEWLETT-PACKARD CO., 1976")#;     <<01979>>00056000
                                                               <<01.01>>00058000
                                                                        00060000
INTEGER PARM = Q-4;                                                     00062000
                                                                        00064000
INTEGER I,DST,PCBX;                                                     00066000
                                                               <<01168>>00068000
DOUBLE CAPD;      << CAPABILITIES FROM WHO INTRINSIC >>        <<01168>>00070000
LOGICAL CAP=CAPD;                                              <<01168>>00072000
DEFINE SYSMGR = CAP.(0:1)#;                                    <<01168>>00074000
DEFINE                                                         <<01168>>00076000
SYSMGR'MSG = (" ** PROGRAM REQUIRES SYS. MGR. CAPABILITY **")#;<<01168>>00078000
                                                                        00080000
LOGICAL FOUND:=FALSE;                                                   00082000
                                                                        00084000
INTEGER POINTER TRL = 10;  <<TIMER REQUEST LIST>>                       00086000
                                                                        00088000
INTEGER ARRAY DBARRAY(*) = DB+0;                                        00090000
                                                                        00092000
ARRAY MSG(0:36);                                               <<01.01>>00094000
                                                                        00096000
EQUATE                                                                  00098000
     SYSDB      = 512,                                                  00100000
     MEMLOGPINX = SYSDB+%154;  <<MEMLOGP PCB INDEX>>                    00102000
                                                                        00104000
DEFINE                                                         <<00.01>>00106000
      PENABLE = ASSEMBLE(PSEB)#,                               <<00.01>>00108000
      PDISABLE= ASSEMBLE(PSDB)#;                               <<00.01>>00110000
                                                               <<00.01>>00112000
PROCEDURE  UNIMPEDE(PCBPT);                                    <<00.01>>00114000
VALUE  PCBPT;                                                  <<00.01>>00116000
INTEGER  PCBPT;                                                <<00.01>>00118000
OPTION EXTERNAL;                                               <<00.01>>00120000
                                                               <<00.01>>00122000
INTEGER PROCEDURE EXCHANGEDB(DST);                                      00124000
VALUE DST; INTEGER DST;                                                 00126000
OPTION EXTERNAL;                                                        00128000
                                                                        00130000
INTRINSIC PRINT,TERMINATE,WHO;                                 <<01168>>00132000
                                                                        00134000
SUBROUTINE SETDELAY;                                                    00136000
BEGIN                                                                   00138000
     IF PARM <= 0 THEN                                                  00140000
     BEGIN                                                              00142000
          MOVE MSG:="** INVALID PARM (DELAY) VALUE **";                 00144000
          PRINT(MSG,-32,0);                                             00146000
          TERMINATE;                                                    00148000
     END;                                                               00150000
     PCBX:=ABSOLUTE(MEMLOGPINX);                               <<00.01>>00152000
     IF ABSOLUTE(PCBX+ABSOLUTE(3)+4).(0:1) THEN  <<MOURNING>>  <<00.01>>00154000
     BEGIN                                                              00156000
          MOVE MSG:="** MEMORY LOGGING PROCESS NOT ACTIVE **";          00158000
          PRINT(MSG,-39,0);                                             00160000
          TERMINATE;                                                    00162000
     END;                                                               00164000
     DST:=ABSOLUTE(PCBX+ABSOLUTE(3)+3).(1:10);                          00166000
     EXCHANGEDB(DST);                                                   00168000
     DBARRAY(DBARRAY):=PARM;  <<SET DELAY AT STACK DB+0>>               00170000
     EXCHANGEDB(0);                                                     00172000
END  <<SETDELAY>>;                                                      00174000
                                                                        00176000
SUBROUTINE FIXTIMEREQUEST;                                              00178000
BEGIN                                                                   00180000
     PDISABLE;  <<PSEUDO-DISABLE>>                             <<00.01>>00182000
     FOR I:=%14 STEP 4 UNTIL (TRL(1) & LSR(6)) DO              <<00.01>>00184000
     IF LOGICAL(TRL(I).(0:1)) THEN <<ACTIVE>>                           00186000
     IF TRL(I+1) = PCBX THEN  <<MEMLOGP DELAY ENTRY>>                   00188000
     BEGIN                                                              00190000
          FOUND:=TRUE;                                                  00192000
          UNIMPEDE(PCBX);                                      <<00.01>>00194000
          I:=(TRL(1) & LSR(6));  <<STOP LOOP>>                 <<00.01>>00196000
     END;                                                               00198000
     PENABLE;   <<PSEUDO-ENABLE >>                             <<00.01>>00200000
     IF NOT FOUND THEN                                                  00202000
     BEGIN                                                              00204000
          MOVE MSG:="** MEMLOGP TIMER ENTRY NOT FOUND **";              00206000
          PRINT(MSG,-35,0);                                             00208000
     END;                                                               00210000
END <<FIXTIMEREQUEST>>;                                                 00212000
                                                                        00214000
<<                 O-U-T-E-R   B-L-O-C-K                  >>            00216000
                                                                        00218000
   MOVE MSG := PTITLE,2;                                       <<01.01>>00220000
   I := TOS-@MSG;                                              <<01.01>>00222000
   PRINT(MSG,I,0);                                             <<01.01>>00224000
                                                               <<01168>>00226000
   WHO(,CAPD);                                                 <<01168>>00228000
   IF NOT SYSMGR THEN                                          <<01168>>00230000
     BEGIN                                                     <<01168>>00232000
     MOVE MSG := SYSMGR'MSG,2;                                 <<01168>>00234000
     I := TOS - @MSG;                                          <<01168>>00236000
     PRINT(MSG,I,0);                                           <<01168>>00238000
     TERMINATE;                                                <<01168>>00240000
     END;                                                      <<01168>>00242000
                          SETDELAY;                                     00244000
                       FIXTIMEREQUEST;                                  00246000
                            END.                                        00248000
