⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bwbasic.h

📁 这是一个简易的basic语言解释器, 可供我们学习和改进.
💻 H
📖 第 1 页 / 共 4 页
字号:
   };/* Structure to define bwBASIC task: UNDER CONSTRUCTION */#if PARACTstruct bwb_task   {   char progfile[ MAXARGSIZE ];		/* program file */   int rescan;				/* program needs to be rescanned */   int number;				/* current line number */   struct bwb_line *bwb_l;		/* current line pointer */   struct bwb_line bwb_start;		/* starting line marker */   struct bwb_line bwb_end;		/* ending line marker */   struct bwb_line *data_line;      	/* current line to read data */   int data_pos;			/* position in data_line */   struct bwb_variable var_start;	/* variable list start marker */   struct bwb_variable var_end;		/* variable list end marker */   struct bwb_function fnc_start;	/* function list start marker */   struct bwb_function fnc_end;		/* function list end marker */   struct fslte fslt_start;		/* function-sub-label lookup table start marker */   struct fslte fslt_end;		/* function-sub-label lookup table end marker */   int exsc;				/* EXEC stack counter */   int expsc;				/* expression stack counter */   int xtxtsc;				/* eXecute TeXT stack counter */   struct exse excs[ EXECLEVELS ];	/* EXEC stack */   struct exp_ese exps[ ESTACKSIZE ];	/* Expression stack */   struct xtxtsl xtxts[ XTXTSTACKSIZE ];/* Execute Text stack */   };extern struct bwb_task *bwb_tasks[ TASKS ];	/* table of task pointers */#else					/* not multi-tasking */extern char progfile[ MAXARGSIZE ];	/* program file */extern int rescan;			/* program needs to be rescanned */extern int number;			/* current line number */extern struct bwb_line *bwb_l;		/* current line pointer */extern struct bwb_line bwb_start;	/* starting line marker */extern struct bwb_line bwb_end;		/* ending line marker */extern struct bwb_line *data_line;      /* current line to read data */extern int data_pos;			/* position in data_line */extern struct bwb_variable var_start;	/* variable list start marker */extern struct bwb_variable var_end;	/* variable list end marker */extern struct bwb_function fnc_start;	/* function list start marker */extern struct bwb_function fnc_end;	/* function list end marker */extern struct fslte fslt_start;		/* function-sub-label lookup table start marker */extern struct fslte fslt_end;		/* function-sub-label lookup table end marker */extern int exsc;			/* EXEC stack counter */extern int expsc;			/* expression stack counter */extern int xtxtsc;			/* eXecute TeXT stack counter */extern struct exse *excs;		/* EXEC stack */extern struct exp_ese *exps;		/* Expression stack */extern struct xtxtsl *xtxts;		/* Execute Text stack */#endifextern int bwb_curtask;			/* current task */extern struct bwb_variable *ed;         /* EDITOR$ variable */extern struct bwb_variable *fi;         /* FILES$ variable */extern struct bwb_variable *pr;         /* PROMPT$ variable */extern struct bwb_variable *im;         /* IMPLEMENTATION$ variable */extern struct bwb_variable *co;         /* COLORS variable *//***************************************************************	bwbasic.h	Part III: Global Data***************************************************************/extern char *bwb_ebuf;extern int bwb_trace;extern int dim_base;			/* set by OPTION BASE */extern struct bwb_command bwb_cmdtable[ COMMANDS ];extern FILE *errfdevice;                /* output device for error messages */extern int err_line;			/* line in which error occurred */extern int err_number;			/* number of last error */extern char err_gosubl[ MAXVARNAMESIZE + 1 ]; /* line for error GOSUB */extern char *err_table[ N_ERRORS ];	/* table of error messages */extern int prn_col;extern struct bwb_function bwb_prefuncs[ FUNCTIONS ];	/* table of predefined functions */#if COMMON_CMDSextern struct dev_element *dev_table;   /* table of devices */#endif/* Operator Structure and Table */struct bwb_op   {   char symbol[ 8 ];                    /* BASIC symbol for the operator */   int operation;                       /* internal code for the operator */   int precedence;                      /* level of precedence, 0 = highest */   };extern struct bwb_op exp_ops[ N_OPERATORS ]; /* the table itself, filled in in bwb_tbl.c *//***************************************************************	bwbasic.h	Part IV: Function Prototypes***************************************************************/#if ANSI_Cextern void *CALLOC(size_t nelem, size_t elsize, char *str); /* JBV */extern void FREE(void *ptr, char *str); /* JBV */extern void bwb_init( int argc, char **argv );extern int bwb_fload( FILE *file );extern int bwb_ladd( char *buffer, int replace );extern int bwb_findcmd( int argc, int a, struct bwb_line *l );extern struct bwb_line *bwb_xtxtline( char *buffer );extern void bwb_mainloop( void );extern void bwb_execline( void );extern int bwb_gets( char *buffer );extern int bwb_error( char *message );extern void break_handler( void );extern void break_mes( int x );extern struct bwb_line *bwb_null( struct bwb_line *l );extern struct bwb_line *bwb_rem( struct bwb_line *l );extern struct bwb_line *bwb_lerror( struct bwb_line *l );extern struct bwb_line *bwb_run( struct bwb_line *l );extern struct bwb_line *bwb_let( struct bwb_line *l );extern struct bwb_line *bwb_load( struct bwb_line *l );extern struct bwb_line *bwb_merge( struct bwb_line *l );extern struct bwb_line *bwb_chain( struct bwb_line *l );extern struct bwb_line *bwb_common( struct bwb_line *l );extern struct bwb_line *bwb_xload( struct bwb_line *l );extern struct bwb_line *bwb_new( struct bwb_line *l );extern struct bwb_line *bwb_save( struct bwb_line *l );extern struct bwb_line *bwb_list( struct bwb_line *l );extern struct bwb_line *bwb_xlist( struct bwb_line *l, FILE *file );extern struct bwb_line *bwb_go( struct bwb_line *l );extern struct bwb_line *bwb_goto( struct bwb_line *l );extern struct bwb_line *bwb_gosub( struct bwb_line *l );extern struct bwb_line *bwb_return( struct bwb_line *l );extern struct bwb_line *bwb_xend( struct bwb_line *l );extern struct bwb_line *bwb_system( struct bwb_line *l );extern struct bwb_line *bwb_tron( struct bwb_line *l );extern struct bwb_line *bwb_troff( struct bwb_line *l );extern struct bwb_line *bwb_randomize( struct bwb_line *l );extern struct bwb_line *bwb_stop( struct bwb_line *l );extern struct bwb_line *bwb_data( struct bwb_line *l );extern struct bwb_line *bwb_read( struct bwb_line *l );extern struct bwb_line *bwb_restore( struct bwb_line *l );extern struct bwb_line *bwb_delete( struct bwb_line *l );extern struct bwb_line *bwb_if( struct bwb_line *l );extern struct bwb_line *bwb_else( struct bwb_line *l );extern struct bwb_line *bwb_elseif( struct bwb_line *l );extern struct bwb_line *bwb_select( struct bwb_line *l );extern struct bwb_line *bwb_case( struct bwb_line *l );extern struct bwb_line *bwb_endselect( struct bwb_line *l );extern struct bwb_line *bwb_endif( struct bwb_line *l );extern struct bwb_line *bwb_while( struct bwb_line *l );extern struct bwb_line *bwb_wend( struct bwb_line *l );extern struct bwb_line *bwb_for( struct bwb_line *l );extern struct bwb_line *bwb_next( struct bwb_line *l );extern struct bwb_line *bwb_dim( struct bwb_line *l );extern struct bwb_line *bwb_option( struct bwb_line *l );extern struct bwb_line *bwb_open( struct bwb_line *l );extern struct bwb_line *bwb_close( struct bwb_line *l );extern struct bwb_line *bwb_get( struct bwb_line *l );extern struct bwb_line *bwb_put( struct bwb_line *l );extern struct bwb_line *bwb_rmdir( struct bwb_line *l );extern struct bwb_line *bwb_chdir( struct bwb_line *l );extern struct bwb_line *bwb_mkdir( struct bwb_line *l );extern struct bwb_line *bwb_kill( struct bwb_line *l );extern struct bwb_line *bwb_name( struct bwb_line *l );extern struct bwb_line *bwb_rset( struct bwb_line *l );extern struct bwb_line *bwb_lset( struct bwb_line *l );extern struct bwb_line *bwb_field( struct bwb_line *l );extern struct bwb_line *bwb_on( struct bwb_line *l );extern struct bwb_line *bwb_line( struct bwb_line *l );extern struct bwb_line *bwb_ddbl( struct bwb_line *l );extern struct bwb_line *bwb_dint( struct bwb_line *l );extern struct bwb_line *bwb_dsng( struct bwb_line *l );extern struct bwb_line *bwb_dstr( struct bwb_line *l );extern struct bwb_line *bwb_mid( struct bwb_line *l );extern struct bwb_line *bwb_clear( struct bwb_line *l );extern struct bwb_line *bwb_erase( struct bwb_line *l );extern struct bwb_line *bwb_swap( struct bwb_line *l );extern struct bwb_line *bwb_environ( struct bwb_line *l );extern struct bwb_line *bwb_width( struct bwb_line *l );extern struct bwb_line *bwb_write( struct bwb_line *l );extern struct bwb_line *bwb_edit( struct bwb_line *l );extern struct bwb_line *bwb_files( struct bwb_line *l );extern struct bwb_line *bwb_do( struct bwb_line *l );extern struct bwb_line *bwb_doloop( struct bwb_line *l );extern struct bwb_line *bwb_cls( struct bwb_line *l );extern struct bwb_line *bwb_locate( struct bwb_line *l );extern struct bwb_line *bwb_color( struct bwb_line *l );extern struct bwb_line *bwb_do( struct bwb_line *l );extern struct bwb_line *bwb_loop( struct bwb_line *l );extern struct bwb_line *bwb_exit( struct bwb_line *l );extern struct bwb_line *bwb_exitfor( struct bwb_line *l );extern struct bwb_line *bwb_exitdo( struct bwb_line *l );extern struct bwb_line *bwb_zline( struct bwb_line *l );extern void bwb_incexec( void );extern void bwb_decexec( void );extern int bwb_setexec( struct bwb_line *l, int position, int code );extern int bwb_getcnd( char *lb, char *lhs, char *rhs, char *op, int *n );extern int bwb_getlhs( char *lb, char *lhs, int *n );extern int bwb_getop( char *lb, char *op, int *n );extern int bwb_getrhs( char *lb, char *rhs, int *n );extern int bwb_evalcnd( char *lhs, char *rhs, char *op );extern int bwb_isstr( char *b );extern int eval_int( int l, int r, char *op );extern int eval_sng( float l, float r, char *op );extern int eval_dbl( double l, double r, char *op );extern struct exp_ese *bwb_exp( char *expression, int assignment, int *position );extern int exp_getvfname( char *source, char *destination );extern int exp_operation( int entry_level );extern int inc_esc( void );extern int dec_esc( void );extern int fnc_init( int task );extern struct bwb_function *fnc_find( char *buffer );extern struct bwb_line *bwb_def( struct bwb_line *l );extern int bwb_getargs( char *buffer );extern int bwb_stripcr( char *s );extern int bwb_numseq( char *buffer, int *start, int *end );extern int bwb_freeline( struct bwb_line *l );extern struct bwb_line *bwb_print( struct bwb_line *l );extern int bwb_xprint( struct bwb_line *l, FILE *f );extern int bwb_eltype( char *l_buffer, int p );extern int var_init( int task );extern int fslt_init( int task );extern int var_delcvars( void );extern struct bwb_variable *var_new( char *name );extern struct bwb_variable *var_islocal( char *buffer );extern int bwb_strel( char *lb, char *sb, int *n );extern struct bwb_variable *bwb_numel( char *lb, int *n );extern int bwb_const( char *lb, char *sb, int *n );extern int bwb_getvarname( char *lb, char *sb, int *n );extern struct bwb_variable *var_find( char *buffer );extern int bwb_isvar( char *buffer );extern struct bwb_line *bwb_input( struct bwb_line *l );extern int inp_adv( char *b, int *c );extern int var_make( struct bwb_variable *v, int type );extern bstring *var_getsval( struct bwb_variable *nvar );extern bstring *var_findsval( struct bwb_variable *v, int *pp );extern bstring *exp_getsval( struct exp_ese *e );extern int dim_getparams( char *buffer, int *pos, int *n_params, int **pp );extern int adv_element( char *buffer, int *pos, char *element );extern int adv_ws( char *buffer, int *pos );#if MULTISEG_LINESextern int adv_eos( char *buffer, int *pos );#endifextern int line_start( char *buffer, int *pos, int *lnpos, int *lnum,   int *cmdpos, int *cmdnum, int *startpos );extern int is_cmd( char *buffer, int *cmdnum );extern int is_let( char *buffer, int *cmdnum );extern int is_eol( char *buffer, int *position );extern int is_numconst( char *buffer );extern int is_label( char *buffer );extern struct bwb_line * find_label( char *buffer );extern struct bwb_line *find_loop( struct bwb_line *l );extern int int_qmdstr( char *buffer_a, char *buffer_b );extern struct bwb_line * cnd_xpline( struct bwb_line *l, char *buffer );extern int scan_element( char *buffer, int *pos, char *element );extern int prn_precision( struct bwb_variable *v );extern int * prn_getcol( FILE *f );extern int prn_getwidth( FILE *f );extern int prn_xprintf( FILE *f, char *buffer );extern int prn_xxprintf( FILE *f, char *buffer ); /* JBV */extern int bwb_strtoupper( char *buffer );extern int getcmdnum( char *cmdstr );extern int str_btoc( char *buffer, bstring *s );extern int str_btob( bstring *d, bstring *s );extern int str_ctob( bstring *s, char *buffer );extern int str_cmp( bstring *s, bstring *t );extern char * str_cat( bstring *s, bstring *t );extern int exp_findop( char *expression );extern int exp_isop( char *expression );extern int exp_isfn( char *expression );extern int exp_isufn( char *expression );extern int exp_isnc( char *expression );extern int exp_isvn( char *expression );extern int exp_iscmd( char *expression );extern int exp_paren( char *expression );extern int exp_strconst( char *expression );extern int exp_numconst( char *expression );extern int exp_function( char *expression );extern int exp_ufnc( char *expression );extern int exp_variable( char *expression );extern int exp_validarg( char *expression );extern int ln_asbuf( struct bwb_line *l, char *s );extern int xputc( FILE *f, char c );extern int bwx_signon( void );extern int bwx_message( char *m );extern int bwx_putc( char c );extern int bwx_errmes( char *m );extern int bwx_input( char *prompt, char *buffer );extern void bwx_terminate( void );#if COMMAND_SHELLextern int bwx_shell( struct bwb_line *l );#endifint bwb_scan( void );struct bwb_line *bwb_call( struct bwb_line *l );struct bwb_line *bwb_sub( struct bwb_line *l );struct bwb_line *bwb_endsub( struct bwb_line *l );struct bwb_line *bwb_endfnc( struct bwb_line *l );struct bwb_line *bwb_function( struct bwb_line *l );extern bnumber var_getnval( struct bwb_variable *nvar );extern bnumber *var_findnval( struct bwb_variable *v, int *pp );extern bnumber exp_getnval( struct exp_ese *e );extern bnumber *exp_findnval( struct exp_ese *e );#if PARACTextern int bwb_newtask( int task_requested );#endif#if INTERACTIVEextern int bwb_interact( void );#endif#if DEBUGextern int bwb_debug( char *message );extern struct bwb_line *bwb_cmds( struct bwb_line *l );extern struct bwb_line *bwb_vars( struct bwb_line *l );extern struct bwb_line *bwb_fncs( struct bwb_line *l );#endif#ifdef ALLOW_RENUMextern struct bwb_line *bwb_renum( struct bwb_line *l );#endif#if UNIX_CMDS#if !HAVE_UNISTD /* Not needed if one has <unistd.h> (JBV) */extern int rmdir( char *path );extern int chdir( char *path );#endif#if !HAVE_SYSSTAT /* Not needed if one has <sys/stat.h> (JBV) */#if MKDIR_ONE_ARGextern int mkdir( char *path );#elseextern int mkdir( char *path, unsigned short permissions );#endif /* JBV */#endif#endif/* declarations of function commands */extern struct bwb_variable *fnc_null( int argc, struct bwb_variable *argv, int unique_id );#if COMPRESS_FUNCSextern struct bwb_variable *fnc_core( int argc, struct bwb_variable *argv, int unique_id );#elseextern struct bwb_variable *fnc_abs( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_atn( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_cos( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_log( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_sin( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_sqr( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_sgn( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_int( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_rnd( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_exp( int argc, struct bwb_variable *argv, int unique_id );extern struct bwb_variable *fnc_tan( int argc, struct bwb_variable *argv, int unique_id );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -