123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #include <curses.h>
- #include "core.h"
- #include "cursor.h"
-
- /** @file
- *
- * MuCurses edging functions
- *
- */
-
- /**
- * Draw borders from single-byte characters and renditions around a
- * window
- *
- * @v *win window to be bordered
- * @v verch vertical chtype
- * @v horch horizontal chtype
- * @ret rc return status code
- */
- int box ( WINDOW *win, chtype verch, chtype horch ) {
- chtype corner = '+' | win->attrs; /* default corner character */
- return wborder( win, verch, verch, horch, horch,
- corner, corner, corner, corner );
- }
-
- /**
- * Draw borders from single-byte characters and renditions around a
- * window
- *
- * @v *win window to be bordered
- * @v ls left side
- * @v rs right side
- * @v ts top
- * @v bs bottom
- * @v tl top left corner
- * @v tr top right corner
- * @v bl bottom left corner
- * @v br bottom right corner
- * @ret rc return status code
- */
- int wborder ( WINDOW *win, chtype ls, chtype rs,
- chtype ts, chtype bs, chtype tl,
- chtype tr, chtype bl, chtype br ) {
- struct cursor_pos pos;
-
- _store_curs_pos( win, &pos );
- wmove(win,0,0);
-
- _wputch(win,tl,WRAP);
- while ( ( win->width - 1 ) - win->curs_x ) {
- _wputch(win,ts,WRAP);
- }
- _wputch(win,tr,WRAP);
-
- while ( ( win->height - 1 ) - win->curs_y ) {
- _wputch(win,ls,WRAP);
- wmove(win,win->curs_y,(win->width)-1);
- _wputch(win,rs,WRAP);
- }
-
- _wputch(win,bl,WRAP);
- while ( ( win->width -1 ) - win->curs_x ) {
- _wputch(win,bs,WRAP);
- }
- _wputch(win,br,NOWRAP); /* do not wrap last char to leave
- cursor in last position */
- _restore_curs_pos( win, &pos );
-
- return OK;
- }
-
- /**
- * Create a horizontal line in a window
- *
- * @v *win subject window
- * @v ch rendition and character
- * @v n max number of chars (wide) to render
- * @ret rc return status code
- */
- int whline ( WINDOW *win, chtype ch, int n ) {
- struct cursor_pos pos;
-
- _store_curs_pos ( win, &pos );
- while ( ( win->curs_x - win->width ) && n-- ) {
- _wputch ( win, ch, NOWRAP );
- }
- _restore_curs_pos ( win, &pos );
-
- return OK;
- }
-
- /**
- * Create a vertical line in a window
- *
- * @v *win subject window
- * @v ch rendition and character
- * @v n max number of chars (high) to render
- * @ret rc return status code
- */
- int wvline ( WINDOW *win, chtype ch, int n ) {
- struct cursor_pos pos;
-
- _store_curs_pos ( win, &pos );
- while ( ( win->curs_y - win->height ) && n-- ) {
- _wputch ( win, ch, NOWRAP );
- wmove( win, ++(win->curs_y), pos.x);
- }
- _restore_curs_pos ( win, &pos );
-
- return OK;
- }
|