レポジトリ種類: SVN
#pragma once
#ifdef _WIN32
#include <pdcurses.h>
#else
#include <ncurses.h>
#endif
#include <cstdint>
#include <cstdlib>
#include <string>
#include <vector>
class HexEditor {
private:
enum StatusMode {
Status_Normal,
Status_Command,
Status_Search,
Status_Replace,
Status_Error,
};
enum SearchDirection {
Direction_Forward,
Direction_Reverse,
};
struct Edit {
size_t offset;
uint8_t oldByte;
uint8_t newByte;
};
WINDOW *hexPanel;
WINDOW *asciiPanel;
std::vector<uint8_t> buf;
size_t curPos;
size_t dpOffset;
size_t bpr;
std::string fname;
int rows, cols;
StatusMode statusMode;
std::string statusText;
std::string lastSearch;
std::vector<uint8_t> lastHexSearch;
SearchDirection lastSearchDir;
std::vector<size_t> matchOff;
bool modified;
bool running;
std::vector<Edit> undoStack;
std::vector<Edit> redoStack;
void render();
void input();
void highlightcol(size_t i, size_t row, uint8_t byte);
void statusbar();
void handleCommand();
void handleSave();
void handleQuit(bool force);
void handleSearch();
void handleReverseSearch();
void findNextMatch();
void findPrevMatch();
void handleReplace();
void undo();
void redo();
public:
HexEditor(const std::string &filename);
~HexEditor();
void run();
};