GW-BASIC reimplementation in C11, using Microsoft's open-sourced 8088 assembly as the authoritative reference. Tokenizer (CRUNCH/LIST), expression evaluator with operator precedence, all math functions (SIN, COS, TAN, ATN, SQR, LOG, EXP, RND, etc.), string functions (LEFT$, RIGHT$, MID$, CHR$, ASC, VAL, STR$, etc.), PRINT statement with comma/semicolon zones, TAB(), SPC(). Handles integer/single/double types with correct promotion, D exponent for double-precision literals, type suffixes (%, !, #), &H hex/&O octal literals, MBF conversion routines, and GW-BASIC-compatible number formatting. Platform-independent via HAL vtable; POSIX backend included.
26 lines
530 B
C
26 lines
530 B
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.1.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);
|
|
|
|
#endif
|