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

📄 vt100.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1992, 1993 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * from: $Hdr: vt100.c,v 4.300 91/06/09 06:14:56 root Rel41 $ SONY * *	@(#)vt100.c	8.1 (Berkeley) 6/10/93 */#include <sys/types.h>#include <sys/param.h>#include <sys/systm.h>#include <news3400/iop/framebuf.h>#include <news3400/iop/kbreg.h>#include <news3400/iop/keyboard.h>#include <news3400/fb/fbdefs.h>#include <news3400/bm/vt100.h>#include <news3400/bm/bitmapif.h>#ifdef IPC_MRX#include "config.h"#define kbd_ioctl(chan, cmd, argp) { \	if (kb_ioctl) \		(*kb_ioctl)(chan, cmd, argp); \}#endif#ifdef IPC_MRX#include "mrx.h"#include "process.h"#include "object.h"#include "console.h"#endif#ifdef CPU_SINGLE#include <news3400/sio/scc.h>#endifextern Key_string key_str;extern int tmode;static unsigned int first_code;#ifdef IPC_MRX#define SCC_KEYBOARD	0#endifSCREEN screen;struct cursor inner_buf_csr;int inner_buf_tstat;char c_pos_mess[C_MESS_SIZ];extern struct csr_buf local_csr_buf;#ifdef IPC_MRXint bitmap_use;#ifdef IPC_3CPU#include "../../ubdev/msgio.h"extern int ipc_ready;#endif /* IPC_3CPU */extern struct cons_devsw vt100_cons;#endif /* IPC_MRX */#ifdef CPU_DOUBLEint auto_dimmer();#endif#if CPU_SINGLEextern int hz;extern kbd_profun_init();#endiflRectangle char_r1;lRectangle font_r1;lRectangle char_r2;lRectangle font_r2;int	font_len1;int	font_len2;int	fcolor;int	bcolor;int	font_w;int	font_h;int	char_w;int	char_h;int	scr_w;int	scr_h;int	ch_pos;int	ul_pos;int	x_ofst;int	y_ofst;int	rit_m;int	btm_m;int	bell_len;int	dim_cnt;int	a_dim_on;unsigned short fbuf[256];int	fp;int	fpn;lPoint	fpp;int	fpa;vt100init(){	register int i;	register SCREEN	*sp = &screen;	sp->s_term_mode = 0;	sp->s_term_mode |= (SRM|DECSCLM|DECAWM|DECARM|DECCSR_ACTV);	sp->s_current_stat = 0;	sp->s_csr.csr_x = 1;	sp->s_csr.csr_y = 1;	sp->s_csr.csr_p.x = x_ofst;	sp->s_csr.csr_p.y = y_ofst;	sp->s_csr.csr_attributes = NORMALM;	sp->s_region.top_margin = TOP_M;	sp->s_region.btm_margin = btm_m;	sp->s_plane = consfb->planemask;	sp->s_bgcol = 0;	fcolor = sp->s_plane;	bcolor = sp->s_bgcol;	for (i = 0; i < RIT_M_MAX; i++)		sp->s_tab_pos[i] = 0;	for (i = 9; i < RIT_M_MAX; i +=8)		sp->s_tab_pos[i] = 1;	esc_store_csr(sp);	inner_buf_tstat = sp->s_term_mode & (DECOM|DECAWM);	local_csr_buf.csr_number = 1;	cursor_on(&sp->s_csr.csr_p);}ncp_str(p, q, n)	register char *p, *q;	register int n;{	while (n-- > 0)		*q++ = *p++;}/* *  default parameter set */set_default_param(){	register struct fbdev *cfb = consfb;	font_w = cfb->font_w;	font_h = cfb->font_h;	char_w = cfb->char_w;	char_h = cfb->char_h;	scr_w  = cfb->scr_w;	scr_h  = cfb->scr_h;	ch_pos = cfb->ch_pos;	ul_pos = cfb->ul_pos;	x_ofst = cfb->x_offset;	y_ofst = cfb->y_offset;	rit_m  = cfb->rit_m;	btm_m  = cfb->btm_m;	a_dim_on = 1;	font_r1.extent.x = font_w;	font_r1.extent.y = font_h;	font_r2.extent.x = font_w * 2;	font_r2.extent.y = font_h;	font_len1 = (font_w + 0x0f) >> 4;	font_len2 = (font_w*2 + 0x0f) >> 4;	char_r1.extent.x = char_w;	char_r1.extent.y = char_h;	char_r2.extent.x = char_w * 2;	char_r2.extent.y = char_h;	dim_cnt = DIM_CNT_DFLT;	bell_len = BELL_LEN_DFLT;}vt100_open(){	static int only_one = 0;	extern char **ext_fnt_addr;	set_default_param();	vt100init();	bitmapinit();	if (only_one == 0) {#ifdef IPC_MRX#ifdef IPC_3CPU		while (ipc_ready == 0)			proc_sleep_self(100);#endif		while ((bitmap_use = object_query(BITMAP)) <= 0)			proc_sleep_self(100);		proc_create("auto_dimmer", auto_dimmer, 401, 512, 0);#endif /* IPC_MRX */		only_one = 1;	}#define	INIT_STRING	"\033[42;1H"	vt100_write(0, INIT_STRING, sizeof(INIT_STRING) - 1);#ifdef CPU_SINGLE	kbd_open(SCC_KEYBOARD);#endif}#ifdef IPC_MRXvt100_cons_setup(){	int vt100_open(), vt100_read(), vt100_write(), vt100_ioctl();	vt100_cons.open = vt100_open;	vt100_cons.read = vt100_read;	vt100_cons.write = vt100_write;	vt100_cons.ioctl = vt100_ioctl;}#define DIMMER_RESET	0#define DIMMER_ON	1#define DIMMER_OFF	2#define DIMMER_INTERVAL	60		/* sec */static int dimmer_stdport;auto_dimmer(){	register int select, i;	register int dimm_counter = DIM_CNT_DFLT;	register int dimm_level = 0;	int ports[2], *mode;	spl0();	ports[0] = dimmer_stdport = STDPORT;	ports[1] = port_create("auto_dimmer_sub");	register_interval(ports[1], DIMMER_INTERVAL);	for(;;) {		select = msg_select(2, ports);		if (select == 0) {			msg_recv(ports[0], NULL, &mode, NULL, 0);			switch (*mode) {			case DIMMER_RESET:				if (!a_dim_on)					break;				dimm_counter = dim_cnt;				if (dimm_level > 0) {					dimm_level =0;					for (i = 0; i < nfbdev; i++)						fbbm_set_dimmer(&fbdev[i], 0);				}				break;			case DIMMER_ON:				dimm_counter = dim_cnt;				dimm_level =0;				for (i = 0; i < nfbdev; i++)					fbbm_set_dimmer(&fbdev[i], dimm_level);				a_dim_on = 1;				break;			case DIMMER_OFF:				dimm_counter = dim_cnt;				dimm_level =0;				for (i = 0; i < nfbdev; i++)					fbbm_set_dimmer(&fbdev[i], dimm_level);				a_dim_on = 0;				break;			}		} else {			msg_recv(ports[1], NULL, NULL, NULL, 0);			if (a_dim_on && (dimm_counter-- <= 0)) {				if (dimm_level < 3) {					dimm_level++;				}				for (i = 0; i < nfbdev; i++)					fbbm_set_dimmer(&fbdev[i], dimm_level);				dimm_counter = dim_cnt;			}		}	}}rst_dimmer_cnt(){	register int diff;	static unsigned last_time;	extern unsigned sys_time;	int mode = DIMMER_RESET;	diff = sys_time - last_time;	if (diff > DIMMER_INTERVAL*HZ || diff < 0) {		dimmer(DIMMER_RESET);		last_time = sys_time;	}}auto_dimmer_on(){	dimmer(DIMMER_ON);}auto_dimmer_off(){	dimmer(DIMMER_OFF);}dimmer(mode)	int mode;{	if (dimmer_stdport)		msg_send(dimmer_stdport, 0, &mode, sizeof(mode), 0);}#else /* IPC_MRX */static int dimmer_counter = DIM_CNT_DFLT;static int dim_level = 0;#ifdef CPU_SINGLEauto_dimmer(){	register int s, i;	s = spl4();	if (a_dim_on && (dimmer_counter-- <= 0)) {		if (dim_level < 3)			dim_level++;		for (i = 0; i < nfbdev; i++)			fbbm_set_dimmer(&fbdev[i], dim_level);		dimmer_counter = dim_cnt;	}	splx(s);	timeout(auto_dimmer, (caddr_t) 0, 60 * hz);}#endifrst_dimmer_cnt(){	register int	s, i;	if (!a_dim_on)		return;#ifdef CPU_SINGLE	s = spl4();#endif	dimmer_counter = dim_cnt;

⌨️ 快捷键说明

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