diff --git a/src/A2PI.PO b/src/A2PI.PO index 1021df7..e98a467 100755 Binary files a/src/A2PI.PO and b/src/A2PI.PO differ diff --git a/src/a2pid.c b/src/a2pid.c index 7f1ebc3..557c190 100755 --- a/src/a2pid.c +++ b/src/a2pid.c @@ -60,12 +60,12 @@ int keycode[256] = { MOD_CTRL | KEY_E, // CTRL-E code 05 MOD_CTRL | KEY_F, // CTRL-F code 06 MOD_CTRL | KEY_G, // CTRL-G code 07 - KEY_LEFT, // CTRL-H code 08 - KEY_TAB, // CTRL-I code 09 - KEY_DOWN, // CTRL-J code 0A - KEY_UP, // CTRL-K code 0B + KEY_LEFT, // CTRL-H code 08 + KEY_TAB, // CTRL-I code 09 + KEY_DOWN, // CTRL-J code 0A + KEY_UP, // CTRL-K code 0B MOD_CTRL | KEY_L, // CTRL-L code 0C - KEY_ENTER, // CTRL-M code 0D + KEY_ENTER, // CTRL-M code 0D MOD_CTRL | KEY_N, // CTRL-N code 0E MOD_CTRL | KEY_O, // CTRL-O code 0F MOD_CTRL | KEY_P, // CTRL-P code 10 @@ -73,113 +73,113 @@ int keycode[256] = { MOD_CTRL | KEY_R, // CTRL-R code 12 MOD_CTRL | KEY_S, // CTRL-S code 13 MOD_CTRL | KEY_T, // CTRL-T code 14 - KEY_RIGHT, // CTRL-U code 15 + KEY_RIGHT, // CTRL-U code 15 MOD_CTRL | KEY_V, // CTRL-V code 16 MOD_CTRL | KEY_W, // CTRL-W code 17 MOD_CTRL | KEY_X, // CTRL-X code 18 MOD_CTRL | KEY_Y, // CTRL-Y code 19 MOD_CTRL | KEY_Z, // CTRL-Z code 1A - KEY_ESC, // ESCAPE code 1B + KEY_ESC, // ESCAPE code 1B MOD_CTRL | KEY_BACKSLASH, // CTRL-\ code 1C MOD_CTRL | KEY_RIGHTBRACE, // CTRL-] code 1D MOD_CTRL | KEY_6, // CTRL-6 code 1E MOD_CTRL | KEY_MINUS, // CTRL-- code 1F - KEY_SPACE, // ' ' code 20 - MOD_SHIFT | KEY_1, // ! code 21 - MOD_SHIFT | KEY_APOSTROPHE, // " code 22 - MOD_SHIFT | KEY_3, // # code 23 - MOD_SHIFT | KEY_4, // $ code 24 - MOD_SHIFT | KEY_5, // % code 25 - MOD_SHIFT | KEY_7, // & code 26 - KEY_APOSTROPHE, // ' code 27 - MOD_SHIFT | KEY_9, // ( code 28 - MOD_SHIFT | KEY_0, // ) code 29 - MOD_SHIFT | KEY_8, // * code 2A - MOD_SHIFT | KEY_EQUAL, // + code 2B - KEY_COMMA, // , code 2C - KEY_MINUS, // - code 2D - KEY_DOT, // . code 2E - KEY_SLASH, // / code 2F - KEY_0, // 0 code 30 - KEY_1, // 1 code 31 - KEY_2, // 2 code 32 - KEY_3, // 3 code 33 - KEY_4, // 4 code 34 - KEY_5, // 5 code 35 - KEY_6, // 6 code 36 - KEY_7, // 7 code 37 - KEY_8, // 8 code 38 - KEY_9, // 9 code 39 - MOD_SHIFT | KEY_SEMICOLON, // : code 3A - KEY_SEMICOLON, // ; code 3B - MOD_SHIFT | KEY_COMMA, // < code 3C - KEY_EQUAL, // = code 3D - MOD_SHIFT | KEY_DOT, // > code 3E - MOD_SHIFT | KEY_SLASH, // ? code 3F - MOD_SHIFT | KEY_2, // @ code 40 - MOD_SHIFT | KEY_A, // A code 41 - MOD_SHIFT | KEY_B, // B code 42 - MOD_SHIFT | KEY_C, // C code 43 - MOD_SHIFT | KEY_D, // D code 44 - MOD_SHIFT | KEY_E, // E code 45 - MOD_SHIFT | KEY_F, // F code 46 - MOD_SHIFT | KEY_G, // G code 47 - MOD_SHIFT | KEY_H, // H code 48 - MOD_SHIFT | KEY_I, // I code 49 - MOD_SHIFT | KEY_J, // J code 4A - MOD_SHIFT | KEY_K, // K code 4B - MOD_SHIFT | KEY_L, // L code 4C - MOD_SHIFT | KEY_M, // M code 4D - MOD_SHIFT | KEY_N, // N code 4E - MOD_SHIFT | KEY_O, // O code 4F - MOD_SHIFT | KEY_P, // P code 50 - MOD_SHIFT | KEY_Q, // Q code 51 - MOD_SHIFT | KEY_R, // R code 52 - MOD_SHIFT | KEY_S, // S code 53 - MOD_SHIFT | KEY_T, // T code 54 - MOD_SHIFT | KEY_U, // U code 55 - MOD_SHIFT | KEY_V, // V code 56 - MOD_SHIFT | KEY_W, // W code 57 - MOD_SHIFT | KEY_X, // X code 58 - MOD_SHIFT | KEY_Y, // Y code 59 - MOD_SHIFT | KEY_Z, // Z code 5A - KEY_LEFTBRACE, // [ code 5B - KEY_BACKSLASH, // \ code 5C - KEY_RIGHTBRACE, // ] code 5D - MOD_SHIFT | KEY_6, // ^ code 5E - MOD_SHIFT | KEY_MINUS, // _ code 5F - KEY_GRAVE, // ` code 60 - KEY_A, // a code 61 - KEY_B, // b code 62 - KEY_C, // c code 63 - KEY_D, // d code 64 - KEY_E, // e code 65 - KEY_F, // f code 66 - KEY_G, // g code 67 - KEY_H, // h code 68 - KEY_I, // i code 69 - KEY_J, // j code 6A - KEY_K, // k code 6B - KEY_L, // l code 6C - KEY_M, // m code 6D - KEY_N, // n code 6E - KEY_O, // o code 6F - KEY_P, // p code 70 - KEY_Q, // q code 71 - KEY_R, // r code 72 - KEY_S, // s code 73 - KEY_T, // t code 74 - KEY_U, // u code 75 - KEY_V, // v code 76 - KEY_W, // w code 77 - KEY_X, // x code 78 - KEY_Y, // y code 79 - KEY_Z, // z code 7A + KEY_SPACE, // ' ' code 20 + MOD_SHIFT | KEY_1, // ! code 21 + MOD_SHIFT | KEY_APOSTROPHE, // " code 22 + MOD_SHIFT | KEY_3, // # code 23 + MOD_SHIFT | KEY_4, // $ code 24 + MOD_SHIFT | KEY_5, // % code 25 + MOD_SHIFT | KEY_7, // & code 26 + KEY_APOSTROPHE, // ' code 27 + MOD_SHIFT | KEY_9, // ( code 28 + MOD_SHIFT | KEY_0, // ) code 29 + MOD_SHIFT | KEY_8, // * code 2A + MOD_SHIFT | KEY_EQUAL, // + code 2B + KEY_COMMA, // , code 2C + KEY_MINUS, // - code 2D + KEY_DOT, // . code 2E + KEY_SLASH, // / code 2F + KEY_0, // 0 code 30 + KEY_1, // 1 code 31 + KEY_2, // 2 code 32 + KEY_3, // 3 code 33 + KEY_4, // 4 code 34 + KEY_5, // 5 code 35 + KEY_6, // 6 code 36 + KEY_7, // 7 code 37 + KEY_8, // 8 code 38 + KEY_9, // 9 code 39 + MOD_SHIFT | KEY_SEMICOLON, // : code 3A + KEY_SEMICOLON, // ; code 3B + MOD_SHIFT | KEY_COMMA, // < code 3C + KEY_EQUAL, // = code 3D + MOD_SHIFT | KEY_DOT, // > code 3E + MOD_SHIFT | KEY_SLASH, // ? code 3F + MOD_SHIFT | KEY_2, // @ code 40 + MOD_SHIFT | KEY_A, // A code 41 + MOD_SHIFT | KEY_B, // B code 42 + MOD_SHIFT | KEY_C, // C code 43 + MOD_SHIFT | KEY_D, // D code 44 + MOD_SHIFT | KEY_E, // E code 45 + MOD_SHIFT | KEY_F, // F code 46 + MOD_SHIFT | KEY_G, // G code 47 + MOD_SHIFT | KEY_H, // H code 48 + MOD_SHIFT | KEY_I, // I code 49 + MOD_SHIFT | KEY_J, // J code 4A + MOD_SHIFT | KEY_K, // K code 4B + MOD_SHIFT | KEY_L, // L code 4C + MOD_SHIFT | KEY_M, // M code 4D + MOD_SHIFT | KEY_N, // N code 4E + MOD_SHIFT | KEY_O, // O code 4F + MOD_SHIFT | KEY_P, // P code 50 + MOD_SHIFT | KEY_Q, // Q code 51 + MOD_SHIFT | KEY_R, // R code 52 + MOD_SHIFT | KEY_S, // S code 53 + MOD_SHIFT | KEY_T, // T code 54 + MOD_SHIFT | KEY_U, // U code 55 + MOD_SHIFT | KEY_V, // V code 56 + MOD_SHIFT | KEY_W, // W code 57 + MOD_SHIFT | KEY_X, // X code 58 + MOD_SHIFT | KEY_Y, // Y code 59 + MOD_SHIFT | KEY_Z, // Z code 5A + KEY_LEFTBRACE, // [ code 5B + KEY_BACKSLASH, // \ code 5C + KEY_RIGHTBRACE, // ] code 5D + MOD_SHIFT | KEY_6, // ^ code 5E + MOD_SHIFT | KEY_MINUS, // _ code 5F + KEY_GRAVE, // ` code 60 + KEY_A, // a code 61 + KEY_B, // b code 62 + KEY_C, // c code 63 + KEY_D, // d code 64 + KEY_E, // e code 65 + KEY_F, // f code 66 + KEY_G, // g code 67 + KEY_H, // h code 68 + KEY_I, // i code 69 + KEY_J, // j code 6A + KEY_K, // k code 6B + KEY_L, // l code 6C + KEY_M, // m code 6D + KEY_N, // n code 6E + KEY_O, // o code 6F + KEY_P, // p code 70 + KEY_Q, // q code 71 + KEY_R, // r code 72 + KEY_S, // s code 73 + KEY_T, // t code 74 + KEY_U, // u code 75 + KEY_V, // v code 76 + KEY_W, // w code 77 + KEY_X, // x code 78 + KEY_Y, // y code 79 + KEY_Z, // z code 7A MOD_SHIFT | KEY_LEFTBRACE, // { code 7B MOD_SHIFT | KEY_BACKSLASH, // | code 7C MOD_SHIFT | KEY_RIGHTBRACE, // } code 7D MOD_SHIFT | KEY_GRAVE, // ~ code 7E - KEY_BACKSPACE, // BS code 7F + KEY_BACKSPACE, // BS code 7F /* * w/ closed apple scancodes */ @@ -191,12 +191,12 @@ int keycode[256] = { MOD_CTRL | KEY_E, // CTRL-E code 05 MOD_CTRL | KEY_F, // CTRL-F code 06 MOD_CTRL | KEY_G, // CTRL-G code 07 - KEY_HOME, // CTRL-H code 08 - KEY_INSERT, // CTRL-I code 09 - KEY_PAGEDOWN, // CTRL-J code 0A - KEY_PAGEUP, // CTRL-K code 0B + KEY_HOME, // CTRL-H code 08 + KEY_INSERT, // CTRL-I code 09 + KEY_PAGEDOWN, // CTRL-J code 0A + KEY_PAGEUP, // CTRL-K code 0B MOD_CTRL | KEY_L, // CTRL-L code 0C - KEY_LINEFEED, // CTRL-M code 0D + KEY_LINEFEED, // CTRL-M code 0D MOD_CTRL | KEY_N, // CTRL-N code 0E MOD_CTRL | KEY_O, // CTRL-O code 0F MOD_CTRL | KEY_P, // CTRL-P code 10 @@ -204,113 +204,113 @@ int keycode[256] = { MOD_CTRL | KEY_R, // CTRL-R code 12 MOD_CTRL | KEY_S, // CTRL-S code 13 MOD_CTRL | KEY_T, // CTRL-T code 14 - KEY_END, // CTRL-U code 15 + KEY_END, // CTRL-U code 15 MOD_CTRL | KEY_V, // CTRL-V code 16 MOD_CTRL | KEY_W, // CTRL-W code 17 MOD_CTRL | KEY_X, // CTRL-X code 18 MOD_CTRL | KEY_Y, // CTRL-Y code 19 MOD_CTRL | KEY_Z, // CTRL-Z code 1A - KEY_ESC, // ESCAPE code 1B + KEY_ESC, // ESCAPE code 1B MOD_CTRL | KEY_BACKSLASH, // CTRL-\ code 1C MOD_CTRL | KEY_RIGHTBRACE, // CTRL-] code 1D MOD_CTRL | KEY_6, // CTRL-6 code 1E MOD_CTRL | KEY_MINUS, // CTRL-- code 1F - KEY_SPACE, // ' ' code 20 - KEY_F11, // ! code 21 - MOD_SHIFT | KEY_APOSTROPHE, // " code 22 - KEY_F13, // # code 23 - KEY_F14, // $ code 24 - KEY_F15, // % code 25 - KEY_F17, // & code 26 - KEY_APOSTROPHE, // ' code 27 - KEY_F19, // ( code 28 - KEY_F20, // ) code 29 - KEY_F18, // * code 2A - MOD_SHIFT | KEY_EQUAL, // + code 2B - KEY_COMMA, // , code 2C - KEY_MINUS, // - code 2D - KEY_DOT, // . code 2E - KEY_SLASH, // / code 2F - KEY_F10, // 0 code 30 - KEY_F1, // 1 code 31 - KEY_F2, // 2 code 32 - KEY_F3, // 3 code 33 - KEY_F4, // 4 code 34 - KEY_F5, // 5 code 35 - KEY_F6, // 6 code 36 - KEY_F7, // 7 code 37 - KEY_F8, // 8 code 38 - KEY_F9, // 9 code 39 - MOD_SHIFT | KEY_SEMICOLON, // : code 3A - KEY_SEMICOLON, // ; code 3B - MOD_SHIFT | KEY_COMMA, // < code 3C - KEY_EQUAL, // = code 3D - MOD_SHIFT | KEY_DOT, // > code 3E - MOD_SHIFT | KEY_SLASH, // ? code 3F - KEY_F12, // @ code 40 - MOD_SHIFT | KEY_A, // A code 41 - MOD_SHIFT | KEY_B, // B code 42 - MOD_SHIFT | KEY_C, // C code 43 - MOD_SHIFT | KEY_D, // D code 44 - MOD_SHIFT | KEY_E, // E code 45 - MOD_SHIFT | KEY_F, // F code 46 - MOD_SHIFT | KEY_G, // G code 47 - MOD_SHIFT | KEY_H, // H code 48 - MOD_SHIFT | KEY_I, // I code 49 - MOD_SHIFT | KEY_J, // J code 4A - MOD_SHIFT | KEY_K, // K code 4B - MOD_SHIFT | KEY_L, // L code 4C - MOD_SHIFT | KEY_M, // M code 4D - MOD_SHIFT | KEY_N, // N code 4E - MOD_SHIFT | KEY_O, // O code 4F - MOD_SHIFT | KEY_P, // P code 50 - MOD_SHIFT | KEY_Q, // Q code 51 - MOD_SHIFT | KEY_R, // R code 52 - MOD_SHIFT | KEY_S, // S code 53 - MOD_SHIFT | KEY_T, // T code 54 - MOD_SHIFT | KEY_U, // U code 55 - MOD_SHIFT | KEY_V, // V code 56 - MOD_SHIFT | KEY_W, // W code 57 - MOD_SHIFT | KEY_X, // X code 58 - MOD_SHIFT | KEY_Y, // Y code 59 - MOD_SHIFT | KEY_Z, // Z code 5A - KEY_LEFTBRACE, // [ code 5B - KEY_BACKSLASH, // \ code 5C - KEY_RIGHTBRACE, // ] code 5D - KEY_F16, // ^ code 5E - MOD_SHIFT | KEY_MINUS, // _ code 5F - KEY_GRAVE, // ` code 60 - KEY_A, // a code 61 - KEY_B, // b code 62 - KEY_C, // c code 63 - KEY_D, // d code 64 - KEY_E, // e code 65 - KEY_F, // f code 66 - KEY_G, // g code 67 - KEY_H, // h code 68 - KEY_I, // i code 69 - KEY_J, // j code 6A - KEY_K, // k code 6B - KEY_L, // l code 6C - KEY_M, // m code 6D - KEY_N, // n code 6E - KEY_O, // o code 6F - KEY_P, // p code 70 - KEY_Q, // q code 71 - KEY_R, // r code 72 - KEY_S, // s code 73 - KEY_T, // t code 74 - KEY_U, // u code 75 - KEY_V, // v code 76 - KEY_W, // w code 77 - KEY_X, // x code 78 - KEY_Y, // y code 79 - KEY_Z, // z code 7A - MOD_SHIFT | KEY_LEFTBRACE, // { code 7B - MOD_SHIFT | KEY_BACKSLASH, // | code 7C - MOD_SHIFT | KEY_RIGHTBRACE, // } code 7D - MOD_SHIFT | KEY_GRAVE, // ~ code 7E - KEY_DELETE // DELETE code 7F + KEY_SPACE, // ' ' code 20 + KEY_F11, // ! code 21 + MOD_SHIFT | KEY_APOSTROPHE, // " code 22 + KEY_F13, // # code 23 + KEY_F14, // $ code 24 + KEY_F15, // % code 25 + KEY_F17, // & code 26 + KEY_APOSTROPHE, // ' code 27 + KEY_F19, // ( code 28 + KEY_F20, // ) code 29 + KEY_F18, // * code 2A + MOD_SHIFT | KEY_EQUAL, // + code 2B + KEY_COMMA, // , code 2C + KEY_MINUS, // - code 2D + KEY_DOT, // . code 2E + KEY_SLASH, // / code 2F + KEY_F10, // 0 code 30 + KEY_F1, // 1 code 31 + KEY_F2, // 2 code 32 + KEY_F3, // 3 code 33 + KEY_F4, // 4 code 34 + KEY_F5, // 5 code 35 + KEY_F6, // 6 code 36 + KEY_F7, // 7 code 37 + KEY_F8, // 8 code 38 + KEY_F9, // 9 code 39 + MOD_SHIFT | KEY_SEMICOLON, // : code 3A + KEY_SEMICOLON, // ; code 3B + MOD_SHIFT | KEY_COMMA, // < code 3C + KEY_EQUAL, // = code 3D + MOD_SHIFT | KEY_DOT, // > code 3E + MOD_SHIFT | KEY_SLASH, // ? code 3F + KEY_F12, // @ code 40 + MOD_SHIFT | KEY_A, // A code 41 + MOD_SHIFT | KEY_B, // B code 42 + MOD_SHIFT | KEY_C, // C code 43 + MOD_SHIFT | KEY_D, // D code 44 + MOD_SHIFT | KEY_E, // E code 45 + MOD_SHIFT | KEY_F, // F code 46 + MOD_SHIFT | KEY_G, // G code 47 + MOD_SHIFT | KEY_H, // H code 48 + MOD_SHIFT | KEY_I, // I code 49 + MOD_SHIFT | KEY_J, // J code 4A + MOD_SHIFT | KEY_K, // K code 4B + MOD_SHIFT | KEY_L, // L code 4C + MOD_SHIFT | KEY_M, // M code 4D + MOD_SHIFT | KEY_N, // N code 4E + MOD_SHIFT | KEY_O, // O code 4F + MOD_SHIFT | KEY_P, // P code 50 + MOD_SHIFT | KEY_Q, // Q code 51 + MOD_SHIFT | KEY_R, // R code 52 + MOD_SHIFT | KEY_S, // S code 53 + MOD_SHIFT | KEY_T, // T code 54 + MOD_SHIFT | KEY_U, // U code 55 + MOD_SHIFT | KEY_V, // V code 56 + MOD_SHIFT | KEY_W, // W code 57 + MOD_SHIFT | KEY_X, // X code 58 + MOD_SHIFT | KEY_Y, // Y code 59 + MOD_SHIFT | KEY_Z, // Z code 5A + KEY_LEFTBRACE, // [ code 5B + KEY_BACKSLASH, // \ code 5C + KEY_RIGHTBRACE, // ] code 5D + KEY_F16, // ^ code 5E + MOD_SHIFT | KEY_MINUS, // _ code 5F + KEY_GRAVE, // ` code 60 + KEY_A, // a code 61 + KEY_B, // b code 62 + KEY_C, // c code 63 + KEY_D, // d code 64 + KEY_E, // e code 65 + KEY_F, // f code 66 + KEY_G, // g code 67 + KEY_H, // h code 68 + KEY_I, // i code 69 + KEY_J, // j code 6A + KEY_K, // k code 6B + KEY_L, // l code 6C + KEY_M, // m code 6D + KEY_N, // n code 6E + KEY_O, // o code 6F + KEY_P, // p code 70 + KEY_Q, // q code 71 + KEY_R, // r code 72 + KEY_S, // s code 73 + KEY_T, // t code 74 + KEY_U, // u code 75 + KEY_V, // v code 76 + KEY_W, // w code 77 + KEY_X, // x code 78 + KEY_Y, // y code 79 + KEY_Z, // z code 7A + MOD_SHIFT | KEY_LEFTBRACE, // { code 7B + MOD_SHIFT | KEY_BACKSLASH, // | code 7C + MOD_SHIFT | KEY_RIGHTBRACE, // } code 7D + MOD_SHIFT | KEY_GRAVE, // ~ code 7E + KEY_DELETE // DELETE code 7F }; #define RUN 0 #define STOP 1 diff --git a/src/a2term.c b/src/a2term.c index c66eea3..f786e28 100755 --- a/src/a2term.c +++ b/src/a2term.c @@ -8,16 +8,14 @@ int a2cin(int fd, char cin) unsigned char cinpkt[2]; cinpkt[0] = 0x96; // keyboard input cinpkt[1] = cin; - write(fd, cinpkt, 2); - read(fd, cinpkt, 2); - return (cinpkt[0] == 0x9E); + return (write(fd, cinpkt, 2)); } int main(int argc, char **argv) { struct termios oldtio,newtio; fd_set readset, openset; unsigned char iopkt[2]; - int state = RUN; + int state = RUN, cin = 0; int pifd = a2open(argc > 1 ? argv[1] : "127.0.0.1"); if (pifd < 0) { @@ -63,6 +61,16 @@ int main(int argc, char **argv) putchar('\n'); fflush(stdout); } + else if (iopkt[0] == 0x9E) + { + if (iopkt[1] == cin) + cin = 0; + else + { + fprintf(stderr, "\nInput character mismatch!\n"); + state = STOP; + } + } } } if (FD_ISSET(STDIN_FILENO, &readset)) @@ -70,9 +78,43 @@ int main(int argc, char **argv) if (read(STDIN_FILENO, iopkt, 1) == 1) { if (iopkt[0] == 0x1B) - state = STOP; - else - a2cin(pifd, iopkt[0] | 0x80); + { + if (read(STDIN_FILENO, iopkt, 1) == 1) + { + if (iopkt[0] == 0x5B && read(STDIN_FILENO, iopkt, 1) == 1) + { + switch (iopkt[0]) + { + case 0x44: // left arrow + iopkt[0] = 0x88; + break; + case 0x43: // right arrow + iopkt[0] = 0x95; + break; + case 0x42: // down arrow + iopkt[0] = 0x8A; + break; + case 0x41: // up arrow + iopkt[0] = 0x9B; + break; + default: + iopkt[0] = 0xA0; + } + } + else if (iopkt[0] == 'q' || iopkt[0] == 'Q') + state = STOP; + } + } + else if (iopkt[0] == 0x7F) + iopkt[0] = 0x88; + if (cin == 0) + { + cin= iopkt[0] | 0x80; + a2cin(pifd, cin); + } + /* + * else drop the character! + */ } } }