BSD 4_3 release
[unix-history] / usr / src / usr.lib / libcurses / mvwin.c
index 8a57ab1..e49f83b 100644 (file)
@@ -1,19 +1,51 @@
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)mvwin.c    5.1 (Berkeley) 6/7/85";
+#endif not lint
+
 # include      "curses.ext"
 
 /*
  * relocate the starting position of a window
  *
 # include      "curses.ext"
 
 /*
  * relocate the starting position of a window
  *
- * 1/26/81 (Berkeley) @(#)mvwin.c      1.1
  */
 
 mvwin(win, by, bx)
 reg WINDOW     *win;
 reg int                by, bx; {
 
  */
 
 mvwin(win, by, bx)
 reg WINDOW     *win;
 reg int                by, bx; {
 
+       register WINDOW *orig;
+       register int    dy, dx;
+
        if (by + win->_maxy > LINES || bx + win->_maxx > COLS)
                return ERR;
        if (by + win->_maxy > LINES || bx + win->_maxx > COLS)
                return ERR;
-       win->_begy = by;
-       win->_begx = bx;
+       dy = by - win->_begy;
+       dx = bx - win->_begx;
+       orig = win->_orig;
+       if (orig == NULL) {
+               orig = win;
+               do {
+                       win->_begy += dy;
+                       win->_begx += dx;
+                       _swflags_(win);
+                       win = win->_nextp;
+               } while (win != orig);
+       }
+       else {
+               if (by < orig->_begy || win->_maxy + dy > orig->_maxy)
+                       return ERR;
+               if (bx < orig->_begx || win->_maxx + dx > orig->_maxx)
+                       return ERR;
+               win->_begy = by;
+               win->_begx = bx;
+               _swflags_(win);
+               _set_subwin_(orig, win);
+       }
        touchwin(win);
        return OK;
 }
        touchwin(win);
        return OK;
 }