/* * ALDEFS.H * * Header file for ArchiveLib 2.0 * * Copyright (c) 1994-1996 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 : This library can use some or all of the Windows API * AL_FLAT_MODEL : This library is a 32 bit library * AL_LARGE_DATA : Data uses 16:16 data pointer * AL_SMALL_CODE : Code uses 16 bit function pointers * AL_OS2 : Some day. * AL_UNIX : Those days are gone! * AL_KR : Non-ANSI C, like the portable c compiler * * AL_BUILDING_DLL : Building the Windows DLL * AL_USING_DLL : Change all pointer args to FAR if set * AL_USING_CRT_DLL : * AL_VB : Building a Win16 DLL appropriate for VB 3.0 * * AL_SYMANTEC : Compiler selection * AL_BORLAND : Compiler selection * AL_MICROSOFT : Compiler selection * AL_WATCOM : Compiler selection * AL_SUN4 : No more! * * AL_UNUSED_PARAMETER : A macro that lets me make warning messages * about unused parameters in C programs go away. * * Based on those settings, we can set this: * * AL_WIN32 : This is NT or Win32s * * AL_WINDOWS AL_FLAT_MODEL * Vanilla DOS NO NO * Borland DPMI16 NO NO * Borland DPMI32 NO YES * Symantec DOSX NO YES * Win32s YES YES * Vanilla Windows 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" * AL_EXPORT : Used to define export functions under Windows, only * for examples and so on. _export for Win16, blank for * Win32. * * 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 * * July 7, 1994 1.0B : Added an #ifdef for Watcom 9.5. It couldn't take * a pragma that 10.0 was happy with. * * July 11, 1994 1.0B : Added the AL_EXPORT constant. This is mostly used * for my examples. * * August 10, 1994 1.0B : Added AL_KR, AL_VB, AL_UNIX, AL_SUN4, and AL_GCC. * * January 12, 1995 1.01B : Added AL_UNUSED_PARAMETR. * * February 14, 1996 2.0A : New 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. It is an awful mess, * sorry. */ #if defined(__BORLANDC__) || defined(__TURBOC__) #if sizeof( int ) == 4 # define AL_FLAT_MODEL #endif #if defined( _RTLDLL ) # define AL_USING_CRT_DLL #endif # if defined( __OS2__ ) # define AL_OS2 # endif # if defined( __WIN32__ ) /* && !defined( __DPMI32__ ) */ # define AL_WINDOWS # endif # if !defined( __BORLANDC__ ) # define AL_BORLAND __TURBOC__ # else # define AL_BORLAND __BORLANDC__ # endif # if sizeof( void * ) == 4 # define AL_LARGE_DATA # endif typedef void (*_alfnptr)(void); # if sizeof( _alfnptr ) == 2 # define AL_SMALL_CODE # endif # if defined( _Windows ) /* && !defined( __DPMI16__ ) && !defined( __DPMI32__ ) */ # define AL_WINDOWS # ifdef __DLL__ # define AL_BUILDING_DLL # endif # elif defined( __OS2__ ) # ifdef __DLL__ # define AL_BUILDING_DLL # endif # endif #elif defined( __SC__ ) # define AL_SYMANTEC _MSC_VER # if defined( __NT__ ) # define AL_WINDOWS # define AL_FLAT_MODEL # endif # if defined( _M_I86HM ) || defined( _M_I86CM ) || defined( _M_I86LM ) # define AL_LARGE_DATA # endif # if defined( _M_I86TM ) || defined( _M_I86SM ) || defined( _M_I86CM ) # define AL_SMALL_CODE # endif /* * The _WINDOWS and _WINDLL macros are only documented in LIBRARY.TXT */ # ifdef _WINDOWS # define AL_WINDOWS # 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 ) && defined( _MSDOS ) # define AL_MICROSOFT _MSC_VER #if defined( _MT ) && defined( _DLL ) # define AL_USING_CRT_DLL #endif # if defined( _M_I86HM ) || defined( _M_I86CM ) || defined( _M_I86LM ) # define AL_LARGE_DATA # endif # if defined( _M_I86TM ) || defined( _M_I86SM ) || defined( _M_I86CM ) # define AL_SMALL_CODE # 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 # 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 ) && !defined( _MSDOS ) /* Looks like NT */ # define AL_MICROSOFT _MSC_VER # define AL_FLAT_MODEL # define AL_LARGE_DATA # define AL_WIN32 # define AL_WINDOWS /* * See the previous MSC standard section for the meanings of these pragmas. */ # pragma warning( disable : 4699 ) # pragma warning( disable : 4505 ) # pragma warning( disable : 4705 ) # pragma warning( disable : 4270 ) # pragma warning( disable : 4711 ) # pragma warning( disable : 4710 ) /* * We get this error in Microsoft's header files! */ # pragma warning( disable : 4201 ) # ifdef _WINDOWS # define AL_WINDOWS # ifdef _WINDLL # define AL_BUILDING_DLL # endif # endif #elif defined( __WATCOMC__ ) && defined( __386__ ) # ifdef __WINDOWS__ # define AL_WINDOWS # endif # define AL_FLAT_MODEL # ifdef __SW_ZU # define AL_BUILDING_DLL # endif # if __WATCOMC__ > 950 # pragma warning 690 9 /* Warning for AL_ASSERT() at /w3 */ # pragma warning 549 9 /* Warning for sizeof() on class */ # endif #elif defined( __WATCOMC__ ) && !defined( __386__ ) # define AL_WATCOM # ifdef __WINDOWS__ # define AL_WINDOWS # 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 # if defined( _M_I86TM ) || defined( _M_I86SM ) || defined( _M_I86CM ) # define AL_SMALL_CODE # 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 #elif defined( AL_SUN4 ) # define AL_UNIX # if !defined( AL_GCC ) && !defined( __cplusplus ) # define AL_KR # endif #else #error "Unknown compiler!" #endif #if defined( AL_OS2 ) #define INCL_WIN #include #endif # ifdef AL_FLAT_MODEL # define AL_HUGE # else # define AL_HUGE _huge # endif #if defined( AL_WINDOWS ) # if defined( AL_VB32 ) # define INC_OLE2 # endif # if !defined( STRICT ) # define STRICT # endif # include #endif /* * I modified some assumptions here. I now assume that all 32 bit DOS * Extenders are going to use the Win32 memory API. */ #if defined( AL_WINDOWS ) && defined( AL_FLAT_MODEL ) # define AL_WIN32 #endif #if defined( AL_BUILDING_DLL ) #if defined( AL_FLAT_MODEL ) && defined( AL_MICROSOFT ) # if defined( AL_VB32 ) # define AL_CLASS_TYPE # define AL_LINKAGE # define AL_PROTO # define AL_DLL_FAR # define AL_FUNCTION _stdcall # define AL_CFUNCTION _stdcall # else /* if defined( AL_VB32 ) */ # define AL_CLASS_TYPE __declspec( dllexport ) # define AL_LINKAGE __declspec( dllexport ) # define AL_PROTO # define AL_DLL_FAR # define AL_FUNCTION # define AL_CFUNCTION # endif /* if defined( AL_VB32 ) */ # elif defined( AL_IBM ) # define AL_CLASS_TYPE _Export # define AL_LINKAGE # define AL_PROTO _Export # define AL_DLL_FAR # define AL_FUNCTION _Export /* should I use _Pascal? */ # define AL_CFUNCTION _Export __cdecl # elif defined( AL_FLAT_MODEL ) # define AL_CLASS_TYPE _export # define AL_LINKAGE # 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_LINKAGE # 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_LINKAGE # 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 ) && !defined( AL_OS2 ) # define AL_CLASS_TYPE _import # define AL_LINKAGE # 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_BORLAND ) && defined( AL_OS2 ) # define AL_CLASS_TYPE _export # define AL_LINKAGE # define AL_PROTO _export # define AL_DLL_FAR # define AL_FUNCTION _export pascal # define AL_CFUNCTION _export cdecl # elif defined( AL_IBM ) # define AL_CLASS_TYPE _Export # define AL_LINKAGE # define AL_PROTO _Export # define AL_DLL_FAR # define AL_FUNCTION _Export /* should I use _Pascal? */ # define AL_CFUNCTION _Export __cdecl # elif defined( AL_FLAT_MODEL ) && defined( AL_MICROSOFT ) # define AL_CLASS_TYPE # define AL_LINKAGE __declspec(dllimport) # define AL_PROTO # define AL_DLL_FAR # define AL_FUNCTION # define AL_CFUNCTION # elif defined( AL_FLAT_MODEL ) && defined( AL_SYMANTEC ) # define AL_CLASS_TYPE _export # define AL_LINKAGE # 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_LINKAGE # define AL_PROTO # define AL_DLL_FAR # define AL_FUNCTION _far _pascal # define AL_CFUNCTION _far cdecl # else # define AL_LINKAGE # 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_LINKAGE # define AL_DLL_FAR # define AL_FUNCTION # define AL_CFUNCTION #endif /* * I was trying to build a DLL-enabled small * model library for Borland. Couple of problems. * First, some intrinsic fn defs don't match header * file defs. For ex. strcpy() takes far args when * using the RTL DLL, but the intrinsic doesn't. * Second, a couple of functions have different * definitions depening on which include file you * select. I think this is bad, don't you? * Anwyay, for now I gave up. */ #if defined( AL_WIN32 ) #define AL_EXPORT #else #define AL_EXPORT _export #endif #if defined( AL_MICROSOFT ) # define AL_UNUSED_PARAMETER( a ) ( a = a ) /* Tag internal macro */ #else # define AL_UNUSED_PARAMETER( a ) (void) a #endif #if defined( AL_IBM ) && ( defined( AL_BUILDING_DLL ) || defined( AL_USING_DLL ) ) # define AL_INLINE_PROTO #else # define AL_INLINE_PROTO AL_PROTO #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 { /* Tag public type */ 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 { /* Tag public type */ AL_SEND_BYTE_COUNT, AL_SEND_RATIO }; /* * Global enumerated error codes */ enum ALErrors { /* Tag public type */ 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 { /* Tag public type */ 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 { /* Tag public type */ 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 }; #define AL_DEFAULT (-2) /* Used by C to define default args */ /* * 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 { /* Tag public type */ 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 { /* Tag public type */ AL_UNDEFINED = -2, AL_STORAGE_DEFAULT = -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 { /* Tag public type */ AL_COMPRESSION_DEFAULT = -1, AL_COMPRESSION_COPY = 0, AL_COMPRESSION_GREENLEAF = 1, AL_COMPRESSION_DEFLATE_COPY = 100, AL_COMPRESSION_DEFLATE_SHRUNK = 101, AL_COMPRESSION_DEFLATE_REDUCE_1 = 102, AL_COMPRESSION_DEFLATE_REDUCE_2 = 103, AL_COMPRESSION_DEFLATE_REDUCE_3 = 104, AL_COMPRESSION_DEFLATE_REDUCE_4 = 105, AL_COMPRESSION_DEFLATE_IMPLODE = 106, AL_COMPRESSION_DEFLATE = 108 }; #if !defined( __cpluscplus ) #define DECLARE_AL_HANDLE( x ) \ struct x##_bogus_struct { \ int x##_bogus_unused_member; \ }; \ typedef struct x##_bogus_struct AL_DLL_FAR * x DECLARE_AL_HANDLE( hALCompressed ); DECLARE_AL_HANDLE( hALMonitor ); DECLARE_AL_HANDLE( hALArchive ); DECLARE_AL_HANDLE( hALDecompressor ); DECLARE_AL_HANDLE( hALCompressor ); DECLARE_AL_HANDLE( hALStorage ); DECLARE_AL_HANDLE( hALEntryList ); DECLARE_AL_HANDLE( hALEntry ); DECLARE_AL_HANDLE( hALExpander ); /* ALWildCardExpander */ DECLARE_AL_HANDLE( hALToolKit ); #endif /* #if !defined( __cpluscplus ) ... */ #endif