⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 window.vtc

📁 Unix下的MUD客户端程序
💻 VTC
字号:
enum(&PG_OFF, &PG_ON, &PG_PAUSED);Twin ?:= new_assoc();default_pager_state ?:= PG_OFF;func std_split(win, row) [new] {	new = split(win, row);	if (new)		init_win(new);	return new;}func init_win(win) {	set_obj(win, alloc(4, Twin));	win->status = "";	win->pstate = default_pager_state;	win->pcount = 0;	win->buffer = new_list();	set_termread(win, .std_termread);}[i] ulines = ""; for (i = 0; i < cols; i++) ulines[i] = '_';func stwrite(win, col, s / blanks) {	blanks = (blanks && blanks > 0) ? blanks : 0;	cmove(col + 2, win_bottom(win) + 1);	write(s + field(ulines, blanks));	curs_reset();}func write_status(w, c / b) { stwrite(w, c, w->status + c, b); }func add_status(win, msg / left) [status] {	status = win->status;	win->status = (left) ? (msg + "_" + status) : (status + msg + "_");	write_status(win, left ? 0 : strlen(status));}func del_status(win, msg) [status, p] {	status = win->status;	p = strstr(status, msg + "_");	if (!p)		return -1;	win->status = field(status, p - status) + (p + strlen(msg) + 1);	write_status(win, p - status, strlen(msg));}func change_status(win, msg, new / left) [status, p] {	if (!*msg || !*new) {		return (*new) ? add_status(win, new, left)		     : (*msg) ? del_status(win, msg) : NULL;	}	status = win->status;	p = strstr(status, msg + "_");	if (!p)		return -1;	win->status = field(status, p - status) + new + (p + strlen(msg));	if (strlen(msg) == strlen(new))		stwrite(win, p - status, new);	else		write_status(win, p - status, strlen(msg) - strlen(new));}func redraw_hook() [win] {	edfunc(K_REDRAW);	for (win = head(T_WIN); win; win = next(win))		write_status(win, 0);	curs_reset();}display_hook ?:= make_hook();func std_display(win, rmt / suppress) [old] {	old = win_rmt(win);	if (display(win, rmt) == -1)		return -1;	change_status(win, old ? old->name : "", rmt ? rmt->name : "", 1);	change_status(win, log_string(old), log_string(rmt));	if (rmt && !suppress)		printf(win, "--- World %s ---\n", rmt->name);	else if (!suppress)		output("--- No world ---\n", S_NORM, win);	reset_prompt();	exec_hook(display_hook, win, rmt, old);}func disconnect_hook() [l] {	if (errflag)		printf("Disconnected: %s\n", errmsg);	if (rmt_win(cur_rmt)) {		del_status(rmt_win(cur_rmt), cur_rmt->name);		if (rmt_win(cur_rmt) == active)			prompt = "";	}}func output(text / style, w) [style, p, left, len] {	w ?:= cur_win ? : active;	if (w->pstate == PG_PAUSED)		return add_list(w->buffer, table(text, style));	if (style == S_HILITE)		bold(1);	if (w->pstate == PG_ON) {		len = win_bottom(w) - win_top(w);		for (; *text && w->pcount <= len; text = p) {			left = cols - win_col(w);			p = (strchr(text, '\n', left) ? : text + left - 1) + 1;			echo(w, strcpy("", text, p - text));			if (p[-1])				w->pcount++;		}	} else		echo(w, text);	if (style == S_HILITE)		bold(0);	if (w->pstate == PG_ON && *text) {		w->pstate = PG_PAUSED;		add_status(w, "[PAUSED]");		add_list(w->buffer, table(text, style));	}}func unpause(type / w) [b] {	w ?:= cur_win ? : active;	w->pcount = 0;	if (w->pstate == PG_PAUSED) {		del_status(w, "[PAUSED]");		w->pstate = (type == 2) ? PG_OFF : PG_ON;		b = w->buffer;		w->buffer = new_list();		if (type != 1) {			while (*++b)				output((*b)[0], (*b)[1], w);		}	} else if (type == 2)		w->pstate = PG_OFF;}func reset_pager(/ w) { unpause(0, w); }func discard_pager_buffer(/ w) { unpause(1, w); }func perror(s) { printf("%s: %s\n", s, errmsg); }func isize(n) --> resize(active, rows - n - 1)func Split(s) { if (!std_split(active, atoi(s))) perror("split"); }func Resize(s) {	if (resize(active, win_top(active) + atoi(s)))		perror("resize");}func Isize(s) { if (isize(atoi(s))) perror("isize"); }func Close(s) { if (close(active, atoi(s))) perror("Close"); }func More(s) [w, v] {	w = cur_win ? : active;	v = get_flag(s);	if (v == 1 && w->pstate == PG_OFF) {		w->pstate = PG_ON;		w->pcount = 0;	} else if (v == 0)		unpause(2);	else if (v == 2)		printf("Paging is %s\n", w->pstate ? "on" : "off");}		add_cmd("split", 1, .Split, "/split <row>");add_cmd("resize", 1, .Resize, "/resize <size>");add_cmd("isize", 1, .Isize, "/isize <size>");add_cmd("close", -1, .Close, "/close");add_cmd("more", -1, .More, "/more [on|off]");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -