diff options
| author | blymn <blymn@NetBSD.org> | 2000-04-23 14:14:49 +0000 |
|---|---|---|
| committer | blymn <blymn@NetBSD.org> | 2000-04-23 14:14:49 +0000 |
| commit | cf5ffc46f20063c856be2e2ec2f8db705ed61d5c (patch) | |
| tree | 62f406041bcaf6186e0bfcf7d2fe2f63fe443522 /lib | |
| parent | 6d972981ff23aff640534634bef56abc91d1a6c6 (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.doc | 84 | ||||
| -rw-r--r-- | lib/libcurses/copywin.c | 51 | ||||
| -rw-r--r-- | lib/libcurses/getch.c | 7 |
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); } |
