home *** CD-ROM | disk | FTP | other *** search
- // This may look like C code, but it is really -*- C++ -*-
-
- /*
- Copyright (C) 1989 Free Software Foundation
- written by Eric Newton (newton@rocky.oswego.edu)
-
- This file is part of the GNU C++ Library. This library is free
- software; you can redistribute it and/or modify it under the terms of
- the GNU Library General Public License as published by the Free
- Software Foundation; either version 2 of the License, or (at your
- option) any later version. This library is distributed in the hope
- that it will be useful, but WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the GNU Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- #ifndef _CursesWindow_h
- #ifdef __GNUG__
- #pragma interface
- #endif
- #define _CursesWindow_h
-
- #include <_G_config.h>
- #if _G_HAVE_CURSES
- #include <curses.h>
-
- /* SCO 3.2v4 curses.h includes term.h, which defines lines as a macro.
- Undefine it here, because CursesWindow uses lines as a method. */
- #undef lines
-
- // "Convert" macros to inlines, if needed.
- #ifdef addch
- inline int (addch)(char ch) { return addch(ch); }
- #undef addch
- #endif
- #ifdef addstr
- /* The (char*) cast is to hack around missing const's */
- inline int (addstr)(const char * str) { return addstr((char*)str); }
- #undef addstr
- #endif
- #ifdef clear
- inline int (clear)() { return clear(); }
- #undef clear
- #endif
- #ifdef clearok
- inline int (clearok)(WINDOW* win, int bf) { return clearok(win, bf); }
- #undef clearok
- #else
- extern "C" int clearok(WINDOW*, int);
- #endif
- #ifdef clrtobot
- inline int (clrtobot)() { return clrtobot(); }
- #undef clrtobot
- #endif
- #ifdef clrtoeol
- inline int (clrtoeol)() { return clrtoeol(); }
- #undef clrtoeol
- #endif
- #ifdef delch
- inline int (delch)() { return delch(); }
- #undef delch
- #endif
- #ifdef deleteln
- inline int (deleteln)() { return deleteln(); }
- #undef deleteln
- #endif
- #ifdef erase
- inline int (erase)() { return erase(); }
- #undef erase
- #endif
- #ifdef flushok
- inline int (flushok)(WINDOW* _win, int _bf) { return flushok(_win, _bf); }
- #undef flushok
- #else
- #define _no_flushok
- #endif
- #ifdef getch
- inline int (getch)() { return getch(); }
- #undef getch
- #endif
- #ifdef getstr
- inline int (getstr)(char *_str) { return getstr(_str); }
- #undef getstr
- #endif
- #ifdef getyx
- inline void (getyx)(WINDOW* win, int& y, int& x) { getyx(win, y, x); }
- #undef getyx
- #endif
- #ifdef inch
- inline int (inch)() { return inch(); }
- #undef inch
- #endif
- #ifdef insch
- inline int (insch)(char c) { return insch(c); }
- #undef insch
- #endif
- #ifdef insertln
- inline int (insertln)() { return insertln(); }
- #undef insertln
- #endif
- #ifdef leaveok
- inline int (leaveok)(WINDOW* win, int bf) { return leaveok(win, bf); }
- #undef leaveok
- #else
- extern "C" int leaveok(WINDOW* win, int bf);
- #endif
- #ifdef move
- inline int (move)(int x, int y) { return move(x, y); }
- #undef move
- #endif
- #ifdef refresh
- inline int (rfresh)() { return refresh(); }
- #undef refresh
- #endif
- #ifdef scrollok
- inline int (scrollok)(WINDOW* win, int bf) { return scrollok(win, bf); }
- #undef scrollok
- #else
- #ifndef hpux
- extern "C" int scrollok(WINDOW*, int);
- #else
- extern "C" int scrollok(WINDOW*, char);
- #endif
- #endif
- #ifdef standend
- inline int (standend)() { return standend(); }
- #undef standend
- #endif
- #ifdef standout
- inline int (standout)() { return standout(); }
- #undef standout
- #endif
- #ifdef wstandend
- inline int (wstandend)(WINDOW *win) { return wstandend(win); }
- #undef wstandend
- #endif
- #ifdef wstandout
- inline int (wstandout)(WINDOW *win) { return wstandout(win); }
- #undef wstandout
- #endif
- #ifdef winch
- inline int (winch)(WINDOW* win) { return winch(win); }
- #undef winch
- #endif
-
- #ifdef mvwaddch
- inline int (mvwaddch)(WINDOW *win, int y, int x, char ch)
- { return mvwaddch(win, y, x, ch); }
- #undef mvwaddch
- #endif
- #ifdef mvwaddstr
- inline int (mvwaddstr)(WINDOW *win, int y, int x, const char * str)
- { return mvwaddstr(win, y, x, (char*)str); }
- #undef mvwaddstr
- #endif
- #ifdef mvwdelch
- inline int (mvwdelch)(WINDOW *win, int y, int x) { return mvwdelch(win, y, x);}
- #undef mvwdelch
- #endif
- #ifdef mvwgetch
- inline int (mvwgetch)(WINDOW *win, int y, int x) { return mvwgetch(win, y, x);}
- #undef mvwgetch
- #endif
- #ifdef mvwgetstr
- inline int (mvwgetstr)(WINDOW *win, int y, int x, char *str)
- {return mvwgetstr(win,y,x, str);}
- #undef mvwgetstr
- #endif
- #ifdef mvwinch
- inline int (mvwinch)(WINDOW *win, int y, int x) { return mvwinch(win, y, x);}
- #undef mvwinch
- #endif
- #ifdef mvwinsch
- inline int (mvwinsch)(WINDOW *win, int y, int x, char c)
- { return mvwinsch(win, y, x, c); }
- #undef mvwinsch
- #endif
-
- #ifdef mvaddch
- inline int (mvaddch)(int y, int x, char ch)
- { return mvaddch(y, x, ch); }
- #undef mvaddch
- #endif
- #ifdef mvaddstr
- inline int (mvaddstr)(int y, int x, const char * str)
- { return mvaddstr(y, x, (char*)str); }
- #undef mvaddstr
- #endif
- #ifdef mvdelch
- inline int (mvdelch)(int y, int x) { return mvdelch(y, x);}
- #undef mvdelch
- #endif
- #ifdef mvgetch
- inline int (mvgetch)(int y, int x) { return mvgetch(y, x);}
- #undef mvgetch
- #endif
- #ifdef mvgetstr
- inline int (mvgetstr)(int y, int x, char *str) {return mvgetstr(y, x, str);}
- #undef mvgetstr
- #endif
- #ifdef mvinch
- inline int (mvinch)(int y, int x) { return mvinch(y, x);}
- #undef mvinch
- #endif
- #ifdef mvinsch
- inline int (mvinsch)(int y, int x, char c)
- { return mvinsch(y, x, c); }
- #undef mvinsch
- #endif
-
- /*
- *
- * C++ class for windows.
- *
- *
- */
-
- class CursesWindow
- {
- protected:
- static int count; // count of all active windows:
- // We rely on the c++ promise that
- // all otherwise uninitialized
- // static class vars are set to 0
-
- WINDOW * w; // the curses WINDOW
-
- int alloced; // true if we own the WINDOW
-
- CursesWindow* par; // parent, if subwindow
- CursesWindow* subwins; // head of subwindows list
- CursesWindow* sib; // next subwindow of parent
-
- void kill_subwindows(); // disable all subwindows
-
- public:
- CursesWindow(WINDOW* &window); // useful only for stdscr
-
- CursesWindow(int lines, // number of lines
- int cols, // number of columns
- int begin_y, // line origin
- int begin_x); // col origin
-
- CursesWindow(CursesWindow& par, // parent window
- int lines, // number of lines
- int cols, // number of columns
- int by, // absolute or relative
- int bx, // origins:
- char absrel = 'a'); // if `a', by & bx are
- // absolute screen pos,
- // else if `r', they are
- // relative to par origin
- ~CursesWindow();
-
- // terminal status
- int lines(); // number of lines on terminal, *not* window
- int cols(); // number of cols on terminal, *not* window
-
- // window status
- int height(); // number of lines in this window
- int width(); // number of cols in this window
- int begx(); // smallest x coord in window
- int begy(); // smallest y coord in window
- int maxx(); // largest x coord in window
- int maxy(); // largest x coord in window
-
- // window positioning
- int move(int y, int x);
-
- // coordinate positioning
- void getyx(int& y, int& x);
- int mvcur(int sy, int ey, int sx, int ex);
-
- // input
- int getch();
- int getstr(char * str);
- int scanw(const char *, ...);
-
- // input + positioning
- int mvgetch(int y, int x);
- int mvgetstr(int y, int x, char * str);
- int mvscanw(int, int, const char*, ...);
-
- // output
- int addch(const char ch);
- int addstr(const char * str);
- int printw(const char * fmt, ...);
- int inch();
- int insch(char c);
- int insertln();
-
- // output + positioning
- int mvaddch(int y, int x, char ch);
- int mvaddstr(int y, int x, const char * str);
- int mvprintw(int y, int x, const char * fmt, ...);
- int mvinch(int y, int x);
- int mvinsch(int y, int x, char ch);
-
- // borders
- int box(char vert, char hor);
-
- // erasure
- int erase();
- int clear();
- int clearok(int bf);
- int clrtobot();
- int clrtoeol();
- int delch();
- int mvdelch(int y, int x);
- int deleteln();
-
- // screen control
- int scroll();
- int scrollok(int bf);
- int touchwin();
- int refresh();
- int leaveok(int bf);
- #ifndef _no_flushok
- int flushok(int bf);
- #endif
- int standout();
- int standend();
-
- // multiple window control
- int overlay(CursesWindow &win);
- int overwrite(CursesWindow &win);
-
-
- // traversal support
- CursesWindow* child();
- CursesWindow* sibling();
- CursesWindow* parent();
- };
-
-
- inline int CursesWindow::begx()
- {
- return w->_begx;
- }
-
- inline int CursesWindow::begy()
- {
- return w->_begy;
- }
-
- inline int CursesWindow::maxx()
- {
- return w->_maxx;
- }
-
- inline int CursesWindow::maxy()
- {
- return w->_maxy;
- }
-
- inline int CursesWindow::height()
- {
- return maxy() - begy() + 1;
- }
-
- inline int CursesWindow::width()
- {
- return maxx() - begx() + 1;
- }
-
- inline int CursesWindow::box(char vert, char hor)
- {
- return ::box(w, vert, hor);
- }
-
- inline int CursesWindow::overlay(CursesWindow &win)
- {
- return ::overlay(w, win.w);
- }
-
- inline int CursesWindow::overwrite(CursesWindow &win)
- {
- return ::overwrite(w, win.w);
- }
-
- inline int CursesWindow::scroll()
- {
- return ::scroll(w);
- }
-
-
- inline int CursesWindow::touchwin()
- {
- return ::touchwin(w);
- }
-
- inline int CursesWindow::addch(const char ch)
- {
- return ::waddch(w, ch);
- }
-
- inline int CursesWindow::addstr(const char * str)
- {
- // The (char*) cast is to hack around prototypes in curses.h that
- // have const missing in the parameter lists. [E.g. SVR4]
- return ::waddstr(w, (char*)str);
- }
-
- inline int CursesWindow::clear()
- {
- return ::wclear(w);
- }
-
- inline int CursesWindow::clrtobot()
- {
- return ::wclrtobot(w);
- }
-
- inline int CursesWindow::clrtoeol()
- {
- return ::wclrtoeol(w);
- }
-
- inline int CursesWindow::delch()
- {
- return ::wdelch(w);
- }
-
- inline int CursesWindow::deleteln()
- {
- return ::wdeleteln(w);
- }
-
- inline int CursesWindow::erase()
- {
- return ::werase(w);
- }
-
- inline int CursesWindow::getch()
- {
- return ::wgetch(w);
- }
-
- inline int CursesWindow::getstr(char * str)
- {
- return ::wgetstr(w, str);
- }
-
- inline int CursesWindow::inch()
- {
- return winch(w);
- }
-
- inline int CursesWindow::insch(char c)
- {
- return ::winsch(w, c);
- }
-
- inline int CursesWindow::insertln()
- {
- return ::winsertln(w);
- }
-
- inline int CursesWindow::move(int y, int x)
- {
- return ::wmove(w, y, x);
- }
-
-
- inline int CursesWindow::mvcur(int sy, int ey, int sx, int ex)
- {
- return ::mvcur(sy, ey, sx,ex);
- }
-
- inline int CursesWindow::mvaddch(int y, int x, char ch)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::waddch(w, ch);
- }
-
- inline int CursesWindow::mvgetch(int y, int x)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::wgetch(w);
- }
-
- inline int CursesWindow::mvaddstr(int y, int x, const char * str)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::waddstr(w, (char*)str);
- }
-
- inline int CursesWindow::mvgetstr(int y, int x, char * str)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::wgetstr(w, str);
- }
-
- inline int CursesWindow::mvinch(int y, int x)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::winch(w);
- }
-
- inline int CursesWindow::mvdelch(int y, int x)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::wdelch(w);
- }
-
- inline int CursesWindow::mvinsch(int y, int x, char ch)
- {
- return (::wmove(w, y, x)==ERR) ? ERR : ::winsch(w, ch);
- }
-
- inline int CursesWindow::refresh()
- {
- return ::wrefresh(w);
- }
-
- inline int CursesWindow::clearok(int bf)
- {
- return ::clearok(w,bf);
- }
-
- inline int CursesWindow::leaveok(int bf)
- {
- return ::leaveok(w,bf);
- }
-
- inline int CursesWindow::scrollok(int bf)
- {
- return ::scrollok(w,bf);
- }
-
- #ifndef _no_flushok
- inline int CursesWindow::flushok(int bf)
- {
- return ::flushok(w, bf);
- }
- #endif
-
- inline void CursesWindow::getyx(int& y, int& x)
- {
- ::getyx(w, y, x);
- }
-
- inline int CursesWindow::standout()
- {
- return ::wstandout(w);
- }
-
- inline int CursesWindow::standend()
- {
- return ::wstandend(w);
- }
-
- inline int CursesWindow::lines()
- {
- return LINES;
- }
-
- inline int CursesWindow::cols()
- {
- return COLS;
- }
-
- inline CursesWindow* CursesWindow::child()
- {
- return subwins;
- }
-
- inline CursesWindow* CursesWindow::parent()
- {
- return par;
- }
-
- inline CursesWindow* CursesWindow::sibling()
- {
- return sib;
- }
-
- #endif /* _G_HAVE_CURSES */
- #endif
-