File Format

Home Overview File Format

In MoStacks stacks are stored in files. Regardless of the content of a stack, whether it contains only cards, or also pictures and scripts, everything belonging to a stack is always contained in a single file. This makes it very simple to copy and move stacks with tools like the Windows Explorer or the smartphone's PC Suite.

The Symbian MoStacks client works with a so-called recognizer, an elegant Symbian feature that can establish the data type of a file and locate the corresponding program to process the file without depending on the file name. The Windows "feature" of using file name extensions to encode the file type is not needed. Still, because MoStacks runs on Symbian and Windows, the system works with a default extension of .MoStack for stacks.

The stack format is a mostly binary, proprietary format developed for exclusive use as the native MoStacks format. It has a considerable complexity, which is not surprising if you look at all the things that can go into a stack. (In the unfortunate event that a stack becomes corrupt because of a bug in MoStacks or a hardware failure, the data contained in the stack is most probably lost for good. This is why MoStacks offer a feature to automatically write backup files before saving stacks.)

The format is not designed for so-called random access. MoStacks has to load the whole stack into memory and again writing out the whole stack to file after modifications, in fact even after a single, small modification. This puts an upper limit to stack size, because beyond a certain size loading and saving takes just too long to be practical. But this behavior allowed to simplify the MoStacks code considerably, and after all a smartphone is not a database server!

Data in stacks is not compressed. Furthermore MoStacks is Unicode enabled and stores textual data as 2 bytes per character, in the so- called UTF-16 encoding. Tests showed that as a rough estimate 100 characters of text entered in fields need around 300 to 400 bytes to store in a stack, due to all the bytes needed for cards and metadata like background definitions.

Again this should not be taken to indicate sloppy or quick-and-dirty programming. It is the result of trade-offs: A compressed format would have made MoStacks more complex and would result in higher load times for stacks because of the time needed for decompressing.