home *** CD-ROM | disk | FTP | other *** search
- #include <devices/inputevent.h>
- #include <proto/exec.h>
- #include <proto/console.h>
-
- #include <ctype.h>
-
- #include "CapShift.h"
-
- struct Library *ConsoleDevice;
-
- void
- CapShiftFunction(struct InputEvent *ev)
- {
- struct IOStdReq ioreq;
- UBYTE ansicode0, ansicode1;
- UWORD qual;
-
- /* Exclude Amiga commands */
- if (!(ev->ie_Qualifier & (IEQUALIFIER_LCOMMAND|IEQUALIFIER_RCOMMAND)))
- {
- /* Open the console device just to do keymapping. (unit -1 means any unit) */
- if (!OpenDevice("console.device", -1, (struct IORequest *)&ioreq, 0))
- {
- ConsoleDevice = (struct Library *)ioreq.io_Device;
-
- qual = ev->ie_Qualifier;
-
- /* Decode the RAWKEY event */
- if (RawKeyConvert(ev, &ansicode0, 1, NULL) == 1)
- {
- /* Translate printable character only */
- if (isprint(ansicode0))
- {
- /* Get the unshifted code */
- ev->ie_Qualifier &= ~(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT);
- RawKeyConvert(ev, &ansicode1, 1, NULL);
-
- if (ansicode0 == ansicode1) /* Unlock the CapsLock */
- ev->ie_Qualifier = qual & ~(IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT | IEQUALIFIER_CAPSLOCK);
- else
- ev->ie_Qualifier = qual;
- }
- }
-
- CloseDevice((struct IORequest *)&ioreq);
- }
- }
- }
-