/* * File......: ISBIT.PRG * Author....: Forest Belt, Computer Diagnostic Services, Inc. * CIS ID....: ? * * This is an original work by Forest Belt and is placed in the * public domain. * * Modification history: * --------------------- * * Rev 1.2 15 Aug 1991 23:03:46 GLENN * Forest Belt proofread/edited/cleaned up doc * * Rev 1.1 14 Jun 1991 19:52:02 GLENN * Minor edit to file header * * Rev 1.0 01 Apr 1991 01:01:32 GLENN * Nanforum Toolkit * */ /* $DOC$ * $FUNCNAME$ * FT_ISBIT() * $CATEGORY$ * String * $ONELINER$ * Test the status of an individual bit * $SYNTAX$ * FT_ISBIT( , ) -> lResult * $ARGUMENTS$ * is a character from CHR(0) to CHR(255) * * is a number from 0 to 7 conforming to standard right-to-left * bit-numbering convention and representing the position of the * bit within the byte. * $RETURNS$ * .T. if designated bit is set (1), .F. if not set (0), NIL if * invalid parameters. * $DESCRIPTION$ * Tests for status of any selected bit in the byte passed as a parameter. * Byte must be presented in CHR() form, as a literal constant, or as the * one-byte character result of an expression. * * This function is presented to illustrate that bit-wise operations * are possible with Clipper code. For greater speed, write .C or * .ASM versions and use the Clipper Extend system. * $EXAMPLES$ * This code tests whether bit 3 is set in the byte represented by * CHR(107): * * lBitflag := FT_ISBIT(CHR(107), 3) * ? lBitflag // result: .T. * * This code tests whether bit 5 is set in the byte represented by ASCII * 65 (letter 'A') * * ? FT_ISBIT('A', 5) // result: .F. * * For a demonstration of Clipper bit manipulations, compile and * link the program BITTEST.PRG in the Nanforum Toolkit source code. * $SEEALSO$ * FT_BITSET() FT_BITCLR() * $END$ */ FUNCTION FT_ISBIT(cInbyte,nBitPos) LOCAL lBitStat IF valtype(cInbyte) != "C" .or. valtype(nBitPos) != "N" // parameter check lBitStat := NIL ELSE if (nBitPos > 7) .or. (nBitPos < 0) .or. (nBitPos != int(nBitPos)) lBitStat := NIL else lBitStat := int(((asc(cInByte) * (2 ^ (7 - nBitPos))) % 256) / 128) == 1 endif ENDIF RETURN lBitStat