|
|
1.1 root 1: #include <curses.h>
2: #include "mucurses.h"
3: #include "cursor.h"
4:
5: /** @file
6: *
7: * MuCurses edging functions
8: *
9: */
10:
11: /**
12: * Draw borders from single-byte characters and renditions around a
13: * window
14: *
15: * @v *win window to be bordered
16: * @v verch vertical chtype
17: * @v horch horizontal chtype
18: * @ret rc return status code
19: */
20: int box ( WINDOW *win, chtype verch, chtype horch ) {
21: chtype corner = '+' | win->attrs; /* default corner character */
22: return wborder( win, verch, verch, horch, horch,
23: corner, corner, corner, corner );
24: }
25:
26: /**
27: * Draw borders from single-byte characters and renditions around a
28: * window
29: *
30: * @v *win window to be bordered
31: * @v ls left side
32: * @v rs right side
33: * @v ts top
34: * @v bs bottom
35: * @v tl top left corner
36: * @v tr top right corner
37: * @v bl bottom left corner
38: * @v br bottom right corner
39: * @ret rc return status code
40: */
41: int wborder ( WINDOW *win, chtype ls, chtype rs,
42: chtype ts, chtype bs, chtype tl,
43: chtype tr, chtype bl, chtype br ) {
44: struct cursor_pos pos;
45:
46: _store_curs_pos( win, &pos );
47: wmove(win,0,0);
48:
49: _wputch(win,tl,WRAP);
50: while ( ( win->width - 1 ) - win->curs_x ) {
51: _wputch(win,ts,WRAP);
52: }
53: _wputch(win,tr,WRAP);
54:
55: while ( ( win->height - 1 ) - win->curs_y ) {
56: _wputch(win,ls,WRAP);
57: wmove(win,win->curs_y,(win->width)-1);
58: _wputch(win,rs,WRAP);
59: }
60:
61: _wputch(win,bl,WRAP);
62: while ( ( win->width -1 ) - win->curs_x ) {
63: _wputch(win,bs,WRAP);
64: }
65: _wputch(win,br,NOWRAP); /* do not wrap last char to leave
66: cursor in last position */
67: _restore_curs_pos( win, &pos );
68:
69: return OK;
70: }
71:
72: /**
73: * Create a horizontal line in a window
74: *
75: * @v *win subject window
76: * @v ch rendition and character
77: * @v n max number of chars (wide) to render
78: * @ret rc return status code
79: */
80: int whline ( WINDOW *win, chtype ch, int n ) {
81: struct cursor_pos pos;
82:
83: _store_curs_pos ( win, &pos );
84: while ( ( win->curs_x - win->width ) && n-- ) {
85: _wputch ( win, ch, NOWRAP );
86: }
87: _restore_curs_pos ( win, &pos );
88:
89: return OK;
90: }
91:
92: /**
93: * Create a vertical line in a window
94: *
95: * @v *win subject window
96: * @v ch rendition and character
97: * @v n max number of chars (high) to render
98: * @ret rc return status code
99: */
100: int wvline ( WINDOW *win, chtype ch, int n ) {
101: struct cursor_pos pos;
102:
103: _store_curs_pos ( win, &pos );
104: while ( ( win->curs_y - win->height ) && n-- ) {
105: _wputch ( win, ch, NOWRAP );
106: wmove( win, ++(win->curs_y), pos.x);
107: }
108: _restore_curs_pos ( win, &pos );
109:
110: return OK;
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.