*DECK MOVEC 
          IDENT  MOVEC
          TITLE     CHARACTER STRINGS MOVE                 (OVERLAY 0,0)
          IPARAMS 
          ENTRY    IPYMD
          IFC     EQ,$"IP.YMD"$DYM$,1 
 YMD      EQU     234501B 
          IFC     EQ,$"IP.YMD"$YDM$,1 
 YMD      EQU     452301B 
          IFC     EQ,$"IP.YMD"$YMD$,1 
 YMD      EQU     450123B 
          IFC     EQ,$"IP.YMD"$MYD$,1 
 YMD      EQU     014523B 
          IFC     EQ,$"IP.YMD"$MDY$,1 
 YMD      EQU     012345B 
          IFC     EQ,$"IP.YMD"$DMY$,1 
 YMD      EQU     230145B 
 IPYMD    VFD     60/YMD
 FLT      MACRO  A           MACRO TO PACK AND NORMALIZE
          P_A    A
          N_A    A
          ENDM
 FIX      MACRO  A           MACRO TO UNPACK AND SHIFT
          U_A    B1,A 
          L_A    B1,A 
          ENDM
*CALL MACRO 
          LIST   X           *CALL COMMOV FOLLOWS 
          ENTRY  MOVEW
*CALL COMMOV
          LIST   -X 
MOVE      SPACE  6,25D
MOVE      TITLE  SYMPL INTERFACE TO MOV- MOVE WHOLE WORDS 
***       MOVE   - SYMPL INTERFACE TO MOV- MOVE WHOLE WORDS 
* 
*         ENTRY  (A1) = POINTER TO PARAMETER LIST 
*                CALLING SEQUENCE - (FROM, NUMBER, TO)
* 
*         EXIT   - WORDS MOVED
* 
*         USES   - NOT APPLICABLE TO SYMPL
* 
*         CALLS  - MOV   TO MOVE WHOLE WORDS
*                - MOVE MACRO TO FORMAT REGISTERS FOR MOV 
MOVE      SPACE  3
          ENTRY  MOVE 
MOVE      JP     *+1S17      ENTRY/EXIT 
  
          SA2    A1+1        (X2) = ADDRESS OF NUM OF WORDS PARAM 
          SA3    A2+1        (X3) = WHERE TO MOVE THE WORDS 
          SA2    X2          (X2) = NUMBER OF WORDS TO MOVE 
          MOVE   X1,X2,X3    MOVE THE REQUESTED NUMBER OF WORDS 
          EQ     MOVE        RETURN 
          EJECT 
          TITLE 
 CMOVE    SPACE  4,10 
***       CMOVE - MOVE CHARACTERS VIA PARAMETER LIST
* 
*         ENTRY - (A1) = POINTER TO PARAMETER LIST
*                 CALLING SEQUENCE - (FA, FC, CL, TA, TC) 
* 
*         FA = THE SOURCE ITEM/ARRAY (NOT A POINTER)
*         FC = BEGINNING CHARACTER POSITION RELATIVE TO FA. (0-N, WHERE 
*              N MAY EXCEED 9)
*         CL = CHARACTER LENGTH TO BE MOVED 
*         TA = THE SINK ITEM/ARRAY (NOT A POINTER)
*         TC = BEGINNING CHARACTER POSITION RELATIVE TO TA. (0-N, WHERE 
*              N MAY EXCEED 9)
* 
*         USES - ALL
* 
*         CALLS - CMR 
  
  
          ENTRY  CMOVE
  
 CMOVE    SUBR               ENTRY/EXIT 
          SB1    1
          SA2    CMOVE       (X2) = RETURN LINK TO CALLER 
          SA1    A1          (X1) = ADDRESS OF FIRST PARAMETER
          BX6    X2 
          SA6    RTNHERE     SAVE IN CASE MUST DIAGNOSE CALLER"S ADDRESS
          BX2    X1          (X2) = FA
          SA1    A1+B1       (X1) = ADDR OF FC
          SA5    X1 
          BX6    X5          (X6) = FC
          SA1    A1+B1       (X1) = ADDR OF CL
          SA5    X1 
          BX0    X5          (X0) = CL
          SA4    A1+B1       (X4) = TA
          SA1    A4+B1       (X1) = ADDR OF TC
          SA5    X1          (X5) = TC
  
  
*         NOW ADJUST FC, FA SO FC DOES NOT EXCEED 10
  
 CMOVE2   SX1    X6-10D      (X1) = FC - 10 
          NG     X1,CMOVE3   IF FC LT 10
          BX6    X1          (X6) = DECREMENTED FC
          SX2    X2+B1       (X2) = INCREMENTED FA
          EQ     CMOVE2      GO CHECK FC AGAIN
  
  
*         NOW ADJUST TC, TA SO TC DOES NOT EXCEED 10
  
 CMOVE3   SX1    X5-10D      (X1) = TC - 10 
          NG     X1,CMOVE4   IF TC LT 10
          BX5    X1          (X5) = DECREMENTED TC
          SX4    X4+B1       (X4) = INCREMENTED TA
          EQ     CMOVE3      GO CHECK TC AGAIN
  
 CMOVE4   RJ     CMR         CALL THE MOVE ROUTINE
          EQ     EXIT.
 MOVEC    SPACE  4,10 
***       MOVEC - MOVE CHARACTERS VIA MOVE TABLE
* 
*         ENTRY - (A1) = POINTER TO PARAMETER LIST
*                 CALLING SEQUENCE - (MOVETBL)
* 
*              THE MOVETBL IS A TWO WORD TABLE WITH THE FOLLOWING 
*         FORMAT (*X* DENOTES IGNORED FIELD): 
* 
*         VFD    4/X,4/FCP,4/TCP,12/CL,18/FA,18/TA
*         VFD    24/X,18/AF,18/AT 
* 
*         FCP = BEGINNING CHAR POSITION IN FW TO MOVE (0-9) 
*         TCP = BEGINNING CHAR POSITION IN FW TO RECEIVE (0-9)
*         CL  = CHARACTER LENGTH TO BE MOVED
*         AF  = IF NON-ZERO, IT IS THE ADDRESS OF A WORD WHOSE CONTENTS 
*               INDICATES THE FWA OF A STRING CONTAINING THE CHARACTERS 
*               TO BE MOVED.
*         FA  = (AF = 0) ABSOLUTE ADDRESS OF FW TO MOVE.
* 
*               (AF " 0) OFFSET FROM THE CONTENTS OF AF GIVING THE FW 
*                        TO MOVE. 
*         AT  = IF NON-ZERO, IT IS THE ADDRESS OF A WORD WHOSE CONTENTS 
*               INDICATES THE FWA OF A STRING RECEIVING THE MOVED 
*               CHARACTERS. 
*         TA  = (AT = 0) ABSOLUTE ADDRESS OF FW TO RECEIVE
*               (AT " 0) OFFSET FROM THE CONTENTS OF AF GIVING THE FW 
*                        TO RECEIVE.
* 
*         USES - ALL
* 
*         CALLS - CMR 
  
  
          ENTRY  MOVEC
  
 MOVEC    SUBR               ENTRY/EXIT 
          SB1    1
          SA2    MOVEC       (X2) = RETURN LINK TO CALLER 
          SA1    A1          (X1) = ADDR OF FIRST PARAMETER 
          BX6    X2 
          SA6    RTNHERE     SAVE IN CASE MUST DIAGNOSE CALLER"S ADDRESS
          SA1    X1          (X1) = WORD 0 OF MOVETBL 
          MX7    -18
          BX4    -X7*X1      (X4) = TA
          LX1    0-18        (X1) = WORD 0 OF MOVETBL (R-JUST BIT 18) 
          BX2    -X7*X1      (X2) = FA
          LX1    18-36       (X1) = WORD 0 OF MOVETBL (R-JUST BIT 36) 
          MX7    -12
          BX0    -X7*X1      (X0) = CL
          LX1    36-48       (X1) = WORD 0 OF MOVETBL (R-JUST BIT 48) 
          MX7    -4 
          BX5    -X7*X1      (X5) = TCP 
          LX1    48-52       (X1) = WORD 0 OF MOVETBL (R-JUST BIT 52) 
          BX6    -X7*X1      (X6) = FCP 
          SA1    A1+B1       (X1) = WORD 1 OF MOVETBL 
          MX7    -18
          BX3    -X7*X1      (X3) = AT
          ZR     X3,MOVEC2   IF NO INDIRECT *TO* ADDRESSING 
          SA3    X3          (X3) = FWA OF CONTAINING STRING
          IX4    X4+X3       (X4) = FW TO RECEIVE 
 MOVEC2   LX1    0-18        (X1) = WORD 1 OF MOVETBL (R-JUST BIT 18) 
          BX3    -X7*X1      (X3) = AF
          ZR     X3,MOVEC3   IF NO INDIRECT *FROM* ADDRESSING 
          SA3    X3          (X3) = FWA OF CONTAINING STRING
          IX2    X2+X3       (X2) = FW TO MOVE
 MOVEC3   RJ     CMR         CALL THE MOVE ROUTINE
          EQ     EXIT.
 CMR      SPACE  4,10 
***       CMR - CALL THE MOVE ROUTINE 
* 
*         ENTRY - (B1) = 1
*                 (X0) = CHARLENGTH TO BE MOVED 
*                 (X2) = FW TO MOVE 
*                 (X4) = FW TO RECEIVE
*                 (X5) = BEGINNING CHAR POSITION IN FIRST RECEIVING WORD
*                 (X6) = BEGINNING CHAR POSITION IN FIRST WORD TO MOVE
* 
*         USES - ALL
* 
*         CALLS - MOS=, WRITEC
  
  
 CMR      SUBR               ENTRY/EXIT 
          ZR     X0,EXIT.    IF NO CHARACTERS TO MOVE 
          NG     X0,CMR2     IF CHARACTER LENGTH IS NEGATIVE
          LX0    X0,B1       (X0) = 2 * CHARLENGTH
          LX1    X0,B1       (X1) = 4 * CHARLENGTH
          IX0    X0+X1       (X0) = 6 * CHARLENGTH = BITLENGTH
          LX5    X5,B1       (X5) = 2 * *TO* CHARPOS
          LX1    X5,B1       (X1) = 4 * *TO* CHARPOS
          IX5    X5+X1       (X5) = 6 * *TO* CHARPOS = BITPOS 
          LX6    X6,B1       (X6) = 2 * *FROM* CHARPOS
          LX1    X6,B1       (X1) = 4 * *FROM* CHARPOS
          IX6    X6+X1       (X6) = 6 * *FROM* CHARPOS = BITPOS 
          SB2    X6          (B2) = *FROM* BITPOS 
          SB4    X5          (B4) = *TO* BITPOS 
          RJ     =XMOS=      MOVE CHARS (OVERLAP, PRESERVE LW)
          EQ     EXIT.
  
 CMR2     BSS    0           HERE TO DIAGNOSE NEGATIVE MOVE LENGTH
          SA1    RTNHERE     GET RETURN ADDRESS 
          MX6    0           INITIALIZE RECEIVING REGISTER
          MX0    57          MASK TO ISOLATE ONE OCTAL DIGIT
          LX1    15          R.J. UPPER DIGIT OF 6 DIGIT ADDRESS
          SB5    6           LOOP COUNTER 
 CMR3     BX2    -X0*X1      ISOLATE DIGIT
          SX2    X2+33B      CONVERT OCTAL DIGIT TO DISPLAY CODE
          IX6    X2+X6       ADD TO DISPLAY CODE CHARACTERS 
          LX6    6
          LX1    3           R.J. NEXT OCTAL DIGIT
          SB5    B5-1 
          NE     B5,CMR3
          SA1    DG293A      INSERT ADDRESS INTO MESSAGE
          MX0    24 
          LX0    6
          BX1    X1*X0       ISOLATE *OM       B* 
          IX6    X6+X1       COMBINE TO MAKE *OM XXXXXXB* 
          SA6    A1          STORE MSG WITH ADDRESS IN IT 
          SA1    OUTPARAM    WRITE MESSAGE TO OUTPUT FILE 
          RJ     =XWRITEC          WRITE LINE IN -C- FORMAT 
          SA2    =XTPROCES
          ZR     X2,EXIT.    IF NO TRACE FILE 
          SA1    TRPARAM     WRITE MESSAGE TO TRACE FILE
          RJ     =XWRITEC          WRITE LINE IN -C- FORMAT 
          EQ     EXIT.
  
 DG293    DATA   H* (293) INTERNAL ERROR - MOVEC CALLED WITH NEGATIVE LE
,NGTH FR* 
DG293A    DATA   C*OM       B*
  
 RTNHERE  DATA   0           WILL HOLD COPY OF E.P. WORD OF CMR"S CALLER
  
 OUTPARAM VFD    60/=XOUTPUT ADDRESS OF FET 
          VFD    60/DG293    ADDRESS OF BUFFER
 TRPARAM  VFD    60/=XTFILE  ADDRESS OF FET 
          VFD    60/DG293    ADDRESS OF BUFFER
          END 
