summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorblymn <blymn@NetBSD.org>2000-04-23 14:14:49 +0000
committerblymn <blymn@NetBSD.org>2000-04-23 14:14:49 +0000
commitcf5ffc46f20063c856be2e2ec2f8db705ed61d5c (patch)
tree62f406041bcaf6186e0bfcf7d2fe2f63fe443522 /lib
parent6d972981ff23aff640534634bef56abc91d1a6c6 (diff)
* 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.
Diffstat (limited to 'lib')
-rw-r--r--lib/libcurses/PSD.doc/fns.doc84
-rw-r--r--lib/libcurses/copywin.c51
-rw-r--r--lib/libcurses/getch.c7
3 files changed, 107 insertions, 35 deletions
diff --git a/lib/libcurses/PSD.doc/fns.doc b/lib/libcurses/PSD.doc/fns.doc
index 71e4986542f..2cac1ac3da1 100644
--- a/lib/libcurses/PSD.doc/fns.doc
+++ b/lib/libcurses/PSD.doc/fns.doc
@@ -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
diff --git a/lib/libcurses/copywin.c b/lib/libcurses/copywin.c
index bf497c5f144..48318e0fa31 100644
--- a/lib/libcurses/copywin.c
+++ b/lib/libcurses/copywin.c
@@ -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);
+ 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);
}
+ return (OK);
}
diff --git a/lib/libcurses/getch.c b/lib/libcurses/getch.c
index 53776cdce82..d0e8ef5d229 100644
--- a/lib/libcurses/getch.c
+++ b/lib/libcurses/getch.c
@@ -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);
}