www.pudn.com > FUN_2V.rar > ucvm9.hpp


#ifndef UCVM9_HPP 
#define UCVM9_HPP 
//--------------------------------------------------------------------------- 
#define UCVM9_TYPE_CHR 1 
#define UCVM9_TYPE_STR 2 
 
#define UCVM9_TYPE_INT 4 
#define UCVM9_TYPE_FLT 8 
//--------------------------------------------------------------------------- 
#ifndef REAL_TYPE 
#define REAL_TYPE 
typedef double REAL; 
#endif//REAL_TYPE 
//--------------------------------------------------------------------------- 
struct T_VAR; 
struct T_DAT; 
struct T_FUN; 
struct T_INS;        
//--------------------------------------------------------------------------- 
typedef void *(* FUNC)(long, struct T_DAT *); 
//--------------------------------------------------------------------------- 
struct T_VAR 
{ 
    char *var_name; 
    char  var_type; 
    void *var_addr; 
}; 
 
struct T_DAT 
{ 
    char  dat_type; 
    void *dat_addr; 
    char *dat_free; 
}; 
 
struct T_FUN 
{ 
    char *fun_name; 
    char  fun_type; 
    FUNC  fun_addr; 
}; 
 
struct T_INS 
{ 
    char  ins_code; 
    void *ins_data; 
}; 
//--------------------------------------------------------------------------- 
class TUCVM9 
{ 
public: 
     TUCVM9(); 
    ~TUCVM9(); 
 
    int load_asm_file(char *file_name); 
    int save_ins_file(char *file_name); 
 
    int reg_var(char *var_name, int var_type, void *var_addr); 
    int reg_fun(char *fun_name, int fun_type, FUNC  fun_addr); 
 
    int cln_var(); 
    int cln_fun(); 
 
    int exe_fun(); 
 
protected: 
 
    T_VAR m_var_array[256]; 
    short m_var_count; 
 
    T_DAT m_dat_stack[256]; 
    short m_dat_point; 
 
    T_FUN m_fun_array[256]; 
    short m_fun_count; 
 
    T_INS m_ins_array[512]; 
    short m_ins_count; 
 
    void *search_fun(char *fun_name); 
    void *search_var(char *var_name); 
    void *search_lab(char *lab_name); 
    char *cclone_str(char *str_data); 
 
private: 
    T_DAT m_dat_lparame[1]; 
    T_DAT m_dat_rparame[1]; 
 
    void pop_rparame(); 
    void pop_lparame(); 
 
    void free_rparame(); 
    void free_lparame(); 
 
    void push_chr(char); 
    void push_int(long); 
    void push_flt(REAL); 
 
    char  rparame_to_chr(); 
    char  lparame_to_chr(); 
 
    long  rparame_to_int(); 
    long  lparame_to_int(); 
 
    REAL  rparame_to_flt(); 
    REAL  lparame_to_flt(); 
 
    char *rparame_to_str(); 
    char *lparame_to_str(); 
}; 
//--------------------------------------------------------------------------- 
#endif//UCVM9