亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.c

?? Linux環(huán)境下手寫輸入程序。手寫輸入
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
        for (; *profile_end && !is_space(*profile_end) && *profile_end != '\n';             profile_end++);        /* If we run out of buffer space, read a new chunk */        if (!*profile_end) {                unsigned int token_size;                gsize bytes_read;                /* If we are out of space and we are not on the first or                   the last byte, then we have run out of things to read */                if (profile_end > profile_buf &&                    profile_end < profile_buf + sizeof (profile_buf) - 1) {                        profile_swap = 0;                        return "";                }                /* Move what we have of the token to the start of the buffer,                   fill the rest of the buffer with new data and start reading                   from the beginning */                token_size = profile_end - token;                if (token_size >= sizeof (profile_buf) - 1) {                        g_warning("Oversize token in profile");                        return "";                }                memmove(profile_buf, token, token_size);                g_io_channel_read_chars(channel, profile_buf + token_size,                                        sizeof (profile_buf) - token_size - 1,                                        &bytes_read, &error);                if (error) {                        g_warning("Read error: %s", error->message);                        return "";                }                if (bytes_read < 1) {                        profile_swap = 0;                        return "";                }                profile_end = profile_buf;                profile_buf[token_size + bytes_read] = 0;                goto seek_profile_end;        }        profile_swap = *profile_end;        *profile_end = 0;        return token;}int profile_read_next(void)/* Skip to the next line   FIXME should skip multiple blank lines */{        const char *s;        do {                s = profile_read();        } while (s[0]);        if (profile_swap == '\n') {                profile_swap = ' ';                return TRUE;        }        return FALSE;}int profile_write(const char *str)/* Write a string to the open profile */{        GError *error = NULL;        gsize bytes_written;        if (profile_read_only || !str)                return 0;        if (!channel)                return 1;        g_io_channel_write_chars(channel, str, strlen(str), &bytes_written,                                 &error);        if (error) {                g_warning("Write error: %s", error->message);                return 1;        }        return 0;}int profile_sync_int(int *var)/* Read or write an integer variable depending on the profile mode */{        if (profile_read_only) {                const char *s;                int n;                s = profile_read();                if (s[0]) {                        n = atoi(s);                        if (n || (s[0] == '0' && !s[1])) {                                *var = n;                                return 0;                        }                }        } else                return profile_write(va(" %d", *var));        return 1;}int profile_sync_short(short *var)/* Read or write a short integer variable depending on the profile mode */{        int value = *var;        if (profile_sync_int(&value))                return 1;        if (!profile_read_only)                return 0;        *var = (short)value;        return 0;}void version_read(void){        int version;        version = atoi(profile_read());        if (version != 0)                g_warning("Loading a profile with incompatible version %d "                          "(expected %d)", version, PROFILE_VERSION);}/*        Main and signal handling*/#define NUM_PROFILE_CMDS (sizeof (profile_cmds) / sizeof (*profile_cmds))int profile_line, log_level = 4;static char *log_filename = NULL;static FILE *log_file = NULL;/* Profile commands table */static struct {        const char *name;        void (*read_func)(void);        void (*write_func)(void);} profile_cmds[] = {        { "version",      version_read,      NULL               },        { "window",       window_sync,       window_sync        },        { "options",      options_sync,      options_sync       },        { "recognize",    recognize_sync,    recognize_sync     },        { "blocks",       blocks_sync,       blocks_sync        },        { "bad_keycodes", bad_keycodes_read, bad_keycodes_write },        { "sample",       sample_read,       samples_write      },};/* Command line arguments */static GOptionEntry command_line_opts[] = {        { "log-level", 0, 0, G_OPTION_ARG_INT, &log_level,          "Log threshold (0=silent, 7=debug)", "4" },        { "log-file", 0, 0, G_OPTION_ARG_STRING, &log_filename,          "Log file to use instead of stdout", PACKAGE ".log" },        { "xid", 0, 0, G_OPTION_ARG_NONE, &window_embedded,          "Embed the main window (XEMBED)", NULL },        { "show-window", 0, 0, G_OPTION_ARG_NONE, &window_force_show,          "Show the main window", NULL },        { "hide-window", 0, 0, G_OPTION_ARG_NONE, &window_force_hide,          "Don't show the main window", NULL },        { "window-x", 0, 0, G_OPTION_ARG_INT, &window_force_x,          "Horizontal window position", "512" },        { "window-y", 0, 0, G_OPTION_ARG_INT, &window_force_y,          "Vertical window position", "768" },        { "dock-window", 0, 0, G_OPTION_ARG_INT, &window_force_docked,          "Docking (0=off, 1=top, 2=bottom)", "0" },        { "window-struts", 0, 0, G_OPTION_ARG_NONE, &window_struts,          "Reserve space when docking, see manpage", NULL },        { "keyboard-only", 0, 0, G_OPTION_ARG_NONE, &keyboard_only,          "Show on-screen keyboard only", NULL },        { "profile", 0, 0, G_OPTION_ARG_STRING, &force_profile,          "Full path to profile file to load", "profile" },        { "read-only", 0, 0, G_OPTION_ARG_NONE, &force_read_only,          "Do not save changes to the profile", NULL },        { "disable-overwrite", 0, 0, G_OPTION_ARG_NONE, &key_disable_overwrite,          "Do not modify the keymap", NULL },        /* Sentinel */        { NULL, 0, 0, 0, NULL, NULL, NULL }};/* If any of these things happen, try to save and exit cleanly -- gdb is not   affected by any of these signals being caught */static int catch_signals[] = {	SIGSEGV,	SIGHUP,	SIGINT,	SIGTERM,	SIGQUIT,	SIGALRM,        -1};void cleanup(void){        static int finished;        /* Run once */        if (finished) {                g_debug("Cleanup already called");                return;        }        finished = TRUE;        g_message("Cleaning up");        /* Explicit cleanup */        cell_widget_cleanup();        window_cleanup();        key_event_cleanup();        if (!window_embedded)                single_instance_cleanup();        /* Save profile */        if (!window_embedded && profile_open_write()) {                unsigned int i;                profile_write(va("version %d\n", PROFILE_VERSION));                for (i = 0; i < NUM_PROFILE_CMDS; i++)                        if (profile_cmds[i].write_func)                                profile_cmds[i].write_func();                if (profile_close())                        g_debug("Profile saved");        }        /* Close log file */        if (log_file)                fclose(log_file);}static void catch_sigterm(int sig)/* Terminated by shutdown */{        g_warning("Caught signal %d, cleaning up", sig);        cleanup();        exit(1);}static void hook_signals(void)/* Setup signal catchers */{        sigset_t sigset;        int *ps;        sigemptyset(&sigset);        ps = catch_signals;        while (*ps != -1) {                signal(*ps, catch_sigterm);                sigaddset(&sigset, *(ps++));        }        if (sigprocmask(SIG_UNBLOCK, &sigset, NULL) == -1)                log_errno("Failed to set signal blocking mask");}void log_print(const char *format, ...)/* Print to the log file or stderr */{        FILE *file;        va_list va;        file = log_file;        if (!file) {                if (window_embedded)                        return;                file = stderr;        }        va_start(va, format);        vfprintf(file, format, va);        va_end(va);}void log_func(const gchar *domain, GLogLevelFlags level, const gchar *message){        const char *prefix = "", *postfix = "\n", *pmsg;        if (level > log_level)                goto skip_print;        /* Do not print empty messages */        for (pmsg = message; *pmsg <= ' '; pmsg++)                if (!*pmsg)                        goto skip_print;        /* Format the message */        switch (level & G_LOG_LEVEL_MASK) {        case G_LOG_LEVEL_DEBUG:                prefix = "| ";                break;        case G_LOG_LEVEL_INFO:        case G_LOG_LEVEL_MESSAGE:                if (log_level > G_LOG_LEVEL_INFO) {                        prefix = "\n";                        postfix = ":\n";                }                break;        case G_LOG_LEVEL_WARNING:                if (log_level > G_LOG_LEVEL_INFO)                        prefix = "* ";                else if (log_level > G_LOG_LEVEL_WARNING)                        prefix = "WARNING: ";                else                        prefix = PACKAGE ": ";                break;        case G_LOG_LEVEL_CRITICAL:        case G_LOG_LEVEL_ERROR:                if (log_level > G_LOG_LEVEL_INFO)                        prefix = "* ERROR! ";                else if (log_level > G_LOG_LEVEL_WARNING)                        prefix = "ERROR: ";                else                        prefix = PACKAGE ": ERROR! ";                break;        default:                break;        }        if (domain)                log_print("%s[%s] %s%s", prefix, domain, message, postfix);        else                log_print("%s%s%s", prefix, message, postfix);skip_print:        if (level & G_LOG_FLAG_FATAL || level & G_LOG_LEVEL_ERROR)                abort();}void trace_full(const char *file, const char *func, const char *format, ...){        char buf[256];        va_list va;        if (LOG_LEVEL_TRACE > log_level)                return;        va_start(va, format);        vsnprintf(buf, sizeof(buf), format, va);        va_end(va);        log_print(": %s:%s() %s\n", file, func, buf);}void log_errno(const char *string){        log_func(NULL, G_LOG_LEVEL_WARNING,                 va("%s: %s", string, strerror(errno)));}static void second_instance(char *str){        g_debug("Received '%s' from fifo", str);        if (str[0] == '0' || str[0] == 'H' || str[0] == 'h')                window_hide();        else if (str[0] == '1' || str[0] == 'S' || str[0] == 's')                window_show();        else if (str[0] == 'T' || str[0] == 't')                window_toggle();}int main(int argc, char *argv[]){        GError *error;        const char *token;        /* Initialize GTK+ */        error = NULL;        if (!gtk_init_with_args(&argc, &argv,                                "grid-entry handwriting input panel",                                command_line_opts, NULL, &error))                return 0;        /* Setup log handler */        log_level = 1 << log_level;        g_log_set_handler(NULL, -1, (GLogFunc)log_func, NULL);        /* Try to open the log-file */        if (log_filename) {                log_file = fopen(log_filename, "w");                if (!log_file)                        g_warning("Failed to open log-file '%s'", log_filename);        }        /* See if the program is already running */        g_message("Starting " PACKAGE_STRING);        create_user_dir();        if (!window_embedded &&            single_instance_init((SingleInstanceFunc)second_instance,                                 window_force_hide ? "0" : "1")) {                gdk_notify_startup_complete();                g_message(PACKAGE_NAME " already running, quitting");                return 0;        }#ifdef HAVE_GNOME        /* Initialize GNOME for the Help button */        gnome_program_init(PACKAGE, VERSION, LIBGNOME_MODULE,                           argc, argv, NULL);#endif        /* Component initilization */        if (key_event_init()) {                GtkWidget *dialog;                dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,                                                GTK_MESSAGE_ERROR,                                                GTK_BUTTONS_OK,                                                "Xtest extension not "                                                "supported");                gtk_window_set_title(GTK_WINDOW(dialog), "Initilization Error");                gtk_message_dialog_format_secondary_text(                        GTK_MESSAGE_DIALOG(dialog),                        "Your Xserver does not support the Xtest extension. "                        PACKAGE_NAME " cannot generate keystrokes without it.");                gtk_dialog_run(GTK_DIALOG(dialog));                gtk_widget_destroy(dialog);        }        recognize_init();        /* Read profile */        if (profile_open_read()) {                profile_line = 1;                g_message("Parsing profile");                do {                        unsigned int i;                        token = profile_read();                        if (!token[0]) {                                if (profile_read_next())                                        continue;                                break;                        }                        for (i = 0; i < NUM_PROFILE_CMDS; i++)                                if (!g_ascii_strcasecmp(profile_cmds[i].name,                                                        token)) {                                        if (profile_cmds[i].read_func)                                                profile_cmds[i].read_func();                                        break;                                }                        if (i == NUM_PROFILE_CMDS)                                g_warning("Unrecognized profile command '%s'",                                          token);                        profile_line++;                } while (profile_read_next());                profile_close();                g_debug("Parsed %d commands", profile_line - 1);        }        /* After loading samples and block enabled/disabled information,           update the samples */        update_enabled_samples();        /* Ensure that if there is a crash, data is saved properly */        hook_signals();        atexit(cleanup);        /* Initialize the interface */        g_message("Running interface");        window_create();        /* Startup notification is sent when the first window shows but in if           the window was closed during last start, it won't show at all so           we need to do this manually */        gdk_notify_startup_complete();        /* Run the interface */        if (!samples_loaded() && !keyboard_only)                startup_splash_show();        gtk_main();        cleanup();        /* Session statistics */        if (characters && inputs && log_level >= G_LOG_LEVEL_DEBUG) {                g_message("Session statistics --");                g_debug("Average strength: %d%%", strength_sum / inputs);                g_debug("Rewrites: %d out of %d inputs (%d%%)",                        rewrites, inputs, rewrites * 100 / inputs);                g_debug("Corrections: %d out of %d characters (%d%%)",                        corrections, characters,                        corrections * 100 / characters);                g_debug("KeyCodes overwrites: %d out of %d uses (%d%%)",                        key_overwrites, key_overwrites + key_recycles,                        key_recycles + key_overwrites ? key_overwrites * 100 /                        (key_recycles + key_overwrites) : 0);        }        return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩综合色| 亚洲国产精品99久久久久久久久 | 日韩国产欧美在线播放| 欧美福利电影网| 蜜桃一区二区三区在线观看| 精品不卡在线视频| 成人久久久精品乱码一区二区三区| 中文字幕乱码日本亚洲一区二区| a美女胸又www黄视频久久| 亚洲女子a中天字幕| 欧美日韩激情一区二区| 久久精品国产精品亚洲红杏 | 亚洲一区欧美一区| 88在线观看91蜜桃国自产| 精品一二三四在线| 国产精品久久精品日日| 欧美日韩一卡二卡三卡 | 国产91丝袜在线播放0| 中文字幕在线免费不卡| 欧美日韩黄色一区二区| 国内成人精品2018免费看| 国产精品女同互慰在线看| 欧美在线免费播放| 麻豆精品久久久| 国产精品无遮挡| 欧美精品在欧美一区二区少妇| 精品无人码麻豆乱码1区2区 | 亚洲国产日韩综合久久精品| 日韩三级高清在线| 不卡一区在线观看| 香港成人在线视频| 国产欧美日韩在线看| 欧美怡红院视频| 国产麻豆精品theporn| 亚洲愉拍自拍另类高清精品| 欧美精品一区二区三区在线播放| 91免费观看视频在线| 日韩电影在线免费看| 国产精品蜜臀av| 日韩一区二区三区高清免费看看| 成人性生交大片免费看中文网站| 亚洲电影一级黄| 国产欧美精品在线观看| 欧美精品自拍偷拍动漫精品| 成人一级片在线观看| 日韩av不卡一区二区| 国产精品伦一区| 日韩视频在线你懂得| 99久久精品国产一区| 久久精品国产一区二区三| 亚洲欧美日韩国产另类专区 | 久久人人爽爽爽人久久久| 色婷婷av一区| 国产69精品一区二区亚洲孕妇| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕久久午夜不卡| 91精品国产综合久久精品性色| 91同城在线观看| 国产一区二区美女| 午夜精品一区在线观看| 18成人在线观看| 国产亚洲污的网站| 欧美一区二区视频在线观看 | 欧美剧情片在线观看| 99热99精品| 国产美女精品人人做人人爽| 日韩av中文字幕一区二区| 亚洲三级在线看| 日本一二三四高清不卡| 日韩欧美的一区| 欧美图区在线视频| av激情亚洲男人天堂| 国产一区91精品张津瑜| 久久精品国产精品亚洲红杏| 亚洲一本大道在线| 亚洲视频网在线直播| 久久久不卡网国产精品一区| 日韩欧美你懂的| 在线播放/欧美激情| 欧美性大战久久| 91麻豆蜜桃一区二区三区| 粉嫩av亚洲一区二区图片| 精品一区二区三区视频在线观看 | 亚洲精选免费视频| 国产精品久久久久久久久久免费看 | 91福利视频网站| www.成人在线| 成人在线视频一区| 大胆亚洲人体视频| 国产高清久久久| 国产一区二区三区久久久| 久久精品国产成人一区二区三区| 天天综合网 天天综合色| 亚洲一级不卡视频| 一区二区久久久| 亚洲精品视频免费看| 亚洲日本青草视频在线怡红院| 国产精品色婷婷久久58| 国产精品美女久久久久久久久| 久久久亚洲精品石原莉奈| 久久―日本道色综合久久| 久久久久97国产精华液好用吗| 精品美女一区二区| 欧美xxxxx牲另类人与| 日韩亚洲国产中文字幕欧美| 91精品国产色综合久久不卡蜜臀| 91精品国产综合久久久久久久| 91精品久久久久久久久99蜜臂| 欧美日韩高清一区二区三区| 911精品产国品一二三产区| 欧美精品精品一区| 欧美精品免费视频| 日韩一区二区中文字幕| 精品国产亚洲一区二区三区在线观看| 欧美一级在线免费| 欧美精品一区二区三区一线天视频 | 久久国产夜色精品鲁鲁99| 久久精品99国产精品| 韩国成人福利片在线播放| 国产麻豆欧美日韩一区| 懂色一区二区三区免费观看 | 欧美中文一区二区三区| 欧美日韩一二三区| 日韩一区二区三区在线观看| 26uuu久久天堂性欧美| 国产欧美日韩视频在线观看| 国产精品美女久久福利网站| 亚洲精品伦理在线| 天天综合网天天综合色| 久久精品av麻豆的观看方式| 国产成人免费网站| 91丝袜美腿高跟国产极品老师| 日本精品裸体写真集在线观看| 欧美日韩一卡二卡三卡| 日韩精品一区二区在线观看| 国产日韩精品一区二区三区| 日韩码欧中文字| 午夜精品久久久久久不卡8050| 激情深爱一区二区| av成人老司机| 欧美揉bbbbb揉bbbbb| 欧美成人欧美edvon| 国产精品视频线看| 亚洲成人免费观看| 国产一区二区在线影院| gogo大胆日本视频一区| 欧美日韩午夜精品| 精品国产91久久久久久久妲己| 国产精品区一区二区三区| 亚洲影视在线观看| 久久se精品一区二区| 成人短视频下载| 欧美日韩在线一区二区| 日韩欧美中文字幕制服| 中文一区在线播放| 午夜激情一区二区| 国产成人精品影院| 欧美日韩国产综合久久| 久久久精品影视| 亚洲午夜在线电影| 国产一区二区三区不卡在线观看| 色香蕉久久蜜桃| 精品国产免费一区二区三区四区 | 国产91对白在线观看九色| 在线观看视频一区| 精品国产乱码久久久久久闺蜜| 国产精品成人免费 | 日韩vs国产vs欧美| av中文一区二区三区| 欧美一区二区三级| 国产精品麻豆久久久| 喷白浆一区二区| 99久久99精品久久久久久| 欧美一级搡bbbb搡bbbb| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 久久你懂得1024| 日韩欧美亚洲国产另类| 欧美zozozo| 国产精品成人免费| 亚洲一区二区欧美| 国产美女一区二区| 久久精品无码一区二区三区| 国产成人自拍在线| 亚洲欧美日韩国产另类专区| 99精品国产热久久91蜜凸| 国产女人aaa级久久久级| 亚洲蜜臀av乱码久久精品| 国产成人免费视| 99精品视频在线观看| 91精品欧美久久久久久动漫| 亚洲乱码国产乱码精品精可以看| av午夜精品一区二区三区| 亚洲欧美精品午睡沙发| 成人av在线一区二区| 国产欧美中文在线| 蜜臀精品久久久久久蜜臀| 成人免费高清在线| 69p69国产精品| 久久久综合视频| 亚洲欧洲成人精品av97|