From 714c27eb8eebece6a183bf7732a22b61777d0956 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Thu, 18 Jul 2024 15:33:25 -0400 Subject: listbas: trying to get indentation right. current solution too complex IMO. --- listbas.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'listbas.c') diff --git a/listbas.c b/listbas.c index 328330b..338e8d0 100644 --- a/listbas.c +++ b/listbas.c @@ -482,12 +482,22 @@ const char *get_bxl_ext_name(unsigned char tok) { void clear_callbacks(void); void init_callbacks(void); +int cmd_is_if; + +CALLBACK(find_cmd_if) { + cmd_is_if = 0; + if((bas_type == B_APLUS && tok == 0x06) || (bas_type != B_APLUS && tok == CMD_IF)) { + cmd_is_if = 1; + if_without_then++; /* find_then() decrements it, if there's a THEN */ + } +} + CALLBACK(find_op_then) { if(verbose) fprintf(stderr, "find_op_then lineno %d, pos %04x, tok %02x\n", lineno, pos, tok); - if(tok == OP_THEN) - if_without_then = 0; + if(cmd_is_if && tok == OP_THEN) + if_without_then--; } /* walk_code()'s API isn't really set up to be reentrant, but we @@ -495,6 +505,7 @@ CALLBACK(find_op_then) { void find_then(int lineno, unsigned short pos) { clear_callbacks(); on_exp_token = find_op_then; + on_cmd_token = find_cmd_if; walk_code(lineno, lineno); init_callbacks(); } @@ -504,11 +515,12 @@ CALLBACK(print_lineno) { first_stmt = 1; - cmd_tok = program[pos + 4]; - if_without_then = 0; - if((bas_type == B_APLUS && cmd_tok == 0x06) || (bas_type != B_APLUS && cmd_tok == CMD_IF)) { - if_without_then = 1; /* find_then() clears it, if there's a THEN */ - find_then(lineno, pos); + if(indent) { + cmd_tok = program[pos + 4]; + if_without_then = 0; + if((bas_type == B_APLUS && cmd_tok == 0x06) || (bas_type != B_APLUS && cmd_tok == CMD_IF)) { + find_then(lineno, pos); + } } if(skip_lineno) return; -- cgit v1.2.3