X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;ds=sidebyside;f=c%2B%2B%2Fcursesw.cc;h=b61a7056af15a879c64ebc4089a625bf730f844b;hb=c633e5103a29a38532cf1925257b91cea33fd090;hp=b3bd3071c5f218ab2ab410143b1cb4bcde683991;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1;p=ncurses.git diff --git a/c++/cursesw.cc b/c++/cursesw.cc index b3bd3071..b61a7056 100644 --- a/c++/cursesw.cc +++ b/c++/cursesw.cc @@ -19,13 +19,13 @@ modified by Ulrich Drepper (drepper@karlsruhe.gmd.de) and Anatoly Ivasyuk (anatoly@nick.csh.rit.edu) - modified by Juergen Pfeifer (Juergen.Pfeifer@T-Online.de) + modified by Juergen Pfeifer (juergen.pfeifer@gmx.net) */ #include "cursesw.h" #include "internal.h" -MODULE_ID("$Id: cursesw.cc,v 1.10 1997/10/20 21:26:35 juergen Exp $") +MODULE_ID("$Id: cursesw.cc,v 1.17 2000/09/02 18:55:31 tom Exp $") #define COLORS_NEED_INITIALIZATION -1 #define COLORS_NOT_INITIALIZED 0 @@ -36,6 +36,12 @@ MODULE_ID("$Id: cursesw.cc,v 1.10 1997/10/20 21:26:35 juergen Exp $") long NCursesWindow::count = 0L; bool NCursesWindow::b_initialized = FALSE; +#if defined(__GNUG__) +# ifndef _IO_va_list +# define _IO_va_list char * +# endif +#endif + int NCursesWindow::scanw(const char* fmt, ...) { @@ -45,8 +51,8 @@ NCursesWindow::scanw(const char* fmt, ...) char buf[BUFSIZ]; int result = wgetstr(w, buf); if (result == OK) { - strstreambuf ss(buf, BUFSIZ); - result = ss.vscan(fmt, args); + strstreambuf ss(buf, sizeof(buf)); + result = ss.vscan(fmt, (_IO_va_list)args); } va_end(args); return result; @@ -67,8 +73,8 @@ NCursesWindow::scanw(int y, int x, const char* fmt, ...) if (result == OK) { result = wgetstr(w, buf); if (result == OK) { - strstreambuf ss(buf, BUFSIZ); - result = ss.vscan(fmt, args); + strstreambuf ss(buf, sizeof(buf)); + result = ss.vscan(fmt, (_IO_va_list)args); } } va_end(args); @@ -138,7 +144,7 @@ NCursesWindow::initialize() { NCursesWindow::NCursesWindow() { if (!b_initialized) initialize(); - + w = (WINDOW *)0; init(); alloced = FALSE; @@ -166,7 +172,7 @@ NCursesWindow::NCursesWindow(WINDOW* &window) { if (!b_initialized) initialize(); - + w = window; init(); alloced = FALSE; @@ -177,7 +183,7 @@ NCursesWindow::NCursesWindow(WINDOW* &window) NCursesWindow::NCursesWindow(NCursesWindow& win, int l, int c, int begin_y, int begin_x, char absrel) { - if (absrel == 'a') { // absolute origin + if (absrel == 'a') { // absolute origin begin_y -= win.begy(); begin_x -= win.begx(); } @@ -198,7 +204,28 @@ NCursesWindow::NCursesWindow(NCursesWindow& win, int l, int c, alloced = TRUE; count++; } - + +NCursesWindow::NCursesWindow(NCursesWindow& win, + bool do_box NCURSES_PARAM_INIT(TRUE)) +{ + w = :: derwin(win.w,win.height()-2,win.width()-2,1,1); + if (w == 0) { + err_handler("Cannot construct subwindow"); + } + + par = &win; + sib = win.subwins; + win.subwins = this; + subwins = 0; + alloced = TRUE; + count++; + + if (do_box) { + win.box(); + win.touchwin(); + } +} + NCursesWindow NCursesWindow::Clone() { WINDOW *d = ::dupwin(w); NCursesWindow W(d); @@ -317,7 +344,7 @@ int NCursesWindow::colorInitialized = COLORS_NOT_INITIALIZED; void NCursesWindow::useColors(void) { - if (colorInitialized == COLORS_NOT_INITIALIZED) { + if (colorInitialized == COLORS_NOT_INITIALIZED) { if (b_initialized) { if (::has_colors()) { ::start_color(); @@ -332,12 +359,12 @@ NCursesWindow::useColors(void) } short -NCursesWindow::getcolor(int getback) const +NCursesWindow::getcolor(int getback) const { short fore, back; if (colorInitialized==COLORS_ARE_REALLY_THERE) { - if (pair_content(PAIR_NUMBER(w->_attrs), &fore, &back)) + if (pair_content((short)PAIR_NUMBER(w->_attrs), &fore, &back)) err_handler("Can't get color pair"); } else { @@ -357,7 +384,7 @@ int NCursesWindow::NumberOfColors() } short -NCursesWindow::getcolor() const +NCursesWindow::getcolor() const { if (colorInitialized==COLORS_ARE_REALLY_THERE) return PAIR_NUMBER(w->_attrs); @@ -378,7 +405,7 @@ int NCursesWindow::setpalette(short fore, short back) { if (colorInitialized==COLORS_ARE_REALLY_THERE) - return setpalette(fore, back, PAIR_NUMBER(w->_attrs)); + return setpalette(fore, back, (short)PAIR_NUMBER(w->_attrs)); else return OK; } @@ -390,25 +417,18 @@ NCursesWindow::setcolor(short pair) if (colorInitialized==COLORS_ARE_REALLY_THERE) { if ((pair < 1) || (pair > COLOR_PAIRS)) err_handler("Can't set color pair"); - + attroff(A_COLOR); attrset(COLOR_PAIR(pair)); } return OK; } +#if HAVE_HAS_KEY extern "C" int _nc_has_mouse(void); bool NCursesWindow::has_mouse() const { - return ((::has_key(KEY_MOUSE) || ::_nc_has_mouse()) + return ((::has_key(KEY_MOUSE) || ::_nc_has_mouse()) ? TRUE : FALSE); } - -NCursesPad::NCursesPad(int lines, int cols) : NCursesWindow() { - w = ::newpad(lines,cols); - if (w==(WINDOW*)0) { - count--; - err_handler("Cannot construct window"); - } - alloced = TRUE; -} +#endif