* Fixed bug in copywin which was copying more than it should.
* Changed call to wrefresh in wgetch to be before input read. * Changed default old cursor mode to be high vis in curs_set * Added documentation for various new functions to fns.doc.
This commit is contained in:
parent
6d972981ff
commit
cf5ffc46f2
|
@ -236,6 +236,48 @@ Wipes the window clear from the current \*y to the end of the line.
|
|||
Get the red, green and blue values of color
|
||||
.Vn color .
|
||||
.Ds
|
||||
.Fn copywin "const WINDOW *src" "WINDOW *dst" "int sminrow" "int smincol" "int dminrow" "int dmincol" "int dmaxrow" "int dmaxcol" "int overlay"
|
||||
.De
|
||||
Copies the contents of the window
|
||||
.Vn src
|
||||
starting at (
|
||||
.Vn sminrow ,
|
||||
.Vn smincol )
|
||||
to the destination window
|
||||
.Vn dst
|
||||
starting at (
|
||||
.Vn dminrow ,
|
||||
.Vn dmincol )
|
||||
and ending at either the end of the source window or (
|
||||
.Vn dmaxrow ,
|
||||
.Vn dmaxcol )
|
||||
whichever is the lesser. The parameter
|
||||
.Vn overlay
|
||||
determines the nature of the copy. If
|
||||
.Vn overlay
|
||||
is TRUE then only the non-space characters from
|
||||
.Vn src
|
||||
are copied to
|
||||
.Vn dst .
|
||||
If
|
||||
.Vn overlay
|
||||
is FALSE then all characters are copied from
|
||||
.Vn src
|
||||
to
|
||||
.Vn dst.
|
||||
.Ds
|
||||
.Fn curs_set "int visibility"
|
||||
.De
|
||||
Sets the visibility of the screen cursor. The parameter
|
||||
.Vn visibility
|
||||
can be one of three values, 0 means make the cursor invisible, 1 means
|
||||
set the cursor to normal visibility and 2 sets the cursor to high
|
||||
visibility. In all cases the old mode of the cursor is returned if
|
||||
the call was successful and
|
||||
.b ERR
|
||||
is returned if the terminal cannot support the requested visibility
|
||||
mode.
|
||||
.Ds
|
||||
.Fn crmode "" \(dg
|
||||
.De
|
||||
Identical to
|
||||
|
@ -285,6 +327,25 @@ Therefore,
|
|||
subwindows should be deleted before their
|
||||
outer windows are.
|
||||
.Ds
|
||||
.Fn derwin "WINDOW *orig" "int nlines" "int ncols" "int by" "int bx"
|
||||
.De
|
||||
Performs a function very similar to that of
|
||||
.Fn subwin .
|
||||
The difference being that with
|
||||
.Fn derwin
|
||||
the origin of the child window given by (
|
||||
.Vn by ,
|
||||
.Vn bx )
|
||||
is relative to the origin of the parent window
|
||||
.Vn orig
|
||||
instead of being absolute screen coordinates as they are in
|
||||
.Fn subwin .
|
||||
.Ds
|
||||
.Fn dupwin "WINDOW *win"
|
||||
.De
|
||||
Creates an exact copy of the window
|
||||
.Vn win .
|
||||
.Ds
|
||||
.Fn echo "" \(dg
|
||||
.De
|
||||
Sets the terminal to echo characters.
|
||||
|
@ -562,6 +623,17 @@ This flag
|
|||
(initially 0)
|
||||
retains its value until changed by the user.
|
||||
.Ds
|
||||
.Fn longname "" \(dg
|
||||
.De
|
||||
Returns a string containing the verbose description of the terminal.
|
||||
.Ds
|
||||
.Fn meta "WINDOW *win" "bool bf"
|
||||
.De
|
||||
Manipulates the meta mode on terminals that support this capability.
|
||||
Note that
|
||||
.Vn win
|
||||
is always ignored.
|
||||
.Ds
|
||||
.Fn move "int y" "int x"
|
||||
.De
|
||||
Change the current \*y of the window to
|
||||
|
@ -1038,6 +1110,18 @@ to be put in underscore mode on the terminal
|
|||
This is equivalent to
|
||||
.Fn attron "A_UNDERLINE" .
|
||||
.Ds
|
||||
.Fn ungetch "int c"
|
||||
.De
|
||||
Places the contents of
|
||||
.Vn c
|
||||
converted to a character back into the input queue. Only one
|
||||
character of push back before a subsequent call to
|
||||
.Fn getch
|
||||
or
|
||||
.Fn wgetch
|
||||
is guaranteed to function correctly. The results of attempting more
|
||||
than one character of push back is undefined.
|
||||
.Ds
|
||||
.Fn vwprintw "WINDOW *win" "const char *fmt" "va_list ap"
|
||||
.De
|
||||
Identical to
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: copywin.c,v 1.3 2000/04/20 13:12:14 blymn Exp $ */
|
||||
/* $NetBSD: copywin.c,v 1.4 2000/04/23 14:14:49 blymn Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998-1999 Brett Lymn
|
||||
|
@ -49,8 +49,8 @@ int copywin(const WINDOW *srcwin, WINDOW *dstwin, int sminrow,
|
|||
int starty, startx, endy, endx, x, y, y1, y2, smaxrow, smaxcol;
|
||||
__LDATA *sp, *end;
|
||||
|
||||
smaxrow = sminrow + dmaxrow - dminrow;
|
||||
smaxcol = smincol + dmaxcol - dmincol;
|
||||
smaxrow = min(sminrow + dmaxrow - dminrow, srcwin->maxy - sminrow);
|
||||
smaxcol = min(smincol + dmaxcol - dmincol, srcwin->maxx - smincol);
|
||||
starty = max(sminrow, dminrow);
|
||||
startx = max(smincol, dmincol);
|
||||
endy = min(sminrow + smaxrow, dminrow + dmaxrow);
|
||||
|
@ -58,43 +58,30 @@ int copywin(const WINDOW *srcwin, WINDOW *dstwin, int sminrow,
|
|||
if (starty >= endy || startx >= endx)
|
||||
return (OK);
|
||||
|
||||
if (overlay == TRUE) {
|
||||
/* non destructive copy */
|
||||
#ifdef DEBUG
|
||||
if (overlay == TRUE) {
|
||||
__CTRACE("copywin overlay mode: from (%d,%d) to (%d,%d)\n",
|
||||
starty, startx, endy, endx);
|
||||
#endif
|
||||
y1 = starty - sminrow;
|
||||
y2 = starty - dminrow;
|
||||
for (y = starty; y < endy; y++, y1++, y2++) {
|
||||
end = &srcwin->lines[y1]->line[endx - srcwin->begx];
|
||||
x = startx - dstwin->begx;
|
||||
for (sp = &srcwin->lines[y1]->line[startx - srcwin->begx];
|
||||
sp < end; sp++) {
|
||||
if (!isspace(sp->ch)) {
|
||||
wmove(dstwin, y2, x);
|
||||
__waddch(dstwin, sp);
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
return (OK);
|
||||
} else {
|
||||
/* destructive copy */
|
||||
#ifdef DEBUG
|
||||
__CTRACE("copywin overwrite mode: from (%d,%d) to (%d,%d)\n",
|
||||
starty, startx, endy, endx);
|
||||
#endif
|
||||
x = endx - startx;
|
||||
for (y = starty; y < endy; y++) {
|
||||
(void) memcpy(
|
||||
&dstwin->lines[y - dstwin->begy]->line[startx - dstwin->begx],
|
||||
&srcwin->lines[y - srcwin->begy]->line[startx - srcwin->begx],
|
||||
(size_t) x * __LDATASIZE);
|
||||
__touchline(dstwin, y - dstwin->begy, (int) (startx - dstwin->begx),
|
||||
(int) (endx - dstwin->begx), 0);
|
||||
}
|
||||
return (OK);
|
||||
}
|
||||
|
||||
#endif
|
||||
y1 = starty - sminrow;
|
||||
y2 = starty - dminrow;
|
||||
for (y = starty; y < endy; y++, y1++, y2++) {
|
||||
end = &srcwin->lines[y1]->line[endx - srcwin->begx];
|
||||
x = startx - dstwin->begx;
|
||||
for (sp = &srcwin->lines[y1]->line[startx - srcwin->begx];
|
||||
sp < end; sp++) {
|
||||
if ((!isspace(sp->ch)) || (overlay == FALSE)){
|
||||
wmove(dstwin, y2, x);
|
||||
__waddch(dstwin, sp);
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
return (OK);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: getch.c,v 1.23 2000/04/22 21:14:19 thorpej Exp $ */
|
||||
/* $NetBSD: getch.c,v 1.24 2000/04/23 14:14:49 blymn Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1981, 1993, 1994
|
||||
|
@ -38,7 +38,7 @@
|
|||
#if 0
|
||||
static char sccsid[] = "@(#)getch.c 8.2 (Berkeley) 5/4/94";
|
||||
#else
|
||||
__RCSID("$NetBSD: getch.c,v 1.23 2000/04/22 21:14:19 thorpej Exp $");
|
||||
__RCSID("$NetBSD: getch.c,v 1.24 2000/04/23 14:14:49 blymn Exp $");
|
||||
#endif
|
||||
#endif /* not lint */
|
||||
|
||||
|
@ -568,6 +568,8 @@ wgetch(WINDOW *win)
|
|||
&& win->curx == win->maxx - 1 && win->cury == win->maxy - 1
|
||||
&& __echoit)
|
||||
return (ERR);
|
||||
|
||||
wrefresh(win);
|
||||
#ifdef DEBUG
|
||||
__CTRACE("wgetch: __echoit = %d, __rawmode = %d, flags = %0.2o\n",
|
||||
__echoit, __rawmode, win->flags);
|
||||
|
@ -654,7 +656,6 @@ wgetch(WINDOW *win)
|
|||
if (weset)
|
||||
nocbreak();
|
||||
|
||||
wrefresh(win);
|
||||
return ((inp < 0) || (inp == ERR) ? ERR : inp);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue