BAG ARCHIVE FILE FORMAT V1.1 by Jeff Connelly The main goal of bag archives is to provide a simple and efficant way to combine many files into one. For that reason, it is extreamly simple. The header is at the beginning of the file: OFFSET Count TYPE Description 0000h 3 char ID='BAG' 0003h 2 char Version, ID='11' There is one file block for each file: OFFSET Count TYPE Description 0000h 1 dword File length in bytes 0004h 1 byte Filename length ????h ? char Filename ????h ? char File contents At the very end of the file is: OFFSET Count TYPE Description 0000h 1 char EOF marker, ID=1A A file length of zero in a file block indicates a special file that will be used as a description. Directorys are also stored in the filename field: Filename='> dirname' means change current directory to 'dirname'. For example, Filename='> JEFF' Filename='> COMPUTER' Filename='> BAG' Would make the directory be JEFF\COMPUTER\BAG. Files are put in the current directory. The files contents is not always raw data, it can be compressed. A four-byte signature can specifiy the compression scheme: ---- Compression ---- LZW LZW encoded (note extra space at end) RLEn RLE method N (1 to 4) encoded HUFF Huffman encoded LZHF LZHUF encoded (LZSS + Arithmetic) (Note - the authors of LZHUF to not allow using is for any commicial purpose) LZAR LZARI encoded (LZSS + Huffman) WCOD Word coded -- text only If no signature is found it is assumed to be raw data. The word coding compression is as follows: * Initalize dictionary (max. size FFFF) * Loop until end-of-file * Read a space-delimited word from the input stream * Search for the word in the dictionary * If it is not there, add it to the first free space and output location of where in the dictionary the word was added as a 16-bit integer. * If it is there, output the location of where it is as a 16-bit integer. * Write dictionary at end of file. Each word is null-terminated, whole dictionary is double-null terminated. This means that each word will be encoded as 2 bytes. The last character is an end-of-file character to insure the whole file was recived when transfering this archive.