1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1995-1998 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 /* LINTLIBRARY */
28
29 /*
30 * wbrdr_st.c
31 *
32 * XCurses Library
33 *
34 * Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved.
35 *
36 */
37
38 #ifdef M_RCSID
39 #ifndef lint
40 static char rcsID[] = "$Header: /rd/src/libc/xcurses/rcs/wbrdr_st.c 1.6 "
41 "1995/07/07 18:52:43 ant Exp $";
42 #endif
43 #endif
44
45 #include <private.h>
46
47 /*
48 * Draw a border around the edges of the window. The parms correspond to
49 * a character and attribute for the left, right, top, and bottom sides,
50 * top left, top right, bottom left, and bottom right corners. A zero in
51 * any character parm means to take the default.
52 */
53 int
wborder_set(WINDOW * w,const cchar_t * ls,const cchar_t * rs,const cchar_t * ts,const cchar_t * bs,const cchar_t * tl,const cchar_t * tr,const cchar_t * bl,const cchar_t * br)54 wborder_set(WINDOW *w, const cchar_t *ls, const cchar_t *rs,
55 const cchar_t *ts, const cchar_t *bs, const cchar_t *tl,
56 const cchar_t *tr, const cchar_t *bl, const cchar_t *br)
57 {
58 short oflags;
59 int x, y, code;
60
61 code = ERR;
62 x = w->_curx;
63 y = w->_cury;
64
65 oflags = w->_flags & (W_FLUSH | W_SYNC_UP);
66 w->_flags &= ~(W_FLUSH | W_SYNC_UP);
67
68 /* Verticals. */
69 (void) wmove(w, 0, 0);
70 (void) wvline_set(w, ls, w->_maxy);
71 (void) wmove(w, 0, w->_maxx-1);
72 (void) wvline_set(w, rs, w->_maxy);
73
74 /* Horizontals. */
75 (void) wmove(w, 0, 1);
76 (void) whline_set(w, ts, w->_maxx-2);
77 (void) wmove(w, w->_maxy-1, 1);
78 (void) whline_set(w, bs, w->_maxx-2);
79
80 w->_flags |= oflags;
81
82 /* Corners. */
83 if (tl == NULL)
84 tl = WACS_ULCORNER;
85 if (tr == NULL)
86 tr = WACS_URCORNER;
87 if (bl == NULL)
88 bl = WACS_LLCORNER;
89 if (br == NULL)
90 br = WACS_LRCORNER;
91
92 if (__m_cc_replace(w, 0, 0, tl, 0) == -1)
93 goto error;
94 if (__m_cc_replace(w, 0, w->_maxx-1, tr, 0) == -1)
95 goto error;
96 if (__m_cc_replace(w, w->_maxy-1, 0, bl, 0) == -1)
97 goto error;
98 if (__m_cc_replace(w, w->_maxy-1, w->_maxx-1, br, 0) == -1)
99 goto error;
100
101 (void) wmove(w, y, x);
102
103 WSYNC(w);
104
105 code = WFLUSH(w);
106 error:
107 return (code);
108 }
109