/* http://www.cyut.edu.tw/~ckhung/b/mi/ */ /* 1999-06 */ /* how to compile: gcc -Wall mouse.c -lncurses */ #include int which_button(mmask_t m) { int i; for (i=0; i < 4; ++i) { if (m & (077 << (i * 6))) return i+1; } return 0; } #define B_RELEASED 1 #define B_PRESSED 2 #define B_CLICKED 3 #define B_DOUBLE_CLICKED 4 #define B_TRIPLE_CLICKED 5 #define B_RESERVED_EVENT 6 int which_event(mmask_t m) { int i; for (i=0; i < 6; ++i) { if (m & (01010101 << i)) return i+1; } return 0; } int main(void) { mmask_t oldmask, newmask; MEVENT mev; int c, go_on; char key, btn_name[] = "_LMRX"; initscr(); cbreak(); noecho(); keypad(stdscr, 1); newmask = mousemask(ALL_MOUSE_EVENTS, & oldmask); go_on = 1; while (go_on) { c = getch(); switch (c) { case KEY_MOUSE: getmouse(& mev); mvaddch(mev.y, mev.x, btn_name[which_button(mev.bstate)]); switch (which_event(mev.bstate)) { case B_RELEASED: key = '^'; break; case B_PRESSED: key = 'v'; break; case B_CLICKED: key = '1'; break; case B_DOUBLE_CLICKED: key = '2'; break; case B_TRIPLE_CLICKED: key = '3'; break; default: key = '?'; } addch(key); break; default: go_on = 0; } } endwin(); return 0; }