*DECK,OPRINPT 
USETEXT COMCBEG 
USETEXT COMQDEF 
USETEXT COMQCMD 
USETEXT COMQKDS 
USETEXT COMQNET 
      PROC OPRINPT; 
        BEGIN    # OPRINPT #
# 
**    OPRINPT    PROCESS OPERATOR INPUT.
* 
*     OPRINPT CHECKS FOR AND PROCESSES COMMANDS FROM THE OPERATOR.
* 
*     PROC OPRINPT
* 
*     ENTRY      NONE.
* 
*     EXIT       NONE.
* 
*     PROCESS    IF DSD FLAG SET: 
*                  RESET COUNTER
*                  SET K-DISPLAY-ASSIGNED TO TRUE 
*                ELSE:  
*                  DECREMENT COUNTER
*                  IF COUNTER EXPIRED:  
*                    SET K-DISPLAY-ASSIGNED TO FALSE. 
*                IF DSD-INPUT BUFFER NON-ZERO:  
*                  CALL OPRCMD TO PROCESS OPERATOR COMMAND. 
*                IF CFO-FLAG CLEAR: 
*                  CALL OPRCMD TO PROCESS CFO COMMAND 
*                  CALL SETKDSP TO RESET L DISPLAY IF NOS/BE
*                  SET CFO FLAG.
*                WHILE READING-INCLUDE-FILE:  
*                  CALL READH TO READ NEXT LINE OF INCLUDE-FILE 
*                  IF END-OF-SECTION/-PARTITION/-INFORMATION: 
*                    CALL INFCLO TO CLOSE INCLUDE FILE
*                  ELSE:  
*                    CALL OPRCMD TO PROCESS COMMAND.
*                IF K DISPLAY ASSIGNED
*                    AND DISPLAY-UPDATE-REQUIRED FLAG SET:  
*                  CALL UPDKDSP TO UPDATE DISPLAY.
* 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC INFCLO;               # CLOSE INCLUDE FILE # 
        PROC NAME;                 # DEBUG CODE # 
        PROC OPRCMD;               # PROCESS OPERATOR COMMAND # 
        PROC OPRMSG;               # DISPLAY MESSAGE TO OPERATOR #
        PROC READH;                # READ LINE FROM FILE, BLANK-FILLED #
        PROC SETKDSP;              # SET K DISPLAY POINTERS # 
        PROC UPDKDSP;              # UPDATE K DISPLAY # 
        END 
  
# 
****  XREF END
# 
  
      DEF MXCMDCYCLE #20#;         # COMMANDS PROCESSED PER CYCLE # 
      DEF MXCYCLES   #20#;         # CYCLES TO WAIT FOR DISPLAY # 
  
      DEF LEMSGEIF   #21#;
      ITEM EMSGEIF    C(LEMSGEIF) = "END OF INCLUDE FILE."; 
  
      ITEM CMDSLEFT   U;           # LOOP COUNTER # 
      ITEM RDHSTATUS  U;           # STATUS OF READH CALL # 
  
        $BEGIN
        NAME("OPRINPT");           # DEBUG CODE # 
        $END
  
      IF KD$FLG                    # IF DSD HAS DISPLAYED DATA #
      THEN
        BEGIN 
        KD$FLG = FALSE;            # RESET FLAG # 
        KDSPCYCLES = MXCYCLES;     # RESET COUNTER #
        KDSPASSIGN = TRUE;         # K DISPLAY ASSIGNED # 
        END 
  
      ELSE
        BEGIN 
        IF KDSPCYCLES NE 0         # IF STILL COUNTING #
        THEN
          BEGIN 
          KDSPCYCLES = KDSPCYCLES - 1;
          IF KDSPCYCLES EQ 0
          THEN
            BEGIN 
            KDSPASSIGN = FALSE;    # ASSUME DISPLAY NOT ASSIGNED #
            END 
  
          END 
  
        END 
  
      IF KD$CDW NE 0               # IF DSD INPUT BUFFER NOT EMPTY #
      THEN
        BEGIN 
        COMMAND = KD$CDC;          # MOVE TYPEIN TO COMMAND STRING #
        KD$CDC = " ";              # BLANK-FILL TYPEIN BUFFER # 
        KD$CDW = 0;                # ZERO FIRST WORD #
        OPRCMD("DSD");             # PROCESS OPERATOR COMMAND # 
        END 
  
    CONTROL IFEQ OS$NOS;
      IF NOT (NAM OR RA$CFO)       # IF CFO FLAG CLEARED #
      THEN
    CONTROL ENDIF;
  
    CONTROL IFEQ OS$NOSBE;
      IF NOT RA$CFO                # IF CFO FLAG CLEARED #
      THEN
    CONTROL ENDIF;
  
        BEGIN 
        COMMAND = RA$CFOCMD;       # MOVE CFO CMD TO COMMAND STRING # 
        OPRCMD("CFO");             # PROCESS OPERATOR COMMAND # 
  
      CONTROL IFEQ OS$NOSBE;
        SETKDSP;                   # RESET L DISPLAY POINTERS # 
      CONTROL ENDIF;
  
        RA$CFO = TRUE;             # SET ACCEPT-CFO FLAG #
        END 
  
      CMDSLEFT = MXCMDCYCLE;       # RESET COMMAND COUNT #
      ASLONGAS READINGINF          # WHILE READING INCLUDE-FILE # 
        AND (CMDSLEFT GT 0)        #   AND CMD LIMIT NOT REACHED #
      DO
        BEGIN 
        CMDSLEFT = CMDSLEFT - 1;
        P<FET> = INFFET;
        READH(FET, COMMAND, ( (MXCMD+9)/10), RDHSTATUS);
        IF RDHSTATUS NE 0          # IF EOX # 
        THEN
          BEGIN 
          OPRMSG(LOC(EMSGEIF), LEMSGEIF); 
          INFCLO;                  # CLOSE INCLUDE FILE # 
          END 
  
        ELSE
          BEGIN 
          OPRCMD(INCLFILE);        # PROCESS COMMAND #
          END 
  
        END 
  
      IF KDSPASSIGN                # IF DISPLAY ASSIGNED #
        AND KS$UPDATE[KDISORD]     #   AND UPDATE REQUIRED #
      THEN
        BEGIN 
        UPDKDSP;                   # UPDATE DISPLAY # 
        END 
  
      IF READINGINF 
        AND (CMDSLEFT EQ 0) 
      THEN
        BEGIN 
        KDSPCYCLES = MXCYCLES;     # RESET COUNTER #
        KDSPASSIGN = TRUE;         # INHIBIT ROLLOUT #
        END 
  
      END  # OPRINPT #
    TERM
