campo-sirio/arch/aldefs.h

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