xref: /original-bsd/lib/libcurses/mvwin.c (revision a141c157)
1 /*
2  * Copyright (c) 1981 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that the above copyright notice and this paragraph are
7  * duplicated in all such forms and that any documentation,
8  * advertising materials, and other materials related to such
9  * distribution and use acknowledge that the software was developed
10  * by the University of California, Berkeley.  The name of the
11  * University may not be used to endorse or promote products derived
12  * from this software without specific prior written permission.
13  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16  */
17 
18 #ifndef lint
19 static char sccsid[] = "@(#)mvwin.c	5.3 (Berkeley) 06/30/88";
20 #endif /* not lint */
21 
22 # include	"curses.ext"
23 
24 /*
25  * relocate the starting position of a window
26  *
27  */
28 
29 mvwin(win, by, bx)
30 reg WINDOW	*win;
31 reg int		by, bx; {
32 
33 	register WINDOW	*orig;
34 	register int	dy, dx;
35 
36 	if (by + win->_maxy > LINES || bx + win->_maxx > COLS)
37 		return ERR;
38 	dy = by - win->_begy;
39 	dx = bx - win->_begx;
40 	orig = win->_orig;
41 	if (orig == NULL) {
42 		orig = win;
43 		do {
44 			win->_begy += dy;
45 			win->_begx += dx;
46 			_swflags_(win);
47 			win = win->_nextp;
48 		} while (win != orig);
49 	}
50 	else {
51 		if (by < orig->_begy || win->_maxy + dy > orig->_maxy)
52 			return ERR;
53 		if (bx < orig->_begx || win->_maxx + dx > orig->_maxx)
54 			return ERR;
55 		win->_begy = by;
56 		win->_begx = bx;
57 		_swflags_(win);
58 		_set_subwin_(orig, win);
59 	}
60 	touchwin(win);
61 	return OK;
62 }
63