*COMDECK COMTIM 
TIM       TITLE  TIM - INTERVAL TIMER.
**        TIM - INTERVAL TIMER. 
* 
*         THIS SUBROUTINE ENDS THE TIME INTERVAL STARTED BY 
*         SUBROUTINE STR.  IT DETERMINES THE LENGTH OF INTERVAL 
*         AND COMPUTES: 
* 
*           WEIGHTED AVERAGE = (WEIGHTED AVERAGE + INTERVAL)/2
* 
*           WEIGHTED DIFFERENCE = (!WEIGHTED AVERAGE - INTERVAL!
*                                 + WEIGHTED DIFFERENCE)/2
* 
*           LARGEST INTERVAL = 0 TO 7777 SECONDS*4096 
* 
*           SMALLEST INTERVAL = 0 TO 7777 SECONDS*4096
*                               (MUST SUBTRACT ONE) 
* 
*         ENTRY  (A) = 0, 1, OR 2 (TIMER NUMBER). 
* 
*         EXIT   NONE.
* 
*         USES   D.Z0 
* 
*         CALLS  NONE.
* 
*         NOTES  MODIFY SYMBOL MAXEVNTS TO EQUAL 1. 
*                INSERT THE INSTRUCTIONS: 
*                  LDD    COMMADR 
*                  ADDRA  ER=0
*                  ADN    5 
*                  CRM    TIMA,TWO
*                  CRM    TIMA+10,ONE 
*                  LDN    0 
*                INTO NDR BEFORE XEC CALL.
*                INSERT THE INSTRUCTIONS: 
*                  STD    D.T0
*                  LDD    COMMADR 
*                  ADDRA  ER=0
*                  ADN    5 
*                  CWM    TIMA,TWO
*                  CWM    TIMA+10,ONE 
*                  LDD    D.T0
*                INTO NDR AFTER XEC CALL. 
  
  
          LIST   F
 DEBUG    IFNE   0,0
 TIM      ENM    X                 ENTRY/EXIT 
          STD    D.Z0              SAVE TIMER NUMBER
          SBN    3
          PJN    TIMX              IF BAD TIMER NUMBER
          LDD    D.PPMES1 
          CWD    D.T0              WRITE D.T0 - D.T4 TO MSG1
          LDN    T.MSC
          CRD    D.T0              READ MILLISECOND CLOCK INTO D.T4 
          LDD    D.Z0 
          SHN    2
          ADD    D.Z0              5*TIMER NUMBER 
          STD    D.T0 
          LDD    D.T4              COMPUTE INTERVAL 
          SBM    TIME,D.T0
          PJN    TIM1              IF POSITIVE INTERVAL 
          ADC    10000B            FIX WRAP AROUND
 TIM1     STD    D.T1              SAVE INTERVAL
          SOM    TIMD,D.T0         MAKE INITIAL ZERO LARGE
          SBD    D.T1 
          MJN    TIM2              IF NOT SMALLEST INTERVAL 
          LDD    D.T1 
          STM    TIMD,D.T0         NEW SMALLEST INTERVAL
 TIM2     AOM    TIMD,D.T0
          LDD    D.T1 
          SBM    TIMC,D.T0
          MJN    TIM3              IF NOT LARGEST INTERVAL
          LDD    D.T1 
          STM    TIMC,D.T0         NEW LARGEST INTERVAL 
 TIM3     LDM    TIMA,D.T0
          SBD    D.T1 
          PJN    TIM4              COMPUTE WEIGHTED DIFFERENCE
          LMK    777777B
 TIM4     ADM    TIMB,D.T0
          SHN    -1 
          STM    TIMB,D.T0
          LDM    TIMA,D.T0
          ADD    D.T1              COMPUTE WEIGHTED AVERAGE 
          SHN    -1 
          STM    TIMA,D.T0
          LDD    D.PPMES1 
          CRD    D.T0              READ MSG1 TO D.T0 - D.T4 
          LJM    TIMX 
  
 TIMA     BSSZ   1                 WEIGHTED AVERAGE 
 TIMB     BSSZ   1                 WEIGHTED DIFFERENCE
 TIMC     BSSZ   1                 LARGEST INTERVAL 
 TIMD     BSSZ   1                 SMALLEST INTERVAL
 TIME     BSSZ   1                 START TIME 
          BSSZ   2*5
STR       SPACE  4,10 
**        STR - START INTERVAL TIMER. 
* 
*         THIS SUBROUTINE STARTS THE INTERVAL TIMER AND 
*         SUBROUTINE TIM ENDS THE TIMER.
* 
*         ENTRY  (A) = 0, 1, OR 2 (TIMER NUMBER). 
* 
*         EXIT   NONE.
* 
*         USES   D.Z0.
* 
*         CALLS  NONE.
  
  
 STR      ENM    X                 ENTRY/EXIT 
          STD    D.Z0              SAVE TIMER NUMBER
          SBN    3
          PJN    STRX              IF BAD TIMER NUMBER
          LDD    D.PPMES1 
          CWD    D.T0              WRITE D.T0 - D.T4 TO MSG1
          LDN    T.MSC
          CRD    D.T0              READ MILLISECOND CLOCK INTO D.T4 
          LDD    D.Z0 
          SHN    2
          ADD    D.Z0              5*TIMER NUMBER 
          STD    D.T0 
          LDD    D.T4 
          STM    TIME,D.T0         SET NEW INTERVAL TIME
          LDD    D.PPMES1 
          CRD    D.T0              READ MSG1 TO D.T0 - D.T4 
          UJN    STRX 
 DEBUG    ENDIF 
          LIST   *
