*DECK CMEXITR 
USETEXT COMCBEG 
USETEXT COMRQUE 
USETEXT COMRAPL 
USETEXT COMRNDR 
USETEXT COMRRTN 
USETEXT COMRNET 
PROC CMEXITR; 
# TITLE  CMEXITR - PROCESS SUPERVISORY MESSAGE CM/EXIT/R. # 
  
      BEGIN  # CMEXITR #
  
# 
**    CMEXITR - PROCESS SUPERVISORY MESSAGE CM/EXIT/R.
* 
*     THIS ROUTINE PROCESSES THE UCP REQUEST TO EXIT A CONVERT MODE.
* 
*     PROC CMEXITR. 
* 
*     ENTRY   - QU$ADDRESS IS BASED ARRAY CONTAINING CM/EXIT/R SUPR MSG.
*               APL$HEADER IS BASED ARRAY CONTAINING APPL HEADER. 
*               CONNECTION IS BASED ARRAY CONTAINING ACN. 
* 
*     EXIT    - CM/EXIT/R IS PROCESSED. 
* 
*     PROCESS - IF CONNECTION DOES NOT HAVE A CONVERT MODE ACTIVE 
*               THEN
*                 QUEUE AN ERROR LOGICAL MESSAGE. 
*               ELSE
*                 REPLY TO UCP. 
*                 GENERATE AN EXIT CONVERT MODE NDR REQUEST.
*                 PLACE REQUEST ON LOCAL NAD QUEUE. 
# 
  
# 
****  PROC CMEXITR - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC QERRLGL;                # QUEUE AN ERROR LOGICAL MSG # 
        PROC FREE;                   # PLACE ENTRY ON FREE QUEUE #
        PROC RTNNSUP;                # REPLY TO USER #
        PROC GETFREE;                # GET ENTRY FROM FREE QUEUE #
        PROC NADREQ;                 # PLACE REQUEST ON LNAD QUEUE #
        END 
  
# 
****  PROC CMEXITR - XREF LIST END. 
# 
  
  
CONTROL EJECT;
  
      IF CON$CM EQ BINARY 
        OR CON$CM EQ CMENTEXT 
      THEN
        BEGIN 
        QERRLGL(LGL$PROTCL,0,QU$UCPA,QU$BLKHDR,QU$SUPWD1,0,0);
        FREE; 
        END 
  
      ELSE
        BEGIN 
        RTNNSUP;
        GETFREE;
        CON$CM = CMENTEXT;
        QU$TYPE = QT$CMEXIT;
        QU$PATHID = CON$PATHID; 
        QU$APPL = P<APL$HEADER>;
        QU$ACN = (P<CONNECTION> - P<APL$HEADER> - APL$LENGTH) 
                 / CON$LENGTH + APL$MINACN; 
        P<PTH$ENTRY> = CON$PATHAD;
        NADREQ(PTH$NADORD); 
        END 
  
      END  # CMEXITR #
  
      TERM
