From fd8a16dfd20096092538d58ea7842469ad685e75 Mon Sep 17 00:00:00 2001 From: FreeArtMan Date: Sat, 17 Aug 2019 13:01:43 +0100 Subject: Update libcmd --- libcmd/cmd_parse.c | 173 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 99 insertions(+), 74 deletions(-) (limited to 'libcmd/cmd_parse.c') diff --git a/libcmd/cmd_parse.c b/libcmd/cmd_parse.c index 84ec41a..b9904e9 100644 --- a/libcmd/cmd_parse.c +++ b/libcmd/cmd_parse.c @@ -7,8 +7,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 ) { @@ -32,103 +32,108 @@ int print_token( char *s, char *e, int tok) #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, - 7, 1, 8, 1, 9, 1, 10 + 0, 1, 2, 1, 5, 1, 6, 1, + 7, 1, 8, 1, 9, 1, 10, 1, + 11, 1, 12, 1, 13, 2, 0, 1, + 2, 3, 4 }; static const char _cmd_key_offsets[] = { - 0, 0, 8, 17, 19, 25, 37, 40, - 44, 46, 48, 54 + 0, 0, 3, 6, 8, 10, 16, 30, + 32, 37, 40, 42, 48 }; 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, 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 + 34, 39, 92, 32, 34, 92, 48, 57, + 48, 49, 48, 57, 65, 70, 97, 102, + 32, 34, 39, 44, 46, 48, 9, 10, + 49, 57, 65, 90, 97, 122, 48, 57, + 46, 98, 120, 48, 57, 46, 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, 4, 1, 2, - 0, 0, 0, 0 + 0, 3, 3, 0, 0, 0, 6, 0, + 3, 1, 0, 0, 0 }; static const char _cmd_range_lengths[] = { - 0, 3, 3, 1, 3, 4, 1, 1, - 1, 1, 3, 3 + 0, 0, 0, 1, 1, 3, 4, 1, + 1, 1, 1, 3, 3 }; static const char _cmd_index_offsets[] = { - 0, 0, 6, 13, 15, 19, 28, 31, - 35, 37, 39, 43 + 0, 0, 4, 8, 10, 12, 16, 27, + 29, 34, 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, 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 + 1, 2, 3, 0, 0, 0, 0, 2, + 5, 4, 7, 6, 8, 8, 8, 6, + 9, 0, 9, 9, 10, 11, 9, 12, + 13, 13, 2, 5, 14, 10, 16, 17, + 12, 15, 10, 12, 15, 7, 18, 8, + 8, 8, 19, 13, 13, 13, 20, 0 }; static const char _cmd_trans_targs[] = { - 2, 0, 5, 5, 9, 10, 6, 1, - 7, 8, 5, 11, 5, 5, 3, 4, - 5, 5, 5 + 1, 6, 0, 2, 6, 7, 6, 10, + 11, 6, 3, 8, 9, 12, 6, 6, + 4, 5, 6, 6, 6 }; static const char _cmd_trans_actions[] = { - 0, 0, 7, 21, 0, 0, 0, 0, - 5, 0, 9, 0, 13, 15, 0, 0, - 17, 11, 19 + 0, 3, 0, 0, 19, 0, 17, 0, + 0, 5, 0, 24, 24, 0, 15, 9, + 0, 0, 11, 7, 13 }; static const char _cmd_to_state_actions[] = { - 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 21, 0, + 0, 0, 0, 0, 0 }; static const char _cmd_from_state_actions[] = { - 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0 }; static const char _cmd_eof_trans[] = { - 0, 0, 0, 4, 4, 0, 13, 14, - 14, 17, 18, 19 + 0, 0, 0, 5, 7, 7, 0, 15, + 16, 16, 19, 20, 21 }; -static const int cmd_start = 5; -static const int cmd_first_final = 5; +static const int cmd_start = 6; +static const int cmd_first_final = 6; static const int cmd_error = 0; -static const int cmd_en_main = 5; +static const int cmd_en_main = 6; -#line 56 "cmd_parse.ragel" +#line 75 "cmd_parse.ragel" -int parse_cmd( cmd_tok_t *tl, const char *str ) +int parse_cmd( cmd_tok_t *tl, const char *str, size_t str_size ) { static uint8_t cs; const int stacksize = 10; - int res=0, *stack=NULL, act=0; + int res=0, *stack=NULL, act=0,top=0; stack = malloc( sizeof(stack)*stacksize ); - char *p=(char *)str, *pe = (char *)str + strlen( str ), *eof=NULL; + char *p=(char *)str, *pe = (char *)str + str_size, *eof=pe; char *ts, *te = 0; + /*save for cmd_begin state*/ + //char *ts_cb=0, *te_cb=0; + + printf("PE:%s %02x\n",pe,(unsigned char)*pe); + /* variables used in state machine */ -#line 132 "cmd_parse.c" +#line 137 "cmd_parse.c" { cs = cmd_start; ts = 0; @@ -136,9 +141,9 @@ int parse_cmd( cmd_tok_t *tl, const char *str ) act = 0; } -#line 72 "cmd_parse.ragel" +#line 96 "cmd_parse.ragel" -#line 142 "cmd_parse.c" +#line 147 "cmd_parse.c" { int _klen; unsigned int _trans; @@ -155,11 +160,11 @@ _resume: _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { - case 1: + case 2: #line 1 "NONE" {ts = p;} break; -#line 163 "cmd_parse.c" +#line 168 "cmd_parse.c" } } @@ -225,43 +230,59 @@ _eof_trans: { switch ( *_acts++ ) { - case 2: + case 3: #line 1 "NONE" {te = p+1;} break; - case 3: -#line 46 "cmd_parse.ragel" - {te = p+1;{PR_TK_DBG("str = ");TADD(CMDT_STR, ts,te,te-ts);}} - break; case 4: -#line 49 "cmd_parse.ragel" - {te = p+1;{PR_TK_DBG("sep = ");TADD(CMDT_SP, ts,te,te-ts);}} +#line 60 "cmd_parse.ragel" + {act = 2;} break; case 5: -#line 44 "cmd_parse.ragel" - {te = p;p--;{PR_TK_DBG("hex = ");TADD(CMDT_HEX, ts,te,te-ts);}} +#line 62 "cmd_parse.ragel" + {te = p+1;{PR_TK_DBG("qstr = ");TADD(CMDT_QSTR, ts,te,te-ts);}} break; case 6: -#line 45 "cmd_parse.ragel" - {te = p;p--;{PR_TK_DBG("sp = ");}} +#line 64 "cmd_parse.ragel" + {te = p+1;{PR_TK_DBG("sp = ");TADD(CMDT_SP, ts,te,te-ts);}} break; case 7: -#line 47 "cmd_parse.ragel" - {te = p;p--;{PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}} +#line 59 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("hex = ");TADD(CMDT_HEX, ts,te,te-ts);}} break; case 8: -#line 48 "cmd_parse.ragel" - {te = p;p--;{PR_TK_DBG("bin = ");TADD(CMDT_BIN, ts,te,te-ts);}} +#line 60 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}} break; case 9: -#line 50 "cmd_parse.ragel" - {te = p;p--;{PR_TK_DBG("wrd = ");TADD(CMDT_WORD,ts,te,te-ts);}} +#line 61 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("bin = ");TADD(CMDT_BIN, ts,te,te-ts);}} break; case 10: -#line 47 "cmd_parse.ragel" - {{p = ((te))-1;}{PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}} +#line 63 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("word = ");TADD(CMDT_WORD, ts,te,te-ts);}} + break; + case 11: +#line 66 "cmd_parse.ragel" + {te = p;p--;{PR_TK_DBG("float= ");TADD(CMDT_FLOAT, ts,te,te-ts);}} break; -#line 265 "cmd_parse.c" + case 12: +#line 60 "cmd_parse.ragel" + {{p = ((te))-1;}{PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);}} + break; + case 13: +#line 1 "NONE" + { switch( act ) { + case 0: + {{cs = 0;goto _again;}} + break; + case 2: + {{p = ((te))-1;}PR_TK_DBG("dec = ");TADD(CMDT_INT, ts,te,te-ts);} + break; + } + } + break; +#line 286 "cmd_parse.c" } } @@ -274,7 +295,11 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 278 "cmd_parse.c" + case 1: +#line 1 "NONE" + {act = 0;} + break; +#line 303 "cmd_parse.c" } } @@ -294,11 +319,11 @@ _again: _out: {} } -#line 73 "cmd_parse.ragel" +#line 97 "cmd_parse.ragel" if ( cs == cmd_error ) { - printf("CLIPARSE ERR state [%d] pos[%d]:[%s]\n", res, p-str, p); + printf("CLIPARSE ERR state [%d] pos[%ld]:[%s]\n", res, p-str, p); res = -1; } -- cgit v1.2.3