Files
harbour-core/harbour/contrib/hbnf/peek.c
Viktor Szakats 1de11ac355 2009-06-14 00:52 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/gtwvg/gtwvg.c
  * contrib/gtwvg/wincallb.c
  * contrib/gtwvg/wvgcore.c
  * contrib/gtwvg/wvgcuig.c
  * contrib/gtwvg/wvgutils.c
  * contrib/gtwvg/wvgwin.c
  * contrib/hbbmcdx/bmdbfcdx.c
  * contrib/hbbtree/hb_btree.c
  * contrib/hbclipsm/environ.c
  * contrib/hbclipsm/gauge.c
  * contrib/hbclipsm/num.c
  * contrib/hbclipsm/status.c
  * contrib/hbct/addascii.c
  * contrib/hbct/asciisum.c
  * contrib/hbct/ascpos.c
  * contrib/hbct/atadjust.c
  * contrib/hbct/atnum.c
  * contrib/hbct/atrepl.c
  * contrib/hbct/bitnum.c
  * contrib/hbct/charevod.c
  * contrib/hbct/charlist.c
  * contrib/hbct/charmirr.c
  * contrib/hbct/charmix.c
  * contrib/hbct/charone.c
  * contrib/hbct/charonly.c
  * contrib/hbct/charop.c
  * contrib/hbct/charrepl.c
  * contrib/hbct/charsort.c
  * contrib/hbct/charsprd.c
  * contrib/hbct/charswap.c
  * contrib/hbct/color.c
  * contrib/hbct/count.c
  * contrib/hbct/ctc.c
  * contrib/hbct/ctmath2.c
  * contrib/hbct/ctnet.c
  * contrib/hbct/ctpad.c
  * contrib/hbct/ctstr.c
  * contrib/hbct/ctstrfil.c
  * contrib/hbct/ctwfunc.c
  * contrib/hbct/datetime.c
  * contrib/hbct/dattime2.c
  * contrib/hbct/disk.c
  * contrib/hbct/expand.c
  * contrib/hbct/files.c
  * contrib/hbct/finan.c
  * contrib/hbct/justify.c
  * contrib/hbct/keyset.c
  * contrib/hbct/lton.c
  * contrib/hbct/maxline.c
  * contrib/hbct/misc1.c
  * contrib/hbct/num1.c
  * contrib/hbct/numat.c
  * contrib/hbct/numcount.c
  * contrib/hbct/numline.c
  * contrib/hbct/pos1.c
  * contrib/hbct/pos2.c
  * contrib/hbct/posdiff.c
  * contrib/hbct/print.c
  * contrib/hbct/range.c
  * contrib/hbct/relation.c
  * contrib/hbct/remove.c
  * contrib/hbct/replace.c
  * contrib/hbct/screen1.c
  * contrib/hbct/screen2.c
  * contrib/hbct/setrc.c
  * contrib/hbct/strdiff.c
  * contrib/hbct/strswap.c
  * contrib/hbct/tab.c
  * contrib/hbct/token1.c
  * contrib/hbct/token2.c
  * contrib/hbct/trig.c
  * contrib/hbct/video.c
  * contrib/hbct/wordrepl.c
  * contrib/hbct/wordtoch.c
  * contrib/hbcurl/hbcurl.c
  * contrib/hbcurl/hbcurlm.c
  * contrib/hbfbird/firebird.c
  * contrib/hbfimage/fi_wrp.c
  * contrib/hbgd/gdwrp.c
  * contrib/hbgt/ascposgt.c
  * contrib/hbgt/atdiff.c
  * contrib/hbgt/bitflags.c
  * contrib/hbgt/charmixg.c
  * contrib/hbgt/chrcount.c
  * contrib/hbgt/chrfirst.c
  * contrib/hbgt/chrtotal.c
  * contrib/hbgt/strcount.c
  * contrib/hbgt/strcspn.c
  * contrib/hbgt/strdiffg.c
  * contrib/hbgt/strleft.c
  * contrib/hbgt/strpbrk.c
  * contrib/hbgt/strright.c
  * contrib/hbmisc/dates2.c
  * contrib/hbmisc/hb_f.c
  * contrib/hbmisc/stringsx.c
  * contrib/hbmysql/mysql.c
  * contrib/hbmzip/hbmzip.c
  * contrib/hbnf/caplock.c
  * contrib/hbnf/chdir.c
  * contrib/hbnf/color2n.c
  * contrib/hbnf/ftattr.c
  * contrib/hbnf/fttext.c
  * contrib/hbnf/getenvrn.c
  * contrib/hbnf/mkdir.c
  * contrib/hbnf/n2color.c
  * contrib/hbnf/numlock.c
  * contrib/hbnf/peek.c
  * contrib/hbnf/poke.c
  * contrib/hbnf/prtscr.c
  * contrib/hbnf/putkey.c
  * contrib/hbnf/rmdir.c
  * contrib/hbodbc/odbc.c
  * contrib/hbqt/hbqt_qradiobutton.cpp
  * contrib/hbqt/qth/QRadioButton.qth
  * contrib/hbsqlit3/hbsqlit3.c
  * contrib/hbssl/ssl.c
  * contrib/hbssl/sslciph.c
  * contrib/hbtip/utils.c
  * contrib/hbwin/legacyc.c
  * contrib/hbwin/olecore.c
  * contrib/hbwin/wapi_commctrl.c
  * contrib/hbwin/wapi_winbase.c
  * contrib/hbwin/wapi_winuser.c
  * contrib/hbwin/win_dll.c
  * contrib/hbwin/win_misc.c
  * contrib/hbwin/win_prn1.c
  * contrib/hbwin/win_prn2.c
  * contrib/hbwin/win_prt.c
  * contrib/rddads/ads1.c
  * contrib/rddads/adsfunc.c
  * contrib/rddads/adsmgmnt.c
  * contrib/xhb/datesxhb.c
  * contrib/xhb/fparse.c
  * contrib/xhb/freadlin.c
  * contrib/xhb/hbcomprs.c
  * contrib/xhb/hboutdbg.c
  * contrib/xhb/txtline.c
  * contrib/xhb/xhbarr.c
  * contrib/xhb/xhbcopyf.c
  * contrib/xhb/xhbfunc.c
  * contrib/xhb/xhbsave.c
  * contrib/xhb/xhbtrim.c
  * contrib/xhb/xstrdel.c
    * IS*() -> HB_IS*() macro rename.
      (pass 3 - final)
2009-06-13 22:57:48 +00:00

96 lines
2.4 KiB
C

/*
* $Id$
*/
/*
* File......: peek.c
* Author....: Ted Means
* CIS ID....: 73067,3332
*
* This function is an original work by Ted Means and is placed in the
* public domain.
*
* Modification history:
* ---------------------
*
* Rev 1.3 07 Feb 1994 20:11:50 GLENN
* Ted re-wrote to make it CPMI compliant.
*
* Rev 1.2 15 Aug 1991 23:08:18 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.1 14 Jun 1991 19:53:46 GLENN
* Minor edit to file header
*
* Rev 1.0 01 Apr 1991 01:02:52 GLENN
* Nanforum Toolkit
*
*
*/
/* $DOC$
* $FUNCNAME$
* FT_PEEK()
* $CATEGORY$
* DOS/BIOS
* $ONELINER$
* Retrieve a byte from a specified memory location.
* $SYNTAX$
* FT_PEEK( <nSegment>, <nOffset> ) -> nValue
* $ARGUMENTS$
* <nSegment> is the segment of the desired memory address.
*
* <nOffset> is the offset of the desired memory address.
* $RETURNS$
* <nValue> will be a value from 0 to 255 if all parameters were valid and
* the function was able to retrieve the desired byte.
* <nValue> will be -1 if invalid parameters were passed.
* $DESCRIPTION$
* Use this function if you have a need to examine a specific memory
* location. The function will return the byte at the specified
* address as a numeric value. If you need this value as a character,
* use the Chr() function to convert it.
*
* This function was written for version 5.1 of MicroSoft C. You may
* have to modify the source code to use another compiler.
* $EXAMPLES$
* local nVMode := FT_PEEK( 0, 1097 ) // Get the current video mode
* $END$
*/
#include "hbapi.h"
#include "cpmi.h"
#define FP_SEG( fp ) ( *( ( unsigned int * ) &( fp ) + 1 ) )
#define FP_OFF( fp ) ( *( ( unsigned int * ) &( fp ) ) )
HB_FUNC(FT_PEEK)
{
auto unsigned int ProtMode = cpmiIsProtected();
auto unsigned char * bytePtr;
if ( ( PCOUNT >= 2 ) && ( HB_ISNUM( 1 ) ) && ( HB_ISNUM( 2 ) ) )
{
FP_SEG( bytePtr ) = hb_parni( 1 );
FP_OFF( bytePtr ) = hb_parni( 2 );
if ( ProtMode )
{
FP_SEG( bytePtr ) = hb_cpmiProtectedPtr( bytePtr, 1 );
FP_OFF( bytePtr ) = 0;
if ( FP_SEG( bytePtr ) == 0 ) goto Bogus;
}
_retni( ( int ) *bytePtr );
if ( ProtMode ) hb_cpmiFreeSelector( FP_SEG( bytePtr ) );
}
else
Bogus: hb_retni( -1 );
return;
}