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

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

?? tty.c

?? 《自己動手寫操作系統》一書的tinix源代碼!適合初學者!
?? C
字號:

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                               tty.c
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                                    Forrest Yu, 2005
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#include "type.h"
#include "const.h"
#include "protect.h"
#include "string.h"
#include "proc.h"
#include "tty.h"
#include "console.h"
#include "global.h"
#include "keyboard.h"
#include "proto.h"


#define TTY_FIRST	(tty_table)
#define TTY_END		(tty_table + NR_CONSOLES)


/* 本文件內函數聲明 */
PRIVATE void	init_tty(TTY* p_tty);
PRIVATE void	tty_do_read(TTY* p_tty);
PRIVATE void	tty_do_write(TTY* p_tty);
PRIVATE void	put_key(TTY* p_tty, t_32 key);


/*======================================================================*
                           task_tty
 *======================================================================*/
PUBLIC void task_tty()
{
	TTY*	p_tty;

	init_keyboard();

	for (p_tty=TTY_FIRST;p_tty<TTY_END;p_tty++) {
		init_tty(p_tty);
	}

	select_console(0);

	while (1) {
		for (p_tty=TTY_FIRST;p_tty<TTY_END;p_tty++) {
			tty_do_read(p_tty);
			tty_do_write(p_tty);
		}
	}
}


/*======================================================================*
                           init_tty
 *======================================================================*/
PRIVATE void init_tty(TTY* p_tty)
{
	p_tty->inbuf_count = 0;
	p_tty->p_inbuf_head = p_tty->p_inbuf_tail = p_tty->in_buf;

	init_screen(p_tty);
}


/*======================================================================*
                           in_process
 *======================================================================*/
PUBLIC void in_process(TTY* p_tty, t_32 key)
{
	if (!(key & FLAG_EXT)) {
		put_key(p_tty, key);
	}
	else {
		int raw_code = key & MASK_RAW;
		switch(raw_code) {
		case ENTER:
			put_key(p_tty, '\n');
			break;
		case BACKSPACE:
			put_key(p_tty, '\b');
			break;
		case UP:
			if ((key & FLAG_SHIFT_L) || (key & FLAG_SHIFT_R)) {	/* Shift + Up */
				scroll_screen(p_tty->p_console, SCROLL_SCREEN_UP);
			}
			break;
		case DOWN:
			if ((key & FLAG_SHIFT_L) || (key & FLAG_SHIFT_R)) {	/* Shift + Down */
				scroll_screen(p_tty->p_console, SCROLL_SCREEN_DOWN);
			}
			break;
		case F1:
		case F2:
		case F3:
		case F4:
		case F5:
		case F6:
		case F7:
		case F8:
		case F9:
		case F10:
		case F11:
		case F12:
			if ((key & FLAG_ALT_L) || (key & FLAG_ALT_R)) {	/* Alt + F1~F12 */
				select_console(raw_code - F1);
			}
			break;
		default:
			break;
		}
	}
}


/*======================================================================*
                              put_key
*======================================================================*/
PRIVATE void put_key(TTY* p_tty, t_32 key)
{
	if (p_tty->inbuf_count < TTY_IN_BYTES) {
		*(p_tty->p_inbuf_head) = key;
		p_tty->p_inbuf_head++;
		if (p_tty->p_inbuf_head == p_tty->in_buf + TTY_IN_BYTES) {
			p_tty->p_inbuf_head = p_tty->in_buf;
		}
		p_tty->inbuf_count++;
	}
}


/*======================================================================*
                              tty_do_read
*======================================================================*/
PRIVATE void tty_do_read(TTY* p_tty)
{
	if (is_current_console(p_tty->p_console)) {
		keyboard_read(p_tty);
	}
}


/*======================================================================*
                              tty_do_write
*======================================================================*/
PRIVATE void tty_do_write(TTY* p_tty)
{
	if (p_tty->inbuf_count) {
		char ch = *(p_tty->p_inbuf_tail);
		p_tty->p_inbuf_tail++;
		if (p_tty->p_inbuf_tail == p_tty->in_buf + TTY_IN_BYTES) {
			p_tty->p_inbuf_tail = p_tty->in_buf;
		}
		p_tty->inbuf_count--;

		//disp_int(ch);
		out_char(p_tty->p_console, ch);
	}
}


/*======================================================================*
                              tty_write
*======================================================================*/
PUBLIC void tty_write(TTY* p_tty, char* buf, int len)
{
	char* p = buf;
	int i = len;

	while (i) {
		out_char(p_tty->p_console, *p++);
		i--;
	}
}


/*======================================================================*
                              sys_write
*======================================================================*/
PUBLIC int sys_write(char* buf, int len, PROCESS* p_proc)
{
	tty_write(&tty_table[p_proc->nr_tty], buf, len);
	return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
94-欧美-setu| 欧美日韩国产首页| 日本精品裸体写真集在线观看| 成人国产精品免费观看| 不卡视频在线观看| 亚洲国产视频在线| 欧美一区二区在线视频| 欧美一区二区人人喊爽| 国产亚洲人成网站| 国产欧美久久久精品影院| 日韩美女视频一区二区| 免费亚洲电影在线| 国内一区二区在线| 成人黄色免费短视频| 欧美性色aⅴ视频一区日韩精品| 51精品国自产在线| 中文字幕一区二区三区视频 | 曰韩精品一区二区| 蜜臀久久久久久久| 成人深夜视频在线观看| 91精品国产91综合久久蜜臀| 国产精品传媒视频| 午夜精品久久久久| 成人免费视频一区二区| 欧美一区二区三区啪啪| 国产亚洲午夜高清国产拍精品| 亚洲第一搞黄网站| av不卡免费在线观看| 日韩免费福利电影在线观看| 亚洲乱码国产乱码精品精98午夜| 久久www免费人成看片高清| 欧美最新大片在线看| 中文字幕中文字幕中文字幕亚洲无线 | 91精品国产一区二区三区蜜臀| 国产精品欧美综合在线| 国产综合色在线视频区| 欧美日韩色综合| 亚洲精品高清在线| 99精品欧美一区| 国产精品美女久久久久aⅴ国产馆| 福利一区福利二区| 最新国产成人在线观看| 在线欧美小视频| 午夜久久电影网| 亚洲欧美另类在线| av高清久久久| 一区二区在线观看免费视频播放| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲丝袜美腿综合| 欧美主播一区二区三区| 日韩一区欧美二区| 欧美成人在线直播| 成人性生交大片| 一区二区三区四区视频精品免费 | 亚洲精品一区二区三区香蕉| 激情偷乱视频一区二区三区| 欧美国产一区二区| 欧美在线综合视频| 日本欧美一区二区三区乱码| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩一卡二卡三卡四卡| 精品一区二区三区在线观看| 中文一区在线播放| 欧美午夜宅男影院| 精品一区二区日韩| 国产精品国产三级国产| 欧美日韩激情一区二区三区| 狠狠色综合日日| 亚洲精品国产a久久久久久| 777欧美精品| 91在线无精精品入口| 裸体一区二区三区| 国产精品免费网站在线观看| 欧美精品第1页| 波多野结衣中文字幕一区| 肉肉av福利一精品导航| 国产精品毛片久久久久久久| 欧美日韩国产免费| 白白色 亚洲乱淫| 美女被吸乳得到大胸91| 亚洲黄网站在线观看| 久久伊人中文字幕| 7777精品伊人久久久大香线蕉| 亚洲天堂成人在线观看| 欧美一区二区成人6969| 99精品偷自拍| 黄页视频在线91| 日韩精品一级中文字幕精品视频免费观看 | 欧美v国产在线一区二区三区| 成人免费va视频| 久久不见久久见免费视频7| 一区二区不卡在线播放 | 中文字幕一区二区日韩精品绯色| 欧美视频在线观看一区| 成人av在线看| 欧美日韩激情在线| 国产麻豆精品在线| 午夜欧美视频在线观看 | 国产色综合一区| 欧美日韩免费在线视频| 99这里都是精品| 亚洲色图制服丝袜| 国产精品热久久久久夜色精品三区| 国产精品欧美精品| 亚洲国产精品久久艾草纯爱| 日本成人中文字幕在线视频| 国产一区二区精品久久91| 不卡影院免费观看| 欧美区一区二区三区| 久久精品亚洲国产奇米99 | 亚洲女性喷水在线观看一区| 亚洲亚洲精品在线观看| 久久精品噜噜噜成人av农村| 国产一区二区伦理| 色哟哟国产精品| 精品国产乱码久久久久久蜜臀| 欧美激情一区二区三区四区| 一区二区三区在线免费观看| 精品一区二区三区在线播放| 91亚洲国产成人精品一区二区三| 91精品一区二区三区在线观看| 国产视频一区二区三区在线观看 | 精品视频999| 久久久久青草大香线综合精品| 亚洲精品菠萝久久久久久久| 麻豆精品视频在线| 91视频免费看| 精品国产91乱码一区二区三区| 亚洲猫色日本管| 国产精品一色哟哟哟| 欧美日韩国产首页| 综合欧美亚洲日本| 国产一区91精品张津瑜| 欧美影视一区在线| 综合在线观看色| 国产精品1区二区.| 日韩免费电影一区| 亚洲小说欧美激情另类| 成人黄页毛片网站| 久久久久久免费网| 久久精品久久综合| 欧美精品视频www在线观看| 亚洲精品少妇30p| 国产盗摄女厕一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲aⅴ怡春院| 色8久久精品久久久久久蜜| 国产三级欧美三级日产三级99| 免费看欧美女人艹b| 欧美日韩高清一区二区| 亚洲黄色小视频| 97久久精品人人做人人爽 | 欧美日韩一区中文字幕| 国产91精品久久久久久久网曝门 | 五月天丁香久久| 日本高清成人免费播放| 国产精品三级av| 国产麻豆精品视频| 欧美tk丨vk视频| 麻豆成人久久精品二区三区红| 欧美精品第1页| 日本vs亚洲vs韩国一区三区二区| 欧美日韩在线播| 午夜精品视频在线观看| 欧美午夜不卡视频| 亚洲va欧美va人人爽午夜| 欧美色图在线观看| 天堂成人免费av电影一区| 欧美精品在线视频| 日韩综合一区二区| 日韩三级视频在线看| 久久成人羞羞网站| 国产视频一区在线观看| 成人免费观看av| 亚洲天堂2014| 色国产综合视频| 亚洲3atv精品一区二区三区| 91.成人天堂一区| 久久国产福利国产秒拍| 国产亚洲污的网站| 色av综合在线| 综合欧美一区二区三区| 欧美日韩一区二区三区四区五区 | 日韩电影在线一区| 精品久久久久av影院| 国产精品1024| 亚洲欧美综合网| 欧美另类久久久品| 精品一区二区在线播放| 国产精品美女久久久久高潮| 日本韩国一区二区三区视频| 五月天激情小说综合| 欧美不卡123| 成人h动漫精品一区二| 夜色激情一区二区| 日韩欧美一二三四区| 丁香婷婷综合激情五月色| 亚洲理论在线观看| 欧美一二三区在线| 成人app下载|