home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
enhancements
/
general
/
keymenu
/
keymenu.doc
< prev
next >
Wrap
Text File
|
1991-03-10
|
16KB
|
315 lines
KeyMenu V1.03 02Mar91
Purpose:
KeyMenu is an alternative to Intuition's method of menu selection via the
keyboard. Intuition allows you to use the Right Amiga-Right Alt key
combination along with a cursor key to move the mouse pointer anywhere on
the screen. This is a simple yet flexible approach, however, if you have
ever tried to use it you probably found it to be very cumbersome for menu
selection. Keyboard shortcuts are ususally provided to invoke menu
selections, but unless you use a particular program a lot its hard to
remember all the key combinations from one program to the next. You then
find yourself reaching for the mouse to see what menu options are
available.
With KeyMenu, all you need do is press and release the Right-Alt key and
the menu for the currently active window will appear. (Note: all keys
used by KeyMenu are configurable) You can then use the cursor keys to
move through the menu as you choose. When you have reached the menu item
you desire you can select it by pressing the return key. If you change
your mind and decide not to select an item, the escape key can be used to
get out of the menu without making a selection.
Changes from previous version:
- added an option to blank the intuition pointer when activating a menu.
- KeyMenu can now coexist with 'mouse accelerator' programs without regard
to what order you install them on the system. KeyMenu has been tested
with dmouse, qmouse, mach and AmigaDos release 2.0 mouse accelerators.
Features:
- remembers the mouse pointer's location when a menu is activated and
repositions the mouse at that location when the menu is exited.
- remembers the menu item that mouse was positioned on the last time the
menu was exited. When the menu is subsequently activated, you will be
positioned on that menu item.
- pressing the right mouse button while KeyMenu has a menu active allows
you to override KeyMenu and take over menu operations with the mouse.
- Intuition's method of using the keyboard to simulate the mouse is not
hindered. In fact, the key combination of left-alt/left-amiga can be
used to simulate the left mouse button while KeyMenu has a menu active.
- key configuration and options can be changed at any time.
- info option allows you to determine KeyMenu's key configuration and
option settings at any time.
- KeyMenu is completely re-entrant (pure).
- compatible with all formal releases of AmigaDOS.
- qualifier key(s) can be used in conjunction with the move keys to
move to the first/last menu, menu item or menu subitem.
Installation:
Two files are required, KeyMenu and KeyMenu-Handler. KeyMenu expects the
KeyMenu-Handler program to be on either the L: directory or the current
directory. Other than that there are no restrictions on where these files
can be placed.
Usage:
KeyMenu must be run from the CLI. The first time that KeyMenu is
executed, it installs the KeyMenu-Handler on the system, processes any
command line options that may have been specified and returns to the CLI.
There is no need to use RUNBACK to execute KeyMenu, however, it won't
hurt anything if you do. Subsequent executions can then be used to either
change KeyMenu's configuration options or to terminate KeyMenu. The
following command line options are available:
QUIT terminates KeyMenu.
? provides help information about the command line options
available.
-i displays KeyMenu's current key configuration and option
settings. This option is always processed last, i.e. after any
other options that may change the configuration have been
applied.
-b toggles the blank intuition pointer option. When this option is
used, KeyMenu replaces the intuition pointer with a transparent
pointer whenever a menu is activated. The pointer is restored
to its original condition when the menu is deactivated. The
only indication that you have as to where you are in the menu
is the highlighting provided by intuition. This can become
confusing when you select a menu that contains disabled items
because the disabled items do not highlight when you move over
them. This option defaults to OFF.
-t toggles the clear RMBTRAP flag option. The RMBTRAP flag is set
by programs that wish to use the right mouse button for their
own purposes rather than dedicating it to menu operations only.
A good example of this is DeluxePaint. With DeluxePaint, you can
use the right mouse button to draw with the background color. To
do menu operations, you must move the mouse pointer into the
title bar and then press the right mouse button. When
DeluxePaint detects that the mouse has moved into the title bar,
it clears the RMBTRAP flag in its window allowing normal menu
operations to take place. This option determines what KeyMenu's
action will be when you try to activate a menu and it's
associated window has the RMBTRAP flag set. If this option is
off, KeyMenu will not activate the menu. In the case of
DeluxePaint, the mouse pointer would have to be positioned in
the title bar in order to use KeyMenu. If this option is on,
KeyMenu will clear the RMBTRAP flag in the window before it
activates the menu. This allows KeyMenu to be used with
DeluxePaint without regard to the mouse's current position. This
option should be used with CAUTION. It is impossible to predict
how any particular program will react to someone else clearing
the RMBTRAP flag. DeluxePaint doesn't seem to mind. You might
want to run KeyMenu with this option off until such time that
you find an application that uses the right mouse button and
that you really would like to use with KeyMenu. Then try this
option making sure that you have a way of recovering if the
affected application crashes. With DeluxePaint, its debatable
just how useful KeyMenu is anyway in an application that is so
mouse oriented. This option defaults to OFF if not specified.
-p# specifies the priority, in decimal, that should be used when
adding KeyMenu's input handler to the input device. This option
only has effect when installing KeyMenu. You cannot change the
input handler's priority once KeyMenu is installed without
terminating KeyMenu and re-installing it. Intuition's input
handler runs at a priority of 50. KeyMenu's input handler must
be higher than Intuition's so that KeyMenu can receive the input
events before Intuition does. If this option is not specified,
KeyMenu's input handler will have a priority of 51. This value
should be ok in almost all cases. This option is provided only
for completeness and in the off chance that Intuition's input
handler priority changes in some future release of AmigaDOS. Any
value other than 51 should be chosen with great care. Also, see
the section below about compatiblity with other input handlers.
-q# defines the qualifier key(s) that can be used in conjunction
with the move keys to move to the first/last menu, menu item or
menu subitem where # is a decimal value as follows:
1 - Left Shift 16 - Left Alt
2 - Right Shift 32 - Right Alt
4 - Caps Lock 64 - Left Amiga
8 - Control 128 - Right Amiga
Any combination of these keys may be specified by adding their
respective values together or this option can be completely
turned off by specifying a value of 0. When more than one
qualifier key is given, KeyMenu will honor either qualifier.
The various qualifier/move key combinations are interpreted as
follows:
Qualifier/Move Left = move to the first menu in the menu
strip.
Qualifier/Move Right = move to the last menu in the menu
strip
Qualifier/Move Up = move to the first menu item in the
current menu or subitem menu.
Qualifier/Move Down = move to the last menu item in the
current menu or subitem menu.
For example, if the mouse is positioned on the 4th item of an
8 item menu list and a qualifier of 3 was given, pressing
either the Left-Shift/Cursor up or Right-Shift/Cursor up key
combination will cause the mouse pointer to move to the first
menu item in the list. KeyMenu defaults to the RIGHT SHIFT key
if this option is not specified.
-a# defines the key that will be used to activate (get into) a menu
where # is a valid key code taken from the table provided below.
This key is treated a little differently than the other keys
used by KeyMenu. To activate a menu, the activate key must be
pressed and then released without pressing any other intervening
keys. This allows key combinations involving the activate key to
be used by other programs without KeyMenu interfering. KeyMenu
defaults to the RIGHT ALT key if this option is not specified.
-e# defines the key that will be used to escape from (get out of
without making a selection) a menu where # is a valid key code
taken from the table below. KeyMenu defaults to the ESCAPE key
if this option is not specified.
-s# defines the key that will be used to select a menu item where #
is a valid key code taken from the table below. KeyMenu defaults
to the RETURN key if this option is not specified.
-l# defines the key that will be used to move left in the menu where
# is a valid key code taken from the table below. KeyMenu
defaults to the CURSOR LEFT key if this option is not specified.
-r# defines the key that will be used to move right in the menu
where # is a valid key code taken from the table below. KeyMenu
defaults to the CURSOR RIGHT key if this option is not
specified.
-u# defines the key that will be used to move up in the menu where #
is a valid key code taken from the table below. KeyMenu defaults
to the CURSOR UP key if this option is not specified.
-d# defines the key that will be used to move down in the menu where
# is a valid key code taken from the table below. KeyMenu
defaults to the CURSOR DOWN key if this option is not specified.
Valid key code values are as follows:
Key Code Key Key Code Key
-------- --- -------- ---
0 ` 32 X
1 1 33 C
2 2 34 V
3 3 35 B
4 4 36 N
5 5 37 M
6 6 38 ,
7 7 39 .
8 8 3a /
9 9 3c Numeric Pad .
a 0 3d Numeric Pad 7
b - 3e Numeric Pad 8
c = 3f Numeric Pad 9
d \ 40 Space Bar
f Numeric Pad 0 41 Backspace
10 Q 42 Tab
11 W 43 Numeric Pad Enter
12 E 44 Return
13 R 45 Escape
14 T 46 Delete
15 Y 4a Numeric Pad -
16 U 4c Cursor up
17 I 4d Cursor down
18 O 4e Cursor right
19 P 4f Cursor left
1a [ 50 F1
1b ] 51 F2
1d Numeric Pad 1 52 F3
1e Numeric Pad 2 53 F4
1f Numeric Pad 3 54 F5
20 A 55 F6
21 S 56 F7
22 D 57 F8
23 F 58 F9
24 G 59 F10
25 H 5f Help
26 J 60 Left Shift
27 K 61 Right Shift
28 L 62 Caps Lock
29 ; 63 Control
2a ' 64 Left Alt
2d Numeric Pad 4 65 Right Alt
2e Numeric Pad 5 66 Left Amiga
2f Numeric Pad 6 67 Right Amiga
31 Z
Compatablity:
KeyMenu has been tested with various shareware/public domain input
handlers (such as QMouse, DMouse, Mach, PopCLI and WKeys) and with
all versions of AmigaDos including release 2.0.
Source:
KeyMenu was written in assembler using Manx Aztec 68k Assembler, version
5.0d. Since KeyMenu is being placed in public domain, I tried to keep
the source pretty much generic so that anyone with an assembler could
assemble it. If you try to assemble the source you will have to make
changes to your intuitionbase.i include file. There are 2 fields in
intuitionbase that KeyMenu references, MouseX and MouseY. They exist in
the C version of the include file, but not in the assembler version. I
added the following lines after the field ib_FirstScreen:
ULONG ib_Flags
WORD ib_MouseY
WORD ib_MouseX
For Manx users, KeyMenu doesn't use any of the routines from c.lib. The
library is used in the link step only to resolve the _LVO externals. So
it doesn't matter which library, c.lib or c16.lib, that you use.
The following source files are provided:
keymenu.i - include file for KeyMenu
keymenu-handler.i - include file for KeyMenu and KeyMenu-Handler
macros.i - misc. macros for both programs
keymenu.asm - source for KeyMenu
keymenu-handler.asm - source for KeyMenu-Handler
Public Domain:
KeyMenu and all of its associated source are public domain. You can do
what you choose with/to it. I would, however, like to know of any
problems that you encounter or enhancements that you might like to see.
Send mail to klowther on BIX if you are so inclined.
I would like to thank the authors of DMouse, WKeys, QMouse etc. for
making the source to their programs available. I incorporated many of
their ideas in the area of input handlers and process creation. Their
willingness to share their source code made writing this much easier.
Ken Lowther