428 lines
12 KiB
C
Executable File
428 lines
12 KiB
C
Executable File
/*
|
|
* ALDEFS.H
|
|
*
|
|
* Header file for ArchiveLib 1.0
|
|
*
|
|
* Copyright (c) 1994 Greenleaf Software, Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This is the setup file for ArchiveLib. Everyone else has to include
|
|
* it, because all of the macros defined in here help to control
|
|
* how the library operates. Normally you will never have to include
|
|
* this header file, because it is included by ARCLIB.H, and consequently,
|
|
* everyone else.
|
|
*
|
|
* MACROS
|
|
*
|
|
* These are all calculated automatically for supported compilers.
|
|
*
|
|
* AL_WINDOWS_GUI : This library uses the Windows GUI API
|
|
* AL_WINDOWS_MEMORY : This library uses the Windows Memory API
|
|
* AL_FLAT_MODEL : This library uses 386 Flat Model
|
|
* AL_LARGE_DATA : Data uses 16:16 data pointer
|
|
* AL_OS2 : Some day.
|
|
* AL_UNIX : Some day.
|
|
*
|
|
* AL_BUILDING_DLL : Building the Windows DLL
|
|
* AL_USING_DLL : Linking to the Windows DLL
|
|
*
|
|
* AL_SYMANTEC : Compiler selection
|
|
* AL_BORLAND : Compiler selection
|
|
* AL_MICROSOFT : Compiler selection
|
|
* AL_WATCOM : Compiler selection
|
|
*
|
|
* Based on those settings, we can set this:
|
|
*
|
|
* AL_WIN32S : This is NT or Win32s
|
|
*
|
|
* AL_WINDOWS_GUI AL_WINDOWS_MEMORY AL_FLAT_MODEL
|
|
* Vanilla DOS NO NO NO
|
|
* Borland DPMI16 NO YES NO
|
|
* Borland DPMI32 NO YES YES
|
|
* Symantec DOSX NO NO YES
|
|
* Win32s YES YES YES
|
|
* Vanilla Windows YES YES NO
|
|
*
|
|
* Finally, we use those to create these things used in prototypes:
|
|
*
|
|
* AL_CLASS_TYPE : Sometimes "export", for classes in DLLs
|
|
* AL_PROTO : Sometimes "export", for functions in DLLs
|
|
* AL_DLL_FAR : Sometimes "far", for arguments being passed to DLLs
|
|
* AL_FUNCTION : Vanilla exported functions are "_export pascal"
|
|
* AL_CFUNCTION : Variable argument export functions are "_export cdecl"
|
|
*
|
|
* PROTOTYPES:
|
|
*
|
|
*
|
|
* ENUMERATED TYPES:
|
|
*
|
|
* ALMonitorType : Used to indicate whether a monitor
|
|
* is watching objects or an entire job.
|
|
*
|
|
* ALWindowsMessageType : To indicate whether an object of
|
|
* class ALMonitor is supposed to be
|
|
* sending total byte counts or
|
|
* percentage complete ratios.
|
|
*
|
|
* ALErrors : The global list of errors.
|
|
*
|
|
* ALCase : Used by ALName to indicate case
|
|
* sensitivity/handling
|
|
*
|
|
* ALGreenleafCompressionLevels : The five levels used by ALGreenleafEngine.
|
|
*
|
|
* ALTraverseSetting : Used to indicate whether class
|
|
* ALWildCardExpander will traverse
|
|
* subdirectories when searching.
|
|
*
|
|
* ALStorageType : The type of a storage engine.
|
|
*
|
|
* ALCompressionType : The type of a compression engine.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
*/
|
|
#ifndef _ALDEFS_H
|
|
#define _ALDEFS_H
|
|
/*
|
|
* The next long set of definitions and tests are all here simply to
|
|
* determine which compiler we are using, and what sort of target
|
|
* configuration we are trying to build/use.
|
|
*/
|
|
#if defined(__BORLANDC__) || defined(__TURBOC__)
|
|
#if defined( __WIN32__ )
|
|
#define AL_FLAT_MODEL
|
|
#endif
|
|
#if !defined( __BORLANDC__ )
|
|
#define AL_BORLAND __TURBOC__
|
|
#else
|
|
#define AL_BORLAND __BORLANDC__
|
|
#endif
|
|
#if sizeof( void * ) == 4
|
|
#define AL_LARGE_DATA
|
|
#endif
|
|
#if defined( _Windows )
|
|
#define AL_WINDOWS_MEMORY
|
|
#ifdef __DLL__
|
|
#define AL_BUILDING_DLL
|
|
#endif
|
|
#if !defined( __DPMI16__ ) && !defined( __CONSOLE__ )
|
|
#define AL_WINDOWS_GUI
|
|
#endif
|
|
#endif
|
|
#elif defined( __SC__ )
|
|
#define AL_SYMANTEC _MSC_VER
|
|
#if defined( __NT__ )
|
|
#define AL_FLAT_MODEL
|
|
#define AL_WINDOWS_MEMORY
|
|
#define AL_WINDOWS_GUI
|
|
#endif
|
|
#if defined( _M_I86HM ) || defined( _M_I86CM ) || defined( _M_I86LM )
|
|
#define AL_LARGE_DATA
|
|
#endif
|
|
/*
|
|
* The _WINDOWS and _WINDLL macros are only documented in LIBRARY.TXT
|
|
*/
|
|
#ifdef _WINDOWS
|
|
#define AL_WINDOWS_MEMORY
|
|
#define AL_WINDOWS_GUI
|
|
#ifdef _WINDLL
|
|
#define AL_BUILDING_DLL
|
|
#ifndef M_I86LM
|
|
#error All DLLs must be built using Large Model!
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#elif defined( _MSC_VER )
|
|
#define AL_MICROSOFT _MSC_VER
|
|
#if defined( _M_I86HM ) || defined( _M_I86CM ) || defined( _M_I86LM )
|
|
#define AL_LARGE_DATA
|
|
#endif
|
|
#if ( AL_MICROSOFT >= 800 )
|
|
/*
|
|
* I really don't want MSC to tell me when it is using a precompiled
|
|
* header file. What is really dumb is that I probably do want it
|
|
* to tell me when it is creating one, but they generate the same
|
|
* warning!
|
|
*/
|
|
#pragma warning( disable : 4699 )
|
|
/*
|
|
* This error occurs if you have inline functions in a header file and
|
|
* they don't get used in a particular file. Bogus.
|
|
*/
|
|
#pragma warning( disable : 4505 )
|
|
/*
|
|
* This warning occurs if you are using assert() macros with NDEBUG and /Ox
|
|
* it is bogus
|
|
*/
|
|
#pragma warning( disable : 4705 )
|
|
/*
|
|
* This gives a warning for cout << setw( x )
|
|
*/
|
|
#pragma warning( disable : 4270 )
|
|
/*
|
|
* This is informational, it tells me when a function has been
|
|
* chosen for inlining.
|
|
*/
|
|
#pragma warning( disable : 4711 )
|
|
/*
|
|
* This is informational, it tells me when a function has been
|
|
* rejected for inlining. The funny part is that it gives
|
|
* me this message even if I don't select inlining for that
|
|
* particular function???
|
|
*/
|
|
#pragma warning( disable : 4710 )
|
|
#else /*#if ( AL_MICROSOFT >= 800 ) */
|
|
/*
|
|
* Microsoft C 7.0 has a major linker problems if a symbol exceeds
|
|
* 64 characters. Unfortunately, with full decoration, we have
|
|
* a couple of functions that hit that wall. So I have to redefine
|
|
* a couple of innocuous class names. I am trying to use similar
|
|
* names so that if you hit them in the debugger you will be able
|
|
* to understand what they mean.
|
|
*
|
|
* #if defined( _WINDLL )
|
|
* #define ALWindowsMessage ALWinMsg_
|
|
* #define ALCompressionEngine ALEngine_
|
|
* #endif NOTE: Fixing problem with /H64 in BUILD.INI! */
|
|
#endif /*#if ( AL_MICROSOFT >= 800 ) ... #else */
|
|
#ifdef _WINDOWS
|
|
#define AL_WINDOWS_MEMORY
|
|
#define AL_WINDOWS_GUI
|
|
#ifdef _WINDLL
|
|
#define AL_BUILDING_DLL
|
|
#ifndef M_I86LM
|
|
#error All DLLs must be built using Large Model!
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#elif defined( __WATCOMC__ ) && defined( __386__ )
|
|
#define AL_FLAT_MODEL
|
|
#ifdef __WINDOWS__
|
|
#define AL_WINDOWS_MEMORY
|
|
#define AL_WINDOWS_GUI
|
|
#endif
|
|
#pragma warning 690 9 /* Warning for AL_ASSERT() at /w3 */
|
|
#pragma warning 549 9 /* Warning for sizeof() on class */
|
|
#elif defined( __GNUC__ )
|
|
#define AL_FLAT_MODEL
|
|
#ifdef __WINDOWS__
|
|
#define AL_WINDOWS_MEMORY
|
|
#define AL_WINDOWS_GUI
|
|
#endif
|
|
#elif defined( __WATCOMC__ ) && !defined( __386__ )
|
|
#define AL_WATCOM
|
|
#ifdef __WINDOWS__
|
|
#define AL_WINDOWS_MEMORY
|
|
#define AL_WINDOWS_GUI
|
|
#ifdef __SW_ZU
|
|
#define AL_BUILDING_DLL
|
|
#ifndef M_I86LM
|
|
#error All DLLs must be built using Large Model!
|
|
#endif
|
|
#endif
|
|
#endif
|
|
#if defined( _M_I86HM ) || defined( _M_I86CM ) || defined( _M_I86LM )
|
|
#define AL_LARGE_DATA
|
|
#endif
|
|
#pragma warning 549 9 /* Warning for sizeof() on class */
|
|
#elif defined( __IBMC__ ) || defined( __IBMCPP__ )
|
|
#define AL_IBM
|
|
#define AL_OS2
|
|
#define AL_FLAT_MODEL
|
|
#else
|
|
#error "Unknown compiler!"
|
|
#endif
|
|
|
|
#if defined( AL_WINDOWS_MEMORY ) || defined( AL_WINDOWS_GUI )
|
|
#define STRICT
|
|
#include <windows.h>
|
|
#ifdef AL_FLAT_MODEL
|
|
#define AL_HUGE
|
|
#else
|
|
#define AL_HUGE _huge
|
|
#endif
|
|
#else
|
|
#define WORD unsigned int
|
|
#define DWORD unsigned long
|
|
#endif
|
|
|
|
#if defined( AL_WINDOWS_GUI ) && defined( AL_WINDOWS_MEMORY ) && defined( AL_FLAT_MODEL )
|
|
#define AL_WIN32S
|
|
#endif
|
|
|
|
#if defined( AL_BUILDING_DLL )
|
|
#if defined( AL_FLAT_MODEL )
|
|
#define AL_CLASS_TYPE _export
|
|
#define AL_PROTO _export
|
|
#define AL_DLL_FAR
|
|
#define AL_FUNCTION _export pascal
|
|
#define AL_CFUNCTION _export cdecl
|
|
#elif defined( AL_WATCOM )
|
|
#define AL_CLASS_TYPE
|
|
#define AL_PROTO _export
|
|
#define AL_DLL_FAR
|
|
#define AL_FUNCTION _export _far pascal
|
|
#define AL_CFUNCTION _export _far cdecl
|
|
#else
|
|
#define AL_CLASS_TYPE _export
|
|
#define AL_PROTO _far
|
|
#define AL_DLL_FAR _far
|
|
#define AL_FUNCTION _export _far pascal
|
|
#define AL_CFUNCTION _export _far cdecl
|
|
#endif
|
|
#elif defined( AL_USING_DLL )
|
|
#if defined( AL_FLAT_MODEL ) && defined( AL_BORLAND )
|
|
#define AL_CLASS_TYPE _import
|
|
#define AL_PROTO _import
|
|
#define AL_DLL_FAR
|
|
#define AL_FUNCTION _import pascal
|
|
#define AL_CFUNCTION _import cdecl
|
|
#elif defined( AL_FLAT_MODEL ) && defined( AL_SYMANTEC )
|
|
#define AL_CLASS_TYPE _export
|
|
#define AL_PROTO _export
|
|
#define AL_DLL_FAR
|
|
#define AL_FUNCTION _export pascal
|
|
#define AL_CFUNCTION _export cdecl
|
|
#elif defined( AL_WATCOM )
|
|
#define AL_PROTO
|
|
#define AL_DLL_FAR
|
|
#define AL_CLASS_TYPE
|
|
#define AL_FUNCTION _far _pascal
|
|
#define AL_CFUNCTION _far cdecl
|
|
#else
|
|
#define AL_PROTO _far
|
|
#define AL_DLL_FAR _far
|
|
#ifdef AL_BORLAND
|
|
#if ( AL_BORLAND >= 0x450 )
|
|
#define AL_CLASS_TYPE _import
|
|
#else
|
|
#define AL_CLASS_TYPE _huge
|
|
#endif
|
|
#else
|
|
#define AL_CLASS_TYPE _export
|
|
#endif
|
|
#define AL_FUNCTION _export _far _pascal
|
|
#define AL_CFUNCTION _export _far cdecl
|
|
#endif
|
|
#else
|
|
#define AL_PROTO
|
|
#define AL_CLASS_TYPE
|
|
#define AL_DLL_FAR
|
|
#define AL_FUNCTION
|
|
#define AL_CFUNCTION
|
|
#endif
|
|
|
|
/*
|
|
* All objects of type ALMonitor are set up to monitor jobs or objects.
|
|
* This enum is passed to the constructor to select which one is desired.
|
|
*/
|
|
enum ALMonitorType {
|
|
AL_MONITOR_OBJECTS,
|
|
AL_MONITOR_JOB
|
|
};
|
|
|
|
/*
|
|
* An ALMonitor object can either send out byte counts or percentage
|
|
* complete ratios. When constructing the object, this enum indicates
|
|
* which strategy is going to be used.
|
|
*/
|
|
enum ALWindowsMessageType {
|
|
AL_SEND_BYTE_COUNT,
|
|
AL_SEND_RATIO,
|
|
};
|
|
|
|
/*
|
|
* Global enumerated error codes
|
|
*/
|
|
enum ALErrors {
|
|
AL_CANT_OPEN_BUFFER = -1200,
|
|
AL_CANT_ALLOCATE_MEMORY,
|
|
AL_CANT_CREATE_ENGINE,
|
|
AL_CANT_CREATE_STORAGE_OBJECT,
|
|
AL_RENAME_ERROR,
|
|
AL_CANT_OPEN_FILE,
|
|
AL_SEEK_ERROR,
|
|
AL_READ_ERROR,
|
|
AL_WRITE_ERROR,
|
|
AL_DELETE_ERROR,
|
|
AL_ILLEGAL_PARAMETER,
|
|
AL_INTERNAL_ERROR,
|
|
AL_USER_ABORT,
|
|
AL_SERVER_NOT_PRESENT,
|
|
AL_COMPRESSION_TYPE_MISMATCH,
|
|
AL_NEED_LENGTH,
|
|
AL_CRC_ERROR,
|
|
AL_COMPARE_ERROR,
|
|
AL_UNKNOWN_COMPRESSION_TYPE,
|
|
AL_UNKNOWN_STORAGE_OBJECT,
|
|
AL_INVALID_ARCHIVE,
|
|
AL_LOGIC_ERROR,
|
|
AL_BACKUP_FAILURE,
|
|
AL_GETSEL_ERROR,
|
|
AL_DUPLICATE_ENTRY,
|
|
AL_END_OF_FILE = -1,
|
|
AL_SUCCESS = 0
|
|
};
|
|
|
|
/*
|
|
* Enum used by ALName guys. Names can either be forced to upper
|
|
* or lower case, or support normal mixed case representations. Objects
|
|
* like MS-DOS file names should be forced to upper or lower, since the
|
|
* O/S keeps the names as case insensitive.
|
|
*/
|
|
|
|
enum ALCase {
|
|
AL_UPPER,
|
|
AL_LOWER,
|
|
AL_MIXED
|
|
};
|
|
|
|
/*
|
|
* Compressing levels used by the Greenleaf Engine. In the archive, this
|
|
* ratio is stored in the engine private data.
|
|
*/
|
|
enum ALGreenleafCompressionLevels {
|
|
AL_GREENLEAF_COPY = -1,
|
|
AL_GREENLEAF_LEVEL_0 = 0,
|
|
AL_GREENLEAF_LEVEL_1,
|
|
AL_GREENLEAF_LEVEL_2,
|
|
AL_GREENLEAF_LEVEL_3,
|
|
AL_GREENLEAF_LEVEL_4,
|
|
};
|
|
|
|
/*
|
|
* Used when constructing ALWildCardExpander objects. It decides whether
|
|
* the expander will traverse the entire subdirectory tree, or just stay
|
|
* on the current level.
|
|
*/
|
|
|
|
enum ALTraverseSetting {
|
|
AL_TRAVERSE = 1,
|
|
AL_DONT_TRAVERSE = 0,
|
|
};
|
|
|
|
/*
|
|
* The type of storage object. This is stored in the base class, ALStorage,
|
|
* and is initialized in the constructor.
|
|
*/
|
|
enum ALStorageType {
|
|
AL_UNDEFINED = -1,
|
|
AL_MEMORY_OBJECT = 0,
|
|
AL_FILE_OBJECT = 1 };
|
|
|
|
/*
|
|
* The type of compression engine. This is stored in the base class,
|
|
* ALEngine, and is initialized in the constructor.
|
|
*/
|
|
enum ALCompressionType {
|
|
AL_COMPRESSION_COPY = 0,
|
|
AL_COMPRESSION_GREENLEAF = 1
|
|
};
|
|
|
|
#endif
|