#include "types.h" #include "basic.h" #include "string.h" #include /* extern basic_line basic_memory_lines[BASIC_MAX_LINES]; */ int main(void) { struct basic_expr *expr; char *line; expr = basic_parse_expr("1 + 1", 0); if ( expr == NULL ) return 7; if ( expr->lval_type != BASIC_LVAL_CONST_INT ) return 8; if ( expr->rval_type != BASIC_RVAL_CONST_INT ) return 9; if ( expr->lval.i != 1 ) return 10; if ( expr->rval.i != 1 ) return 11; if ( expr->type != BASIC_OPTP_ADD ) return 12; line = "REM This is a comment that gets ignored"; expr = basic_parse_expr(line, 1); printf("%s\n", line); printf("token = %s\n", tokenizer_token()); printf("errno = %d\n", basic_errno); if ( expr == NULL ) return 13; if ( expr->type != BASIC_OPTP_CMD ) return 14; if ( expr->lval_type != BASIC_LVAL_CMDPTR ) return 15; if ( expr->lval.cmd_ptr != &basic_cmd_rem ) return 16; line = "PRINT 10"; expr = basic_parse_expr(line, 1); printf("%s\n", line); printf("token = %s\n", tokenizer_token()); printf("errno = %d\n", basic_errno); printf("rval.ptr = '%s'\n", (char *)expr->rval.ptr); if ( expr == NULL ) return 17; if ( expr->type != BASIC_OPTP_CMD ) return 18; if ( expr->lval_type != BASIC_LVAL_CMDPTR ) return 19; if ( expr->lval.cmd_ptr != &basic_cmd_print ) return 20; if ( expr->rval_type != BASIC_RVAL_PTR ) return 21; if ( expr->rval.ptr == NULL ) return 22; if ( strcmp((char *)expr->rval.ptr, " 10") != 0 ) return 23; line = " 10"; /* ... continuing logic from the previous */ expr = basic_parse_expr(line, 0); printf("%s\n", line); printf("token = %s\n", tokenizer_token()); printf("errno = %d\n", basic_errno); printf("expr.type = %d\n", expr->type); printf("expr->lval_type = %d\n", expr->lval_type); if ( expr == NULL ) return 24; if ( expr->type != BASIC_OPTP_NONE ) return 25; if ( expr->lval_type != BASIC_LVAL_CONST_INT ) return 26; if ( expr->lval.i != 10 ) return 27; /* Store a line */ expr = basic_parse_expr("10 REM ignore me", 1); if ( expr == NULL ) return 28; if ( expr->lval_type != BASIC_LVAL_CONST_INT ) return 29; if ( expr->rval_type != BASIC_RVAL_PTR ) return 30; if ( expr->lval.i != 10 ) return 31; if ( expr->rval.ptr == NULL ) return 32; if ( strcmp(expr->rval.ptr, " REM ignore me") != 0 ) return 33; if ( expr->type != BASIC_OPTP_STOR ) return 34; /* Immediate mode commands should set basic_errno when line numbers are requested */ line = "PRINT 10"; expr = basic_parse_expr(line, 1); printf("%s\n", line); printf("token = %s\n", tokenizer_token()); printf("errno = %d\n", basic_errno); printf("rval.ptr = '%s'\n", (char *)expr->rval.ptr); if ( expr == NULL ) return 34; if ( basic_errno != BASIC_ERR_SYNTAX_NO_LINE_NUMBER ) return 36; return 0; }