aboutsummaryrefslogtreecommitdiff
path: root/vxrefbas.c
diff options
context:
space:
mode:
Diffstat (limited to 'vxrefbas.c')
-rw-r--r--vxrefbas.c42
1 files changed, 28 insertions, 14 deletions
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;
}
}