#ifndef PIKBDLISTENER_H #define PIKBDLISTENER_H #include "pithread.h" #ifndef __WIN32__ # include #endif #define WAIT_FOR_EXIT while (!PIKbdListener::exiting) msleep(1); typedef void (*KBFunc)(char, void * ); class PIKbdListener: public PIThread { friend class PIConsole; public: // slot is any function format "void (char, void * )" PIKbdListener(KBFunc slot = 0, void * data = 0); ~PIKbdListener() {terminate(); end();} inline void enableExitCapture(char key = 'Q') {exit_enabled = true; exit_key = key;} inline void disableExitCapture() {exit_enabled = false;} inline bool exitCaptured() const {return exit_enabled;} inline char exitKey() const {return exit_key;} inline bool isActive() {return is_active;} inline void setActive(bool yes = true) {is_active = yes;} static bool exiting; private: void begin(); void run(); void end(); KBFunc ret_func; char rc, exit_key, is_active; bool exit_enabled; void * data; #ifdef __WIN32__ DWORD ret; void * hIn; DWORD smode; #else int ret; struct termios sterm; #endif }; #endif // PIKBDLISTENER_H