home *** CD-ROM | disk | FTP | other *** search
- /******* keymap_test.c **********/
-
- /***************************************************************************
- *
- * Test program to illustrate bug in keymapping
- *
- **************************************************************************/
-
-
- #include "keymap_test.h"
-
-
- extern Enable_Abort;
-
-
- ULONG IntuitionBase;
- ULONG GfxBase;
- struct Window *te_window; /* ptr to a window to which the
- * console is bound
- */
-
- struct NewWindow NewWindow =
- {
- 0, 0, /* starting position */
- 640, 200, /* window width and height */
- -1, -1, /* use same pens as screen */
- NULL, /* no IDCMP flags */
- SMART_REFRESH | BORDERLESS | ACTIVATE, /* window flags */
- NULL, NULL, NULL, /* no gadgets, checkmark & text */
- NULL, /* pointer to screen */
- NULL, /* no bit map */
- NULL, NULL, NULL, NULL, /* window sizing parameters */
- WBENCHSCREEN, /* screen type */
- };
-
- struct IOStdReq *con_write_req, *con_read_req;
- struct MsgPort *con_write_port, *con_read_port;
-
- UBYTE conchar; /* used for QueueRead() */
-
- struct KeyMap keymap;
-
- UBYTE lo_types[64];
- ULONG lo_keymap[64];
- UBYTE lo_cap[8];
- UBYTE lo_rep[8];
-
- UBYTE hi_types[40];
- ULONG hi_keymap[40];
- UBYTE hi_cap[8];
- UBYTE hi_rep[8];
-
- UBYTE string_alt_shift[] =
- {
- 10, /* length of string with no qualifier */
- 8, /* dist of string from beg of descriptor */
- 9, /* length of string with SHIFT */
- 18, /* dist of string from beg of descriptor */
- 7, /* length of string with ALT */
- 27, /* dist of string from beg of descriptor */
- 15, /* length of string with ALT + SHIFT */
- 34, /* dist of string from beg of descriptor */
- "2 + noqual",
- "2 + shift",
- "2 + alt",
- "2 + alt + shift",
- };
-
- UBYTE string_vanilla[] =
- {
- 10, /* length of string with no qualifier */
- 16, /* dist of string from beg of descriptor */
- 9, /* length of string with SHIFT */
- 26, /* dist of string from beg of descriptor */
- 7, /* length of string with ALT */
- 35, /* dist of string from beg of descriptor */
- 8, /* length of string with CTRL */
- 42, /* dist of string from beg of descriptor */
- 15, /* length of string with ALT + SHIFT */
- 50, /* dist of string from beg of descriptor */
- 14, /* length of string with CTRL + ALT */
- 65, /* dist of string from beg of descriptor */
- 16, /* length of string with CTRL + SHIFT */
- 79, /* dist of string from beg of descriptor */
- 22, /* length of string with CTRL + ALT + SHIFT */
- 95, /* dist of string from beg of descriptor */
- "3 + noqual",
- "3 + shift",
- "3 + alt",
- "3 + ctrl",
- "3 + alt + shift",
- "3 + ctrl + alt",
- "3 + ctrl + shift",
- "3 + ctrl + alt + shift",
- };
-
- init_window()
- {
- GfxBase = (ULONG) OpenLibrary("graphics.library", 0);
- IntuitionBase = (ULONG) OpenLibrary("intuition.library", 0);
- te_window = OpenWindow(&NewWindow);
- }
-
-
- init_req()
- {
- con_write_port = CreatePort("my.con.write",0);
- con_write_req = CreateStdIO(con_write_port);
-
- con_read_port = CreatePort("my.con.read",0);
- con_read_req = CreateStdIO(con_read_port);
-
- OpenConsole(con_write_req, con_read_req, te_window);
-
- }
-
-
-
- main()
- {
- UBYTE c;
- int i;
-
-
- init_window();
- init_req();
-
- QueueRead (con_read_req, &conchar);
-
- /* initialize keymap tables to zeroes
- */
- for (i = 0; i <= 63; i++)
- {
- lo_types[i] = 0x00;
- lo_keymap[i] = 0x00;
- }
-
- for (i = 0; i <= 39; i++)
- {
- hi_types[i] = 0x00;
- hi_keymap[i] = 0x00;
- }
-
- for (i = 0; i <= 7; i++)
- {
- lo_cap[i] = 0x00;
- lo_rep[i] = 0x00;
- hi_cap[i] = 0x00;
- hi_rep[i] = 0x00;
- }
-
- /* setup key types for keys 1, 2, 3, & 4
- */
- lo_types[1] = 0x05; /* KCF_CONTROL + KCF_SHIFT */
- lo_types[2] = 0x43; /* KCF_STRING + KCF_ALT + KCF_SHIFT */
- lo_types[3] = 0x47; /* KCF_STRING + KC_VANILLA */
- lo_types[4] = 0x01; /* KC_NOQUAL + KCF_SHIFT */
-
-
- /* setup key codes for keys 1, 2, 3, & 4
- */
- lo_keymap[1] = (ULONG) 0x64636261; /* d = key 1 with CTRL + SHIFT */
- /* c = key 1 with CTRL */
- /* b = key 1 with SHIFT */
- /* a = key 1 alone */
- lo_keymap[2] = (ULONG) 0x00000000; /* key 2 */
- lo_keymap[3] = (ULONG) 0x00000000; /* key 3 */
- lo_keymap[4] = (ULONG) 0x00002434; /* key 4 */
-
-
- /* plug in addresses of string descriptors into low keymap
- */
- lo_keymap[2] = (ULONG) string_alt_shift;
- lo_keymap[3] = (ULONG) string_vanilla;
-
-
- /* setup pointers to members of keymap structure
- */
- keymap.km_LoKeyMapTypes = (APTR) lo_types;
- keymap.km_LoKeyMap = (APTR) lo_keymap;
- keymap.km_LoCapsable = (APTR) lo_cap;
- keymap.km_LoRepeatable = (APTR) lo_rep;
- keymap.km_HiKeyMapTypes = (APTR) hi_types;
- keymap.km_HiKeyMap = (APTR) hi_keymap;
- keymap.km_HiCapsable = (APTR) hi_cap;
- keymap.km_HiRepeatable = (APTR) hi_rep;
-
- /* Now set the new keymap
- */
- con_write_req-> io_Command = CD_SETKEYMAP;
- con_write_req-> io_Length = sizeof(keymap);
- con_write_req-> io_Data = (APTR) &keymap;
-
- DoIO (con_write_req);
-
- Enable_Abort = 0;
-
- /* Keys 1, 2 & 3 have been setup with key types 0x05, 0x43 & 0x47
- * respectively.
- * Press key 4 + SHIFT to exit
- */
-
- for (;;)
- {
- /* Note: Chk_Abort() does not work here
- */
-
- if (Chk_Abort() != 0)
- break; /* ctrl-c or ctrl-d was pressed */
-
- c = (UBYTE) ConMayGetChar (con_read_req, con_read_port, &conchar);
- if (c != '$')
- {
- ConPutChar (con_write_req, c);
- }
- else
- break;
- }
-
- AbortIO(con_read_req);
- CloseDevice(con_read_req);
-
- DeletePort(con_read_port);
- DeletePort(con_write_port);
- DeleteStdIO(con_read_req);
- DeleteStdIO(con_write_req);
-
- CloseWindow(te_window);
- CloseLibrary(IntuitionBase);
- CloseLibrary(GfxBase);
-
- }
-