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

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

?? window.c

?? 使用BorlandC++4.5編譯的一個MUD客戶端程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
head	2.3;access;symbols;locks; strict;comment	@ * @;2.3date	96.02.04.23.24.43;	author tsurace;	state Release;branches;next	2.2;2.2date	95.10.27.20.02.39;	author tsurace;	state Beta;branches;next	2.1;2.1date	95.10.24.15.46.14;	author tsurace;	state Exp;branches;next	1.1;1.1date	95.10.12.21.37.13;	author tsurace;	state Beta;branches;next	;desc@Window management routines.@2.3log@Removed some optimizations that were causing problems.Added some somments.(Note: command-line editor is still partially broken.)@text@/* window.c - Handle I/O to terminal */
/* $Id: window.c 2.2 1995/10/27 20:02:39 tsurace Beta tsurace $ */

#include "vt.h"
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

#ifdef __WIN32__
# include "win32/replace.h" /* user i/o routines */
#else /* __WIN32__ */
# include <sys/ioctl.h>
#endif /* __WIN32__ */

#ifdef USE_STDARG
#include <stdarg.h>
#else
#include <varargs.h>
#endif

#ifdef hpux
#include <termio.h>
#else /* not HP-UX */
#ifdef SYSVTTY
#include <termio.h>
#else /* not SYSVTTY */
#ifdef __WIN32__
#else /* not __WIN32__, probably BSD */
# include <sgtty.h>
#endif
#endif
#endif

#ifdef PROTOTYPES
#ifdef TERMCAP
static void chrpt(int, int);
static void get_ospeed(void);
static void output_one(int);
static void getccap(char *, char *);
static void tp(char *, int);
#endif /* TERMCAP */
static void cap_formatted(char *, int, int);
static void clear_end(void);
static void clear_space(int, int);
static void move_left(int, int);
static void init_window(Unode *, int, int);
static void mark(Unode *, int);
static void draw_prompt(void);
static void clear_input_window(void);
static void chrpt(int c, int num);
void draw_Divider(Unode *win);
#else /* not PROTOTYPES */
#ifdef TERMCAP
static void get_ospeed(), output_one(), getccap(), tp();
#endif /* TERMCAP */
static void chrpt(), cap_formatted(), clear_end(), clear_space(), move_left();
static void init_window(), mark(), draw_prompt(), clear_input_window();
#endif /* not PROTOTYPES */

extern int errno;
extern char *sys_errlist[];

/* Global variables and externs for the terminal routines */

/* The termcap library has no length-checking facilities.  We use 32
** bytes for a string that's not pre-compiled with tputs(), and 64
** bytes for one that is.  This is somewhat kludgy, but then, so are
** the termcap routines. */
static char s_cmove[32];		/* Move cursor		 */
static char s_scroll[32];		/* Set scroll area	 */
static char s_scr_rev[32];		/* Scroll region reverse */
char s_clrscr[64];			/* Clear screen		 */
char s_clreol[64];			/* Clear to end of line	 */
char s_bold_on[64];			/* Turn boldface on	 */
char s_bold_off[64];			/* Turn boldface off	 */

#ifdef HARDCODE
#define HC_CMOVE    "\033[%d;%dH"
#define HC_SCROLL   "\033[%d;%dr"
#define HC_SCR_REV  "\033M"
#define HC_CLRSCR   "\033[2J"
#define HC_CLREOL   "\033[K"
#define HC_BOLD_ON  "\033[1m"
#define HC_BOLD_OFF "\033[m"
#define cap_normal(x, y) Bwritea(x)
#endif
#define HC_ROWS 24
#define HC_COLS 80

int rows = 0, cols = 0;			/* Screen size	       */
static int scr_top = -1, scr_bot = -1;	/* Current scroll area */
#ifdef TERMCAP
static char *cptr;
extern char *tgetstr(), *tgoto();
#ifndef AIX
extern short ospeed;
#endif /* not AIX */
#define cap_normal(x, y) tp(x, y)
#endif /* TERMCAP */

/* Global variables for windowing routines */

#define CURS_INPUT	0
#define CURS_WINDOW	1
#define CURS_ELSEWHERE	2

Unode win_ring;				/* Dummy node in windows ring */
Unode *active_win;			/* Keyboard text is sent here */
Unode *cur_win = NULL;			/* Where text is being processed */
int curs_loc = CURS_ELSEWHERE;		/* General idea of where cursor is */
static Unode *curs_win;			/* More info for CURS_WINDOW pos */
extern Unode *cur_rmt;
static String outbuf = { { "", 0 }, 0 };/* Output buffering */

#define Die(s) if (1) { puts(s); exit(1); } else
#define Bwrite(cstr)	s_cat(&outbuf, cstr)
#define Bwritea(s)	s_acat(&outbuf, s)
#define Bwriteal(s, l)	s_cat(&outbuf, cstr_sl(s, l))
#define Bwritem(s, y, z) Bwriteal(s, min(y, z))
#define Bputch(c)	s_add(&outbuf, c)
#define Bflush		if (1) { vtwrite(outbuf.c); s_term(&outbuf, 0); } else
#define BputEOLN()     s_add(&outbuf, '\n')

void bflushfunc() { Bflush; }

/* Global variables for input routines */

int icol;				/* Column of cursor on bottom line */
char *prompt;				/* Text of prompt */
int plen = 0;				/* Length of prompt */
int vtc_mode = 0;			/* Flag: input window in VTC mode */
extern String kbuf;
extern int kpos;
static int echo_mode = 1;
static int ign_echo_mode = 0;

#define Divider (win_ring.prev->Wbot + 1)
#define Margin (cols - 1)
#define Round(x, y) ((x) - (x) % (y))
#define Klen (kbuf.c.l)
#define Kptr (kbuf.c.s)
#define Oplen (vtc_mode ? 0 : plen)
# define Iclear_end  clear_end()
# define Iclear_space(top,bot) clear_space(top,rows-(bot))
# define Icmove(x, y) cmove((x),rows-(y)) // Y is rows up from the bottom
# define Imove_left(count, x) move_left((count), (x))
# define Isize (rows - Itop)
# define Itop (Divider + 1)
# define Iscr_rev if (1) { \
	if (Isize > 1) { scroll(Itop, rows - 1); scr_rev(1); } \
	else { cmove(0, rows - 1); Bwritea(s_clreol); } \
} else
# define Iscr_fwd if (1) { \
	if (Isize > 1) { scroll(Itop, rows - 1); scr_fwd(1); } \
	else { cmove(0, rows - 1); Bwritea(s_clreol); } \
} else
# define IBwrite   Bwrite
# define IBwritea  Bwritea
# define IBwriteal Bwriteal
# define IBwritem  Bwritem
# define IBputch   Bputch
# define IBputEOLN InWin_puts("\n")
# define IBflush   Bflush

/* Low-level I/O */

void vtwrite(cstr)
	Cstr cstr;
{
	int written;
    
#ifdef __WIN32__ 
    /* Send output to "console" window */
    WriteString(cstr.s, cstr.l);
#else
	while (cstr.l > 0) {
		written = write(1, cstr.s, cstr.l);
		if (written == -1) {
			if (errno != EWOULDBLOCK && errno != EINTR) {
				perror("write");
				vterror("Write failed in vtwrite()");
			}
			written = 0;
		}
		cstr = cstr_sl(cstr.s + written, cstr.l - written);
		if (cstr.l)
			sleep(1);
	}
    
#endif /* __WIN32__ */
}

static void chrpt(c, num)
	int c, num;
{
	while (num-- > 0)
		Bputch(c);
}

#ifdef __WIN32__
/* getch() is in replace.cpp */
#else /* not __WIN32__ */
int getch()
{
	char c;
	int rs;

	while ((rs = read(0, &c, 1)) <= 0) {
		if (rs < 0 && errno != EINTR) {
			perror("read");
			vterror("Read failed in getch()");
		}
	}
	return c;
}
#endif /* __WIN32__ */

void tty_mode(state)
	int state;
{
	char * ign_teln_echo;

#ifdef hpux
	struct termio blob;

	if (ioctl(0, TCGETA, &blob) == -1) {
		perror("TCGETA ioctl()");
		exit(1);
	}
	if (state) {
		blob.c_lflag &= ~ECHO;
		blob.c_lflag &= ~ECHOE;
		blob.c_lflag &= ~ICANON;
		blob.c_cc[VMIN] = 0;
		blob.c_cc[VTIME] = 0;
	} else {
		blob.c_lflag |= ECHO;
		blob.c_lflag |= ECHOE;
		blob.c_lflag |= ICANON;
	}
	ioctl(0, TCSETAF, &blob);
#else /* Not HP-UX */
#ifdef SYSVTTY
	struct termio blob;
	static struct termio old_tty_state;
	static int first = 1;

	if (first) {
		ioctl(0, TCGETA, &old_tty_state);
		first = 0;
	}
	if (state) {
		ioctl(0, TCGETA, &blob);
		blob.c_cc[VMIN] = 0;
		blob.c_cc[VTIME] = 0;
		blob.c_iflag = IGNBRK | IGNPAR | ICRNL;
		blob.c_oflag = OPOST | ONLCR;
		blob.c_lflag = ISIG;
		ioctl(0, TCSETA, &blob);
	} else if (!first)
		ioctl(0, TCSETA, &old_tty_state);
#else
#ifdef __WIN32__
        /* If state != 0, disable echo to screen and
           ctrl-c, otherwise enable it */
#else /* BSD */
	struct sgttyb blob;

	if (ioctl(0, TIOCGETP, &blob) == -1) {
		perror("TIOCGETP ioctl()");
		exit(1);
	}
	blob.sg_flags |= state ? CBREAK : ECHO;
	blob.sg_flags &= state ? ~ECHO : ~CBREAK;
	ioctl(0, TIOCSETP, &blob);
#endif
#endif
#endif
	/* Flag to ignore telnet echo_on, echo_off commands */
	ign_teln_echo = getenv("VT_IGN_ECHO");
	if(ign_teln_echo  && !strcmp(ign_teln_echo,"YES") )
		ign_echo_mode = 1;
}

/* Terminal routines */

#ifdef TERMCAP
static void get_ospeed()
{
#ifndef hpux
#ifndef AIX
#ifndef linux
	struct sgttyb sgttyb;

	ioctl(0, TIOCGETP, &sgttyb);
	ospeed = sgttyb.sg_ospeed;
#endif /* linux */
#endif
#endif
}

static void output_one(c)
	int c;
{
	*cptr++ = c;
}

static void gettcap(dest, cap)
	char *dest, *cap;
{
	char buffer[256];
	if (!tgetstr(cap, &dest))
	{
		sprintf(buffer, "Termcap cannot find %s",cap);
		Die(buffer);
	};
}

static void getccap(dest, cap)
	char *dest, *cap;
{
	char temp[64];

	gettcap(temp, cap);
	cptr = dest;
	tputs(temp, 1, output_one);
	*cptr = '\0';
}
#endif /* TERMCAP */

void init_term()
{
#ifdef HARDCODE
	strcpy(s_cmove	  , HC_CMOVE   );
	strcpy(s_scroll	  , HC_SCROLL  );
	strcpy(s_scr_rev  , HC_SCR_REV );
	strcpy(s_clrscr	  , HC_CLRSCR  );
	strcpy(s_clreol	  , HC_CLREOL  );
	strcpy(s_bold_on  , HC_BOLD_ON );
	strcpy(s_bold_off , HC_BOLD_OFF);
	rows = HC_ROWS;
	cols = HC_COLS;
#else /* HARDCODE not defined */
	char tinfo[1024], *termname, *bon, *boff;

	bon = getenv("VTBOLDON");
	if (!bon)
		bon = "so";
	boff = getenv("VTBOLDOFF");
	if (!boff)
		boff = "se";
	termname = getenv("TERM");
	if (!termname)
		Die("TERM not set");
	if (tgetent(tinfo, termname) != 1)
		Die("Terminal type not defined.");
	rows = tgetnum("li");
	if (rows == -1)
		rows = HC_ROWS;
	cols = tgetnum("co");
	if (cols == -1)
		cols = HC_COLS;
	get_ospeed();
	gettcap(s_cmove	   , "cm");
	gettcap(s_scroll   , "cs");
	gettcap(s_scr_rev  , "sr");
	getccap(s_clrscr   , "cl");
	getccap(s_clreol   , "ce");
	getccap(s_bold_on  , bon);
	getccap(s_bold_off , boff);
#endif /* HARDCODE not defined */
#ifdef TIOCGWINSZ
	{
		struct winsize size;

		ioctl(0, TIOCGWINSZ, &size);
		if (size.ws_row && size.ws_col) {
			rows = size.ws_row;
			cols = size.ws_col;
		}
	}
#else /* TIOCGWINSZ */
#ifdef __WIN32__
        rows = 35; /* Default size */
        cols = 80;
#endif /* __WIN32__ */
#endif /* TIOCGWINSZ */
	prompt = vtstrdup("");
}

#ifdef TERMCAP
static void bfuncputch(c) int c; { s_fadd(&outbuf, c); }
static void tp(s, affcnt)
	char *s;
	int affcnt;
{
	tputs(s, affcnt, bfuncputch);
	s_nt(&outbuf);
}
#endif

static void cap_formatted(cbuf, arg1, arg2)
	char *cbuf;
	int arg1, arg2;
{
#ifdef HARDCODE
	static char buffer[24];

	sprintf(buffer, cbuf, arg2 + 1, arg1 + 1);
	Bwritea(buffer);
#else
	tp(tgoto(cbuf, arg1, arg2), 1);
#endif
}

void cmove(col, row)
	int col, row;
{
    assert(col < cols); /* col out of range */
    assert(col >= 0);
    assert(row < rows); /* row out of range */
    assert(row >= 0);
    
    cap_formatted(s_cmove, col, row);
}

/* Set the current scroll area */
void scroll(top, bottom)
	int top, bottom;
{
	if (scr_top == top && scr_bot == bottom)
		return;
	cap_formatted(s_scroll, bottom, top);
	scr_top = top;
	scr_bot = bottom;
}

/* scroll the current area forward */
void scr_fwd(num)
	int num;
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
717成人午夜免费福利电影| 制服丝袜国产精品| 在线播放国产精品二区一二区四区| 91精品国产综合久久精品图片| 中文字幕欧美区| 天天影视色香欲综合网老头| 国产jizzjizz一区二区| 制服丝袜亚洲色图| 亚洲天堂免费看| 国内成人免费视频| 欧美日韩在线播放三区四区| 国产精品久久久久三级| 久久精品噜噜噜成人av农村| 在线看日本不卡| 亚洲视频一区二区在线| 国产高清成人在线| 欧美变态口味重另类| 偷窥少妇高潮呻吟av久久免费| 91小视频在线免费看| 国产欧美日韩亚州综合| 久久99精品国产.久久久久久 | 一区二区三区国产| 高清在线观看日韩| wwww国产精品欧美| 久久精品久久综合| 91麻豆精品国产91久久久久| 亚洲一本大道在线| 在线观看av一区| 亚洲精品免费一二三区| caoporen国产精品视频| 中文字幕va一区二区三区| 国产成人综合视频| 久久嫩草精品久久久久| 精品无人区卡一卡二卡三乱码免费卡 | 中文av一区二区| 成人蜜臀av电影| 日本一二三不卡| 成人一区二区三区中文字幕| 国产精品欧美精品| 99久久er热在这里只有精品15 | 99riav一区二区三区| 国产日产欧产精品推荐色| 国产一区二区看久久| 久久久久国产精品厨房| 国产69精品一区二区亚洲孕妇| 亚洲精品一区二区三区影院| 免费成人结看片| 日韩欧美综合在线| 午夜精品久久久久久不卡8050| 欧美在线三级电影| 一区二区三区加勒比av| 色乱码一区二区三区88| 51精品视频一区二区三区| 91麻豆精品91久久久久同性| 日本不卡视频一二三区| 欧美二区在线观看| 日韩成人午夜电影| 欧美日韩国产一区二区三区地区| 一区二区不卡在线播放 | 一区二区三区在线视频播放| 99久久久无码国产精品| 亚洲精品国产精华液| av午夜一区麻豆| 国产精品久久久久久妇女6080| 国产精品一区一区三区| 国产日韩欧美综合在线| 成人av小说网| 亚洲午夜三级在线| 欧美一区二区女人| 国产成人啪午夜精品网站男同| 中文字幕第一区综合| 91碰在线视频| 日日夜夜一区二区| 日韩午夜小视频| 国产九色精品成人porny| 精品久久久久av影院| 成人免费视频一区| 亚洲午夜久久久久久久久电影网| 日韩午夜激情免费电影| 国产99精品国产| 亚洲老妇xxxxxx| 日韩美女视频一区二区在线观看| 国产乱码一区二区三区| 国产精品欧美综合在线| 欧美日韩亚洲国产综合| 国产老肥熟一区二区三区| 国产日韩影视精品| 91九色最新地址| 国产自产2019最新不卡| 亚洲欧美日韩中文播放 | 国产91露脸合集magnet| 亚洲美腿欧美偷拍| 日韩欧美视频在线| caoporn国产一区二区| 日本成人在线看| 国产午夜亚洲精品午夜鲁丝片| 成人黄色综合网站| 亚洲一区二区视频在线观看| 久久久不卡影院| 欧美剧在线免费观看网站| 国产99一区视频免费| 日韩高清不卡一区二区| 日韩一区在线看| 日韩三级精品电影久久久| 91视视频在线直接观看在线看网页在线看 | 天堂午夜影视日韩欧美一区二区| 国产亚洲美州欧州综合国| 欧美日产在线观看| 91在线精品秘密一区二区| 麻豆国产欧美一区二区三区| 亚洲一区中文在线| 欧美国产视频在线| 欧美最猛性xxxxx直播| 九色综合国产一区二区三区| 亚洲一区二区三区视频在线播放| 久久精品无码一区二区三区| 911精品产国品一二三产区| 国产资源在线一区| 麻豆免费精品视频| 亚洲成人精品影院| 一区二区欧美在线观看| 国产精品每日更新在线播放网址| 日韩精品自拍偷拍| 91麻豆精品国产| 91麻豆精品视频| 肉丝袜脚交视频一区二区| 中文字幕一区二区日韩精品绯色| 久久久久久久久97黄色工厂| 日韩一区二区三区电影| 91精品国产一区二区三区蜜臀| 日本精品一区二区三区高清 | 洋洋成人永久网站入口| ㊣最新国产の精品bt伙计久久| 国产日韩欧美激情| 久久精品夜色噜噜亚洲a∨| 精品国产一区久久| 久久久一区二区| 久久亚洲一级片| 国产亚洲欧美日韩日本| 亚洲精品一区二区三区四区高清 | 日韩免费在线观看| 欧美不卡一区二区三区| 久久伊人蜜桃av一区二区| 久久免费美女视频| 亚洲精品一线二线三线| 综合分类小说区另类春色亚洲小说欧美| 久久伊人中文字幕| 26uuu国产在线精品一区二区| 欧美大片在线观看一区| 精品国产凹凸成av人网站| 久久久噜噜噜久久中文字幕色伊伊 | 日本一区二区成人在线| 亚洲日本一区二区| 伊人开心综合网| 美腿丝袜亚洲一区| 国产一区二区在线视频| 国产91色综合久久免费分享| 在线观看一区不卡| 日韩一区二区高清| 国产精品午夜久久| 亚洲成人资源在线| 久久国产剧场电影| 福利91精品一区二区三区| eeuss鲁片一区二区三区在线看| 99精品国产一区二区三区不卡| 色视频欧美一区二区三区| 欧美日韩不卡视频| 国产欧美精品一区aⅴ影院 | 日韩精品一区在线| 国产精品免费久久| 水野朝阳av一区二区三区| 黑人巨大精品欧美黑白配亚洲| 成人av手机在线观看| 91日韩一区二区三区| 欧美视频完全免费看| 国产丝袜在线精品| 丝袜诱惑亚洲看片| 99re热这里只有精品视频| 欧美丰满一区二区免费视频| 久久精品视频免费| 亚洲无人区一区| 成人天堂资源www在线| 欧美色爱综合网| 国产精品免费丝袜| 另类小说欧美激情| 91国在线观看| 久久精品人人做人人爽人人 | 久久久久久**毛片大全| 亚洲主播在线播放| 成人性生交大片免费看在线播放 | 亚洲人123区| 国产在线播放一区二区三区| 欧美午夜精品免费| 国产精品久久久久久福利一牛影视 | 成人污视频在线观看| 777亚洲妇女| 亚洲精品va在线观看| 精品一区二区三区在线观看国产| 欧美日韩你懂的| 一区二区三区四区亚洲|