From 602b84ca62c85a905f86b0a090769754e21e51a0 Mon Sep 17 00:00:00 2001 From: dschmenk Date: Sun, 25 Aug 2013 15:04:20 -0700 Subject: [PATCH] Stability fixes Really fixed phantom read when write to ACIA --- src/A2PI.PO | Bin 143360 -> 143360 bytes src/a2pid.c | 404 +++++++++++++++++++++++++-------------------------- src/a2term.c | 56 ++++++- 3 files changed, 251 insertions(+), 209 deletions(-) diff --git a/src/A2PI.PO b/src/A2PI.PO index 1021df7a7130fc56166687a37fc9da1c081780e4..e98a467cd115b45f65d2da8fd5e7a49183dea0fa 100755 GIT binary patch delta 1546 zcmZ`&UrbwN6z}EIKLe(98xh9?cP|98nSe9EOg10(g4y*?)EFN2!1SeaJm`al2T8lR zl7V~+a+UU|(QAQ(yYyn=4rm9Idt1PDgZ5k7A$>q0PQ*Vk6^OEEQqOInxEY(<@6S2E zbH3kqzVmaeSR5-BA8TY;ibw;4ym!3`}!io74)6zvnAGxk|1Lf>H#e6(KwFGOW;l9NizZ_Wc$_xF#pXC9u(Tw+ zcdzSsKA(Qz4lg2V(HTtc^Aj;Ndq+&9qTw7P9pG0^{_sY@OSflJp&25E7pP7{!Mh}G zM<^Fg#^+^3>v7@O-DGqL@0CQbBTa7u>c+9PmR5k@wS&Muc=Rf*1UdX1QgT z&8x!DG*q=%F)SCg_5v+fdvOnAcjZ~L{E#~u0J0`q&!m=v+(YyJbfZXx0Uhn2pYSlg!GfUl)TA`n}4Y zUHzXd=He)jtT2cePbNrwHoT~X!oejTLt@=X097#YmoH(QDL6~d|R7MBKRoyG*!*gW&Q0&K_AETkza6; zagf?^iB*%wv$i%DR;@@rr@mROHtNmTIT*-HS6kEfuh_6BoAWPtAN#I($Oq}e?dC>Z zSHmW!3HRO+uvuC;y9`xj%?(*RHmHNL{77%4n-+UM4g6V%^w1KIklQx#??U7w zTJHH+-^>yn#%D?(i7C)bp;Huyf7P383ldB+y^@HS}QgMbkr`JLtg% qmxGXgB(ESW{YDXs@;C6r-C`2nHXand`ty{q`bx#6?XhiUwf-Mo188~x delta 1484 zcmZ8gZA@Eb6z=8r<1)6{43{B9drfqK_{B7FXyQzaCY`y_1pm~3mHp`q(fMcL$Ch?V z2_WwxyGna7z{`a?Ug)i`CL6@8X;-?naqBL$%&<5Ik>D0TQejatHF)lA`PiD<_kGWK zo^#%F&wY+>LGUdI$ zDIPQFrH$lxOdwzW`MDZQx&=>ez(#uc&{EeU#Y^=d<+0A0xl}H{Eld{g-uAMD-^NUSE9nE$4`cuc z1u_WKGGWa$Xm3#)?p4}rbSLhjRzv^6{f1T z++V(I3)wPhZOj!Ogu=7*G4Vu@?qM8m%xfYoX0m2xanfR8uah+k-N#HiVV^+=Q_w2t zu`UX&0*$wpvkKbLEu^~zW~ZOy>Z9%5LL>qgzXf74-|57XBEZ(gk$+WF+|ElUfp$y? zbwXjTeL~2b(z1*qPkeQqy+P_@{+GQhKn}$G2iZsD#hAYVt(Ri{SJYA1H3nLZy26uD zP*-^}2FyfOc-BK!`NJV{k5}z+5&~ttS2D!}m-BQOx>R66u_@?r;(`w{u7#k$i}`>j ztU@FVwas?q7OBhcXl2Xqs@^S9sZd_(3ueCo?RNGoXg4X}br$HO*pTroc5e!srNGph znG6Bli(XZMT|=NX8Brg%N) z7Egj%wa19^TN#%>_s0 z=#B?Mq?PK2)GB|xa^)%1C`x@(!Nw$A!8zJ4Rr&4J^Jf|z%DpnV{4a-h6!0r}Jd9u` zv7fbW)~a_|0ev0PS7|yxhJm%=5nomvHhjke__90H58@xz#c78V#b7VoZ})Ty?oz|= zqcYr)J}6YT*_`?)Oj!L^w8I175n9AvsI780xT#kckWb^Ki#?eyv&0Lj7Rtl#BxzfvThHCGSxaVW0zwX;9C*Y(J{yrr8ER~-*)-E{KxW$8LIQ|Fh C1tl#2 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! + */ } } }