Added a GOTO command

This commit is contained in:
2024-05-12 21:39:59 -04:00
parent 10eb159ef8
commit d5d96676b1
2 changed files with 21 additions and 5 deletions

View File

@@ -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;

View File

@@ -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);