summaryrefslogtreecommitdiffstats
path: root/lib/libncurses/lib_box.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1994-10-07 08:58:58 +0000
committerache <ache@FreeBSD.org>1994-10-07 08:58:58 +0000
commita80c0624fbd8bd1c784b0b5b7a0fd20b09d317b9 (patch)
tree4a94ca97fb2fc2fdc1fcdd522a66e39c6e763138 /lib/libncurses/lib_box.c
downloadFreeBSD-src-a80c0624fbd8bd1c784b0b5b7a0fd20b09d317b9.zip
FreeBSD-src-a80c0624fbd8bd1c784b0b5b7a0fd20b09d317b9.tar.gz
Moved from ports with several enhancements
Diffstat (limited to 'lib/libncurses/lib_box.c')
-rw-r--r--lib/libncurses/lib_box.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/lib/libncurses/lib_box.c b/lib/libncurses/lib_box.c
new file mode 100644
index 0000000..ca4e032
--- /dev/null
+++ b/lib/libncurses/lib_box.c
@@ -0,0 +1,131 @@
+
+/* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for *
+* details. If they are missing then this copy is in violation of *
+* the copyright conditions. */
+
+/*
+** lib_box.c
+**
+** line drawing routines:
+** wborder()
+** whline()
+** wvline()
+**
+*/
+
+#include "curses.priv.h"
+
+int wborder(WINDOW *win, chtype ls, chtype rs, chtype ts,
+ chtype bs, chtype tl, chtype tr, chtype bl, chtype br)
+{
+int i;
+int endx, endy;
+
+ T(("wborder() called"));
+
+ if (ls == 0) ls = ACS_VLINE;
+ if (rs == 0) rs = ACS_VLINE;
+ if (ts == 0) ts = ACS_HLINE;
+ if (bs == 0) bs = ACS_HLINE;
+ if (tl == 0) tl = ACS_ULCORNER;
+ if (tr == 0) tr = ACS_URCORNER;
+ if (bl == 0) bl = ACS_LLCORNER;
+ if (br == 0) br = ACS_LRCORNER;
+
+ ls |= win->_attrs;
+ rs |= win->_attrs;
+ ts |= win->_attrs;
+ bs |= win->_attrs;
+ tl |= win->_attrs;
+ tr |= win->_attrs;
+ bl |= win->_attrs;
+ br |= win->_attrs;
+
+ T(("using %x, %x, %x, %x, %x, %x, %x, %x", ls, rs, ts, bs, tl, tr, bl, br));
+
+ endx = win->_maxx;
+ endy = win->_maxy;
+
+ for (i = 0; i <= endx; i++) {
+ win->_line[0][i] = ts;
+ win->_line[endy][i] = bs;
+ }
+ win->_firstchar[endy] = win->_firstchar[0] = 0;
+ win->_lastchar[endy] = win->_lastchar[0] = endx;
+
+ for (i = 0; i <= endy; i++) {
+ win->_line[i][0] = ls;
+ win->_line[i][endx] = rs;
+ win->_firstchar[i] = 0;
+ win->_lastchar[i] = endx;
+ }
+ win->_line[0][0] = tl;
+ win->_line[0][endx] = tr;
+ win->_line[endy][0] = bl;
+ win->_line[endy][endx] = br;
+
+#if 0
+ if (! win->_scroll && (win->_flags & _SCROLLWIN))
+ fp[0] = fp[endx] = lp[0] = lp[endx] = ' ';
+#endif
+
+ return OK;
+}
+
+int whline(WINDOW *win, chtype ch, int n)
+{
+int line;
+int start;
+int end;
+
+ T(("whline(%x,%x,%d) called", win, ch, n));
+
+ line = win->_cury;
+ start = win->_curx;
+ end = start + n - 1;
+ if (end > win->_maxx)
+ end = win->_maxx;
+
+ if (win->_firstchar[line] == _NOCHANGE || win->_firstchar[line] > start)
+ win->_firstchar[line] = start;
+ if (win->_lastchar[line] == _NOCHANGE || win->_lastchar[line] < start)
+ win->_lastchar[line] = end;
+
+ if (ch == 0)
+ ch = ACS_HLINE;
+ while ( end >= start) {
+ win->_line[line][end] = ch | win->_attrs;
+ end--;
+ }
+
+ return OK;
+}
+
+int wvline(WINDOW *win, chtype ch, int n)
+{
+int row, col;
+int end;
+
+ T(("wvline(%x,%x,%d) called", win, ch, n));
+
+ row = win->_cury;
+ col = win->_curx;
+ end = row + n - 1;
+ if (end > win->_maxy)
+ end = win->_maxy;
+
+ if (ch == 0)
+ ch = ACS_VLINE;
+
+ while(end >= row) {
+ win->_line[end][col] = ch | win->_attrs;
+ if (win->_firstchar[end] == _NOCHANGE || win->_firstchar[end] > col)
+ win->_firstchar[end] = col;
+ if (win->_lastchar[end] == _NOCHANGE || win->_lastchar[end] < col)
+ win->_lastchar[end] = col;
+ end--;
+ }
+
+ return OK;
+}
+
OpenPOWER on IntegriCloud