Version 9 of trofs

Updated 2005-03-27 12:16:38

See http://math.nist.gov/~DPorter/tcltk/trofs/


Tcl package that provides commands to create, mount, and unmount archives containing read-only filesystems.


File format (version 1, as found in trofs-0.4.3)

(reconstructed from trofs-0.4.3/library/procs.tcl by PS)

The trofs archive file format is a concatenation of files bundled in directories, where each directory contains file, link and directory TOC entries which point to an absolute location in the archive file and specify the length of the item in the file. All offsets are from the start of the archive file. Each toc is a utf-8 encoded dict

 <arbitrary header (optional)>
 0x1a
 <file1 data>
 <file2 data>
 <file3 data>
 <dir1/file1 data>
 <dir1/file2 data>
 <dir1/dirA/file1 data>
 <dir1/dirA TOC>
 <dir1 TOC>
 <dir2/file1 data>
 <dir2 TOC>
 <root TOC>
 0x1a
 trofs01 (literal string - trofs file signature)
 <size of root TOC (big endian 32-bit int)> 
  • Arbitrary header: For example, a Tcl script for mounting the trofs file as a Tcl Module.
  • File data: A verbatim copy of the contents of the file
  • root/dir TOC: a dict of filenames (see example below)
  • size of root toc: Helps point to the root toc: filesize-12-rootTocSize

TOC:

 file1 {F <length> <offset>}
 file2 {F 15 32}
 dir1 {D <size> <offset>}
 dir2 {D 203 12542}
 link1 {L <target>}
 link2 {L ../file1}

What is the reason for inventing Yet Another Archive Format And Making It Tcl Specific, and not using - say - ZIP? -jcw

PWQ 27 Mar 05, I would go one further. Since the FS is to be read only, why don't you adopt ext2-fs or dos-fs, or even cram-fs. The advantages of these is that you can mount these under linux and create/modify them easily. When you re-invent the wheel, it should be a better wheel.

Would makes no sense on Windows -jcw

PS 27Mar05 The short answer I got from dgp was that it is open for discussion. The main reason for me writing this format down here is to familiarize myself with the trofs code. As far as I can tell, a lot of effort went into making the trofs code thread safe. The next step will be adding compression to trofs, and after that I am likely to hack it to read (a subset of) zipfiles. The significant difference between the zip file format and trofs file format is the directory stucture. In zipfiles, a main TOC holds all files, trofs has a toc for each directory. I think the simplest trick will be to turn the zip TOC into a nested dict, that would preserve most of the trofs internals.


Category Package