diff options
| author | Franklin Wei <git@fwei.tk> | 2015-11-22 15:26:49 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2015-11-22 15:26:49 -0500 |
| commit | c7c1bd7641581e2a0b84dcecdab61ed7c43268e9 (patch) | |
| tree | 593dfd770a4706cd2417faf7f2c075b53b7a8a78 /src/interp.c | |
| parent | f90dc85cf0989eec61a6c9ce76842b78e2d8f46d (diff) | |
| download | ducky-c7c1bd7641581e2a0b84dcecdab61ed7c43268e9.zip ducky-c7c1bd7641581e2a0b84dcecdab61ed7c43268e9.tar.gz ducky-c7c1bd7641581e2a0b84dcecdab61ed7c43268e9.tar.bz2 ducky-c7c1bd7641581e2a0b84dcecdab61ed7c43268e9.tar.xz | |
add input
Diffstat (limited to 'src/interp.c')
| -rw-r--r-- | src/interp.c | 278 |
1 files changed, 159 insertions, 119 deletions
diff --git a/src/interp.c b/src/interp.c index d5d567f..8ecf630 100644 --- a/src/interp.c +++ b/src/interp.c @@ -179,6 +179,7 @@ static void exit_handler(void) static void vid_write(const char *str) { printf("%s", str); + fflush(stdout); } static void __attribute__((format(printf,1,2))) vid_writef(const char *fmt, ...) @@ -1017,6 +1018,43 @@ static int logchar_handler(char **save, int *repeats_left) } +static int input_handler(char **save, int *repeats_left) +{ + (void) save; (void) repeats_left; + char *varname = strtok_r(NULL, "= \t", save); + + if(varname && isValidVariable(varname)) + { + struct varnode_t *node = lookup_var(varname); + if(node->constant) + error("attempted to modify a constant variable"); + + scanf(VARFORMAT, &node->val); + } + else + error("expected valid variable name after INPUT"); + return OK; +} + +static int prompt_handler(char **save, int *repeats_left) +{ + (void) save; (void) repeats_left; + char *varname = strtok_r(NULL, "= \t", save); + + if(varname && isValidVariable(varname)) + { + vid_writef("%s? ", varname); + struct varnode_t *node = lookup_var(varname); + if(node->constant) + error("attempted to modify a constant variable"); + + scanf(VARFORMAT, &node->val); + } + else + error("expected valid variable name after PROMPT"); + return OK; +} + static struct token_t { const char *tok; int (*func)(char **save, int *repeats_left); @@ -1043,6 +1081,8 @@ static struct token_t { { "LBL", rem_handler, }, { "QUIT", quit_handler, }, { "EXIT", quit_handler, }, + { "INPUT", input_handler, }, + { "PROMPT", prompt_handler, }, }; /* once again, this lookup table is implemented with a perfect hash map */ @@ -1053,8 +1093,8 @@ static struct token_t tokmap[TOKMAP_SIZE]; /* auto-generated with mph-1.2 */ /* * d=3 - * n=28 - * m=22 + * n=30 + * m=24 * c=1.23 * maxlen=7 * minklen=2 @@ -1062,116 +1102,116 @@ static struct token_t tokmap[TOKMAP_SIZE]; * minchar=47 * maxchar=89 * loop=0 - * numiter=200 + * numiter=6 * seed= */ static int g[] = { - 19, 12, -1, 15, 17, 1, 4, 4, 0, 13, - 10, 19, 18, -1, 14, 19, 19, 21, 19, 0, - 7, 0, 15, 18, 4, 0, 4, 3, + 16, 8, 8, 5, 13, 18, 0, -1, 21, 12, + 0, 4, 13, 23, 7, 0, 4, 8, 19, 23, + 20, 20, 0, 9, 19, 0, 16, 15, 0, 1, }; static int T0[] = { - 0x15, 0x0c, 0x1a, 0x17, 0x16, 0x02, 0x16, 0x07, 0x17, 0x09, - 0x0f, 0x0f, 0x0f, 0x17, 0x07, 0x0c, 0x1a, 0x08, 0x17, 0x04, - 0x14, 0x07, 0x06, 0x07, 0x10, 0x0e, 0x0e, 0x18, 0x01, 0x08, - 0x1b, 0x17, 0x14, 0x19, 0x12, 0x1a, 0x0b, 0x0c, 0x12, 0x07, - 0x05, 0x05, 0x06, 0x13, 0x06, 0x19, 0x07, 0x0d, 0x01, 0x0c, - 0x1a, 0x09, 0x15, 0x1b, 0x16, 0x03, 0x15, 0x19, 0x12, 0x07, - 0x1b, 0x05, 0x08, 0x0a, 0x15, 0x05, 0x16, 0x0b, 0x0a, 0x00, - 0x0e, 0x0d, 0x08, 0x0a, 0x04, 0x1b, 0x07, 0x17, 0x0c, 0x15, - 0x07, 0x0a, 0x02, 0x0c, 0x15, 0x08, 0x0d, 0x12, 0x10, 0x00, - 0x07, 0x13, 0x15, 0x10, 0x17, 0x0a, 0x0e, 0x01, 0x14, 0x14, - 0x1a, 0x06, 0x15, 0x05, 0x0a, 0x14, 0x03, 0x12, 0x04, 0x0c, - 0x11, 0x1b, 0x0e, 0x1b, 0x17, 0x03, 0x08, 0x09, 0x15, 0x08, - 0x15, 0x0c, 0x1b, 0x0e, 0x00, 0x16, 0x08, 0x1b, 0x08, 0x10, - 0x0a, 0x00, 0x09, 0x01, 0x00, 0x09, 0x13, 0x03, 0x19, 0x03, - 0x05, 0x15, 0x10, 0x06, 0x13, 0x02, 0x19, 0x15, 0x13, 0x12, - 0x18, 0x16, 0x02, 0x0b, 0x0a, 0x1b, 0x0a, 0x15, 0x08, 0x06, - 0x09, 0x12, 0x06, 0x12, 0x14, 0x12, 0x0c, 0x17, 0x15, 0x09, - 0x1a, 0x0b, 0x05, 0x00, 0x1b, 0x0c, 0x10, 0x09, 0x02, 0x17, - 0x11, 0x0a, 0x15, 0x11, 0x18, 0x12, 0x16, 0x00, 0x0e, 0x10, - 0x18, 0x11, 0x0b, 0x07, 0x0b, 0x1a, 0x1b, 0x07, 0x07, 0x15, - 0x0a, 0x16, 0x1a, 0x0f, 0x06, 0x19, 0x0c, 0x17, 0x06, 0x0e, - 0x12, 0x08, 0x18, 0x17, 0x09, 0x0c, 0x03, 0x1b, 0x15, 0x0e, - 0x06, 0x01, 0x11, 0x0e, 0x04, 0x08, 0x05, 0x1b, 0x05, 0x03, - 0x15, 0x04, 0x17, 0x10, 0x0e, 0x07, 0x0e, 0x14, 0x13, 0x17, - 0x14, 0x1b, 0x0a, 0x07, 0x18, 0x04, 0x03, 0x00, 0x10, 0x19, - 0x1a, 0x16, 0x0a, 0x0f, 0x14, 0x1a, 0x18, 0x19, 0x0c, 0x1b, - 0x06, 0x0a, 0x03, 0x0b, 0x0e, 0x1b, 0x1b, 0x0d, 0x03, 0x0d, - 0x19, 0x0a, 0x0f, 0x14, 0x14, 0x06, 0x00, 0x01, 0x10, 0x0d, - 0x19, 0x18, 0x09, 0x1b, 0x17, 0x16, 0x14, 0x15, 0x0b, 0x10, - 0x14, 0x02, 0x1b, 0x08, 0x0d, 0x0d, 0x13, 0x0c, 0x0a, 0x16, - 0x09, + 0x11, 0x0a, 0x1c, 0x11, 0x00, 0x18, 0x04, 0x14, 0x01, 0x15, + 0x05, 0x1a, 0x09, 0x06, 0x0e, 0x14, 0x04, 0x0b, 0x03, 0x08, + 0x1c, 0x1c, 0x1a, 0x05, 0x08, 0x00, 0x1c, 0x18, 0x07, 0x06, + 0x17, 0x19, 0x08, 0x15, 0x04, 0x09, 0x10, 0x00, 0x1d, 0x09, + 0x15, 0x1a, 0x1b, 0x11, 0x11, 0x16, 0x1d, 0x02, 0x00, 0x16, + 0x07, 0x07, 0x1d, 0x0f, 0x17, 0x09, 0x1b, 0x05, 0x13, 0x14, + 0x07, 0x1b, 0x0c, 0x14, 0x17, 0x1c, 0x0c, 0x11, 0x18, 0x0c, + 0x01, 0x00, 0x13, 0x01, 0x11, 0x1c, 0x18, 0x08, 0x17, 0x18, + 0x17, 0x00, 0x17, 0x16, 0x0f, 0x08, 0x18, 0x1d, 0x0e, 0x11, + 0x07, 0x01, 0x0d, 0x1a, 0x05, 0x14, 0x05, 0x0b, 0x0e, 0x0b, + 0x07, 0x08, 0x17, 0x0c, 0x0b, 0x18, 0x0c, 0x12, 0x19, 0x0b, + 0x12, 0x0e, 0x06, 0x0a, 0x13, 0x18, 0x09, 0x05, 0x0f, 0x17, + 0x17, 0x16, 0x18, 0x1c, 0x0a, 0x15, 0x0a, 0x10, 0x03, 0x11, + 0x05, 0x07, 0x00, 0x0b, 0x13, 0x08, 0x11, 0x0c, 0x06, 0x03, + 0x16, 0x08, 0x1c, 0x0e, 0x09, 0x14, 0x01, 0x03, 0x1b, 0x02, + 0x0e, 0x09, 0x0b, 0x18, 0x00, 0x18, 0x19, 0x0a, 0x04, 0x1d, + 0x1c, 0x0a, 0x06, 0x14, 0x0d, 0x1a, 0x1c, 0x16, 0x00, 0x04, + 0x11, 0x16, 0x0e, 0x0d, 0x10, 0x01, 0x13, 0x07, 0x06, 0x00, + 0x13, 0x0e, 0x1c, 0x10, 0x14, 0x13, 0x00, 0x19, 0x00, 0x14, + 0x12, 0x19, 0x19, 0x15, 0x09, 0x16, 0x10, 0x1c, 0x12, 0x02, + 0x11, 0x04, 0x04, 0x18, 0x09, 0x14, 0x19, 0x1d, 0x14, 0x17, + 0x1d, 0x09, 0x07, 0x1b, 0x11, 0x00, 0x16, 0x07, 0x0f, 0x08, + 0x09, 0x02, 0x07, 0x01, 0x0f, 0x15, 0x19, 0x08, 0x01, 0x14, + 0x04, 0x0c, 0x1c, 0x09, 0x00, 0x1a, 0x0f, 0x0b, 0x09, 0x19, + 0x1b, 0x0e, 0x0d, 0x14, 0x00, 0x07, 0x15, 0x0e, 0x07, 0x1c, + 0x16, 0x08, 0x01, 0x15, 0x02, 0x08, 0x05, 0x1b, 0x0f, 0x0f, + 0x13, 0x15, 0x0d, 0x04, 0x00, 0x05, 0x19, 0x08, 0x05, 0x0b, + 0x0f, 0x1b, 0x10, 0x10, 0x09, 0x0c, 0x01, 0x13, 0x15, 0x03, + 0x0a, 0x1c, 0x14, 0x12, 0x08, 0x19, 0x01, 0x0e, 0x1d, 0x08, + 0x1d, 0x13, 0x15, 0x04, 0x0f, 0x15, 0x01, 0x02, 0x1d, 0x07, + 0x0d, }; static int T1[] = { - 0x13, 0x0e, 0x17, 0x12, 0x13, 0x12, 0x08, 0x19, 0x05, 0x0d, - 0x0b, 0x07, 0x06, 0x05, 0x0b, 0x0f, 0x06, 0x07, 0x12, 0x06, - 0x11, 0x0d, 0x08, 0x10, 0x18, 0x1b, 0x18, 0x12, 0x03, 0x00, - 0x00, 0x16, 0x1a, 0x07, 0x18, 0x11, 0x19, 0x10, 0x1a, 0x0e, - 0x0e, 0x16, 0x16, 0x02, 0x10, 0x0d, 0x11, 0x0a, 0x02, 0x14, - 0x00, 0x0c, 0x1a, 0x1a, 0x08, 0x02, 0x01, 0x06, 0x0b, 0x0b, - 0x06, 0x02, 0x13, 0x15, 0x0f, 0x11, 0x0d, 0x01, 0x04, 0x0c, - 0x0b, 0x13, 0x02, 0x11, 0x06, 0x12, 0x0e, 0x07, 0x01, 0x10, - 0x1b, 0x01, 0x01, 0x0a, 0x0b, 0x09, 0x0c, 0x13, 0x11, 0x0a, - 0x03, 0x11, 0x02, 0x13, 0x01, 0x08, 0x0c, 0x0a, 0x06, 0x0e, - 0x00, 0x13, 0x1b, 0x03, 0x12, 0x01, 0x01, 0x0e, 0x0d, 0x09, - 0x11, 0x1b, 0x08, 0x05, 0x0b, 0x0c, 0x02, 0x08, 0x10, 0x13, - 0x02, 0x13, 0x14, 0x04, 0x16, 0x15, 0x18, 0x06, 0x10, 0x13, - 0x1a, 0x01, 0x03, 0x16, 0x17, 0x12, 0x1b, 0x10, 0x0f, 0x0f, - 0x06, 0x0f, 0x0f, 0x1a, 0x10, 0x17, 0x18, 0x09, 0x06, 0x10, - 0x01, 0x03, 0x06, 0x0d, 0x03, 0x0d, 0x0d, 0x0f, 0x16, 0x09, - 0x13, 0x14, 0x0b, 0x16, 0x1a, 0x12, 0x0d, 0x1a, 0x06, 0x00, - 0x19, 0x18, 0x17, 0x18, 0x1b, 0x10, 0x0d, 0x14, 0x17, 0x16, - 0x0a, 0x04, 0x0e, 0x03, 0x10, 0x1a, 0x01, 0x10, 0x19, 0x04, - 0x09, 0x0f, 0x08, 0x0b, 0x1a, 0x0f, 0x0f, 0x09, 0x09, 0x1b, - 0x18, 0x08, 0x16, 0x03, 0x10, 0x05, 0x14, 0x02, 0x19, 0x0f, - 0x18, 0x13, 0x03, 0x16, 0x06, 0x1b, 0x01, 0x0f, 0x19, 0x0d, - 0x00, 0x0a, 0x11, 0x0f, 0x0d, 0x0e, 0x08, 0x10, 0x1b, 0x0c, - 0x1b, 0x19, 0x08, 0x17, 0x0c, 0x1b, 0x0a, 0x12, 0x0d, 0x0f, - 0x0a, 0x14, 0x04, 0x0f, 0x0b, 0x05, 0x0f, 0x18, 0x04, 0x18, - 0x09, 0x05, 0x06, 0x1b, 0x04, 0x13, 0x19, 0x0c, 0x1b, 0x0c, - 0x18, 0x19, 0x08, 0x0e, 0x11, 0x0b, 0x03, 0x16, 0x1b, 0x15, - 0x11, 0x14, 0x09, 0x09, 0x17, 0x0e, 0x12, 0x1a, 0x14, 0x12, - 0x19, 0x08, 0x16, 0x07, 0x12, 0x0a, 0x17, 0x14, 0x13, 0x06, - 0x10, 0x0f, 0x03, 0x18, 0x0d, 0x04, 0x13, 0x10, 0x1b, 0x03, - 0x09, + 0x05, 0x04, 0x07, 0x13, 0x0f, 0x01, 0x1b, 0x15, 0x0d, 0x15, + 0x17, 0x13, 0x05, 0x05, 0x04, 0x18, 0x05, 0x05, 0x0e, 0x16, + 0x13, 0x13, 0x15, 0x1a, 0x06, 0x09, 0x14, 0x19, 0x13, 0x02, + 0x13, 0x18, 0x06, 0x12, 0x06, 0x0d, 0x13, 0x03, 0x05, 0x19, + 0x11, 0x14, 0x0e, 0x06, 0x00, 0x16, 0x0c, 0x10, 0x07, 0x0e, + 0x05, 0x1d, 0x07, 0x0b, 0x12, 0x02, 0x0b, 0x18, 0x13, 0x13, + 0x17, 0x0c, 0x12, 0x19, 0x13, 0x1d, 0x0f, 0x19, 0x16, 0x1d, + 0x0c, 0x17, 0x14, 0x11, 0x15, 0x14, 0x09, 0x04, 0x1c, 0x10, + 0x0a, 0x1a, 0x08, 0x11, 0x07, 0x12, 0x06, 0x10, 0x0d, 0x09, + 0x07, 0x08, 0x01, 0x15, 0x19, 0x10, 0x1b, 0x0d, 0x1c, 0x0d, + 0x15, 0x0f, 0x11, 0x06, 0x1c, 0x03, 0x08, 0x00, 0x04, 0x0e, + 0x08, 0x0e, 0x10, 0x1a, 0x1a, 0x18, 0x01, 0x02, 0x03, 0x0f, + 0x03, 0x0a, 0x0f, 0x1b, 0x01, 0x0a, 0x0d, 0x15, 0x0f, 0x09, + 0x0d, 0x14, 0x0f, 0x0a, 0x1d, 0x02, 0x15, 0x00, 0x0d, 0x07, + 0x18, 0x08, 0x0e, 0x0f, 0x0c, 0x02, 0x00, 0x00, 0x0a, 0x1c, + 0x09, 0x16, 0x18, 0x0f, 0x0c, 0x1a, 0x02, 0x12, 0x14, 0x10, + 0x13, 0x19, 0x1c, 0x04, 0x05, 0x1b, 0x1c, 0x1a, 0x1b, 0x04, + 0x03, 0x0d, 0x0f, 0x04, 0x1d, 0x09, 0x0a, 0x12, 0x0f, 0x19, + 0x14, 0x14, 0x00, 0x17, 0x08, 0x11, 0x04, 0x0d, 0x16, 0x06, + 0x05, 0x0d, 0x1c, 0x11, 0x10, 0x09, 0x1d, 0x00, 0x02, 0x0a, + 0x01, 0x06, 0x00, 0x10, 0x0a, 0x00, 0x11, 0x0d, 0x0a, 0x03, + 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x0e, 0x04, 0x01, 0x12, 0x13, + 0x11, 0x16, 0x02, 0x14, 0x0b, 0x1d, 0x00, 0x1d, 0x09, 0x03, + 0x08, 0x11, 0x02, 0x08, 0x06, 0x08, 0x0e, 0x01, 0x12, 0x11, + 0x08, 0x12, 0x0b, 0x16, 0x0d, 0x1b, 0x1c, 0x11, 0x1d, 0x10, + 0x1d, 0x08, 0x01, 0x17, 0x15, 0x0c, 0x16, 0x15, 0x12, 0x0a, + 0x17, 0x04, 0x1c, 0x1c, 0x0a, 0x0f, 0x17, 0x0d, 0x06, 0x07, + 0x12, 0x0a, 0x05, 0x03, 0x04, 0x03, 0x1d, 0x0b, 0x11, 0x14, + 0x13, 0x1a, 0x1b, 0x05, 0x06, 0x1a, 0x0c, 0x15, 0x07, 0x01, + 0x17, 0x17, 0x1b, 0x15, 0x15, 0x08, 0x1c, 0x0e, 0x15, 0x04, + 0x0d, }; static int T2[] = { - 0x16, 0x04, 0x18, 0x10, 0x13, 0x0f, 0x08, 0x19, 0x19, 0x17, - 0x13, 0x0b, 0x0b, 0x08, 0x0a, 0x08, 0x01, 0x05, 0x15, 0x1a, - 0x11, 0x02, 0x16, 0x0f, 0x0d, 0x09, 0x16, 0x13, 0x17, 0x0d, - 0x05, 0x11, 0x11, 0x0d, 0x05, 0x14, 0x01, 0x19, 0x12, 0x0a, - 0x15, 0x15, 0x15, 0x17, 0x13, 0x15, 0x0e, 0x18, 0x11, 0x0f, - 0x03, 0x04, 0x03, 0x09, 0x1a, 0x13, 0x04, 0x08, 0x09, 0x07, - 0x15, 0x16, 0x05, 0x11, 0x02, 0x00, 0x15, 0x10, 0x1b, 0x0d, - 0x14, 0x18, 0x10, 0x0f, 0x13, 0x13, 0x14, 0x11, 0x10, 0x0a, - 0x05, 0x03, 0x1a, 0x14, 0x0d, 0x19, 0x05, 0x1a, 0x1a, 0x00, - 0x06, 0x0c, 0x07, 0x11, 0x01, 0x18, 0x12, 0x06, 0x02, 0x06, - 0x1a, 0x17, 0x03, 0x0d, 0x09, 0x02, 0x09, 0x19, 0x03, 0x01, - 0x16, 0x0d, 0x17, 0x10, 0x01, 0x06, 0x18, 0x06, 0x10, 0x16, - 0x07, 0x06, 0x12, 0x1a, 0x17, 0x04, 0x16, 0x19, 0x0a, 0x1b, - 0x15, 0x16, 0x13, 0x11, 0x09, 0x1b, 0x02, 0x05, 0x12, 0x0c, - 0x10, 0x11, 0x08, 0x0f, 0x0c, 0x05, 0x0d, 0x0f, 0x19, 0x01, - 0x1b, 0x17, 0x03, 0x08, 0x00, 0x1a, 0x0d, 0x0c, 0x07, 0x19, - 0x17, 0x01, 0x03, 0x0e, 0x02, 0x18, 0x19, 0x10, 0x02, 0x00, - 0x0c, 0x02, 0x0a, 0x0b, 0x1a, 0x11, 0x19, 0x01, 0x16, 0x02, - 0x09, 0x01, 0x10, 0x1a, 0x0c, 0x0c, 0x12, 0x10, 0x18, 0x1b, - 0x14, 0x17, 0x17, 0x12, 0x1b, 0x08, 0x0d, 0x0c, 0x07, 0x1a, - 0x04, 0x03, 0x0b, 0x0e, 0x1b, 0x16, 0x10, 0x08, 0x17, 0x16, - 0x16, 0x10, 0x17, 0x0a, 0x1a, 0x0c, 0x17, 0x0f, 0x0a, 0x19, - 0x00, 0x0c, 0x08, 0x11, 0x17, 0x09, 0x17, 0x0f, 0x00, 0x05, - 0x17, 0x05, 0x05, 0x17, 0x17, 0x15, 0x0f, 0x00, 0x00, 0x19, - 0x0c, 0x19, 0x0f, 0x11, 0x08, 0x18, 0x01, 0x10, 0x17, 0x17, - 0x0d, 0x18, 0x13, 0x15, 0x0d, 0x0e, 0x0e, 0x09, 0x05, 0x17, - 0x14, 0x17, 0x16, 0x16, 0x1b, 0x10, 0x10, 0x0c, 0x06, 0x02, - 0x17, 0x12, 0x05, 0x08, 0x12, 0x00, 0x0b, 0x17, 0x07, 0x12, - 0x08, 0x01, 0x18, 0x0a, 0x19, 0x16, 0x01, 0x0b, 0x12, 0x12, - 0x06, 0x0a, 0x0e, 0x0c, 0x10, 0x0d, 0x00, 0x04, 0x19, 0x12, - 0x06, + 0x0f, 0x0d, 0x08, 0x09, 0x04, 0x0d, 0x05, 0x1a, 0x0d, 0x0b, + 0x1b, 0x1a, 0x18, 0x09, 0x06, 0x02, 0x15, 0x1b, 0x1a, 0x02, + 0x08, 0x08, 0x1c, 0x07, 0x0c, 0x16, 0x18, 0x09, 0x07, 0x07, + 0x1d, 0x16, 0x14, 0x1d, 0x17, 0x11, 0x0c, 0x14, 0x0d, 0x1a, + 0x17, 0x02, 0x0e, 0x19, 0x01, 0x03, 0x07, 0x00, 0x08, 0x02, + 0x05, 0x0e, 0x12, 0x08, 0x1a, 0x0e, 0x1b, 0x18, 0x1a, 0x1a, + 0x0b, 0x19, 0x12, 0x0c, 0x05, 0x15, 0x02, 0x0d, 0x18, 0x1b, + 0x0a, 0x18, 0x0c, 0x15, 0x13, 0x05, 0x18, 0x12, 0x05, 0x19, + 0x0c, 0x0a, 0x09, 0x16, 0x13, 0x1c, 0x11, 0x03, 0x0b, 0x07, + 0x10, 0x09, 0x08, 0x0e, 0x0f, 0x14, 0x1a, 0x12, 0x16, 0x01, + 0x07, 0x02, 0x07, 0x16, 0x11, 0x03, 0x16, 0x0e, 0x05, 0x1a, + 0x08, 0x06, 0x0f, 0x03, 0x0b, 0x12, 0x1a, 0x14, 0x15, 0x07, + 0x13, 0x1d, 0x08, 0x1c, 0x0d, 0x0f, 0x0a, 0x02, 0x03, 0x1d, + 0x18, 0x0d, 0x07, 0x13, 0x1c, 0x0c, 0x1b, 0x0b, 0x01, 0x10, + 0x0c, 0x1b, 0x18, 0x0b, 0x05, 0x15, 0x11, 0x00, 0x0f, 0x16, + 0x01, 0x04, 0x14, 0x16, 0x09, 0x1a, 0x05, 0x1c, 0x1b, 0x06, + 0x13, 0x0e, 0x14, 0x1a, 0x19, 0x12, 0x00, 0x16, 0x16, 0x01, + 0x00, 0x1a, 0x18, 0x06, 0x00, 0x1a, 0x0e, 0x0c, 0x17, 0x01, + 0x04, 0x06, 0x13, 0x1b, 0x16, 0x08, 0x0b, 0x06, 0x0f, 0x1b, + 0x07, 0x0c, 0x0f, 0x05, 0x0a, 0x0d, 0x0e, 0x19, 0x0c, 0x10, + 0x19, 0x1a, 0x06, 0x0b, 0x02, 0x06, 0x07, 0x09, 0x0a, 0x16, + 0x0a, 0x06, 0x1d, 0x1d, 0x04, 0x00, 0x0f, 0x18, 0x0e, 0x01, + 0x0e, 0x09, 0x0e, 0x1d, 0x17, 0x1d, 0x06, 0x02, 0x18, 0x18, + 0x1a, 0x06, 0x17, 0x02, 0x05, 0x0e, 0x12, 0x0f, 0x05, 0x0e, + 0x01, 0x13, 0x10, 0x11, 0x0a, 0x1a, 0x11, 0x19, 0x0c, 0x17, + 0x13, 0x1a, 0x03, 0x03, 0x1a, 0x12, 0x03, 0x18, 0x06, 0x0b, + 0x04, 0x16, 0x09, 0x02, 0x1d, 0x07, 0x02, 0x09, 0x1d, 0x03, + 0x0e, 0x1a, 0x05, 0x17, 0x0d, 0x0b, 0x09, 0x0a, 0x05, 0x0a, + 0x18, 0x02, 0x00, 0x17, 0x09, 0x05, 0x0c, 0x04, 0x0e, 0x0b, + 0x0f, 0x12, 0x03, 0x18, 0x14, 0x19, 0x01, 0x0e, 0x04, 0x16, + 0x11, }; #define uchar unsigned char @@ -1179,29 +1219,29 @@ static int T2[] = { static int tok_hash(const uchar *key) { - int i; - unsigned f0, f1, f2; - const uchar *kp = key; - - for (i=-47, f0=f1=f2=0; *kp; ++kp) { - if (*kp < 47 || *kp > 89) - return -1; - if (kp-key > 6) - return -1; - f0 += T0[i + *kp]; - f1 += T1[i + *kp]; - f2 += T2[i + *kp]; - i += 43; - } + int i; + unsigned f0, f1, f2; + const uchar *kp = key; + + for (i=-47, f0=f1=f2=0; *kp; ++kp) { + if (*kp < 47 || *kp > 89) + return -1; + if (kp-key > 6) + return -1; + f0 += T0[i + *kp]; + f1 += T1[i + *kp]; + f2 += T2[i + *kp]; + i += 43; + } - if (kp-key < 2) - return -1; + if (kp-key < 2) + return -1; - f0 %= 28; - f1 %= 28; - f2 %= 28; + f0 %= 30; + f1 %= 30; + f2 %= 30; - return (g[f0] + g[f1] + g[f2]) % 22; + return (g[f0] + g[f1] + g[f2]) % 24; } static void tokmap_insert(struct token_t *tok) |