Added a GOTO command
This commit is contained in:
25
src/basic.c
25
src/basic.c
@@ -10,6 +10,7 @@
|
||||
struct basic_expr math_expressions[32];
|
||||
int basic_errno;
|
||||
int basic_last_stored_lineno;
|
||||
int basic_run_ip = 0;
|
||||
int basic_repl_mode = 0; /* 0 = REPL mode, 1 = RUN mode */
|
||||
|
||||
char _tokenizer_value[BASIC_TOKENIZER_MAX_LENGTH];
|
||||
@@ -38,6 +39,18 @@ void basic_cmd_rem(void *expr)
|
||||
return;
|
||||
}
|
||||
|
||||
void basic_cmd_goto(void *data)
|
||||
{
|
||||
int lineno;
|
||||
if ( data == NULL ) {
|
||||
basic_errno = BASIC_ERR_INVALID_ARGUMENTS;
|
||||
return;
|
||||
}
|
||||
memset(decimal, 0x00, 32);
|
||||
lineno = atoi(lstripseek(data));
|
||||
basic_run_ip = lineno-1;
|
||||
}
|
||||
|
||||
void basic_cmd_list(void *data)
|
||||
{
|
||||
int i = 0;
|
||||
@@ -73,16 +86,15 @@ void basic_cmd_print(void *data)
|
||||
|
||||
void basic_cmd_run(void *data)
|
||||
{
|
||||
int i = 0;
|
||||
int rc = 0;
|
||||
char *lineptr;
|
||||
for ( i = 0; i <= basic_last_stored_lineno ; i++ ) {
|
||||
for ( basic_run_ip = 0; basic_run_ip <= basic_last_stored_lineno ; basic_run_ip++ ) {
|
||||
basic_errno = 0;
|
||||
if ( basic_memory_lines[i][0] != 0x00 ) {
|
||||
rc = basic_run_line_v2((char *)basic_memory_lines[i], 1);
|
||||
if ( basic_memory_lines[basic_run_ip][0] != 0x00 ) {
|
||||
rc = basic_run_line_v2((char *)basic_memory_lines[basic_run_ip], 1);
|
||||
if ( rc != 0 || basic_errno != 0 ) {
|
||||
_cputs("Error at Line ");
|
||||
itoa(i+1, (char *)&decimal);
|
||||
itoa(basic_run_ip+1, (char *)&decimal);
|
||||
_cputs(": ");
|
||||
_cputs((char *)&decimal);
|
||||
_cputs("\n");
|
||||
@@ -220,6 +232,9 @@ int basic_run_line_v2(char *codeline, int repl_mode)
|
||||
} else if ( strcmp(token, "LIST") == 0 ) {
|
||||
basic_cmd_list(NULL);
|
||||
return basic_errno;
|
||||
} else if ( strcmp(token, "GOTO") == 0 ) {
|
||||
basic_cmd_goto(buffptr);
|
||||
return basic_errno;
|
||||
} else if ( strcmp(token, "RUN") == 0 ) {
|
||||
basic_repl_mode = 1;
|
||||
return basic_errno;
|
||||
|
||||
@@ -101,6 +101,7 @@ void basic_cmd_rem(void *data);
|
||||
void basic_cmd_print(void *data);
|
||||
void basic_cmd_list(void *data);
|
||||
void basic_cmd_run(void *data);
|
||||
void basic_cmd_goto(void *data);
|
||||
|
||||
void basic_print_var(basic_variable *var);
|
||||
void basic_report_error(char *prefix);
|
||||
|
||||
Reference in New Issue
Block a user