*COMDECK ALFINDMOD
      SUBROUTINE FINDMOD (NAME,INDEX) 
C 
C 
C 
C        THIS ROUTINE FINDS THE MODULE WITH THE MODULE NAME SPECIFIED 
C        IN THE "NAME" PARAMETER.  THIS MUST BE SIX CHARACTERS, LEFT
C        JUSTIFIED, BLANK FILLED, WITH BITS 0-23 SET TO ZERO. 
C        ON RETURN, INDEX IS THE POINTER TO MODTABL FOR THE DESIRED 
C        ENTRY.  IF THE ENTRY IS NOT FOUND, INDEX IS SET TO -1. 
C 
C 
*CALL ALCOMMON
C 
C        FIND THE SMALLEST POWER OF 2 LARGER THAN THE TOTAL NUMBER
C        OF MODULES TO SEARCH.
C 
      DO 5 I=1,59 
      INDEX = 2**I
      IF (INDEX.GT.MODCNTR) GO TO 10
    5 CONTINUE
C 
C        SPLIT THE TABLE IN HALF BY HALVING INDEX 
C 
   10 POWER = I-1 
      INDEX = INDEX/2 
C 
C        ERROR IF INDEX IS LESS THAN ZERO 
C 
   12 IF (INDEX.LE.0) GO TO 30
C 
C        IF WE OVERSHOT THE TABLE BOUNDARY, GO REDUCE INDEX 
C 
      IF (INDEX.GT.MODCNTR) GO TO 20
C 
C        SEE IF WE ARE POINTING TO THE RIGHT ENTRY
C 
      IF(AND(MODTABL(1,SRTDMOD(INDEX)),MODNAME) - NAME) 15,40,20
C 
C        IF INDEX POINTS TOO LOW, INCREASE IT 
C 
   15 INDEX = INDEX+2**(POWER-1)
      GO TO 25
C 
C        IF INDEX POINTS TOO HIGH, REDUCE IT
C 
   20 INDEX = INDEX - 2**(POWER-1)
C 
C        REDUCE THE POWER OF 2.  IF IT GOES NEGATIVE, WE COULDN'T 
C        FIND IT. 
C 
   25 POWER = POWER-1 
      IF (POWER.LT.0) GO TO 30
      GO TO 12
C 
C        IF WE CAN'T FIND IT, SET INDEX TO -1 
C 
   30 INDEX = -1
      RETURN
C 
C        IF WE FOUND IT, RETURN THE INDEX TO THE CALLER 
C 
   40 INDEX = SRTDMOD(INDEX)
      RETURN
      END 
C 
C 
