https://invisible-island.net/ncurses/man/
curs_border_set(3x) Library calls curs_border_set(3x)
       border_set,  wborder_set,  box_set, hline_set, whline_set, mvhline_set,
       mvwhline_set, vline_set, wvline_set, mvvline_set, mvwvline_set  -  draw
       borders and lines in a curses window of wide characters
       #include <curses.h>
       int border_set(const cchar_t *ls, const cchar_t *rs,
             const cchar_t *ts, const cchar_t *bs,
             const cchar_t *tl, const cchar_t *tr,
             const cchar_t *bl, const cchar_t *br);
       int wborder_set(WINDOW *win,
             const cchar_t *ls, const cchar_t *rs,
             const cchar_t *ts, const cchar_t *bs,
             const cchar_t *tl, const cchar_t *tr,
             const cchar_t *bl, const cchar_t *br);
       int box_set(WINDOW *win, const cchar_t *verch,
             const cchar_t *horch);
       int hline_set(const cchar_t *wch, int n);
       int whline_set(WINDOW *win, const cchar_t *wch, int n);
       int mvhline_set(int y, int x, const cchar_t *wch, int n);
       int mvwhline_set(WINDOW *win, int y, int x,
             const cchar_t *wch, int n);
       int vline_set(const cchar_t *wch, int n);
       int wvline_set(WINDOW *win, const cchar_t *wch, int n);
       int mvvline_set(int y, int x, const cchar_t *wch, int n);
       int mvwvline_set(WINDOW *win, int y, int x,
             const cchar_t *wch, int n);
       The border_set and wborder_set functions draw a border around the edges
       of  the current or specified window.  These functions do not change the
       cursor position, and do not wrap.
       Other than the window,  each  argument  is  a  complex  character  with
       attributes:
              ls - left side,
              rs - right side,
              ts - top side,
              bs - bottom side,
              tl - top left-hand corner,
              tr - top right-hand corner,
              bl - bottom left-hand corner, and
              br - bottom right-hand corner.
       If  any  of  these  arguments  is  zero, then the corresponding default
       values (defined in curses.h) are used instead:
              WACS_VLINE,
              WACS_VLINE,
              WACS_HLINE,
              WACS_HLINE,
              WACS_ULCORNER,
              WACS_URCORNER,
              WACS_LLCORNER, and
              WACS_LRCORNER.
       box_set(win, verch, horch); is a shorthand for the following call:
       wborder_set(win, verch, verch,
           horch, horch, NULL, NULL, NULL, NULL);
       The *line_set functions use wch to draw a line starting at the  current
       cursor  position  in the window.  The line is at most n characters long
       or as many as fit into the window.  The current cursor position is  not
       changed.
       The hline_set, mvhline_set, mvwhline_set, and whline_set functions draw
       a line proceeding toward the last column of the same line.
       The vline_set, mvvline_set, mvwvline_set, and wvline_set functions draw
       a line proceeding toward the last line of the window.
       Upon successful completion, these functions return OK.  Otherwise, they
       return ERR.
       Functions using a window parameter return ERR if it is null.
       Functions  prefixed with "mv" first perform cursor movement and fail if
       the position (y, x) is outside the window boundaries.
       border_set,   hline_set,   mvhline_set,   mvvline_set,    mvwhline_set,
       mvwvline_set, and vline_set may be implemented as macros.
       X/Open Curses Issue 4 describes these functions.  It specifies no error
       conditions for them.
       X/Open Curses Issue 4 (1995) initially specified these functions.
       curses(3x), curs_add_wch(3x), curs_border(3x), curs_outopts(3x)
ncurses 6.5                       2025-10-20               curs_border_set(3x)