*DECK SYMSM 
          IDENT     SYMSM$
          TITLE  SYMSM$ - STRING MOVE ROUTINE 
          COMMENT  SYMSM$ - STRING MOVE ROUTINE 
          SST 
          LIST   F
          SPACE  4
*CALL LIBCOM                                                             LARRY-R
          EJECT 
 SYMSM$   ENTRY. ** 
         SX6  B0                   MAKE SURE FLAGS ARE OFF
         SA6  DATFLAG              ...
         SA6  PADFLAG              ...
         SX7  A0                   SAVE A0
         SA0  60                   WORD SIZE                          A0
         SA7  SAVEA0               ...
*                                  SOURCE DESCRIPTOR (A1 IS SET)      X1
         SA2  A1+1                 SINK DESCRIPTOR                    X2
         SA1  X1                   ...
         SA2  X2                   ...
 #LCM     IFNE   LCM,0       IF LCM 
          MX3    1                                                       LARRY-R
          BX0    X3*X1                                                   LARRY-R
          BX1    -X3*X1                                                  LARRY-R
          LX0    1                                                       LARRY-R
          BX7    X3*X2                                                   LARRY-R
          BX2    -X3*X2                                                  LARRY-R
          LX7    2                                                       LARRY-R
          IX0    X7+X0                                                   LARRY-R
          SB7    X0          . B7 CONTAINS LCM/SCM FLAGS FOR SINK+SOURCE LARRY-R
 #LCM     ENDIF 
         MX0  9                    MASK FOR N FIELD 
         LX0  45                   ...
         BX3  X0*X1                SOURCE N                           X3
         LX3  24                   ...
         BX4  X0*X2                SINK N                             X4
         ZR   X4,EXIT              ZERO-LENGTH SINK, NO MOVE
         LX4  24                   ...
         LX1  3                    CHECK BYTE FLAGS 
         LX2  3                    ...
         PL   X1,CHKN2             BYTE FLAG OFF, SOURCE N OK 
         IX5  X3+X3                BYTE FLAG ON, N=N*6
         LX3  2                    ...
         IX3  X3+X5                ...
 CHKN2   BSS  0                    ...
         PL   X2,NDIFF             BYTE FLAG OFF, SINK N OK 
         IX5  X4+X4                BYTE FLAG ON, N=N*6
         LX4  2                    ...
         IX4  X4+X5                ...
 NDIFF   BSS  0                    ...
         IX7  X3-X4                SIZE OF SOURCE-SINK                X7
         LX1  57                   RESTORE DESCRIPTORS
         LX2  57                   ...
         SB3  X3                   SOURCE SIZE                        B3
         SB4  X4                   SINK SIZE                          B4
         SA7  PADFLAG              PAD FLAG IS SIGN BIT 
         MX0  42                   MASK FOR DISPLACEMENT
         SB5  X1                   SOURCE LOC                         B5
         SB6  X2                   SINK LOC                           B6
         AX1  18                   SAVE DISPLACEMENTS IN L1 AND L2
         AX2  18                   ...
         BX6  -X0*X1               ...
         BX7  -X0*X2               ...
         SA6  L1                   ...
         SA7  L2                   ...
         LX1  21                   POSITION FOR SOURCE TYPE, BYTE FLAGS 
         LX2  21                   ...
         MX0  11                   MASK FOR F FIELD 
         LX0  59                   ...
         BX3  X0*X1                SOURCE F                           X3
         BX4  X0*X2                SINK F                             X4
          SX6    X1                                                      LARRY-R
          SA6    SOURTYP     . SAVE SOURCE TYPE                          LARRY-R
         ZR   X3,CHKF2             SOURCE F IS 0
         LX3  12                   SOURCE F NOT 0 
         PL   X1,TESTF1            BYTE FLAG OFF, SOURCE F OK 
         IX6  X3+X3                BYTE FLAG ON, F=6*F
         LX3  2                    ...
         IX3  X3+X6                ...
 TESTF1  BSS  0                    ...
         SX3  X3-60                IS 1ST SOURCE BIT IN 1ST WORD
         NG   X3,ADJUST1           YES
         SA5  L1                   NO, FIND THE WORD CONTAINING IT
         SB5  X5+B5                ...
         EQ   TESTF1               ...
 ADJUST1 BSS  0                    ...
         SX3  X3+60                F1 LS 60, IN WORD POINTED TO BY B5 
 CHKF2   BSS  0                    ...
         ZR   X4,SETFS             SINK F IS 0
         LX4  12                   SINK F NOT 0 
         PL   X2,TESTF2            BYTE FLAG OFF, SINK F OK 
         IX7  X4+X4                BYTE FLAG ON, F=6*F
         LX4  2                    ...
         IX4  X7+X4                ...
 TESTF2  BSS  0                    ...
         SX4  X4-60                IS 1ST SINK BIT IN 1ST WORD
         NG   X4,ADJUST2           YES
         SA5  L2                   NO, FIND THE WORD CONTAINING IT
         SB6  X5+B6                ...
         EQ   TESTF2               ...
 ADJUST2 BSS  0                    ...
         SX4  X4+60                F2 LS 60, IN WORD POINTED TO BY B6 
 SETFS   BSS  0                    ...
         SB1  X3                   FIRST SOURCE BIT                   B1
         SB2  X4                   FIRST SINK BIT                     B2
          READSS A1,B5,R,59,B5                                           LARRY-R
         SX3  B4                   BITS TO MOVE = SINK SIZE           X3
         LT        B4,B3,OTHER
          SX3       B3                 SOURCE IS MIN
OTHER     BSS       0 
         SB3  A0-B1                MAX SOURCE SEGMENT = 60-F1         B3
 GETSINK BSS  0                    ...
          READSS A2,B6,R,58,B6                                           LARRY-R
 SEGMENT BSS  0                    ...
         SB4  A0-B2                MAX SINK SEGMENT = 60-F2           B4
         LE   B3,B4,MINIM          B3 CONTAINS SMALLER MAX            B3
         SB3  B4                   ...
 MINIM   BSS  0                    ...
         SB4  X3                   TOTAL NO. BITS                     B4
         LE   B3,B4,WORK           B3=MIN(LEAST MAX, TOTAL BITS)      B3
         SB3  B4                   ...
 WORK    BSS  0                    ...
         SX4  B3                   SEGMENT SIZE                       X4
         SX6  X4-60                IS THIS A FULL-WORD MOVE 
         NZ   X6,MOVE              NO 
         BX6  X1                   YES, STORE SOURCE WORD IN SINK 
         EQ   ENDMOVE              ...
 MOVE    BSS  0                    ...
         LX6  B1,X1                ALIGN SOURCE, SINK AT HIGH END  X6,X7
         SX5  X4-1                 SEGMENT SIZE - 1                   X5
         LX7  B2,X2                ...
         SB4  X5                   ...
         MX0  1                    FORM MASK = SEGMENT SIZE           X0
         AX0  B4,X0                ...
         BX6  X0*X6                EXTRACT SOURCE FIELD               X6
         BX7  -X0*X7               CLEAR SINK FIELD                   X7
         SB4   A0-B2               SINK REALIGNMENT FACTOR            B4
         BX7   X6+X7               SOURCE FIELD TO SINK FIELD 
         LX6   B4,X7               REALIGN SINK 
 ENDMOVE BSS   0                   ...
          READSS A6,B6,W,58,B6     .USE READ MACRO FOR WRITE             LARRY-R
         IX3  X3-X4                NO. OF BITS YET TO MOVE            X3
         ZR   X3,CHKEND            NO MORE TO MOVE
         SB4  A0                   WORD SIZE FOR TEST 
         SB1  B1+X4                NEW FIRST BIT AT SEGMENT END 
         LT   B1,B4,RESETS1        SAME WORD, GET NEW SEGMENT SIZE
          SA5       DATFLAG            NEW WORD, ARE WE PADING
         NG   X5,ZEROF1            YES
         SA1  L1                   NO, LOAD NEW SOURCE WORD           X1
          READSS A1,X1+B5,R,59,B5                                        LARRY-R
 ZEROF1  BSS  0                    ...
         SB1  B0                   WORD BOUND CROSSED, FIRST BIT IS 0 
 RESETS1 BSS  0                    ...
         SB3  A0-B1                SOURCE SEGMENT SIZE                B3
 NEWSINK BSS  0                    ...
         SB2  B2+X4                NEW FIRST BIT AT SEGMENT END 
         LT   B2,B4,GETSINK        SAME WORD, RELOAD SINK JUST STORED 
         SA2  L2                   NEW SINK WORD, LOAD IT             X2
          READSS A2,X2+B6,R,58,B6                                        LARRY-R
         SB2  B0                   WORD BOUND CROSSED, NEW 1ST BIT IS 0 
         EQ   B0,SEGMENT           ...
 CHKEND  BSS  0                    ...
         SA5  PADFLAG              WERE WE PADDING
         PL   X5,EXIT              NO 
         BX7  -X5                  YES, TURN OFF THE FLAG 
          SA1    SOURTYP                                                 LARRY-R
         SA7  PADFLAG              ...
          BX7       X5
          SA7       DATFLAG 
          SA1    PAD+X1      . FETCH PADDING                             LARRY-R
          SB1       B0                 FIRST PAD BIT
          BX3       -X5                PAD SIZE 
          SB3       A0                 SOURCE SIZE IS ONE WORD FOR PAD
         SB4  A0                   SET 60 FOR NEWSINK TEST            B4
         EQ   B0,NEWSINK           ...
 EXIT    BSS  0                    ...
         SA1  SAVEA0               RESTORE A0 
         SA0  X1                   ...
          EQ        SYMSM$
          SPACE  4
 SYMSG$   ENTRY. ** 
         BX7  X1                   SET PARAM LIST FOR JOVSM$
         SA7  PARLIST              ...
         SA1  PARLIST              ...
          RJ        SYMSM$
          EQ        SYMSG$
          SPACE  4
 PARLIST  VFD    60/0,42/0,18/SINKDES 
 SINKDES VFD  4/0,10/0,10/60,18/1,18/SINK 
 SINK    VFD  60/0
 SAVEA0  BSSZ 1 
 DATFLAG BSS  1 
 PADFLAG BSS  1 
 SOURTYP  BSS    1                                                       LARRY-R
 L1      BSS  1 
 L2      BSS  1 
 PAD     DATA 0,0,10HEEEEEEEEEE,10H 
     END
