aboutsummaryrefslogtreecommitdiff
path: root/vxrefbas.c
diff options
context:
space:
mode:
Diffstat (limited to 'vxrefbas.c')
-rw-r--r--vxrefbas.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/vxrefbas.c b/vxrefbas.c
index 21e8067..acc830c 100644
--- a/vxrefbas.c
+++ b/vxrefbas.c
@@ -7,10 +7,8 @@
#include "bas.h"
-/* FIXME: lists don't work correctly yet, DIM/READ/INPUT.
- Example: 10 DIM A$(10):? B$ ...it thinks B$ was also DIMed. */
-
int target_var, lastline, assign, is_for, is_next, is_dim, is_read, is_input;
+int in_dim, in_read, in_input;
int refcounts[128];
void print_help(void) {
@@ -48,16 +46,23 @@ CALLBACK(new_command) {
case CMD_NEXT:
is_next = 1; break;
case CMD_DIM:
- is_dim = 1; break;
+ in_dim = 1; break;
case CMD_READ:
- is_read= 1; break;
+ in_read= 1; break;
case CMD_INPUT:
- is_input= 1; break;
+ in_input= 1; break;
default: break;
}
}
+CALLBACK(end_stmt) {
+ in_dim = in_read = in_input = 0;
+}
+
CALLBACK(handle_var) {
+ if(in_dim) is_dim = 1;
+ if(in_input) is_input = 1;
+ if(in_read) is_read = 1;
if(lastline == lineno) return;
if((tok & 0x7f) == target_var) {
refcounts[target_var]++;
@@ -82,6 +87,7 @@ int main(int argc, char **argv) {
on_start_line = new_line;
on_end_line = end_line;
on_cmd_token = new_command;
+ on_end_stmt = end_stmt;
target_var = 0;
vnpos = vnstart;