*DECK,QFIMAIN 
USETEXT COMCBEG 
USETEXT COMQDEF 
USETEXT COMQSCH 
      PROC QFIMAIN; 
        BEGIN    # QFIMAIN #
# 
**    QFIMAIN    QTF INITIATOR MAIN ROUTINE.
* 
*     QFIMAIN CONTROLS ACTIVITY IN QTFI.
* 
*     PROC QFIMAIN
* 
*     ENTRY      LACNMAX = ACNMAX (MAXIMUM NUMBER OF CONNECTIONS).
*                QRCV = FALSE (QTF INITIATOR).
* 
*     EXIT       SHUTDOWN = TRUE. 
* 
*     PROCESS    WHILE NOT SHUTDOWN:  
*                  UPDATE CLOCK 
*                  CALL CKEVNTI TO CHECK EVENTS 
*                  CALL CKTASKI TO INITIATE TASKS 
*                  CALL QTFWAIT TO WAIT FOR NEXT EVENT/TIMER. 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CKEVNTI;              # CHECK FOR EVENT #
        PROC CKTASKI;              # SCHEDULE TASKS # 
        PROC NAME;                 # DEBUG CODE # 
        PROC QTFWAIT;              # WAIT FOR NEXT EVENT/TIMER #
        PROC RSECS;                # GET REAL-TIME CLOCK #
        END 
  
# 
****  XREF END
# 
  
      ITEM WAITTIME   U;           # MAXIMUM SECONDS TO WAIT #
  
        $BEGIN
        NAME("QFIMAIN");           # DEBUG CODE # 
        $END
  
      ASLONGAS NOT SHUTDOWN 
      DO
        BEGIN 
        RSECS(TIM);                # GET CURRENT TIME # 
        CKEVNTI;                   # CHECK FOR EVENTS # 
        CKTASKI;                   # SCHEDULE TASKS # 
        IF TIMNXTEVNT LT TIMNXTTASK 
        THEN
          BEGIN 
          WAITTIME = TIMNXTEVNT;   # TRANSFER TIMER EXPIRES NEXT #
          END 
  
        ELSE
          BEGIN 
          WAITTIME = TIMNXTTASK;   # SCHEDULE TASK COMES NEXT # 
          END 
  
        QTFWAIT(WAITTIME);         # WAIT FOR EVENT OR TIMER #
        END 
  
      END  # QFIMAIN #
    TERM
