Templet is an essential tool for binary-data editting usage. Based on ideas from Resorcerer for Macintosh, it uses user-definable templates to split data into editable chunks and to let the user edit each of them individually. Basically it is a highly enhanced structure viewer and editor. The language used is flexible enough to represent almost any form of binary data imaginable.
Imagine the power of XML combined with the speed and size of binary data. This approach combines the best of both. XML uses tags to distinguish data items in a file. But consider if you had twenty such files, each of them with the same structure, only different data. Each would be repeating the structure description over and over again. Usually the "useful" data items comprise less than 30% of XML's total size, the rest is just descriptors. What if we stripped the descriptors away into a single file and then use the 20 files without descriptors (<30% size) plus one descriptos file. Much better size outcome. Also mass-parsing becomes a bit easier, since we only have to parse the descriptor file once, the data then are all in the same format.
Looking from the other side, how many times does it happen that there is a binary file that needs a few bytes edited and you have the structure description. Imagine that you would just tell a program the description and it would let you edit exactly the fields you need, leaving the rest unchanged.
Also personally I've become quite used to actually describing binary data my programs use with the language grammar used in Templet, simply because of its simplicity and yet power.
This is actually my fourth attempt at the program, the first having been started in MS VC++, the second in Delphi, the next one in BC++B and this last one in back again in MS VC++. Of these four tries it is the most advanced, although still quite far from being usable.
The language sequentially describes the data just as a C++ struct declaration does. Some advanced features include variable-sized data, counted and sized repetitions and switch-case constructs. This actually covers a very large portion of what is usually found in binary data nowadays.
The language uses 4-byte identifiers for data types and a text description of each field. This way the user knows what they are editting and the program knows, what the data is.
An example speaks thousands of words:
As you can see, the format is quite flexible, which makes it the more difficult to implement. Currently inclusion is not implemented and I'm not sure about recursion. Skips are probably not implemented or at least buggy.