Files
Arquivotheca.Solaris-2.5/lib/libcurses/screen/winwstr.c
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

56 lines
1.1 KiB
C
Executable File

/* Copyright (c) 1988 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. */
#ident "@(#)winwstr.c 1.1 93/05/05 SMI"
#include "curses_inc.h"
winwstr(win, wstr)
register WINDOW *win;
register wchar_t *wstr;
{
register int counter = 0;
int cy = win->_cury;
register chtype *ptr = &(win->_y[cy][win->_curx]),
*pmax = &(win->_y[cy][win->_maxx]);
chtype *p1st = &(win->_y[cy][0]);
wchar_t wc;
int ew, sw, s;
char *cp, cbuf[CSMAX+1];
while (ISCBIT(*ptr) && (p1st < ptr))
ptr--;
while (ptr < pmax)
{
wc = RBYTE(*ptr);
sw = mbscrw(wc);
ew = mbeucw(wc);
cp = cbuf;
for (s = 0; s < sw; s++, ptr++)
{
if ((wc = RBYTE(*ptr)) == MBIT)
continue;
*cp++ = wc;
if ((wc = LBYTE(*ptr) | MBIT) == MBIT)
continue;
*cp++ = wc;
}
*cp = '\0';
if (_curs_mbtowc(&wc, cbuf, CSMAX) <= 0)
break;
*wstr++ = wc;
}
*wstr = (wchar_t)0;
return (counter);
}