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

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

?? keyboard.c

?? 使用BorlandC++4.5編譯的一個MUD客戶端程序
?? C
字號:
/* keyboard.c: Handle keyboard input */
/* $Id: keyboard.c 2.1 1995/10/24 15:46:14 tsurace Release $ */

#include "vt.h"

#ifdef PROTOTYPES
static void flush_out(void);
static int match_key(char *, char *);
static int check_keys(char *, Unode **);
static int fword(void);
static int bword(void);
static void process_kbd_line(Cstr);
#else
static void flush_out(), process_kbd_line();
#endif

#define margin (cols - 1)
#define klen (kbuf.c.l)
#define kptr (kbuf.c.s)

/* Key matching results */
#define KM_NONE	    0
#define KM_PARTIAL  1
#define KM_TOTAL    2

/* Indexes to functions table */
#define K_CUP	   0
#define K_CDOWN	   1
#define K_CLEFT	   2
#define K_CRIGHT   3
#define K_CHOME	   4
#define K_CEND	   5
#define K_CWLEFT   6
#define K_CWRIGHT  7
#define K_BSPC	   8
#define K_BWORD	   9
#define K_BHOME	  10
#define K_DBUF	  11
#define K_DCH	  12
#define K_DWORD	  13
#define K_DEND	  14
#define K_REFRESH 15
#define K_REDRAW  16
#define K_MODE	  17
#define K_PROCESS 18

static String kout = { { "", 0 }, 0 };	/* Text to send to input_puts() */
static String kkey = { { "", 0 }, 0 };	/* Text to match against keys	*/
static String kproc = { { "", 0 }, 0 }; /* Temp buffer for processing	*/
String kbuf = { { "", 0 }, 0 };		/* Main key buffer		*/
int kpos = 0;
int keyboard_input_waiting = 0;
extern int cols, vtc_mode;
extern Estate *gen_read, *gen_high, *gen_low;
extern Unode *klookup[], *active_win;

/* Feed the kout buffer to input_inputs() */
static void flush_out()
{
	if (!kout.c.l)
		return;
	s_nt(&kout);
	curs_input();
	input_puts(kout.c);
	s_insert(&kbuf, kout.c, kpos);
	kpos += kout.c.l;
	s_term(&kout, 0);
}

/* Compare a key sequence with a string */
static int match_key(text, seq)
	char *text, *seq;
{
	do
		text++, seq++;
	while (*text && lcase(*text) == lcase(*seq));
	return *text ? KM_NONE : *seq ? KM_PARTIAL : KM_TOTAL;
}

/* Check the string s against all keys in clump */
static int check_keys(text, rkey)
	char *text;
	Unode **rkey;
{
	Unode *kp;
	int match;
	int found_partial = 0;

	kp = klookup[lcase(*text)];
	if (!kp)
		return KM_NONE;
	for (; lcase(*kp->Kseq) == lcase(*text); kp = kp->next) {
		match = match_key(text, kp->Kseq);
		if (match == KM_TOTAL) {
			*rkey = kp;
			return KM_TOTAL;
		} else if (match == KM_PARTIAL)
			found_partial = 1;
	}
	return found_partial ? KM_PARTIAL : KM_NONE;
}

/* Return the position of the beginning of the next word */
static int fword()
{
	int pos = kpos;

	for (; pos < klen && kptr[pos] != ' '; pos++);
	for (; pos < klen && kptr[pos] == ' '; pos++);
	return pos;
}

/* Return the position of the beginning of the previous word */
static int bword()
{
	int pos = kpos - 1;

	for (; pos >= 0 && kptr[pos] == ' '; pos--);
	for (; pos >= 0 && kptr[pos] != ' '; pos--);
	return pos + 1;
}

/* Perform an editing function */
void do_edit_func(func)
	int func;
{
	int pos;

	curs_input();
	switch (func) {
	    case K_BSPC:
		if (kpos) {
			input_bdel(1);
			s_delete(&kbuf, --kpos, 1);
		}
	    Case K_BWORD:
		pos = bword();
		input_bdel(kpos - pos);
		s_delete(&kbuf, pos, kpos - pos);
		kpos = pos;
	    Case K_BHOME:
		input_bdel(kpos);
		s_delete(&kbuf, 0, kpos);
		kpos = 0;
	    Case K_DBUF:
		input_clear();
		s_term(&kbuf, kpos = 0);
	    Case K_DCH:
		if (kpos < klen) {
			input_fdel(1);
			s_delete(&kbuf, kpos, 1);
		}
	    Case K_DWORD:
		pos = fword();
		input_fdel(pos - kpos);
		s_delete(&kbuf, kpos, pos - kpos);
	    Case K_DEND:
		input_fdel(klen - kpos);
		s_term(&kbuf, kpos);
	    Case K_REFRESH:
		input_clear();
		input_draw();
	    Case K_REDRAW:
		redraw_screen();
	    Case K_MODE:
		toggle_imode();
	    Case K_PROCESS:
		input_newline();
		s_cpy(&kproc, kbuf.c);
		s_term(&kbuf, kpos = 0);
		process_kbd_line(kproc.c);
	    Default:
		switch (func) {
		    case K_CUP:		pos = kpos - margin;
		    Case K_CDOWN:	pos = kpos + margin;
		    Case K_CLEFT:	pos = kpos - 1;
		    Case K_CRIGHT:	pos = kpos + 1;
		    Case K_CHOME:	pos = 0;
		    Case K_CEND:	pos = klen;
		    Case K_CWLEFT:	pos = bword();
		    Case K_CWRIGHT:	pos = fword();
		    Default: return;	/* Putz */
		}
		pos = pos < 0 ? 0 : pos > klen ? klen : pos;
		input_cmove(pos);
		kpos = pos;
	}
}

void process_incoming(s)
	char *s;
{
	Unode *key;
	int val;
	char *temp;

	if (*s)
		keyboard_input_waiting++;
	for (; *s; s++) {
		if (!s[1])
			keyboard_input_waiting--;
		if (gen_high || active_win->Wghstack) {
			flush_out();
			resume_int(gen_high ? &gen_high
					    : &active_win->Wghstack, *s);
			continue;
		}
		s_add(&kkey, *s);
		val = check_keys(kkey.c.s, &key);
		if (val == KM_TOTAL) {
			flush_out();
			s_term(&kkey, 0);
			if (key->Ktype == K_EFUNC)
				do_edit_func(key->Kefunc);
			else
				run_prog(key->Kcmd->cmd);
			continue;
		}
		if (val == KM_PARTIAL)
			continue;
		if (gen_low || active_win->Wglstack) {
			flush_out();
			resume_int(gen_low ? &gen_low
					   : &active_win->Wglstack, *kkey.c.s);
		} else if (isprint(*kkey.c.s))
			s_fadd(&kout, *kkey.c.s);
		if (kkey.c.l > 1) {
			temp = vtstrdup(kkey.c.s + 1);
			s_term(&kkey, 0);
			process_incoming(temp);
			Discardstring(temp);
		} else
			s_term(&kkey, 0);
	}
	flush_out();
}

static void process_kbd_line(line)
	Cstr line;
{
	if (vtc_mode)
		parse(line.s);
	else
		give_window(active_win, istr_c(line));
}

void give_window(win, is)
	Unode *win;
	Istr *is;
{
	is->refs++;
	if (gen_read)
		resume_istr(&gen_read, is);
	else if (win->Wrstack)
		resume_istr(&win->Wrstack, is);
	else if (win->Wtermread)
		run_prog_istr(win->Wtermread->cmd, is, win, NULL);
	else if (win->Wrmt) {
		transmit(win->Wrmt, is->rs->str.c);
		if (win->Wrmt)
			transmit(win->Wrmt, cstr_s("\n"));
	}
	dec_ref_istr(is);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产尿小便嘘嘘尿| 国产精品乱码妇女bbbb| hitomi一区二区三区精品| 亚洲成人中文在线| 亚洲国产一区二区三区青草影视| 精品国产免费人成电影在线观看四季 | 色狠狠综合天天综合综合| 国产麻豆成人精品| 国产精品资源站在线| 国产美女精品在线| 国产99一区视频免费| 国产乱人伦精品一区二区在线观看| 蜜臀久久99精品久久久画质超高清| 日韩av一二三| 国产精品538一区二区在线| 国内精品免费在线观看| 99视频精品全部免费在线| 91美女片黄在线观看91美女| 欧美另类高清zo欧美| 欧美精品 国产精品| www.欧美日韩| 99久久综合99久久综合网站| 9i看片成人免费高清| 欧美美女黄视频| 国产欧美日韩综合精品一区二区| 中文字幕免费在线观看视频一区| 国产精品美女久久福利网站| 婷婷国产在线综合| 成a人片国产精品| 日韩片之四级片| 亚洲国产精品ⅴa在线观看| 午夜免费欧美电影| 99久久夜色精品国产网站| 欧美一区二区福利在线| 一二三区精品视频| 99久久精品国产毛片| 国产色综合一区| 久久99精品久久久久久国产越南 | 亚洲柠檬福利资源导航| 精品无人码麻豆乱码1区2区| 在线电影院国产精品| 日本一二三四高清不卡| 国产精品中文字幕欧美| 4438x成人网最大色成网站| 亚洲一区二区在线免费看| 91影院在线观看| 亚洲另类色综合网站| 91黄色在线观看| 亚洲国产另类av| 宅男噜噜噜66一区二区66| 亚洲免费在线视频| 在线免费av一区| 精品美女一区二区| 日韩国产精品久久| 欧美大片一区二区三区| 经典三级一区二区| 中文字幕一区二区三区乱码在线| 国产精品一品视频| 中文字幕视频一区二区三区久| 成人av在线观| 亚洲一级在线观看| 2欧美一区二区三区在线观看视频| 国产一区二区在线观看免费| 国产精品国产三级国产aⅴ入口 | 色一情一乱一乱一91av| 午夜精品在线视频一区| 国产欧美精品一区| 成熟亚洲日本毛茸茸凸凹| 一区二区三区在线视频观看58| 9191国产精品| 成人免费毛片嘿嘿连载视频| 日韩高清电影一区| 国产精品九色蝌蚪自拍| 欧美精品在线一区二区三区| 不卡的电影网站| 秋霞av亚洲一区二区三| 亚洲欧美中日韩| 国产亚洲精品bt天堂精选| 91麻豆精品国产91久久久使用方法| 免费观看在线色综合| 午夜精品福利在线| 国产精品午夜久久| 欧美电视剧在线观看完整版| 色综合久久综合中文综合网| 国产在线不卡一区| 日韩不卡在线观看日韩不卡视频| 一区二区三区中文免费| 亚洲色图欧洲色图| 一本色道a无线码一区v| 日本午夜一区二区| 欧美aⅴ一区二区三区视频| 亚洲高清在线视频| 天天色综合成人网| 石原莉奈在线亚洲二区| 首页欧美精品中文字幕| 偷拍与自拍一区| 亚洲第一综合色| 久久精工是国产品牌吗| 国产一区二区日韩精品| 国产aⅴ精品一区二区三区色成熟| 久久精品999| 白白色 亚洲乱淫| 丁香婷婷综合网| 99久久久久免费精品国产 | 精品制服美女丁香| 国产a区久久久| 欧美日韩一区三区四区| 日韩精品在线一区二区| 国产精品无圣光一区二区| 国产精品久久久久影院色老大 | 丁香一区二区三区| 欧美综合久久久| 精品日韩av一区二区| 亚洲天堂a在线| 性做久久久久久久免费看| 国产精品白丝jk白祙喷水网站 | 欧美一区二区三区人| 国产精品五月天| 日本特黄久久久高潮| 97精品视频在线观看自产线路二| 欧美亚洲一区二区三区四区| 国产三级一区二区| 久久电影网电视剧免费观看| 六月丁香综合在线视频| 欧美日韩一区二区三区不卡| 欧美乱妇20p| 久久精品水蜜桃av综合天堂| 亚洲成人黄色影院| 在线观看日韩精品| 中文字幕在线视频一区| 精品一区二区免费在线观看| 欧美日韩黄色一区二区| 亚洲精品久久久蜜桃| 99视频精品全部免费在线| 久久亚洲一区二区三区明星换脸| 午夜精品免费在线观看| 91亚洲精品乱码久久久久久蜜桃| 欧美大片在线观看一区二区| 午夜不卡av在线| 欧美一区二区视频观看视频| 天天av天天翘天天综合网| 色香蕉成人二区免费| 亚洲少妇中出一区| 在线中文字幕不卡| 亚洲五码中文字幕| 在线观看91精品国产麻豆| 午夜一区二区三区在线观看| 欧美精品日韩综合在线| 久久成人免费网站| 国产精品久久久久国产精品日日| 91免费在线视频观看| 日日夜夜免费精品视频| 久久九九久精品国产免费直播| 国产v日产∨综合v精品视频| 欧美韩国日本一区| 欧美日韩国产精品成人| 精品一区二区av| 夜夜嗨av一区二区三区中文字幕 | 欧美一区二区三区公司| 国产福利视频一区二区三区| 精品av综合导航| 色综合久久综合网欧美综合网| 日本人妖一区二区| 亚洲色图清纯唯美| 久久综合av免费| 在线精品视频一区二区三四| 国产一区二区美女| 亚洲午夜激情av| 久久在线观看免费| 成人高清视频在线观看| 免费黄网站欧美| 亚洲人精品一区| 国产精品网站在线观看| 精品国免费一区二区三区| 制服丝袜国产精品| 欧美性大战久久久| 欧美日韩视频在线观看一区二区三区 | 日韩一本二本av| 日韩情涩欧美日韩视频| 日韩天堂在线观看| 欧美亚洲自拍偷拍| 欧美性做爰猛烈叫床潮| 日本精品视频一区二区三区| 97超碰欧美中文字幕| 夫妻av一区二区| 99精品国产视频| 一本一本久久a久久精品综合麻豆| a4yy欧美一区二区三区| 一本到高清视频免费精品| 91福利视频网站| 欧美精品v国产精品v日韩精品| 欧美蜜桃一区二区三区| 日韩欧美国产三级| 国产精品久久国产精麻豆99网站| 欧美韩国一区二区| 婷婷国产v国产偷v亚洲高清| 精品在线播放免费| av一本久道久久综合久久鬼色| 成人午夜在线免费| 欧美精品精品一区|