📄 cursesw.h
字号:
// 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 freesoftware; you can redistribute it and/or modify it under the terms ofthe GNU Library General Public License as published by the FreeSoftware Foundation; either version 2 of the License, or (at youroption) any later version. This library is distributed in the hopethat it will be useful, but WITHOUT ANY WARRANTY; without even theimplied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULARPURPOSE. See the GNU Library General Public License for more details.You should have received a copy of the GNU Library General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, 675 Mass Ave, Cambridge, MA 02139, USA.*/#ifndef _CursesWindow_h#ifdef __GNUG__#pragma interface#endif#define _CursesWindow_h#include <curses.h>#if _G_HAVE_CURSES// "Convert" macros to inlines, if needed.#ifdef addchinline 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 clearinline int (clear)() { return clear(); }#undef clear#endif#ifdef clearokinline int (clearok)(WINDOW* win, int bf) { return clearok(win, bf); }#undef clearok#elseextern "C" int clearok(WINDOW*, int);#endif#ifdef clrtobotinline int (clrtobot)() { return clrtobot(); }#undef clrtobot#endif#ifdef clrtoeolinline int (clrtoeol)() { return clrtoeol(); }#undef clrtoeol#endif#ifdef delchinline int (delch)() { return delch(); }#undef delch#endif#ifdef deletelninline int (deleteln)() { return deleteln(); }#undef deleteln#endif#ifdef eraseinline int (erase)() { return erase(); }#undef erase#endif#ifdef flushokinline int (flushok)(WINDOW* _win, int _bf) { return flushok(_win, _bf); }#undef flushok#else#define _no_flushok#endif#ifdef getchinline int (getch)() { return getch(); }#undef getch#endif#ifdef getstrinline int (getstr)(char *_str) { return getstr(_str); }#undef getstr#endif#ifdef getyxinline void (getyx)(WINDOW* win, int& y, int& x) { getyx(win, y, x); }#undef getyx#endif#ifdef inchinline int (inch)() { return inch(); }#undef inch#endif#ifdef inschinline int (insch)(char c) { return insch(c); }#undef insch#endif#ifdef insertlninline int (insertln)() { return insertln(); }#undef insertln#endif#ifdef leaveokinline int (leaveok)(WINDOW* win, int bf) { return leaveok(win, bf); }#undef leaveok#elseextern "C" int leaveok(WINDOW* win, int bf);#endif#ifdef moveinline int (move)(int x, int y) { return move(x, y); }#undef move#endif#ifdef refreshinline int (rfresh)() { return refresh(); }#undef refresh#endif#ifdef scrollokinline int (scrollok)(WINDOW* win, int bf) { return scrollok(win, bf); }#undef scrollok#else#ifndef hpuxextern "C" int scrollok(WINDOW*, int);#elseextern "C" int scrollok(WINDOW*, char);#endif#endif#ifdef standendinline char * (standend)() { return standend(); }#undef standend#endif#ifdef standoutinline char * (standout)() { return standout(); }#undef standout#endif#ifdef winchinline int (winch)(WINDOW* win) { return winch(win); }#undef winch#endif#ifdef mvwaddchinline int (mvwaddch)(WINDOW *win, int y, int x, char ch){ return mvwaddch(win, y, x, ch); }#undef mvwaddch#endif#ifdef mvwaddstrinline int (mvwaddstr)(WINDOW *win, int y, int x, const char * str){ return mvwaddstr(win, y, x, (char*)str); }#undef mvwaddstr#endif#ifdef mvwdelchinline int (mvwdelch)(WINDOW *win, int y, int x) { return mvwdelch(win, y, x);}#undef mvwdelch#endif#ifdef mvwgetchinline int (mvwgetch)(WINDOW *win, int y, int x) { return mvwgetch(win, y, x);}#undef mvwgetch#endif#ifdef mvwgetstrinline int (mvwgetstr)(WINDOW *win, int y, int x, char *str){return mvwgetstr(win,y,x, str);}#undef mvwgetstr#endif#ifdef mvwinchinline int (mvwinch)(WINDOW *win, int y, int x) { return mvwinch(win, y, x);}#undef mvwinch#endif#ifdef mvwinschinline int (mvwinsch)(WINDOW *win, int y, int x, char c){ return mvwinsch(win, y, x, c); }#undef mvwinsch#endif#ifdef mvaddchinline int (mvaddch)(int y, int x, char ch){ return mvaddch(y, x, ch); }#undef mvaddch#endif#ifdef mvaddstrinline int (mvaddstr)(int y, int x, const char * str){ return mvaddstr(y, x, (char*)str); }#undef mvaddstr#endif#ifdef mvdelchinline int (mvdelch)(int y, int x) { return mvdelch(y, x);}#undef mvdelch#endif#ifdef mvgetchinline int (mvgetch)(int y, int x) { return mvgetch(y, x);}#undef mvgetch#endif#ifdef mvgetstrinline int (mvgetstr)(int y, int x, char *str) {return mvgetstr(y, x, str);}#undef mvgetstr#endif#ifdef mvinchinline int (mvinch)(int y, int x) { return mvinch(y, x);}#undef mvinch#endif#ifdef mvinschinline 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 subwindowspublic: 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 char* standout(); char* 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_flushokinline int CursesWindow::flushok(int bf) { return ::flushok(w, bf); }#endifinline void CursesWindow::getyx(int& y, int& x) { ::getyx(w, y, x); }inline char *CursesWindow::standout() { return ::wstandout(w); }inline char *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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -