Add event-driven programming: ON TIMER(n) GOSUB with TIMER ON/OFF/STOP, ON KEY(n) GOSUB with KEY(n) ON/OFF/STOP for F1-F10. Fix F-key escape sequence parser (F9/F10 detection, push back consumed bytes on unmatched sequences). Add EDIT statement for TUI line editing. Guard key trap polling so keystrokes aren't consumed when no traps are configured.
101 lines
2.5 KiB
C
101 lines
2.5 KiB
C
#ifndef GWBASIC_H
|
|
#define GWBASIC_H
|
|
|
|
#include "types.h"
|
|
#include "tokens.h"
|
|
#include "error.h"
|
|
#include "hal.h"
|
|
#include "interp.h"
|
|
#include "eval.h"
|
|
#include "gw_math.h"
|
|
#include "strings.h"
|
|
|
|
#define GW_VERSION "0.9.0"
|
|
#define GW_BANNER "GW-BASIC " GW_VERSION
|
|
|
|
/* Tokenizer */
|
|
int gw_crunch(const char *text, uint8_t *out, int outsize);
|
|
void gw_list_line(uint8_t *tokens, int len, char *out, int outsize);
|
|
|
|
/* PRINT statement */
|
|
void gw_stmt_print(void);
|
|
void gw_print_value(gw_value_t *v);
|
|
void gw_print_newline(void);
|
|
|
|
/* LPRINT / LLIST (print.c) */
|
|
void gw_stmt_lprint(void);
|
|
void gw_stmt_llist(void);
|
|
void gw_lpt_set_path(const char *path);
|
|
void gw_lpt_close(void);
|
|
|
|
/* Line number parsing helper (interp.c) */
|
|
bool read_linenum(uint16_t *out);
|
|
|
|
/* Variables (vars.c) */
|
|
gw_valtype_t gw_parse_varname(char name_out[2]);
|
|
var_entry_t *gw_var_find_or_create(const char name[2], gw_valtype_t type);
|
|
void gw_var_assign(var_entry_t *var, gw_value_t *val);
|
|
void gw_vars_clear(void);
|
|
void gw_stmt_deftype(gw_valtype_t type);
|
|
void gw_stmt_swap(void);
|
|
|
|
/* Arrays (arrays.c) */
|
|
void gw_stmt_dim(void);
|
|
gw_value_t *gw_array_element(const char name[2], gw_valtype_t type);
|
|
void gw_stmt_erase(void);
|
|
void gw_stmt_option(void);
|
|
void gw_arrays_clear(void);
|
|
|
|
/* Input (input.c) */
|
|
void gw_stmt_input(void);
|
|
void gw_stmt_line_input(void);
|
|
|
|
/* DEF FN evaluation (interp.c) */
|
|
gw_value_t gw_eval_fn_call(void);
|
|
|
|
/* File I/O (fileio.c) */
|
|
file_entry_t *gw_file_get(int num);
|
|
void gw_file_close_all(void);
|
|
void gw_stmt_open(void);
|
|
void gw_stmt_close(void);
|
|
void gw_stmt_print_file(void);
|
|
void gw_stmt_write_file(void);
|
|
void gw_stmt_input_file(void);
|
|
void gw_stmt_line_input_file(void);
|
|
int gw_file_eof(int num);
|
|
|
|
/* Program I/O (program_io.c) */
|
|
void gw_stmt_save(void);
|
|
void gw_stmt_load(void);
|
|
void gw_stmt_merge(void);
|
|
void gw_stmt_load_internal(const char *filename, bool clear);
|
|
|
|
/* PRINT USING (print_using.c) */
|
|
void gw_print_using(FILE *fp);
|
|
|
|
/* MID$ assignment (interp.c) */
|
|
void gw_stmt_mid_assign(void);
|
|
|
|
/* Random-access file I/O (fileio.c) */
|
|
void gw_stmt_field(void);
|
|
void gw_stmt_lset(void);
|
|
void gw_stmt_rset(void);
|
|
void gw_stmt_put(void);
|
|
void gw_stmt_get(void);
|
|
|
|
/* MBF conversion functions (fileio.c) */
|
|
gw_value_t gw_fn_cvi(gw_value_t *s);
|
|
gw_value_t gw_fn_cvs(gw_value_t *s);
|
|
gw_value_t gw_fn_cvd(gw_value_t *s);
|
|
gw_value_t gw_fn_mki(int16_t n);
|
|
gw_value_t gw_fn_mks(float f);
|
|
gw_value_t gw_fn_mkd(double d);
|
|
|
|
/* CHAIN (interp.c) */
|
|
void gw_stmt_chain(void);
|
|
|
|
/* Error recovery for run loop */
|
|
extern jmp_buf gw_run_jmp;
|
|
|
|
#endif
|