⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursesw.h

📁 早期freebsd实现
💻 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 + -