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

📄 simplecalc.c

📁 uclinux 下的一个计算器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    switch (action) {        case NUM0:            if (position == 0) {                updateDisplay();                break;            }        case NUM1 ... NUM9:            emtk_label_hide(exponent_id);            insertChar(action - NUM0 + '0');            current_register->value = getDouble();            updateDisplay();            break;        case ADD:            temp = current_register->value;            if (stack_length(stack) > 1) {                setDisplay(evaluate());                updateDisplay();            }            current_register->op = OP_ADD;            current_register = register_new();            current_register->value = temp;            stack_push(stack, current_register);            clearBuffer();            break;        case SUB:            temp = current_register->value;            if (stack_length(stack) > 1) {                setDisplay(evaluate());                updateDisplay();            }            current_register->op = OP_SUB;            current_register = register_new();            current_register->value = temp;            stack_push(stack, current_register);            clearBuffer();            break;        case MUL:            current_register->op = OP_MUL;            current_register = register_new();            stack_push(stack, current_register);            clearBuffer();            break;        case DIV:            current_register->op = OP_DIV;            current_register = register_new();            stack_push(stack, current_register);            clearBuffer();            break;        case SQRT:            current_register->value = sqrt(current_register->value);            setDisplay(current_register->value);            updateDisplay();            clearBuffer();            break;        case SIGN:            current_register->value *= -1;            if (position > 0) {                if (current_register->value >= 0)                    position--;                else                    position++;            } else {                position = 1;            }                            setDisplay(current_register->value);            updateDisplay();            break;        case PERCENT:            current_register->value = current_register->value / 100;            setDisplay(current_register->value);            updateDisplay();            clearBuffer();            break;        case EQ:            setDisplay(evaluate());            updateDisplay();            clearBuffer();            position = 0;            break;        case ALLCLEAR:            all_clear();            clearBuffer();            updateDisplay();            break;        case CLEAR:            current_register->value = 0;            clearBuffer();            updateDisplay();            break;        case DOT:            if (!decimal) {                if (position == 0) {                    insertChar('0');                }                insertChar('.');                decimal = TRUE;            }            updateDisplay();            break;        case MEMADD:            memory += current_register->value;            if (memory != 0.0)                emtk_label_show(memory_id);            else                emtk_label_hide(memory_id);                        break;        case MEMSUB:            memory -= current_register->value;            if (memory != 0.0)                emtk_label_show(memory_id);            else                emtk_label_hide(memory_id);                        break;        case MEMCLEAR:            memory = 0.0;            emtk_label_hide(memory_id);            break;        case MEMRELEASE:            current_register->value = memory;            setDisplay(memory);            updateDisplay();            break;        case BACK:            if (position > 1) {                buffer[--position] = '\0';            } else if (position == 1) {                position--;                buffer[0] = '0';                buffer[1] = '.';            }            updateDisplay();            current_register->value = getDouble();            break;    }}static void drawWnd(int wid, WindowRect *rect) {    int i;        int ascent, descent;    int font, small_fn, width;        font        = lookupFont("en_US", LARGE_FONT);    small_fn    = lookupFont("en_US", SMALL_FONT);        for (i = 0; buttondefs[i].on != NULL; i++) {        #ifdef TEXT_ONLY_BUTTON        buttons[i] = emtk_button_new(wid,             COL(buttondefs[i].col), ROW(buttondefs[i].row),             buttondefs[i].w, buttondefs[i].h,            font, buttondefs[i].str, buttondefs[i].key, btnHandler, (void *) buttondefs[i].action);                    emtk_button_set_border_width(buttons[i], 1);#else        buttons[i] = emtk_button_new(wid,             COL(buttondefs[i].col), ROW(buttondefs[i].row),             buttondefs[i].w, buttondefs[i].h,            font, "", buttondefs[i].key, btnHandler, (void *) buttondefs[i].action);        emtk_button_set_pixmap(buttons[i], buttondefs[i].on, buttondefs[i].off, FALSE);                emtk_button_set_border_width(buttons[i], 0);#endif        emtk_window_add_object(wid, buttons[i]);    }        emtk_get_font_height(font, &ascent, &descent);        display_id  = emtk_label_new(wid, 20, ascent+descent+2, font, 									FALSE, NULL_DISPLAY);        width = emtk_string_display_length("8888888888888.", font) + 23;        exponent_id = emtk_label_new(wid, width, 18, small_fn, FALSE, "");    memory_id   = emtk_label_new(wid, 5,     18, small_fn, FALSE, "M");        emtk_window_add_object(wid, display_id);    emtk_window_add_object(wid, exponent_id);    emtk_window_add_object(wid, memory_id);    emtk_label_hide(memory_id);    }#ifdef MERGE_EMTK_LAUNCHERextern void launcher_app_close_callback();#endifstatic void closeHandler(int window, void *data) {	int *feedback = (int *) data;	*feedback = EMTK_APP_WINDOW_DESTROY_WITH_EMTK_CLOSE;    stack_free(stack);	    //emtk_app_close();    #ifdef MERGE_EMTK_LAUNCHER	emtk_app_close_window(app_window);	launcher_app_close_callback();#else	//emtk_app_close();#endif /* MERGE_EMTK_LAUNCHER */}static void init() {    app_window = emtk_app_window_new(_("Calculator"), FONT2, drawWnd, closeHandler, NULL);        position = 0;    memory = 0.0;    stack = stack_new();    current_register = register_new();    stack_push(stack, current_register);}#ifdef LAUNCHER_SUPPORTstatic void simplecalc_desktop_msg(MSG *mesg, gpointer user_data) {    g_return_if_fail(mesg != NULL);        if (mesg->type == MSG_TYPE_COMMAND && mesg->subtype == MSG_COMMAND_CLOSE) {        emtk_app_close_window(app_window);    }}#endif /* LAUNCHER_SUPPORT */#ifdef MERGE_EMTK_LAUNCHERint simpcalc_main(int argc, char **argv)#elseint main(int argc, char **argv)#endif /* MERGE_EMTK_LAUNCHER */{#if !defined(MERGE_EMTK_LAUNCHER)#ifdef LAUNCHER_SUPPORT    DESKTOP_CHANNEL channel;        if (!desktop_channel_listen_connect(&channel, simplecalc_desktop_msg, NULL)) {        printf("Error opening listening channel\n");        return 1;    }#endif /* LAUNCHER_SUPPORT */    init_font_table(NULL);    i18n_init();        emtk_app_init(&argc, &argv);    emtk_app_root(APP_X, APP_Y, APP_W, APP_H);#endif /* !defined(MERGE_EMTK_LAUNCHER) */        init();    #if !defined(MERGE_EMTK_LAUNCHER)    emtk_app_run();        unload_font_table();    #ifdef LAUNCHER_SUPPORT    desktop_channel_listen_disconnect(&channel);#endif /* LAUNCHER_SUPPORT */#endif /* !defined(MERGE_EMTK_LAUNCHER) */        return 0;    }

⌨️ 快捷键说明

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