|
|
1.1 ! root 1: /* ------------------------------------ ! 2: * Program to show what keycodes evnt_multi & co. ! 3: * return... ! 4: */ ! 5: ! 6: #ifdef __AHCC__ ! 7: # include <aes.h> ! 8: # include <tos.h> ! 9: #else ! 10: # ifdef __SOZOBONX__ ! 11: # include <minimum.h> ! 12: # include <osbind.h> ! 13: # include <xgemfast.h> ! 14: # endif ! 15: #endif ! 16: #include <stdlib.h> ! 17: #include <stdio.h> ! 18: ! 19: #ifndef FALSE ! 20: #define FALSE 0 ! 21: #define TRUE !FALSE ! 22: #endif ! 23: ! 24: /* resource set indices for KEYTEST */ ! 25: #define TREEMENU 0 /* menu */ ! 26: #define MENUINFO 7 /* STRING in tree TREE001 */ ! 27: #define MENUTABL 16 /* STRING in tree TREE001 */ ! 28: #define MENUQUIT 18 /* STRING in tree TREE001 */ ! 29: ! 30: #define MY_MU (MU_MESAG | MU_KEYBD) ! 31: ! 32: OBJECT *tree_menu; ! 33: ! 34: /* ------------------------------------ ! 35: * Function prototypes. ! 36: */ ! 37: static void prg_init (void); ! 38: static void prg_exit (void); ! 39: static void msg_handler (short *msgbuf); ! 40: static void do_menu (short entry); ! 41: static void ascii_table (void); ! 42: static void show_key (short key, short state); ! 43: ! 44: /* ------------------------------------ ! 45: * Standard GEM handling functions (main loop). ! 46: */ ! 47: ! 48: int main() ! 49: { ! 50: short mbuf[8]; ! 51: short evnt_m, m1fl, pmx1, pmy1, pm1w, pm1h, ! 52: m2fl, pmx2, pmy2, pm2w, pm2h, pmx, pmy, pmstate, ! 53: state, key, clicks, tlo_cnt, thi_cnt; ! 54: m1fl = pmx1 = pmy1 = pm1w = pm1h = 0; ! 55: m2fl = pmx2 = pmy2 = pm2w = pm2h = 0; ! 56: tlo_cnt = thi_cnt = 0; ! 57: ! 58: prg_init (); ! 59: graf_mouse(0, ARROW); ! 60: while (TRUE) { ! 61: /* mouse button, mouse co-ordinate 1, ! 62: * mouse co-ordinate 2, message and timer events. ! 63: * mouse co-ordinate, mouse button, special key and normal key states. ! 64: * number of mouse clicks. ! 65: */ ! 66: evnt_m = evnt_multi(MY_MU, 259, 3, 0, m1fl, pmx1, pmy1, pm1w, pm1h, ! 67: m2fl, pmx2, pmy2, pm2w, pm2h, mbuf, tlo_cnt, thi_cnt, ! 68: &pmx, &pmy, &pmstate ,&state, &key, &clicks); ! 69: ! 70: if (evnt_m & MU_MESAG) ! 71: msg_handler (mbuf); ! 72: ! 73: if (evnt_m & MU_KEYBD) ! 74: show_key (key, state); ! 75: } ! 76: return 0; ! 77: } ! 78: ! 79: /* ------------------------------------ ! 80: * GEM startup. ! 81: */ ! 82: static void prg_init (void) ! 83: { ! 84: appl_init (); ! 85: ! 86: if (!rsrc_load ("keytest.rsc")) { ! 87: appl_exit (); ! 88: exit (1); ! 89: } ! 90: ! 91: /* TREEMENU should be defines, generated by the rsc editor */ ! 92: rsrc_gaddr (R_TREE, TREEMENU, &tree_menu); ! 93: menu_bar (tree_menu, TRUE); /* show menubar */ ! 94: } ! 95: ! 96: /* GEM exit. */ ! 97: static void prg_exit (void) ! 98: { ! 99: menu_bar (tree_menu, FALSE); ! 100: rsrc_free (); ! 101: appl_exit (); ! 102: exit (0); ! 103: } ! 104: ! 105: /* message handling code. */ ! 106: static void msg_handler (short *msgbuf) ! 107: { ! 108: switch (msgbuf[0]) { ! 109: case MN_SELECTED: ! 110: /* handle menu entry */ ! 111: do_menu (msgbuf[4]); ! 112: /* de-invert menu title */ ! 113: menu_tnormal (tree_menu, msgbuf[3], 1); ! 114: break; ! 115: } ! 116: } ! 117: ! 118: /* ------------------------------------ ! 119: * Selection handling functions. ! 120: */ ! 121: static void do_menu (short entry) ! 122: { ! 123: switch (entry) { ! 124: case MENUINFO: ! 125: form_alert (1, "[1][|Show keycodes and status| of shift/alt/ctrl as|returned by evnt_multi()][ OK ]"); ! 126: break; ! 127: ! 128: case MENUTABL: ! 129: ascii_table (); ! 130: break; ! 131: ! 132: case MENUQUIT: ! 133: prg_exit (); ! 134: } ! 135: } ! 136: ! 137: static void ascii_table (void) ! 138: { ! 139: int x, y; ! 140: Cconws ("\33Y# . | 0 1 2 3 4 5 6 7 8 9 a b c d e f \15\12"); ! 141: Cconws ("----------------------------------------------------\15\12"); ! 142: ! 143: for (y = 2; y < 16; y ++) { ! 144: Cconout(' '); ! 145: Cconout('0' + y); ! 146: Cconout(' '); ! 147: Cconout('|'); ! 148: ! 149: for (x = 0; x < 16; x ++) { ! 150: Cconout(' '); ! 151: Cconout(x + y * 0x10); ! 152: Cconout(' '); ! 153: } ! 154: Cconws("\15\12"); ! 155: } ! 156: } ! 157: ! 158: void show_key (short key, short state) ! 159: { ! 160: char buf[128]; ! 161: ! 162: sprintf (buf, "[1][Mod state: $%02x (%d)|Scan code: $%02x (%d)|ASCII code: $%02x (%d)][ OK ]", ! 163: state, state, key>>8, key>>8, key&0xff, key&0xff); ! 164: form_alert (1, buf); ! 165: ! 166: if ((key & 0xFF) == 27) ! 167: prg_exit (); ! 168: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.