Sample OUTEXIT routine

The following sample message output exit program translates generated data from EBCDIC to 8-bit ASCII.
         TITLE 'Sample OUTEXIT - Output Data Exit'
*---------------------------------------------------------------------*
* This routine is a sample output exit to translate generated data    *
* from EBCDIC to 8 bit ASCII.  This exit performs this function for   *
* any SNA device.  It translates the RU portion of all generated      *
* unformatted Function Management Data requests and sets the          *
* alternate code bit in the request/response header.                  *
* To locate the RU, it checks the TH FID type and increments past     *
* the TH and RH.                                                      *
*                                                                     *
* Use of this exit would be indicated by coding the OUTEXIT operand   *
* on the NTWRK statement (OUTEXIT=ASCIIOUT).                          *
*---------------------------------------------------------------------*
ASCIIOUT CSECT
         STM   14,12,12(13)         Save caller's registers
         LR    12,15                Establish base register
         USING ASCIIOUT,12
*
         LR    3,1                  Parameter list address
         L     4,8(3)               Get DEV address
         USING DEV,4                Use DEV DSECT
         TM    DEVTYPE,DEVSNA       Test for SNA device type
         BNO   RETURN               Skip translation if not SNA
         L     5,0(3)               Get address of data
         L     6,16(3)              Get length
         LH    6,0(6)                   of data
         LA    8,2                  Length of FID3 TH
         MVC   FIDTYPE,0(5)         Get byte containing FID type
         NI    FIDTYPE,X'F0'        Isolate FID type
         CLI   FIDTYPE,X'20'        Test for FID2
         BE    FID2                 Branch if found
         CLI   FIDTYPE,X'30'        Test for FID3
         BE    FIDFOUND             Branch if found
         CLI   FIDTYPE,X'40'        Test for FID4
         BNE   RETURN               Return if not FID4
         LA    8,20(8)              Add FID4/FID2 length difference
FID2     LA    8,4(8)               Add FID2/FID3 length difference
FIDFOUND LA    7,0(8,5)             Point to RH
         LA    8,3(,8)              Add length of RH
         LA    9,0(8,5)             Point to RU
         SLR   6,8                  Get length of RU
         BNO   RETURN               Branch if nothing to translate
         TM    0(7),X'E8'           Test for unformatted FM Data
         BNZ   RETURN                   request
         OI    2(7),X'08'           Set alternate code
*
*  Translate the data from EBCDIC to ASCII
*
         LA    8,256                Translate 256 at a time
TRLOOP   CLR   6,8                  256 or less left
         BNH   TRREST               Go translate last if so
         TR    0(256,9),EBC2ASC     Translate 256 bytes
         SLR   6,8                  Decrement count
         ALR   9,8                  Increment data pointer
         B     TRLOOP
TRREST   BCTR  6,0                  Decrement for translate
         EX    6,TRRMDR             Translate remainder of data
*
RETURN   LM    14,12,12(13)         Restore registers
         BR    14                   Return to caller
*
TRRMDR   TR    0(0,9),EBC2ASC       Translate remainder of data
*
FIDTYPE  DS    C                    Workarea for determining FID type
*
EBC2ASC  DS    0CL256       An EBCDIC to 8 bit ASCII translate table
         DC    XL16'00010203CF09D37FD4D5C30B0C0D0E0F'      0
         DC    XL16'10111213C7B408C91819CCCD831DD21F'      1
         DC    XL16'81821C84860A171B89919295A2050607'      2
         DC    XL16'E0EE16E5D01EEA048AF6C6C21415C11A'      3
         DC    XL16'20A6E180EB909FE2AB8B9B2E3C282B7C'      4
         DC    XL16'26A9AA9CDBA599E3A89E21242A293B5E'      5
         DC    XL16'2D2FDFDC9ADDDE989DACBA2C255F3E3F'      6
         DC    XL16'D78894B0B1B2FCD6FB603A2340273D22'      7
         DC    XL16'F861626364656667686996A4F3AFAEC5'      8
         DC    XL16'8C6A6B6C6D6E6F7071729787CE93F1FE'      9
         DC    XL16'C87E737475767778797AEFC0DA5BF2F9'      A
         DC    XL16'B5B6FDB7B8B9E6BBBCBD8DD9BF5DD8C4'      B
         DC    XL16'7B414243444546474849CBCABEE8ECED'      C
         DC    XL16'7D4A4B4C4D4E4F505152A1ADF5F4A38F'      D
         DC    XL16'5CE7535455565758595AA0858EE9E4D1'      E
         DC    XL16'30313233343536373839B3F7F0FAA7FF'      F
*
*        Copy DSECTS from WSim User Exit Interface Library
*
         COPY  DEV
         END