FTN4
      FUNCTION BITSH(IBUF,ISTBT,IENBT,NBIT),. 92903-16001 REV.1913  7808
     .29
C 
C 
C  ******************************************************************** 
C  *                                                                  * 
C  *  NAME:   BITSH     BITS SEARCH, STOP IF FIRST HOLE IS TOO SMALL  * 
C  *  SOURCE: &BITSH    92903-18052                                   * 
C  *  BINARY: %BITSH    ----NONE---    PART OF  %GPLB4  92903-16001   * 
C  *                                                                  * 
C  *  PGMR:   FRANCOIS GAULLIER                                       * 
C  *                                                                  * 
C  ******************************************************************** 
C 
C 
C     **************************************************************
C     * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
C     * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
C     * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
C     * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
C     **************************************************************
C 
C 
C 
C     THIS FUNCTION SEARCH INTO A BITS STRING FOR A GIVEN NUMBER
C     OF SUCCESIVE BITS VALUE EQUAL TO ZERO.
C     BITS ARE NUMBERED FROM 1 TO N, BIT 1 BEING THE BIT15 OF THE 
C     FIRST WORD OF THE BUFFER, BIT 2 THE BIT14 OF 1ST WORD, BIT 16 
C     THE BIT0 OF 1ST WORD, BIT17 THE BIT15 OF 2ND WORD .. AND SO ON. 
C 
C          ABREG = BITSH ( IBUF, ISTBIT, LSTBIT, NBIT ) 
C     WHERE:
C                   IBUF   IS THE BUFFER
C                   ISTBIT STARTING BIT BEING CHECKED 
C                   LSTBIT LAST BIT BEING CHECKED 
C                   NBIT   NUMBER OF CONSECUTIVE BIT THAT 
C                          HAS TO BE CLEARED. 
C     RETURN: 
C                 OK             NOT FOUND                TABLE FULL
C 
C    A REG.      BIT #              -1                        -1
C    B REG.       0                  0                        -1
C 
C           N BITS = 0 HAVE    < N BITS = 0 IS       END OF TABLE HAVE
C           BEEN FOUND.        FOUND. ISTBIT IS      BEEN REACHED,NO BIT
C                              SETUP AS A NEW        WITH VALUE=0 HAVE
C                              START BIT VALUE.      BEEN FOUND.
C                                                    BAD PARAM. VALUE ! 
C 
      DIMENSION IBUF(1),IREG(2) 
      INTEGER AREG,BREG 
      LOGICAL ISBIT 
      EQUIVALENCE (ABREG,IREG(1),AREG),(IREG(2),BREG) 
C-----PRESET ERROR RETURN VALUE 
      AREG=-1 
      BREG=-1 
C-----CHECK IF ARGUMENT ARE OK
      IF ( NBIT .LE. 0 )  GOTO 900
      IE = IENBT-NBIT-ISTBT+2 
      IF ( IE .LE. 0 )  GOTO 900
C 
      K=ISTBT-1 
      DO 150 I=1,IE 
      NW=K/16 
      IF ( .NOT. ISBIT(IBUF(NW+1),15-(K-16*NW)) )  GOTO 180 
  150 K=K+1 
C-----NOT FOUND BIT=0 SOON ENOUGH, ERROR RETURN 
      GOTO 900
C-----BEGINING OF A HOLE IS FOUND, SET UP RETURN VALUE
  180 BREG=0
      AREG=K+1
      IF ( NBIT .EQ. 1 )  GOTO 900
C-----VERIFY THAT THE HOLE IS BIG ENOUGH
      DO 200 I=1,NBIT-1 
      K=K+1 
      NW=K/16 
      IF ( ISBIT(IBUF(NW+1),15-(K-16*NW)) )  GOTO 300 
  200 CONTINUE
C-----OK, THE HOLE IS BIG ENOUGH, RETURN GOOD NEWS
      GOTO 900
C-----THE HOLE IS TOO SMALL, RETURN A NEW START BIT 
  300 ISTBT=K+2 
      AREG=-1 
C-----RETURN THE VALUE
  900 BITSH=ABREG 
      RETURN
      END 
      END$
                                                                  