diff options
| author | B. Watson <urchlay@slackware.uk> | 2025-12-15 04:24:13 -0500 |
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2025-12-15 04:24:13 -0500 |
| commit | be07191d42be1cd88377a5ab7fe927c87f2e874e (patch) | |
| tree | b8c1a8efbfcb6a2be8b747fda92a27fe16b59b16 | |
| parent | 9a4ed16f3584d84dc867bf8b8deda0d4d4d6ee63 (diff) | |
| download | alftools-be07191d42be1cd88377a5ab7fe927c87f2e874e.tar.gz | |
alf: improve -vv output.
| -rw-r--r-- | src/crunch.c | 79 |
1 files changed, 53 insertions, 26 deletions
diff --git a/src/crunch.c b/src/crunch.c index 62e7110..2027f46 100644 --- a/src/crunch.c +++ b/src/crunch.c @@ -42,6 +42,9 @@ int in_pos; /* -vv */ int maxkidcount = 0, maxlevel = 0, totalkidcount = 0, nodeswithkids = 0; +u8 expanded_tok[256]; +int tokens_used[MAX_TOKENS]; + /* -vv */ char *fmt_chr(u8 c) { static char buf[10]; @@ -56,13 +59,22 @@ char *fmt_chr(u8 c) { void indent(int level) { int i; - for(i = 0; i < level; i++) - fputs(" ", stdout); + if(!level) return; + fputs("+-", stdout); + for(i = 1; i < level; i++) + fputs("--", stdout); } /* -vv */ -void print_tok(short tok, u8 chr) { - printf("#%d: %s\n", tok, fmt_chr(chr)); +void print_tok(short tok, int level) { + int i; + + printf("#%d, used %d, len %d: ", tok, tokens_used[tok], level + 1); + + for(i = 0; i <= level; i++) + fputs(fmt_chr(expanded_tok[i]), stdout); + + putchar('\n'); } /* -vv */ @@ -77,7 +89,8 @@ void dump_kids(short tok, int level) { kidcount++; totalkidcount++; indent(level); - print_tok(j, i); + expanded_tok[level] = i; + print_tok(j, level); dump_kids(j, level + 1); } } @@ -108,13 +121,39 @@ void dump_tokens(void) { } } if(!prune) { - print_tok(i, i); + expanded_tok[0] = i; + print_tok(i, 0); dump_kids(i, 1); } } - printf("\nmaxkidcount %d, maxlevel = %d, totalkidcount = %d\n", maxkidcount, maxlevel, totalkidcount); - printf("nodeswithkids %d, avgkidcount: %.2f\n--\n\n", nodeswithkids, ((float)totalkidcount) / (float)(nodeswithkids)); + printf("\nmax kid count %d, max length = %d, total kid count = %d\n", maxkidcount, maxlevel, totalkidcount); + printf("tokens with kids %d, avg kid count: %.2f\n", nodeswithkids, ((float)totalkidcount) / (float)(nodeswithkids)); + + j = 0; + for(i = 0; i < MAX_TOKENS; i++) + if(tokens_used[i]) j++; + + printf("total tokens %d, used: %d, unused %d\n--\n\n", curr_token, j, curr_token - j); +} + +/* -vv */ +void dump_stored_tok(int tok) { + tokens_used[tok]++; + printf("<%d >%d:%d #%d", in_pos, output_len, out_bitpos, tok); + if(tok == TOK_RESET) + fputs(" RESET", stdout); + else if(tok == TOK_END) + fputs(" END", stdout); + else if(tok < 256) + printf(" %s", fmt_chr(tok)); + + if(in_pos < input_len) { + if(tok != TOK_RESET && tok != TOK_END) + printf("\tnew: #%d", curr_token); + } + + putchar('\n'); } /*********************************************************************/ @@ -122,6 +161,9 @@ void dump_tokens(void) { void init_table(void) { memset(tokens, 0, sizeof(tokens)); + if(opt_verbose > 1) + memset(tokens_used, 0, sizeof(tokens_used)); + token_bits = INITIAL_BITS; max_token = 1 << INITIAL_BITS; curr_token = INIT_TOKEN; @@ -143,23 +185,6 @@ void inc_output_len(void) { output_buf[output_len] = 0; } -void dump_stored_tok(int tok) { - printf("<%d >%d:%d #%d", in_pos, output_len, out_bitpos, tok); - if(tok == TOK_RESET) - fputs(" RESET", stdout); - else if(tok == TOK_END) - fputs(" END", stdout); - else if(tok < 256) - printf(" %s", fmt_chr(tok)); - - if(in_pos < input_len) { - if(tok != TOK_RESET && tok != TOK_END) - printf("\tnew: #%d", curr_token); - } - - putchar('\n'); -} - #if !defined(APPEND_BIT) && defined ALF_ENDIAN_OK /* This is 25% faster, but it requires knowing the endianness of @@ -202,7 +227,9 @@ void append_bit(int bit) { void store_token(int tok) { int mask; - if(opt_verbose > 1) dump_stored_tok(tok); + if(opt_verbose > 1) { + dump_stored_tok(tok); + } for(mask = 1 << (token_bits - 1); mask; mask >>= 1) { append_bit(tok & mask ? 1 : 0); |
