home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Boston 2
/
boston-2.iso
/
DOS
/
PROGRAM
/
CLIPPER
/
NFTROFF
/
9.TR
< prev
next >
Wrap
Text File
|
1993-12-01
|
33KB
|
2,256 lines
.de }n
.bp
.sp .5i
..
.wh -.8i }n
.sp .5i
.po -.4i
.ll 7.5i
.ps 9
.vs 9
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_ALT() Determine status of the Alt key
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_ALT()
Determine status of the Alt key
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_ALT() -> lValue
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
None
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
\.T\. if Alt key is pressed, \.F\. if otherwise\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function is useful for times you need to know whether or not the
Alt key is pressed, such as during a MemoEdit()\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
IF FT_ALT()
.in 0.64i
@24, 0 say "Alt"
.in 0.4i
ELSE
.in 0.64i
.ta 1.2i
@24, 0 say " "
.br
.ta
.in 0.4i
ENDIF
.sp
.in 0.08i
\fBSource:\fR ALT\.C
.sp
\fBAuthor:\fR Ted Means
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_CAPLOCK()
, FT_CTRL()
, FT_NUMLOCK()
, FT_PRTSCR()
, FT_SHIFT()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_CAPLOCK() Determine and optionally change the status of CapLock key
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_CAPLOCK()
Determine and optionally change the status of CapLock key
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_CAPLOCK([ <lNewSetting> ]) -> lCurrentSetting
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<lNewSetting>\fR is optional and if supplied is the new setting
for the CapLock key\. Specify \.T\. to turn CapLock on, or \.F\. to
turn it off\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
\.T\. if CapLock is set, \.F\. if it isn\'t set\. The value returned
.in 0.48i
represents the setting in effect prior to any changes that might
by made by <lNewSetting>\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function is useful if you need to know or set the status of the
CapLock key for some reason\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
IF FT_CAPLOCK()
.in 0.64i
Qout( "CapLock is active" )
.in 0.4i
ENDIF
.sp
.in 0.08i
\fBSource:\fR CAPLOCK\.C
.sp
\fBAuthor:\fR Ted Means
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_ALT()
, FT_CTRL()
, FT_NUMLOCK()
, FT_PRTSCR()
, FT_SHIFT()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_CTRL() Determine status of the Ctrl key
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_CTRL()
Determine status of the Ctrl key
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_CTRL() -> lValue
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
None
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
\.T\. if Ctrl key is pressed, \.F\. if otherwise\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function is useful for times you need to know whether or not
the Ctrl key is pressed, such as during a MemoEdit()\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
IF FT_CTRL()
.in 0.64i
@24, 0 say "Ctrl"
.in 0.4i
ELSE
.in 0.64i
.ta 1.28i
@24, 0 say " "
.br
.ta
.in 0.4i
ENDIF
.sp
.in 0.08i
\fBSource:\fR CTRL\.C
.sp
\fBAuthor:\fR Ted Means
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_CAPLOCK()
, FT_NUMLOCK()
, FT_PRTSCR()
, FT_SHIFT()
, FT_ALT()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MBUTPRS() Retrieve button press status
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MBUTPRS()
Retrieve button press status
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MRESET( <nButton> [, @nButPrs [, @nX [, @nY] ] ] ) -> nButStatus
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nButton>\fR is the mouse button number:
.sp
.in 1.2i
.ta 0.88i
.br
0 - Left Button
.br
.ta
.ta 0.88i
.br
1 - Right Button
.br
.ta
.br
2 - Middle Button [if applicable]
.sp
.in 0.32i
\fB<nButPrs>\fR is the number of times the specified button was pressed
.in 1.12i
since the last call to this routine\. PASSED BY REFERENCE\.
.in 0.32i
\fB<nX>\fR is the X position of the cursor when the last press occurred\. PASSED
.in 1.12i
BY REFERENCE\.
.in 0.32i
\fB<nY>\fR is the Y position of the cursor when the last press occurred\. PASSED
.in 1.12i
BY REFERENCE\.
.sp
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
An integer representing the button status:
.sp
.in 1.2i
.br
0 - no buttons pressed
.br
1 - left button pressed
.br
2 - right button pressed
.br
3 - left and right pressed
.br
4 - middle pressed
.br
5 - left and middle pressed
.br
6 - middle and right buttons pressed
.br
7 - all 3 buttons pressed
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Retrieves the mouse button status\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
IF Empty( FT_MBUTPRS(1) )
.in 0.56i
? "No Item selected"
.in 0.32i
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MBUTREL()
, FT_MDBLCLK()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MBUTREL() Get mouse button release information
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MBUTREL()
Get mouse button release information
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_MBUTREL( nButton [, @nButRel [, @nX [, @nY] ] ]) -> nBStat
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<nButton>\fR is the mouse button number
.in 1.2i
.ta 0.88i
.br
0 - Left Button
.br
.ta
.ta 0.88i
.br
1 - Right Button
.br
.ta
.br
2 - Middle Button [if applicable]
.sp
.in 0.32i
\fB<nButRel>\fR is the number of times the specified button was released
.in 1.12i
since the last call to this routine\. PASSED BY REFERENCE\.
.sp
.in 0.32i
\fB<nX>\fR is the X position of the cursor when the last release occurred\.
.in 1.12i
PASSED BY REFERENCE\.
.sp
.in 0.32i
\fB<nY>\fR is the Y position of the cursor when the last release occurred\.
.in 1.12i
PASSED BY REFERENCE\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
.ta 0.8i
<nBStat> - an integer representing button release status
.br
.ta
.in 1.36i
.br
0 - None
.br
1 - Left
.br
2 - Right
.br
3 - Middle
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function returns the release status of the mouse buttons\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
IF( FT_MBUTREL( 0 ) == 1 )
.in 0.64i
? "Left button released"
.in 0.4i
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MBUTPRS()
, FT_MDBLCLK()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MCURSOR() Set the mouse cursor
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MCURSOR()
Set the mouse cursor
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MCURSOR( [ <lState> ] ) -> lCursorState
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<lState>\fR is a logical indicating whether to set the mouse cursor on\.
.in 1.04i
.br
\.T\. - set mouse cursor on
.br
\.F\. - set mouse cursor off
.br
If omitted, no change is made to cursor state
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
A logical indicating the previous mouse cursor state\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
This function works like most Clipper state functions\. If no value
is sent to FT_MCURSOR() it will return the state of the mouse cursor\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
IF !( FT_MCURSOR() )
.in 0.56i
FT_MCURSOR( \.T\. )
.in 0.32i
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MDBLCLK() Return true if a double click was detected
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MDBLCLK()
Return true if a double click was detected
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MDBFCLK( [ <nClick> [, <nButton> [, <nInterval> [, <nRow> [, <nCol>;
.in 1.28i
\fB[, <nTime> ] ] ] ] ] ] ) -> lIsDoubleClk
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nClick>\fR is a numeric value\. If it is zero FT_MDBLCLK() will not
.in 1.04i
check for the first press but rather will simply wait the
specified period for a single press\. This is useful if this
routine is called from one which in turn responded to a button
press\. If it is not present or not equal to 0, then FT_MDBLCLK()
will wait for two presses of the specified button\.
.sp
.in 0.32i
\fB<nButton>\fR is the mouse button number
.in 1.2i
.ta 0.88i
.br
0 - Left Button
.br
.ta
.ta 0.88i
.br
1 - Right Button
.br
.ta
.br
2 - Middle Button [if applicable]
.sp
.in 0.32i
\fB<nInterval>\fR is the interval to wait for the first click if requested
.in 0.88i
and the time to wait for the second\. If not present then defaults
to 0\.5 second\.
.sp
.in 0.32i
\fB<nRow>\fR is the row number for the mouse cursor location for a double click
.in 0.88i
to be valid\. If not present then the current position is taken as
the valid location\.
.sp
.in 0.32i
\fB<nCol>\fR is the column number for the mouse cursor location for a double
.in 0.88i
click to be valid\. If not present, then the current position is
taken as the valid location\.
.sp
.in 0.32i
\fB<nTime>\fR is an optional start time for the waiting period for the first
.in 0.88i
click (of either one or two requested)\. If not given then the
time is set at entry into this routine\. This is useful when this
routine is called from another routine which was called in
response to a mouse click but needs to know if a double click
has occurred
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
\.T\. if a double click was detected\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
This is a mouse meta function that checks for the presence
of a double click\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.24i
.br
IF FT_MISREGION( 10, 10, 11, 20 ) \.AND\.;
.in 0.48i
.ta 3.2i
.br
FT_MDBLCLK(0,1,,FT_MGETX(),FT_MGETY()) && double click, right button
.br
.ta
.in 3.68i
.br
&& at current location with
.br
&& default interval
.sp
.in 0.72i
.br
MnuItem1()
.in 0.24i
.br
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MBUTPRS()
, FT_MBUTREL()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MDEFCRS() Define the mouse cursor
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MDEFCRS()
Define the mouse cursor
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MDEFCRS( <nCrsType>, <nScrMask>, <nCrsMask> ) -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nCrsType>\fR is the cursor type\.
.sp
\fB<nScrMask>\fR is the screen mask\.
.sp
\fB<nCrsMask>\fR is the cursor mask\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Defines the cursor type
.sp
.in 0.08i
\fBExamples
.sp
.sp
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MGETPOS() Get mouse cursor position and button status
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MGETPOS()
Get mouse cursor position and button status
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MGETPOS( @<nX>, @<nY> ) -> nButtonStatus
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nX>\fR is a variable that will receive the mouse X position\. It must
be passed by reference\.
.sp
\fB<nY>\fR is a variable that will receive the mouse Y position\. It must
be passed by reference\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
an integer representing button status
.sp
.in 0.8i
.br
- 0 for no button pressed
.br
- 1 for left pressed
.br
- 2 for right pressed
.br
- 3 for left and right pressed
.br
- 4 for middle pressed
.br
- 5 for left and middle pressed
.br
- 6 for right and middle pressed
.br
- 0 for all three buttons pressed
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Loads cursor position into x and y coordinates passed by reference and
returns the button status\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.br
LOCAL nX, nY
.br
LOCAL nButton := FT_MGETPOS( @nX, @nY )
.ta 1.28i
.br
? "Mouse Row :", nX
.br
.ta
.br
? "Mouse Column :", nY
.br
? "Button Status:", nButton
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MSETPOS()
, FT_MDEFCRS()
, FT_MGETX()
, FT_MGETY()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MGETX() Get mouse cursor row position
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MGETX()
Get mouse cursor row position
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MGETX() -> nRowPos
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
NONE
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
Row position of mouse
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Retrieves mouse\'s row position
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
? FT_MGETX()
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MDEFCRS()
, FT_MGETPOS()
, FT_MGETY()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MGETY() Get mouse cursor column position
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MGETY()
Get mouse cursor column position
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MGETY() -> nColPos
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
NONE
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
Column position of mouse\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Retrieves mouse\'s column position\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
? FT_MGETY()
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MDEFCRS()
, FT_MGETPOS()
, FT_MGETX()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MHIDECRS() Decrement internal mouse cursor flag and hide mouse cursor
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MHIDECRS()
Decrement internal mouse cursor flag and hide mouse cursor
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MHIDECRS() -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
NONE
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Hides the mouse cursor\. Make sure to turn the mouse cursor off when
redrawing screens\. The mouse cursor dutifully saves the screen
under it, so if you draw over the mouse cursor it will create a
"hole" in your screen when you move the mouse cursor\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.br
FT_MHIDECRS()
.br
@ 10, 10 to 20, 20
.br
FT_MSHOWCRS()
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MSHOWCRS()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MINREGION() Test if the mouse cursor is in the passed region
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MINREGION()
Test if the mouse cursor is in the passed region
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MINREGION( <nT>, <nL>, <nB>, <nR> ) -> lInRegion
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nT>\fR, \fB<nL>\fR \fB<nB>\fR \fB<nR>\fR are the four corners of the screen region\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
\.T\. if mouse is in specified region\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
This function will check to see if the mouse cursor is
within the confines of the specified region\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.br
IF FT_MINREGION( 10, 10, 11, 20 )
.in 0.48i
.br
nChoice := 1
.in 0.32i
.br
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MXLIMIT()
, FT_MYLIMIT()
, FT_MINREGION()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MMICKEYS() Get mickeys
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MMICKEYS()
Get mickeys
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MMICKEYS( @<nX>, @<nY> ) -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nX>\fR is a variable that will receive the vertical mickey count\.
.sp
\fB<nY>\fR is a variable that will receive the horizontal mickey count\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
<nX> and <nY> must be passed by reference to receive
the mouse position in Mickeys\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.br
FT_MMICKEYS( @nX, @nY )
.br
? nX
.br
? nY
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MRESET() Reset mouse driver and return status of mouse
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MRESET()
Reset mouse driver and return status of mouse
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MRESET() -> nMouseStatus
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
NONE
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
An integer representing the mouse status (0 == mouse not installed)
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Resets the mouse driver and returns mouse status\. Use FT_MSHOWCRS()
to display the mouse cursor\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
IF Empty( FT_MRESET() )
.in 0.56i
? "No mouse driver is installed"
.in 0.32i
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MSHOWCRS()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MSETPOS() Position the mouse cursor
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MSETPOS()
Position the mouse cursor
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MSETPOS( <nX>, <nY> ) -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nX>\fR is the desired mouse row\.
.sp
\fB<nY>\fR is the desired mouse column\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Positions mouse cursor on screen\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.ta 2i
FT_MSETPOS( 10, 20 ) // position mouse cursor at row 10, col 20
.br
.ta
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MGETPOS()
, FT_MDEFCRS()
, FT_MGETX()
, FT_MGETY()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MSHOWCRS() Increment internal cursor flag and display mouse cursor
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MSHOWCRS()
Increment internal cursor flag and display mouse cursor
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MSHOWCRS() -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
NONE
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Displays the mouse cursor\. Make sure to turn the mouse cursor off
when redrawing screens\. The mouse cursor dutifully saves the screen
under it, so if you draw over the mouse cursor it will create a "hole"
in your screen when you move the mouse cursor\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.br
IF Empty( FT_MRESET() )
.in 0.56i
.br
FT_MSHOWCRS()
.in 0.32i
.br
ENDIF
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MHIDECRS()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MXLIMIT() Set vertical bounds of mouse travel
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MXLIMIT()
Set vertical bounds of mouse travel
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MXLIMIT( <nX1>, <nX2> ) -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nX1>\fR is the top row limit\.
.sp
\fB<nX2>\fR is the bottom row limit\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Set maximum vertical bounds of mouse\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
FT_MXLIMIT( 10, 20 )
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MYLIMIT()
, FT_MINREGION()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_MYLIMIT() Set horizontal bounds of mouse travel
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_MYLIMIT()
Set horizontal bounds of mouse travel
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.32i
\fBFT_MYLIMIT( <nY1>, <nY2> ) -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.32i
\fB<nY1>\fR is the left column limit\.
.sp
\fB<nY2>\fR is the right column limit\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
Set maximum horizontal bounds of mouse\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
FT_MYLIMIT( 10, 20 )
.sp
.in 0.08i
\fBSource:\fR MOUSE1\.PRG
.sp
\fBAuthor:\fR Robert DiFalco and Leo Letendre
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_MXLIMIT()
, FT_MINREGION()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_NUMLOCK() Return status of NumLock key
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_NUMLOCK()
Return status of NumLock key
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_NUMLOCK( [ <lNewSetting> ] ) -> lCurrentSetting
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<lNewSetting>\fR is optional and if supplied is the new setting
for the CapLock key\. Specify \.T\. to turn CapLock on, or \.F\. to
turn it off\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
lValue is \.T\. if NumLock is set, \.F\. if it isn\'t set\. The value
returned represents the setting in effect prior to any changes that
might by made by <lNewSetting>\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function is useful if you need to know or set the status of the
NumLock key for some reason\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
IF FT_NUMLOCK()
.in 0.64i
Qout( "NumLock is active" )
.in 0.4i
ENDIF
.sp
.in 0.24i
Another one, slightly strange, courtesy of Glenn Scott:
.sp
.sp
.in 0.56i
function numBlink()
.in 0.8i
local lOldNum := ft_numlock()
.sp
while inkey( \.5 ) != 27
.in 1.04i
ft_numlock( !ft_numlock() )
.in 0.8i
end
.sp
return ft_numlock( lOldNum )
.sp
.in 0.08i
\fBSource:\fR NUMLOCK\.C
.sp
\fBAuthor:\fR Ted Means
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_CAPLOCK()
, FT_CTRL()
, FT_PRTSCR()
, FT_SHIFT()
, FT_ALT()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_PRTSCR() Enable or disable the Print Screen key
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_PRTSCR()
Enable or disable the Print Screen key
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_PRTSCR( [ <lSetStat> ] ) -> lCurStat
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<lSetStat>\fR set to \.T\. will enable the Print Screen key,
\.F\. will disable it\. If omitted, leaves status as is\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
The current state: \.T\. if enabled, \.F\. if disabled\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function is valuable if you have a need to disable the
printscreen key\. It works by fooling the BIOS into thinking that
a printscreen is already in progress\. The BIOS will then refuse
to invoke the printscreen handler\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
.ta 1.84i
FT_PRTSCR( \.F\. ) && Disable the printscreen key
.br
.ta
.ta 1.84i
FT_PRTSCR( \.T\. ) && Enable the printscreen key
.br
.ta
.ta 1.84i
MemVar := FT_PRTSCR() && Get the current status
.br
.ta
.sp
.in 0.08i
\fBSource:\fR PRTSCR\.C
.sp
\fBAuthor:\fR Ted Means
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_CAPLOCK()
, FT_CTRL()
, FT_NUMLOCK()
, FT_SHIFT()
, FT_ALT()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_PUTKEY() Stuff a keystroke into the keyboard buffer
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_PUTKEY()
Stuff a keystroke into the keyboard buffer
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_PUTKEY( <nKeyValue> ) -> lResult
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<nKeyValue>\fR is the INKEY() value of the keystroke to be stuffed\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
.br
\.T\. if the keystroke was put into the keyboard buffer\.
.br
\.F\. if nKeyValue was invalid or the buffer was full\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
This function is similar to the KEYBOARD command, with a few
exceptions\. First, this function does not clear the keyboard buffer
before inserting the keystroke\. In addition, since it uses the
Inkey() value, you can stuff any key, including function keys, into
the keyboard buffer\. However, this also means that unlike the KEYBOARD
command, you can only stuff one keystroke at a time\.
.sp
You can easily create a User-Defined Command that makes this function
even more like the KEYBOARD command\. For example,
.sp
.in 0.64i
#command KEYSTROKE <key> => FT_PUTKEY( <key> )
.sp
.in 0.32i
will create a command called KEYSTROKE that could be used as a
companion command to KEYBOARD\. The only difference is that it would
insert a single keystroke instead of a string\.
.sp
Be aware that early releases of Clipper 5\.0 have a bug in their
keyboard handling\. Among other things, Set Typeahead does not work
correctly, so this function may at times return \.T\. even though the
keyboard buffer is full\. The best solution is not to attempt stuffing
more than 15 keys at a time into the keyboard buffer\.
.sp
This function is written to adhere to Turbo Assembler\'s IDEAL mode\.
To use another assembler, rearrange the SEGMENT and PROC directives
and make any other necessary changes to the source code\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.48i
.ta 1.44i 1.76i
FT_PUTKEY( -9 ) // Stuff the F10 key
.br
.ta
.ta 1.44i 1.76i
FT_PUTKEY( 276 ) // Stuff the Alt T key
.br
.ta
.ta 1.44i 1.76i
KEYSTROKE 28 // Stuff the F1 key using a User-Defined Command
.br
.ta
.sp
.in 0.08i
\fBSource:\fR PUTKEY\.ASM
.sp
\fBAuthor:\fR Ted Means
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_SCANCODE() Wait for keypress and return keyboard scan code
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_SCANCODE()
Wait for keypress and return keyboard scan code
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_SCANCODE() -> cCode
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
None
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
A two-character string, corresponding to the keyboard scan code\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
FT_SCANCODE() enables you to distinguish the different scancodes
of similar keys (such as Grey minus versus regular minus), thus
increasing the number of keys your input routine can recognize\.
.sp
It works like INKEY(), in that it waits for a key to be pressed\.
The scan code consists of two bytes, which are returned as a
two-character string\.
.sp
For example, calling FT_SCANCODE() and pressing the Grey-minus
key will return a two character string:
.sp
.in 0.96i
CHR(45) + CHR(74)
.sp
.in 0.4i
LASTKEY() is not updated by FT_SCANCODE(), so don\'t try to
test LASTKEY() to see what was pressed during an FT_SCANCODE()
call\. Simply assign the return value to a variable and test
that (see the test driver below)\.
.sp
.ta 0.24i
* This was adapted from a short C routine posted by John Kaster on
.br
.ta
.in 0.64i
NANFORUM\. It was written in Clipper to help demonstrate the
FT_INT86 function of the Nanforum Toolkit\.
.sp
.in 0.4i
This program requires FT_INT86()\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.64i
cKey := FT_SCANCODE()
.sp
.in 0.48i
[grey-] returns: CHR(45) + CHR(74)
.ta 0.64i
[-] returns: CHR(45) + CHR(12)
.br
.ta
[grey+] returns: CHR(43) + CHR(78)
.ta 0.64i
[+] returns: CHR(43) + CHR(13)
.br
.ta
.sp
.in 0.08i
\fBSource:\fR SCANCODE\.PRG
.sp
\fBAuthor:\fR Glenn Scott (from John Kaster)
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_SETRATE() Set the keyboard delay and repeat rate on PC/AT & PS/2
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_SETRATE()
Set the keyboard delay and repeat rate on PC/AT & PS/2
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_SETRATE( [ <nDelayTime> ] [, <nRepeatRate> ] ) -> NIL
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<nDelayTime>\fR is the keyboard delay time\.
.sp
\fB<nRepeatRate>\fR is the keyboard repeat rate\.
.sp
.in 0.8i
.ta 2.16i
\(sq
.br
\l'1.84i'
.br
\(sq \(sq
.br
\l'1.92i'
.br
\(sq
.br
.ta
.ta 0i 1.44i 1.92i 2.16i 3.6i 4.16i
\(br nDelayTime DELAY \(br \(br RepeatRate SPEED \(br
.br
.ta
.ta 0i 2.16i
\(br
.br
\l'1.84i'
.br
\(sq \(br
.br
\l'1.92i'
.br
\(sq
.br
.ta
.ta 0i 0.48i 1.44i 1.92i 2.16i 2.56i 3.52i 4.16i
\(br 0 250ms \(br \(br 0 30\.0cps \(br
.br
.ta
.ta 0i 0.48i 1.92i 2.16i 2.56i 3.52i 4.16i
\(br 1 (default) 500ms \(br \(br 1 26\.7cps \(br
.br
.ta
.ta 0i 0.48i 1.44i 1.92i 2.16i 2.56i 3.52i 4.16i
\(br 2 750ms \(br \(br 2 24\.0cps \(br
.br
.ta
.ta 0i 0.48i 1.36i 1.92i 2.16i 2.56i 3.52i 4.16i
\(br 3 1000ms \(br \(br 3 21\.8cps \(br
.br
.ta
.ta 2.16i 2.56i 3.52i 4.16i
\(sq
.br
\l'1.84i'
.br
\(sq \(br 4 20\.0cps \(br
.br
.ta
.in 2.96i
.ta 0i 0.4i 1.36i 2i
\(br 5 18\.5cps \(br
.br
.ta
.ta 0i 0.4i 1.36i 2i
\(br 6 17\.1cps \(br
.br
.ta
.ta 0i 0.4i 1.36i 2i
\(br 7 16\.0cps \(br
.br
.ta
.ta 0i 0.4i 1.36i 2i
\(br 8 15\.0cps \(br
.br
.ta
.ta 0i 0.4i 1.36i 2i
\(br 9 13\.3cps \(br
.br
.ta
.ta 0i 0.32i 1.36i 2i
\(br 10 12\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.36i 2i
\(br 11 10\.9cps \(br
.br
.ta
.ta 0i 0.32i 2i
\(br 12 (default) 10\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 13 9\.2cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 14 8\.6cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 15 8\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 16 7\.5cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 17 6\.7cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 18 6\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 19 5\.5cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 20 5\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 21 4\.6cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 22 4\.3cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 23 4\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 24 3\.7cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 25 3\.3cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 26 3\.0cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 27 2\.7cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 28 2\.5cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 29 2\.3cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 30 2\.1cps \(br
.br
.ta
.ta 0i 0.32i 1.44i 2i
\(br 31 2\.0cps \(br
.br
.ta
\(sq
.br
\l'1.92i'
.br
\(sq
.sp
.in 0.08i
\fBReturns
.sp
.in 0.32i
NIL
.sp
.in 0.08i
\fBDescription
.sp
.in 0.32i
This routine is used to adjust the IBM PC/AT and PS/2 "typematic"
repeat and delay feature\. This is used to allow the users of your
application to adjust these speeds to the most comfortable level\.
.sp
This source code is written for Microsoft Assembler v5\.1\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.32i
.ta 1.52i
FT_SETRATE(0,0) // Set keyboard to fastest possible settings
.br
.ta
.ta 1.52i
FT_SETRATE() // Set keyboard to AT defaults (10\.9cps,500ms delay)
.br
.ta
.ta 1.52i
FT_SETRATE(11,1) // Set keyboard to PS/2 defaults (10cps,500ms delay)
.br
.ta
.sp
.in 0.08i
\fBSource:\fR KSPEED\.ASM
.sp
\fBAuthor:\fR James R\. Zack
.in 0i
.ta 1.63265i
.sp 2
.ne 20
.ps +3
.vs +3
FT_SHIFT() Determine status of shift key
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_SHIFT()
Determine status of shift key
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_SHIFT() -> lValue
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
None
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
\.T\. if a shift key is pressed, \.F\. if otherwise\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
This function is useful for times you need to know whether or not the
shift key is pressed, such as during a MemoEdit()\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
IF FT_SHIFT()
.in 0.64i
@24, 0 say "Shift"
.in 0.4i
ELSE
.in 0.64i
.ta 1.36i
@24, 0 say " "
.br
.ta
.in 0.4i
ENDIF
.sp
.in 0.08i
\fBSource:\fR SHIFT\.C
.sp
\fBAuthor:\fR Ted Means
.in 0i
.sp
.in 1.5i
.ti -1.5i
.ta 1.5i
.ft B
See Also:
.ft R
FT_CAPLOCK()
, FT_CTRL()
, FT_NUMLOCK()
, FT_PRTSCR()
, FT_ALT()
.ta 1.63265i
.in 0i
.sp 2
.ne 20
.ps +3
.vs +3
FT_SINKEY() Replacement for INKEY() that tests for SET KEY procedures
.br
.ta
.in 0.08i
.ps -3
.vs -3
.sp 2
\fBFT_SINKEY()
Replacement for INKEY() that tests for SET KEY procedures
.in 0i
.br
\l'6.24i'
.br
.sp
.in 0.08i
\fBSyntax
.sp
.in 0.4i
\fBFT_SINKEY( [ <nWaitTime> ] ) -> nKey
.sp
.in 0.08i
\fBArguments
.sp
.in 0.4i
\fB<nWaitTime>\fR is the number of seconds to wait\. If zero,
FT_SINKEY() will wait indefinitely for a keypress\. If not
passed, FT_SINKEY() does not wait for a keypress\. If NIL,
it is treated the same as 0\.
.sp
.in 0.08i
\fBReturns
.sp
.in 0.4i
The INKEY() value of the key pressed\.
.sp
.in 0.08i
\fBDescription
.sp
.in 0.4i
FT_SINKEY() is similar to the function provided by Nantucket in
KEYBOARD\.PRG, with one significant difference: you can pass NIL
to INKEY(), which will be treated as a zero (i\.e\., wait indefinitely
for keypress)\. Therefore, it is necessary to differentiate between
an explicit NIL and one that is a result of a formal parameter NOT
being received\.
.sp
FT_SINKEY() differs from the standard INKEY() in that it will
respond to any keys set with SET KEY TO or SetKey()\.
.sp
.in 0.08i
\fBExamples
.sp
.in 0.4i
SetKey( K_F1, {|n,l,r| Help(n,l,r) } )
.ta 2.16i
nKey := FT_SINKEY(0) // Help() will be called if F1 pressed
.br
.ta
.sp
.in 0.08i
\fBSource:\fR SINKEY\.PRG
.sp
\fBAuthor:\fR Greg Lief