From d4942ad6efac89f7228264d8c124c0ae9c47245f Mon Sep 17 00:00:00 2001
From: "B. Watson" <urchlay@slackware.uk>
Date: Tue, 16 Jul 2024 04:22:51 -0400
Subject: listbas: BXL token 0x5a WIP.

---
 bas.c     | 8 ++++++++
 bas.h     | 1 +
 listbas.c | 3 +++
 3 files changed, 12 insertions(+)

diff --git a/bas.c b/bas.c
index 110e625..b3893fe 100644
--- a/bas.c
+++ b/bas.c
@@ -27,6 +27,9 @@ int allow_hex_const = 0;
    an A+ program so it can handle this token correctly. */
 int aplus_errtok_hack = 0;
 
+/* BASIC XL token 0x5a is followed by a single "subtoken", this skips it. */
+int bxl_exttok_hack = 0;
+
 unsigned short lomem;
 unsigned short vntp;
 unsigned short vntd;
@@ -373,7 +376,12 @@ void walk_code(unsigned int startlineno, unsigned int endlineno) {
 			while(pos < end) {  /* loop over tokens within a statement */
 				pos++;
 				CALL(on_cmd_token);
+
 				switch(program[pos]) {
+					case 0x5a:
+						if(bxl_exttok_hack) pos++; /* skip subtoken */
+						pos++;
+						break;
 					case CMD_REM:
 					case CMD_DATA:
 					case CMD_ERROR:
diff --git a/bas.h b/bas.h
index 7faa2bb..945b51b 100644
--- a/bas.h
+++ b/bas.h
@@ -204,6 +204,7 @@ extern char *output_filename;
 extern int verbose;
 extern int allow_hex_const;
 extern int aplus_errtok_hack;
+extern int bxl_exttok_hack;
 
 extern void set_self(const char *argv0);
 extern void die(const char *msg);
diff --git a/listbas.c b/listbas.c
index 4b5c16a..961ec32 100644
--- a/listbas.c
+++ b/listbas.c
@@ -701,6 +701,9 @@ int main(int argc, char **argv) {
 	if(bas_type == B_APLUS)
 		aplus_errtok_hack = 1;
 
+	if(bas_type == B_BXL)
+		bxl_exttok_hack = 1;
+
 	init_token_tables();
 
 	readfile();
-- 
cgit v1.2.3