/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright 2020 Thomas E. Dickey *
+ * Copyright 1998-2016,2017 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 *
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ * and: Thomas E. Dickey 1996-on *
+ * and: Sven Verdoolaege 2001 *
****************************************************************************/
-
-
/*
** lib_vline.c
**
#include <curses.priv.h>
-MODULE_ID("$Id: lib_vline.c,v 1.4 1998/06/28 00:10:12 tom Exp $")
+MODULE_ID("$Id: lib_vline.c,v 1.15 2020/02/02 23:34:34 tom Exp $")
-int wvline(WINDOW *win, chtype ch, int n)
+NCURSES_EXPORT(int)
+wvline(WINDOW *win, chtype ch, int n)
{
-int code = ERR;
-short row, col;
-short end;
+ int code = ERR;
- T((T_CALLED("wvline(%p,%s,%d)"), win, _tracechtype(ch), n));
+ T((T_CALLED("wvline(%p,%s,%d)"), (void *) win, _tracechtype(ch), n));
- if (win) {
- row = win->_cury;
- col = win->_curx;
- end = row + n - 1;
- if (end > win->_maxy)
- end = win->_maxy;
+ if (win) {
+ NCURSES_CH_T wch;
+ int row = win->_cury;
+ int col = win->_curx;
+ int end = row + n - 1;
- if (ch == 0)
- ch = ACS_VLINE;
- ch = _nc_render(win, ch);
+ if (end > win->_maxy)
+ end = win->_maxy;
- while(end >= row) {
- struct ldat *line = &(win->_line[end]);
- line->text[col] = ch;
- CHANGED_CELL(line, col);
- end--;
- }
+ if (ch == 0)
+ SetChar2(wch, ACS_VLINE);
+ else
+ SetChar2(wch, ch);
+ wch = _nc_render(win, wch);
- _nc_synchook(win);
- code = OK;
+ while (end >= row) {
+ struct ldat *line = &(win->_line[end]);
+#if USE_WIDEC_SUPPORT
+ if (col > 0 && isWidecExt(line->text[col])) {
+ SetChar2(line->text[col - 1], ' ');
+ }
+ if (col < win->_maxx && isWidecExt(line->text[col + 1])) {
+ SetChar2(line->text[col + 1], ' ');
+ }
+#endif
+ line->text[col] = wch;
+ CHANGED_CELL(line, col);
+ end--;
}
- returnCode(code);
+
+ _nc_synchook(win);
+ code = OK;
+ }
+ returnCode(code);
}