Interactive Graphics Mouse Editor (IGME)
by Lindsay Feuling
13 May, 1992
IGME (pronounced "ig-mee") is an interactive graphics mouse
editor. It provides to any programmer, who uses a mouse in their
applications, to interactively edit the mouse cursor graphics shape, and
save it for later use in programming applications which use the mouse.
This program was written with the intention of being distributed as free-
ware, with the disclaimer that no one shall modify the executable code in
II. Hardware Requirements
IGME was designed to work on any PC-AT compatible system running
MS-DOS (2.0 or later). Version 1.0 used to support only EGA mode. But
now, this version supports CGA, EGA, VGA, and Hercules monitors. Of
course, a mouse is also required, with the appropriate installed mouse
driver. IGME recognizes only the left and right mouse buttons.
Once IGME is executed, the graphics are drawn with several
options available. These options are to be selected by moving the mouse
pointer to the option box and pressing the left mouse button. A
description of the options follows:
Quit - Exit IGME. Version 1.0 used to also allow the Escape key
to perform this option, but it has been taken out for
Input - Read in IGME generated C syntax array file for editing.
The input file may be specified by the "-i "
command line option. A small window at the bottom right
of the screen will appear, waiting for the user to
type/edit the input file name. The file name cannot be
any longer than 12 characters.
The Enter key continues the input function, while the Esc
key aborts the input function.
Output - Generate currently edited mouse cursor into a C syntax
array to output file. The output file may be specified
by the "-o " command line option. A small window
at the bottom right of the screen will appear, waiting
for the user to type/edit the output file name. The file
name cannot be any longer than 12 characters.
The Enter key continues the output function, while the
Esc key aborts the output function.
Set - Set mouse cursor to the currently edited mouse screen and
cursor mask arrays with hot spot. The user may then move
the mouse around as before, but the only option that will
be possible to select is the "Unset" option.
Unset - Unset mouse of currently edited mouse screen and cursor
mask array values, ie. goes back to normal pointer.
Clear - Clear the mouse screen and cursor mask array values.
NOTE: The "Set" option will give a blank mouse cursor
right after performing the clear function because all of
the cursor mask array values have been cleared.
Default - Set mouse screen and cursor mask array values to the
mouse driver default setting.
Command line options (as seen by the command "IGME -h"):
-h show help message
-i input function read from
-o output function written to
To toggle a point in either the mask or cursor arrays, simply
move the mouse pointer to the desired location, and press the left mouse
button. Keeping the left mouse button pressed while moving the mouse
pointer will toggle all array points of where the mouse pointer comes in
contact. To set the mouse cursor hot-spot, press the right mouse button.
Keeping the right mouse button pressed while moving the mouse pointer
will move the mouse cursor hot-spot to the current location of the mouse
Version 1.0 was originally written using the Miscrosoft QuickC
Compiler (version 2.1) on an IBM PC-AT with a Logitech Mouse. After
storing the source code away for a year, I managed to lose the source, so
I re-wrote the whole program using the Turbo C++ Compiler (version 2.0)
on a Club 386. The result of my re-writing using C++ added and changed
many of the features from version 1.0, so I decided to call this new
release version 2.0.
The mouse calls are standard calls to the mouse driver, so any
mouse should work, and the graphics modes supported are CGA, EGA, VGA,
and Hercules modes.
Please send any suggestions/comments to me at this email address:
INTERNET: feuling%[email protected]
A few people have sent me email asking me how to write code to
control the mouse. IGME generates C syntax code, but may be simply
translated to whatever language is used. As far as writing the code to
interface to the mouse driver, I will not send source code to do this,
but rather give references to several books on how to do this:
1) Advanced MS-DOS Programming (2nd Edition), by Ray Duncan
pp. 594-611 discus the functions associated with
(Any MS-DOS Programming discussing Interrupt 33h will do)
2) Miscroft C or Turbo C compiler library reference manual
discussing use of function int86() to call interrupts
(Or any language's library reference manual discussing
how to call interrupt from that language, eg. Pascal,
IGME was written with mouse control code, which I wrote, using
the Interrupt 33h calls from C/C++, so here is proof that it actually