summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpixel <pixel>2004-07-25 10:20:36 +0000
committerpixel <pixel>2004-07-25 10:20:36 +0000
commit280cacae2889bb2b838cda2926af3d9e90c540a9 (patch)
tree27e613cb49ee047b2124815e2195e13dfd794d46
parentf0afa811f6c76463e219653051aa37a8244dc983 (diff)
Adding a short HexViewer
-rw-r--r--Dalos/Dalos.cc81
1 files changed, 74 insertions, 7 deletions
diff --git a/Dalos/Dalos.cc b/Dalos/Dalos.cc
index b22cfff..9af9710 100644
--- a/Dalos/Dalos.cc
+++ b/Dalos/Dalos.cc
@@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: Dalos.cc,v 1.4 2004-07-24 06:52:03 pixel Exp $ */
+/* $Id: Dalos.cc,v 1.5 2004-07-25 10:20:36 pixel Exp $ */
#include <SDL.h>
#include <SDL_thread.h>
@@ -28,6 +28,7 @@
#include <vector>
#include <Main.h>
+#include <Handle.h>
#include <Input.h>
#include <Buffer.h>
#include <BLua.h>
@@ -420,11 +421,11 @@ class console : public mogltk::widget {
virtual void draw() {
int cursor_pos, start, line_length, line_pos, cur_page;
- mogltk::ColorP::Max.A = 120;
+ mogltk::ColorP::Max.A = 180;
std::vector<String>::iterator i;
// Background
- Shaper()->box(GetAX(), GetAY(), GetAX2(), GetAY2(), BLUE);
+ Shaper()->box(GetAX(), GetAY(), GetAX2(), GetAY2(), DODGERBLUE);
Shaper()->obox(GetAX(), GetAY(), GetAX2(), GetAY2(), BLUE);
mogltk::ColorP::Max.A = 255;
@@ -455,12 +456,12 @@ class console : public mogltk::widget {
start += 16;
}
- mogltk::ColorP::Max.A = 200;
+ mogltk::ColorP::Max.A = 220;
if (lua_started) {
- Shaper()->box(GetAX(), GetAY() + (nlines - 1) * 13, GetAX() + 6, GetAY() + nlines * 13, GREEN);
+ Shaper()->box(GetAX(), GetAY() + (nlines - 1) * 13, GetAX() + 6, GetAY() + nlines * 13, FORESTGREEN);
} else {
- Shaper()->box(GetAX() + 6 * (cursor_pos + 2), GetAY() + (nlines - 1) * 13, GetAX() + 6 * (cursor_pos + 3) - 1, GetAY() + nlines * 13, GREEN);
+ Shaper()->box(GetAX() + 6 * (cursor_pos + 2), GetAY() + (nlines - 1) * 13, GetAX() + 6 * (cursor_pos + 3) - 1, GetAY() + nlines * 13, FORESTGREEN);
mogltk::ColorP::Max.A = 255;
mogltk::FixedFont->putcursor(GetAX(), GetAY() + (nlines - 1) * 13);
@@ -477,6 +478,69 @@ class console : public mogltk::widget {
SDL_mutex * protect_add_line;
};
+class hexview : public mogltk::widget {
+ public:
+ hexview(mogltk::shape * sh, mogltk::widget * father) :
+ widget(father, 0, 0, father->GetW(), father->GetH(), 0, "hexview", sh), h(0), width(16), offset(0), offset_loaded(-1), size_loaded(0), data(0)
+ { nlines = GetH() / 13; }
+ virtual ~hexview() { free(data); }
+ void bind_handle(Handle * _h) {
+ h = _h;
+ }
+ Uint8 * get_data() {
+ if (!data) {
+ data = (Uint8 *) malloc(nlines * width);
+ }
+
+ if ((offset_loaded == offset) && (size_loaded == (nlines * width)))
+ return data;
+
+ h->seek(offset);
+ h->read(data, nlines * width);
+
+ offset_loaded = offset;
+ size_loaded = nlines * width;
+
+ return data;
+ }
+ virtual void draw() {
+ int i, max_o, j, k, start_o, l, c;
+
+ if (!h)
+ return;
+
+ get_data();
+
+ mogltk::FixedFont->setcolor(WHITE);
+ mogltk::FixedFont->putcursor(GetAX(), GetAY());
+
+ max_o = min(h->GetSize(), offset + nlines * width);
+
+ for (i = start_o = offset, j = 0, l = 0; i < max_o; i++, j) {
+ if ((j % width) == 0) {
+ mogltk::FixedFont->printf("%08X ", i);
+ }
+ mogltk::FixedFont->printf("%02X ", data[i]);
+ j++;
+ if ((j % width) == 0) {
+ for (k = start_o, c = 0; k < start_o + width; k++, c++) {
+ mogltk::FixedFont->putcursor(GetAX() + (c + width * 3 + 14) * 6, GetAY() + l * 13);
+ if (data[k] >= 0x20)
+ mogltk::FixedFont->putentry(data[k] - 0x20);
+ }
+ l++;
+ mogltk::FixedFont->putcursor(GetAX(), GetAY() + l * 13);
+ start_o = i;
+ }
+ }
+ }
+ private:
+ Handle * h;
+ int width, offset, nlines;
+ int offset_loaded, size_loaded;
+ Uint8 * data;
+};
+
class frame : public mogltk::widget {
public:
frame(mogltk::shape * sh, mogltk::widget * father) :
@@ -548,7 +612,7 @@ class about : public mogltk::widgets::action {
} about_dialog;
virtual int startup() throw (GeneralException) {
- verbosity = M_WARNING;
+ verbosity = M_INFO;
try {
new Archive(argv[0], ARCHIVE_EXECUTABLE);
}
@@ -571,6 +635,9 @@ virtual int startup() throw (GeneralException) {
Root = new mogltk::widgets::Root(sh);
MainMenu = new mogltk::widgets::Menu(sh, Root);
Frame = new frame(sh, new mogltk::widgets::Frame(sh, Root, 0, MainMenu->GetH(), Root->GetW() - 1, Root->GetH() - MainMenu->GetH() - 1));
+
+ (new hexview(sh, Frame))->bind_handle(new Input(argv[0]));
+
Console = new console(sh, Frame, 0, 8);
Console->move(0, Frame->GetH() - Console->GetH());
Console->add_line("Dalos v0.1 - LUA console");