diff options
-rw-r--r-- | bas.h | 69 |
1 files changed, 36 insertions, 33 deletions
@@ -1,30 +1,30 @@ /* bas.h - API for writing standalone programs that deal with - tokenized Atari 8-bit BASIC program. */ + tokenized Atari 8-bit BASIC program. */ /* maximum size of the program in memory. 64KB is actually way overkill. */ #define BUFSIZE 65536 /* the difference between the VVTP and VNTP values in the file, and the - actual file positions of the variable names and values. */ + actual file positions of the variable names and values. */ #define TBL_OFFSET 0xf2 /* minimum program size, for a program that has no variables and - only one line of code (the immediate line 32768, consisting only of - one token, which would be CSAVE). anything smaller than this, we - can't process. */ + only one line of code (the immediate line 32768, consisting only of + one token, which would be CSAVE). anything smaller than this, we + can't process. */ #define MIN_PROG_SIZE 21 /* maximum practical size for a BASIC program. if a file exceeds this - size, we warn about it, but otherwise process it normally. - this value is derived by subtracting the default LOMEM without DOS - ($0700) from the start of the display list in GR.0 ($9c20, on a 48K Atari). + size, we warn about it, but otherwise process it normally. + this value is derived by subtracting the default LOMEM without DOS + ($0700) from the start of the display list in GR.0 ($9c20, on a 48K Atari). */ #define MAX_PROG_SIZE 38176 /* maximum number of variables in the variable name and value tables. this - could be 128, but "ERROR- 4" still expands the tables. Entries >128 - don't have tokens, can't be referred to in code, but we'll preserve - them anyway. */ + could be 128, but "ERROR- 4" still expands the tables. Entries >128 + don't have tokens, can't be referred to in code, but we'll preserve + them anyway. */ #define MAXVARS 256 /* BASIC tokens. Full set, taken from Chapter 10 of De Re Atari. @@ -170,27 +170,6 @@ #define TYPE_ARRAY 1 #define TYPE_STRING 2 -/* callbacks */ -#define CALLBACK(x) void x(unsigned int lineno, unsigned int pos, unsigned int tok, unsigned int end) -#define CALLBACK_PTR(x) void (*x)(unsigned int lineno, unsigned int pos, unsigned int tok, unsigned int end) -#define walk_all_code() walk_code(0, 32768) - -void walk_code(unsigned int startlineno, unsigned int endlineno); -unsigned char get_vartype(unsigned char tok); - -extern CALLBACK_PTR(on_start_line); -extern CALLBACK_PTR(on_bad_line_length); -extern CALLBACK_PTR(on_end_line); -extern CALLBACK_PTR(on_start_stmt); -extern CALLBACK_PTR(on_end_stmt); -extern CALLBACK_PTR(on_cmd_token); -extern CALLBACK_PTR(on_text); -extern CALLBACK_PTR(on_exp_token); -extern CALLBACK_PTR(on_var_token); -extern CALLBACK_PTR(on_string_const); -extern CALLBACK_PTR(on_num_const); -extern CALLBACK_PTR(on_trailing_garbage); - /* BASIC 14-byte header values */ extern unsigned short lomem; extern unsigned short vntp; @@ -201,7 +180,7 @@ extern unsigned short stmcur; extern unsigned short starp; /* positions where various parts of the file start, - derived from the header vars above. */ + derived from the header vars above. */ extern unsigned short codestart; extern unsigned short code_end; extern unsigned short vnstart; @@ -235,7 +214,31 @@ extern void update_header(void); extern void move_code(int offset); extern void adjust_vntable_size(int oldsize, int newsize); extern int vntable_ok(void); +extern unsigned char get_vartype(unsigned char tok); extern void invalid_args(const char *arg); extern FILE *open_file(const char *name, const char *mode); extern void open_input(const char *name); extern void open_output(const char *name); + +/* callback API begins here. + callbacks for walk_code(): */ +#define CALLBACK(x) void x(unsigned int lineno, unsigned int pos, unsigned int tok, unsigned int end) +#define CALLBACK_PTR(x) void (*x)(unsigned int lineno, unsigned int pos, unsigned int tok, unsigned int end) + +/* main entry point for callback API: */ +void walk_code(unsigned int startlineno, unsigned int endlineno); +#define walk_all_code() walk_code(0, 32768) + +/* available callbacks: */ +extern CALLBACK_PTR(on_start_line); +extern CALLBACK_PTR(on_bad_line_length); +extern CALLBACK_PTR(on_end_line); +extern CALLBACK_PTR(on_start_stmt); +extern CALLBACK_PTR(on_end_stmt); +extern CALLBACK_PTR(on_cmd_token); +extern CALLBACK_PTR(on_text); +extern CALLBACK_PTR(on_exp_token); +extern CALLBACK_PTR(on_var_token); +extern CALLBACK_PTR(on_string_const); +extern CALLBACK_PTR(on_num_const); +extern CALLBACK_PTR(on_trailing_garbage); |