OpenSolaris_b135/cmd/fmli/vt/wputchar.c

Compare this file to the similar file:
Show the results in this format:

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
/*	  All Rights Reserved  	*/


/*
 * Copyright  (c) 1986 AT&T
 *	All Rights Reserved
 */
#ident	"%Z%%M%	%I%	%E% SMI"       /* SVr4.0 1.5 */

#include	<curses.h>
#include	"wish.h"
#include	"vtdefs.h"
#include	"vt.h"
/*
  --------------------------------------------------------------------------------
  wputchar
          Output character `ch' to window `w'  with video attributes `attr'.
          If w is NULL, output goes to window associated with the current frame
          (VT_curid).
  --------------------------------------------------------------------------------
*/
void
wputchar(ch, attr, w)
char	ch;
chtype  attr;
WINDOW  *w;
{
	register chtype	c;
	register WINDOW   *win;
	register struct vt	*v;
	int      row, col;

	c = ch;

	if ((win=w) == NULL)
	{
 	   v = &VT_array[VT_curid];
	   v->flags |= VT_DIRTY;
	   win = v->win;
	}

	if ( ch > 037 && ch < 0177 )
	{
		if (attr & A_ALTCHARSET)  /* map input into graphics chars */
		{                         /* as defined in FMLI manual     */
		    switch (ch)	          /*           1                   */
		    {                     /*      d--------a               */
		    case 'a':             /*      |    |   |               */
			c = ACS_URCORNER; /*     4|----+---|2              */
			break;            /*      |    |   |               */
		    case 'b':             /*      c--------b               */
			c = ACS_LRCORNER; /*           3                   */
			break;
		    case 'c':
			c = ACS_LLCORNER;
			break;
		    case 'd':
			c = ACS_ULCORNER;
			break;
		    case '1':
			c = ACS_TTEE;
			break;
		    case '2':
			c = ACS_RTEE;
			break;
		    case '3':
			c = ACS_BTEE;
			break;
		    case '4':
			c = ACS_LTEE;
			break;
		    case '-':
			c = ACS_HLINE;
			break;
		    case '|':
			c = ACS_VLINE;
			break;
		    case '+':
			c = ACS_PLUS;
			break;
		    case '<':
			c = ACS_LARROW;
			break;
		    case '>':
			c = ACS_RARROW;
			break;
		    case 'v':
			c = ACS_DARROW;
			attr &= ~A_ALTCHARSET; /* kluge to avoid curses bug */
			break;
		    case '^':
			c = ACS_UARROW;
			break;
		    /* the following characters are not found in the fmli  */
		    /* documentation but except for # conform to the vt100 */
		    /* alternate charset.  see terminfo(4)                 */
		    case '0':
			c = ACS_BLOCK;
			break;
		    case 'I':
			c = ACS_LANTERN;
			break;
		    case '\'':
			c = ACS_DIAMOND;
			break;
		    case '#':
			c = ACS_CKBOARD;
			break;
		    case 'f':
			c = ACS_DEGREE;
			break;
		    case 'g':
			c = ACS_PLMINUS;
			break;
		    case 'h':
			c = ACS_BOARD;
			break;
		    case 'o':
			c = ACS_S1;
			break;
		    case 's':
			c = ACS_S9;
			break;
		    case '~':
			c = ACS_BULLET;
			break;
		    default:	/* turn off alt char set for unrecognized chars */
			attr &= ~A_ALTCHARSET;
			break;
		    }
		}  
                waddch(win, c | attr);
		return;
	}

	getyx(win, row, col);

	switch (c) {
	case MENU_MARKER:
		c = ACS_RARROW;
/* les */
		waddch(win, c | attr);
/***/
		return;
	case '\n':
		wmove(win, row + 1, 1);
		return;
	case '\b':
	  	wmove(win, row, col - 1);
		return;
	case '\t':
		wmove(win, row, (col + 8) & ~7);
		return;
	case '\r':
		wmove(win, row, 1);
		return;
	default:
		if (c < ' ')
			return;
		break;
	}
}
/* EVERYTHING BELOW here is COMMENTED OUT */
/* abs: removed dependency on VT_NOBORDER and moved \n\b\t\r code into above case stmt 

	if (!(v->flags & VT_NOBORDER)) {
		int	row, col;
		int	mr, mc;

		getyx(win, row, col);
*/
/*  les: not used
		getmaxyx(win, mr, mc);
*/
/* abs: same as above
		switch (c) {
		case '\n':
			wmove(win, row + 1, 1);
			return;
		case '\b':
		  	wmove(win, row, col - 1);
			return;
		case '\t':
			wmove(win, row, (col + 8) & ~7);
			return;
		case '\r':
			wmove(win, row, 1);
			return;
		}
	}
*/
/* les: move to top
	waddch(v->win, c | highlights(attr));
}
*/