From decd8312b033235cb64db2fcd3ffa4829bd21af7 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Sat, 15 Jun 2024 17:06:56 -0400 Subject: vxrefbas: WIP. --- vxrefbas.c | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'vxrefbas.c') diff --git a/vxrefbas.c b/vxrefbas.c index e05e2d7..0cffc64 100644 --- a/vxrefbas.c +++ b/vxrefbas.c @@ -7,9 +7,9 @@ #include "bas.h" -int A, F, N, D, I, R, G; +int A, F, N, D, I, R, G, O, L; int target_var, lastline; -unsigned char last_cmd = 0, last_op = 0; +unsigned char last_cmd = 0; int refcounts[128]; void print_help(void) { @@ -18,13 +18,13 @@ void print_help(void) { } CALLBACK(new_line) { - A = F = N = D = I = R = G = 0; + A = F = N = D = I = R = G = O = L = 0; } CALLBACK(end_line) { if(lastline != lineno) return; - if(A || F || N || D || I || R || G) { + if(A || F || N || D || I || R || G || O || L) { putchar('='); if(A) putchar('A'); if(F) putchar('F'); @@ -33,6 +33,8 @@ CALLBACK(end_line) { if(I) putchar('I'); if(R) putchar('R'); if(G) putchar('G'); + if(O) putchar('O'); + if(L) putchar('L'); } putchar(' '); @@ -43,11 +45,12 @@ CALLBACK(new_command) { } CALLBACK(end_stmt) { - last_cmd = last_op = 0; + last_cmd = 0; } CALLBACK(handle_var) { - unsigned char last_tok; + unsigned char last_tok, next_tok; + int was_cmd, was_comma, was_semicolon; if(tok != (target_var | 0x80)) return; @@ -57,30 +60,41 @@ CALLBACK(handle_var) { } lastline = lineno; + last_tok = program[pos - 1]; + next_tok = program[pos + 1]; + was_cmd = (last_tok == last_cmd); + was_comma = (last_tok == OP_COMMA); + was_semicolon = (last_tok == OP_SEMICOLON); switch(last_cmd) { case CMD_LET: case CMD_ILET: - if(last_tok == last_cmd) A = 1; + if(was_cmd) A = 1; break; case CMD_FOR: - if(last_tok == last_cmd) F = 1; + if(was_cmd) F = 1; break; case CMD_NEXT: - if(last_tok == last_cmd) N = 1; + if(was_cmd) N = 1; break; case CMD_DIM: - if(last_tok == last_cmd || last_tok == OP_COMMA) D = 1; + if(was_cmd || was_comma) D = 1; break; - case CMD_INPUT: - if(last_tok == last_cmd || last_tok == OP_COMMA) I = 1; + case CMD_INPUT: /* INPUT #1;A and INPUT #1,A are both allowed, grr. */ + if(was_cmd || was_comma || was_semicolon) I = 1; break; case CMD_READ: - if(last_tok == last_cmd || last_tok == OP_COMMA) R = 1; + if(was_cmd || was_comma) R = 1; break; case CMD_GET: - if(last_tok == OP_COMMA) G = 1; + if(was_comma) G = 1; + break; + case CMD_NOTE: + if(was_comma) O = 1; + break; + case CMD_LOCATE: + if(next_tok == OP_EOS || next_tok == OP_EOL) L = 1; break; } } -- cgit v1.2.3