*DECK RWSRCH
          IDENT  RWSRCH 
          TITLE  RWSRCH - RESERVED WORD LOOKUP
 RWSRCH   SPACE  4
**        RWSRCH - RESERVED WORD LOOKUP 
* 
*         CALLING SEQUENCE
*                RWSRCH1(WORD,TABLE,TABSIZE,FOUND) - FOR ONE WORD ENTRY 
*                RWSRCH2(WORD,TABLE,TABSIZE,FOUND) - FOR TWO WORD ENTRY 
* 
*         INPUT 
*                WORD - ADDRESS OF WORD TO LOOK FOR 
*                TABLE - ADDRESS OF TABLE TO SEARCH 
*                TABSIZE - NUMBER OF ENTRIES IN TABLE 
*         OUTPUT
*                FOUND - ZERO IF NOT FOUND
*                      - INDEX OF TABLE ENTRY WHICH MATCHES (FIRST IS 1)
* 
*         DOES - BINARY SEARCH OF TABLE 
* 
          ENTRY  RWSRCH1
 RWSRCH1  DATA   0
          SB1    1
          SA4    X1          WORD TO LOOK FOR 
          SA1    A1+B1
          SB3    X1          FIRST WORD ADDRESS OF TABLE
          BX6    X1 
          SA6    TABLE
          SA1    A1+B1
          SA2    X1 
          SB5    B3-B1
          SB4    B5+X2       LAST WORD ADDRESS OF TABLE 
          SA1    A1+B1
          BX6    X1 
          SA6    FOUND       FOUND ADDRESS
          SX5    B4-B3
          AX0    X5,B1       DIVIDE IN HALF 
          SA3    B3+X0       MIDDLE WORD
          IX6    X3-X4
          ZR     X6,FND1     MATCH
          PL     X6,UP1      CHECK TOP HALF 
 DOWN1    BSS    0           CHECK BOTTOM HALF
          SB3    A3+B1       TOP LIMIT
          LT     B4,B3,FAIL1 LIMITS SEARCHED
          SX5    B4-B3
          AX0    X5,B1       DIVIDE IN HALF 
          SA3    B3+X0
          IX6    X3-X4
          NG     X6,DOWN1    CHECK BOTTOM HALF
          ZR     X6,FND1     MATCH
 UP1      BSS    0           CHECK TOP HALF 
          SB4    A3-B1       CHANGE BOTTOM LIMIT
          LT     B4,B3,FAIL1 LIMITS SEARCHED
          SX5    B4-B3
          AX0    X5,B1       DIVIDE IN HALF 
          SA3    B3+X0       MIDDLE 
          IX6    X3-X4
          NG     X6,DOWN1    CHECK BOTTOM HALF
          NZ     X6,UP1      CHECK TOP HALF 
 FND1     BSS    0           MATCH FOUND
          SA1    FOUND
          SA2    TABLE
          SB2    X2-1 
          SX6    A3-B2       INDEX TO TABLE 
          SA6    X1 
          EQ     RWSRCH1
          SPACE  3
 FAIL1    BSS    0
          SA1    FOUND
          MX6    0
          SA6    X1          INDEX = 0
          EQ     RWSRCH1
          EJECT 
          ENTRY  RWSRCH2
 RWSRCH2  DATA   0
          SA4    X1          WORD TO LOOK FOR 
          SB1    1
          SA2    A4+B1       SECOND WORD
          SA1    A1+B1
          SB3    X1          FIRST WORD ADDRESS OF TABLE
          BX6    X1 
          SA6    TABLE
          SA1    A1+B1
          SA3    X1 
          LX3    1
          SB4    B3+X3
          SB2    B1+B1
          SB4    B4-B2       LAST WORD ENTRY OF TABLE 
          SA1    A1+B1
          BX6    X1 
          SA6    FOUND       FOUND ADDRESS
          SX5    B4-B3
          AX3    X5,B2       DIVIDE IN HALF 
          LX0    X3,B1
          SA3    B3+X0       MIDDLE ENTRY 
          IX6    X3-X4
          ZR     X6,CHK2     GO CHECK SECOND WORD 
          PL     X6,UP2      CHECK TOP HALF 
 DOWN2    BSS    0           CHECK LOWER HALF 
          SB3    A3+B2       CHANGE UPPER LIMIT 
          LT     B4,B3,FAIL2 LIMITS SEARCHED
          SX5    B4-B3
          AX3    X5,B2
          LX0    X3,B1       DIVIDE IN HALF 
          SA3    B3+X0       MIDDLE WORD
          IX6    X3-X4
          NG     X6,DOWN2    CHECK LOWER HALF 
          ZR     X6,CHK2     CHECK SECOND WORD
 UP2      BSS    0           CHECK LOWER HALF 
          SB4    A3-B2       CHANGE LOWER LIMIT 
          LT     B4,B3,FAIL2 LIMITS SEARCHED
          SX5    B4-B3
          AX3    X5,B2
          LX0    X3,B1       DIVIDE IN HALF 
          SA3    B3+X0       MIDDLE WORD
          IX6    X3-X4
          NG     X6,DOWN2    CHECK LOWER HALF 
          NZ     X6,UP2      CHECK LOWER HALF 
 CHK2     BSS    0           CHECK SECOND WORD
          SA5    A3+B1
          IX6    X5-X2
          NG     X6,DOWN2    CHECK LOWER HALF 
          NZ     X6,UP2      CHECK UPPER HALF 
 FND2     BSS    0           MATCH FOUND
          SA1    FOUND
          SA2    TABLE
          SB3    X2-2 
          SX6    A3-B3
          AX6    1           INDEX TO ENTRY 
          SA6    X1 
          EQ     RWSRCH2
          SPACE  3
 FAIL2    BSS    0
          SA1    FOUND
          MX6    0
          SA6    X1 
          EQ     RWSRCH2
          SPACE  3
 FOUND    BSS    1
 TABLE    BSS    1
          END 
