home *** CD-ROM | disk | FTP | other *** search
- FUNCTION setBit
- PARAMETER pnVar, pnBit, pval
- PRIVATE i,j,retval, lnOrigVar
- lnOrigVar=pnVar
- lcRet=""
- IF PARAMETERS()=2
- llset="T"
- ELSE
- llset=IIF((TYPE('pval')='L' AND pval) OR (TYPE('pval')='N' AND pval=1),'1','0')
- ENDIF
- IF pnVar=0
- retval=.f.
- ELSE
- i=0
- DO WHILE 2^i<=pnVar
- i=i+1
- ENDDO
- FOR j=i-1 TO 0 STEP -1
- IF 2^j<=pnvar
- lcRet=lcRet+"1"
- pnvar=pnvar-2^j
- ELSE
- lcRet=lcRet+"0"
- ENDIF
- ENDFOR
- IF (pnBit+1)>LEN(lcret)
- retval=.f.
- ELSE
- retval=(SUBSTR(lcret,LEN(lcRet)-pnBit,1)=='1')
- ENDIF
- ENDIF
- DO CASE
- CASE !retval AND llset="1"
- * set the bit
- RETURN lnorigVar+2^pnBit
- CASE retval AND llset="0"
- RETURN lnorigVar-2^pnBit
- CASE llset="T"
- RETURN lnorigVar+IIF(retval,-(2^pnBit),2^pnBit)
- OTHERWISE
- RETURN lnOrigVar
- ENDCASE
-