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

📄 conwin.cpp

📁 vbindiff-3.0_beta4.tar.gz是一个linux下二进制比较工具
💻 CPP
字号:
//--------------------------------------------------------------------// $Id: ConWin.cpp 4759 2008-07-26 03:19:24Z cjm $//--------------------------------------------------------------------////   Visual Binary Diff//   Copyright 1997-2005 by Christopher J. Madsen////   Support class for curses applications////   This program is free software; you can redistribute it and/or//   modify it under the terms of the GNU General Public License as//   published by the Free Software Foundation; either version 2 of//   the License, or (at your option) any later version.////   This program 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 General Public License for more details.////   You should have received a copy of the GNU General Public License//   along with this program.  If not, see <http://www.gnu.org/licenses/>.//--------------------------------------------------------------------#include <stdlib.h>#include "ConWin.hpp"void exitMsg(int status, const char* message); // From vbindiff.cppenum ColorPair {  pairWhiteBlue= 1,  pairWhiteBlack,  pairRedBlue,  pairYellowBlue};static const ColorPair colorStyle[] = {  pairWhiteBlue,   // cBackground  pairWhiteBlue,   // cPromptWin  pairWhiteBlue,   // cPromptKey  pairWhiteBlue,   // cPromptBdr  pairWhiteBlack,  // cCurrentMode  pairWhiteBlack,  // cFileName  pairWhiteBlue,   // cFileWin  pairRedBlue,     // cFileDiff  pairYellowBlue   // cFileEdit};static const attr_t attribStyle[] = {              COLOR_PAIR(colorStyle[ cBackground ]),              COLOR_PAIR(colorStyle[ cPromptWin  ]),  A_BOLD    | COLOR_PAIR(colorStyle[ cPromptKey  ]),  A_BOLD    | COLOR_PAIR(colorStyle[ cPromptBdr  ]),  A_REVERSE | COLOR_PAIR(colorStyle[ cCurrentMode]),  A_REVERSE | COLOR_PAIR(colorStyle[ cFileName   ]),              COLOR_PAIR(colorStyle[ cFileWin    ]),  A_BOLD    | COLOR_PAIR(colorStyle[ cFileDiff   ]),  A_BOLD    | COLOR_PAIR(colorStyle[ cFileEdit   ])};//====================================================================// Class ConWindow://--------------------------------------------------------------------//////////////////////////////////////////////////////////////////////// Static Member Functions://--------------------------------------------------------------------// Start up the window system://// Allocates a screen buffer and sets input mode://// Returns://   true:   Everything set up properly//   false:  Unable to initializebool ConWindow::startup(){  if (!initscr()) return false; // initialize the curses library  atexit(ConWindow::shutdown);  // just in case  keypad(stdscr, true);         // enable keyboard mapping  nonl();           // tell curses not to do NL->CR/NL on output  cbreak();         // take input chars one at a time, no wait for \n  noecho();         // do not echo input  if (has_colors()) {    start_color();    init_pair(pairWhiteBlue,  COLOR_WHITE,  COLOR_BLUE);    init_pair(pairWhiteBlack, COLOR_WHITE,  COLOR_BLACK);    init_pair(pairRedBlue,    COLOR_RED,    COLOR_BLUE);    init_pair(pairYellowBlue, COLOR_YELLOW, COLOR_BLUE);  } // end if terminal has color  return true;} // end ConWindow::startup//--------------------------------------------------------------------// Shut down the window system://// Deallocate the screen buffer and restore the original input mode.void ConWindow::shutdown(){  if (!isendwin()) {    showCursor();    endwin();  }} // end ConWindow::shutdown//////////////////////////////////////////////////////////////////////// Member Functions://--------------------------------------------------------------------// Constructor:ConWindow::ConWindow(): pan(NULL),  win(NULL){} // end ConWindow::ConWindow//--------------------------------------------------------------------// Destructor:ConWindow::~ConWindow(){  close();} // end ConWindow::~ConWindow//--------------------------------------------------------------------// Initialize the window://// Must be called only once, before any other functions are called.// Allocates the data structures and clears the window buffer, but// does not display anything.//// Input://   x,y:           The position of the window in the screen buffer//   width,height:  The size of the window//   attrib:        The default attributes for the windowvoid ConWindow::init(short x, short y, short width, short height, Style attrib){  if ((win = newwin(height, width, y, x)) == 0)    exitMsg(99, "Internal error: Failed to create window");  if ((pan = new_panel(win)) == 0)    exitMsg(99, "Internal error: Failed to create panel");  wbkgdset(win, attribStyle[attrib] | ' ');  keypad(win, TRUE);            // enable keyboard mapping  clear();} // end ConWindow::init//--------------------------------------------------------------------void ConWindow::close(){  if (pan) {    del_panel(pan);    pan = NULL;  }  if (win) {    delwin(win);    win = NULL;  }} // end ConWindow::close//--------------------------------------------------------------------// Write a string using the current attributes://// Input://   x,y:  The start of the string in the window//   s:    The string to write//void ConWindow::put(short x, short y, const char* s)///void ConWindow::put(short x, short y, const String& s)///{///  PCHAR_INFO  out = data + x + size.X * y;///  StrConstItr  c = s.begin();//////  while (c != s.end()) {///    out->Char.AsciiChar = *c;///    out->Attributes = attribs;///    ++out;///    ++c;///  }///} // end ConWindow::put//--------------------------------------------------------------------// Change the attributes of characters in the window://// Input://   x,y:    The position in the window to start changing attributes//   color:  The attribute to set//   count:  The number of characters to changevoid ConWindow::putAttribs(short x, short y, Style color, short count){  mvwchgat(win, y, x, count, attribStyle[color], colorStyle[color], NULL);  touchwin(win);} // end ConWindow::putAttribs//--------------------------------------------------------------------// Write a character using the current attributes://// Input://   x,y:    The position in the window to start writing//   c:      The character to write//   count:  The number of characters to writevoid ConWindow::putChar(short x, short y, char c, short count){  wmove(win, y, x);  while (count--) {    waddch(win, c);  }} // end ConWindow::putAttribs//--------------------------------------------------------------------// Read the next key down event://// Output://   event:  Contains a key down eventint ConWindow::readKey(){  top_panel(pan);  update_panels();  doupdate();  return wgetch(win);} // end ConWindow::readKey//--------------------------------------------------------------------void ConWindow::resize(short width, short height){  if (wresize(win, height, width) != OK)    exitMsg(99, "Internal error: Failed to resize window");  replace_panel(pan, win);  clear();} // end ConWindow::resize//--------------------------------------------------------------------void ConWindow::setAttribs(Style color){  wattrset(win, attribStyle[color]);} // end ConWindow::setAttribs//--------------------------------------------------------------------// Position the cursor in the window://// There is only one cursor, and each window does not maintain its own// cursor position.//// Input://   x,y:    The position in the window for the cursorvoid ConWindow::setCursor(short x, short y){//  ASSERT((x>=0)&&(x<size.X)&&(y>=0)&&(y<size.Y));  wmove(win, y, x);} // end ConWindow::setCursor//--------------------------------------------------------------------// Local Variables://     c-file-style: "cjm"// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -