*DECK C$RECVE 
          IDENT  C$RECVE
          TITLE  C$RECVE - MCS INTERFACE FOR RECEIVE
          MACHINE ANY,I 
          COMMENT MCS INTERFACE FOR RECEIVE VERB
          SST 
          B1=1
          SPACE  5
* 
**        C.RECVE - MCS REQUEST FOR RECEIVE VERB
* 
*         INPUT 
*                A0  FWA CD 
*                B3  0 NO NO DATA 
*                    1 NO DATA
*                B4  0 RECEIVE MESSAGE
*                    1 RECEIVE SEGMENT
*                B5  FWA INTO IDENTIFIER
*                B6  BCP INTO IDENTIFIER
*                B7  LENGTH INTO IDENTIFIER 
* 
*         OUTPUT
*                NONE 
* 
          EJECT 
          EXT    DEBUG
          EXT    C.MOVN 
          EXT    C.MCS3      PROGRAM-ID AND CBLNO UTILITY 
          EXT    C.MCS5      INPUT CD POST MORTEM 
          USE    /C.MCSPB/
 MCSPB    BSS    64 
 CDADDR   BSS    1
          USE    *
 MOVEFWA  BSS    1
 MOVEBCP  BSS    1
          ENTRY  C.RECVE
 C.RECVE  DATA   0
          SA1    C.RECVE
          RJ     =XC.MCS3    PROGRAM-ID CBLNO *APPLE UTILITY
  
* A0 FWA CD 
* B4 MESSAGE/SEGMENT FLAG 
* B5 FWA INTO 
* B6 BCP INTO 
* B7 LENGTH INTO
  
*                CALCULATE FDWA IN B5 
*                CALCULATE FDC IN B6
*                B5 CONTAINS FWA OF RECEIVING IDENTIFIER
*                B6 CONTAINS BCP OF RECEIVING IDENTIFIER
*                ADJUST B5 AND B6 SUCH THAT B6 < 10 
  
          SB2    10 
          LT     B6,B2,L1    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 = FWA + BCP/10 = 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 
  
* A0 FWA CD 
* B4 MESSAGE/SEGMENT FLAG 
* B5 FWA INTO (ADJUSTED)
* B6 BCP INTO (ADJUSTED)
* B7 LENGTH INTO
  
 L1       SX6    B7          X6 = DL
          SX1    B5          X1 = FDWA
          BX7    X1 
          SA7    MOVEFWA     SAVE FWA OF RECEIVER IN CASE OF MOVE 
          MX0    42 
          BX1    -X0*X1 
          LX1    18 
          BX6    X6+X1       X6 = FDWA DL 
          SX1    B6          X1 = FDC 
          BX7    X1 
          SA7    A7+B1       SAVE BCP IN MOVEBCP
          LX1    36 
          BX6    X6+X1       X6 = FDC FDWA DL 
          SX1    B4          X1 = 1 IF RECEIVE SEGMENT
          LX1    57 
          BX6    X6+X1
          SX1    B3          NO DATA FLAG 
          LX1    53 
          BX6    X6+X1       X6 = FLAGS 0 EI=0 FDC FDWA DL
          SA6    MCSPB+2     STORE MCSPB WORD 2 
  
*                BUILD MCSPB WORD 1 
*                REQ = 6
*                ADVANCE = 0
*                CDA = A0 
*                CDL = 9
  
          SA5    =06000000000000000011B 
          SX7    A0          X7 = CD ADDRESS
          SA7    CDADDR      SAVE CD ADDRESS
          LX7    18 
          BX6    X5+X7
          SA6    A6-B1       STORE MCSPB WORD 1 
  
*                BUILD MCSPB WORD 0 
*                WC = 4 + 9 + 1 = 14
  
          SA5    =00000000000016020000B 
          BX6    X5 
          SA6    A6-B1       STORE MCSPB WORD 0 
  
*                MOVE 9 WORDS OF CD TO MCSPB +5 
  
          SB2    B0          LOOP INDEX = 0 
          SB3    9           B3 = 9 
          SX2    MCSPB+5     X2 = STARTING LOCATION 
 L2       SA3    A0+B2       READ FROM CD 
          BX6    X3 
          SA6    X2+B2       STORE INTO PARAMETER BLOCK 
          SB2    B2+B1       INCREMENT LOOP INDEX 
          LT     B2,B3,L2    STOP WHEN B2 = 9 
  
*                MOVE FIRST WORD OF RECEIVING FIELD TO MCSPB+14 
  
          SA1    B5          X1 = FIRST WORD
          BX6    X1 
          SA6    A6+B1       STORE INTO MCSPB+14
  
 L3       BSS    0
          IFC    EQ,/"OSNAME"/SCOPE / 
          CALLSS OP.MCS1,MCSPB,R
          ELSE
          CALLSS OP.MCS2,MCSPB,R
          ENDIF 
          RJ     =XC.MCS5    INPUT CD POST MORTEM 
          NE     B2,B1,L4 
  
*                NO ERRORS IN POST MORTEM 
*                THE MESSAGE (IF ANY) IS NOW IN THE 
*                PARAMETER BLOCK STARTING AT MCSPB+3
*                COBOL MUST MOVE THE MESSAGE TO THE 
*                RECEIVE INTO IDENTIFIER.  MCSPB+1
*                CONTAINS THE NUMBER OF CHARACTERS TO 
*                MOVE.  MESSAGES GREATER THAN 610 
*                CHARACTERS ARE STORED INTO THE RECEIVING 
*                FIELD DIRECTLY BY MCS. 
  
          SA1    MCSPB+1     X1 = NUMBER OF CHARACTERS TO MOVE
          SB7    X1          B7 = NUMBER OF CHARACTERS TO MOVE
          EQ     B7,L4       JUMP IF NO MOVE IS REQUIRED
          SA1    MOVEFWA
          SB3    X1          B3 = FWA DESTINATION 
          SA1    A1+B1
          SB4    X1          B4 = BCP DESTINATION 
          SB5    MCSPB+3     B5 = FWA ORIGIN
          SB6    B0          B6 = BCP ORIGIN
          RJ     =XC.MOVN 
  
 L4       SA1    MCSPB+2     X1 = NO DATA CONTROL WORD
          SB3    X1          PASS B3 BACK TO CALLING PROGRAM
          EQ     C.RECVE
          END 
