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

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

?? keyboard.cpp

?? Jazmyn is a 32-bit, protected mode, multitasking OS which runs on i386 & above CPU`s. Its complete
?? CPP
字號:
/*
 * Copyright (C) 2004, Thejesh AP. All rights reserved.
 */

#include <sys\types.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <dirent.h>
#include <mm\new.h>
#include <mm\heap.h>
#include <jazmyn\desc.h>
#include <mm\memory.h>
#include <fs\file_sys.h>
#include <jazmyn\process.h>
#include <jazmyn\handlers.h>
#include <fs\devmgr.h>
#include <drivers\keyboard.h>
#include <drivers\console.h>

extern void (*handlers[16])();
extern  device_manager  _dev_mgr;
extern process *fg_proc;
extern process *curr_proc;

#define NIL     -1
#define ESC     27
#define CTRL    29
#define SHFT    42
#define ALT     56
#define CAPS    58
#define F1      59
#define F2      60
#define F3      61
#define F4      62
#define F5      63
#define F6      64
#define F7      65
#define F8      66
#define F9      67
#define F10     68
#define NUM     69
#define SCRL    70
#define HOME    71
#define UP      72
#define PGUP    73
#define LEFT    75
#define FIVE    76
#define RGHT    77
#define END     79
#define DOWN    80
#define PGDN    81
#define INS     82
#define DEL     83
#define F11     87
#define F12     88
#define WIN     91
#define RTCK    93
#define POWR    94
#define SLEP    95      
#define WAKE    99  


#define REVERT_NUM _keyboard_obj.num_lock = _keyboard_obj.num_lock?OFF:ON
#define REVERT_CAPS _keyboard_obj.caps_lock = _keyboard_obj.caps_lock?OFF:ON
#define REVERT_SCRL _keyboard_obj.num_lock = _keyboard_obj.scroll_lock?OFF:ON


char ascii[]=  {/* 0      1     2     3     4     5     6     7     8     9*/

		   NIL,  ESC,  '1',  '2',  '3',  '4',  '5',  '6',  '7',  '8',
		  '9',   '0',  '-',  '=', '\b', '\t',  'q',  'w',  'e',  'r',
		  't',   'y',  'u',  'i',  'o',  'p',  '[',  ']', '\n',  CTRL,
                  'a',   's',  'd',  'f',  'g',  'h',  'j',  'k',  'l',  ';',
                  '\'',   '`', SHFT, '\\', 'z',  'x',  'c',  'v',  'b',  'n',
		  'm',   ',',  '.',  '/',  SHFT, '*',  ALT,  ' ', CAPS,   F1,
		   F2,    F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  NUM,
		   SCRL,HOME,   UP,  PGUP, '-', LEFT, FIVE, RGHT,  '+',  END,
		   DOWN, PGDN,  INS,   DEL,  NIL,  NIL,  NIL,  F11,  F12,  NIL,
		   NIL,   WIN,  WIN, RTCK, POWR, SLEP,  NIL,  NIL,  NIL, WAKE
	       };

char shifted[]= {/*0      1     2     3     4     5     6     7     8     9*/

                  NIL,   ESC,  '!',  '@',   '#',  '$',  '%',  '^',  '&',  '*',
		  '(',   ')',  '_',  '+', '\b', '\t',  'Q',  'W',  'E',  'R',
		  'T',   'Y',  'U',  'I',  'O',  'P',  '{',  '}', '\n',  CTRL,
		  'A',   'S',  'D',  'F',  'G',  'H',  'J',  'K',  'L',  ':',
		  '"',   '~',  SHFT, '|',  'Z',  'X',  'C',  'V',  'B',  'N',
		  'M',   '<',  '>',  '?', SHFT,  NIL,  ALT,  ' ', CAPS,  F1 ,
		   F2,    F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  NUM,
		  SCRL, HOME,   UP,  PGUP, '-', LEFT, FIVE, RGHT,  '+',  END,
		  DOWN, PGDN,  INS,   DEL, NIL,  NIL,  NIL,  F11,  F12,  NIL,
		  NIL,   WIN,  WIN,  RTCK, POWR,SLEP,  NIL,  NIL,  NIL,  WAKE
	 };
    
keyboard::keyboard(char* name): driver(name)
{
	shift = alt = ctrl = RELEASED;
	caps_lock = num_lock = scroll_lock = OFF;
	int err;
        if((err = _dev_mgr.register_driver(1,this->name,0,keyboard_main))<0)
	{
		cout<<"register_driver ERROR : "<<this->name<<" "<<err<<endl;
		return;
	}
        if((err = set_handler(IRQ1,keyboard_handler))<0)
	{
		cout<<"set_handler ERROR : "<<this->name<<" "<<err<<endl;
		return;
	}
        enable_irq(IRQ1);
        cout<<"Keyboard driver succesfully registered          [name] = "<<this->name<<endl;
        keyhit = 0;
        for(int i=0;i<MAX_KB_REQ;i++)
        {
                kbr_arr[i].proc = NULL;
        }
}

keyboard::~keyboard()
{
	int err;
        if((err = _dev_mgr.deregister_driver(this->name))<0)
	{
		cout<<"deregister driver ERROR : "<<this->name<<" "<<err<<endl;
		return;
	}
}

char keyboard::get_num_lock_keys(int scan)
{
	if(shift)
	return shifted[scan];
	switch(scan)
	{
		case 71:return '7';
		case 72:return '8';
		case 73:return '9';
		case 74:return '-';
		case 75:return '4';
		case 76:return '5';
		case 77:return '6';
		case 78:return '+';
		case 79:return '1';
		case 80:return '2';
		case 81:return '3';
		case 82:return '0';
		case 83:return '.';
                default:return ascii[scan];
	}
}

#define NUM_LOCK(s)     get_num_lock_keys(s)

char keyboard::get_ascii(int scan)
{
	char ch;
	char ret;

        if (!shift)
	{
		if(!caps_lock && !num_lock)
		{
                        ch = ascii[scan];
			ret = CTRL_ALT(ch);
                }
		else if(!caps_lock && num_lock)
		{
			ret = CTRL_ALT(NUM_LOCK(scan));
		}
                else if(caps_lock && !num_lock)
		{
                        ch = ascii[scan];
			if(ch>='a' && ch<='z') ret = CTRL_ALT(shifted[scan]);
			else ret = CTRL_ALT(ch);   
		}  
		else if(caps_lock && num_lock)
		{
			ch = NUM_LOCK(scan);
			if(ch>='a' && ch<='z') ret = CTRL_ALT(shifted[scan]);
			else ret = CTRL_ALT(ch);
		}       
	}   
	else       
	{
		if(!caps_lock && !num_lock)     
		{
			ch = shifted[scan];
			ret = CTRL_ALT(ch);
		}
		else if(!caps_lock && num_lock) 
		{
                        ch = shifted[scan];
                        ret = CTRL_ALT(ch);
		}
                else if(caps_lock && !num_lock)
		{       
			ch = shifted[scan];
                        if(ch>='A' && ch<='Z') ret = CTRL_ALT(ascii[scan]);
                        else ret = CTRL_ALT(ch);
		}
		else if(caps_lock && num_lock)
		{
                        ch = shifted[scan];
                        if(ch>='A' && ch<='Z') ret = CTRL_ALT(ascii[scan]);
			else ret = CTRL_ALT(ch);
		}
	}
        return ret;
}
                                           
inline int keyboard::insert(char term,char *buf,int *fin)
{
	for(int i=0;i<MAX_KB_REQ;i++)
	if(kbr_arr[i].proc == NULL)
	{
		cli();
		kbr_arr[i].term = term;
		kbr_arr[i].buf = buf;
		kbr_arr[i].ind = 0;
		kbr_arr[i].proc = curr_proc;
                kbr_arr[i].finished = fin;
                *fin = 0;
		curr_proc->block();
		sti();
		return 0;
	}
	return -1;
}
         
int keyboard::service(char term,void *buf,int *fin)
{
        if(insert(term,(char*)buf,fin) < 0) return -1;
}

int ser=0;

void getch()
{
        while(!ser);
        ser = 0;
}
  
keyboard        _keyboard_obj("keyboard");

void keyboard_handler()
{
        int scan = inportb(0x60);
        char ch;
	if(scan == 0xe0 || scan == 0xe1) return;
	if(scan & 0x80)
	{
                ch = ascii[scan & 0x7f];
		switch(ch)
		{
                        case SHFT:_keyboard_obj.shift = RELEASED;break;
                        case CTRL:_keyboard_obj.ctrl  = RELEASED;break;
                        case ALT :_keyboard_obj.alt   = RELEASED;break;
		}
	}
	else
	{
                ch = ascii[scan];
                if(scan == SHFT) _keyboard_obj.shift = PRESSED;
                else if(scan == CTRL) _keyboard_obj.ctrl = PRESSED;
                else if(scan == ALT ) _keyboard_obj.alt = PRESSED;
                else if(scan == NUM ) REVERT_NUM;
                else if(scan == CAPS) REVERT_CAPS;
                else if(scan == SCRL) REVERT_SCRL;
                else
                {
                        ser = 1;

                        for(int i=0;i<MAX_KB_REQ;i++)
                        {
                                if(_keyboard_obj.kbr_arr[i].proc == fg_proc)
                                {
                                        char ch = _keyboard_obj.get_ascii(scan);
                                        if(ch == '\b')
                                        {
                                                if(_keyboard_obj.kbr_arr[i].ind)
                                                {
                                                        cout<<ch;
                                                        _keyboard_obj.kbr_arr[i].ind--;
                                                }
                                                return;
                                        }
                                        _keyboard_obj.kbr_arr[i].buf[_keyboard_obj.kbr_arr[i].ind] = ch;
                                        cout<<_keyboard_obj.kbr_arr[i].buf[_keyboard_obj.kbr_arr[i].ind];
                                        if(_keyboard_obj.kbr_arr[i].buf[_keyboard_obj.kbr_arr[i].ind] == _keyboard_obj.kbr_arr[i].term)
                                        {
                                                _keyboard_obj.kbr_arr[i].buf[_keyboard_obj.kbr_arr[i].ind] = '\0';
                                                *_keyboard_obj.kbr_arr[i].finished = _keyboard_obj.kbr_arr[i].ind+1;
                                                cli();
                                                _keyboard_obj.kbr_arr[i].proc->unblock();
                                                _keyboard_obj.kbr_arr[i].proc = NULL;
                                                sti();
                                                return;
                                        }
                                        _keyboard_obj.kbr_arr[i].ind++;
                                }
                        }
                }
        }
}

int keyboard_main(void* req)
{
        keyboard_req *k_req = (keyboard_req*)req;
        int *fin = new int;
        if(_keyboard_obj.service(k_req->term,k_req->buf,fin) < 0) return -1;
        while(!*fin);
	int ret = *fin;
	delete fin;
        return ret;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区电影| 亚洲精品一区二区三区影院| 国产精品国产三级国产有无不卡| 国产成人亚洲精品狼色在线| 国产欧美日韩综合精品一区二区| 成人三级在线视频| 中文字幕一区在线观看| 日本国产一区二区| 天使萌一区二区三区免费观看| 91精品国产综合久久香蕉麻豆 | 一区二区三区在线看| 色999日韩国产欧美一区二区| 亚洲制服丝袜在线| 91精品国产手机| 国产精品一区在线观看乱码| 国产精品美女久久久久aⅴ国产馆| 91麻豆精品视频| 免费观看在线色综合| 欧美激情中文不卡| 欧美视频一区二区在线观看| 卡一卡二国产精品 | 成人sese在线| 亚洲一区欧美一区| 精品国产一区a| 99精品热视频| 日本伊人色综合网| 中文字幕亚洲在| 日韩一级片在线播放| 成人午夜激情在线| 日韩精品电影一区亚洲| 国产喷白浆一区二区三区| 色诱视频网站一区| 激情六月婷婷综合| 亚洲免费成人av| 26uuuu精品一区二区| 91福利国产成人精品照片| 经典一区二区三区| 一区二区三区精品在线| 久久看人人爽人人| 欧美二区在线观看| 91麻豆国产福利精品| 国产一区二区三区国产| 亚洲成人中文在线| 中文字幕一区二区三中文字幕| 日韩一级黄色大片| 在线区一区二视频| 99在线精品观看| 国产精品中文字幕欧美| 日韩极品在线观看| 一区二区三区在线高清| 中文幕一区二区三区久久蜜桃| 日韩一卡二卡三卡国产欧美| 在线观看日韩国产| 99精品国产热久久91蜜凸| 麻豆成人久久精品二区三区红| 亚洲精品写真福利| 国产精品灌醉下药二区| 精品国产乱码久久久久久蜜臀| 欧美日韩中文字幕一区| 一本大道久久a久久综合| 这里只有精品免费| aaa亚洲精品一二三区| 国产成人综合自拍| 国产精品一区二区在线看| 欧美a级一区二区| 天天做天天摸天天爽国产一区| 亚洲色图另类专区| 国产精品福利电影一区二区三区四区| 久久视频一区二区| 精品国产乱码久久久久久图片 | 国产偷国产偷亚洲高清人白洁| 欧美二区三区91| 欧美色精品在线视频| 在线看不卡av| 欧美图区在线视频| 在线观看www91| 欧美色视频在线| 欧美体内she精视频| 欧美体内she精高潮| 欧美色爱综合网| 欧美日韩国产中文| 3d动漫精品啪啪| 欧美电影精品一区二区| 日韩精品在线一区| 久久午夜色播影院免费高清| 久久久久久久久久久久久久久99| 久久亚洲精品国产精品紫薇| 国产区在线观看成人精品| 国产精品欧美久久久久无广告| 亚洲国产精品二十页| 一区精品在线播放| 国产精品久久综合| 一区二区三区免费在线观看| 亚洲一区二区欧美日韩| 三级久久三级久久| 狠狠色丁香婷婷综合久久片| 国产精品99久久久久久有的能看 | 欧美videofree性高清杂交| 欧美一级精品大片| 久久无码av三级| 国产精品看片你懂得| 亚洲一区二区视频在线| 人人爽香蕉精品| 国产精品白丝av| 欧美亚洲高清一区二区三区不卡| 欧美日韩免费在线视频| 欧美一级淫片007| 久久一二三国产| 亚洲精品国产一区二区三区四区在线 | 欧美经典一区二区| 亚洲欧美一区二区三区国产精品 | 久久草av在线| 豆国产96在线|亚洲| 欧美综合视频在线观看| 欧美va亚洲va| 有坂深雪av一区二区精品| 日本色综合中文字幕| 成人av高清在线| 欧美丰满少妇xxxbbb| 欧美激情在线观看视频免费| 亚洲成av人片在www色猫咪| 久久99精品久久久久久久久久久久 | 国产一区亚洲一区| 在线亚洲精品福利网址导航| 欧美sm极限捆绑bd| 亚洲最大色网站| 国产精品888| 91精品国产色综合久久| 亚洲精品日产精品乱码不卡| 激情综合色播激情啊| 欧美性xxxxx极品少妇| 国产欧美日韩综合精品一区二区| 婷婷亚洲久悠悠色悠在线播放 | 91国产福利在线| 久久亚洲私人国产精品va媚药| 一区二区三区精品在线观看| 国产suv一区二区三区88区| 欧美电影影音先锋| 亚洲精品国久久99热| 成人av网站大全| 欧美精品一区二区三区高清aⅴ| 亚洲午夜一区二区| 91一区在线观看| 国产精品久久久久久亚洲伦| 韩国精品主播一区二区在线观看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 日韩精品一区二区三区在线| 亚洲自拍偷拍av| 91在线国产福利| 国产精品网曝门| 国产麻豆精品一区二区| 日韩精品在线一区| 美女视频网站久久| 欧美剧情电影在线观看完整版免费励志电影 | 成人免费av资源| 久久午夜免费电影| 国产一区二区三区在线观看精品 | 亚洲精品在线观| 三级欧美韩日大片在线看| 在线观看三级视频欧美| 一区二区在线观看视频| 波多野结衣亚洲| 国产精品萝li| 不卡视频免费播放| 国产精品色一区二区三区| 粉嫩高潮美女一区二区三区| 久久综合999| 国产91精品精华液一区二区三区| 欧美精品一区二区精品网| 国产一区二区在线视频| 久久久精品2019中文字幕之3| 国产一区 二区| 国产日韩av一区| 99精品视频一区| 一区二区三区资源| 欧美在线播放高清精品| 日韩电影在线观看网站| 日韩欧美国产精品| 国产乱码字幕精品高清av| 国产亚洲精品福利| 97久久精品人人爽人人爽蜜臀| 亚洲人成亚洲人成在线观看图片| 色视频一区二区| 午夜精品aaa| 欧美va在线播放| 欧美一区二区黄| 国产精品小仙女| 亚洲美女一区二区三区| 欧美亚一区二区| 久久精品国产99| 欧美韩日一区二区三区四区| 一本色道久久综合亚洲精品按摩| 亚洲主播在线播放| 精品三级在线看| 99国产精品久久久久| 婷婷成人综合网| 久久精品亚洲精品国产欧美kt∨ | 一区二区三区精密机械公司| 欧美日韩aaaaaa| 国产一区二区三区美女|