/* * 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 #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