*DECK SCMCMP
USETEXT COMCBEG 
USETEXT COMREVN 
USETEXT COMRNDR 
USETEXT COMRAPL 
USETEXT COMRQUE 
USETEXT COMRNET 
USETEXT COMRNAM 
PROC SCMCMP;
# TITLE  SCMCMP - SELECT CONVERT MODE COMPLETE. # 
  
      BEGIN  # SCMCMP # 
  
# 
**    SCMCMP - SELECT CONVERT MODE COMPLETE.
* 
*     THIS ROUTINE PROCESSES THE NDR REPLY FROM A 
*     SELECT CONVERT MODE FUNCTION. 
* 
*     PROC SCMCMP.
* 
*     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 SELECT SUCCESSFUL): 
*                   UPDATE CONNECTION CONVERT MODE TYPE.
*                   CREATE CM/SEL/N TO SEND TO USER.
*                   QUEUE REPLY ON APL$MSGQ.
*                 CASE  (NAD TURNED OFF): 
*                   UPDATE CONNECTION CONVERT MODE TYPE.
*                   CALL QUEOFF TO PROCESS NAD TURNED OFF REPLY.
*                 CASE  (CONVERT MODE NOT SELECTED):  
*                   UPDATE CONNECTION CONVERT MODE TYPE.
*                   COMPLETE EVENT ENTRY. 
*                   CALL STATUSF TO PROCESS EVENT.
# 
  
# 
****  PROC SCMCMP - XREF LIST BEGIN.
# 
  
      XREF
        BEGIN 
        PROC FREE;                   # PLACE QUEUE ENTRY ON FREE Q #
        PROC QUEOFF;                 # PROCESS NAD OFF REPLY #
        PROC QUEUE;                  # QUEUE ENTRY ON REQUESTED QUEUE # 
        PROC STATUSF;                # PROCESS EVENT ENTRY #
        ITEM NADTBL I;               # FWA OF LOCAL NAD TABLE # 
        END 
  
# 
****  PROC SCMCMP - XREF LIST END.
# 
  
  
      ARRAY [0:0] S(1); 
        BEGIN 
        ITEM PRS$WD1    I(00,00,60); # PRESET FOR CM/SEL/N #
        ITEM PRS$FC     U(00,00,16) = [$CMSELN];
        ITEM PRS$RC     U(00,16,08) = [0];
        ITEM PRS$ACN    U(00,24,12); # APPLICATION CONNECTION NUMBER #
        ITEM PRS$CMTY   U(00,48,12); # CONVERT MODE TYPE SELECTED # 
        END 
  
      SWITCH RETURNCODE 
             CMSELECTED,             # CONVERT MODE SELECTED #
             NADOFF,                 # NAD TURNED OFF # 
             CMSELFAIL,              # CONVERT MODE SELECT 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];
  
CMSELECTED: 
        CON$CM = NDR$CMTYPE;
        P<NAD$ENTRY> = NADTBL + CON$NADORD * NAD$LENGTH;
        PRS$ACN = QU$ACN; 
        PRS$CMTY = NDR$CMTYPE;
        QU$SUPWD1 = PRS$WD1;
        $SUPTLC = 1;
        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; 
  
CMSELFAIL:  
        CON$CM = BINARY;
        NAD$CMPA = NAD$CMPA + 1;
        P<EVNT$ENTRY> = P<NDR$COMMUN> + 3;
        EVNT$ACN = QU$ACN;
        EVNT$APPL = P<APL$HEADER>;
        FREE; 
        STATUSF;
        GOTO ENDCASE; 
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
  
ENDCASE:  
  
      RETURN; 
  
      END  # SCMCMP # 
  
      TERM
