aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2024-07-08 23:22:49 -0400
committerB. Watson <urchlay@slackware.uk>2024-07-08 23:22:49 -0400
commit252a9d9f20b2f600f3dee747a22ef4a648b017dc (patch)
tree8a6cebe997bd0a4082288f05cbe37c9e00aec110
parent8a1009c65d31c0814efdcbf484dfc600530f8820 (diff)
downloadbw-atari8-tools-252a9d9f20b2f600f3dee747a22ef4a648b017dc.tar.gz
whichbas: fix Turbo DSOUND with 0 args, detect Turbo CLS #IOCB.
-rw-r--r--whichbas.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/whichbas.c b/whichbas.c
index ff955ff..9031442 100644
--- a/whichbas.c
+++ b/whichbas.c
@@ -196,7 +196,6 @@ CALLBACK(handle_cmd) {
0x46: LOOP or CP (no args either way)
0x49: LOCK or UNPROTECT (take the same args)
0x4B: RENAME in both Turbo and BXL/XE (take the same args)
- 0x60: CLS or HITCLR (no args either way)
This leaves 42 we can check.
Covered so far: 39 (93%)
TODO: Unknown tokens:
@@ -216,7 +215,6 @@ CALLBACK(handle_cmd) {
case 0x3a: /* -MOVE <args> or TRACEOFF */
case 0x3d: /* UNTIL <args> or ENDIF */
case 0x56: /* DEL <args> or FAST */
- case 0x61: /* DSOUND (4 num args) or INVERSE (no args) */
case 0x62: /* CIRCLE (3 num args) or NORMAL (no args) */
if(has_args) {
remove_type(BT_BXL_BXE);
@@ -344,6 +342,16 @@ CALLBACK(handle_cmd) {
remove_type(BT_TURBO);
}
break;
+ case 0x60: /* CLS (optional IOCB with #) or HITCLR (no args) */
+ /* partial: without args, can't tell them apart. */
+ /* I doubt CLS #IOCB is actually used in many Turbo BASIC
+ programs, because it's broken (at least in Turbo 1.5).
+ It's supposed to only clear the screen of output that
+ happened after the OPEN #IOCB, but it really clears the
+ whole screen. */
+ if(nexttok == OP_HASH) {
+ remove_type(BT_BXL_BXE);
+ }
default: break;
}
if(verbose) fprintf(stderr, " bas_type now %02x\n", bas_type);
@@ -571,6 +579,11 @@ CALLBACK(handle_end_stmt) {
remove_type(BT_TURBO);
}
break;
+ case 0x61: /* DSOUND (0 or 4 num args) or INVERSE (no args) */
+ /* partial: can't tell no-argument DSOUND from INVERSE. */
+ if(comma_count) {
+ remove_type(BT_BXL_BXE);
+ }
case 0x63: /* %PUT (usually seen with optional #; 1 or 2 args) or BLOAD (1 string arg) */
if(comma_count) {
/* multiple args */