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, by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27 /*
28 * wbrdr_st.c
29 *
30 * XCurses Library
31 *
32 * Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved.
33 *
34 */
35
36 #ifdef M_RCSID
37 #ifndef lint
38 static char rcsID[] = "$Header: /rd/src/libc/xcurses/rcs/wbrdr_st.c 1.6 1995/07/07 18:52:43 ant Exp $";
39 #endif
40 #endif
41
42 #include <private.h>
43
44 /*f
45 * Draw a border around the edges of the window. The parms correspond to
46 * a character and attribute for the left, right, top, and bottom sides,
47 * top left, top right, bottom left, and bottom right corners. A zero in
48 * any character parm means to take the default.
49 */
50 int
wborder_set(w,ls,rs,ts,bs,tl,tr,bl,br)51 wborder_set(w, ls, rs, ts, bs, tl, tr, bl, br)
52 WINDOW *w;
53 const cchar_t *ls, *rs, *ts, *bs, *tl, *tr, *bl, *br;
54 {
55 short oflags;
56 int x, y, code;
57
58 #ifdef M_CURSES_TRACE
59 __m_trace(
60 "wborder_set(%p, %p, %p, %p, %p, %p, %p, %p, %p)",
61 w, ls, rs, ts, bs, tl, tr, bl, br
62 );
63 #endif
64
65 code = ERR;
66 x = w->_curx;
67 y = w->_cury;
68
69 oflags = w->_flags & (W_FLUSH | W_SYNC_UP);
70 w->_flags &= ~(W_FLUSH | W_SYNC_UP);
71
72 /* Verticals. */
73 (void) wmove(w, 0, 0);
74 (void) wvline_set(w, ls, w->_maxy);
75 (void) wmove(w, 0, w->_maxx-1);
76 (void) wvline_set(w, rs, w->_maxy);
77
78 /* Horizontals. */
79 (void) wmove(w, 0, 1);
80 (void) whline_set(w, ts, w->_maxx-2);
81 (void) wmove(w, w->_maxy-1, 1);
82 (void) whline_set(w, bs, w->_maxx-2);
83
84 w->_flags |= oflags;
85
86 /* Corners. */
87 if (tl == (const cchar_t *) 0)
88 tl = WACS_ULCORNER;
89 if (tr == (const cchar_t *) 0)
90 tr = WACS_URCORNER;
91 if (bl == (const cchar_t *) 0)
92 bl = WACS_LLCORNER;
93 if (br == (const cchar_t *) 0)
94 br = WACS_LRCORNER;
95
96 if (__m_cc_replace(w, 0, 0, tl, 0) == -1)
97 goto error;
98 if (__m_cc_replace(w, 0, w->_maxx-1, tr, 0) == -1)
99 goto error;
100 if (__m_cc_replace(w, w->_maxy-1, 0, bl, 0) == -1)
101 goto error;
102 if (__m_cc_replace(w, w->_maxy-1, w->_maxx-1, br, 0) == -1)
103 goto error;
104
105 (void) wmove(w, y, x);
106
107 WSYNC(w);
108
109 code = WFLUSH(w);
110 error:
111 return __m_return_code("wborder_set", code);
112 }
113
114