Menu

[b84aab]: / src / common / smbas.h  Maximize  Restore  History

Download this file

294 lines (262 with data), 11.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
// This file is part of SmallBASIC
//
// COMPILER/EXECUTOR/IDE COMMON DEFS
//
// This program is distributed under the terms of the GPL v2.0 or later
// Download the GNU Public License (GPL) from www.gnu.org
//
// Copyright(C) 2000 Nicholas Christopoulos
#if !defined(_smbas_h)
#define _smbas_h
#include "common/sys.h"
#include "common/pmem.h"
#include "common/var.h"
#include "common/kw.h"
#include "common/scan.h"
#if defined(__cplusplus)
extern "C" {
#endif
/**
* @ingroup exec
*
* @typedef bc_head_t
* byte-code header
*/
typedef struct {
char sign[4]; /**< always "SBEx" */
byte unused;
word ver; /**< version of this structure */
dword sbver; /**< version of SB */
dword flags; /**< flags
b0 = Big-endian CPU
b1 = BC 16bit
b2 = BC 32bit */
dword size; /**< total size (include label-table and bc) */
dword bc_count; /**< BC length */
dword var_count; /**< number of variables */
dword lab_count; /**< number of labels */
dword data_ip; /**< default DATA position */
dword uds_tab_ip; /**< location of struct mapping table */
// ver 2
word lib_count; /**< libraries count (needed units) */
dword sym_count; /**< symbol count (linked-symbols) */
//
char reserved[26];
} bc_head_t;
/**
* @ingroup exec
*
* @typedef bc_unit_rec_t
* byte-code linked-unit record
*/
typedef struct {
char lib[OS_FILENAME_SIZE + 1]; /**< library name */
int type; /**< library type (unit, c-module) */
int id; /**< lib-id in this byte-code */
int tid; /**< task id (updated on loading) */
} bc_lib_rec_t;
/**
* @ingroup exec
*
* @typedef bc_symbol_rec_t
* byte-code linked-symbol record
*/
typedef struct {
char symbol[SB_KEYWORD_SIZE + 1]; /**< symbol name */
int type; /**< symbol type */
int lib_id; /**< lib-id in this byte-code */
int sym_id; /**< symbol-id in this byte-code */
int var_id; /**< related variable-id in this byte-code */
int task_id; /**< task id which library is loaded (updated on loading) */
int exp_idx; /**< export symbol-index in librarys space (updated on loading) */
} bc_symbol_rec_t;
#define BRUN_RUNNING 0 /**< brun_status(), the program is still running @ingroup exec */
#define BRUN_STOPPED 1 /**< brun_status(), an error or 'break' has already stoped the program @ingroup exec */
/*
* compiler options
*/
#if defined(BRUN_MODULE)
#define EXTERN
#else
#define EXTERN extern
#endif
#if defined(OS_LIMITED)
#define OPT_CMD_SZ 128
#define OPT_MOD_SZ 128
#else
#define OPT_CMD_SZ 1024
#define OPT_MOD_SZ 1024
#endif
EXTERN byte opt_graphics; /**< command-line option: start in graphics mode @ingroup sys */
EXTERN byte opt_cstr; /**< C-style special characters by default @ingroup sys */
EXTERN byte opt_quiet; /**< command-line option: quiet @ingroup sys */
EXTERN int opt_retval; /**< return-value (ERRORLEVEL) @ingroup sys */
EXTERN byte opt_decomp; /**< decompile @ingroup sys */
EXTERN byte opt_syntaxcheck; /**< syntax check only @ingroup sys */
EXTERN char opt_command[OPT_CMD_SZ];
/**< command-line parameters (COMMAND$) @ingroup sys */
EXTERN byte opt_safedraw; /**< using safest drawing routines (PalmOS: Use API for draw) @ingroup sys */
EXTERN byte opt_usevmt; /**< using VMT on compilation by default @ingroup sys */
EXTERN int opt_base; /**< OPTION BASE x @ingroup sys */
EXTERN byte opt_uipos; /**< OPTION UICS {CHARS|PIXELS} @ingroup sys */
EXTERN byte opt_loadmod; /**< load all modules @ingroup sys */
EXTERN char opt_modlist[OPT_MOD_SZ];
/**< Modules list @ingroup sys */
EXTERN int opt_verbose; /**< print some additional infos @ingroup sys */
EXTERN int opt_ide; /**< SB runs through an IDE, store somewhere the last-error (0=no IDE, 1=IDE is linked, 2=IDE is external executable) @ingroup sys */
EXTERN byte os_charset; /**< use charset encoding @ingroup sys */
EXTERN int opt_pref_width; /**< prefered graphics mode width (0 = undefined) @ingroup sys */
EXTERN int opt_pref_height; /**< prefered graphics mode height (0 = undefined) @ingroup sys */
EXTERN byte opt_pref_bpp; /**< prefered graphics mode bits-per-pixel (0 = undefined) @ingroup sys */
EXTERN byte opt_nosave; /**< do not create .sbx files @ingroup sys */
EXTERN byte opt_interactive; /**< interactive mode @ingroup sys */
EXTERN byte opt_usepcre; /**< OPTION PREDEF PCRE @ingroup sys */
#define IDE_NONE 0
#define IDE_LINKED 1
#define IDE_EXTERNAL 2
// globals
EXTERN int gsb_last_line; /**< source code line of the last error @ingroup sys */
EXTERN int gsb_last_error; /**< error code, 0 = no error, < 0 = local messages (i.e. break), > 0 = error @ingroup sys */
EXTERN char gsb_last_file[OS_PATHNAME_SIZE + 1]; /**< source code file-name of the last error @ingroup sys */
EXTERN char gsb_last_errmsg[SB_ERRMSG_SIZE + 1]; /**< last error message @ingroup sys */
#include "common/units.h"
#include "common/tasks.h"
// emulation
#define prog_line ctask->line
#define comp_line ctask->line
#define prog_error ctask->error
#define comp_error ctask->error
#define prog_file ctask->file
#define comp_file prog_file
#define comp_errmsg ctask->errmsg
#define prog_errmsg ctask->errmsg
#define bytecode_h ctask->bytecode_h
#define prog_length ctask->sbe.exec.length
#define prog_ip ctask->sbe.exec.ip
#define prog_source ctask->sbe.exec.bytecode
#define prog_dp ctask->sbe.exec.dp
#define data_org ctask->sbe.exec.org
#define prog_stack ctask->sbe.exec.stack
#define prog_stack_alloc ctask->sbe.exec.stack_alloc
#define prog_sp ctask->sbe.exec.sp
#define eval_stk ctask->sbe.exec.eval_stk
#define eval_stk_size ctask->sbe.exec.eval_stk_size
#define eval_sp ctask->sbe.exec.eval_sp
#define prog_varcount ctask->sbe.exec.varcount
#define prog_labcount ctask->sbe.exec.labcount
#define prog_libcount ctask->sbe.exec.libcount
#define prog_symcount ctask->sbe.exec.symcount
#define prog_expcount ctask->sbe.exec.expcount
#define prog_vartable ctask->sbe.exec.vartable
#define prog_labtable ctask->sbe.exec.labtable
#define prog_libtable ctask->sbe.exec.libtable
#define prog_symtable ctask->sbe.exec.symtable
#define prog_exptable ctask->sbe.exec.exptable
#define prog_uds_tab_ip ctask->sbe.exec.uds_tab_ip
#define comp_extfunctable ctask->sbe.comp.extfunctable
#define comp_extfunccount ctask->sbe.comp.extfunccount
#define comp_extfuncsize ctask->sbe.comp.extfuncsize
#define comp_extproctable ctask->sbe.comp.extproctable
#define comp_extproccount ctask->sbe.comp.extproccount
#define comp_extprocsize ctask->sbe.comp.extprocsize
#define comp_vartable ctask->sbe.comp.vartable
#define comp_varcount ctask->sbe.comp.varcount
#define comp_varsize ctask->sbe.comp.varsize
#define comp_imptable ctask->sbe.comp.imptable
#define comp_impcount ctask->sbe.comp.impcount
#define comp_exptable ctask->sbe.comp.exptable
#define comp_expcount ctask->sbe.comp.expcount
#define comp_libtable ctask->sbe.comp.libtable
#define comp_libcount ctask->sbe.comp.libcount
#define comp_labtable ctask->sbe.comp.labtable
#define comp_labcount ctask->sbe.comp.labcount
#define comp_bc_sec ctask->sbe.comp.bc_sec
#define comp_block_level ctask->sbe.comp.block_level
#define comp_block_id ctask->sbe.comp.block_id
#define comp_prog ctask->sbe.comp.bc_prog
#define comp_data ctask->sbe.comp.bc_data
#define comp_proc_level ctask->sbe.comp.proc_level
#define comp_bc_proc ctask->sbe.comp.bc_proc
#define comp_bc_temp ctask->sbe.comp.bc_temp
#define comp_bc_tmp2 ctask->sbe.comp.bc_tmp2
#define comp_bc_name ctask->sbe.comp.bc_name
#define comp_bc_parm ctask->sbe.comp.bc_parm
#define comp_udptable ctask->sbe.comp.udptable
#define comp_udpcount ctask->sbe.comp.udpcount
#define comp_udpsize ctask->sbe.comp.udpsize
#define comp_udstable ctask->sbe.comp.udstable
#define comp_udscount ctask->sbe.comp.udscount
#define comp_next_field_id ctask->sbe.comp.next_field_id
#define comp_uds_tab_ip ctask->sbe.comp.uds_tab_ip
#define comp_use_global_vartable ctask->sbe.comp.use_global_vartable
#define comp_stack ctask->sbe.comp.stack
#define comp_sp ctask->sbe.comp.stack_count
#define comp_do_close_cmd ctask->sbe.comp.do_close_cmd
#define comp_unit_flag ctask->sbe.comp.unit_flag
#define comp_unit_name ctask->sbe.comp.unit_name
#define comp_first_data_ip ctask->sbe.comp.first_data_ip
#define comp_file_name ctask->sbe.comp.file_name
#define tlab prog_labtable
#define tvar prog_vartable
#define eval_size eval_stk_size
#define data_dp prog_dp
#define brun_first_data_ip data_org
#define prog_stack_sp prog_sp
#define prog_stack_count prog_stack_sp
#undef EXTERN
/**
* @ingroup exec
*
* create a 'break' - display message, too
*
* the 'break' will stops the program's execution
*/
void brun_break(void);
/**
* @ingroup exec
*
* stops the program's execution
*/
void brun_stop(void);
/**
* @ingroup exec
*
* returns the execution status (runing or stopped)
*
* @return BRUN_STOPPED or BRUN_RUNNING
*/
int brun_status(void);
#if !defined(OS_LIMITED)
/**
* decompiler,
* dumps the code in the current task
*
* @param output the output stream (FILE*)
*/
void dump_bytecode(FILE * output);
#endif
/**
* returns the last-modified time of the file
*
* @param file the filename
* @return the last-modified time of the file; on error returns 0L
*/
time_t sys_filetime(const char *file);
/*
* search a set of directories for the given file
* directories on path must be separated with symbol ':'
*
* @param path the path
* @param file the file
* @param retbuf a buffer to store the full-path-name file (can be NULL)
* @return non-zero if found
*/
int sys_search_path(const char *path, const char *file, char *retbuf);
/**
* synchronize exported variables
*/
void exec_sync_variables(int dir) SEC(TRASH);
#if defined(__cplusplus)
}
#endif
#endif
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.