1. Mice Reading

--Message-Boundary-9180
Content-type: text/plain; charset=US-ASCII
Content-disposition: inline
Content-description: Attachment information.

The following section of this message contains a file attachment
prepared for transmission using the Internet MIME message format.
If you are using Pegasus Mail, or any another MIME-compliant system,
you should be able to save it or view it from within your mailer.
If you cannot, please ask your system administrator for assistance.

   ---- File information -----------
     File:  C_MOUSE.E
     Date:  18 Oct 1997, 21:21
     Size:  27909 bytes.
     Type:  Unknown

--Message-Boundary-9180
Content-type: Application/Octet-stream; name="C_MOUSE.E"; type=Unknown

new topic     » topic index » view message » categorize

2. Mice Reading

I have included my mouse code and info on mouse interrupts.

This is my function for reading te mouses position...
It was written some time ago. I'm not sure if it's perfect.

global function get_mouse_pos()
sequence reg_list, vid_inf
object val

    val = MS_NOMOUSE
    if MS_INSTALLED then                // If mouse was found
val = repeat(0,2)                               // Generate return
        sequence
        reg_list = repeat(0,10)                 // Generate Register sequence
        vid_inf = video_config()                // Get video info
        reg_list[REG_AX] = #0003                        // AX = 0003h
        reg_list = dos_interrupt(#33,reg_list)  // Interrupt
        if vid_inf[VC_MODE] >= 4 and vid_inf[VC_MODE] != 7 then --graphics
            val[1] = reg_list[REG_CX]           // Prepare return result
            val[2] = reg_list[REG_DX]
        else -- text
            val[1] = floor(reg_list[REG_DX] / 8) + 1    //Prepeare return result
            val[2] = floor(reg_list[REG_CX] / 8) + 1
        end if
    end if
    return val
end function
-------------------------
Sincerely,
Mathew Hounsell

mat.hounsell at excite.com

new topic     » goto parent     » topic index » view message » categorize

3. Mice Reading

Mouse Function Calls

Complete set of interrupt functions and subfunctions.

Most of this information is retrieved from the shareware utility "HelpPC",
by David Jurgens (CIS 71270,2422).

Collected and uploaded to CIS/MSLANG by:

                  Ernest Vogelsinger, CIS PPN 100015,551.

                                                                 03/04/93
   ----------------------------------------------------------------------

INT 33 - Mouse Function Calls

For more information see the following topics:

        INT 33,0   Mouse Reset/Get Mouse Installed Flag
        INT 33,1   Show Mouse Cursor
        INT 33,2   Hide Mouse Cursor
        INT 33,3   Get Mouse Position and Button Status
        INT 33,4   Set Mouse Cursor Position
        INT 33,5   Get Mouse Button Press Information
        INT 33,6   Get Mouse Button Release Information
        INT 33,7   Set Mouse Horizontal Min/Max Position
        INT 33,8   Set Mouse Vertical Min/Max Position
        INT 33,9   Set Mouse Graphics Cursor
        INT 33,A   Set Mouse Text Cursor
        INT 33,B   Read Mouse Motion Counters
        INT 33,C   Set Mouse User Defined Subroutine and Input Mask
        INT 33,D   Mouse Light Pen Emulation On
        INT 33,E   Mouse Light Pen Emulation Off
        INT 33,F   Set Mouse Mickey Pixel Ratio
        INT 33,10  Mouse Conditional OFF
        INT 33,13  Set Mouse Double Speed Threshold
        INT 33,14  Swap interrupt subroutines
        INT 33,15  Get mouse driver state and memory requirements
        INT 33,16  Save mouse driver state
        INT 33,17  Restore mouse driver state
        INT 33,18  Set alternate subroutine call mask and address
        INT 33,19  Get user alternate interrupt address
        INT 33,1A  Set mouse sensitivity
        INT 33,1B  Get mouse sensitivity
        INT 33,1C  Set mouse interrupt rate (InPort only)
        INT 33,1D  Set mouse CRT page
        INT 33,1E  Get mouse CRT page
        INT 33,1F  Disable mouse driver
        INT 33,20  Enable mouse driver
        INT 33,21  Reset mouse software
        INT 33,22  Set language for messages
        INT 33,23  Get language number
        INT 33,24  Get driver version, mouse type & IRQ number

        - function is specified in AX
        - a mickey is 1/200 inches
        - for additional information see your vendor documentation
        - function number occupies all of AX rather than AH


Mouse functions can be broken down into the following classes:

        Mouse Driver Control / Feedback Functions
        INT 33,0   Mouse Reset/Get Mouse Installed Flag
        INT 33,15  Get Mouse Driver State and Memory Requirements
        INT 33,16  Save Mouse Driver State
        INT 33,17  Restore Mouse Driver State
        INT 33,1C  Set Mouse Interrupt Rate (InPort only)
        INT 33,1F  Disable Mouse Driver
        INT 33,20  Enable Mouse Driver
        INT 33,21  Reset Mouse Software
        INT 33,24  Get Driver Version, Mouse Type & IRQ Number

        Mouse Cursor Control Functions
        INT 33,1   Show Mouse Cursor
        INT 33,2   Hide Mouse Cursor
        INT 33,4   Set Mouse Cursor Position
        INT 33,7   Set Mouse Horizontal Min/Max Position
        INT 33,8   Set Mouse Vertical Min/Max Position
        INT 33,9   Set Mouse Graphics Cursor
        INT 33,A   Set Mouse Text Cursor
        INT 33,F   Set Mouse Mickey Pixel Ratio
        INT 33,10  Mouse Conditional OFF
        INT 33,13  Set Mouse Double Speed Threshold
        INT 33,1A  Set Mouse Sensitivity
        INT 33,1B  Get Mouse Sensitivity

        Mouse Button and Position Feedback Functions
        INT 33,3   Get Mouse Position and Button Status
        INT 33,5   Get Mouse Button Press Information
        INT 33,6   Get Mouse Button Release Information
        INT 33,B   Read Mouse Motion Counters

        Video Control and Feedback Functions
        INT 33,1D  Set Mouse CRT Page
        INT 33,1E  Get Mouse CRT Page

        Mouse Interrupt Setup Functions
        INT 33,C   Set Mouse User Defined Subroutine and Input Mask
        INT 33,14  Swap Interrupt Subroutines

        Alternate Mouse Interrupt Setup Functions
        INT 33,18  Set Alternate Subroutine Call Mask and Address
        INT 33,19  Get User Alternate Interrupt Address

        Light Pen Emulation Functions
        INT 33,D   Mouse Light Pen Emulation On
        INT 33,E   Mouse Light Pen Emulation Off

        International Language Support Functions
        INT 33,22  Set Language for Messages
        INT 33,23  Get Language Number



INT 33,0 - Mouse Reset/Get Mouse Installed Flag

        AX = 00


        on return:
        AX = 0000  mouse driver not installed
             FFFF  mouse driver installed
        BX = number of buttons


        - resets mouse to default driver values:

          .  mouse is positioned to screen center
          .  mouse cursor is reset and hidden
          .  no interrupts are enabled (mask = 0)
          .  double speed threshold set to 64 mickeys per second
          .  horizontal mickey to pixel ratio (8 to 8)
          .  vertical mickey to pixel ratio (16 to 8)
          .  max width and height are set to maximum for video mode


INT 33,1 - Show Mouse Cursor


        AX = 01


        returns nothing


        - increments the cursor flag;  the cursor is displayed if flag
          is zero;  default flag value is -1



INT 33,2 - Hide Mouse Cursor


        AX = 02


        returns nothing


        - decrements cursor flag; hides cursor if flag is not zero



INT 33,3 - Get Mouse Position and Button Status


        AX = 03


        on return:
        CX = horizontal (X) position  (0..639)
        DX = vertical (Y) position  (0..199)
        BX = button status:

                |F-8|7|6|5|4|3|2|1|0|  Button Status
                  |  | | | | | | | +---- left button (1 = pressed)
                  |  | | | | | | +----- right button (1 = pressed)
                  +------------------- unused


        - values returned in CX, DX are the same regardless of video mode



INT 33,4 - Set Mouse Cursor Position


        AX = 4
        CX = horizontal position
        DX = vertical position


        returns nothing


        - default cursor position is at the screen center
        - the position must be within the range of the current video mode
        - the position may be rounded to fit screen mode resolution



INT 33,5 - Get Mouse Button Press Information


        AX = 5
        BX = 0  left button
             1  right button


        on return:
        BX = count of button presses (0-32767), set to zero after call
        CX = horizontal position at last press
        DX = vertical position at last press
        AX = status:

                |F-8|7|6|5|4|3|2|1|0|  Button Status
                  |  | | | | | | | +---- left button (1 = pressed)
                  |  | | | | | | +----- right button (1 = pressed)
                  +------------------- unused



INT 33,6 - Get Mouse Button Release Information


        AX = 6
        BX = 0  left button
             1  right button


        on return:
        BX = count of button releases (0-32767), set to zero after call
        CX = horizontal position at last release
        DX = vertical position at last release
        AX = status

                |F-8|7|6|5|4|3|2|1|0|  Button status
                  |  | | | | | | | +---- left button (1 = pressed)
                  |  | | | | | | +----- right button (1 = pressed)
                  +------------------- unused



INT 33,7 - Set Mouse Horizontal Min/Max Position


        AX = 7
        CX = minimum horizontal position
        DX = maximum horizontal position


        returns nothing


        - restricts mouse horizontal movement to window
        - if min value is greater than max value they are swapped



INT 33,8 - Set Mouse Vertical Min/Max Position


        AX = 8
        CX = minimum vertical position
        DX = maximum vertical position


        returns nothing


        - restricts mouse vertical movement to window
        - if min value is greater than max value they are swapped



INT 33,9 - Set Mouse Graphics Cursor


        AX = 9
        BX = horizontal hot spot (-16 to 16)
        CX = vertical hot spot (-16 to 16)
        ES:DX = pointer to screen and cursor masks (16 byte bitmap)


        returns nothing


        - screen mask is AND'ed to screen Cursor Mask is XOR'ed
        - bytes 0-7 form the screen mask bitmap
        - bytes 8-F form the cursor mask bitmap



INT 33,A - Set Mouse Text Cursor


        AX = 0A
        BX = 00  software cursor
             01  hardware cursor
        CX = start of screen mask or hardware cursor scan line
        DX = end of screen mask or hardware cursor scan line


        returns nothing



INT 33,B - Read Mouse Motion Counters


        AX = 0B


        on return:
        CX = horizontal mickey count (-32768 to 32767)
        DX = vertical mickey count (-32768 to 32767)


        - count values are 1/200 inch intervals (1/200 in. = 1 mickey)



INT 33,C - Set Mouse User Defined Subroutine and Input Mask

        AX = 0C
        ES:DX = far pointer to user interrupt
        CX = user interrupt mask:

           |F-5|4|3|2|1|0| user interrupt mask in CX
             |  | | | | +--- cursor position changed
             |  | | | +---- left button pressed
             |  | | +----- left button released
             |  | +------ right button pressed
             |  +------- right button released
             +--------- unused

        returns nothing


        - routine at ES:DX is called if an event occurs and the
          corresponding bit specified in user mask is set
        - routine at ES:DX receives parameters in the following
          registers:

          AX = condition mask causing call
          CX = horizontal cursor position
          DX = vertical cursor position
          DI = horizontal counts
          SI = vertical counts
          DS = mouse driver data segment
          BX = button state:

             |F-2|1|0|
               |  | +--- left button (1 = pressed)
               |  +---- right button (1 = pressed)
               +------ unused

        - initial call mask and user routine should be restore on exit
          from user program
        - user program may need to set DS to its own segment
        - user routine should return via RETF instead of IRET
        - see   INT 33,14



INT 33,D - Mouse Light Pen Emulation On


        AX = 0D


        returns nothing


        - turns on light pen emulation;  the light pen is considered
          down when both buttons are down;   when both buttons are
          up the pen is considered off screen

        - see   INT 33,E



INT 33,E - Mouse Light Pen Emulation Off


        AX = 0E


        returns nothing


        - disables light pen emulation

        - see   INT 33,D



INT 33,F - Set Mouse Mickey Pixel Ratio


        AX = 0F
        CX = horizontal ratio (1..32767, default 8)
        DX = vertical ratio (1..32767, default 16)


        returns nothing


        - sets the ratio between physical cursor movement (mickeys) and
          screen coordinate changes
        - CX and DX must be unsigned (high bit must be 0)



INT 33,10 - Mouse Conditional OFF


        AX = 10h
        CX = upper X screen coordinate
        DX = upper Y screen coordinate
        SI = lower X screen coordinate
        DI = lower Y screen coordinate


        returns nothing


        - defines screen region for updating in which the mouse is hidden
          if found these coordinates (INT 33,1 must be used to turn cursor
          on again)

        - see  INT 33,1



INT 33,13 - Set Mouse Double Speed Threshold


        AX = 13h
        DX = threshold speed (mickeys per second, default 64)


        returns nothing


        - cursor speed is doubled when the cursor moves across the screen
          at the threshold speed



INT 33,14 - Swap Interrupt Subroutines

        AX = 14h
        ES:DX = far pointer to user routine
        CX = user interrupt mask:

                |F-8|7|6|5|4|3|2|1|0| user interrupt mask in CX
                  |  | | | | | | | +--- cursor position changed
                  |  | | | | | | +---- left button pressed
                  |  | | | | | +----- left button released
                  |  | | | | +------ right button pressed
                  |  | | | +------- right button released
                  +--------------- unused

        on return:
        CX = previous user interrupt mask
        ES:DX = far pointer to previous user interrupt

        - routine at ES:DX is called if an event occurs and the
          corresponding bit specified in user mask is set
        - routine at ES:DX receives parameters in the following
          registers:

          AX = condition mask causing call
          CX = horizontal cursor position
          DX = vertical cursor position
          DI = horizontal counts
          SI = vertical counts
          DS = mouse driver data segment
          BX = button state:

             |F-2|1|0|
               |  | +--- left button (1 = pressed)
               |  +---- right button (1 = pressed)
               +------ unused

        - initial call mask and user routine should be restore on exit
          from user program
        - user program may need to set DS to its own segment
        - see   INT 33,C



INT 33,15 - Get Mouse Driver State and Memory Requirements


        AX = 15h


        on return
        BX = buffer size need to hold current mouse state


        - used before mouse functions 16h and 17h to determine memory
          needed to save mouse state before giving up control of mouse
          to another program



INT 33,16 - Save Mouse Driver State


        AX = 16h
        ES:DX = far pointer to mouse state save buffer


        returns nothing


        - used to save mouse information before relinquishing control
          to another programs mouse handler
        - see INT 33,15   INT 33,17



INT 33,17 - Restore Mouse Driver State


        AX = 17h
        ES:DX = far pointer to mouse state save buffer


        returns nothing


        - used to restore mouse information after regaining control
          from another programs mouse handler
        - see INT 33,15   INT 33,16



INT 33,18 - Set alternate subroutine call mask and address

        AX = 18h
        DX = offset to function
        CX = user interrupt mask:

                |F-8|7|6|5|4|3|2|1|0| user interrupt mask in CX
                  |  | | | | | | | +--- alt key pressed during event
                  |  | | | | | | +---- ctrl key pressed during event
                  |  | | | | | +----- shift key pressed during event
                  |  | | | | +------ right button up event
                  |  | | | +------- right button down event
                  |  | | +-------- left button up event
                  |  | +--------- left button down event
                  |  +---------- cursor moved
                  +------------ unused

        - entire mask is set to zero when INT 33,0 is called
        - up to three handlers may be defined with this call
        - mask should be cleared before program exit
        - when handler is called it receives parameters in the following
          registers:

          AX = condition mask causing call
          CX = horizontal cursor position
          DX = vertical cursor position
          DI = horizontal counts
          SI = vertical counts
          DS = mouse driver data segment
          BX = button state:

             |F-2|1|0|
               |  | +--- left button (1 = pressed)
               |  +---- right button (1 = pressed)
               +------ unused



INT 33,19 - Get User Alternate Interrupt Address

        AX = 19h
        CX = user interrupt call mask (see below)


        on return:
        BX:DX = user interrupt vector
        CX = user interrupt call mask or zero if not found

                |F-8|7|6|5|4|3|2|1|0| user interrupt mask in CX
                  |  | | | | | | | +--- alt key pressed during event
                  |  | | | | | | +---- ctrl key pressed during event
                  |  | | | | | +----- shift key pressed during event
                  |  | | | | +------ right button up event
                  |  | | | +------- right button down event
                  |  | | +-------- left button up event
                  |  | +--------- left button down event
                  |  +---------- cursor moved
                  +------------ unused

        - returns vector to function defined by INT 33,18
        - searches the event handlers defined by INT 33,18 for a routine
          with a call mask matching CX



INT 33,1A - Set Mouse Sensitivity


        AX = 1A
        BX = horizontal coordinates per pixel  (<= 100)
        CX = vertical coordinates per pixel  (<= 100)
        DX = double speed threshold


        returns nothing


        - sets mouse sensitivity by setting the ratio of the mouse
          coordinates per screen pixel
        - provides same results as calls to both INT 33,F and INT 33,13
        - these values are not reset by INT 33,0


INT 33,1B - Get Mouse Sensitivity


        AX = 1B


        on return:
        BX = horizontal coordinates per pixel  (<= 100)
        CX = vertical coordinates per pixel  (<= 100)
        DX = double speed threshold


        - returns mouse sensitivity information as the number of mouse
          coordinates per screen pixel



INT 33,1C - Set Mouse Interrupt Rate  (InPort only)


        AX = 1C
        BX = rate code
           = 0  no interrupts
           = 1  30 interrupts per second
           = 2  50 interrupts per second
           = 3  100 interrupts per second
           = 4  200 interrupts per second



        - work with the InPort mouse only
        - sets the rate the mouse status is polled by the mouse driver
        - faster rates provide better resolution but take away CPU time
        - values in BX > 4 can cause unpredicatable results



INT 33,1D - Set Mouse CRT Page


        AX = 1D
        BX = CRT page number


        returns nothing


        - sets the CRT page which the mouse cursor is displayed
        - see VIDEO PAGES



INT 33,1E - Get Mouse CRT Page


        AX = 1E


        on return:
        BX = CRT page number cursor is displayed on


        - see VIDEO PAGES



INT 33,1F - Disable Mouse Driver


        AX = 1F


        on return:
        AX = 001F if successful
             FFFF if error
        ES:BX = previous INT 33 vector


        - restores vectors for INT 10 and INT 71 (8088/86) or INT 74 (286+)
        - INT 33 interrupt vector (software) is not affected
        - use of the vector returned in ES:BX to restore the previous INT 33
          vector can cause problems since it contains the value of INT 33
          before the driver was installed; any other hooks into INT 33 set
          after driver installation will not receive service



INT 33,20 - Enable Mouse Driver


        AX = 20h


        returns nothing


        - reinstalls the mouse drivers interrupt vectors for INT 10 and
          INT 71 (8088/86) and INT 74 (286/386)
        - see INT 33,1F



INT 33,21 - Reset Mouse Software

        AX = 21h

        on return:
        AX = 0021  mouse driver not installed
             FFFF  mouse driver installed
        BX = 2  mouse driver installed

        - similar to INT 33,0 but does not reset the mouse hardware or
          display variables
        - both AX and BX must be correct for successful reset
        - interrupt routines set through INT 33,18 are preserved
        - resets the mouse to the following defaults:

          .  mouse is positioned to screen center
          .  mouse cursor is reset and hidden
          .  no interrupts are enabled (mask = 0)
          .  double speed threshold set to 64 mickeys per second
          .  horizontal mickey to pixel ratio (8 to 8)
          .  vertical mickey to pixel ratio (16 to 8)
          .  max width and height are set to maximum for video mode



INT 33,22 - Set Language for Messages

        AX = 22h
        BX = language number (with /L switch value):
           = 0  English     n/a
           = 1  French      F
           = 2  Dutch       NL
           = 3  German      D
           = 4  Swedish     S
           = 5  Finnish     SF
           = 6  Spanish     E
           = 7  Portuguese  P
           = 8  Italian     I


        returns nothing


        - only works with international version of the mouse driver
        - see   INT 33,23


INT 33,23 - Get Language Number

        AX = 23h


        on return:
        BX = language number (with /L switch value):
           = 0  English     n/a
           = 1  French      F
           = 2  Dutch       NL
           = 3  German      D
           = 4  Swedish     S
           = 5  Finnish     SF
           = 6  Spanish     E
           = 7  Portuguese  P
           = 8  Italian     I

        - only works with international version of the mouse driver
        - returns English (0) if not international version

        - see   INT 33,22


INT 33,24 - Get Driver Version, Mouse Type & IRQ Number

        AX = 24h


        on return:
        BH = major version (see below)
        BL = minor version (see below)
        CH = mouse type:
           = 1  bus mouse
           = 2  serial mouse
           = 3  InPort mouse
           = 4  PS/2  mouse
           = 5  Hewlett Packard mouse
        CL = IRQ number:
           = 0  PS/2
           = 2  IRQ 2
           = 5  IRQ 5
           = 7  IRQ 7

        - version 6.1 would be represented as BH = 06h, BL = 10h

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu