*DECK KOMSTR
          IDENT  KOMSTR      .CALL KOMSTR(S1,C1,N,S2,C2)
* 
*    THIS FUNCTION COMPARES TWO STRINGS S1 AND S2. N CHAR. FROM S1, 
*    STARTING WITH CHAR. C1, ARE COMPARED WITH N CHAR. FROM S2, STARTING
*    WITH CHAR. C2. 
*    THE RETURNING VALUE OF KOMSTR IS 
*         KOMSTR= 0   S1.EQ.S2
*         KOMSTR= 1   S1.GT.S2
*         KOMSTR=-1   S1.LT.S2
*         KOMSTR=-2   ERROR (C1.LE.0.OR.N.LT.0.OR.C2.LE.0): 
* 
          ENTRY  KOMSTR 
 +        VFD    36/0HKOMSTR,24/5 
 KOMSTR   PS
          SA2    A1+2 
          SB1    X1 
          SB3    X2 
          SA2    A2+1 
          SB4    X2 
          SA2    A2+1 
          SB5    X2 
          SA1    A1+1 
          SB2    X1 
          SA1    B2 
          ZR     X1,ERROR 
          NG     X1,ERROR 
          SA1    B5 
          ZR     X1,ERROR 
          NG     X1,ERROR 
          SA1    B3 
          ZR     X1,L8
          PL     X1,OK
 ERROR    SX6    -2 
          EQ     B0,B0,KOMSTR 
 OK       SA1    B2 
          SB2    B0+1 
          SA4    TENO 
          SX1    X1+9 
          PX3    B0,X1
          NX3    B6,X3
          NX5    B6,X4
          FX3    X3/X5
          UX5    B6,X3
          LX3    B6,X5
          SB1    B1-B2
          SB1    X3+B1       .K=(C1+9)/10+ START ADDRESS OF S1
          SX1    X1+B2
          PX3    B0,X3
          DX3    X4*X3
          UX6    B6,X3
          IX6    X1-X6       .K1=(C1+10)-K*10 (FIRST CHAR. TESTED)
          SA1    B5 
          SX1    X1+9 
          PX3    B0,X1
          NX3    B6,X3
          NX5    B6,X4
          FX3    X3/X5
          UX5    B6,X3
          LX3    B6,X5
          SB4    B4-B2
          SB4    X3+B4       .J=(C2+9)/10+ START ADDRESS OF S2
          SX1    X1+B2
          PX3    B0,X3
          DX3    X4*X3
          UX7    B6,X3
          IX7    X1-X7       .J1=(C2+10)-J*10 (FIRST CHAR. TESTED)
          BX3    X6 
          BX4    X7 
          SA1    B1          .MOVE S1(K) TO X1
          SA5    SIXO 
          PX6    B0,X6
          DX6    X5*X6
          UX6    B6,X6
          SB6    X6 
          LX1    B6,X1       .LEFT SHIFT X1  K1    CHAR.
          SA2    B4          .MOVE S2(J) TO X2
          PX7    B0,X7
          DX7    X5*X7
          UX7    B6,X7
          SB6    X7 
          LX2    B6,X2       .LEFT SHIFT X2  J1    CHAR.
          BX6    X3 
          SA3    B3          .N1=N (NUMBER OF CHAR. TO BE TESTED) 
          SB7    B0+11
          SB3    X6 
          SB5    X4 
          SB3    B7-B3       .K2=11-K1
          SB5    B7-B5       .J2=11-J1
          SB6    B0+10
          SB7    B0+6 
          SA5    TEMP 
 L        BX6    X2*X5       .MASK OUT LEFT 9 CHAR. OF X2 
          BX4    X1*X5       .MASK OUT LEFT 9 CHAR. OF X1 
          IX4    X4-X6       .SUBTRACT S2 FROM S1 
          NZ     X4,L2       .IF (S1.EQ.S2) CONTINUE (L2) 
          SX3    X3-1        .N1=N1-1 
          ZR     X3,L8       .IF (N1.EQ.0) ALL CHAR. TESTED.
          SB3    B3-B2       .K2=K2-1 
          NE     B3,B0,L5    .IF (K2.EQ.0) NO CHAR. LEFT TO TEST IN 
          SB1    B1+B2       .K=K+1 
          SA1    B1          .MOVE S1(K) TO X1
          SB3    B0+B6       .K2=10 
 L5       SB5    B5-B2       .J2=J2-1 
          NE     B5,B0,L7    .IF (J2.EQ.0) NO CHAR. LEFT TO TEST IN 
          SB4    B4+B2       .J=J+1 
          SA2    B4          .MOVE S2(J) TO X2
          SB5    B0+B6       .J2=10 
 L7       LX1    B7,X1       .SHIFT X1 LEFT 6 PLACES
          LX2    B7,X2       .SHIFT X2 LEFT 6 PLACES
          EQ     B0,B0,L
 L2       PL     X4,L1
          SX6    B0-B2       .IF (S1.LT.S2) KOMSTR=-1 (RETURN)
          EQ     B0,B0,KOMSTR 
 L1       SX6    B0+B2       .IF (S1.GT.S2) KOMSTR= 1 (RETURN)
          EQ     B0,B0,KOMSTR 
 L8       SX6    B0 
          EQ     B0,B0,KOMSTR 
 TENO     DATA   20000000000000000012B
 SIXO     DATA   20000000000000000006B
 TEMP     DATA   00000000000000000077B
          END 
