*DECK     MNS 
          IDENT  MNS
 MNS      TITLE  MNS - MOVE NEXT STRING.
          SST 
          SYSCOM B1 
          ENTRY  MNS
          SPACE  4
**        MNS - MOVE NEXT STRING. 
* 
*         MNS CONCATENATES PROTOCOL DATA FROM TEMPORARY BUFFER
*         TO CONNECTION BUFFER BY ASCII CHARACTERS. 
* 
*         CALL FORMAT 
*         MNS(SBUF,SCHARL,DBUF,OCHARL)
*                SBUF - SOURCE BUFFER.
*                SCHARL - SOURCE LENGTH IN CHARACTERS.
*                DBUF - DESTINATION BUFFER (BASED ARRAY POINTER). 
*                OCHARL - OLD LENGTH IN CHARACTERS. 
* 
*         EXIT   MOVE COMPLETED.
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 2, 3, 4.
*                B - 1, 2, 3, 4, 6. 
* 
*         CALLS  MDT. 
* 
*         NOTE   MNS ASSUMED OCHARL+SCHARL IS WITHIN THE DBUF.
  
  
 MNS      SUBR               ENTRY/EXIT 
          SX0    A1          SAVE FWA OF PARAMETER LIST 
          SB1    1
          SA3    X1          SOURCE 
          SA2    A1+B1       ADDRESS OF SOURCE LENGTH 
          SA4    X2          SOURCE LENGTH
          LX4    3           MULTIPLED BY 8 ( 0 BITS PER CHARACTER) 
          SB4    X4          NUMBER OF BITS IN SOURCE 
          SB6    60 
          SA2    A2+B1       ADDRESS OF DESTINATION BUFFER POINTER
          SA4    A2+B1       ADDRESS OF DESTINATION LENGTH
          SA4    X4          DESTINATION LENGTH IN ASCII CHARACTERS 
          LX4    3           LENGTH IN BITS 
          SA2    X2          FWA OF DESTINATION 
          BX5    X4 
          SX6    B6 
          IX6    X4/X6       DESTINATION LENGTH IN WORDS
          SB7    X2 
          SB7    B7+X6       LWA OF DESTINATION 
          SB3    B0          BEGINNING POSITION OF SOURCE 
          SA1    B7 
          SX7    B6 
          IX7    X6*X7       CALCULATE REMAINING BITS 
          IX4    X5-X7
          SB2    X4          NUMBER OF BITS IN DESTINATION
          RJ     MDT         MOVE DATA
          EQ     MNSX        EXIT 
 MDT      SPACE  4,15 
**        MDT -  MOVE DATA. 
* 
*         ENTRY  (A1)/(X1) = DESTINATION ADDRESS. 
*                (A3)/(X3) = SOURCE ADDRESS.
*                (B2) = NUMBER OF BITS IN DESTINATION.
*                (B3) = BEGINNING BIT POSITION IN SOURCE. 
*                (B4) = TOTAL NUMBER OF BITS. 
*                (B7) = DESTINATION ADDRESS.
*                (B6) = NUMBER OF BITS PER WORD.
* 
*         USES   A - 3, 6, 7. 
*                B - 2, 3, 4, 5, 6, 7.
*                X - 0, 1, 3, 6, 7. 
  
  
*         MOVE SOURCE DATA TO DESTINATION ON WORD BOUNDARY. 
  
 MDT4     BX7    X3 
          SB4    B4-B6
          SA7    B7 
          SA3    A3+B1       NEXT WORD
          SB7    B7+1 
          GT     B4,MDT4     IF MORE DATA TO MOVE 
  
 MDT      SUBR               ENTRY/EXIT 
          LE     B4,MDTX     IF NO DATA TO MOVE 
          NZ     B2,MDT1     IF MOVE TO MIDDLE OF WORD
          ZR     B3,MDT4     IF MOVE FROM BEGINNING OF WORD 
 MDT1     SB2    B2-B1
          MX0    1
          SB4    B4+B2
          ZR     B3,MDT2     IF MOVE FROM BEGINNING OF WORD 
  
*         MOVE SOURCE DATA FROM MIDDLE OF WORD
*         TO DESTINATION ON WORD BOUNDARY.
  
          SB2    B6-B3
          SB2    B2-B1
          LX1    B3,X3
          SB3    B0+
          SA3    A3+B1       NEXT WORD
  
*         MOVE SOURCE DATA FROM WORD BOUNDARY 
*         TO MIDDLE OF DESTINATION WORD.
  
 MDT2     AX4    B2,X0
          SB2    B2+B1
          BX7    X4*X1
          SB5    B6-B2
 MDT3     LX3    B5,X3       MERGE TO LAST PORTION
          BX6    -X4*X3 
          BX7    X6+X7
          SA7    B7 
          BX7    X4*X3       REMAINDER
          SB7    B7+B1
          SB4    B4-B6
          SA3    A3+B1       NEXT WORD
          GT     B4,B2,MDT3  IF MORE DATA TO MOVE 
          LE     B4,MDTX     IF COMPLETED 
          SA7    B7          MOVE LAST WORD 
          EQ     MDTX        RETURN 
  
          END 
