.\"***************************************************************************
.\" Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.              *
.\"                                                                          *
.\" Permission is hereby granted, free of charge, to any person obtaining a  *
.\" copy of this software and associated documentation files (the            *
.\" "Software"), to deal in the Software without restriction, including      *
.\" without limitation the rights to use, copy, modify, merge, publish,      *
.\" distribute, distribute with modifications, sublicense, and/or sell       *
.\" copies of the Software, and to permit persons to whom the Software is    *
.\" furnished to do so, subject to the following conditions:                 *
.\"                                                                          *
.\" The above copyright notice and this permission notice shall be included  *
.\" in all copies or substantial portions of the Software.                   *
.\"                                                                          *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
.\"                                                                          *
.\" Except as contained in this notice, the name(s) of the above copyright   *
.\" holders shall not be used in advertising or otherwise to promote the     *
.\" sale, use or other dealings in this Software without prior written       *
.\" authorization.                                                           *
.\"***************************************************************************
.\"
.\" $Id: curs_border.3x,v 1.19 2007/02/24 16:15:38 tom Exp $
.TH curs_border 3X ""
.na
.hy 0
.SH NAME
\fBborder\fR,
\fBwborder\fR,
\fBbox\fR,
\fBhline\fR,
\fBwhline\fR,
\fBvline\fR,
\fBwvline\fR,
\fBmvhline\fR,
\fBmvwhline\fR,
\fBmvvline\fR,
\fBmvwvline\fR - create \fBcurses\fR borders, horizontal and vertical lines
.ad
.hy
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
\fBint border(chtype ls, chtype rs, chtype ts, chtype bs,\fR
   \fBchtype tl, chtype tr, chtype bl, chtype br);\fR
.br
\fBint wborder(WINDOW *win, chtype ls, chtype rs,\fR
   \fBchtype ts, chtype bs, chtype tl, chtype tr,\fR
   \fBchtype bl, chtype br);\fR
.br
\fBint box(WINDOW *win, chtype verch, chtype horch);\fR
.br
\fBint hline(chtype ch, int n);\fR
.br
\fBint whline(WINDOW *win, chtype ch, int n);\fR
.br
\fBint vline(chtype ch, int n);\fR
.br
\fBint wvline(WINDOW *win, chtype ch, int n);\fR
.br
\fBint mvhline(int y, int x, chtype ch, int n);\fR
.br
\fBint mvwhline(WINDOW *, int y, int x, chtype ch, int n);\fR
.br
\fBint mvvline(int y, int x, chtype ch, int n);\fR
.br
\fBint mvwvline(WINDOW *, int y, int x, chtype ch, int n);\fR
.br
.SH DESCRIPTION
The \fBborder\fR, \fBwborder\fR and \fBbox\fR routines
draw a box around the edges of a window.
Other than the window, each argument is a character with attributes:
.sp
.RS
\fIls\fR - left side,
.br
\fIrs\fR - right side,
.br
\fIts\fR - top side,
.br
\fIbs\fR - bottom side,
.br
\fItl\fR - top left-hand corner,
.br
\fItr\fR - top right-hand corner,
.br
\fIbl\fR - bottom left-hand corner, and
.br
\fIbr\fR - bottom right-hand corner.
.RE
.PP
If any of these arguments is zero, then the corresponding
default values (defined in \fBcurses.h\fR) are used instead:
.sp
.RS
\fBACS_VLINE\fR,
.br
\fBACS_VLINE\fR,
.br
\fBACS_HLINE\fR,
.br
\fBACS_HLINE\fR,
.br
\fBACS_ULCORNER\fR,
.br
\fBACS_URCORNER\fR,
.br
\fBACS_LLCORNER\fR,
.br
\fBACS_LRCORNER\fR.
.RE
.PP
\fBbox(\fR\fIwin\fR\fB, \fR\fIverch\fR\fB, \fR\fIhorch\fR\fB)\fR is a shorthand
for the following call: \fBwborder(\fR\fIwin\fR\fB,\fR \fIverch\fR\fB,\fR
\fIverch\fR\fB,\fR \fIhorch\fR\fB,\fR \fIhorch\fR\fB, 0, 0, 0, 0)\fR.
.PP
The \fBhline\fR and \fBwhline\fR functions draw a horizontal (left to right)
line using \fIch\fR starting at the current cursor position in the window.  The
current cursor position is not changed.  The line is at most \fIn\fR characters
long, or as many as fit into the window.
.PP
The \fBvline\fR and \fBwvline\fR functions draw a vertical (top to bottom) line
using \fIch\fR starting at the current cursor position in the window.  The
current cursor position is not changed.  The line is at most \fIn\fR characters
long, or as many as fit into the window.
.SH RETURN VALUE
All routines return the integer \fBOK\fR.  The SVr4.0 manual says "or a
non-negative integer if \fBimmedok\fR is set", but this appears to be an error.
.PP
X/Open does not define any error conditions.
This implementation returns an error
if the window pointer is null.
.SH NOTES
The borders generated by these functions are \fIinside\fR borders (this
is also true of SVr4 curses, though the fact is not documented).
.PP
Note that \fBborder\fR and \fBbox\fR may be macros.
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4.
The standard specifies that they return \fBERR\fR on failure,
but specifies no error conditions.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_outopts\fR(3X).
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
.\"# mode:nroff
.\"# fill-column:79
.\"# End:
