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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vtswitch-lite.c

?? 嵌入式系統圖形用戶界面編程
?? C
字號:
/*** $Id: vtswitch-lite.c,v 1.9 2003/09/04 03:38:26 weiym Exp $**** vtswitch-lite.c: VT switching.**** Copyright (C) 2003 Feynman Software.** Copyright (C) 2001 ~ 2002 Song Lixin and Wei Yongming**** Created by Song Lixin, 2000/10/17** Clean code for MiniGUI 1.1.x by Wei Yongming, 20001/11/28*//*** 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 <unistd.h>#include <fcntl.h>#include <signal.h>#include <sys/ioctl.h>#include <sys/time.h>#include <linux/vt.h>#include "common.h"#include "minigui.h"#ifdef _LITE_VERSION#include "gdi.h"#include "window.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "ctrlclass.h"#include "dc.h"#include "ial.h"#include "native.h"static int vtswitch_initialised = 0;static struct vt_mode startup_vtmode;volatile static int console_active = 1;            /* are we active? */volatile static int console_should_be_active = 1;  /* should we be? */static int ttyfd = -1;static int current_vt;static void vt_switch_requested(int signo);static void poll_console_switch (void);static void come_back(void);static void go_away(void);int init_vtswitch (int kbd_fd) {    struct sigaction sa;    struct vt_mode vtm;    struct vt_stat stat;    if (vtswitch_initialised)        return 0;  /* shouldn't happen */    if (kbd_fd >= 0)        ttyfd = kbd_fd;    else {        ttyfd = open("/dev/tty0", O_RDONLY);        if (ttyfd == -1) {            fprintf (stderr, "Error can't open tty: %m.\n");            return -1;        }    }    ioctl (ttyfd, VT_GETSTATE, &stat);    current_vt = stat.v_active;    console_active = console_should_be_active = 1;    /* Hook the signals */    sigemptyset(&sa.sa_mask);    sigaddset(&sa.sa_mask, SIGIO); /* block async IO during the VT switch */    sa.sa_flags = 0;    sa.sa_handler = vt_switch_requested;    if ((sigaction(SIGRELVT, &sa, NULL) < 0) || (sigaction(SIGACQVT, &sa, NULL) < 0)) {        fprintf (stderr, "init_vtswitch: Unable to control VT switch.\n");        return -1;    }    /* Save old mode, take control, and arrange for the signals     * to be raised. */    ioctl(ttyfd, VT_GETMODE, &startup_vtmode);    vtm = startup_vtmode;    vtm.mode = VT_PROCESS;    vtm.relsig = SIGRELVT;    vtm.acqsig = SIGACQVT;    ioctl(ttyfd, VT_SETMODE, &vtm);    vtswitch_initialised = 1;    return 0;}/* vt_switch_requested: *  This is our signal handler; it gets called whenever a switch is *  requested, because either SIGRELVT or SIGACQVT is raised. */static void vt_switch_requested(int signo){    switch (signo) {        case SIGRELVT:            console_should_be_active = 0;            break;        case SIGACQVT:            console_should_be_active = 1;            break;        default:            return;    }    poll_console_switch();}/* poll_console_switch: *  Checks whether a switch is needed and not blocked; if so, *  makes the switch. */static void poll_console_switch (void){    if (console_active == console_should_be_active) return;    if (console_should_be_active)        come_back();    else        go_away();}/* come_back: *  Performs a switch back. */static void come_back (void){    int new_fd;    IAL_ResumeMouse();    if ((new_fd = IAL_ResumeKeyboard()) >= 0)        ttyfd = new_fd;    ioctl (ttyfd, VT_RELDISP, VT_ACKACQ);    console_active = 1;    __mg_switch_away = FALSE;    SendNotifyMessage (HWND_DESKTOP, MSG_PAINT, 0, 0);#ifndef _STAND_ALONE    ClientCanDrawNowEx (TRUE, NULL);#endif}/* go_away: *  Performs a switch away. */static void go_away (void){#ifndef _STAND_ALONE    OnlyMeCanDraw ();#endif    if (ioctl (ttyfd, VT_RELDISP, 1) == -1) {        fprintf (stderr, "Error can't switch away from VT: %m\n");        return;    }    console_active = 0;    __mg_switch_away = TRUE;    IAL_SuspendKeyboard();    IAL_SuspendMouse();}/*  done_vtswitch: *  Undoes the effect of `init_vtswitch'. */int done_vtswitch (int kbd_fd){    struct sigaction sa;    if (!vtswitch_initialised) return 0;  /* shouldn't really happen either */    /* !trout gfoot.  Must turn off the signals before unhooking them... */    ioctl (ttyfd, VT_SETMODE, &startup_vtmode);    sigemptyset (&sa.sa_mask);    sa.sa_handler = SIG_DFL;    sa.sa_flags = SA_RESTART;    sigaction (SIGRELVT, &sa, NULL);    sigaction (SIGACQVT, &sa, NULL);    vtswitch_initialised = 0;    if (ttyfd != kbd_fd)        close (ttyfd);    return 0;}int vtswitch_try(int vt) {    if (!vtswitch_initialised)        return 1;    if(vt == current_vt)         return 1;        ioctl(ttyfd, VT_ACTIVATE, vt);    return 0;}#endif /* _LITE_VERSION */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合在线| 久久精品72免费观看| 国产午夜精品美女毛片视频| 欧美疯狂做受xxxx富婆| 欧美揉bbbbb揉bbbbb| 在线视频你懂得一区| 色老汉av一区二区三区| 色综合亚洲欧洲| 91精彩视频在线| 在线精品视频小说1| 在线观看免费成人| 欧美三级视频在线观看| 日韩欧美另类在线| 久久精品亚洲麻豆av一区二区 | 麻豆中文一区二区| 蜜桃av一区二区三区电影| 麻豆91在线播放免费| 久久99精品网久久| 国产福利电影一区二区三区| 欧美日韩精品欧美日韩精品一| 精品视频一区二区不卡| 欧美日高清视频| 精品国精品国产| 中文字幕乱码久久午夜不卡| 亚洲欧美日韩国产一区二区三区| 综合激情成人伊人| 日韩制服丝袜av| 国内精品自线一区二区三区视频| 成人福利视频在线| 欧美日韩国产精选| 中文字幕精品一区二区精品绿巨人| 亚洲欧美视频一区| 奇米888四色在线精品| 国产成人免费av在线| 欧美性感一类影片在线播放| 日韩亚洲欧美一区二区三区| 国产精品美女一区二区| 亚洲电影第三页| 黄网站免费久久| 在线观看www91| 国产女人aaa级久久久级 | 欧美视频你懂的| 一区二区三区久久久| 久久av资源网| 97精品国产97久久久久久久久久久久| 欧美日韩综合不卡| 中文字幕成人网| 蜜臀精品一区二区三区在线观看 | 欧美揉bbbbb揉bbbbb| 国产婷婷一区二区| 天天色 色综合| 97久久人人超碰| 久久亚区不卡日本| 香蕉加勒比综合久久| 成人性生交大片免费看在线播放| 欧美日韩视频一区二区| 亚洲欧洲日韩女同| 国产麻豆精品在线| 欧美一二区视频| 图片区小说区国产精品视频| 丁香婷婷综合激情五月色| 日韩一级片网址| 亚洲一区二区三区免费视频| 成人福利电影精品一区二区在线观看| 日韩午夜激情电影| 丝袜美腿亚洲色图| 91精彩视频在线| 一区二区三区欧美视频| 91最新地址在线播放| 欧美韩日一区二区三区| 久久草av在线| 久久香蕉国产线看观看99| 麻豆精品在线视频| 欧美一区二区三区小说| 婷婷综合久久一区二区三区| 欧美日韩中文字幕一区| 亚洲香肠在线观看| 在线视频欧美精品| 爽好久久久欧美精品| 欧美精品日日鲁夜夜添| 日韩国产欧美三级| 4438成人网| 免费人成在线不卡| 精品国产91久久久久久久妲己 | 麻豆精品一区二区三区| 日韩一级精品视频在线观看| 久久成人18免费观看| 久久久精品免费观看| 成人av网址在线观看| 国产精品福利一区| 在线观看日韩电影| 蜜臂av日日欢夜夜爽一区| 精品理论电影在线观看| 国产自产2019最新不卡| 中文字幕在线观看一区| 91黄色在线观看| 免费精品视频最新在线| 精品成人免费观看| 白白色亚洲国产精品| 亚洲乱码日产精品bd| 欧美日本精品一区二区三区| 男女男精品视频网| 国产精品欧美一区喷水| 91成人网在线| 国内精品写真在线观看| 亚洲欧洲三级电影| 4438x成人网最大色成网站| 国产美女主播视频一区| 亚洲欧洲韩国日本视频| 欧美精品日韩综合在线| 成人一级片网址| 偷拍一区二区三区| 国产精品理论在线观看| 宅男在线国产精品| 成人免费av在线| 奇米一区二区三区| 中文字幕亚洲精品在线观看| 91精品一区二区三区在线观看| 国产精品自在在线| 午夜久久久影院| 欧美激情综合网| 日韩免费成人网| 色菇凉天天综合网| 风间由美一区二区av101| 亚洲国产精品久久久男人的天堂| 亚洲精品在线网站| 欧美日韩另类一区| av电影天堂一区二区在线| 美女视频网站久久| 一区二区三区美女视频| 日本一区二区动态图| 337p日本欧洲亚洲大胆精品 | 偷窥少妇高潮呻吟av久久免费| 久久精品在这里| 91精品国产综合久久精品麻豆 | 日本sm残虐另类| 一区二区三区在线播放| 国产人成亚洲第一网站在线播放| 欧美夫妻性生活| 欧美亚洲日本一区| 91捆绑美女网站| 懂色av中文字幕一区二区三区| 精品综合久久久久久8888| 午夜国产精品一区| 亚洲va中文字幕| 一个色综合av| 一区二区免费在线| 亚洲精品视频在线看| ㊣最新国产の精品bt伙计久久| 久久精品视频在线免费观看| 日韩精品中文字幕一区| 制服丝袜亚洲色图| 91精品国产综合久久婷婷香蕉| 欧美日韩一区二区三区在线| 色婷婷av一区二区三区gif| 成人国产电影网| av资源网一区| 91免费小视频| 欧美综合天天夜夜久久| 精品视频色一区| 91精品久久久久久久99蜜桃 | 国产精品99久| 国产伦精品一区二区三区免费迷| 久久99精品久久久久久| 国内外成人在线视频| 丁香一区二区三区| 在线观看日韩电影| 日韩亚洲欧美高清| 26uuu国产在线精品一区二区| 26uuu欧美| 中文字幕在线不卡一区| 亚洲一级电影视频| 蜜桃精品视频在线| 成人午夜精品在线| 在线观看免费一区| 日韩一级高清毛片| 国产精品第13页| 婷婷一区二区三区| 国产麻豆成人精品| 91久久精品日日躁夜夜躁欧美| 69堂成人精品免费视频| 国产欧美日韩在线看| 亚洲精品日产精品乱码不卡| 首页欧美精品中文字幕| 国产高清不卡一区| 欧洲av在线精品| 久久你懂得1024| 一区二区高清在线| 国内精品伊人久久久久av影院 | 成人小视频免费观看| 欧美在线三级电影| 久久女同精品一区二区| 亚洲国产精品人人做人人爽| 久久精品72免费观看| 色婷婷久久久久swag精品| 欧美va亚洲va在线观看蝴蝶网| 成人欧美一区二区三区小说| 日韩黄色免费网站| 91免费看`日韩一区二区| 精品久久久久久久久久久久包黑料|