Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

#ifndef MHMT_GLOBALS_H

#define MHMT_GLOBALS_H


#include <stdio.h>
#include "mhmt-types.h"

//#define DBG


// packer/depacker type constants, used in struct global
#define PK_MLZ  1
#define PK_HRM  2
#define PK_HST  3
#define PK_ZX7  4



// definition of a global configuration/working structure:
// holding parsed commandline options, file sizes/descriptors,
// allocated memory arrays etc.
struct globals
{
        ULONG packtype; // packer/depacker type: one of PK_* constants

        ULONG greedy; // zero if no greedy mode coding (optimal coding), non-zero if greedy mode

        ULONG mode; // zero if packing, non-zero if depacking

        ULONG zxheader; // zero if no zx header needed, non-zero if zx header is needed.
                        // zx header, among other, contain some bytes from the end of the unpacked file

        ULONG wordbit; // zero if bitstream is spread in 8bit (one-byte) chunks across bytestream,
                       // non-zero if chunks are 16bit (two-byte).

        ULONG bigend; // zero if 16bit bitstream chunks are little-endian, non-zero if big-endian:
                      // for 16 consecutive bits abcdefghijklmnop, big-endian will be
                      // consecutive bytes [abcdefgh],[ijklmnop], little-endian [ijklmnop],[abcdefgh]

        ULONG fullbits; // nonzero if 'full bits', i.e. new bitword in depacker fetched after last bit consumed
                        // zero if 'empty bits', new bitword fetched when bit is needed but no ones left

        ULONG maxwin; // maximum window (or lookback), positive number, which is one of:
                     // 256,512,1024,2048,4096,4352,8192,16384,32768 or 65536

        ULONG prebin; // nonzero if pre-binary file is specified in arguments


        char * fname_in;
        char * fname_out;
        char * fname_prebin; // filename of prebin file

        FILE * file_in;
        FILE * file_out;
        FILE * file_prebin;

        UBYTE * indata;     // to use in normal depacking process -- begins from input file data
        UBYTE * indata_raw; // to pre-parse prebin file or to free() array -- begins from prebin file if any or from input file (if no prebin)

        ULONG inlen;

        ULONG prelen;
};


extern struct globals wrk;



void init_globals(void);
void free_globals(void);



#endif