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

📄 runnerline.h

📁 由一个古老的BASIC解释器改进而成, 保留了ANSI C固有的艺术美感.
💻 H
字号:
// runnerline.h

#ifndef RUNNERLINE_H_

#define RUNNERLINE_H_

#include "blassic.h"
#include "error.h"
#include "result.h"
#include "codeline.h"
#include "file.h"

#include <map>

class Runner;
class Program;

class RunnerLine {
public:
	RunnerLine (Runner & runner, CodeLine & line, Program & program) :
		pline (& line),
		runner (runner),
		program (program),
		fInElse (false)
	{ }
	void setline (CodeLine & line)
	{
		pline= & line;
		fInElse= false;
	}
	void execute ();
	inline BlLineNumber number () const { return pline->number (); }
	inline ProgramPos getposactual () const
	{
		return ProgramPos (pline->number (), actualchunk);
	}
private:
	//CodeLine & line;
	CodeLine * pline;
	BlChunk actualchunk;
	Runner & runner;
	Program & program;
	bool fInElse;
	CodeLine::Token token;
	BlCode codprev;

	typedef bool (RunnerLine::* do_func) (void);
	typedef std::map <BlCode, do_func> mapfunc_t;
	static const mapfunc_t mapfunc;
	static const mapfunc_t::const_iterator mapend;
	static mapfunc_t initmapfunc ();

	inline BlFile & getfile (BlChannel channel);

	//inline void gettoken () { token= line.gettoken (); }
	inline void gettoken () { pline->gettoken (token); }
	inline bool endsentence () { return token.isendsentence (); }
	inline void require_endsentence () const // throw (BlErrNo)
	{
		if (! token.isendsentence () )
			throw ErrSyntax;
	}
        #if 0 // Use macros instead to avoid strange errors on hp-ux.
        inline void requiretoken (BlCode code) const throw (BlErrNo);
        inline void expecttoken (BlCode code) throw (BlErrNo);
        #endif
	void getnextchunk ();

	void parenarg (BlResult & result);
	void getparenarg (BlResult & result);

	void valnumericfunc (double (* f) (double), BlResult & result);
	void valasc (BlResult & result);
	void vallen (BlResult & result);
	void valpeek (BlResult & result);
	void valpeek16 (BlResult & result);
	void valpeek32 (BlResult & result);
	void valprogramptr (BlResult & result);
	void valrnd (BlResult & result);
	void valint (BlResult & result);
	void valinstr (BlResult & result);
	void valusr (BlResult & result);
        void valval (BlResult & result);
	void valeof (BlResult & result);
	void valvarptr (BlResult & result);
	void valsgn (BlResult & result);
        void valcvi (BlResult & result);
        void valcvs (BlResult & result);
        void valcvd (BlResult & result);
        void valcvl (BlResult & result);
        void valmin (BlResult & result);
        void valmax (BlResult & result);

	void valmid_s (BlResult & result);
	void valleft_s (BlResult & result);
	void valright_s (BlResult & result);
	void valchr_s (BlResult & result);
	void valenviron_s (BlResult & result);
	void valstring_s (BlResult & result);
	void valosfamily_s (BlResult & result);
	void valosname_s (BlResult & result);
	void valhex_s (BlResult & result);
        void valspace_s (BlResult & result);
        void valupper_s (BlResult & result);
        void vallower_s (BlResult & result);
        void valstr_s (BlResult & result);
        void valoct_s (BlResult & result);
        void valbin_s (BlResult & result);
        void valinkey_s (BlResult & result);
	void valprogramarg_s (BlResult & result);
	void valdate_s (BlResult & result);
	void valtime_s (BlResult & result);
	void valinput_s (BlResult & result);
        void valmki_s (BlResult & result);
        void valmks_s (BlResult & result);
        void valmkd_s (BlResult & result);
        void valmkl_s (BlResult & result);
        void valtrim (BlResult & result);

        void valfn (BlResult & result);

	void valsubindex (const std::string & varname, BlResult & result);
	void valbase (BlResult & result);
	void valparen (BlResult & result);
	void valexponent (BlResult & result);
	void valmod (BlResult & result);
	void valunary (BlResult & result);
	void valmuldiv (BlResult & result);
	void valplusmin (BlResult & result);
	void valcomp (BlResult & result);
	void valorand (BlResult & result);

	void eval (BlResult & result);
	void expect (BlResult & result);

	inline BlNumber evalnum ();
	inline BlNumber expectnum ();
	inline BlInteger evalinteger ();
	inline BlInteger expectinteger ();
	inline BlChannel evalchannel ();
	inline BlChannel expectchannel ();
	inline std::string evalstring ();
	inline std::string expectstring ();
	BlLineNumber evallinenumber ();
	void evallinerange (BlLineNumber & blnBeg, BlLineNumber & blnEnd);
        Dimension expectdims ();

	void errorifparam ();
        void gosub_line (BlLineNumber dest);

	void getinkparams ();
	void getdrawargs (BlInteger & y);
	void getdrawargs (BlInteger & x, BlInteger & y);

	void print_using (BlFile & out);

	bool do_empty_sentence ();
	bool do_endline ();
	bool do_number ();
	bool do_end ();
	bool do_list ();
	bool do_rem ();
	bool do_load ();
	bool do_save ();
	bool do_new ();
	bool do_exit ();
	bool do_run ();
	bool do_print ();
	bool do_for ();
	bool do_next ();
	bool do_if ();
	bool do_tron ();
	bool do_troff ();
	void letsubindex (const std::string &varname);
	bool do_let ();
	bool do_goto ();
	bool do_stop ();
	bool do_cont ();
	bool do_clear ();
	bool do_gosub ();
	bool do_return ();
	bool do_poke ();
	bool do_read ();
	bool do_data ();
	bool do_restore ();
	bool do_input ();
	void do_line_input ();
	bool do_line ();
	bool do_randomize ();
	bool do_auto ();
	bool do_dim ();
	bool do_system ();
        bool do_on ();
        bool do_error ();
        bool do_open ();
        bool do_close ();
	bool do_locate ();
	bool do_cls ();
        bool do_write ();
	bool do_mode ();
	bool do_move ();
	bool do_color ();
        bool do_get ();
	bool do_label ();
	bool do_delimiter ();
	bool do_repeat ();
	bool do_until ();
        bool do_while ();
        bool do_wend ();
	bool do_plot ();
        bool do_resume ();
	bool do_delete ();
	bool do_local ();
	bool do_put ();
        bool do_field ();
        bool do_lset ();
	bool do_socket ();
	bool do_mid_s ();
	bool do_draw ();
	bool do_def_fn ();
        bool do_def ();
        bool do_fn ();
        bool do_programarg_s ();
        bool do_erase ();
        bool do_swap ();
        bool do_symbol ();
        bool do_zone ();
        bool do_pop ();
	bool do_name ();
	bool do_kill ();
	bool do_files ();
	bool do_paper ();
	bool do_pen ();
	bool do_shell ();
	bool do_merge ();
	bool do_chdir ();
	bool do_mkdir ();
	bool do_rmdir ();
	bool do_synchronize ();
	bool do_pause ();
	bool do_chain ();
	bool do_environ ();
	bool do_edit ();
	bool do_drawr ();
	bool do_plotr ();
	bool do_mover ();
	bool do_poke16 ();
	bool do_poke32 ();
	bool do_renum ();
	bool do_circle ();
	bool do_mask ();
	bool do_window ();
	void do_graphics_pen ();
	void do_graphics_paper ();
	void do_graphics_cls ();
	bool do_graphics ();
};

#endif

// Fin de runnerline.h

⌨️ 快捷键说明

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