*DECK ECMCMP
USETEXT COMCBEG 
USETEXT COMREVN 
USETEXT COMRNDR 
USETEXT COMRAPL 
USETEXT COMRNET 
USETEXT COMRQUE 
USETEXT COMRNAM 
PROC ECMCMP;
# TITLE  ECMCMP - EXIT CONVERT MODE COMPLETE. # 
  
      BEGIN  # ECMCMP # 
  
# 
**    ECMCMP - EXIT CONVERT MODE COMPLETE.
* 
*     THIS ROUTINE PROCESSES THE NDR REPLY FROM A 
*     EXIT CONVERT MODE FUNCTION. 
* 
*     PROC ECMCMP.
* 
*     ENTRY   - NDR$COMMUN IS BASED ARRAY OF NDR REQUEST BUFF.
*               NAD$ENTRY IS BASED ARRAY OF CORR. LOCAL NAD.
*               QU$ADDRESS IS BASED ARRAY OF UCP REQUEST. 
* 
*     EXIT    - NONE. 
* 
*     PROCESS - INITIALIZE APPL HEADER AND CONNECTION POINTERS. 
*               DEPENDING ON REPLY CODE 
*                 CASE  (CONVERT MODE EXIT SUCCESSFUL): 
*                   UPDATE CONNECTION CONVERT MODE TYPE.
*                   CREATE CM/EXIT/N TO SEND TO USER. 
*                   QUEUE ENTRY ON APL$MSGQ.
*                 CASE  (NAD TURNED OFF): 
*                   UPDATE CONNECTION CONVERT MODE TYPE.
*                   CALL QUEOFF TO PROCESS NAD TURNED OFF REPLY.
*                 CASE  (CONVERT MODE EXITING): 
*                   PLACE REQUEST ON CONNECTION DELAY Q TO RETRY. 
*                 CASE  (CONVERT MODE NOT EXITED):  
*                   UPDATE CONNECTION CONVERT MODE TYPE.
*                   COMPLETE EVENT ENTRY. 
*                   CALL STATUSF TO PROCESS EVENT.
# 
  
# 
****  PROC ECMCMP - XREF LIST BEGIN.
# 
  
      XREF
        BEGIN 
        PROC FREE;                   # PLACE QUEUE ENTRY ON FREE Q #
        PROC QUEOFF;                 # PROCESS NAD OFF REPLY #
        PROC QUEUE;                  # QUEUE ENTRY ON DESIRED QUEUE # 
        PROC STATUSF;                # PROCESS EVENT ENTRY #
        END 
  
# 
****  PROC ECMCMP - XREF LIST END.
# 
  
  
      ARRAY [0:0] S(2); 
        BEGIN 
        ITEM PRS$WD1    I(00,00,60); # PRESET FOR CM/EXIT/N # 
        ITEM PRS$FC     U(00,00,16) = [$CMEXITN]; 
        ITEM PRS$ACN    U(00,24,12); # APPLICATION CONNECTION NUMBER #
        ITEM PRS$WD2    I(01,00,60);
        ITEM PRS$STAT   U(01,12,12); # CONVERT MODE EXIT STATUS # 
        ITEM PRS$NABN   U(01,24,18); # LAST NETWORK ABN USED BY NAD # 
        ITEM PRS$HABN   U(01,42,18); # LAST HOST ABN USED BY NAD #
        END 
  
      SWITCH RETURNCODE 
             CMEXITED,               # CONVERT MODE EXITED #
             NADOFF,                 # NAD TURNED OFF # 
             CMEXITING,              # CONVERT MODE EXITING # 
             CMEXITFAIL,             # CONVERT MODE EXIT FAILED # 
             ;
  
CONTROL EJECT;
  
      P<APL$HEADER> = QU$APPL;
      P<CONNECTION> = P<APL$HEADER> + APL$LENGTH +
                      (QU$ACN - APL$MINACN) * CON$LENGTH; 
  
# 
*     PROCESS RETURN CODE THRU SIMULATED CASE STATEMENT.
# 
  
      GOTO RETURNCODE[NDR$RTNCOD];
  
CMEXITED: 
        CON$CM = BINARY;
        NAD$CMPA = NAD$CMPA + 1;
        PRS$ACN = QU$ACN; 
        PRS$STAT = NDR$CMSTAT;
        PRS$NABN = NDR$CMNABN;
        PRS$HABN = NDR$CMHABN;
        QU$SUPWD1 = PRS$WD1;
        QU$SUPWD2 = PRS$WD2;
        $SUPTLC = 2;
        QU$BLKHDR = $SUPHDR;
        QU$CHARGE = 0;
        QU$ERRLGL = FALSE;
        QU$TYPE = QT$UCPMSGR; 
        QU$SUPAPAD = P<APL$HEADER>; 
        QUEUE(LOC(APL$MSGQ)); 
        APL$MSGCNT = APL$MSGCNT + 1;
        GOTO ENDCASE; 
  
NADOFF: 
        FREE; 
        QUEOFF; 
        GOTO ENDCASE; 
  
CMEXITING:  
        QUEUE(LOC(CON$DELAYQ)); 
        GOTO ENDCASE; 
  
CMEXITFAIL: 
        P<EVNT$ENTRY> = P<NDR$COMMUN> + 4;
        EVNT$ACN = QU$ACN;
        EVNT$APPL = P<APL$HEADER>;
        FREE; 
        STATUSF;
        GOTO ENDCASE; 
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
  
ENDCASE:  
  
      RETURN; 
  
      END  # ECMCMP # 
  
      TERM
