1195618Srpaulo/****************************************************************************
2195618Srpaulo * Copyright (c) 1998-2002,2005 Free Software Foundation, Inc.              *
3195618Srpaulo *                                                                          *
4195618Srpaulo * Permission is hereby granted, free of charge, to any person obtaining a  *
5195618Srpaulo * copy of this software and associated documentation files (the            *
6195618Srpaulo * "Software"), to deal in the Software without restriction, including      *
7195618Srpaulo * without limitation the rights to use, copy, modify, merge, publish,      *
8195618Srpaulo * distribute, distribute with modifications, sublicense, and/or sell       *
9195618Srpaulo * copies of the Software, and to permit persons to whom the Software is    *
10195618Srpaulo * furnished to do so, subject to the following conditions:                 *
11195618Srpaulo *                                                                          *
12195618Srpaulo * The above copyright notice and this permission notice shall be included  *
13195618Srpaulo * in all copies or substantial portions of the Software.                   *
14195618Srpaulo *                                                                          *
15195618Srpaulo * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
16195618Srpaulo * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
17195618Srpaulo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
18195618Srpaulo * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
19195618Srpaulo * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
20195618Srpaulo * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
21195618Srpaulo * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
22195618Srpaulo *                                                                          *
23195618Srpaulo * Except as contained in this notice, the name(s) of the above copyright   *
24195618Srpaulo * holders shall not be used in advertising or otherwise to promote the     *
25195618Srpaulo * sale, use or other dealings in this Software without prior written       *
26195618Srpaulo * authorization.                                                           *
27195618Srpaulo ****************************************************************************/
28195618Srpaulo
29195618Srpaulo/****************************************************************************
30195618Srpaulo *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               *
31195618Srpaulo *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         *
32195618Srpaulo *     and: Thomas E. Dickey                        1996-on                 *
33195618Srpaulo *     and: Sven Verdoolaege                        2001                    *
34195618Srpaulo ****************************************************************************/
35195618Srpaulo
36195618Srpaulo/*
37195618Srpaulo**	lib_box.c
38195618Srpaulo**
39195618Srpaulo**	The routine wborder().
40195618Srpaulo**
41195618Srpaulo*/
42195618Srpaulo
43195618Srpaulo#include <curses.priv.h>
44195618Srpaulo
45195618SrpauloMODULE_ID("$Id: lib_box.c,v 1.22 2005/11/26 15:39:42 tom Exp $")
46195618Srpaulo
47195618Srpaulo#if USE_WIDEC_SUPPORT
48195618Srpaulostatic NCURSES_INLINE chtype
49195618Srpaulo_my_render(WINDOW *win, chtype ch)
50195618Srpaulo{
51195618Srpaulo    NCURSES_CH_T wch;
52195618Srpaulo    SetChar2(wch, ch);
53195618Srpaulo    wch = _nc_render(win, wch);
54195618Srpaulo    return CharOf(wch) | AttrOf(wch);
55195618Srpaulo}
56195618Srpaulo#define RENDER_WITH_DEFAULT(ch,def) w ## ch = _my_render(win, (ch == 0) ? def : ch)
57195618Srpaulo#else
58195618Srpaulo#define RENDER_WITH_DEFAULT(ch,def) w ## ch = _nc_render(win, (ch == 0) ? def : ch)
59195618Srpaulo#endif
60195618Srpaulo
61195618SrpauloNCURSES_EXPORT(int)
62195618Srpaulowborder(WINDOW *win,
63195618Srpaulo	chtype ls, chtype rs,
64195618Srpaulo	chtype ts, chtype bs,
65195618Srpaulo	chtype tl, chtype tr,
66195618Srpaulo	chtype bl, chtype br)
67195618Srpaulo{
68195618Srpaulo    NCURSES_SIZE_T i;
69195618Srpaulo    NCURSES_SIZE_T endx, endy;
70195618Srpaulo    chtype wls, wrs, wts, wbs, wtl, wtr, wbl, wbr;
71195618Srpaulo
72195618Srpaulo    T((T_CALLED("wborder(%p,%s,%s,%s,%s,%s,%s,%s,%s)"),
73195618Srpaulo       win,
74195618Srpaulo       _tracechtype2(1, ls),
75195618Srpaulo       _tracechtype2(2, rs),
76195618Srpaulo       _tracechtype2(3, ts),
77195618Srpaulo       _tracechtype2(4, bs),
78195618Srpaulo       _tracechtype2(5, tl),
79195618Srpaulo       _tracechtype2(6, tr),
80195618Srpaulo       _tracechtype2(7, bl),
81195618Srpaulo       _tracechtype2(8, br)));
82195618Srpaulo
83195618Srpaulo    if (!win)
84195618Srpaulo	returnCode(ERR);
85195618Srpaulo
86195618Srpaulo    RENDER_WITH_DEFAULT(ls, ACS_VLINE);
87195618Srpaulo    RENDER_WITH_DEFAULT(rs, ACS_VLINE);
88195618Srpaulo    RENDER_WITH_DEFAULT(ts, ACS_HLINE);
89195618Srpaulo    RENDER_WITH_DEFAULT(bs, ACS_HLINE);
90195618Srpaulo    RENDER_WITH_DEFAULT(tl, ACS_ULCORNER);
91195618Srpaulo    RENDER_WITH_DEFAULT(tr, ACS_URCORNER);
92195618Srpaulo    RENDER_WITH_DEFAULT(bl, ACS_LLCORNER);
93195618Srpaulo    RENDER_WITH_DEFAULT(br, ACS_LRCORNER);
94195618Srpaulo
95195618Srpaulo    T(("using %s, %s, %s, %s, %s, %s, %s, %s",
96195618Srpaulo       _tracechtype2(1, wls),
97195618Srpaulo       _tracechtype2(2, wrs),
98195618Srpaulo       _tracechtype2(3, wts),
99195618Srpaulo       _tracechtype2(4, wbs),
100195618Srpaulo       _tracechtype2(5, wtl),
101195618Srpaulo       _tracechtype2(6, wtr),
102195618Srpaulo       _tracechtype2(7, wbl),
103195618Srpaulo       _tracechtype2(8, wbr)));
104195618Srpaulo
105195618Srpaulo    endx = win->_maxx;
106195618Srpaulo    endy = win->_maxy;
107195618Srpaulo
108195618Srpaulo    for (i = 0; i <= endx; i++) {
109195618Srpaulo	SetChar2(win->_line[0].text[i], wts);
110195618Srpaulo	SetChar2(win->_line[endy].text[i], wbs);
111195618Srpaulo    }
112195618Srpaulo    win->_line[endy].firstchar = win->_line[0].firstchar = 0;
113195618Srpaulo    win->_line[endy].lastchar = win->_line[0].lastchar = endx;
114195618Srpaulo
115195618Srpaulo    for (i = 0; i <= endy; i++) {
116195618Srpaulo	SetChar2(win->_line[i].text[0], wls);
117195618Srpaulo	SetChar2(win->_line[i].text[endx], wrs);
118195618Srpaulo	win->_line[i].firstchar = 0;
119195618Srpaulo	win->_line[i].lastchar = endx;
120195618Srpaulo    }
121195618Srpaulo    SetChar2(win->_line[0].text[0], wtl);
122195618Srpaulo    SetChar2(win->_line[0].text[endx], wtr);
123195618Srpaulo    SetChar2(win->_line[endy].text[0], wbl);
124195618Srpaulo    SetChar2(win->_line[endy].text[endx], wbr);
125195618Srpaulo
126195618Srpaulo    _nc_synchook(win);
127195618Srpaulo    returnCode(OK);
128195618Srpaulo}
129195618Srpaulo