-------------------------------------------------------------------------------- MusClick.TXT The documentation below is for the .BIN file: MUSCLICK.BIN and is taken from the header for MusClick.ASM. -------------------------------------------------------------------------------- Programmers: Jay Parsons (Jparsons) and Ken Chan (HazMatZak) Inspiration: Bowen Moursund (Bowen) and the folks at BORBBS Date: July 6, 1992 Version: 1.1 dBASE usage syntax, after LOAD musclick: cSuccess = call( "MUSCLICK", "I", [] ) && install cSuccess = call( "MUSCLICK", "U" ) && uninstall store chr( 255 ) TO cMRow, cMCol call MUSCLICK with cMRow, cMCol && report row, col nMRow = asc( cMRow ) nMCol = asc( cMCol ) A call with "I" must be made to install the alternate mouse event handler for this to work. After that call, this .bin will push a Ctrl-PgUp, or the character specified in the optional argument to the "I" call, into the BIOS buffer when the left mouse button is released. The character must be a chr() value from 1 to 254, or the argument may be a string composed of two chr() values, the first of which is chr(255) and the second of which is the chr() value of the second (high) byte of an extended code for a key or key combination that has no ASCII value. For example, a call with a second argument of chr(255) + chr(97) will stuff Ctrl-F4. It is likely that you will want to use a key or key combination that has an inkey() and that works with ON KEY. Note that the extended codes are always positive and not always the same as the inkey() values. The installation call will return "T" if successful, and "F" if not. If the BIOS buffer happens to be full when the mouse button is released, the click will go unreported, but the row and column will be updated. If you wish a default character different from Ctrl-PgUp, change the DEFAULTKEY value before assembly. For an extended code, set it to the value of the second byte * 256 (100h). The ESC key is the only key that will attract dBASE's attention in the middle of a dBASE operation such as "LIST" or "INDEX". However, that operation will be cancelled if ESC is pressed, so consider what is going on and whether you want to have it recognize a click. Calls to get the row and column must have the first argument be chr(255), and must have a second argument. Both MUST be variables. A call to find the row and column if no "I" call has been made, or no clicks have occurred, will return chr(255) for each. The row and column reported are those as of the last click, which are not necessarily those current at the time of the call. They are determined by dividing the values in pixels reported by the mouse by 8 each and ignoring any remainder. After one call has been made to get the mouse row and column, subsequent calls to get the row and column will return chr(254) for each if no click has occurred since the previous call. This allows the dBASE program to differentiate between actual keypresses and "keypresses" made by this routine to report mouse clicks. The recommended way to test for an actual mouse click is to see if the row value returned is below 200; all row values 200 and above are reserved for future expansion (only 254 and 255 are currently used). A call with "U" should be made to uninstall the alternate event handler before installing it with a different key, and also before ending the dBASE program for safety. Repeated calls to install the handler without uninstalling it will overwrite the address of the dBASE handler and prevent restoring it. The dBASE mouse-event handler is disabled while the one in this .bin is installed. Consequently, dBASE will not know of the current mouse position or click status, and calls to the .bins in the recent Technotes article, uploaded as MOUSE_FU.TXT, will not return correct information. Use this .bin or those, but not both at once. Following are as specified by Microsoft for its mouse: Register usage on call of an alternate event handler AX = condition mask ( bits 0-4 set for events occurred ) BX = button state ( bit 0 set if left button pressed; bit 1 if right; bit 2, center.) CX = horizontal mouse cursor coordinate in pixels DX = vertical " " " " " SI = last horizontal mickey count ( vertical? ) DI = last vertical mickey count ( horizontal? ) DS = mouse driver data segment Event mask bits, 1 to respond to that event: 0 = mouse has moved ( value 1 ) 1 = left button pressed ( value 2 ) 2 = left button released ( value 4 ) 3 = right button pressed ( value 8 ) 4 = right button released ( value 16 ) Thus, if our handler were to be called whenever the mouse moved or either button were released, the mask would be 10101, or 16 + 4 + 1, decimal value 21, rather than the 4 we use because we care only about release of the left button. If an event not specified in our event mask occurs, our handler will not be called at all. If the left button is released, it will be called. AX, the condition mask, will report all events that have occurred, not only the one specified in the event mask. -------------------------------------------------------------------------------- End of File: MUSCLICK.TXT --------------------------------------------------------------------------------