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

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

?? keyboard.c

?? 新片介紹
?? C
字號(hào):
/*** $Id: keyboard.c,v 1.8 2003/09/04 03:15:07 weiym Exp $**** keyboard.c: scancode to keycode, the new TranslateMessage implementation.** ** Some code from Linux Kernel.**** Copyright (C) 2003 Feynman Software.**** Author: Wei Yongming.***//*** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <linux/types.h>#include <linux/keyboard.h>#include <linux/kd.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "keyboard.h"ushort **key_maps;struct kbdiacr *accent_table;unsigned int accent_table_size;char **func_table;typedef void (*k_hand) (unsigned char value, key_info* kinfo);typedef void (k_handfn) (unsigned char value, key_info* kinfo);static k_handfn    do_self, do_fn, do_spec, do_pad, do_dead, do_cur, do_shift,    do_meta, do_ascii, do_dead2;static k_hand key_handler[16] = {    do_self, do_fn, do_spec, do_pad, do_dead, NULL, do_cur, NULL,    do_meta, do_ascii, NULL, NULL, NULL, do_dead2,    NULL, NULL };typedef void (*void_fnp) (key_info* kinfo);typedef void (void_fn) (key_info* kinfo);static void_fn enter, compose;static void_fnp spec_fn_table[] = {    NULL,    enter,    NULL,       NULL,    NULL,    NULL,     NULL,       NULL,    NULL,    NULL,     NULL,       NULL,    NULL,    NULL,     compose,    NULL,    NULL,    NULL,     NULL,       NULL};static inline void put_queue (char ch, key_info* kinfo){    kinfo->buff [kinfo->pos] = ch;    kinfo->pos ++;}static inline void puts_queue (char* cp, key_info* kinfo){    while (*cp) {        kinfo->buff [kinfo->pos] = *cp;        kinfo->pos ++;        cp++;    }}static void applkey (int key, char mode, key_info* kinfo){    static char buf[] = { 0x1b, 'O', 0x00, 0x00 };    buf[1] = (mode ? 'O' : '[');    buf[2] = key;    puts_queue (buf, kinfo);}/* * Many other routines do put_queue, but I think either * they produce ASCII, or they produce some user-assigned * string, and in both cases we might assume that it is * in utf-8 already. */static void to_utf8 (ushort c, key_info* kinfo){    if (c < 0x80)        put_queue(c, kinfo);                /* 0*******  */    else if (c < 0x800) {        put_queue(0xc0 | (c >> 6), kinfo);  /*  110***** 10******  */        put_queue(0x80 | (c & 0x3f), kinfo);    } else {        put_queue(0xe0 | (c >> 12), kinfo); /*  1110**** 10****** 10******  */        put_queue(0x80 | ((c >> 6) & 0x3f), kinfo);        put_queue(0x80 | (c & 0x3f), kinfo);    }        /* UTF-8 is defined for words of up to 31 bits,       but we need only 16 bits here */}#define A_GRAVE  '`'#define A_ACUTE  '\''#define A_CFLEX  '^'#define A_TILDE  '~'#define A_DIAER  '"'#define A_CEDIL  ','static unsigned char ret_diacr[NR_DEAD] =    {A_GRAVE, A_ACUTE, A_CFLEX, A_TILDE, A_DIAER, A_CEDIL };/* * We have a combining character DIACR here, followed by the character CH. * If the combination occurs in the table, return the corresponding value. * Otherwise, if CH is a space or equals DIACR, return DIACR. * Otherwise, conclude that DIACR was not combining after all, * queue it and return CH. */static unsigned char handle_diacr (unsigned char ch, key_info* kinfo){    int d = kinfo->diacr;    int i;    kinfo->diacr = 0;    for (i = 0; i < accent_table_size; i++) {        if (accent_table[i].diacr == d && accent_table[i].base == ch)            return accent_table[i].result;    }    if (ch == ' ' || ch == d)        return d;    put_queue (d, kinfo);    return ch;}static void do_dead (unsigned char value, key_info* kinfo){    value = ret_diacr [value];    do_dead2 (value, kinfo);}/* * Handle dead key. Note that we now may have several * dead keys modifying the same character. Very useful * for Vietnamese. */static void do_dead2 (unsigned char value, key_info* kinfo){    kinfo->diacr = (kinfo->diacr ? handle_diacr (value, kinfo) : value);}static void do_self (unsigned char value, key_info* kinfo){    if (kinfo->diacr) {        value = handle_diacr (value, kinfo);    }    if (kinfo->dead_key_next) {        kinfo->dead_key_next = 0;        kinfo->diacr = value;        return;    }    put_queue (value, kinfo);}#define SIZE(x) (sizeof(x)/sizeof((x)[0]))static void do_fn (unsigned char value, key_info* kinfo){    if (value < MAX_NR_FUNC) {        if (func_table [value])            puts_queue (func_table [value], kinfo);    }}static void do_pad(unsigned char value, key_info* kinfo){    static const char *pad_chars = "0123456789+-*/\015,.?()";    static const char *app_map = "pqrstuvwxylSRQMnnmPQ";    /* kludge... shift forces cursor/number keys */    if ( (kinfo->kbd_mode & VC_APPLIC) && !(kinfo->shiftstate & KS_SHIFT)) {        applkey (app_map[value], 1, kinfo);        return;    }    if (!(kinfo->shiftstate & KS_NUMLOCK))        switch (value) {            case KVAL(K_PCOMMA):            case KVAL(K_PDOT):                do_fn (KVAL(K_REMOVE), kinfo);                return;            case KVAL(K_P0):                do_fn (KVAL(K_INSERT), kinfo);                return;            case KVAL(K_P1):                do_fn (KVAL(K_SELECT), kinfo);                return;            case KVAL(K_P2):                do_cur (KVAL(K_DOWN), kinfo);                return;            case KVAL(K_P3):                do_fn (KVAL(K_PGDN), kinfo);                return;            case KVAL(K_P4):                do_cur (KVAL(K_LEFT), kinfo);                return;            case KVAL(K_P6):                do_cur (KVAL(K_RIGHT), kinfo);                return;            case KVAL(K_P7):                do_fn (KVAL(K_FIND), kinfo);                return;            case KVAL(K_P8):                do_cur (KVAL(K_UP), kinfo);                return;            case KVAL(K_P9):                do_fn (KVAL(K_PGUP), kinfo);                return;            case KVAL(K_P5):                applkey ('G', kinfo->kbd_mode & VC_APPLIC, kinfo);                return;        }    put_queue (pad_chars [value], kinfo);    if (value == KVAL(K_PENTER) && (kinfo->kbd_mode & VC_CRLF))        put_queue (10, kinfo);}static void do_cur (unsigned char value, key_info* kinfo){    static const char *cur_chars = "BDCA";    applkey (cur_chars [value], kinfo->kbd_mode & VC_CKMODE, kinfo);}static void do_meta (unsigned char value, key_info* kinfo){    if (kinfo->kbd_mode & VC_META) {        put_queue ('\033', kinfo);        put_queue (value, kinfo);    } else        put_queue (value | 0x80, kinfo);}static void do_ascii (unsigned char value, key_info* kinfo){    int base;    if (value < 10)    /* decimal input of code, while Alt depressed */        base = 10;    else {       /* hexadecimal input of code, while AltGr depressed */        value -= 10;        base = 16;    }    if (kinfo->npadch == -1)        kinfo->npadch = value;    else        kinfo->npadch = kinfo->npadch * base + value;}static void do_shift (unsigned char value, key_info* kinfo){    /* kludge */    if ((kinfo->shiftstate != kinfo->oldstate) && (kinfo->npadch != -1)) {        if (kinfo->kbd_mode == VC_UNICODE)            to_utf8 (kinfo->npadch & 0xffff, kinfo);        else            put_queue (kinfo->npadch & 0xff, kinfo);        kinfo->npadch = -1;    }}static void do_spec (unsigned char value, key_info* kinfo){    if (value >= SIZE(spec_fn_table))        return;    if (spec_fn_table [value])        spec_fn_table [value] (kinfo);}static void enter (key_info* kinfo){    if (kinfo->diacr) {        put_queue (kinfo->diacr, kinfo);        kinfo->diacr = 0;    }    put_queue (13, kinfo);        if (kinfo->kbd_mode & VC_CRLF)        put_queue (10, kinfo);}static void compose (key_info* kinfo){    kinfo->dead_key_next = 1;}static int compute_shiftstate (DWORD shiftstate){    int shift_final = 0;    if (key_maps [1]) {        if (shiftstate & KS_SHIFT) {            shift_final += 1 << KG_SHIFT;        }    }    else {        if (shiftstate & KS_LEFTSHIFT)            shift_final += 1 << KG_SHIFTL;        if (shiftstate & KS_RIGHTSHIFT)            shift_final += 1 << KG_SHIFTR;    }    if (key_maps [4]) {        if (shiftstate & KS_CTRL) {            shift_final += 1 << KG_CTRL;        }    }    else {        if (shiftstate & KS_LEFTCTRL)            shift_final += 1 << KG_CTRLL;        if (shiftstate & KS_RIGHTCTRL)            shift_final += 1 << KG_CTRLR;    }    if (shiftstate & KS_LEFTALT)        shift_final += 1 << KG_ALT;    if (shiftstate & KS_RIGHTALT)        shift_final += 1 << KG_ALTGR;    return shift_final;}/* * Translation of escaped scancodes to keycodes. */static void handle_scancode_on_keydown (int scancode, key_info* kinfo){    u_short keysym;    int shift_final;    ushort *key_map;        shift_final = compute_shiftstate (kinfo->shiftstate);    key_map = key_maps [shift_final];    if (key_map != NULL) {        keysym = key_map [scancode];        kinfo->type = HIBYTE (keysym);        if (kinfo->type >= 0xf0) {            kinfo->type -= 0xf0;            if (kinfo->type == KT_LETTER) {                kinfo->type = KT_LATIN;                if (kinfo->shiftstate & KS_CAPSLOCK) {                    key_map = key_maps [shift_final ^ (1<<KG_SHIFT)];                    if (key_map)                      keysym = key_map [scancode];                }            }                        if (key_handler [kinfo->type])                (*key_handler [kinfo->type]) (keysym & 0xff, kinfo);        }        else {            to_utf8 (keysym, kinfo);        }    }}static void handle_scancode_on_keyup (int scancode, key_info* kinfo){    u_short keysym;    int shift_final;    ushort *key_map;        shift_final = compute_shiftstate (kinfo->shiftstate);    key_map = key_maps [shift_final];    if (key_map != NULL) {        keysym = key_map [scancode];        kinfo->type = HIBYTE (keysym);        if (kinfo->type >= 0xf0) {            kinfo->type -= 0xf0;            if (kinfo->type == KT_SHIFT)                do_shift (keysym & 0xff, kinfo);        }    }}kbd_layout_info layouts [] ={    {KBD_LAYOUT_DEFAULT, init_default_kbd_layout},#ifdef _KBD_LAYOUT_FRPC    {KBD_LAYOUT_FRPC, init_frpc_kbd_layout},#endif#ifdef _KBD_LAYOUT_FR    {KBD_LAYOUT_FR, init_fr_kbd_layout},#endif#ifdef _KBD_LAYOUT_DE    {KBD_LAYOUT_DE, init_de_kbd_layout},#endif#ifdef _KBD_LAYOUT_DELATIN1    {KBD_LAYOUT_DELATIN1, init_delatin1_kbd_layout},#endif#ifdef _KBD_LAYOUT_IT    {KBD_LAYOUT_IT, init_it_kbd_layout},#endif#ifdef _KBD_LAYOUT_ES    {KBD_LAYOUT_ES, init_es_kbd_layout},#endif#ifdef _KBD_LAYOUT_ESCP850    {KBD_LAYOUT_ESCP850, init_escp850_kbd_layout}#endif};static key_info kinfo = {VC_XLATE, 0, 0, -1};BOOL GUIAPI SetKeyboardLayout (const char* kbd_layout){    int i;        for (i = 0; i < TABLESIZE(layouts); i++) {        if (strcmp (layouts[i].name, kbd_layout) == 0) {            layouts [i].init (&key_maps, &accent_table, &accent_table_size, &func_table);            memset (&kinfo, 0, sizeof (key_info));            kinfo.kbd_mode = VC_XLATE;            kinfo.npadch = -1;            return TRUE;        }    }    return FALSE;}BOOL GUIAPI TranslateMessage (PMSG pMsg){    int i;    kinfo.pos = 0;    if ((pMsg->hwnd != HWND_DESKTOP)) {        if (pMsg->message == MSG_KEYDOWN || pMsg->message == MSG_SYSKEYDOWN) {            kinfo.shiftstate = pMsg->lParam;            handle_scancode_on_keydown (pMsg->wParam, &kinfo);            kinfo.oldstate = pMsg->lParam;        }        else if (pMsg->message == MSG_KEYUP || pMsg->message == MSG_SYSKEYUP) {            kinfo.shiftstate = pMsg->lParam;            handle_scancode_on_keyup (pMsg->wParam, &kinfo);            kinfo.oldstate = pMsg->lParam;        }    }    if (kinfo.pos == 1) {        SendNotifyMessage (pMsg->hwnd, MSG_CHAR, kinfo.buff[0], pMsg->lParam);    }    else {        for (i = 0; i < kinfo.pos; i++)            SendNotifyMessage (pMsg->hwnd, MSG_KEYSYM,                         MAKEWORD (kinfo.buff[i], i), pMsg->lParam);    }    return FALSE; }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久久久| 粉嫩av一区二区三区粉嫩 | 精品一区二区在线播放| 亚洲18女电影在线观看| 夜夜嗨av一区二区三区四季av | 欧美96一区二区免费视频| 亚洲国产精品久久人人爱蜜臀| 一级女性全黄久久生活片免费| 亚洲伊人伊色伊影伊综合网| 亚洲乱码中文字幕综合| 亚洲高清免费视频| 视频精品一区二区| 麻豆国产一区二区| 精品无人码麻豆乱码1区2区| 国产伦精一区二区三区| 不卡一区在线观看| 色婷婷av一区二区三区软件| 欧美三级在线看| 欧美一级专区免费大片| 久久亚洲精精品中文字幕早川悠里 | 3d动漫精品啪啪一区二区竹菊| 日韩一区二区麻豆国产| 欧美大胆人体bbbb| 中文字幕不卡三区| 亚洲码国产岛国毛片在线| 亚洲一二三四区| 久久精品噜噜噜成人88aⅴ| 国产一区二区三区| 97久久精品人人爽人人爽蜜臀| 在线精品视频免费播放| 日韩免费高清视频| 国产精品免费久久久久| 亚洲国产精品精华液网站| 热久久久久久久| 国产99久久久久久免费看农村| 91小视频在线免费看| 欧美日韩亚州综合| 久久一夜天堂av一区二区三区| 国产精品久久久久国产精品日日| 亚洲午夜私人影院| 国产精品自在欧美一区| 色域天天综合网| 日韩片之四级片| 亚洲视频精选在线| 日韩电影在线观看电影| 粉嫩蜜臀av国产精品网站| 欧美日韩中文字幕精品| 久久综合九色综合欧美98| 一区二区三区在线视频播放 | 51久久夜色精品国产麻豆| 国产婷婷一区二区| 亚洲国产成人91porn| 国产一区二区不卡| 欧美日韩在线播放一区| 国产午夜亚洲精品理论片色戒| 亚洲国产成人va在线观看天堂| 国产成人av电影在线| 欧美日韩一级视频| 国产精品网站在线观看| 捆绑调教一区二区三区| 欧洲人成人精品| 国产日产欧美精品一区二区三区| 天天综合色天天综合| 91美女片黄在线观看91美女| 久久看人人爽人人| 三级不卡在线观看| 99国产欧美另类久久久精品| 久久综合九色综合97婷婷女人 | 国产精品亚洲专一区二区三区| 欧美亚洲国产一区在线观看网站| 国产欧美一区二区精品性色 | 欧美午夜电影一区| 国产精品久久久久国产精品日日| 久久66热re国产| 欧美日韩国产不卡| 亚洲欧美日韩成人高清在线一区| 国产一区美女在线| 4438成人网| 日韩专区欧美专区| 91传媒视频在线播放| **性色生活片久久毛片| 大美女一区二区三区| 亚洲精品一区二区三区四区高清 | 国产91综合一区在线观看| 91麻豆精品国产综合久久久久久| 亚洲精品你懂的| 99久久国产综合精品女不卡| 国产女主播一区| 国产另类ts人妖一区二区| 亚洲精品在线三区| 久久精品国产免费| 欧美一级精品在线| 日韩va亚洲va欧美va久久| 欧美色老头old∨ideo| 亚洲综合视频在线| 欧美午夜精品电影| 午夜精品一区二区三区电影天堂| 在线免费观看日韩欧美| 亚洲蜜臀av乱码久久精品| 色婷婷国产精品| 一区二区三区高清不卡| 91九色最新地址| 亚洲一二三区视频在线观看| 欧美性猛交xxxx乱大交退制版 | www.亚洲人| 国产精品国产三级国产有无不卡 | 日韩欧美在线观看一区二区三区| 免费成人性网站| 日韩欧美国产午夜精品| 狠狠v欧美v日韩v亚洲ⅴ| 久久久不卡网国产精品一区| 国产成人免费视频一区| 国产精品麻豆久久久| av电影天堂一区二区在线| 国产精品大尺度| 日本电影欧美片| 日韩成人精品在线| www精品美女久久久tv| 国产sm精品调教视频网站| 亚洲色欲色欲www| 91久久精品午夜一区二区| 日韩在线一二三区| 欧美变态tickling挠脚心| 国产成人精品综合在线观看| 亚洲视频在线一区观看| 欧美日韩国产美| 韩国v欧美v亚洲v日本v| 亚洲婷婷综合色高清在线| 欧美在线观看视频一区二区| 日韩高清不卡一区二区| 久久精品夜色噜噜亚洲aⅴ| 国产精品77777竹菊影视小说| 国产精品久久久久久久久免费丝袜| 91毛片在线观看| 日韩在线卡一卡二| 国产免费久久精品| 欧美在线三级电影| 国产真实精品久久二三区| 亚洲欧美日韩精品久久久久| 欧美精品精品一区| 狠狠色丁香婷婷综合久久片| 亚洲免费观看在线视频| 欧美一级一区二区| www.亚洲在线| 青青草国产精品亚洲专区无| 中文文精品字幕一区二区| 欧美在线不卡一区| 国内偷窥港台综合视频在线播放| 亚洲欧美国产77777| 日韩欧美中文字幕公布| 99国产一区二区三精品乱码| 另类调教123区| 中文字幕一区二区三区不卡在线 | 欧美一级日韩不卡播放免费| 成人毛片在线观看| 婷婷久久综合九色综合伊人色| 欧美国产视频在线| 欧美日韩国产一级片| 东方aⅴ免费观看久久av| 日韩激情在线观看| 中文字幕一区二区三区在线观看| 日韩欧美色综合网站| 在线亚洲+欧美+日本专区| 国产麻豆视频一区| 亚洲成av人影院| 亚洲色图另类专区| 久久久影院官网| 欧美精品丝袜中出| 91麻豆免费看片| 国产精品亚洲一区二区三区在线| 日韩精品亚洲专区| 亚洲精品美国一| 国产精品亲子伦对白| 精品国产免费人成电影在线观看四季 | 美女网站色91| 亚洲精品国产a| 欧美极品xxx| 精品成人在线观看| 在线不卡免费欧美| 在线中文字幕一区二区| 大尺度一区二区| 国产精品1区2区3区| 免费一区二区视频| 五月婷婷综合网| 亚洲综合色丁香婷婷六月图片| 国产精品久久午夜| 国产日韩精品一区二区浪潮av | 亚洲欧美一区二区三区国产精品 | 久久狠狠亚洲综合| 亚洲国产精品久久不卡毛片| 亚洲精品视频自拍| 日韩理论片在线| 亚洲色图在线看| 麻豆成人久久精品二区三区红| 亚洲亚洲精品在线观看| 亚洲人成人一区二区在线观看 | 波多野结衣一区二区三区| 国产一二三精品| 国产一区二区三区精品视频| 国产在线一区观看|