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

📄 ucvm9.cpp

📁 绘制一元函数曲线的工具 输入C语言语法的函数公式, 即可绘制函数的二维曲线 采用内置编译器和虚拟机(这是调整OK的版本)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#ifndef UCVM9_CPP
#define UCVM9_CPP
//---------------------------------------------------------------------------
TUCVM9::TUCVM9()
{
    m_var_count = 0;
    m_fun_count = 0;
    m_ins_count = 0;
}

TUCVM9::~TUCVM9()
{
    cln_var();
    cln_fun();
}
//---------------------------------------------------------------------------
int TUCVM9::load_asm_file(char *file_name)
{
    FILE *fp;

    if((fp = fopen(file_name, "r+")) != NULL)
    {
        char buf_a[1024];
        char str_a[1024];
        char str_b[1024];

        int i;

        for(i = 0; i < 512; i ++)
        {
            if(fgets(buf_a, 1022, fp) == NULL)
                break;

            str_a[0] = 0;
            str_b[0] = 0;

            sscanf(buf_a, "%s %s", str_a, str_b);

            if(strcmp("push_c", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x01;
                m_ins_array[i].ins_data = new char[1];
                *(char *)(m_ins_array[i].ins_data) = str_b[0];
            }
            else
            if(strcmp("push_i", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x02;
                m_ins_array[i].ins_data = new long[1];
                *(long *)(m_ins_array[i].ins_data) = atoi(str_b);
            }
            else
            if(strcmp("push_r", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x03;
                m_ins_array[i].ins_data = new REAL[1];
                *(REAL *)(m_ins_array[i].ins_data) = atof(str_b);
            }
            else
            if(strcmp("push_s", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x04;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("push_v", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x05;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("pop_lo", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x06;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("add_nb", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x07;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("sub_nb", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x08;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("mul_nb", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x09;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("div_nb", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x0a;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("rem_nb", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x0b;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("umi_nb", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x0c;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("and_bt", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x0d;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("xor_bt", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x0e;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("oor_bt", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x0f;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("shl_bt", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x10;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("shr_bt", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x11;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("not_bt", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x12;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("and_lg", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x13;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("oor_lg", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x14;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("not_lg", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x15;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("assign", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x16;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("add_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x17;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("sub_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x18;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("mul_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x19;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("div_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x1a;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("rem_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x1b;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("and_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x1c;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("xor_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x1d;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("oor_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x1e;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("shl_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x1f;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("shr_as", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x20;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("cmp_ne", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x21;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("cmp_eq", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x22;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("cmp_le", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x23;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("cmp_ge", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x24;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("cmp_ll", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x25;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("cmp_gg", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x26;
                m_ins_array[i].ins_data = 0;
            }
            else
            if(strcmp("jmp_ez", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x27;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_nz", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x28;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_to", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x29;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_ne", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x2a;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_eq", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x2b;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_le", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x2c;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_ge", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x2d;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_ll", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x2e;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("jmp_gg", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x2f;
                m_ins_array[i].ins_data = cclone_str(str_b);
            }
            else
            if(strcmp("inc_af", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x30;
                m_ins_array[i].ins_data = search_var(str_b);

                if(m_ins_array[i].ins_data == NULL)
                    return(-2);
            }
            else
            if(strcmp("inc_bf", str_a) == 0)
            {
                m_ins_array[i].ins_code = 0x31;
                m_ins_array[i].ins_data = search_var(str_b);

⌨️ 快捷键说明

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