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

📄 waddch.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	Copyright (c) 1984 AT&T	*//*	  All Rights Reserved  	*//*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*//*	The copyright notice above does not evidence any   	*//*	actual or intended publication of such source code.	*/#ifndef lintstatic	char sccsid[] = "@(#)waddch.c 1.1 92/07/30 SMI"; /* from S5R3.1 1.8 */#endif#include	"curses_inc.h"/* * This routine prints the character in the current position. * Think of it as putc. */waddch(win, c)register	WINDOW	*win;register	chtype	c;{    register	int	x = win->_curx, y = win->_cury;    register	unsigned char	rawc = _CHAR(c);    chtype		rawattrs = _ATTR(c);    int			rv = OK;    int			savimmed = win->_immed;#ifdef	DEBUG    if (outf)	if (c == rawc)	    fprintf(outf, "'%c'", rawc);	else	    fprintf(outf, "'%c' %o, raw %o", c, c, rawc);#endif	/* DEBUG */    switch (rawc)    {	case '\n':	    (void) wclrtoeol(win);	    goto new_line;	case '\r':	    goto move_to_begin_line;        case '\b':	    if (--x < 0)move_to_begin_line:		x = 0;	    win->_curx = x;	    win->_flags |= _WINMOVED;	    goto out_move_only;	default:	    if (rawc < ' ' || rawc == _CTRL('?'))	    {		int	savsync = win->_sync;		win->_immed = win->_sync = FALSE;		if (rawc == '\t')		{		    register	int	newx;		    register	chtype	space = ' ' | rawattrs;		    if ((newx = x + (TABSIZE - (x % TABSIZE))) > win->_maxx)			newx = win->_maxx;		    for ( ; x < newx; x++)			if (waddch(win, space) == ERR)			    goto next;		}		else		{		    if ((waddch(win, (chtype) '^'|rawattrs) == ERR) ||			(waddch(win, (chtype)_UNCTRL(rawc)|rawattrs) == ERR))		    {next :			rv = ERR;		    }		}		x = win->_curx;		y = win->_cury;		win->_immed = savimmed;		win->_sync = savsync;		break;	    }#ifdef	DEBUG	    if ((win->_attrs) && outf)		fprintf(outf, "(attrs %o, %o=>%o)", win->_attrs, c, c | win->_attrs);#endif	/* DEBUG */	    if ((c = _WCHAR(win, c)|rawattrs) != win->_y[y][x])	    {		if (x < win->_firstch[y])		    win->_firstch[y] = x;		if (x > win->_lastch[y])		    win->_lastch[y] = x;		win->_y[y][x] = c;#ifdef	_VR3_COMPAT_CODE		if (_y16update)		    win->_y16[y][x] = _TO_OCHTYPE (c);#endif	/* _VR3_COMPAT_CODE */	    }	    if (++x == win->_maxx)	    {new_line:		if (y == win->_bmarg)		{		    if (wscrl(win, 1) == ERR)		    {			rv = ERR;			if (x == win->_maxx)			    --x;#ifdef	DEBUG			if (outf)			{			    int	i;			    fprintf(outf, "ERR because (%d, %d) > (%d, %d)\n",				    x, y, win->_maxx, win->_maxy);			    fprintf(outf, "line: '");			    for (i=0; i<win->_maxy; i++)				fprintf(outf, "%c", win->_y[y-1][i]);			    fprintf(outf, "'\n");			}#endif	/* DEBUG */			break;		    }		    else			savimmed = 1;		}		else		    y++;		x = 0;	    }	    else		savimmed += 2;#ifdef	FULLDEBUG	    if (outf)		fprintf(outf, "ADDCH: 2: y = %d, x = %d, firstch = %d, lastch = %d\n", y, x, win->_firstch[y], win->_lastch[y]);#endif	/* FULLDEBUG */	    break;    }    win->_cury = y;    win->_curx = x;    /* sync with ancestor structures */    if (win->_sync)	wsyncup(win);    if (savimmed == 3)	return ((*_quick_ptr)(win, c));    win->_flags |= _WINCHANGED;out_move_only:    return ((savimmed == 1) ? wrefresh(win) : rv);}

⌨️ 快捷键说明

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