- }\r
-}\r
-\r
-/**\r
- * \fn char *ReadCommandLine(int *Length)\r
- * \brief Read from the command line\r
- */\r
-char *ReadCommandLine(int *Length)\r
-{\r
- char *ret;\r
- int len, pos, space = 1023;\r
- char ch;\r
- \r
- // Preset Variables\r
- ret = malloc( space+1 );\r
- if(!ret) return NULL;\r
- len = 0; pos = 0;\r
- \r
- // Read In Command Line\r
- do {\r
- read(_stdin, 1, &ch); // Read Character from stdin (read is a blocking call)\r
- // Ignore control characters\r
- if(ch == '\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
- case 'D': if(pos) pos--; break;\r
- case 'C': if(pos<len) pos++; break;\r
- }\r
- }\r
- continue;\r
- }\r
- // Backspace\r
- if(ch == '\b') {\r
- if(len <= 0) continue; // Protect against underflows\r
- if(pos == len) { // Simple case of end of string\r
- len --; pos--;\r
- } else {\r
- memmove(&ret[pos-1], &ret[pos], len-pos);\r
- pos --;\r
- len --;\r
- }\r
- write(_stdout, 1, &ch);\r
- continue;\r
- }\r
- // Expand Buffer\r
- if(len > space) {\r
- space += 256;\r
- ret = realloc(ret, space+1);\r
- if(!ret) return NULL;\r
- }\r