diff options
author | FreeArtMan <dos21h@gmail.com> | 2016-05-17 23:33:39 +0100 |
---|---|---|
committer | FreeArtMan <dos21h@gmail.com> | 2016-05-17 23:33:39 +0100 |
commit | 4baa01f8cd595cb0517d8f7f665d5be92528b6c2 (patch) | |
tree | 3f717f18473d7caef1375cdd2e1a60b1a0c55bca | |
parent | 852c7ad1af2e3283425dccd79b0923b7df12a388 (diff) | |
download | ihe-4baa01f8cd595cb0517d8f7f665d5be92528b6c2.tar.gz ihe-4baa01f8cd595cb0517d8f7f665d5be92528b6c2.zip |
Fixed cmd line parsing when 1 symbols strings wherent recognized
-rw-r--r-- | ihe.c | 35 | ||||
-rw-r--r-- | libcmd/cmd_parse.c | 108 | ||||
-rw-r--r-- | libcmd/cmd_parse.ragel | 10 |
3 files changed, 84 insertions, 69 deletions
@@ -34,20 +34,26 @@ int cmd_buf_print( cmd_in_buf_t *buf, int type ) { int i; //printf("sz:%d\n",buf->cur_sz); - for (i=0;(i<buf->cur_sz)&&(i<CMD_IN_BUF_SIZE);i++) + for (i=0;(i<CMD_IN_BUF_SIZE);i++) { - if (type == 1) + if ( i < buf->cur_sz ) { - if (isprint(buf->buf[i])) + if (type == 1) { - printf("%c",(char)(buf->buf[i]&0xff)); - } else + if (isprint(buf->buf[i])) + { + printf("%c",(char)(buf->buf[i]&0xff)); + } else + { + printf("."); + } + } else if (type == 2) { - printf("."); + printf("%02x ", (unsigned char)(buf->buf[i]&0xff) ); } - } else if (type == 2) + } else { - printf("%02x ", (unsigned char)(buf->buf[i]&0xff) ); + printf(" "); } } fflush(stdout); @@ -122,7 +128,7 @@ int cmd_tab_autocomplete( char *in_buf ) cmd_tok_t tl, *ptr = &tl, *iter = NULL; struct cmd_acq_t *iter_sugg = NULL; memset( &tl, 0, sizeof( cmd_tok_t )); - //int i; + int i; //printf("[%s]\n", in_buf); if ( parse_cmd( ptr, in_buf) == -1) @@ -134,12 +140,12 @@ int cmd_tab_autocomplete( char *in_buf ) iter = ptr->next; args = cmd_arg_create( iter ); - /* + for (i=0; i<args->argc; i++) { printf("ARG:%d TYPE:%d %s\n", i, args->type[i], args->argv[i]); } - */ + //printf("Unkn command\n"); //if command not found offer auto complete options @@ -472,12 +478,18 @@ int main( int argc, char **argv ) //auto complete advice if (CMK_KEYMAP1(9)) { + if ( cmd_in.cur_sz == 0 ) + { + continue; + } //cmd_buf_print( &cmd_in, 2 ); cmd_in.buf[cmd_in.cur_sz] = '\n'; cmd_in.buf[cmd_in.cur_sz+1] = 0; cmd_tab_autocomplete( cmd_in.buf ); + //cmd_buf_print( &cmd_in, 2 ); write(1,"$",1); cmd_buf_print( &cmd_in, 1 ); + term_cur_set_c( &ts, cmd_in.cur_sz+2 ); continue; } @@ -494,6 +506,7 @@ int main( int argc, char **argv ) term_cur_set_c( &ts, 0); write(1,"$",1); cmd_buf_print( &cmd_in, 1 ); + term_cur_set_c( &ts, cmd_in.cur_sz+2 ); continue; } diff --git a/libcmd/cmd_parse.c b/libcmd/cmd_parse.c index ee6b3ca..84ec41a 100644 --- a/libcmd/cmd_parse.c +++ b/libcmd/cmd_parse.c @@ -7,6 +7,9 @@ #define TADD(T,S,E,SZ) {cmd_tok_t *t=cmd_tok_create(S,E,SZ,T);cmd_tok_add(tl,t);tl=tl->next;} //#define TADD(T,S,E) +//#define PR_TK_DBG(S) printf(S);fwrite(ts,1,te-ts,stdout);printf("\n"); +#define PR_TK_DBG(S) ; + char *new_string( const char *start, const char *end ) { int str_s = end-start+1; @@ -27,7 +30,7 @@ int print_token( char *s, char *e, int tok) -#line 31 "cmd_parse.c" +#line 34 "cmd_parse.c" static const char _cmd_actions[] = { 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, @@ -35,81 +38,80 @@ static const char _cmd_actions[] = { }; static const char _cmd_key_offsets[] = { - 0, 0, 8, 17, 19, 25, 31, 43, - 47, 49, 51, 57 + 0, 0, 8, 17, 19, 25, 37, 40, + 44, 46, 48, 54 }; static const char _cmd_trans_keys[] = { 32, 39, 48, 57, 65, 90, 97, 122, 32, 34, 39, 48, 57, 65, 90, 97, 122, 48, 49, 48, 57, 65, 70, 97, - 102, 48, 57, 65, 90, 97, 122, 32, - 34, 48, 59, 9, 10, 49, 57, 65, - 90, 97, 122, 98, 120, 48, 57, 48, - 57, 48, 49, 48, 57, 65, 70, 97, - 102, 48, 57, 65, 90, 97, 122, 0 + 102, 32, 34, 48, 59, 9, 10, 49, + 57, 65, 90, 97, 122, 32, 9, 10, + 98, 120, 48, 57, 48, 57, 48, 49, + 48, 57, 65, 70, 97, 102, 48, 57, + 65, 90, 97, 122, 0 }; static const char _cmd_single_lengths[] = { - 0, 2, 3, 0, 0, 0, 4, 2, + 0, 2, 3, 0, 0, 4, 1, 2, 0, 0, 0, 0 }; static const char _cmd_range_lengths[] = { - 0, 3, 3, 1, 3, 3, 4, 1, + 0, 3, 3, 1, 3, 4, 1, 1, 1, 1, 3, 3 }; static const char _cmd_index_offsets[] = { - 0, 0, 6, 13, 15, 19, 23, 32, - 36, 38, 40, 44 + 0, 0, 6, 13, 15, 19, 28, 31, + 35, 37, 39, 43 }; static const char _cmd_indicies[] = { 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 1, 4, 3, 5, - 5, 5, 3, 6, 6, 6, 1, 7, - 8, 9, 11, 7, 10, 12, 12, 1, - 14, 15, 10, 13, 10, 13, 4, 16, - 5, 5, 5, 17, 6, 6, 6, 18, - 0 + 5, 5, 3, 6, 7, 8, 10, 6, + 9, 11, 11, 1, 6, 6, 12, 14, + 15, 9, 13, 9, 13, 4, 16, 5, + 5, 5, 17, 11, 11, 11, 18, 0 }; static const char _cmd_trans_targs[] = { - 2, 0, 6, 6, 9, 10, 11, 6, - 1, 7, 8, 6, 5, 6, 3, 4, - 6, 6, 6 + 2, 0, 5, 5, 9, 10, 6, 1, + 7, 8, 5, 11, 5, 5, 3, 4, + 5, 5, 5 }; static const char _cmd_trans_actions[] = { - 0, 0, 9, 21, 0, 0, 0, 7, - 0, 5, 0, 11, 0, 15, 0, 0, - 17, 13, 19 + 0, 0, 7, 21, 0, 0, 0, 0, + 5, 0, 9, 0, 13, 15, 0, 0, + 17, 11, 19 }; static const char _cmd_to_state_actions[] = { - 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }; static const char _cmd_from_state_actions[] = { - 0, 0, 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0 }; static const char _cmd_eof_trans[] = { - 0, 0, 0, 4, 4, 0, 0, 14, + 0, 0, 0, 4, 4, 0, 13, 14, 14, 17, 18, 19 }; -static const int cmd_start = 6; -static const int cmd_first_final = 6; +static const int cmd_start = 5; +static const int cmd_first_final = 5; static const int cmd_error = 0; -static const int cmd_en_main = 6; +static const int cmd_en_main = 5; -#line 53 "cmd_parse.ragel" +#line 56 "cmd_parse.ragel" int parse_cmd( cmd_tok_t *tl, const char *str ) @@ -126,7 +128,7 @@ int parse_cmd( cmd_tok_t *tl, const char *str ) */ -#line 130 "cmd_parse.c" +#line 132 "cmd_parse.c" { cs = cmd_start; ts = 0; @@ -134,9 +136,9 @@ int parse_cmd( cmd_tok_t *tl, const char *str ) act = 0; } -#line 69 "cmd_parse.ragel" +#line 72 "cmd_parse.ragel" -#line 140 "cmd_parse.c" +#line 142 "cmd_parse.c" { int _klen; unsigned int _trans; @@ -157,7 +159,7 @@ _resume: #line 1 "NONE" {ts = p;} break; -#line 161 "cmd_parse.c" +#line 163 "cmd_parse.c" } } @@ -228,38 +230,38 @@ _eof_trans: {te = p+1;} break; case 3: -#line 42 "cmd_parse.ragel" - {te = p+1;} +#line 46 "cmd_parse.ragel" + {te = p+1;{PR_TK_DBG("str = ");TADD(CMDT_STR, ts,te,te-ts);}} break; case 4: -#line 43 "cmd_parse.ragel" - {te = p+1;{printf("str = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_STR,ts,te,te-ts);}} +#line 49 "cmd_parse.ragel" + {te = p+1;{PR_TK_DBG("sep = ");TADD(CMDT_SP, ts,te,te-ts);}} break; case 5: -#line 46 "cmd_parse.ragel" - {te = p+1;{printf("sep = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_SP,ts,te,te-ts);}} +#line 44 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("hex = ");TADD(CMDT_HEX, ts,te,te-ts);}} break; case 6: -#line 41 "cmd_parse.ragel" - {te = p;p--;{printf("hex = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_HEX,ts,te,te-ts);}} +#line 45 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("sp = ");}} break; case 7: -#line 44 "cmd_parse.ragel" - {te = p;p--;{printf("dec = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_INT,ts,te,te-ts);}} +#line 47 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}} break; case 8: -#line 45 "cmd_parse.ragel" - {te = p;p--;{printf("bin = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_BIN,ts,te,te-ts);}} +#line 48 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("bin = ");TADD(CMDT_BIN, ts,te,te-ts);}} break; case 9: -#line 47 "cmd_parse.ragel" - {te = p;p--;{printf("wrd = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_WORD,ts,te,te-ts);}} +#line 50 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("wrd = ");TADD(CMDT_WORD,ts,te,te-ts);}} break; case 10: -#line 44 "cmd_parse.ragel" - {{p = ((te))-1;}{printf("dec = ");fwrite(ts,1,te-ts,stdout);printf("\n");TADD(CMDT_INT,ts,te,te-ts);}} +#line 47 "cmd_parse.ragel" + {{p = ((te))-1;}{PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}} break; -#line 263 "cmd_parse.c" +#line 265 "cmd_parse.c" } } @@ -272,7 +274,7 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 276 "cmd_parse.c" +#line 278 "cmd_parse.c" } } @@ -292,7 +294,7 @@ _again: _out: {} } -#line 70 "cmd_parse.ragel" +#line 73 "cmd_parse.ragel" if ( cs == cmd_error ) { diff --git a/libcmd/cmd_parse.ragel b/libcmd/cmd_parse.ragel index 85aa7d8..dd5ff13 100644 --- a/libcmd/cmd_parse.ragel +++ b/libcmd/cmd_parse.ragel @@ -5,8 +5,8 @@ #define TADD(T,S,E,SZ) {cmd_tok_t *t=cmd_tok_create(S,E,SZ,T);cmd_tok_add(tl,t);tl=tl->next;} //#define TADD(T,S,E) -#define PR_TK_DBG(S) printf(S);fwrite(ts,1,te-ts,stdout);printf("\n"); -//#define PR_TK_DBG(S) +//#define PR_TK_DBG(S) printf(S);fwrite(ts,1,te-ts,stdout);printf("\n"); +#define PR_TK_DBG(S) ; char *new_string( const char *start, const char *end ) { @@ -36,13 +36,13 @@ int print_token( char *s, char *e, int tok) binary = '0b' [0-1]+; string = ('"' ([a-zA-Z0-9' '])+ '"'); seperate = ';'; - word = [a-zA-Z] ([a-zA-Z0-9])+; + word = [a-zA-Z] ([a-zA-Z0-9])*; - sp = (' ' | '\t' | '\n'); + sp = (' ' | '\t' | '\n')*; main := |* hex {PR_TK_DBG("hex = ");TADD(CMDT_HEX, ts,te,te-ts);}; - sp {}; + sp {PR_TK_DBG("sp = ");}; string {PR_TK_DBG("str = ");TADD(CMDT_STR, ts,te,te-ts);}; decimal {PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}; binary {PR_TK_DBG("bin = ");TADD(CMDT_BIN, ts,te,te-ts);}; |