Permalink
Cannot retrieve contributors at this time
286 lines (225 sloc)
11.5 KB
| CuteMouse driver v2.0. Copyright (c) 1997-2002 Nagy Daniel | |
| Release date: 2002/10/01 | |
| License: | |
| -------- | |
| CuteMouse is released under the terms of the GNU General Public License | |
| (GPL). For further information please read the file COPYING. | |
| Description: | |
| ------------ | |
| CuteMouse is a mouse driver which supports many protocols of serial and | |
| PS/2 mice. It can search for a serial mouse at all COM ports or only at | |
| a specified port. | |
| CuteMouse supports a new Wheel API. This means that you can write your | |
| applications which use the mouse wheel. For programming details see | |
| WHEELAPI.TXT. | |
| An important CuteMouse feature is its small memory footprint: the resident | |
| part (TSR) occupies less than 3.5K. CuteMouse can also install itself in | |
| upper memory, when available, without requiring external utilities such | |
| as the DOS 'lh' (loadhigh) command. | |
| CuteMouse supports cursor drawing in all standard graphics and text modes | |
| with any screen size. These are automatically detected whenever the video | |
| mode or the screen size is changed or reset functions are called. | |
| You can subscribe to the CuteMouse discussion group at the official | |
| homepage http://cutemouse.sourceforge.net or by sending an empty | |
| email to <cutemouse-subscribe@yahoogroups.com>. | |
| CuteMouse is part of the FreeDOS project at http://www.freedos.org | |
| Details: | |
| -------- | |
| CTMOUSE supports standard Mouse Systems, Microsoft and Logitech serial | |
| and PS/2 protocols. Also supported are mice with wheel. By default, when | |
| searching for a connected mouse, the PS/2 port is checked first, then all | |
| COM ports are scanned. | |
| Option /S, whose syntax is described in the help screen, disables PS/2 | |
| support and can specify the COM port to be checked for a mouse connection | |
| and its IRQ line; option /P disables serial protocols. If option /S is | |
| present in the command line, but PS/2 support is also required, then | |
| option /P must also be present. | |
| If a COM port number is not specified with the /S option, then CTMOUSE | |
| searches all COM ports. If an IRQ line is not specified with the /S | |
| option, then the default IRQ line value is IRQ4 for COM1/3 and IRQ3 | |
| for COM2/4. In the future IRQ autodetection will be added. | |
| Option /V reverses default search order, causing CTMOUSE to look for a | |
| serial mouse before checking for the PS/2 device. This can be useful, for | |
| example, on notebooks which have a built-in PS/2 pointing device to enable | |
| use of a serial mouse, when attached. Using option /Y (see below) may also | |
| be required along with /V. Note: option /V enables both serial and PS/2 | |
| protocols, so using options /P and /S without arguments along with /V | |
| in the command line is meaningless. | |
| For serial mice, CTMOUSE searches all COM ports (or at the port specified | |
| by option /S) for an attached mouse with Microsoft or Logitech protocol. | |
| If no such mouse is found then CTMOUSE installs at the first existing | |
| (or specified) COM port in Mouse Systems mode, whether a mouse is there | |
| or not. (This is because the Mouse Systems protocol defines no detection | |
| sequence). Option /Y in the command line disables Mouse Systems protocol | |
| support and prevents driver installation if no mouse with Microsoft or | |
| Logitech protocol is found. Note: option /Y forces serial mouse search, | |
| but, unlike option /S, doesn't disable PS/2 support. | |
| Both PS/2 and plain Microsoft protocols assume a two button mouse but | |
| option /3 in the command line can be used to enable the middle button | |
| if one is present. | |
| WARNING: when the middle button of a plain Microsoft mouse is enabled, | |
| pressing left or right button along with the middle button can cause | |
| "middle button state triggering" - i.e. when the middle button is pressed | |
| the driver thinks it is released and vice-versa. This is a peculiarity of | |
| the Microsoft protocol and can't be changed. If button triggering occurs | |
| simply press the left or right button along with the middle button once | |
| again to clear the problem. | |
| Option /R, whose syntax is described in the help screen, allows the | |
| preferred sensitivity to be specified for each axis of mouse movements. | |
| These define the relationship between cursor and mouse movement - the | |
| higher the sensitivity, the further the cursor moves for a given mouse | |
| movement. For sensitivity 0 coefficient 1/3 is used, for sensitivity 9 | |
| coefficient 3.0 is used. | |
| If installing from low memory, CTMOUSE attempts to move itself into upper | |
| memory (UMB) if there is a suitable free UMB block and option /W is not | |
| used. With option /W any external utility can be used to install CTMOUSE | |
| at a specific location. Subsequent CTMOUSE runs simply reset the resident | |
| part to the new command line options, unless the mouse is not found or | |
| option /B or /N is used. | |
| When installing, CTMOUSE ignores and hides any present mouse services | |
| unless option /B is used. Option /U in command line can be used to | |
| unload the resident part of CTMOUSE unless driver interrupts have been | |
| intercepted by another program. After successful unloading, CTMOUSE | |
| restores mouse services that were present at installation time. | |
| Option /B in the command line cancels CTMOUSE execution if any (including | |
| CTMOUSE itself) mouse services are already present. With option /B CTMOUSE | |
| will not install itself above loaded mouse drivers and will not reset the | |
| resident part to new command line options. | |
| In contrast, option /N forces the loading of a new TSR even if CTMOUSE is | |
| already loaded - without this option CTMOUSE will only reset the loaded | |
| resident part. In cases where mouse services are provided by any other | |
| driver or are not present at all, CTMOUSE loads a new TSR even without | |
| option /N - see table below: | |
| options no services other driver CTMOUSE loaded | |
| ------- ----------- ------------ -------------- | |
| /B load CTMOUSE do nothing do nothing | |
| <default> load CTMOUSE load CTMOUSE update resident part | |
| /N load CTMOUSE load CTMOUSE load new CTMOUSE | |
| Option /N is useful for batch files, which load CTMOUSE before some | |
| actions and unload it after. | |
| For each event CTMOUSE returns an appropriate exit code which can be used | |
| in "if errorlevel" statements in batch files: | |
| 0 PS/2, Microsoft or Logitech mouse found and CTMOUSE installed; | |
| Unload successful; | |
| /? option used. | |
| 1 CTMOUSE installed in Mouse Systems mode; | |
| Unload failed because CTMOUSE was not loaded. | |
| 2 Resident part switched to PS/2, Microsoft or Logitech mode; | |
| Unload failed because driver interrupts were intercepted. | |
| 3 Resident part switched to Mouse Systems mode. | |
| 4 Mouse services already present (returned for option /B only). | |
| 5 Mouse not found; | |
| Invalid option used. | |
| Together with options /B and /N, this enables creation of complex and | |
| intelligent batch files. For example, the following batch file can be | |
| used to run a program that requires mouse services to be present: | |
| ctmouse/n/y>nul | |
| if errorlevel 5 echo Mouse not found! | |
| if errorlevel 5 goto end | |
| <program> %1 %2 %3 %4 %5 %6 %7 %8 %9 | |
| ctmouse/u>nul | |
| :end | |
| In the previous example, CTMOUSE is loaded before <program> and unloaded | |
| afterwards regardless of whether or not mouse services are already present | |
| (e.g., another mouse driver was loaded). This may not be suitable if every | |
| free byte of memory is important or if CTMOUSE does not support a mouse | |
| that is currently in use. In the following example, CTMOUSE will be | |
| loaded and unloaded only if no mouse services are present: | |
| if "%1"=="@" goto driverloaded | |
| ctmouse/b/y>nul | |
| if errorlevel 5 echo Mouse not found! | |
| if errorlevel 5 goto end | |
| if errorlevel 2 goto run | |
| call %0 @ %1 %2 %3 %4 %5 %6 %7 %8 %9 | |
| ctmouse/u>nul | |
| goto end | |
| :driverloaded | |
| shift | |
| :run | |
| <program> %1 %2 %3 %4 %5 %6 %7 %8 %9 | |
| :end | |
| Option /B can also be used to manually specify a mouse search sequence. | |
| In the following example, CTMOUSE is installed by the first command that | |
| finds a mouse and the following commands won't affect the resident part: | |
| ctmouse/b/s4/y>nul | |
| ctmouse/b/p/y>nul | |
| ctmouse/b/s2/y>nul | |
| Use the /? command line option to obtain a help screen with all option | |
| descriptions. | |
| The CuteMouse package also includes a utility to detect COM ports | |
| (COMTEST) and a serial protocol analyzer (PROTOCOL). PROTOCOL shows how | |
| mice work and what they send to the computer for each action. PROTOCOL can | |
| even decipher information sent by PnP mice. All output goes through DOS | |
| functions and can be redirected to a file for subsequent analysis or | |
| sending to someone else. | |
| Compiling: | |
| ---------- | |
| To assemble the English version of the driver use TASM (or any compatible | |
| assembler) and any linker that can produce a COM file from OBJ files: | |
| copy ctm-en.msg ctmouse.msg | |
| tasm /m @asmlib.cfg ctmouse.asm | |
| tlink /t /x ctmouse.obj,ctmouse.exe | |
| com2exe -s512 ctmouse.exe ctmouse.exe | |
| To assemble the serial protocol analyzer: | |
| tasm /m @..\asmlib.cfg protocol.asm | |
| tlink /t /x protocol.obj | |
| To compile or delete temporary files, the MAKE utility also can be used | |
| (see makefile). | |
| Known problems: | |
| --------------- | |
| Symptom: if the mouse is moved when Works 2.0 for DOS or Word 5.5 for DOS | |
| are redrawing a screen in graphics mode then some parts of screen | |
| are corrupted. | |
| Cause: these programs don't hide the mouse cursor while drawing on the | |
| screen and/or don't use the EGA RIL API when changing video | |
| adapter registers. | |
| Solution: correct the code of these programs; don't move the mouse while | |
| the screen is being redrawn; future versions of CTMOUSE will | |
| probably read the VGA adapter registers directly. | |
| Symptom: under Windows 3.1 after a mouse reset (INT 33/0000), the graphics | |
| mouse cursor is shifted by one pixel right/down. | |
| Cause: Windows traps INT 33 calls and for the reset function additionally | |
| calls the text and graphics cursor define functions with [-1,-1] | |
| hot spot. | |
| Solution: use 'PUSHF/CALL FAR' sequence instead of 'INT' instruction to | |
| call INT 33 handler; there probably are some Windows APIs, which | |
| can be used in CTMOUSE to interact with Windows directly. | |
| Symptom: sometimes, under Windows 3.1, the graphics cursor has a black box | |
| shape. This may also happen after switching between windows. | |
| Cause: probably due to a Windows bug when Windows incorrectly redefines | |
| the cursor after video mode changes or switching between windows. | |
| Solution: restart the graphics application or switch back and forth | |
| between windows again; there probably are some Windows APIs, | |
| which can be used in CTMOUSE to interact with Windows directly. | |
| Symptom: unlike Microsoft Mouse driver 8.2, the mouse doesn't work in | |
| a windowed DOS box of Windows 3.1 with CTMOUSE installed. | |
| Cause: the Microsoft Mouse driver most probably uses an unpublished API to | |
| interact with Windows. | |
| Solution: currently unknown. | |
| Symptom: CTMOUSE fails to detect PS/2 mice under Windows 9x/ME. | |
| Cause: Windows seems unwilling to let a DOS application have access to the | |
| PS/2 device services. | |
| Solution: currently unknown. | |
| Credits: | |
| -------- | |
| (Some names are mentioned in HISTORY). | |
| Ralf Brown <ralf@pobox.com>: author of Interrupt List (a great collection | |
| of system specific information). | |
| Joergen Ibsen / Jibz <jibz@hotmail.com>: author of aPACK (an excellent | |
| executable packing program); advice about managing executables. | |
| Arkady V.Belousov <ark@mos.ru>: bugfixes, optimizations and features. | |
| Matthias Paul <Matthias.Paul@post.rwth-aachen.de>: many ideas and | |
| advice about interfacing with OS. | |
| Jason Burgon <jason@jayman.demon.co.uk>: bugfixes, features, advice | |
| about interrupts handling consistency. | |
| NetDave <david@prog.cz>: wheel support idea. | |
| Alain Mouette <alainm@pobox.com>: many ideas and message files. | |
| Robert Riebisch <riebisch@bercom-berlin.de>: mode 13h bugfix. | |
| Fernando Papa Budzyn: automatic loadhigh capability. | |
| Martin <nocash@work.de>: optimizations. | |
| Paul Schubert: much faster PS/2 code. | |
| All who helped with ideas and code. | |
| Contacts: | |
| --------- | |
| mailto:nagyd@users.sourceforge.net | |
| http://cutemouse.sourceforge.net |