// 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 once #pragma interface #endif #define _CursesWindow_h #ifdef __GNUG__ #pragma once #pragma interface #endif #include /* * * 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, 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(cbool bf); int clrtobot(); int clrtoeol(); int delch(); int mvdelch(int y, int x); int deleteln(); // screen control int scroll(); int scrollok(cbool bf); int touchwin(); int refresh(); int leaveok(cbool bf); int flushok(cbool bf); int standout(); int standend(); // multiple window control int overlay(CursesWindow &win); int overwrite(CursesWindow &win); // traversal support CursesWindow* child(); CursesWindow* sibling(); CursesWindow* parent(); }; #if defined(__OPTIMIZE__) || defined(USE_LIBGXX_INLINES) 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) { return ::waddstr(w, 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)==0) ? 0 : ::waddch(w, ch); } inline int CursesWindow::mvgetch(int y, int x) { return (::wmove(w, y, x)==0) ? 0 : ::wgetch(w); } inline int CursesWindow::mvaddstr(int y, int x, char * str) { return (::wmove(w, y, x)==0) ? 0 : ::waddstr(w, str); } inline int CursesWindow::mvgetstr(int y, int x, char * str) { return (::wmove(w, y, x)==0) ? 0 : ::wgetstr(w, str); } inline int CursesWindow::mvinch(int y, int x) { return (::wmove(w, y, x)==0) ? 0 : ::winch(w); } inline int CursesWindow::mvdelch(int y, int x) { return (::wmove(w, y, x)==0) ? 0 : ::wdelch(w); } inline int CursesWindow::mvinsch(int y, int x, char ch) { return (::wmove(w, y, x)==0) ? 0 : ::winsch(w, ch); } inline int CursesWindow::refresh() { return ::wrefresh(w); } inline int CursesWindow::clearok(cbool bf) { return ::clearok(w,bf); } inline int CursesWindow::leaveok(cbool bf) { return ::leaveok(w,bf); } inline int CursesWindow::scrollok(cbool bf) { return ::scrollok(w,bf); } inline int CursesWindow::flushok(cbool bf) { return ::flushok(w, bf); } 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 #endif