*DECK UNKNUCP 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRQUE 
USETEXT COMRRTN 
USETEXT COMRUNK 
PROC UNKNUCP; 
# TITLE UNKNUCP - PROCESS UNKNOWN UCP REQUESTS #
  
      BEGIN  # UNKNUCP #
  
# 
**    UNKNUCP - PROCESS UNKNOWN UCP REQUESTS. 
* 
*     PROCESS UCP REQUESTS THAT ARE ILLEGAL, NOT RECOGNIZED BY RHF
*     RESIDENT, OR THAT HAVE NO APPLICATION TABLE ADDRESS SPECIFIED.
* 
*     PROC UNKNUCP. 
* 
*     ENTRY   -  THERE IS AN ENTRY ON THE UNKNOWN REQUEST QUEUE.
* 
*     EXIT    -  ALL UNKNOWN REQUEST QUEUE ENTRIES HAVE BEEN PROCESSED. 
* 
*     PROCESS -  FOR EACH ENTRY ON THE UNKNOWN REQUEST QUEUE: 
*                  DEQUEU ENTRY 
*                  IF REQUEST IS FROM OPERATING SYSTEM TO NOTIFY OF 
*                    UCP TERMINATION
*                  THEN:  
*                    CHANGE REQUEST TO NETOFF.
*                  IF REQUEST IS NETON
*                  THEN:  
*                    QUEUE REQUEST ON NETON QUEUE.
*                  ELSE:  
*                    IF APPLICATION TABLE ADDRESS IS ZERO 
*                  T THEN:  
*                      INITIATE SEARCH FOR CORRECT APPLICATION TABLE. 
*                    ELSE:  
*                      IF APPLICATION TABLE ADDRESS IS INVALID
*                      THEN:  
*                        ISSUE "BAD APPL ADDRESS" MESSAGE 
*                        ABORT UCP. 
*                      ELSE:  
*                        ISSUE "RHF CALL ERROR" MESSAGE 
*                        ABORT UCP. 
*                        "THIS CONDITION IS A CATCH-ALL FOR ANY ERRORS
*                         DETECTED BY RESIDENT. THIS RHF CALL ERROR 
*                         MESSAGE WILL BE OUTPUT FOR INSTANCE FOR 
*                         ILLEGAL RHF FUNCTIONS, BAD WORD COUNT,
*                         APPLICATION NETOFF IN PROGRESS, ECT. "
*                RETURN 
* 
* 
****  PROC UNKNUCP - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC DEQUEUE;                # REMOVE ENTRY FROM QUEUE #
        PROC FREE;                   # RELEASE QUEUE ENTRY #
        ITEM LAPLADR  I;             # LAST APPLICATION TABLE ADDRESS # 
        PROC NOAPLAD;                # PROCESS NO APPL TABLE ADDRESS #
        PROC QUEUE;                  # ADD ENTRY TO QUEUE # 
        PROC UCPMSG;                 # ABORT AND SEND DFILE MSG TO UCP# 
        END 
  
# 
****  PROC UNKNUCP - XREF LIST END. 
# 
  
  
      ITEM JOBID I;                  # TEMP CELL HOLDS JOBID FOR UCPMSG#
      ITEM UCPA  I;                  # TEMP CELL HOLDS UCPA FOR UCPMSG# 
  
CONTROL EJECT;
  
      ASLONGAS UNKNOWNREQ NE 0
      DO
        BEGIN  # PROCESS ENTRY #
        DEQUEUE(LOC(UNKNOWNREQ)); 
  
        IF QU$STAT NE 0 
        THEN
          BEGIN  # OP SYS NOTIFICATION OF UCP TERMINATION # 
          QU$FUNCT = UCP$NETOFF;     # TREAT AS A NETOFF #
          QU$APLADR = 0;
          QU$WC = 1;
          END 
  
        IF QU$WC LE 0  OR  QU$WC GT 2 
        THEN
          BEGIN  # UCP CALL ERROR # 
          JOBID     = QU$JOBID; 
          UCPA      = QU$UCPA;
          FREE; 
          UCPMSG(JOBID,LOC(MSGCALLERR),31,REPLY$ABT,UCPA);
          END 
  
        ELSE
          BEGIN  # WORD COUNT IN RANGE #
  
          IF QU$FUNCT EQ UCP$NETON
          THEN
            BEGIN  # NETON REQUEST #
            QUEUE(LOC(NETONQ)); 
            END 
  
          ELSE
            BEGIN  # NOT NETON REQUEST #
            P<APL$HEADER> = QU$APLADR;
  
            IF QU$APLADR EQ 0 
            THEN
              BEGIN  # NO APPLICATION TABLE ADDR SPECIFIED #
              NOAPLAD;
              END 
  
            ELSE
              BEGIN  # APPLICATION TABLE ADDRESS SPECIFIED #
  
              IF   QU$APLADR GT LAPLADR 
                OR QU$APLADR LT 0 
                OR QU$JOBID  NE APL$JOBID 
              THEN
                BEGIN  # BAD APPLICATION TABLE ADDRESS #
                JOBID =  QU$JOBID;
                UCPA  =  QU$UCPA; 
                FREE; 
                UCPMSG(JOBID,LOC(MSGCALLERR),31,REPLY$ABT,UCPA);
                END 
  
            ELSE
                BEGIN  # VALID APPLICATION TBL ADDR - RHF CALL ERROR #
                JOBID = QU$JOBID; 
                UCPA  = QU$UCPA;
                FREE; 
                UCPMSG(JOBID,LOC(MSGCALLERR),31,REPLY$ABT,UCPA);
                END 
  
              END 
  
            END 
  
          END 
  
        END 
  
      RETURN; 
      END  # UNKNUCP #
  
      TERM
  
