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

📄 tek.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	int x, y;{	register struct tek *tp;	tp = (struct tek *) dp;	if (tp->mode == GIN) {		tp->tekpos.x = x;		tp->tekpos.y = y;		tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);	}}#endif/********************* internal routines********************/static voidtek_putchar(tp, c)	register struct tek *tp;	register u_char c;{	register struct Point *tfsp;	c &= 0xff;	tfsp = &tekfontsize[tp->font];	if (c == TAB)		c = SP;	if (c >= 0x20) {		tek_char(tp->tdata, c);		tp->tekpos.x += tfsp->x;		if (tp->tekpos.x >= TXSIZE) {			tp->tekpos.y -= tfsp->y;			if (tp->tekpos.y < 0) {				/* use other margin */				if (tp->straps & MARG1) {					if (tp->straps & ACOPY) {						tek_makecopy(tp->tdata);						tek_page(tp);						tp->full = 0;					} else if (!tp->full) {						tek_pagefull_on(tp->tdata);						tp->full = 1;					}					tp->margin = 0;				} else if (tp->margin == 0) {					tp->margin = TXSIZE / 2;				} else {						if (tp->straps & MARG2) {						if (tp->straps & ACOPY) {							tek_makecopy(tp->tdata);							tek_page(tp);							tp->full = 0;						} else if (!tp->full) {							tek_pagefull_on(tp->tdata);							tp->full = 1;						}					}					tp->margin = 0;				}				tp->tekpos.y = TYSIZE - 1;			}			tp->tekpos.x = tp->margin;		}	} else {		switch (c) {		case LF:			tp->tekpos.y -= tfsp->y;			if (tp->tekpos.y < 0) {				/* use other margin */				if (tp->straps & MARG1) {					if (tp->straps & ACOPY) {						tek_makecopy(tp->tdata);						tek_page(tp);						tp->full = 0;					} else if (!tp->full) {						tek_pagefull_on(tp->tdata);						tp->full = 1;					}					tp->margin = 0;				} else if (tp->margin == 0) {					tp->margin = TXSIZE / 2;					if (tp->tekpos.x < TXSIZE / 2)						tp->tekpos.x += TXSIZE / 2;				} else {					if (tp->straps & MARG2) {						if (tp->straps & ACOPY) {							tek_makecopy(tp->tdata);							tek_page(tp);							tp->full = 0;						} else if (!tp->full) {							tek_pagefull_on(tp->tdata);							tp->full = 1;						}					}					tp->margin = 0;					if (tp->tekpos.x >= TXSIZE / 2)						tp->tekpos.x -= TXSIZE / 2;				}				tp->tekpos.y = TYSIZE - 1;			}			break;		case CR:			tp->tekpos.x = tp->margin;			break;		case BS:			tp->tekpos.x -= tfsp->x;			if (tp->tekpos.x < tp->margin)				tp->tekpos.x = tp->margin;			break;		case VT:			/* can this back up a margin on the real thing? */			tp->tekpos.y += tfsp->y;			if (tp->tekpos.y >= TYSIZE)				tp->tekpos.y = TYSIZE - 1;			break;		case BEL:			tek_bell(tp->tdata);			break;		case FF:			tek_clearscreen(tp->tdata);			tp->tekpos.x = 0;			tp->tekpos.y = TYSIZE - 1;			tp->margin = 0;		}	}	tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);}static voidtek_reset(tp)	register struct tek *tp;{	tp->lce = FALSE;	tp->bypass = FALSE;	tp->darkvec = TRUE;	tp->got_loy = FALSE;	tp->extra = 0;	tp->tekgfxpos.x = 0;	tp->tekgfxpos.y = 0;	tp->vtype = VT_NORMAL;	tp->vstyle = VS_NORMAL;	tek_displaymode(tp->tdata, tp->vstyle, tp->vtype);	tp->margin = 0;	tp->tekpos.x = 0;	tp->tekpos.y = TYSIZE - 1;	tp->font = 0;	tp->mode = ALPHA;	tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);	tek_chfont(tp->tdata, 0);	tek_cursormode(tp->tdata, ALPHACURSOR);}static voidtek_page(tp)	register struct tek *tp;{	tp->bypass = FALSE;	tp->margin = 0;	tp->vtype = VT_NORMAL;	tp->vstyle = VS_NORMAL;	tek_displaymode(tp->tdata, tp->vstyle, tp->vtype);	tp->tekpos.x = 0;	tp->tekpos.y = TYSIZE - 1;	tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);	tek_newmode(tp, ALPHA);	tek_putchar(tp, FF);}/* * decode graphics addresses and draw vectors as needed */static voidtek_gfxdecode(tp, c)	register struct tek *tp;	register u_char c;{	c &= 0x7f;	switch (CTYPE(c)) {	case LOX:		tp->tekgfxpos.x = CHARTOADDR(tp->tekgfxpos.x, c, LO);		tp->got_loy = FALSE;		tp->tekpos = tp->tekgfxpos;		if (tp->darkvec) {			tp->darkvec = FALSE;			tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);#ifdef DEBUG			fprintf(debug,				"moving to %d,%d\n",				tp->tekpos.x, tp->tekpos.y			);#endif		} else {			if (tp->mode == GRAPH) {				tek_draw(tp->tdata, tp->tekpos.x, tp->tekpos.y);#ifdef DEBUG				fprintf(debug,					"drawing vector to %d,%d\n",					tp->tekpos.x, tp->tekpos.y				);#endif			} else {				/* point plot modes */				tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);				tek_draw(tp->tdata, tp->tekpos.x, tp->tekpos.y);#ifdef DEBUG				fprintf(debug,					"point at %d,%d\n",					tp->tekpos.x, tp->tekpos.y				);#endif			}		}		break;	case HIYX:		if (tp->got_loy) {			tp->tekgfxpos.x = CHARTOADDR(tp->tekgfxpos.x, c, HI);		} else {			tp->tekgfxpos.y = CHARTOADDR(tp->tekgfxpos.y, c, HI);		}		break;	case LOYE:		if ((c == 0x7f) && !(tp->straps & DELLOY))			break;		if (tp->got_loy) {			tp->tekgfxpos.x =				EXTRATOADDR(tp->tekgfxpos.x, tp->extra, XEXTRA);			tp->tekgfxpos.y =				EXTRATOADDR(tp->tekgfxpos.y, tp->extra, YEXTRA);		}		tp->tekgfxpos.y = CHARTOADDR(tp->tekgfxpos.y, c, LO);		tp->got_loy = TRUE;		tp->extra = c;		break;	}}/* ARGSUSED */static voidtek_spptdecode(tp, c)	register struct tek *tp;	register u_char c;{}static voidtek_incdecode(tp, c)	register struct tek *tp;	register u_char c;{#define incpos(X,Y)	tp->tekpos.x += X; tp->tekpos.y += Y;	switch (c) {	case ' ':		tp->darkvec = TRUE;		return;	case 'P':		tp->darkvec = FALSE;		return;	case 'D':		incpos(0, 1);		break;	case 'E':		incpos(1, 1);		break;	case 'A':		incpos(1, 0);		break;	case 'I':		incpos(1, -1);		break;	case 'H':		incpos(0, -1);		break;	case 'J':		incpos(-1, -1);		break;	case 'B':		incpos(-1, 0);		break;	case 'F':		incpos(-1, 1);		break;	}	if (tp->tekpos.x < 0)		tp->tekpos.x = 0;	if (tp->tekpos.x >= TXSIZE)		tp->tekpos.x = TXSIZE - 1;	if (tp->tekpos.y < 0)		tp->tekpos.y = 0;	if (tp->tekpos.y >= TYSIZE)		tp->tekpos.y = TYSIZE - 1;	if (tp->darkvec == FALSE) {		tek_draw(tp->tdata, tp->tekpos.x, tp->tekpos.y);#ifdef DEBUG		fprintf(debug,			"drawing vector to %d,%d\n",			tp->tekpos.x, tp->tekpos.y		);#endif	} else {		tek_move(tp->tdata, tp->tekpos.x, tp->tekpos.y);#ifdef DEBUG		fprintf(debug,			"moving to %d,%d\n",			tp->tekpos.x, tp->tekpos.y		);#endif	}}/* * enter new terminal mode */static voidtek_newmode(tp, nmode)	register struct tek *tp;	register enum tmode nmode;{	if (tp->full && nmode != ALPHA) {		tek_pagefull_off(tp->tdata);		tp->full = 0;	}	switch (nmode) {	case ALPHA:		if (tp->mode != ALPHA) {			tp->margin = 0;	/* this is not strictly right */		}		tek_cursormode(tp->tdata, ALPHACURSOR);		break;	case GIN:		tek_cursormode(tp->tdata, GFXCURSOR);		break;	case GRAPH:	case PTPLOT:	case INCPLOT:	case SPPTPLOT:		tek_cursormode(tp->tdata, NOCURSOR);		if (nmode == INCPLOT)			tp->darkvec = FALSE;		else			tp->darkvec = TRUE;		break;	}	tp->mode = nmode;}/* * send terminal status */static voidtek_sendstatus(tp)	register struct tek *tp;{	register u_char status;	if (tp->straps & LOCAL)		return;	status = STATUS;	if (tp->mode == GRAPH)		status |= SGRAPH;	if (tp->margin != 0)		status |= SMARGIN2;	tek_ttyoutput(tp->tdata, status);}/* * send position */static voidtek_sendpos(tp)	register struct tek *tp;{#ifndef DISPLAY_ONLY#ifdef DEBUG	fprintf(debug, "sending status ");#endif	if (tp->straps & LOCAL)		return;	tek_ttyoutput(tp->tdata, (SADDR | ADDRTOCHAR(tp->tekpos.x, HI)));	tek_ttyoutput(tp->tdata, (SADDR | ADDRTOCHAR(tp->tekpos.x, LO)));	tek_ttyoutput(tp->tdata, (SADDR | ADDRTOCHAR(tp->tekpos.y, HI)));	tek_ttyoutput(tp->tdata, (SADDR | ADDRTOCHAR(tp->tekpos.y, LO)));#ifdef DEBUG	fprintf(debug, " 0x%x", (SADDR | ADDRTOCHAR(tp->tekpos.x, HI)));	fprintf(debug, " 0x%x", (SADDR | ADDRTOCHAR(tp->tekpos.x, LO)));	fprintf(debug, " 0x%x", (SADDR | ADDRTOCHAR(tp->tekpos.y, HI)));	fprintf(debug, " 0x%x", (SADDR | ADDRTOCHAR(tp->tekpos.y, LO)));#endif	/*	 * send GIN terminator sequence be carefull to auto echo CR since this	 * will clear bypass the above stuff and EOT won't	 */	switch (tp->straps & GINTERM) {	case GINNONE:		break;	case GINCR:		/* send CR */		tek_ttyoutput(tp->tdata, CR);		if (tp->straps & AECHO)			tek_ttyinput(tp, CR);#ifdef DEBUG		fprintf(debug, " 0x%x ", CR);#endif		break;	case GINCRE:		/* send CR EOT */		tek_ttyoutput(tp->tdata, CR);		tek_ttyoutput(tp->tdata, EOT);		if (tp->straps & AECHO)			tek_ttyinput(tp, CR);#ifdef DEBUG		fprintf(debug, " 0x%x ", CR);		fprintf(debug, " 0x%x ", EOT);#endif		break;	}#ifdef DEBUG	fprintf(debug, "\n");#endif#endif}

⌨️ 快捷键说明

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