Sync usage with man page.
[netbsd-mini2440.git] / usr.bin / window / cmd5.c
blob80b9942df9e689ae05715d99163fc6df0204acf1
1 /* $NetBSD: cmd5.c,v 1.6 2002/06/14 01:06:52 wiz Exp $ */
3 /*
4 * Copyright (c) 1983, 1993
5 * The Regents of the University of California. All rights reserved.
7 * This code is derived from software contributed to Berkeley by
8 * Edward Wang at The University of California, Berkeley.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. Neither the name of the University nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 * SUCH DAMAGE.
35 #include <sys/cdefs.h>
36 #ifndef lint
37 #if 0
38 static char sccsid[] = "@(#)cmd5.c 8.1 (Berkeley) 6/6/93";
39 #else
40 __RCSID("$NetBSD: cmd5.c,v 1.6 2002/06/14 01:06:52 wiz Exp $");
41 #endif
42 #endif /* not lint */
44 #include "defs.h"
47 * Window movement.
50 void getminmax(int, int, int, int, int *, int *, int *);
52 void
53 c_move(struct ww *w)
55 int col, row;
56 int mincol, minrow;
57 int maxcol, maxrow;
58 int curcol, currow;
60 if (!terse)
61 wwputs("New window position: ", cmdwin);
62 col = w->ww_w.l;
63 row = w->ww_w.t;
64 wwadd(boxwin, framewin->ww_back);
65 for (;;) {
66 wwbox(boxwin, row - 1, col - 1, w->ww_w.nr + 2, w->ww_w.nc + 2);
67 getminmax(row, w->ww_w.nr, 1, wwnrow,
68 &currow, &minrow, &maxrow);
69 getminmax(col, w->ww_w.nc, 0, wwncol,
70 &curcol, &mincol, &maxcol);
71 wwsetcursor(currow, curcol);
72 while (wwpeekc() < 0)
73 wwiomux();
74 switch (getpos(&row, &col, minrow, mincol, maxrow, maxcol)) {
75 case 3:
76 wwunbox(boxwin);
77 wwdelete(boxwin);
78 return;
79 case 2:
80 wwunbox(boxwin);
81 break;
82 case 1:
83 wwunbox(boxwin);
84 case 0:
85 continue;
87 break;
89 wwdelete(boxwin);
90 if (!terse)
91 wwputc('\n', cmdwin);
92 wwcurtowin(cmdwin);
93 movewin(w, row, col);
96 void
97 movewin(struct ww *w, int row, int col)
99 struct ww *back = w->ww_back;
101 w->ww_alt.t = w->ww_w.t;
102 w->ww_alt.l = w->ww_w.l;
103 wwdelete(w);
104 wwmove(w, row, col);
105 wwadd(w, back);
106 reframe();
110 * Weird stufff, don't ask.
112 void
113 getminmax(int x, int n, int a, int b, int *curx, int *minx, int *maxx)
115 if (x < 0)
116 *curx = x + n - 1;
117 else
118 *curx = x;
120 if (x <= a)
121 *minx = 1 - n;
122 else if (x <= b - n)
123 *minx = a;
124 else
125 *minx = b - n;
127 if (x >= b - n)
128 *maxx = b - 1;
129 else if (x >= a)
130 *maxx = b - n;
131 else
132 *maxx = a;