home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
001-099
/
ff019.lzh
/
Keymap_Test
/
keymap_test.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-04-08
|
7KB
|
233 lines
/******* 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);
}