dd86k's blog

Machine code enthusiast

The Visual History of ddhx

Author: dd
Published: March 15, 2022
Last modified: May 28, 2023 at 18h42
Categories:

Did you know this project started in 2017?

However, before ddhx, there was my 0xdd utility, written in C#, released in 2015.

0xdd

While I was still learning C#, I had a knack for Text User Interfaces (TUI), and even back then, there were no superb hex editors that I liked. I’ve already wanted to make a TUI application for the fun of it

And so, I decided to write my very own, first TUI program (fwod takes the cake, but it is now forgotten history). But, since I feared my programming skills were subpar, I only made it a read-only program.

First Version: v0.1

0xdd v0.1 with its nano-like interface

0xdd v0.1 with its nano-like interface

Released the 25 October 2015, 0xdd saw its first release of the “hex viewer”. This version did not render bytes 0xe0 and up properly into the character column.

Funny enough, when this was released, it had my old username of guitarxhero.

Last nano-like UI: 0.6.2

0xdd 0.6.2 with a position field added

0xdd 0.6.2 with a position field added

Released the 13 April 2016, featuring the position percentage field, 0xdd 0.6.2 was the last version featuring a nano-like interface. The reason being that the interface was taking too much space.

Last Version: 0.7.0.2

0xdd 0.7 with its EDIT-like interface

0xdd 0.7 with its EDIT-like interface

Since the UI had dialog boxes, for 0xdd 0.7, I decided to make over the interface to be more like the MS-DOS EDIT text editor. Last version of 0xdd was released 15 February 2017.

I don’t know why I removed the position marker, I think I had plans to add something similar to a vertical scroll bar.

The upper bar being popped down to show some menu items.

The upper bar being popped down to show some menu items.

The find string dialog box.

The find string dialog box.

About box.

About box.

ddhx

To get away from the “VM-ness” of .NET, 2016 was the year I started to learn the D programming language out of my failures to stick with Rust and Go. So, in 2017, while I was still transitioning from C# to being more comfortable with D, I thought to myself, “Hey I still have this project I can rewrite over to D”.

First Version: v0.0.0-2

So later the year of 2017, while 0xdd saw its last release, ddhx 0.0.0-2 saw its release 24 September 2017.

This was the second (serious) project of mine being written in D, after ddcpuid.

ddhx 0.0.0-2 starting its vim phase.

ddhx 0.0.0-2 starting its vim phase.

But instead of a nano, or EDIT, interface, ddhx was rather inspired from the simplicity of vim, the text editor.

Command prompt at the top.

Command prompt at the top.

Entering commands is at the top, because of the readln function. It inserts a newline after hitting the return or enter key and thus displacing the whole view console/terminal buffer.

Messages are printed at the bottom.

Messages are printed at the bottom.

Previous Version: 0.3.3

So far ddhx has seen small, incremental updates, and visually, only the hexadecimal was relaxed to lowercase, and the offset marks are now spaced instead of being filled with zeroes.

Same as 0.0.0-2 by looks.

Same as 0.0.0-2 by looks.

Version screen showing "built: Sat Nov 27 10:53:46 2021" as additional information.

Version screen.

Current Version: 0.4

With the current version, 0.4.0, ddhx has seen an uplift in its interface. The offsets are wider and should displace the screen less often in large files. The status bar is now more informative. And this is the first version to be a little more vim-centred, making ‘:‘ now a key for the command menu, ‘/‘ for searching forwards, and ‘?‘ for searching backwards.

Now featuring a new bottom statusbar, and wider offsets.

Now featuring a new bottom statusbar, and wider offsets.

Future Version: 0.5

The future versions don’t plan to change very much in terms of visuals, but since it is planned to finally turn it into a hex editor, it will feature an inverted color statusbar!

Speaking of, here is an example design for the new statusbar:

ins | hex | ascii | 368 B | 1.1 KiB (0.093516%)

So basically:

  • Editing mode (readonly, insert, overwrite);
  • Data mode (offset mode is already displayed at the top left);
  • Character mode (this will affect which characters can be applied);
  • Display buffer size;
  • And file binary and percentage position.

Comparing this to HxD2, this is already more information than necessary, but crucial in a tightly packed TUI app, since I have much less space.