X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=c%2B%2B%2Fcursesw.cc;h=16438770d47aaf178a92b0d52ddbb956efb7d407;hp=acf9ce94b0ae47a3bc3c7ac37d1499b2eeaab06f;hb=5c085efbe35681c3847b3ced598635f083810865;hpb=1559c1ba9c1d51764c46cb99be22a14deea5ce60 diff --git a/c++/cursesw.cc b/c++/cursesw.cc index acf9ce94..16438770 100644 --- a/c++/cursesw.cc +++ b/c++/cursesw.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 2007 Free Software Foundation, Inc. * + * Copyright (c) 2007-2012,2014 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 * @@ -42,7 +42,7 @@ #include "internal.h" #include "cursesw.h" -MODULE_ID("$Id: cursesw.cc,v 1.46 2007/01/27 22:31:12 tom Exp $") +MODULE_ID("$Id: cursesw.cc,v 1.54 2014/02/01 22:10:42 tom Exp $") #define COLORS_NEED_INITIALIZATION -1 #define COLORS_NOT_INITIALIZED 0 @@ -84,6 +84,29 @@ NCursesWindow::scanw(int y, int x, const char* fmt, ...) } +int +NCursesWindow::scanw(const char* fmt, va_list args) +{ + int result = ERR; + + result = ::vw_scanw (w, const_cast(fmt), args); + + return result; +} + + +int +NCursesWindow::scanw(int y, int x, const char* fmt, va_list args) +{ + int result = ERR; + + if (::wmove(w, y, x) != ERR) { + result = ::vw_scanw (w, const_cast(fmt), args); + } + return result; +} + + int NCursesWindow::printw(const char * fmt, ...) { @@ -109,6 +132,25 @@ NCursesWindow::printw(int y, int x, const char * fmt, ...) } +int +NCursesWindow::printw(const char * fmt, va_list args) +{ + int result = ::vw_printw(w, fmt, args); + return result; +} + + +int +NCursesWindow::printw(int y, int x, const char * fmt, va_list args) +{ + int result = ::wmove(w, y, x); + if (result == OK) { + result = ::vw_printw(w, fmt, args); + } + return result; +} + + void NCursesWindow::set_keyboard(void) { @@ -150,7 +192,6 @@ NCursesWindow::NCursesWindow() constructing(); w = static_cast(0); - set_keyboard(); } NCursesWindow::NCursesWindow(int nlines, int ncols, int begin_y, int begin_x) @@ -165,12 +206,17 @@ NCursesWindow::NCursesWindow(int nlines, int ncols, int begin_y, int begin_x) set_keyboard(); } -NCursesWindow::NCursesWindow(WINDOW* &window) +NCursesWindow::NCursesWindow(WINDOW* window) : w(0), alloced(FALSE), par(0), subwins(0), sib(0) { constructing(); - w = window; + // We used to use a reference on the "window" parameter, but we cannot do + // that with an opaque pointer (see NCURSES_OPAQUE). If the parameter was + // "::stdscr", that is first set via the "constructing() call, and is null + // up to that point. So we allow a null pointer here as meaning the "same" + // as "::stdscr". + w = window ? window : ::stdscr; set_keyboard(); } @@ -238,19 +284,19 @@ static RIPOFFINIT* prip = R_INIT; NCursesWindow::NCursesWindow(WINDOW *win, int ncols) : w(0), alloced(FALSE), par(0), subwins(0), sib(0) { + (void) ncols; initialize(); w = win; - assert((w->_maxx +1 ) == ncols); } int _nc_xx_ripoff_init(WINDOW *w, int ncols) { + (void) ncols; int res = ERR; RIPOFFINIT init = *prip++; if (init) { - NCursesWindow* W = new NCursesWindow(w,ncols); - res = init(*W); + res = init(*(new NCursesWindow(w,ncols))); } return res; } @@ -355,13 +401,19 @@ NCursesWindow::useColors(void) } } -short +NCURSES_PAIRS_T +NCursesWindow::getPair() const +{ + return static_cast(PAIR_NUMBER(getattrs(w))); +} + +NCURSES_COLOR_T NCursesWindow::getcolor(int getback) const { - short fore, back; + NCURSES_COLOR_T fore, back; if (HaveColors()) { - if (::pair_content(static_cast(PAIR_NUMBER(w->_attrs)), &fore, &back) == ERR) + if (::pair_content(getPair(), &fore, &back) == ERR) err_handler("Can't get color pair"); } else { // Monochrome means white on black @@ -376,27 +428,27 @@ int NCursesWindow::NumberOfColors() return (HaveColors()) ? COLORS : 1; } -short +NCURSES_PAIRS_T NCursesWindow::getcolor() const { - return (HaveColors()) ? PAIR_NUMBER(w->_attrs) : 0; + return (HaveColors()) ? getPair() : 0; } int -NCursesWindow::setpalette(short fore, short back, short pair) +NCursesWindow::setpalette(NCURSES_COLOR_T fore, NCURSES_COLOR_T back, NCURSES_PAIRS_T pair) { return (HaveColors()) ? ::init_pair(pair, fore, back) : OK; } int -NCursesWindow::setpalette(short fore, short back) +NCursesWindow::setpalette(NCURSES_COLOR_T fore, NCURSES_COLOR_T back) { - return setpalette(fore, back, static_cast(PAIR_NUMBER(w->_attrs))); + return setpalette(fore, back, getPair()); } int -NCursesWindow::setcolor(short pair) +NCursesWindow::setcolor(NCURSES_PAIRS_T pair) { if (HaveColors()) { if ((pair < 1) || (pair > COLOR_PAIRS)) @@ -411,7 +463,7 @@ NCursesWindow::setcolor(short pair) #if HAVE_HAS_KEY bool NCursesWindow::has_mouse() const { - return ((::has_key(KEY_MOUSE) || ::_nc_has_mouse()) + return ((::has_key(KEY_MOUSE) || ::has_mouse()) ? TRUE : FALSE); } #endif