*DECK C$SEND
          IDENT  C$SEND 
          TITLE  C$SEND - MCS INTERFACE FOR SEND
          MACHINE ANY,I 
          COMMENT MCS INTERFACE FOR SEND VERB 
          SST 
          B1=1
          SPACE  5
* 
**        C.SEND - MCS REQUEST FOR SEND VERB
* 
*         INPUT 
*                A0  FWA OF CD-NAME 
*                X0  33B WITH PHRASE NOT SPECIFIED
*                    34B WITH ESI 
*                    35B WITH EMI 
*                    36B WITH EGI 
*                    VALUE IN THE WITH IDENTIFIER 
*                X1  INTEGER VALUE IN ADVANCING PHRASE
*                    MNEMONIC CHARACTER IN ADVANCING PHRASE 
*                    34B IF PAGE WAS SPECIFIED
*                    0 IF ADVANCING WAS NOT SPECIFIED 
*                X4  0 IF ADVANCING WAS NOT SPECIFIED 
*                    2 ADVANCING BEFORE PAGE/MNEMONIC 
*                    3 ADVANCING AFTER PAGE/MNEMONIC
*                    6 ADVANCING BEFORE INTEGER/IDENTIFIER
*                    7 ADVANCING AFTER INTEGER/IDENTIFIER 
*                B4  MAXIMUM LENGTH OF CD IN CHARACTERS 
*                B5  0 NO FROM PHRASE 
*                    FWA OF FROM IDENTIFIER 
*                B6  0 NO FROM PHRASE 
*                    BCP OF FROM IDENTIFIER 
*                B7  0 NO FROM PHRASE 
*                    LENGTH OF FROM IDENTIFIER
* 
*         OUTPUT
*                NONE 
* 
*                            REGISTER USAGE (ALL OTHERS FREE) 
*                            X0 = EI
*                            X1 = ADVNCE
*                            X4 = FLAGS FOR SEND
*                            B4 = CD LENGTH (MAX) 
*                            B5 = FWA FROM IDENTIFIER 
*                            B6 = BCP FROM IDENTIFIER 
*                            B7 = LENGTH FROM IDENTIFIER
*                            A0 = FWA CD
          EXT    C.MCS1      CALC CDL AND CDLP
          EXT    C.MCS3 
          EXT    C.MCS2      CONVERT TEXT LENGTH
          EXT    C.MCS4      OUTPUT CD POST MORTEM
          EXT       C.PGMID 
          USE       /C.MCSPB/ 
 MCSPB    BSS       64
 CDADDR   BSS    1
          USE * 
 FLAGS    BSS    1
 EI       BSS    1           STORAGE FOR THE EI PARAMETER 
 ADVANCE  BSS    1           STORAGE FOR THE ADVANCE PARAMETER
 FREE     BSS    1           NUMBER OF FREE WORDS REMAINING IN MCSPB
 CDLP     BSS    1           TEMPORARY STORAGE FOR CDLP 
          ENTRY  C.SEND 
 C.SEND   DATA   0
          SX7    A0 
          SA7    CDADDR      SAVE CD ADDRESS FOR POST MORTEM
          BX6    X0 
          SA6    EI          SAVE EI PARAMETER
          BX6    X1 
          SA6    ADVANCE     SAVE ADVANCE PARAMETER 
          BX6    X4 
          SA6    FLAGS       SAVE FLAGS PARAMETER 
          SA1    C.SEND      C.MCS3 PARAMETER 
          RJ     =XC.MCS3    BUILD WORDS 3 AND 4 OF MCSPB 
          SX4    59          FREE WORDS LEFT IN MCPSP 
          RJ     =XC.MCS1    CALCULATE CDL IN X2 AND CDLP IN B2 
          BX6    X4 
          SA6    FREE        SAVE NUMBER OF FREE WORDS
          SX1    A0          X1 = CDA 
          LX1    18 
          BX5    X1+X2       X5 = CDA CDL 
          SA1    ADVANCE     X1 = ADVANCE 
          LX1    36 
          BX5    X5+X1       X5 = ADVANCE CDA CDL 
          SX1    7
          LX1    54 
          BX7    X5+X1       X7 = REQ ADVANCE CDA CDL 
          SA7    MCSPB+1     STORE INTO MCSPB WORD 1
          SX6    B2 
          SA6    CDLP        SAVE CDLP
          SB3    B0          ASSUME DL IS ZERO
          EQ     B5,L4       IF NO FROM, SKIP TEXT LENGTH TEST
  
  
*                            OBTAIN TEXT LENGTH FROM FIRST WORD OF CD 
*                            VERIFY TEXT LENGTH CONTAINS NUMERIC DIGITS 
*                            CONVERT NUMERIC DISPLAY TO BINARY
*                            IF TEXT LENGTH > FROM IDENTIFIER LENGTH
*                            THEN DL = -1 
*                            ELSE DL = FROM IDENTIFIER LENGTH 
  
  
*                            REGISTER USAGE ( ALL OTHERS FREE ) 
*                            X4 = FLAGS 
*                            B4 = CD LENGTH 
*                            B5 = FWA FROM IDENTIFIER 
*                            B5 = BCP FROM IDENTIFIER 
*                            B7 = LENGTH FROM IDENTIFIER
*                            A0 = FWA CD
  
  
          SA1    A0          DESTINATION COUNT, TEXT LENGTH, STATUS KEY 
          LX1    24          LEFT JUSTIFY TEXT LENGTH 
          RJ     =XC.MCS2    CONVERT TEXT LENGTH
          NG     X1,L2       JUMP IF CONVERSION FAILED
          SB3    X1          B3 = TEXT LENGTH ( DL )
          LE     B3,B7,L3    JUMP IF TEXT LENGTH LE FROM LENGTH 
  
 L2       SB3    -1          CHANGE DL TO -1
  
*                            CALCULATE FDWA AND FDC 
*                            B5 CONTAINS FWA OF FROM IDENTIFIER 
*                            B6 CONTAINS BCP OF FROM IDENTIFIER 
  
*                            REGISTER USAGE (ALL OTHERS FREE) 
*                            B4 = MAXIMUM CD LENGTH 
*                            B5 = FWA FROM IDENTIFIER 
*                            B6 = BCP FROM IDENTIFIER 
*                            B7 = LENGTH FROM IDENTIFIER
*                            A0 = FWA CD
  
 L3       SB2    10 
          LT     B6,B2,L4    ALL DONE IF BCP < 10 
          SX3    B6          X3 = BCP 
          SX5    314632B     X5 = (1/10)*2**20
          DX5    X5*X3       X5 = (BCP/10)*2**20
          AX5    20          X5 = BCP/10
          SB5    B5+X5       B5 = NEW FWA 
          IX7    X5+X5       X7 = 2*(BCP/10)
          LX5    3           X5 = 8*(BCP/10)
          IX6    X5+X7       X6 = 10*(BCP/10) 
          IX3    X3-X6       X3 = BCP-10*(BCP/10) 
          SB6    X3          B6 = NEW BCP 
  
*                            BUILD WORD 2 OF PARAMETER BLOCK
*                            X4 CONTAINS FLAGS
*                            B5 CONTAINS FDWA OR 0
*                            B6 CONTAINS FDC OR 0 
*                            B7 CONTAINS DL OR -1 
  
 L4       SX7    B3          X7 = DL SIGN EXTENDED
          MX0    -18
          BX7    -X0*X7      X7 = DL
          SX3    B5          X3 = FDWA
          BX3    -X0*X3 
          LX3    18 
          BX7    X7+X3       X7 = FDWA DL 
          SX3    B6          X3 = FDC 
          BX3    -X0*X3 
          LX3    36 
          BX7    X7+X3       X7 = FDC FDWA DL 
          SA3    EI          X3 = EI
          MX0    -6 
          BX3    -X0*X3      EI SOMETIMES HAS LEADING ZEROES
          LX3    42 
          BX7    X7+X3       X7 = EI FDC FDWA DL
          SA4    FLAGS       X4 = FLAGS 
          LX4    54 
          BX7    X7+X4       X7 = FLAGS 0 EI FDC FDWA DL
          SA7    MCSPB+2     STORE MCSPB WORD 2 
  
*                            CALCULATE DLP
*                            IF DL = -1 THEN DLP = 0
*                            CALCULATE WORDS TO CONTAIN DL CHARACTERS 
*                            N = (LENGTH + BCP + 9) / 10
*                            IF N LE FREE 
*                            THEN DLP = N 
*                            ELSE DLP = 0 
  
          SB4    B0          DLP = 0
          NG     B3,L5       JUMP IF DL = -1
          SB2    B6+B7       B2 = LENGTH + BCP
          SX3    B2+9        X3 = LENGTH + BCP + 9
          SX1    314632B     X1 = (1/10)*2**20
          DX1    X1*X3       X1 = (X3/10)*2**20 
          AX1    20          X1 = (X3/10) 
          SA4    FREE        X4 = NUMBER OF FREE WORDS
          IX3    X4-X1       X3 = FREE - N
          NG     X3,L5       JUMP IF N WORDS WONT FIT 
          SB4    X1          DLP = N
  
  
 L5       SA1    CDLP 
          SB3    X1          B3 = CDLP
*                            CALCULATE WC = 4 + CDLP + DLP
*                            B3 = CDLP
*                            B4 = DLP 
  
          SB2    B3+B4       B2 = CDLP + DLP
          SX6    B2+4        X6 = CDLP + DLP + 4
  
  
*                            BUILD WORD 0 OF PARAMETER BLOCK
*                            X6 = WC
*                            ES = 0 
*                            C = 0
*                            RT = 2B
  
  
          LX6    18          POSITION WC
          MX7    1
          LX7    14          RT = 2B, IE. BIT 13 = 1
          BX6    X6+X7
          SA6    MCSPB       STORE MCSPB WORD 0 
  
*                MOVE DLP WORDS TO MCSPB
*                            B4 = DLP 
*                            B5 = FDWA
  
          EQ     B4,L7       JUMP IF DLP = 0
          SX4    B3+MCSPB+5 
          SB6    B0          LOOP INDEX = 0 
 L6       SA5    B5+B6       READ FROM THE FROM IDENTIFIER
          BX6    X5 
          SA6    X4+B6       STORE INTO PARAMETER BLOCK 
          SB6    B6+B1       INCREMENT LOOP INDEX 
          LT     B6,B4,L6    STOP WHEN B6 = DLP 
 L7       BSS    0
          IFC    EQ,/"OSNAME"/SCOPE / 
          CALLSS OP.MCS1,MCSPB,R
          ELSE
          CALLSS OP.MCS2,MCSPB,R
          ENDIF 
          RJ     =XC.MCS4    OUTPUT CD POST MORTEM
          EQ     C.SEND 
          END 
