+ \r
+ if(ch == '\n') break;\r
+ \r
+ switch(ch)\r
+ {\r
+ // Control characters\r
+ case '\x1B':\r
+ read(_stdin, 1, &ch); // Read control character\r
+ switch(ch)\r
+ {\r
+ //case 'D': if(pos) pos--; break;\r
+ //case 'C': if(pos<len) pos++; break;\r
+ case '[':\r
+ read(_stdin, 1, &ch); // Read control character\r
+ switch(ch)\r
+ {\r
+ #if 0\r
+ case 'A': // Up\r
+ {\r
+ int oldLen = len;\r
+ if( scrollbackPos > 0 ) break;\r
+ \r
+ free(ret);\r
+ ret = strdup( gasCommandHistory[--scrollbackPos] );\r
+ \r
+ len = strlen(ret);\r
+ while(pos--) write(_stdout, 3, "\x1B[D");\r
+ write(_stdout, len, ret); pos = len;\r
+ while(pos++ < oldLen) write(_stdout, 1, " ");\r
+ }\r
+ break;\r
+ case 'B': // Down\r
+ {\r
+ int oldLen = len;\r
+ if( scrollbackPos < giLastCommand-1 ) break;\r
+ \r
+ free(ret);\r
+ ret = strdup( gasCommandHistory[++scrollbackPos] );\r
+ \r
+ len = strlen(ret);\r
+ while(pos--) write(_stdout, 3, "\x1B[D");\r
+ write(_stdout, len, ret); pos = len;\r
+ while(pos++ < oldLen) write(_stdout, 1, " ");\r
+ }\r
+ break;\r
+ #endif\r
+ case 'D': // Left\r
+ if(pos == 0) break;\r
+ pos --;\r
+ write(_stdout, 3, "\x1B[D");\r
+ break;\r
+ case 'C': // Right\r
+ if(pos == len) break;\r
+ pos++;\r
+ write(_stdout, 3, "\x1B[C");\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+ \r