aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2025-12-15 04:24:13 -0500
committerB. Watson <urchlay@slackware.uk>2025-12-15 04:24:13 -0500
commitbe07191d42be1cd88377a5ab7fe927c87f2e874e (patch)
treeb8c1a8efbfcb6a2be8b747fda92a27fe16b59b16
parent9a4ed16f3584d84dc867bf8b8deda0d4d4d6ee63 (diff)
downloadalftools-be07191d42be1cd88377a5ab7fe927c87f2e874e.tar.gz
alf: improve -vv output.
-rw-r--r--src/crunch.c79
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);