*COMDECK PBTIMAL
_$J+  PAGE EJECT? 
_$R-,G-,I-? 
_***************************************
*                                      *
*               PBTIMAL                *
*                                      *
****************************************
* 
** OVERVIEW -  PBTIMAL CONTROLS ALL OPS LEVEL TIME-DEPENDENT PROGRAMS. *
*              TIME OF DAY AND DATE ARE MAINTAINED.  TIMING SERVICE    *
*              FOR TERMINAL INTERFACE PACKAGES IS PROVIDED BY PBTIMAL  *
*                                                                      *
** INPUT -     ARRAY OF TIME TABLE PROGRAMS (CBTIMTBL).                *
*                                                                      *
** OUTPUT -    CALLS TO PROGRAMS AS SPECIFIED BY THEIR TIME INTERVAL   *
*                                                                      *
** EXTERNAL SUBROUTINES USED -                                         *
*                 PBDF     - DUMP FILE 1 REGISTER                     * 
*              PBPSWITCH - CHANGE PROGRAM PAGE ADDRESS                 *
*              PBCALL    - CALL PROGRAM                                *
*                                                                      *
************************************************************************
* 
* 
? 
PROCEDURE PBTIMAL;
VAR 
   CBINDEX : C0TDPGM;                       _ INDEX FOR PROGRAM        ?
   NUMBFRS : INTEGER;                       _AVAILABLE DATA BUFFERS    ?
BEGIN 
    INST($E400,                             _LOAD Q REGISTER           ?
         B1DMTA,                            _  WITH ADDRESS OF DEADMAN ?
                                            _   TIMER RESET CODE       ?
         $0BA2);                            _ AND EXECUTE THAT         ?
                                            _  MICROSEQUENCE           ?
  PBDF ($010C, NUMBFRS);                    _GET AVAILABLE DATA BUFFERS?
  PFABFRS := PFABFRS + NUMBFRS;             _ACCUMULATE FOR STATISTICS ?
  FOR CBINDEX := C0LCBTMSCN TO C0SPARE-1 DO _SCAN ALL TIMER ENTRIES    ?
  WITH CBTIMTBL[CBINDEX] DO 
    IF CBTIMER " 0                          _ CK FOR ACTIVE ENTRY      ?
    THEN                                    _ ACTIVE                   ?
      IF CBTIMER = 1                        _ HAS TIME EXPIRED         ?
      THEN                                  _ YES - CALL PROGRAM       ?
      BEGIN 
        CBTIMER   := CBINTVAL;              _ RESTART TIMER            ?
        PBPSWITCH (CBPADDR);                _ CHANGE PAGE ADDRESS      ?
        PBCALL    (CBADDR);                 _ CALL PROGRAM             ?
      END 
      ELSE CBTIMER := CBTIMER - 1;          _ DECREMENT TIME COUNTER   ?
  
END;  _ PBTIMAL ? 
