My solution:
.......
main.cc
........
FsKeyboard keyboard; // which is extern maybe
void windowKeyPressed (unsigned char key, int x, int y) { keyboard.keyPressed ( key ); }
void windowKeyReleased ( unsigned char key, int x, int y ) { keyboard.keyReleased ( key ); }
void windowSpecialUp ( int key, int x, int y ) { keyboard.keySpecialReleased ( key ); }
void windowSpecial (int key, int x, int y) { keyboard.keySpecialPressed ( key ); return; }
void windowMouse (int button, int state, int x, int y) { keyboard.mouseAction ( button, state, x, y ); return; }
void windowMotion ( int x, int y ) { keyboard.mouseMotion ( x,y ); return; }
void windowShape (int width, int height) { window_width = width; window_height = height; return; }
..........
keyboard.h
...........
enum FsSpecialKeys {
FS_MOUSE_LEFT = 256, FS_MOUSE_MIDDLE= 257, FS_MOUSE_RIGHT = 258, FS_KEY_LEFT = 259,
FS_KEY_RIGHT = 260, FS_KEY_UP = 261, FS_KEY_DOWN = 262, FS_KEY_F1 = 263,
FS_KEY_F2 = 264, FS_KEY_F3 = 267, FS_KEY_F4 = 268, FS_KEY_F5 = 269,
FS_KEY_F6 = 270, FS_KEY_F7 = 271, FS_KEY_F8 = 272, FS_KEY_F9 = 273,
FS_KEY_F10 = 274, FS_KEY_F11 = 275, FS_KEY_F12 = 276, FS_KEY_F13 = -1, //WE AR NOT MACHINTOS USERS!!!
FS_KEY_HOME = 277, FS_KEY_PAGEUP = 278, FS_KEY_PAGEDOWN= 279, FS_KEY_END = 280,
FS_KEY_INSERT = 281, FS_WHEEL_UP = 282, FS_WHEEL_DOWN = 283
};
extern int fsGlutCodes [];
//----------------
class FsKeyboard {
//----------------
private:
bool keys [ 512 ];
int mousex, mousey;
public:
FsKeyboard () { for ( int i=0; i< 512; i++ ) keys [i] = false; }
bool isKeyDown ( int i ) { return keys [i]; }
void keyPressed ( unsigned char key ) { keys [key] = true; }
void keyReleased ( unsigned char key ) { keys [key] = false; }
void keySpecialPressed ( int key ) {
for ( int i = 0; i < 25; i++ ) {
if ( fsGlutCodes [i] == key ) { keys [256+i] = true; }
}
}
void keySpecialReleased ( int key ) {
for ( int i = 0; i < 25; i++ ) {
if ( fsGlutCodes [i] == key ) { keys [256+i] = false; }
}
}
void mouseAction ( int button, int state, int x, int y ) {
switch ( button ) {
case 0: keys [ FS_MOUSE_LEFT ] = 1-state;
case 1: keys [ FS_MOUSE_MIDDLE ] = 1-state;
case 2: keys [ FS_MOUSE_RIGHT ] = 1-state;
case 3: keys [ FS_WHEEL_DOWN ] = 1-state;
case 4: keys [ FS_WHEEL_UP ] = 1-state;
}
return;
}
int getx () { return mousex; }
int gety () { return mousey; }
void mouseMotion (int x, int y) { mousex = x; mousey = y;}
void set ( void ) { for ( int i = 0; i < 512; i++ ) { keys [i] = false; } }
};