aboutsummaryrefslogtreecommitdiff
path: root/whichbas.c
diff options
context:
space:
mode:
Diffstat (limited to 'whichbas.c')
-rw-r--r--whichbas.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/whichbas.c b/whichbas.c
index c407c33..dabf414 100644
--- a/whichbas.c
+++ b/whichbas.c
@@ -20,16 +20,19 @@ int comma_count; /* count of regular commas (not string/array) in statement */
unsigned char last_cmd;
unsigned short last_cmd_pos;
+int keep_going = 0; /* -k flag */
+
void print_help(void) {
- printf("Usage: %s [-v] <inputfile>\n", self);
+ printf("Usage: %s [-v] [-k] <inputfile>\n", self);
}
void parse_args(int argc, char **argv) {
int opt;
- while( (opt = getopt(argc, argv, "v")) != -1) {
+ while( (opt = getopt(argc, argv, "vk")) != -1) {
switch(opt) {
case 'v': verbose = 1; break;
+ case 'k': keep_going = verbose = 1; break;
default:
print_help();
exit(1);
@@ -50,10 +53,6 @@ void add_type(int type) {
}
*/
-void remove_type(int type) {
- bas_type &= ((~type) & 0x0f);
-}
-
void print_result(void) {
const char *name;
@@ -75,6 +74,16 @@ void print_result(void) {
exit(bas_type == BT_ATARI ? 0 : bas_type + 8);
}
+void remove_type(int type) {
+ bas_type &= ((~type) & 0x0f);
+
+ if(keep_going) return;
+
+ /* without -k, stop if it gets narrowed down to one of these two. */
+ if(bas_type == BT_TURBO || bas_type == BT_BXE)
+ print_result();
+}
+
CALLBACK(handle_cmd) {
int has_args = 0;
unsigned char nexttok;
@@ -83,7 +92,7 @@ CALLBACK(handle_cmd) {
last_cmd_pos = pos;
comma_count = 0;
- if(verbose) fprintf(stderr, "handle_cmd: lineno %d, tok $%02x, bas_type was %02x...", lineno, tok, bas_type);
+ if(verbose) fprintf(stderr, "handle_cmd: lineno %d, tok $%02x, bas_type was %02x\n", lineno, tok, bas_type);
if(tok <= CMD_ERROR) return; /* legal in BASIC, ignore */
remove_type(BT_ATARI);
@@ -204,7 +213,7 @@ CALLBACK(handle_cmd) {
}
default: break;
}
- if(verbose) fprintf(stderr, " now %02x\n", bas_type);
+ if(verbose) fprintf(stderr, " bas_type now %02x\n", bas_type);
}
CALLBACK(handle_op) {
@@ -213,11 +222,11 @@ CALLBACK(handle_op) {
if(tok == OP_COMMA) comma_count++;
- if(verbose) fprintf(stderr, "handle_op: lineno %d, tok $%02x, comma_count %d, bas_type was %02x...", lineno, tok, comma_count, bas_type);
+ if(verbose) fprintf(stderr, "handle_op: lineno %d, tok $%02x, comma_count %d, bas_type was %02x\n", lineno, tok, comma_count, bas_type);
if(tok == 0x0d) remove_type(BT_ATARI); /* hex const (turbo *and* bxl/xe) */
if(tok <= OP_FUNC_STRIG) {
- if(verbose) fprintf(stderr, " now %02x\n", bas_type);
+ if(verbose) fprintf(stderr, " bas_type now %02x\n", bas_type);
return; /* legal in BASIC, ignore */
}
remove_type(BT_ATARI);
@@ -276,11 +285,11 @@ CALLBACK(handle_op) {
remove_type(BT_TURBO);
}
}
- if(verbose) fprintf(stderr, " now %02x\n", bas_type);
+ if(verbose) fprintf(stderr, " bas_type now %02x\n", bas_type);
}
CALLBACK(handle_end_stmt) {
- if(verbose) fprintf(stderr, "handle_end_stmt: lineno %d, tok $%02x, last_cmd $%02x, comma_count %d, bas_type was %02x...", lineno, tok, last_cmd, comma_count, bas_type);
+ if(verbose) fprintf(stderr, "handle_end_stmt: lineno %d, tok $%02x, last_cmd $%02x, comma_count %d, bas_type was %02x\n", lineno, tok, last_cmd, comma_count, bas_type);
switch(last_cmd) {
case 0x38: /* DPOKE (2 args) or WHILE (1 arg) */
if(comma_count) {