ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
error.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31/****************************************************************************
32 * INCLUDE SECTION
33 ****************************************************************************/
34
35#include "../../ugbc.h"
36
37/****************************************************************************
38 * CODE SECTION
39 ****************************************************************************/
40
48/* <usermanual>
49@keyword ERROR
50
51@english
52
53The ''ERROR'' command allows you to print a custom error message, halting program
54execution and also displaying the line number where the problem occurred. The line
55number is that of the original source code, and does not refer to the line number
56of the ugBASIC program as written on a modern computer. The message will be
57print in the top left position of the screen.
58
59@italian
60
61Il comando ''ERROR'' permette di stampare un messaggio di errore personalizzato,
62interrompendo l'esecuzione del programma e visualizzando anche il numero di linea
63dove il problema è avvenuto. Il numero di linea è quello del sorgente originale, e
64non fa riferimento al numero di linea del programma ugBASIC così come scritto sul
65computer moderno. Il messaggio sarà stampato nella posizione in alto a sinistra
66dello schermo.
67
68@syntax ERROR ["message"]
69
70@example ERROR "array out of bound"
71
72</usermanual> */
73void error( Environment * _environment, char * _message ) {
74
75 Variable * line = variable_temporary( _environment, VT_WORD, "(line)" );
76 Variable * at = variable_temporary( _environment, VT_STRING, "(at)" );
77
78 variable_store( _environment, line->name, ((Environment *)_environment)->yylineno );
79 variable_store_string( _environment, at->name, " at " );
80
81 home( _environment );
82 print( _environment, _message, 0, 0 );
83 print( _environment, at->name, 0, 0 );
84 print( _environment, line->name, 1, 0 );
85 halt( _environment );
86
87}
Variable * variable_store_string(Environment *_environment, char *_destination, char *_value)
Store a string to a variable.
Variable * variable_temporary(Environment *_environment, VariableType _type, char *_meaning)
Define a temporary variable.
Variable * variable_store(Environment *_environment, char *_destination, unsigned int _value)
Store a direct value to a variable.
void error(Environment *_environment, char *_message)
Emit ASM code for ERROR.
Definition error.c:73
void halt(Environment *_environment)
Emit ASM code for HALT.
Definition halt.c:74
void home(Environment *_environment)
Emit code for HOME.
Definition home.c:70
void print(Environment *_environment, char *_value, int _new_line, int _raw)
Emit code for PRINT... instruction.
Definition print.c:141
char * name
Definition ugbc.h:979
struct _Variable Variable
Structure of a single variable.
struct _Environment Environment
Structure of compilation environment.
@ VT_WORD
Definition ugbc.h:455
@ VT_STRING
Definition ugbc.h:474