/*---------------------------------------------------------------------------*/ void tokenizer_next(void) { if(tokenizer_finished()) { return; } DEBUG_PRINTF("tokenizer_next: %p\n", nextptr); ptr = nextptr; while(*ptr == ' ') { ++ptr; } current_token = get_next_token(); if(current_token == TOKENIZER_REM) { while(!(*nextptr == '\n' || tokenizer_finished())) { ++nextptr; } if(*nextptr == '\n') { ++nextptr; } tokenizer_next(); } DEBUG_PRINTF("tokenizer_next: '%s' %d\n", ptr, current_token); return; }
void vvtbi_run (void) { if (tokenizer_finished()) return; /* interpret line-statements! */ line_statement(); }
static void print_statement (void) { accept(T_PRINT); do { /* Print a string literal. */ if (tokenizer_token() == T_STRING) { printf("%s", tokenizer_string()); tokenizer_next(); } /* A seperator, send a space. */ else if (tokenizer_token() == T_SEPERATOR) { printf(" "); tokenizer_next(); } /* Evaluate and print an expression. */ else if (tokenizer_token() == T_LETTER || tokenizer_token() == T_NUMBER || tokenizer_token() == T_LEFT_PAREN) printf("%d", expression()); else { break; } /* This additionally ensures a new-line character is present at the end of the line-statement. */ if (tokenizer_finished()) accept(T_EOL); } while (tokenizer_token() != T_EOL && tokenizer_token() != T_EOF); printf("\n"); tokenizer_next(); }
/*---------------------------------------------------------------------------*/ void tokenizer_init(const char *program) { ptr = program; current_line = 1; current_token = get_next_token(); while (current_token==TOKENIZER_CR && !tokenizer_finished()) tokenizer_next(); }
/*---------------------------------------------------------------------------*/ void ubasic_run(void) { if(tokenizer_finished()) { DEBUG_PRINTF("uBASIC program finished\n"); return; } line_statements(); }
/*---------------------------------------------------------------------------*/ void ubasic_run(void) { if(tokenizer_finished()) { ended = 1; glcd_TransFromBuf(); return; } line_statement(); }
void tokenizer_next (void) { if (tokenizer_finished()) return; /* Skip whitespace. */ while (io_current() == ' ' || io_current() == '\t') io_next(); token = get_next_token(); }
static void jump_linenum (int linenum) { FILE *original; int finished; /* Not only does this verify whether the scanner finished, if it has finished, it additionally closes the stream. */ finished = tokenizer_finished(); /* We save this copy in case the scanner wasn't finished. */ original = io_handle(); /* Start a new scanner from the beginning of the file. */ tokenizer_init(io_file()); reset(T_ERROR); io_reset(); /* Search for linenum. */ find_linenum(linenum); /* If the search ended at EOF, linenum could not be found! */ if (tokenizer_finished()) { dprintf( "*warning: could not jump to `%d'\n", E_WARNING, linenum); /* Set back to original stream */ io_set(io_file(), original); /* Prepare scanner to continue. */ if (!finished) { reset(T_NUMBER); io_reset(); io_next(); } } }
/*---------------------------------------------------------------------------*/ void tokenizer_next(void) { if(tokenizer_finished()) { return; } DEBUG_PRINTF("tokenizer_next: %p\n", nextptr); ptr = nextptr; while(*ptr == ' ') { ++ptr; } current_token = get_next_token(); DEBUG_PRINTF("tokenizer_next: '%s' %ld\n", ptr, current_token); return; }
/*---------------------------------------------------------------------------*/ int ubasic_finished(void) { return ended || tokenizer_finished(); }
int vvtbi_finished (void) { /* The interpreter is finished! */ return tokenizer_finished(); }