*DECK GMOVVG
          IDENT  GMOVVG 
          TITLE  GMOVVG - GENERATE VG2XX MOVES
  
          MACHINE  ANY,I
          SST 
          COMMENT  GENERATE VG2XX MOVES 
          SPACE  4
**        GMOVVG - GENERATE VG2XX MOVES 
* 
* VG2AN   LINK   CGVG2AN
* VG2RA   LINK   CGVG2RA
* VG2SA   LINK   CGVG2SA
* AN2VG   LINK   CGAN2VG
* 
*         REGB = DNAT POINTER TO SOURCE.
*         REGC = DNAT POINTER TO DESTINATION
* 
*         GENERATES CODE TO PERFORM THE INDICATED MOVE. 
  
  
  
*      COMDECKS 
  
  
  
  
  
 CONTROL  OPSYN  NIL
  
  
  
  
*CALL CCT 
  
          EJECT 
 GMOVVG   MODULE
  
*      REGTABLE EQUATES 
  
  
 MOVEREGA EQU    REGB 
 MOVEREGB EQU    REGC 
 MOVEREGD EQU    REGQ 
 MOVEREGE EQU    REGR 
 MOVEREGF EQU    REGS 
 MOVEREGM EQU    REGM 
  
*      VIRTUAL REGISTER EQUATES 
  
 VREGA    EQU    VREG1
 VREGB    EQU    VREG2
 VREGC    EQU    VREG3
 VREGD    EQU    VREG9
 VREGE    EQU    VREG5
 VREGF    EQU    VREG6
 VREGG    EQU    VREG7
 VREGH    EQU    VREG8
 VREGI    EQU    VREG9
 VREGJ    EQU    VREG10 
 VREGK    EQU    VREG11 
 VREGL    EQU    VREG12 
 VREGU    EQU    VREG16 
 VREGV    EQU    VREG17 
 VREGW    EQU    VREG18 
 VREGX    EQU    VREG4
 VREGAC   EQU    VREG1
  
*      FIXED TABLE EQUATES
  
 LABLNM2  EQU    T19
 LABLNUM  EQU    T16
  
*      MISCELLANEOUS EQUATES
  
  
*      LINKAGE FROM CALLING ROUTINES IN OTHER MODULES 
  
 VG2AN    KNIL   CGVG2AN
 VG2RA    KNIL   CGVG2RA
 VG2SA    KNIL   CGVG2SA
 AN2VG    KNIL   CGAN2VG
  
*      LINKAGE TO CALLED ROUTINES IN OTHER MODULES
  
 AN2AN    LINK   CGAN2AN     * TO GANMOVE 
 SETBREG  LINK   CGSETB4     * TO GMOVSUB 
 GETSZVG  LINK   CGGTSZV     * TO GMOVSUB 
 SETBXPK  LINK   CGSBXPK     * TO GMOVSUB 
 SETXREG  LINK   CGSETXW
 SUBLOAD  LINK   SUBLOAD     * TO GSUBSC
 SUBREF   LINK   SUBREF 
  
*      SYMBOLIC PARAMETER DEFINITIONS 
  
 BLANKS   SETSY  (EXT$OF,C.BLANK) 
 LOCLABL  SETSY  (LOCAL$OF,LABLNUM) 
 LOCLBLE  SETSY  (LOCAL$OF,LABLNM2) 
 RECADDR  SETSY  (FWA$OF,MOVEREGB)
 SRCADDR  SETSY  (FWA$OF,MOVEREGA),ADOFSET
 TMPBFAD  SETSY  (EXT$OF,C.BUFF)
          SPACE  4
          LISTSEC  VG2AN
          TITLE  VG2AN - VARIABLE GROUP TO ALPHANUMERIC MOVE PROCESSOR
************************************************************************
*                                                                      *
** NAME- VARIABLE GROUP TO ALPHANUMERIC MOVE PROCESSOR                 *
*                                                                      *
** PURPOSE-                                                            *
*      GENERATE CODE TO MOVE A VARIABLE LENGTH GROUP (ONE THAT HAS A   *
*      SUBORDINATE ITEM WITH AN OCCURS DEPENDING ON CLAUSE).           *
*                                                                      *
** FIXED CELLS USED-                                                   *
*         JUSTFLG-  SET NONZERO IF RECEIVING FIELD IS JUSTIFIED        *
*         RECBCP-   BCP OF RECEIVING FIELD                             *
*         RECSIZE-  SIZE IN CHARS OF RECEIVING FIELD                   *
*         RECSUBS-  SET NON-ZERO AT BEGINNING OF GMOVE IF RECEIVING    *
*                   FIELD IS SUBSCRIPTED  (= GSCODE FIELD OF MOVEREGB) *
*         SENDBCP-  BCP OF THE SOURCE FIELD.                           *
*         SENDSIZE- SIZE IN CHARS OF THE SOURCE FIELD.                 *
*                                                                      *
************************************************************************
  
 VG2AN    EGO    2
  
*      EXTRACT INFORMATION NECESSARY FOR THE DECISION PROCESS AND FOR 
*      CODE GENERATION
          MOVEZ   0,ADOFSET 
  
          MOVEZ  (BCPOF,MOVEREGA),SENDBCP 
          MOVEZ  (BYTLENOF,MOVEREGA),SENDSIZE 
          MOVEZ  (BCPOF,MOVEREGB),RECBCP
          MOVEZ  (BYTLENOF,MOVEREGB),RECSIZE
          MOVEZ  (JUSTOF,MOVEREGB),JUSTFLG
  
*      IF RECEIVING FIELD IS SUBSCRIPTED- GENERATE CODE ELSEWHERE 
*      NOTICE THIS ROUTINE EXPECTS RECSUBS TO CONTAIN THE GSCODE FIELD
*      OF MOVEREGB ON ENTRY 
  
          IFZ    (RECSUBS,NE,0),VG2SA 
  
          IFZ    (SENDSIZE,GT,RECSIZE),VG2AN400 
          IFZ    (JUSTFLG,NE,0),VG2AN300
  
*********************************************************************** 
*      GENERATE CODE TO MOVE A VARIABLE-SIZE GROUP FIELD TO AN         *
*      UNJUSTIFIED RECEIVING FIELD.  THE MAXIMUM SIZE OF THE SOURCE    *
*      FIELD IS LESS THAN THE SIZE OF THE RECEIVING FIELD              *
************************************************************************
  
*      GENERATE CODE TO CALCULATE THE SIZE OF THE SOURCE FIELD
  
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
  
*      SET X2 = TO NUMBER OF BLANKS TO APPEND 
  
          NOTE   VG2AN200 
          SUBZ   0,RECSIZE,RECSIZE
          GEN    SXXPK,(VREGOF,VREGB),VREGA,RECSIZE 
  
*      SET B7 TO NUMBER OF CHARS TO MOVE
  
          GEN    SBXPB,(VREGOF,VREGC),VREGA 
  
*      SET B3 TO RECEIVING FIELD ADDRESS
  
          GEN    SBBPK,(VREGOF,VREGD),,RECADDR
  
*      SET B4 TO BCP OF RECEIVING FIELD 
  
          MOVEZ  RECBCP,P1
          CALLZ  SETBREG
          MOVEZ  VREGX,VREGE
  
*      SET B5 TO ADDRESS OF SOURCE FIELD
  
          GEN    SBBPK,(VREGOF,VREGF),,SRCADDR
  
*      SET B6 TO BCP OF SOURCE FIELD
  
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBREG
  
*      CALL CBMOVE TO DO MOVE 
  
          GENOBJ N=C.MOVN,I=(VREGD,VREGE,VREGF,VREGX,VREGC,VREGB) 
          RETURN
          SPACE  4
************************************************************************
*         GENERATE CODE TO MOVE A VARIABLE-SIZE GROUP FIELD TO A       *
*      JUSTIFIED RECEIVING FIELD.  THE MAXIMUM SIZE OF THE SOURCE FIELD*
*      IS LESS THAN THE SIZE OF THE RECEIVING FIELD                    *
************************************************************************
  
 VG2AN300 LABEL 
  
*      GENERATE CODE TO CALCULATE THE SIZE OF THE SOURCE FIELD
  
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
  
*      SET X2 = TO NUMBER OF BLANKS TO PREFIX 
  
          NOTE   VG2AN300 
          SUBZ   0,RECSIZE,RECSIZE
          GEN    SXXPK,(VREGOF,VREGB),VREGA,RECSIZE 
          GEN    COMPL,(VREGOF,VREGC),,VREGB
  
*      SET B7 TO NUMBER OF CHARS TO MOVE
  
          GEN    SBXPB,(VREGOF,VREGD),VREGA 
  
*      SET B3 TO RECEIVING FIELD ADDRESS
  
          GEN    SBBPK,(VREGOF,VREGE),,RECADDR
  
*      SET B4 TO BCP OF RECEIVING FIELD 
  
          MOVEZ  RECBCP,P1
          CALLZ  SETBREG
          MOVEZ  VREGX,VREGF
  
*      SET B5 TO ADDRESS OF SOURCE FIELD
  
          GEN    SBBPK,(VREGOF,VREGG),,SRCADDR
  
*      SET B6 TO BCP OF SOURCE FIELD
  
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBREG
  
*      CALL CBMOVE TO DO MOVE 
  
          GENOBJ N=C.MOVN,I=(VREGE,VREGF,VREGG,VREGX,VREGD,VREGC) 
          RETURN
          SPACE  4
*      BEGIN PROCESSING VARIABLE-SIZE GROUP SOURCE FIELDS WHOSE MAXIMUM 
*      SIZE IS GREATER THAN THE SIZE OF THE RECEIVING FIELD 
  
 VG2AN400 LABEL 
          IFZ    ((ROOTLNOF,MOVEREGA),LE,RECSIZE),VG2AN500
          IFZ    (JUSTFLG,NE,0),VG2AN600
  
************************************************************************
*      GENERATE CODE TO MOVE A VARIABLE-SIZE GROUP FIELD TO AN         *
*      UNJUSTIFIED RECEIVING FIELD.  THE ROOT LENGTH (= THE MAXIMUM    *
*      SIZE OF THE GROUP ITEM - THE MAXIMUM SIZE OF THE ITEM CONTAINING*
*      THE OCCURS DEPENDING ON CLAUSE) OF THE SOURCE FIELD IS GREATER  *
*      THAN THE RECEIVING FIELD SIZE                                   *
************************************************************************
  
*      NOTICE THAT SINCE NONE OF THE "VARIABLE-SIZE" PART OF THE SOURCE 
*      FIELD IS TO BE MOVED, WE CAN CALL AN2AN TO GERERATE THE MOVE 
  
          NOTE   VG2AN400 
          CALLZ  AN2AN
          RETURN
          SPACE  4
*      PROCESS VARIABLE-SIZE GROUP SOURCE FIELD WHOSE SIZE MAY BE 
*      GREATER, EQUAL TO OR LESS THAN THE SIZE OF THE RECEIVING FIELD 
  
 VG2AN500 LABEL 
          IFZ    (JUSTFLG,NE,0),VG2AN600
  
************************************************************************
*      GENERATE CODE TO MOVE A VARIABLE-SIZE GROUP SOURCE FIELD TO AN  *
*      UNJUSTIFIED RECEIVING FIELD.  THE SIZE OF THE SOURCE FIELD MAY  *
*      BE LESS THAN, GREATER THAN OR EQUAL TO THE SIZE OF THE RECEIVING*
*      FIELD                                                           *
************************************************************************
  
*      GENERATE CODE TO CALCULATE THE SIZE OF THE SOURCE FIELD
  
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
  
*      SET X2 = TO NUMBER OF BLANKS TO APPEND 
  
          NOTE   VG2AN500 
          SUBZ   0,RECSIZE,RECSIZE
          GEN    SXXPK,(VREGOF,VREGB),VREGA,RECSIZE 
          GEN    HOLDR,VREGB
          MOVEZ  (LOCLAB,LABLNUM),LABLNUM 
          GEN    NG$,VREGB,LOCLABL
  
*      SS\SR CASE 
  
  
*      SET X2 TO NUMBER OF BLANKS TO APPEND (= 0) 
  
          GEN    MASK,VREGB 
  
*      SET B7 TO NUMBER OF CHARS TO MOVE
  
          SUBZ   0,RECSIZE,P1 
          CALLZ  SETBREG
          MOVEZ  VREGX,VREGC
          GEN    HOLDR,VREGC
  
*      JUMP AROUND SS< SR CODE
  
          MOVEZ  (LOCLAB,LABLNM2),LABLNM2 
          GEN    EQ$,,,LOCLBLE
  
*      SS<SR CASE 
  
          GEN    LABEL$,LOCLABL 
  
*      SET B7 TO NUMBER OF CHARS TO MOVE
  
          GEN    SBXPB,VREGC,VREGA
  
*      FINISH SETTING UP FOR AND CALL C.MOVE
  
          GEN    LABEL$,LOCLBLE 
  
*      SET B3 TO RECEIVING FIELD ADDRESS
  
          GEN    SBBPK,(VREGOF,VREGD),,RECADDR
  
*      SET B4 TO BCP OF RECEIVING FIELD 
  
          MOVEZ  RECBCP,P1
          CALLZ  SETBREG
          MOVEZ  VREGX,VREGE
  
*      SET B5 TO ADDRESS OF SOURCE FIELD
  
          GEN    SBBPK,(VREGOF,VREGF),,SRCADDR
  
*      SET B6 TO BCP OF SOURCE FIELD
  
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBREG
  
*      CALL CBMOVE TO DO MOVE 
  
          GENOBJ N=C.MOVN,I=(VREGD,VREGE,VREGF,VREGX,VREGC,VREGB) 
          GEN    RFREE,VREGB,VREGC
          RETURN
          SPACE  4
************************************************************************
*      GENERATE CODE TO MOVE A VARIABLE-SIZE GROUP FIELD TO A JUSTIFIED*
*      RECEIVING FIELD.  THE SIZE OF THE SOURCE FIELD MAY BE LESS THAN,*
*      GREATER THAN OR EQUAL TO THE SIZE OF THE RECEIVING FIELD        *
************************************************************************
  
 VG2AN600 LABEL 
  
*      GENERATE CODE TO CALCULATE THE SIZE OF THE SOURCE FIELD
  
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
  
*      CALCULATE SIZE DIFFERENCE
  
          NOTE   VG2AN600 
          SUBZ   0,RECSIZE,RECSIZE
          GEN    SXXPK,(VREGOF,VREGB),VREGA,RECSIZE 
          MOVEZ  (LOCLAB,LABLNUM),LABLNUM 
          GEN    NG$,VREGB,LOCLABL
  
*      SS\SR CASE 
  
*      SET X2 = TO NUMBER OF BLANKS TO PREFIX  (=0) 
  
          GEN    MASK,(VREGOF,VREGC)
          GEN    HOLDR,VREGC
  
*      SET B7 TO NUMBER OF CHARS TO MOVE
  
          SUBZ   0,RECSIZE,P1 
          CALLZ  SETBREG
          MOVEZ  VREGX,VREGD
          GEN    HOLDR,VREGD
  
*      SET B6 TO CHAR OFFSET OF SOURCE FIELD
  
          MOVEZ  VREGB,VREGU
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBXPK
          GEN    HOLDR,VREGU
  
*      JUMP AROUND SS< SR CODE
  
          MOVEZ  (LOCLAB,LABLNM2),LABLNM2 
          GEN    EQ$,,,LOCLBLE
  
*      SS<SR CASE 
  
          GEN    LABEL$,LOCLABL 
  
*      SET X2 TO NUMBER OF CHARS TO PREFIX
  
          GEN    COMPL,VREGC,,VREGB 
  
*      SET B7 TO NUMBER OF CHARS TO MOVE
  
          GEN    SBXPB,VREGD,VREGA
  
*      SET B6 TO BCP OF SOURCE FIELD
*      NOTICE THAT WE ALWAYS GENERATE A 30-BIT INSTRUCTION HERE.
*      ALTHOUGH THIS IS INEFFICIENT THE ALTERNATIVE, WRITING A
*      SUBROUTINE LIKE SETBREG WHICH SETS VREGX AND NOT (VREGOF,VREGX)
*      TO THE CONSTANT IS TOO SPACE CONSUMING TO ONLY BR CALLED IN THIS 
*      ONE CASE 
  
          GEN    SBBPK,VREGU,,SENDBCP 
  
*      FINISH SETTING UP FOR AND CALL C.MOVE
  
          GEN    LABEL$,LOCLBLE 
  
*      SET B3 TO RECEIVING FIELD ADDRESS
  
          GEN    SBBPK,(VREGOF,VREGF),,RECADDR
  
*      SET B4 TO BCP OF RECEIVING FIELD 
  
          MOVEZ  RECBCP,P1
          CALLZ  SETBREG
  
*      SET B5 TO ADDRESS OF SOURCE FIELD
  
          GEN    SBBPK,(VREGOF,VREGG),,SRCADDR
  
*      CALL CBMOVE TO DO MOVE 
  
          GENOBJ N=C.MOVN,I=(VREGF,VREGX,VREGG,VREGU,VREGD,VREGC) 
          GEN    RFREE,VREGC,VREGD,VREGU
          RETURN
  
          LISTSEC  AN2VG
**
*         AN2VG - ALPHANUMERIC TO VARIABLE GROUP MOVE 
**
 AN2VG    EGO    2
          IFZ    ((CCTBIT,AUDIT),EQ,0),AN2AN
          MOVEZ  MOVEREGB,MOVEREGM
          CALLZ  GETSZVG     SETS P1 TO VREG OF LENGTH
          GEN    SBBPK,(VREGOF,VREGA),,RECADDR
          GEN    SBBPK,(VREGOF,VREGB),,(BCPOF,MOVEREGB) 
          GEN    SBBPK,(VREGOF,VREGC),,SRCADDR
          GEN    SBBPK,(VREGOF,VREGD),,(BCPOF,MOVEREGA) 
          GEN    MASK,(VREGOF,VREGE),0
          GEN    SXBPK,(VREGOF,VREGF),,(BYTLENOF,MOVEREGA)
          GENOBJ N=C.MOVRF,I=(VREGA,VREGB,VREGC,VREGD,VREGE,VREGF,P1) 
          RETURN
          SPACE  4
          LISTSEC  VG2SA
          TITLE  VG2SA - VARIABLE GROUP TO SUBSCRIPTED AN MOVE PROCESSOR
************************************************************************
*                                                                      *
** NAME-  VARIABLE GROUP TO SUBSCRIPTED ALPHANUMERIC MOVE PROCESSOR    *
*                                                                      *
** PURPOSE-                                                            *
*      GENERATE CODE TO MOVE A VARIABLE LENGTH GROUP (ONE THAT HAS A   *
*      SUBROUTINE ITEM WITH AN OCCURS DEPENDING ON CLAUSE) TO A        *
*      SUBSCRIPTED ALPHANUMERIC RECEIVING FIELD.                       *
*                                                                      *
************************************************************************
  
 VG2SA    EGO    2
          NOTE   VG2SA
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBREG
          MOVEZ  VREGX,VREGB
          GEN    SBBPK,(VREGOF,VREGC),,SRCADDR
          GEN    SBBPK,(VREGOF,VREGD),,RECADDR
          MOVEZ  MOVEREGB,P2
          CALLZ  SUBREF 
          GEN    SBXPB,(VREGOF,VREGE),P3
          MOVEZ  JUSTFLG,P1 
          CALLZ  SETXREG     OUTPUT VREGW 
          GENOBJ N=C.MOVRF,I=(VREGD,VREGE,VREGC,VREGB,VREGW,VREGA,P4) 
          RETURN
          SPACE  4
          LISTSEC  VG2RA
       TITLE VG2RA - VARIABLE GROUP TO ALPHANUMERIC REGISTER PROCESSOR
************************************************************************
*                                                                      *
** NAME- VARIABLE GROUP TO ALPHANUMERIC REGISTER MOVE PROCESSOR        *
*                                                                      *
** PURPOSE-                                                            *
*      GENERATE CODE TO LOAD A VARIABLE-LENGTH GROUP ITEM INTO AN      *
*      ALPHANUMERIC REGISTER(S)  (I.E. LEFT-JUSTIFY AND BLANK FILL)    *
************************************************************************
  
 VG2RA    EGO    2
  
*      NOTICE- THIS IS TEMPORARY CODE 
  
*      EXTRACT INFORMATION NECESSARY FOR THE DECISION PROCESS AND 
*      FOR CODE GENERATION
  
          MOVEZ  (BCPOF,MOVEREGA),SENDBCP 
          MOVEZ  (BCPOF,MOVEREGB),RECBCP
          MOVEZ  (BYTLENOF,MOVEREGA),SENDSIZE 
          MOVEZ  (BYTLENOF,MOVEREGB),RECSIZE
  
          IFZ    (SENDSIZE,GT,10),VG2RA500
  
************************************************************************
*      GENERATE CODE TO MOVE A VARIABLE GROUP ITEM WHOSE MAXIMUM       *
*      SIZE IS @10 TO BCP 0 OF C.BUFF AND APPEND BLANKS TO END OF WORD.*
*      LOAD THIS WORD AND RETURN                                       *
************************************************************************
  
*      GENERATE CODE TO CALCULATE THE SIZE OF THE SOURCE FIELD
  
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
          NOTE   VG2RA
  
*      SET B3 TO FWA OF RECEIVING FIELD (= C.BUFF)
  
          GEN    SBBPK,(VREGOF,VREGB),,TMPBFAD
  
*      SET B4 TO BCP OF RECEIVING FIELD (= 0) 
  
          GEN    SBBPB,(VREGOF,VREGC) 
  
*      SET B5 TO FWA OF SOURCE FIELD
  
          GEN    SBBPK,(VREGOF,VREGD),,SRCADDR
  
*      SET B6 TO BCP OF SOURCE FIELD
  
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBREG
  
*      SET B7 TO THE NUMBER OF CHARS TO MOVE
  
          GEN    SBXPB,(VREGOF,VREGE),VREGA 
  
*      SET X2 TO THE NUMBER OF BLANKS TO APPEND (=10-B7)
  
          GEN    SXXPK,(VREGOF,VREGF),VREGA,-10 
  
*      CALL CBMOVE TO DO MOVE 
  
          GENOBJ N=C.MOVN,I=(VREGB,VREGC,VREGD,VREGX,VREGE,VREGF) 
  
*      PICK UP SOURCE FIELD 
  
          GEN    SLRBPK,(VREGOF,VREGI),,TMPBFAD 
  
*      TELL CALLER WHICH VREG CONTAINS FIELD
  
          MOVEZ  VREGI,(TREGOF,MOVEREGB)
  
*      IF CALLER WANTS 2 REGS BACK- RETURN A WORD OF BLANKS AS SECOND 
*      ONE
  
          IFTHEN (RECSIZE,GT,10)
            GEN    SLRBPK,(VREGOF,VREGJ),,BLANKS
          ENDIFZ
          RETURN
          SPACE  4
************************************************************************
*      GENERATE CODE TO MOVE A VARIABLE GROUP ITEM WHOSE MAXIMUM SIZE  *
*      IS >10 (AND @20) TO BCP 0 OF C.BUFF AND APPEND BLANKS TO END    *
*      OF 2ND WORD. LOAD 2 WORDS AND RETURN                            *
************************************************************************
  
 VG2RA500 LABEL 
  
*      GENERATE CODE TO CALCULATE THE SIZE OF THE SOURCE FIELD
  
          MOVEZ  MOVEREGA,MOVEREGM
          CALLZ  GETSZVG
          MOVEZ  P1,VREGA 
          NOTE   VG2RA500 
  
*      SET B3 TO THE FWA OF THE RECEIVING FIELD (= C.BUFF)
  
          GEN    SBBPK,(VREGOF,VREGB),,TMPBFAD
  
*      SET B4 TO THE BCP OF THE RECEIVING FIELD (= 0) 
  
          GEN    SBBPB,(VREGOF,VREGC) 
  
*      SET B5 TO THE FWA OF THE SOURCE FIELD
  
          GEN    SBBPK,(VREGOF,VREGD),,SRCADDR
  
*      SET B6 TO THE BCP OF THE SOURCE FIELD
  
          MOVEZ  SENDBCP,P1 
          CALLZ  SETBREG
  
*      SET B7 TO THE NUMBER OF CHARS TO MOVE
  
          GEN    SBXPB,(VREGOF,VREGE),VREGA 
  
*      SET X2 TO THE NUMBER OF BLANKS TO APPEND (=20-B7)
  
          GEN    SXXPK,(VREGOF,VREGF),VREGA,-20 
  
*      CALL CBMOVE TO DO MOVE 
  
          GENOBJ N=C.MOVN,I=(VREGB,VREGC,VREGD,VREGX,VREGE,VREGF) 
  
*      PICK UP FIRST WORD 
  
          GEN    SLRBPK,(VREGOF,VREGI),,TMPBFAD 
  
*      PICK UP SECOND WORD
  
          GEN    SLRAPB,(VREGOF,VREGJ),VREGI,VREGB1 
  
*      TELL CALLER WHICH VREG CONTAINS FIRST WORD 
  
          MOVEZ  VREGI,(TREGOF,MOVEREGB)
          RETURN
          SPACE  4
          LISTSEC  *
          END 
