FTN4 FUNCTION BITSH(IBUF,ISTBT,IENBT,NBIT),. 92080-1X052 REV.2026 .800515 C C C ******************************************************************** C * * C * NAME: BITSH BITS SEARCH, STOP IF FIRST HOLE IS TOO SMALL * C * SOURCE: &BITSH 92080-18052 * C * BINARY: %BITSH ----NONE--- PART OF %GPLB4 92080-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$