4.06.2013 - Version 0.3.4 - PIOBJECT() macro, ethernet improvement, documentation based on Doxygen

This commit is contained in:
peri4
2013-06-04 21:28:15 +04:00
parent 02c629d6a8
commit 9111640ca8
53 changed files with 3019 additions and 910 deletions

View File

@@ -42,8 +42,8 @@ PIKbdListener::PIKbdListener(KBFunc slot, void * data_): PIThread() {
void PIKbdListener::begin() {
//cout << "list begin" << endl;
#ifdef WINDOWS
SetConsoleMode(hIn, ENABLE_PROCESSED_INPUT);
GetConsoleMode(hIn, &tmode);
SetConsoleMode(hIn, ENABLE_PROCESSED_INPUT);
#else
struct termios term;
tcgetattr(0, &term);
@@ -55,17 +55,68 @@ void PIKbdListener::begin() {
void PIKbdListener::run() {
rc = 0;
char lc = 0;
#ifdef WINDOWS
ReadConsole(hIn, &rc, 1, &ret, 0);
INPUT_RECORD ir;
ReadConsoleInput(hIn, &ir, 1, &ret);
if (ir.EventType == KEY_EVENT) {
KEY_EVENT_RECORD ker = ir.Event.KeyEvent;
if (ker.bKeyDown) {
bool ctrl = ((ker.dwControlKeyState & LEFT_CTRL_PRESSED) || (ker.dwControlKeyState & RIGHT_CTRL_PRESSED));
//cout << "key " << int(ker.wVirtualKeyCode) << endl;
switch (ker.wVirtualKeyCode) {
case 37: ret = 1; lc = (ctrl ? CtrlLeftArrow : LeftArrow); break;
case 38: ret = 1; lc = (ctrl ? CtrlUpArrow : UpArrow); break;
case 39: ret = 1; lc = (ctrl ? CtrlRightArrow : RightArrow); break;
case 40: ret = 1; lc = (ctrl ? CtrlDownArrow : DownArrow); break;
default: ret = 1; lc = ker.uChar.AsciiChar; break;
}
if (lc == 0) return;
} else return;
} else return;
/*if (lc == 0) {
ReadConsole(hIn, &rc, 1, &ret, 0);
//cout << "read console" << endl;
lc = char(rc);
}*/
/*if (ret < 0 || ret > 3) return;
lc = char(((uchar * )&rc)[ret - 1]);
for (int i = 0; i < ret; ++i)
cout << std::hex << int(((uchar * )&rc)[i]) << ' ';
cout << endl << std::hex << rc << endl;*/
#else
ret = read(0, &rc, 1);
ret = read(0, &rc, 4);
if (ret < 0 || ret > 3) return;
lc = char(((uchar * )&rc)[ret - 1]);
//for (int i = 0; i < ret; ++i)
// cout << std::hex << int(((uchar * )&rc)[i]) << ' ';
//cout << endl << std::hex << rc << endl;
if (((char * )&rc)[0] == '\e' && ret == 3) {
if (((char * )&rc)[1] == '[') {
switch (((char * )&rc)[2]) {
case 'A': lc = UpArrow; break; // up
case 'B': lc = DownArrow; break; // down
case 'C': lc = RightArrow; break; // right
case 'D': lc = LeftArrow; break; // left
}
}
}
if (((char * )&rc)[0] == '5' && ret == 2) {
switch (((char * )&rc)[1]) {
case 'A': lc = CtrlUpArrow; break; // up
case 'B': lc = CtrlDownArrow; break; // down
case 'C': lc = CtrlRightArrow; break; // right
case 'D': lc = CtrlLeftArrow; break; // left
}
}
#endif
if (exit_enabled && rc == exit_key) {
if (exit_enabled && ret == 1 && lc == exit_key) {
PIKbdListener::exiting = true;
return;
}
keyPressed(rc, data);
if (ret_func != 0 && ret > 0) ret_func(rc, data);
keyPressed(lc, data);
if (ret_func != 0 && ret > 0) ret_func(lc, data);
}