*DECK SYMSC 
           IDENT     SYMSC$ 
          TITLE  SYMSC$ - STRING COMPARE ROUTINE
          COMMENT  SYMSC$ - STRING COMPARE ROUTINE
          SST 
          LIST   F
          SPACE  4
*CALL LIBCOM                                                             LARRY-R
          EJECT 
 SYMSC$   ENTRY. ** 
         SX6  B0                   MAKE SURE FLAGS ARE OFF
         SA6  PADFLAG              ...
         SX7  A0                   SAVE A0
         SA0  60                   WORD SIZE                          A0
         SA7  SAVEA0               ...
         SA5 A1+2                  STORE RELATIONAL IN CODE 
         SA5  X5                   ...
         BX7  X5                   ...
         SA7  CODE
*                                  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
         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       X4-X3    SIZE OF SINK-SOURCE                     X7 
         LX1  57                   RESTORE DESCRIPTORS
         LX2  57                   ...
          PL        X7,SETNS           SOURCE NOT LONGER
         BX6  X1                   SOURCE IS LONGER, EXCHANGE WITH SINK 
         BX1  X2                   ...
         BX2  X6                   ...
         SB3  X4                   EXCHANGE SIZES 
         SB4  X3                   ...
         SA5  CODE                 REVERSE GT/LT TEST 
          SA5    RECODE+X5                                               LARRY-R
         BX6  X5                   ...
         SA6  CODE                 ...
          IX7       X3-X4    SIZE OF SINK-SOURCE                     X7 
         EQ   SETLOCS              ...
 SETNS   BSS  0                    ...
         SB3  X3                   SOURCE SIZE                        B3
         SB4  X4                   SINK SIZE                          B4
 SETLOCS BSS  0 
         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
          BX6    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       B3       BITS TO COMPARE = SOURCE SIZE(SHORT) X3
         SB3  A0-B1                MAX SOURCE SEGMENT = 60-F1 
          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 COMPARE
         NZ   X6,PARTIAL           NO 
         BX6  X1                   COMPARE IS DONE IN X6,X7 
         BX7  X2                   ...
         EQ   COMPARE              ...
 PARTIAL 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                EXTRACT SINK FIELD 
 COMPARE BSS  0                    ...
          SA5       PADFLAG 
          NG        X5,PADING 
         BX5  X6-X7                DO THE FIRST BITS MATCH
         PL   X5,CHECK59           YES
         NG   X6,GREATER           NO, SOURCE IS BIGGER IF FIRST BIT
         EQ   LESS                 ELSE SMALLER 
PADING    BSS       0 
          IX5       X6-X7 
          NZ        X5,LESS   SOURCE LESS IF SINK NOT EQUAL TO PAD
          EQ        MORE
 CHECK59 BSS  0                    ...
         IX7  X6-X7                ARE THEY EQUAL 
         ZR   X7,MORE              YES, SEE IF MORE TO DO 
         PL   X7,GREATER           NO, SOURCE GREATER IF PLUS 
         EQ   LESS                 ELSE SMALLER 
 MORE    BSS  0                    ...
         IX3  X3-X4                NO. OF BITS YET TO COMPARE 
         ZR   X3,CHKEND            NO MORE TO COMPARE 
         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  PADFLAG              NEW WORD, ARE WE PADDING 
         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,SEGMENT        SAME WORD, GET NEW SEGMENT SIZE
         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
          ZR       X5,EXIT    NO
          NG        X5,EXIT  NO 
          SA1    SOURTYP                                                 LARRY-R
         BX7  -X5                  YES, TURN OFF THE FLAG 
         SA7  PADFLAG              ...
          BX3       X5       NEW SIZE                                X3 
          SB1       B0       FIRST PAD BIT
          SB3       A0
          SA1    PAD+X1      . FETCH PADDING                             LARRY-R
          SB4       A0
         EQ   B0,NEWSINK           ...
 EXIT    BSS  0                    ...
         SA1  CODE                 ...
         SA2  TBLEQ+X1             ...
         EQ   RESULT               ...
 GREATER BSS  0                    ...
         SA1  CODE                 ...
         SA2  TBLGR+X1             ...
         EQ   RESULT               ...
 LESS    BSS  0                    ...
         SA1  CODE                 ...
         SA2  TBLLS+X1             ...
 RESULT  BSS  0                    ...
         BX6  X2                   ...
         SA1  SAVEA0               ...
         SA0  X1                   ...
          EQ        SYMSC$
          SPACE  4
 SAVEA0  BSSZ 1 
 PADFLAG BSS  1 
 SOURTYP  BSS    1                                                       LARRY-R
 L1      BSS  1 
 L2      BSS  1 
 PAD     DATA 0,0,10HEEEEEEEEEE,10H 
 CODE    BSS  1 
* CODES ARE   0 = NQ
*             1 = EQ
*             2 = GR
*             3 = LS
*             4 = GQ
*             5 = LQ
 RECODE  DATA 0,1,3,2,5,4 
 TBLEQ   DATA 0,1,0,0,1,1 
 TBLGR   DATA 1,0,1,0,1,0 
 TBLLS   DATA 1,0,0,1,0,1 
     END
