*COMDECK  LV7CALL 
          IDENT  LV7CALL
          ENTRY  ACFETCH,ACSTORE,APFETCH,APSTORE
*         ENTRY  ACSTORE
*         ENTRY  APFETCH
*         ENTRY  APSTORE
          SST 
          SYSCOM B1 
  
*COMMENT  ACFETCH - FETCH APPLICATION PROTOCOL COMMAND. 
          COMMENT  COPYRIGHT CONTROL DATA CORP. 1979. 
          SPACE  4,10 
**        ACFETCH - FETCH APPLICATION PROTOCOL COMMAND. 
* 
*         J. G. CLARK        79/12/17.
          SPACE  4,10 
**        COMMON DECKS. 
* 
*         COMQMAC - RHF APPLICATION MACRO DEFINITIONS.
  
  
*CALL     COMCMAC 
*CALL     COMCCAE 
          SPACE  4,10 
**        TCDA IS A TABLE TO ALLOW DISPLAY CODE TO BE 
*         CONVERTED TO ASCII CODE.
  
**        TCAD IS A TABLE TO ALLOW ASCII CODE TO BE CONVERTED 
*         TO DISPLAY CODE.
  
 TCAD     BSS    0           ASCII CODE INDEXED BY DISPLAY
 TCDA     BSS    0           DISPLAY CODE INDEXED BY ASCII
          LOC    0
  
*         FROM   ASCII      DISPLAY 
*         TO     DISPLAY    ASCII 
  
          IFNE   /CONSTANT/IPCS63,0,2 
          VFD    2/0,6/1R ,44/0,8/45B   00 PERCENT (63 CSET)
          ELSE   1
          VFD    2/0,6/1R ,44/0,8/72B   00 COLON   (64 CSET)
          VFD    2/0,6/1R ,44/0,8/101B  01 UPPER CASE A 
          VFD    2/0,6/1R ,44/0,8/102B  02 UPPER CASE B 
          VFD    2/0,6/1R ,44/0,8/103B  03 UPPER CASE C 
          VFD    2/0,6/1R ,44/0,8/104B  04 UPPER CASE D 
          VFD    2/0,6/1R ,44/0,8/105B  05 UPPER CASE E 
          VFD    2/0,6/1R ,44/0,8/106B  06 UPPER CASE F 
          VFD    2/0,6/1R ,44/0,8/107B  07 UPPER CASE G 
          VFD    2/0,6/1R ,44/0,8/110B  10 UPPER CASE H 
          VFD    2/0,6/1R ,44/0,8/111B  11 UPPER CASE I 
          VFD    2/0,6/1R ,44/0,8/112B  12 UPPER CASE J 
          VFD    2/0,6/1R ,44/0,8/113B  13 UPPER CASE K 
          VFD    2/0,6/1R ,44/0,8/114B  14 UPPER CASE L 
          VFD    2/0,6/1R ,44/0,8/115B  15 UPPER CASE M 
          VFD    2/0,6/1R ,44/0,8/116B  16 UPPER CASE N 
          VFD    2/0,6/1R ,44/0,8/117B  17 UPPER CASE O 
          VFD    2/0,6/1R ,44/0,8/120B  20 UPPER CASE P 
          VFD    2/0,6/1R ,44/0,8/121B  21 UPPER CASE Q 
          VFD    2/0,6/1R ,44/0,8/122B  22 UPPER CASE R 
          VFD    2/0,6/1R ,44/0,8/123B  23 UPPER CASE S 
          VFD    2/0,6/1R ,44/0,8/124B  24 UPPER CASE T 
          VFD    2/0,6/1R ,44/0,8/125B  25 UPPER CASE U 
          VFD    2/0,6/1R ,44/0,8/126B  26 UPPER CASE V 
          VFD    2/0,6/1R ,44/0,8/127B  27 UPPER CASE W 
          VFD    2/0,6/1R ,44/0,8/130B  30 UPPER CASE X 
          VFD    2/0,6/1R ,44/0,8/131B  31 UPPER CASE Y 
          VFD    2/0,6/1R ,44/0,8/132B  32 UPPER CASE Z 
          VFD    2/0,6/1R ,44/0,8/60B  33 0 
          VFD    2/0,6/1R ,44/0,8/61B  34 1 
          VFD    2/0,6/1R ,44/0,8/62B  35 2 
          VFD    2/0,6/1R ,44/0,8/63B  36 3 
          VFD    2/0,6/1R ,44/0,8/64B  37 4 
          VFD    2/0,6/1R ,44/0,8/65B  40 5 
          VFD    2/0,6/1R!,44/0,8/66B  41 6 
          VFD    2/0,6/1R",44/0,8/67B  42 7 
          VFD    2/0,6/1R#,44/0,8/70B  43 8 
          VFD    2/0,6/1R$,44/0,8/71B  44 9 
          IFNE   /CONSTANT/IPCS63,0,2 
          VFD    2/0,6/00B,44/0,8/53B  45 PLUS
          ELSE   1
          VFD    2/0,6/63B,44/0,8/53B  45 PLUS
          VFD    2/0,6/1R&,44/0,8/55B  46 MINUS 
          VFD    2/0,6/1R',44/0,8/52B  47 ASTERISK
          VFD    2/0,6/1R(,44/0,8/57B  50 SLASH (DIVISION)
          VFD    2/0,6/1R),44/0,8/50B  51 OPEN PARENTHESIS
          VFD    2/0,6/1R*,44/0,8/51B  52 CLOSED PARENTHESIS
          VFD    2/0,6/1R+,44/0,8/44B  53 DOLLAR SIGN 
          VFD    2/0,6/1R,,44/0,8/75B  54 EQUAL SIGN
          VFD    2/0,6/1R-,44/0,8/40B  55 SPACE 
          VFD    2/0,6/1R.,44/0,8/54B  56 COMMA 
          VFD    2/0,6/1R/,44/0,8/56B  57 PERIOD (DECIMAL POINT)
          VFD    2/0,6/1R0,44/0,8/43B  60 POUND SIGN
          VFD    2/0,6/1R1,44/0,8/133B  61 OPEN BRACKET 
          VFD    2/0,6/1R2,44/0,8/135B  62 CLOSED BRACKET 
          IFNE   /CONSTANT/IPCS63,0,2 
          VFD    2/0,6/1R3,44/0,8/72B  63 COLON (63 CSET) 
          ELSE   1
          VFD    2/0,6/1R3,44/0,8/45B  63 PERCENT 
          VFD    2/0,6/1R4,44/0,8/42B  64 QUOTE 
          VFD    2/0,6/1R5,44/0,8/137B  65 CONCANTENATION (UNDERLINE) 
          VFD    2/0,6/1R6,44/0,8/41B  66 EXCLAMATION 
          VFD    2/0,6/1R7,44/0,8/46B  67 AMPERSAND 
          VFD    2/0,6/1R8,44/0,8/47B  70 APOSTROPHE
          VFD    2/0,6/1R9,44/0,8/77B  71 QUESTION MARK 
          VFD    2/0,6/1R:,44/0,8/74B  72 LESS THAN 
          VFD    2/0,6/1R;,44/0,8/76B  73 GREATER THAN
          VFD    2/0,6/1R<,44/0,8/100B  74 AT 
          VFD    2/0,6/1R=,44/0,8/134B  75 BACK SLASH 
          VFD    2/0,6/1R>,44/0,8/136B  76 CIRCUMFLEX 
          VFD    2/0,6/1R?,44/0,8/73B  77 SEMI COLON
          VFD    2/0,6/1R@,44/0,8/0  100  AT
          VFD    2/0,6/1RA,44/0,8/0  101, 141 
          VFD    2/0,6/1RB,44/0,8/0  102, 142 
          VFD    2/0,6/1RC,44/0,8/0  103, 143 
          VFD    2/0,6/1RD,44/0,8/0  104, 144 
          VFD    2/0,6/1RE,44/0,8/0  105, 145 
          VFD    2/0,6/1RF,44/0,8/0  106, 146 
          VFD    2/0,6/1RG,44/0,8/0  107, 147 
          VFD    2/0,6/1RH,44/0,8/0  110, 150 
          VFD    2/0,6/1RI,44/0,8/0  111, 151 
          VFD    2/0,6/1RJ,44/0,8/0  112, 152 
          VFD    2/0,6/1RK,44/0,8/0  113, 153 
          VFD    2/0,6/1RL,44/0,8/0  114, 154 
          VFD    2/0,6/1RM,44/0,8/0  115, 155 
          VFD    2/0,6/1RN,44/0,8/0  116, 156 
          VFD    2/0,6/1RO,44/0,8/0  117, 157 
          VFD    2/0,6/1RP,44/0,8/0  120, 160 
          VFD    2/0,6/1RQ,44/0,8/0  121, 161 
          VFD    2/0,6/1RR,44/0,8/0  122, 162 
          VFD    2/0,6/1RS,44/0,8/0  123, 163 
          VFD    2/0,6/1RT,44/0,8/0  124, 164 
          VFD    2/0,6/1RU,44/0,8/0  125, 165 
          VFD    2/0,6/1RV,44/0,8/0  126, 166 
          VFD    2/0,6/1RW,44/0,8/0  127, 167 
          VFD    2/0,6/1RX,44/0,8/0  130, 170 
          VFD    2/0,6/1RY,44/0,8/0  131, 171 
          VFD    2/0,6/1RZ,44/0,8/0  132, 172 
          VFD    2/0,6/1R[,44/0,8/0  133, 173 OPEN BRACKET/BRACE
          VFD    2/0,6/1R\,44/0,8/0  134, 174 BACK SLASH/VERT.LINE
          VFD    2/0,6/1R],44/0,8/0  135, 175 CLOSED BRACKET/BRACE
          VFD    2/0,6/1R^,44/0,8/0  136, 176 CIRCUMFLEX/TILDE
          VFD    2/0,6/65B,44/0,8/0  137, 177 CONCATENATION/UNDERLINE 
          LOC    *O 
 ACFETCH  SPACE  4,50 
**               ACFETCH IS A FORTRAN-CALLABLE FUNCTION ROUTINE THAT
*         1) CONVERTS LEVEL 7 PROTOCOL TEXT (RECEIVED BY *NETGET*)
*            FROM ASCII TO DISPLAY CODE, AND SETS THE HEADER WORD 
*            FOR A SUBSEQUENT *APFETCH* CALL. 
*         2) RETURNS THE COMMAND NUMBER AS AN INTEGER (0-99). 
* 
*         PROCESS.
*         IF TEXT LENGTH VALID (4 .LE. TEXTL .LE. 2043):  
*           CALL *CAD* TO CONVERT TEXT FROM ASCII TO DISPLAY CODE 
*           IF PARAMETER COUNT VALID (CHAR 3-4 = *00*-*99*) 
*             IF COMMAND NUMBER VALID (CHAR 1-2 = *00*-*99*): 
*               SET UP HEADER WORD (*BUFF*) FOR FIRST *APFETCH* CALL
*               SET X6 = COMMAND NUMBER (0-99)
*               RETURN
*         ELSE (INVALID TEXT LENGTH/PARAMETER COUNT/COMMAND NUMBER):  
*           SEND DAYFILE MESSAGE *ACFETCH - ERROR IN VALUE CONVERSION*
*         SET HEADER WORD (*BUFF*) = 0
*         SET X6 = -1 
*         RETURN
* 
* 
*         CALL FORMAT 
*                ICMND = ACFETCH (BUFF, TEXTL)
* 
*         ENTRY  (A1) = PARAMETER LIST ADDRESS
* 
*         PARAMETER LIST FORMAT 
*                BUFF   - ADDRESS OF HEADER WORD PRECEDING TEXT AREA. 
*                TEXTL  - LENGTH OF TEXT AREA IN CHARACTERS.
* 
*         BUFFER FORMAT ON ENTRY
**T BUFF  60/ 
**T TEXT  16/ CMND,16/ PRMS,28/ TEXT (1ST 3.5 ASCII CHARACTERS) 
**T,      60/ TEXT (NEXT 7.5 ASCII CHARACTERS). 
* 
*         CMND   - COMMAND NUMBER (*00* - *99* IN ASCII)
*         PRMS   - NUMBER OF PARAMETERS (*00* - *99* IN ASCII)
* 
*         BUFFER FORMAT ON EXIT 
**T BUFF  2/1,10/NPARAM, 48/APFTCH
**T TEXT  12/ CMND,12/ PRMS, 36/ TEXT (1ST 6 DISPLAY CODE CHARACTERS) 
**T,      60/ TEXT (NEXT 10 DISPLAY CODE CHARACTERS)
* 
*         NPARAM - NUMBER OF PARAMETERS IN TEXT (BINARY EQV OF *PRMS*)
*         APFTCH - POINTERS FOR APFETCH 
*         CMND   - COMMAND NUMBER (*00* - *99* IN DISPLAY CODE) 
*         PRMS   - NUMBER OF PARAMETERS (*00* - *99* IN DISPLAY CODE) 
* 
*         EXIT   NORMAL 
*                (X6) = INTEGER EQUIVALENT OF CMND (0-99).
*                (X5) = CMND (*00* - *99* IN DISPLAY CODE)
* 
*                ERROR
*                (X6) = NEGATIVE IF CMND OR PRMS NON-NUMERIC, 
*                       OR IF *TEXTL* PARAMETER OUT OF RANGE. 
*                (X5) = 0 
* 
*         USES   X - 0, 1, 2, 5, 6, 7.
*                A - 1, 2, 5, 7.
*                B - 1, 7.
* 
*         CALLS  CAD, DXB=. 
* 
*         MACROS MESSAGE, SUBRL.
  
 ACFETCH  SUBRL   (#BUFF,TEXTL) 
          SA2     TEXTL 
          SX5     X2-4
          NG      X5,ACF1    IF TEXT LENGTH .LT. 4
          SX5     X2-2044 
          PL      X5,ACF1    IF TEXT LENGTH .GT. 2043 
          SA1    "BUFF" 
          SB1    1
          RJ     CAD         CONVERT TEXT AREA TO DISPLAY 
          SA5    X1+1        FETCH BUFFER WORD CONTAINING COMMAND 
          MX0    12 
          SB7    B1          SELECT DECIMAL TO BINARY CONVERSION
          LX5    12 
          BX5    X0*X5
          ZR     X5,ACF1     IF ERROR IN PARAMETER COUNT
          RJ     =XDXB=      CONVERT PARAMETER COUNT
          SA1    "BUFF" 
          NZ     X4,ACF1     IF ERROR IN PARAMETER COUNT
          SA2    ACFA        BUFFER HEADER TEXT 
          LX6    57-9 
          SA5    X1+B1       FETCH COMMAND FROM BUFFER
          MX0    12 
          BX5    X0*X5
          ZR     X5,ACF1     IF ERROR IN COMMAND
          BX7    X2+X6
          SA7    X1          SET HEADER IN BUFFER 
          RJ     =XDXB=      CONVERT COMMAND
          SA5    A5+
          MX0    12 
          BX5    X0*X5       RETURN DISPLAY CODE OF COMMAND 
          ZR     X4,ACFETCHX  IF NO ERROR IN COMMAND
 ACF1     MESSAGE  ACFB,3,R 
          SA1    "BUFF" 
          BX7    X7-X7       CLEAR HEADER WORD
          MX6    -1 
          SA7    X1 
 DEBUG$   IF     DEF,DEBUG$ 
  
*         START OF CONDITIONAL MODIFY CODE (*DEFINE DEBUG). 
  
          ABORT              ** DEBUGGING **
  
*         END OF CONDITIONAL MODIFY CODE. 
  
 DEBUG$   ENDIF 
          MX5     0 
          EQ     ACFETCHX    RETURN NEGATIVE COMMAND VALUE
  
 ACFA     VFD    12/2000B,12/6,12/2030B,12/1,12/4 
 ACFB     DATA   C* ACFETCH - ERROR IN VALUE CONVERSION.* 
 CAD      SPACE  4,25 
**        CAD - CONVERT ASCII TO DISPLAY
* 
*         *CAD* CONVERTS THE ASCII CHARACTERS IN THE TEXT 
*         BUFFER TO DISPLAY CHARACTERS.  CONVERTING STARTS
*         WITH THE WORD AFTER THE HEADER WORD AND ENDS
*         WHEN *TEXTL* CHARACTERS HAVE BEEN CONVERTED.
*         THERE ARE SEVEN AND A HALF ASCII CHARACTERS PER 
*         WORD AND WHEN CONVERTED TO DISPLAY THERE WILL BE
*         TEN DISPLAY CHARACTERS PER WORD.
* 
*         ENTRY  X1 = ADDR OF HEADER PRECEDING TEXT AREA
*                X2 = TEXT LENGTH IN CHARACTERS 
*                B1 = 1 
* 
*         EXIT   THE TEXT BUFFER IS IN DISPLAY CODE.
*                X1 = ADDR OF HEADER PRECEDING TEXT AREA
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 7. 
*                A - 1, 2, 3, 7.
*                B - 1, 2, 3, 4, 6. 
* 
*         CALLS  NONE.
* 
*         MACROS NONE.
  
  
 CAD      SUBR               ENTRY/EXIT 
          SB3    X2          B3 = TEXT LENGTH IN CHARACTERS 
          SA2    X1          X2 = 1ST WORD -1 OF ASCII CODE 
          SX1    X1+1 
          SB4    60          SET SHIFT COUNT
          BX7    X7-X7       CLEAR X7 
          MX0    7           MASK X0 BY 7 BITS
          MX4    4           MASK X4 BY 4 BITS
          LX0    -1          POSITION MASK
* 
*         PROCESS NEXT FULL WORD OF ASCII CHARACTERS
* 
 CAD0     SA2    A2+1        FETCH NEXT ASCII WORD
          SB2    15          SET ASCII CHARACTER COUNT
          LE     B3,B0,CAD7  IF ALL CHARACTERS CONVERTED
          ZR     B4,CAD3     IF CONVERTED LINE READY TO STORE 
* 
*         CONVERT FULL CHARACTERS.
* 
 CAD1     BX3    X0*X2       SET X3 ASCII CHARACTER LEFT JUST 
          LX3    59-51       SHIFT ASCII CHARACTER RIGHT JUSTIFIED
          SB2    B2-2        DECREMENT ASCII CHARACTER COUNT
 CAD1.1   SB6    X3-140B
          SB4    B4-6        DECREMENT SHIFT COUNT
          NG     B6,CAD2     IF LEGAL ASCII CODE
          SX3    X3-40B 
 CAD2     SA3    X3+TCAD     CONVERT CHARACTER TO DISPLAY 
          BX3    X0*X3       MASK 
          LX3    8
          SB3    B3-B1       DECREMENT TOTAL CHARACTER COUNT
          LX3    B4          SHIFT X3 TO PROPER POSITION
          BX7    X7+X3
          LX2    59-51       POSITION X2 TO NEXT ASCII CHARACTER
          LE     B3,B0,CAD7  IF ALL CHARACTERS CONVERTED
          ZR     B2,CAD0     IF CURRENT ASCII WORD DONE 
          EQ     B2,B1,CAD4  IF CONVERTING SPLIT CHARACTER
          NZ     B4,CAD1     IF CONVERTED LINE NOT READY TO STORE 
* 
*         STORE WORD OF CONVERT DISPLAY CHARACTER.
* 
 CAD3     SA7    X1          STORE CONVERTED WORD 
          SB4    60          INITIALIZE DISPLAY CHARACTER COUNTER 
          BX7    X7-X7       CLEAR DISPLAY CHARACTER WORD 
          SX1    X1+1        INCREMENT ADDRESS TO WRITE DISPLAY WORD
          EQ     CAD1        CONTINUE CONVERTING
* 
*       CONVERT THE SPLIT CHARACTER.
* 
 CAD4     BX3    X4*X2       MASK UPPER PART  X3 = U00..00
          SA2    A2+B1       FETCH NEXT WORD  X2 = LXX..XX
          LX2    59-3        REPOSITION       X2 = XLXX..XX 
          BX5    -X4*X2      MASK LOWER PART  X5 = 0LXX..XX 
          BX3    X5+X3       COMBINE PARTS    X3 = ULXX..XX 
          BX3    X0*X3       MASK 7 BITS      X3 = UL00..00 
          LX3    59-51       RIGHT JUSTIFY    X3 = 00..00UL 
          SB2    14          RESET ASCII CHARACTER COUNT
          EQ     CAD1.1      CONVERT CHARACTER
* 
*         END CONVERTING. 
* 
 CAD7     SA7    X1          STORE CONVERTED WORD 
          BX7    X7-X7       CLEAR X7 
          SA7    X1+1        CLEAR NEXT WORD
          SA1    "BUFF" 
          EQ     CADX        RETURN 
  
          QUAL   *
 ACSTORE  SPACE  4,10 
**               ACSTORE IS A FORTRAN CALLABLE ROUTINE TO PLACE LEVEL 7 
*         PROTOCOL COMMAND IN THE TEXT AREA TO BE USED WITH 
*         *NETPUT*.  THE TEXT AREA TO BE USED MUST BE PRECEDED
*         BY A ONE WORD HEADER WHICH IS USED BY ACSTORE, *ACFETCH*, 
*         *APFETCH*, *APSTORE*.  THE LENGTH OF THE TEXT AREA IS 
*         ALSO SPECIFIED WITH AN ACSTORE CALL.
* 
*         CALL FORMAT 
*                CALL ACSTORE (BUFF,ICMND,LEN)
* 
*         ENTRY  (A1) = PARAMETER LIST ADDRESS
* 
*         PARAMETER LIST FORMAT 
*         BUFF   - ADDRESS OF HEADER WORD PRECEDING TEXT AREA 
*         ICMND  - INTEGER FORMAT COMMAND VALUE TO BE STORED
*         LEN    - THE LENGTH OF THE TEXT AREA EXCLUDING HEADER WORD
* 
*         BUFFER FORMAT 
**T BUFF  12/ 0,12/,12/,12/,12/ NCHARS
**T TEXT  16/ CMND,16/ PRMS,16/ ,8/ ,4/ 
**T,      20/ ,40/TEXT AND FURTHER PARAMETERS 
* 
*         NCHARS - NUMBER OF CHARACTERS CURRENTLY IN THE TEXT AREA
*         CMND   - ASCII CODED COMMAND
*         PRMS   - ASCII CODED NUMBER OF PARAMETERS 
* 
*         EXIT   *NCHARS* = 4 (2 FOR *CMND*, 2 FOR *PRMS*)
*                *CMND* = ASCII CODE OF *ICMND* 
*                *PRMS* = *00* (ZERO PARAMETERS IN TEXT AREA).
*                (BUFF) = 12/2003,12/MAX CHAR,12/2030,12/1,12/4.
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 1. 
* 
*         CALLS  CDZ=.
* 
*         MACROS SUBRL. 
  
  
 ACSTORE  SUBRL  (#BUFF,CMND,BUFL)
          SA1    CMND        FETCH COMMAND TO CONVERT 
          SB1    1
          RJ     =XCDZ       CONVERT COMMAND
          SA3    BUFL 
          SA1    "BUFF" 
          SA2    ACSA 
          MX0    -6          SET MASK IN X0 
          BX4    -X0*X6      MASK OFF ONE DISPLAY CHARACTER 
          SA4    TCDA+X4     CONVERT CHARACTER TO ASCII 
          LX6    0-6
          BX6    -X0*X6      MASK LAST CHARACTER
          SA5    TCDA+X6     CONVERT CHARACTER TO ASCII 
          MX6    -8 
          BX4    -X6*X4 
          BX5    -X6*X5 
          LX5    8-0         POSITION CHARACTER IN WORD 
          BX6    X5+X4       COMBINE BOTH ASCII CHARACTERS
          LX6    59-15       POSTION CHARACTERS IN WORD 
          SX4    30060B      ASCII CODE OF *00* IN PARAMETER COUNT
          LX4    43-15
          BX6    X4+X6       ADD PARAMETER COUNT
          MX0    -1          GET ODD NUMBER 
          BX7    X3 
          BX0    -X0*X3 
          LX7    3           MULTIPLED BY 8 
          AX3    1           DIVIDED BY 2 
          IX3    X0+X3
          SA6    X1+B1       STORE COMMAND BUFFER WORD
          IX7    X7-X3       MAXIMUM CHARACTERS (LEN*7.5) 
          SX6    X7-2044     CHECK FOR MAXIMUM BLOCK 2043 
          NG     X6,ACS1     IF WITHIN LIMIT
          SX7    2043        SET TO MAXIMUM NUMBER OF CHARACTERS
 ACS1     LX7    47-11
          BX7    X2+X7
          SA7    X1          SET BUFFER HEADER
          EQ     ACSTOREX    RETURN 
  
 ACSA     VFD    12/2000B,12/0,12/2040B,12/1,12/4 
  
          QUAL   *
 APFETCH  SPACE  4,10 
**               APFETCH IS A FORTRAN CALLABLE ROUTINE TO RETURN THE
*         NEXT PARAMETER ATTRIBUTE, QUALIFIER, TEXT LENGTH, AND TEXT
*         FROM THE TEXT AREA RETURNED FROM A *NETGET*.  APFETCH CAN 
*         ONLY BE CALLED AFTER *ACFETCH* OR ANOTHER APFETCH.  THE 
*         TEXT AREA USED MUST BE PRECEDED BY A ONE WORD HEADER
*         WHICH IS USED BY APFETCH, *ACFETCH*, *ACSTORE*, AND *APSTORE*.
*         THE PARAMETER ATTRIBUTE IS RETURNED IN INTEGER FORMAT AND 
*         IS RETURNED NEGATIVE WHEN NO MORE PARAMETERS ARE AVAILABLE. 
* 
*         CALL FORMAT 
*                CALL APFETCH (BUFF,ATTR,QUAL,TEXTL,TEXT) 
*           OR   AT = APFETCH (BUFF,ATTR,QUAL,TEXTL,TEXT) 
* 
*         ENTRY  (A1) = PARAMETER LIST ADDRESS
* 
*         PARAMETER LIST FORMAT 
*         BUFF   - ADDRESS OF HEADER WORD PRECEDING TEXT AREA 
*         ATTR   - INTEGER ATTRIBUTE VALUE RETURNED 
*         QUAL   - DISPLAY CODE QUALIFIER, LEFT JUSTIFIED, ZERO FILL
*         TEXTL  - LENGTH OF PARAMETER TEXT IN CHARACTERS 
*         TEXT   - TEXT STRING PORTION OF PARAMETER BEING RETURNED
* 
*         BUFFER FORMAT 
**T BUFF  12/ NPARAM,12/,12/,12/,12/
**T TEXT  12/,12/,12/ ATTR,6/ QL,18/ TXTLEN 
**T,      60/ TEXT AND FURTHER PARAMETERS 
* 
*         NPARAM - NUMBER OF PARAMETERS YET TO BE FETCHED 
*         ATTR   - DECIMAL DISPLAY CODED ATTRIBUTE VALUE
*         QL     - DISPLAY CODE PARAMETER QUALIFIER 
*         TXTLEN - DECIMAL DISPLAY CODED TEXT LENGTH
*         TEXT   - TEXT PORTION OF PARAMETER (*TXTLEN* IN LENGTH).
* 
*         EXIT   (X6) = PARAMETER ATTRIBUTE (SAME AS ATTR)
*                     = NEGATIVE WHEN NO FUTHER PARAMETERS ARE AVAILABLE
*                       OR AN NON-NUMERIC ATTRIBUTE OR TEXT LENGTH
*                (ATTR) = FETCHED PARAMETER ATTRIBUTE 
*                (QUAL) = FETCHED PARAMETER QUALIFIER 
*                (TEXTL) = LENGTH OF TEXT IN *TEXT* 
*                (TEXT) = RETURNED PARAMETER TEXT 
*                *BUFF* = UPDATED HEADER POINTS TO NEXT PARAMETER.
* 
*         USES   A - 1,2,3,4,5,6,7. 
*                B - 1,2,4,5,6,7. 
*                X - 0,1,2,3,4,5,6,7. 
* 
*         CALLS  MST, DXB=. 
* 
*         MACROS MESSAGE, SUBRL.
  
  
 APFETCH  SUBRL  (#BUFF,#ATTR,#QUAL,#TEXTL,#TEXT) 
          SA1    "BUFF" 
          SB1    1
          SA3    X1          GET BUFFER HEADER WORD 
          UX3,B7 X3 
          ZR     B7,APF4     IF NO PARAMETERS LEFT
          SA5    "ATTR" 
          LX3    59-35
          UX3,B2 X3          (B2) IS THE CHARACTER INDEX
          AX3    36-0 
          SB6    A3 
          SB4    -2*6        SET STRING LENGTH IN BITS
          SA2    X3+B6
          SB5    X5          SET ATTRIBUTE RETURN ADDRESS 
          RJ     MST         MOVE STRING TO TEXT AREA 
          SA4    "QUAL" 
          SB4    -1*6 
          SB5    X4          SET QUALIFIER RETURN ADDRESS 
          RJ     MST         MOVE STRING TO TEXT AREA 
          SA4    "TEXTL"
          SB4    -3*6 
          SB5    X4          SET TEXT LENGTH RETURN ADDRESS 
          RJ     MST         MOVE STRING TO TEXT AREA 
          MX5    18 
          SB6    B2+         SAVE CHARACTER INDEX 
          BX5    X5*X6
          ZR     X5,APF3     IF ERROR IN TEXT LENGTH
          RJ     =XDXB=      CONVERT TO BINARY
          SA1    "TEXT" 
          NZ     X4,APF3     IF ERROR IN TEXT LENGTH
          SA6    A6+         RETURN CONVERTED LENGTH
          SB2    B6 
          SB5    X1          SET TEXT RETURN ADDRESS
          ZR     X6,APF1     IF NO TEXT TO FETCH
          LX6    1
          SB4    X6 
          SA2    A2          RE-FETCH STRING BUFFER WORD
          LX6    1
          SB4    X6+B4       SET TEXT LENGTH * 6 (BITS) 
          SB4    -B4
          RJ     MST         MOVE STRING TO TEXT AREA 
          MX0    -12
          BX6    -X0*X6      CHECK IF ZERO BYTE TERMINATED
          ZR     X6,APF2     IF ZERO BYTE TERMINATED
 APF1     SX6    B0+
          SA6    B5+         TERMINATE TEXT 
 APF2     SA5    "ATTR" 
          MX0    12 
          SB6    B2          SAVE CHARACTER INDEX 
          SA5    X5          FETCH DISPLAY CODE ATTRIBUTE 
          BX5    X0*X5
          ZR     X5,APF3     IF ERROR IN ATTRIBUTE
          BX6    X5 
          SA6    A5 
          RJ     =XDXB=      CONVERT TO BINARY
          SA5    A5          RETURN WITH DISPLAY CODE OF ATTRIBUTE
          NZ     X4,APF3     IF ERROR IN ATTRIBUTE
          SA6    A5          RETURN CONVERTED ATTRIBUTE 
          SB2    A3 
          SX7    A2-B2
          LX7    47-11
          PX7    X7,B6
          AX7    36-12
          SB7    B7-B1
          PX7    X7,B7
          SA7    A3          REPLACE BUFFER HEADER
          EQ     APFETCHX    RETURN 
  
 APF3     MESSAGE  APFA,3,R 
 DEBUG$   IF     DEF,DEBUG$ 
  
*         START OF CONDITIONAL MODIFY CODE (*DEFINE DEBUG). 
  
          ABORT              ** DEBUGGING ABORT **
  
*         END OF CONDITIONAL MODIFY CODE. 
  
 DEBUG$   ENDIF 
 APF4     SA2    "ATTR"      GET ADDRESS OF ATTRIBUTE 
          BX7    X7-X7
          MX6    -1 
          PX7    X7,B0       SET NO REMAINING PARAMETERS
          SA6    X2          SET NEGATIVE ATTRIBUTE 
          SA7    A3+
          EQ     APFETCHX    RETURN 
  
 APFA     DATA   C* APFETCH - ERROR IN VALUE CONVERSION.* 
 MST      SPACE  4,10 
**        MST - MOVE STRING TO TEXT AREA. 
* 
*         MST MOVES CHARACTER STRINGS FROM A STRING BUFFER
*         TO A TEXT AREA.  THE STRING DOES NOT HAVE TO BE WORD
*         ALIGNED IN THE STRING BUFFER.  THE TEXT AREA MOVED TO IS
*         WORD-ALIGNED.  THE LAST WORD OF THE TEXT AREA IS LEFT 
*         JUSTIFIED AND ZERO FILLED.
* 
*         ENTRY  (A2) = ADDRESS OF THE WORD IN THE STRING 
*                       BUFFER CONTAINING THE START OF THE STRING 
*                (X2) = WORD CONTAINING THE START OF THE STRING 
*                (B2) = NUMBER OF BITS IN *UC* (1-60) 
*                (B4) = NEGATIVE LENGTH OF THE STRING IN BITS 
*                (B5) = ADDRESS OF THE TEXT AREA
* 
*         BUFFER FORMAT 
**T,BUFFER18/ UC,42/ STRING(1)
**T,      60/ STRING(2) 
**T,      30/ STRING(3),30/ TC
* 
*         UC     - UNUSED CHARACTERS IN WORD CONTAINING STRING BEGINNING
*         STRING - THE STRING TO BE MOVED TO THE TEXT AREA
*         TC     - UNUSED TRAILING CHARACTERS IN THE LAST WORD
* 
*         EXIT   (A2) = ADDRESS OF THE WORD IN THE STRING BUFFER
*                       CONTAINING THE END OF THE STRING
*                (X2) = WORD CONTAINING THE END OF THE STRING 
*                (B2) = NUMBER OF BITS IN STRING(3) 
*                (B5) = ADDRESS OF THE NEXT TEXT AREA WORD. 
* 
*         USES   A - 2,6. 
*                B - 2,3,4,5,6. 
*                X - 0,2,3,6,7. 
* 
*         CALLS  NONE.
* 
*         MACROS MXB. 
  
  
 MST2     MX0    -B4,X7 
          BX6    X0*X6
          SA6    B5          STORE LAST WORD OF TEXT (ZERO FILLED)
          AX2    B3 
          SB2    B3-B4       ADJUST BIT OFFSET FOR RETURN 
          SB5    B5+B1
          GT     B2,B0,MSTX  IF B2 IN RANGE (1 - 60)
          SB2    B2-B6
  
 MST      SUBR               ENTRY/EXIT 
          SB3    B2-60
          MX0    -B3,X7 
          LX2    B2          POSITION STRING BEGINING 
          BX6    X0*X2
          SB6    B3-B2       (SB6 -60)
          GE     B4,B3,MST2  IF ENOUGH TEXT MOVED 
          SA2    A2+B1
 MST1     LX2    B2          POSITION STRING WORD 
          BX3    -X0*X2 
          BX6    X3+X6
          GE     B4,B6,MST2  IF ENOUGH TEXT MOVED 
          SA6    B5 
          SB5    B5+B1
          SB4    B4-B6
          BX6    X0*X2
          GE     B4,B3,MST2  IF ENOUGH TEXT MOVED 
          SA2    A2+B1
          EQ     MST1        CONTINUE MOVE
  
          QUAL   *
 APSTORE  SPACE  4,10 
**               APSTORE IS A FORTRAN CALLABLE ROUTINE TO STORE THE NEXT
*         PARAMETER ATTRIBUTE, QUALIFIER, TEXT LENGTH, AND TEXT 
*         INTO THE TEXT AREA TO BE USED WITH *NETPUT*.  APSTORE CAN 
*         ONLY BE CALLED AFTER ACSTORE OR ANOTHER APSTORE.  THE 
*         TEXT AREA USED MUST BE PRECEDED BY A ONE WORD HEADER
*         WHICH IS USED BY APSTORE, *ACFETCH*, *ACSTORE*, AND *APFETCH*.
*         THE PARAMETER ATTRIBUTE SHOULD BE IN INTEGER FORMAT.  THE 
*         QUALIFIER AND SUPPLIED TEXT STRING MUST BE LEFT JUSTIFIED.
*         APSTORE RETURNS A *TRUE* VALUE (-1) WHEN
*         THE PARAMETER GIVEN WOULD NOT ENTIRELY FIT IN THE TEXT
*         AREA.  A CONTINUATION PARAMETER IS INSERTED IN THE
*         TEXT AREA TO INDICATE A CONTINUATION BLOCK WILL FOLLOW. 
*         IN THIS EVENT, THE BLOCK SHOULD BE SENT AND ANOTHER 
*         BLOCK BUILT WITH THE SAME COMMAND (ACSTORE) AND THE 
*         PARAMETER WHICH CAUSED THE CONTINUATION.  IF THE CONTINUATION 
*         FLAG WAS PREVIOUSLY SET A DAYFILE MESSAGE IS ISSUED AND 
*         THE CONTINUATION SET STATUS RETURNED. 
* 
*         CALL FORMAT 
*                CONTF = APSTORE (BUFF,ATTR,QUAL,TEXTL,TEXT)
* 
*         ENTRY  (A1) = PARAMETER LIST ADDRESS
* 
*         PARAMETER LIST FORMAT 
*         BUFF   - ADDRESS OF THE HEADER WORD PRECEDING THE TEXT AREA 
*         ATTR   - THE ATTRIBUTE VALUE TO BE STORED 
*         QUAL   - LEFT JUSTIFIED SINGLE CHARACTER QUALIFIER
*         TEXTL  - THE LENGTH OF THE TEXT PORTION OF THE PARAMETER
*         TEXT   - THE PARAMETER TEXT, LEFT JUSTIFIED CHARACTER ARRAY 
* 
*         BUFFER FORMAT 
**T BUFF  12/ NPARAM,12/ MAXL,12/,12/,12/ NCHARS
**T TEXT  16/ CMND,16/ PRMS,16/ ATTR,8/ QL,4/ TXTLEN (3 CHARACTERS) 
**T,      20/ TXTLEN,40/ TEXT AND FURTHER PARAMETERS
* 
*         NPARAM - NUMBER OF PARAMETERS CURRENTLY IN THE TEXT AREA
*         MAXL   - MAXIMUM NUMBER OF CHARACTERS ALLOWED IN THE TEXT 
*                AREA AS SET BY *ACSTORE* 
*         NCHARS - NUMBER OF CHARACTERS IN THE TEXT AREA
*         PRMS   - ASCII CODED NUMBER OF PARAMETERS 
*         ATTR   - ASCII CODED ATTRIBUTE VALUE
*         QL     - PARAMETER QUALIFIER
*         TXTLEN - LENGTH OF THE SUPPLIED PARAMETER TEXT
*                  (24 BITS, 3 CHARACTERS)
*         TEXT   - THE SUPPLIED PARAMETER TEXT. 
* 
*         EXIT   (X6) = -1 (*TRUE*) IF A CONTINUATION IS NEEDED 
*                     = 0 IF THE PARAMETER WAS STORED IN THE BUFFER.
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 1, 2, 3, 4, 5. 
* 
*         CALLS  CDA, CDZ=, MTS.
* 
*         MACROS MESSAGE, SUBRL.
  
  
 APSTORE  SUBRL  (BUFF,ATTR,QUAL,TEXTL,#TEXT) 
          SA1    BUFF 
          SB1    1
          UX4,B2 X1          (B2) IS CURRENT PARAMETER COUNT
          SB2    B2+B1
          SB3    B2-99
          MX0    -12
          BX2    -X0*X1 
          MX0    24 
          LX0    12 
          PL     B3,APS4     IF PARAMETER NOT TO BE ADDED 
          SA3    TEXTL
          AX4    36-0 
          IX4    X4-X2
          SX5    X3+6+6      NEED ROOM FOR THIS AND CONTINUATION
          IX4    X4-X5
          MI     X4,APS5     IF NO ROOM FOR THIS PARAMETER
          BX4    -X0*X1 
 APS1     SA1    ATTR        FETCH ATTRIBUTE TO CONVERT 
          SX2    X2+6 
          IX2    X2+X3
          PX6    X2,B2       SET NEW PARAMETER AND CHARACTER COUNTS 
          BX6    X4+X6
          SA6    BUFF        SAVE TEMPORARY NEW HEADER
          RJ     =XCDZ       CONVERT PARAMETER ATTRIBUTE
          SA3    QUAL 
          SA1    BUFF 
          SA2    APSB        CHECK IF CONTINUATION SET
          MX0    6
          BX3    X0*X3       EXTRACT QUALIFIER
          BX6    -X0*X6 
          BX6    X3+X6
          LX6    59-11       LEFT JUSTIFY ATTRIBUTE AND QUALIFIER 
          UX4,B3 X1 
          SX1    B3+1000D    FORCE 10XX PARAMETER COUNT 
          ZR     X2,APS2     IF NO CONTINUATION SET 
          SB2    99 
          PX7    X4,B2       SET BUFFER FULL STATUS 
          SA7    A1 
 APS2     SA6    A3 
          RJ     =XCDZ       CONVERT PARAMETER COUNT
          MX0    -6 
          BX4    -X0*X6 
          SA4    TCDA+X4
          LX6    0-6
          BX6    -X0*X6 
          SA5    TCDA+X6
          MX6    -8 
          BX4    -X6*X4 
          BX5    -X6*X5 
          LX5    8-0
          BX4    X5+X4
          LX4    43-15
          SA2    "BUFF" 
          MX0    16 
          LX0    -16
          SA2    X2+B1
          BX4    X0*X4
          BX2    -X0*X2 
          BX6    X2+X4
          SA6    A2          SET PARAMETER COUNT IN COMMAND BUFFER
          SA1    TEXTL
          RJ     =XCDZ       CONVERT TEXT LENGTH
          SA3    "BUFF" 
          SA1    QUAL 
          SA3    X3+
          MX0    18 
          LX6    41-17       POSITION TEXT LENGTH 
          BX4    -X0*X6 
          BX1    X0*X1
          BX1    X1+X4       MERGE ATTRIBUTE,QUALIFIER,TEXT LENGTH
          BX4    X4-X4       CLEAR REGISTER 
          SB2    60 
          SB4    6
          MX0    6
 APS2.1   BX6    X0*X1
          LX6    6
          SA2    TCDA+X6
          LX2    8
          AX2    8
          SB2    B2-8 
          LX2    B2 
          BX4    X2+X4
          LX1    6
          SB4    B4-1 
          NZ     B4,APS2.1
          BX1    X4 
          SB5    A3 
          LX3    59-35
          UX3,B2 X3          (B2) IS THE CHARACTER INDEX
          AX3    36-0        (X3) IS THE WORD INDEX 
          SA2    X3+B5
          SB4    -8*6        SET CHARACTER BIT COUNT
          RJ     =XMTS       MOVE TEXT TO STRING BUFFER 
          SA3    TEXTL
          ZR     X3,APS3     IF NO TEXT TO MOVE 
          SA1    "TEXT" 
          LX3    1
          SB4    X3 
          SA2    A6          READ STRING BUFFER LAST CHANGED
          LX3    1
          SB4    X3+B4
          SB4    -B4
          SA1    X1 
          RJ     CDA         CONVERT DISPLAY TO ASCII 
 APS3     SA1    BUFF 
          SA3    "BUFF" 
          SA3    X3+
          SB5    A3          RESET B5 VALUE 
          SX6    A6-B5       FORM NEW WORD INDEX
          LX6    47-11
          PX6    X6,B2       MERGE CHARACTER INDEX
          AX6    59-35
          MX0    36 
          LX0    12 
          SA2    APSB        GET CONTINUATION FLAG
          BX1    X0*X1
          BX7    X1+X6
          SA7    B5          SET NEW HEADER IN BUFFER 
          BX6    X2 
          MX7    0
          SA7    A2          CLEAR CONTINUATION FLAG
          EQ     APSTOREX    RETURN 
  
 APS4     ZR     B3,APS5     IF ROOM FOR CONTINUATION PARAMETER 
          MESSAGE  APSA,3,R 
          MX6    -1 
          EQ     APSTOREX    EXIT WITH CONTINUATION FLAGED
  
 APS5     SX6    /AP/CONT 
          SA6    ATTR        SET CONTINUATION ATTRIBUTE 
          BX7    X7-X7
          SA7    TEXTL       SET ZERO LENGTH TEXT 
          MX6    -1 
          SA6    APSB        SET CONTINUATION FLAG
          BX3    X7 
          BX4    -X0*X1 
          EQ     APS1        STORE CONTINUATION PARAMETER 
  
 APSA     DATA   C* APSTORE - CONTINUATION PREVIOUSLY SET.* 
 APSB     DATA   0           CONTINUATION FALSE ON NORMAL RETURN
 CDA      SPACE  4,25 
**        CDA - CONVERT DISPLAY TO ASCII
* 
*         *CDA* CONVERTS THE TEXT CHARACTERS FROM DISPLAY TO ASCII
*         AND THEN MOVES THE CONVERTED CHARACTERS INTO THE TEXT BUFFER. 
* 
*         ENTRY  (A1) = ADDRESS OF THE TEXT TO CONVERT AND MOVE 
*                (X1) = FIRST WORD OF THE TEXT TO CONVERT AND MOVE
*                (A2) = ADDRESS OF THE LAST WORD USED IN THE BUFFER 
*                (X2) = LAST WORD USED IN THE BUFFER
*                (B1) = 1 
*                (B2) = NUMBER OF BITS USED IN THE LAST WORD USED 
*                       IN THE BUFFER 
*                (B4) = NEGATIVE LENGTH OF THE TEXT TO MOVE IN BITS.
* 
*         EXIT   (A1) = ADDRESS OF THE NEXT TEXT WORD 
*                (X1) = NEXT TEXT WORD
*                (A6) = ADDRESS OF THE LAST WORD USED IN THE BUFFER 
*                (B2) = NUMBER OF BITS USED IN THE LAST WORD USED 
*                       IN THE BUFFER 
*                (B4) = NEGATIVE LENGTH OF THE TEXT TO MOVE IN BITS.
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 2, 3, 6.
*                B - 1, 2, 3, 4, 5, 6, 7. 
* 
*         CALLS  NONE.
* 
*         MACROS NONE.
  
  
 CDA      SUBR               ENTRY/EXIT 
          SB3    10          INITIALIZE DISPLAY CHARACTER COUNT 
          MX0    6
          SB6    53 
          SB7    60 
          EQ     CDA3        ENTER CONVERTION LOOP
  
 CDA1     GE     B2,B6,CDA4  IF NO ROOM TO STORE 8 BIT CHARACTER
          SB2    B2+8        INCREMENT BITS USED
          BX3    X0*X1       (X3)=1 CHAR,6 BITS,LEFT JUSTIFIED
          LX3    6           (X3)=1 CHAR,6 BITS,RIGHT JUSTIFIED 
          SA3    TCDA+X3     (X3)=1 CHAR,8 BITS,RIGHT JUSTIFIED 
          LX3    8           EXTRACT ONLY LAST 8 BITS 
          AX3    8
          SB5    B7-B2
          LX3    B5          POSITION CHARACTER IN WORD 
          LX1    6           POSITION TO NEXT DISPLAY CHARACTER 
          BX2    X2+X3       MERGE CHARACTER INTO WORD
          SB3    B3-1        DECREMENT DISPLAY CHARACTER IN WORD
          SB4    B4+6        DECREMENT CHARACTERS LEFT TO CONVERT 
          ZR     B4,CDA5     IF NO MORE CHARACTER TO CONVERT OR MOVE
 CDA2     NZ     B3,CDA3     IF MORE TO CONVERT 
* 
*         INCREMENT TO NEXT WORD OF TEXT TO CONVERT AND MOVE
* 
          SA1    A1+1        INCREMENT TEXT TO CONVERT
          SB3    10          INITIALIZE DISPLAY CHARACTER COUNT 
  
 CDA3     LT     B2,B7,CDA1  IF STILL MORE TO CONVERT AND MOVE
          BX6    X2 
          SA6    A2          STORE CONVERTED WORD 
          SA2    A2+B1       INCREMENT TO NEXT WORD TO FILL 
          SB2    0           INITIALIZE NUMBER OF BITS ALREADY USED 
          BX2    X2-X2
          EQ     CDA1        CONTINUE CONVERTING
* 
*         WHEN 8 BIT CONVERTED ASCII CHARACTER WILL NOT COMPLETLY 
*         FIT IN CURRENT BUFFER WORD
* 
 CDA4     BX3    X0*X1       (X3)= 1 CHAR,6 BITS,LEFT JUSTIFIED 
          LX1    6           POSITION X1 TO NEXT CHARACTER
          SB3    B3-1        DECREMENT DISPLAY CHARACTER IN WORD
          SB4    B4+6        DECREMENT CHARACTERS LEFT TO CONVERT 
          MX7    1
          AX0    X7,B2
          LX7    X0,B1
          BX0    X7*X0
          SB2    B7-B2       (B2)= # BITS LEFT IN WORD TO FILL
          LX3    6           (X3)= 1 CHAR,6 BITS,RIGHT JUSTIFIED
          SA3    TCDA+X3     (X3)= 1 CHAR,8 BITS,RIGHT JUSTIFIED
          LX3    8           EXTRACT ONLY LAST 8 BITS 
          AX3    8
          SB2    B2-8        (B2)= # BITS TO PUT IN NEXT WORD 
          BX6    X3 
          BX6    X0*X3       (X6)= CHARACTERS LEFT TO PUT IN WORD 
          LX6    B2 
          BX3    -X0*X3 
          BX6    X6+X2
          SA6    A2          STORE CONVERTED WORD 
          SA2    A2+1        INCREMENT TO NEXT WORD 
          SB2    -B2         (B2)= # BITS USED IN WORD
          SB5    B7-B2
          LX3    B5          POSITION BITS IN WORD
          BX2    X3 
          MX0    6           RESET MASK 
          NZ     B4,CDA2     IF MORE CHARACTER TO CONVERT OR MOVE 
* 
*         NO MORE CHARACTERS TO CONVERT OR MOVE TO TEXT BUFFER
* 
 CDA5     BX6    X2 
          SA6    A2          STORE CONVERTED WORD 
          SA1    A1+1        INCREMENT TEXT WORD
          EQ     CDAX        RETURN 
  
          END 
