/* * s_comput.h * * This file is a part of the Sophos Anti-Virus Interface (SAVI)(tm). * * Copyright (C) 1997,2000 Sophos Plc. * All rights reserved. * * This source code is only intended as a supplement to the * SAVI(tm) Reference and related documentation for the library. * * Determines the platform and compiler in use. */ #ifndef __S_COMPUT_H__ #define __S_COMPUT_H__ /* * Compiler: * __SOPHOS_WC__ Watcom * __SOPHOS_MS__ Microsoft * __SOPHOS_BC__ Borland * __SOPHOS_GC__ GNU * __SOPHOS_DECC__ Digital C/C++ * __SOPHOS_MWERKS__ Metrowerks Codewarrior C/C++ compiler * __SOPHOS_IBMC__ IBM * __SOPHOS_SUNC__ Sun * * Hardware platform: * __SOPHOS_I86__ Intel 8086+ * __SOPHOS_I386__ Intel 80386+ * __SOPHOS_ALPHA__ Alpha AXP * __SOPHOS_SPARC__ Sun SPARC * __SOPHOS_POWERPC__ IBM PowerPC/RS6000/PowerMac * __SOPHOS_68000__ Macintosh 68000 (PowerMac can emulate this) (Metrowerks and GCC) * __SOPHOS_HP_PA__ HP Precision Architecture * * Executable format: * __SOPHOS_EF_MACHO__ Apple OSX macho Executable Format (Metrowerks or GNUC/ProjectBuilder) * __SOPHOS_EF_CFM__ Apple CFM Executable Format. (Metrowerks or GNUC/ProjectBuilder) * * API set: * __SOPHOS_API_CARBON__ Apple Carbon API calls (Metrowerks or GNUC/ProjectBuilder) * __SOPHOS_API_COCOA__ Apple Cocoa API calls, including carbon (Metrowerks or GNUC/Project Builder) * __SOPHOS_API_APPLE_OS8__ Apple pre Carbon classic API calls. (Metrowerks only) * __SOPHOS_API_OSX_UNIX__ Apple OSX std unix calls. (Metrowerks or GNUC/ProjectBuilder) * macho target only. * * Operating system: * __SOPHOS_DOS__ DOS * __SOPHOS_DOS32__ Extended DOS * __SOPHOS_DOS4GW__ Extended DOS using 4GW Extender * __SOPHOS_WIN16__ 16-bit Windows * __SOPHOS_WIN32__ 32-bit Windows * __SOPHOS_OS2__ OS/2 * __SOPHOS_NW__ NetWare * __SOPHOS_SOL2__ Solaris 2 * __SOPHOS_LINUX__ Linux * __SOPHOS_DEC_UNIX__ Digital Unix * __SOPHOS_SCO_UNIXWARE__ SCO UnixWare * __SOPHOS_SCO_OPENSERVER__ SCO OpenServer * __SOPHOS_HP_UX__ HP-UX * __SOPHOS_FREEBSD__ FreeBSD * __SOPHOS_AIX__ IBM AIX * __SOPHOS_BANYAN_VINES__ Banyan VINES Server * __SOPHOS_MACOS__ Macintosh OS All variants * __SOPHOS_OSX__ Macintosh OS MachO OSX std unix API. * __SOPHOS_CFM_CARBON__ Macintosh CFM Carbon application that will run on OS9 and OSX * __SOPHOS_MAC_CLASSIC__ Macintosh Classic 7.5 to 9.1 * __SOPHOS_VMS__ VMS * * Special features: * __SOPHOS_ALIGNED_ACCESS__ Requires data accesses to be aligned in some way. * * Operating system features: * __SOPHOS_YIELD__ Requires periodic task switching for smooth performance * * Declaration specifications: * SOPHOS_EXPORT Export declaration * (controlled by __SOPHOS_EXPORT__, or * automatically when compiling as DLL) * * SOPHOS_EXPORTC C function export declaration * (controlled by __SOPHOS_EXPORT__, or * automatically when compiling as DLL) * * SOPHOS_PUBLIC Similar to SOPHOS_EXPORT but * different (static functions, but * available for calling from outside * a DLL via function pointers). * * SOPHOS_PUBLIC_PTR Is a pointer to a SOPHOS_PUBLIC. * * SOPHOS_FAR Far declaration (used for Win16 and DOS) * (automatically controlled by target platform) * * SOPHOS_INLINEC Inline C function declaration * (controlled by __SOPHOS_INLINE__) * SOPHOS_INL_KW the inline keyword for the current platform * * SOPHOS_CVTBL_METHOD C++ calling convention for mirroring * virtual tables declared in C. * (automatically controlled by target platform) * * SOPHOS_STDCALL Keyword for standard C calling convention. * */ /* ----- */ /* * Clear everything to start with, apart from * those things that the build environment must * define by hand. These are: * __SOPHOS_BANYAN_VINES__ * __SOPHOS_WINNT__ * __SOPHOS_WIN95__ */ #undef SOPHOS_EXPORT #undef SOPHOS_EXPORTC #undef SOPHOS_IMPORT #undef SOPHOS_PUBLIC #undef SOPHOS_PUBLIC_PTR #undef SOPHOS_FAR #undef SOPHOS_INLINEC #undef SOPHOS_INL_KW #undef SOPHOS_CVTBL_METHOD #undef SOPHOS_STDCALL #undef __SOPHOS_I86__ #undef __SOPHOS_I386__ #undef __SOPHOS_ALPHA__ #undef __SOPHOS_SPARC__ #undef __SOPHOS_POWERPC__ #undef __SOPHOS_68000__ #undef __SOPHOS_HP_PA__ #undef __SOPHOS_EF_MACHO__ #undef __SOPHOS_EF_CFM__ #undef __SOPHOS_API_CARBON__ #undef __SOPHOS_API_APPLE_OS8__ #undef __SOPHOS_API_COCOA__ #undef __SOPHOS_API_OSX_UNIX__ #undef __SOPHOS_DOS__ #undef __SOPHOS_DOS32__ #undef __SOPHOS_DOS4GW__ #undef __SOPHOS_WIN16__ #undef __SOPHOS_WIN32__ #undef __SOPHOS_OS2__ #undef __SOPHOS_NW__ #undef __SOPHOS_SOL2__ #undef __SOPHOS_LINUX__ #undef __SOPHOS_DEC_UNIX__ #undef __SOPHOS_SCO_UNIXWARE__ #undef __SOPHOS_SCO_OPENSERVER__ #undef __SOPHOS_HP_UX__ #undef __SOPHOS_FREEBSD__ #undef __SOPHOS_MACOS__ #undef __SOPHOS_OSX__ #undef __SOPHOS_CFM_CARBON__ #undef __SOPHOS_MAC_CLASSIC__ #undef __SOPHOS_VMS__ #undef __SOPHOS_WC__ #undef __SOPHOS_MS__ #undef __SOPHOS_BC__ #undef __SOPHOS_GC__ #undef __SOPHOS_DECC__ #undef __SOPHOS_MWERKS__ #undef __SOPHOS_IBMC__ #undef __SOPHOS_SUNC__ #undef __SOPHOS_YIELD__ #undef __SOPHOS_BIG_ENDIAN__ #undef __SOPHOS_LITTLE_ENDIAN__ #undef __SOPHOS_ALIGNED_ACCESS__ #undef __SOPHOS_UNIX__ /* ----- */ /* * Watcom C/C++. */ #if defined(__WATCOMC__) # define __SOPHOS_WC__ /* * Export keywords for Watcom */ # if defined(__SW_BD) || defined(__SOPHOS_EXPORT__) || defined(SOPHOS_DLL) /* it's a DLL or __SOPHOS_EXPORT__ is defined */ # if defined(__WINDOWS__) # define SOPHOS_EXPORT __export __cdecl # define SOPHOS_EXPORTC __export __far __pascal # define SOPHOS_FAR __far # error Partially supported platform, please #define SOPHOS_PUBLIC/_PTR for Watcom Windows! # elif defined(__NT__) # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export __stdcall # define SOPHOS_PUBLIC __stdcall # define SOPHOS_PUBLIC_PTR __stdcall * # define SOPHOS_FAR # elif defined(__OS2__) # if defined(__386__) /* 32-bit OS2 */ # define SOPHOS_EXPORT /* __export */ # define SOPHOS_EXPORTC __export __syscall # define SOPHOS_PUBLIC __syscall # define SOPHOS_PUBLIC_PTR __syscall * # define SOPHOS_FAR # else /* defined(__386__) */ /* 16-bit OS2 */ # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export __pascal # define SOPHOS_PUBLIC __far __pascal # define SOPHOS_PUBLIC_PTR __far __pascal * # define SOPHOS_FAR __far # endif /* defined(__386__) */ # else /* some other platform */ # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export # define SOPHOS_FAR # endif # else /* defined(__SW_BD) || defined(__SOPHOS_EXPORT__) */ /* it's neither a DLL nor is __SOPHOS_EXPORT__ defined */ # define SOPHOS_EXPORT # define SOPHOS_FAR # if defined(__OS2__) # if defined(__386__) # define SOPHOS_EXPORTC __syscall # define SOPHOS_PUBLIC __syscall # define SOPHOS_PUBLIC_PTR __syscall * # else /* defined(__386__) */ # define SOPHOS_EXPORTC __far __pascal # define SOPHOS_PUBLIC __far __pascal # define SOPHOS_PUBLIC_PTR __far __pascal * # endif /* defined(__386__) */ # elif defined(__DOS4GW__) # define SOPHOS_EXPORTC # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # elif defined(__NT__) # define SOPHOS_EXPORTC __stdcall # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # elif defined(__NETWARE_386__) # define SOPHOS_EXPORTC # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # else # define SOPHOS_EXPORTC __far __pascal # error Partially supported platform, please #define SOPHOS_PUBLIC/_PTR for Watcom on your OS! # endif # endif /* defined(__SW_BD) || defined(__SOPHOS_EXPORT__) */ #define SOPHOS_IMPORT /* Watcom has no specific import keyword. */ #if !defined(__NETWARE_386__) #define SOPHOS_STDCALL #endif /* * Inline keyword for Watcom */ # define SOPHOS_INL_KW __inline # if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW # else /* defined(__SOPHOS_INLINE__) */ # define SOPHOS_INLINEC # endif /* defined(__SOPHOS_INLINE__) */ /* * Operating system for Watcom (should come before the export section) */ # if defined(__DOS__) || defined(__DOS4GW__) /* DOS */ # if defined(__FLAT__) # if defined(__DOS4GW__) # define __SOPHOS_DOS4GW__ /* DOS4GW */ # else # define __SOPHOS_DOS32__ /* DOS32 */ # endif # else # define __SOPHOS_DOS__ /* DOS */ # endif # elif defined(__WINDOWS__) /* Windows 3.x */ # define __SOPHOS_WIN16__ # define __SOPHOS_YIELD__ /* Windows */ # elif defined(__NT__) /* Win32 (95/98/NT) */ # define __SOPHOS_WIN32__ /* Win32 */ # elif defined(__OS2__) /* OS/2 2.x and 3.x */ # define __SOPHOS_OS2__ /* OS2 !! */ # elif defined(__NETWARE_386__) /* Netware 386 */ # define SOPHOS_STDCALL __stdcall # define __SOPHOS_NW__ # define __SOPHOS_YIELD__ /* Netware */ # else /* Unsupported operating system */ # error Unsupported Watcom C/C++ target operating system # endif /* * Hardware platform for Watcom */ # if defined(M_I86) && ( defined(__DOS__) || defined(__DOS4GW__) || defined(__WINDOWS__) || defined(__OS2__)) /* Intel x86 16-bit */ # define __SOPHOS_I86__ # elif defined(M_I386) /* Intel x86 32-bit */ # define __SOPHOS_I386__ # else /* Unsupported hardware platform */ # error Unsupported Watcom C/C++ target hardware platform # endif /* ----- */ /* * Microsoft C/C++. */ #elif defined(_MSC_VER) # define __SOPHOS_MS__ /* * Export keyword for Micros~1 */ # if defined(_WINDLL) || defined(_USRDLL) || defined(SOPHOS_DLL) || defined(__SOPHOS_EXPORT__) # define SOPHOS_EXPORT __declspec( dllexport ) /* The Visual C++ 2.0 Compiler obsoletes the __export */ # define SOPHOS_EXPORTC __declspec( dllexport ) __stdcall /* keyword for the dllexport storage class modifier */ # define SOPHOS_FAR # else # define SOPHOS_EXPORT # define SOPHOS_EXPORTC # define SOPHOS_FAR # endif /* SOPHOS_IMPORT is used in SOPHOS_DYNAMIC builds. */ #if defined(__SOPHOS_DYNAMIC__) # define SOPHOS_IMPORT __declspec(dllimport) #else # define SOPHOS_IMPORT #endif #define SOPHOS_STDCALL __stdcall #define SOPHOS_PUBLIC #define SOPHOS_PUBLIC_PTR * #define SOPHOS_CVTBL_METHOD __cdecl /* * Inline keyword. */ # define SOPHOS_INL_KW __inline # if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW # else /* defined(__SOPHOS_INLINE__) */ # define SOPHOS_INLINEC # endif /* defined(__SOPHOS_INLINE__) */ /* * Operating system */ #if defined(WIN32) && !defined(_WIN32) #define _WIN32 #endif # if defined(_WIN32) /* Win32 (95/98/NT) */ # define __SOPHOS_WIN32__ # elif defined(_WINDOWS) /* Windows 3.x */ # define __SOPHOS_WIN16__ # define __SOPHOS_YIELD__ # elif( _MSC_VER == 700 ) /* DOS */ # define __SOPHOS_DOS__ # elif( _MSC_VER == 800 ) /* DOS */ # define __SOPHOS_DOS__ # elif(( _MSC_VER == 600 ) && defined(__OS2__)) /* OS2 */ # define __SOPHOS_OS2__ # else /* Unsupported operating system */ # error Unsupported Microsoft C/C++ target operating system # endif /* * Hardware platform */ # if defined(_M_I86) /* Intel x86 16-bit */ # define __SOPHOS_I86__ # elif defined(_M_IX86) /* Intel x386 32-bit */ # define __SOPHOS_I386__ # elif defined(_M_ALPHA) /* DEC Alpha */ # define __SOPHOS_ALPHA__ # else /* Unsupported hardware platform */ # error Unsupported Microsoft C/C++ target hardware platform # endif /* ----- */ /* * Borland C/C++. */ #elif defined(__BORLANDC__) # define __SOPHOS_BC__ /* * Export keyword for Borland (not really used) */ # if defined(__DLL__) || defined(__SOPHOS_EXPORT__) || defined(SOPHOS_DLL) # if defined(__OS2__) # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export __far16 __pascal # define SOPHOS_PUBLIC __far16 __pascal # define SOPHOS_PUBLIC_PTR __far16 __pascal * # define SOPHOS_FAR __far16 # elif defined(__WIN32__) # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export __stdcall # define SOPHOS_FAR # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # elif defined(_Windows) # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export __far __pascal # define SOPHOS_FAR __far # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # else # define SOPHOS_EXPORT __export # define SOPHOS_EXPORTC __export # define SOPHOS_FAR # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # endif # else # define SOPHOS_EXPORT # define SOPHOS_EXPORTC # define SOPHOS_FAR # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # endif #if defined(__SOPHOS_DYNAMIC__) # define SOPHOS_IMPORT __import /* ?? */ #else # define SOPHOS_IMPORT #endif #define SOPHOS_STDCALL /* * Inline keyword. */ # define SOPHOS_INL_KW inline # if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW # else # define SOPHOS_INLINEC # endif /* * Operating system. */ # if defined(__OS2__) /* OS/2 */ # define __SOPHOS_OS2__ # elif defined(__WIN32__) /* Win32 (Windows 95 and Windows NT) */ # define __SOPHOS_WIN32__ # elif defined(_Windows) /* Windows 3.x */ # define __SOPHOS_WIN16__ # define __SOPHOS_YIELD__ # elif defined(__MSDOS__) /* DOS */ # define __SOPHOS_DOS__ # else /* Unsupported operating system */ # error Unsupported Borland C/C++ target operating system # endif /* * Hardware platform. */ # if defined(__OS2__) /* Intel x86 32-bit */ # define __SOPHOS_I386__ # elif defined(__WIN32__) /* Intel x86 32-bit */ # define __SOPHOS_I386__ # elif defined(_Windows) || defined(__MSDOS__) /* Intel x86 16-bit */ # define __SOPHOS_I86__ # else /* Unsupported hardware platform */ # error Unsupported Borland C/C++ target hardware platform # endif /* ----- */ /* * Digital C/C++. */ #elif defined(__DECC) || defined(VAXC) # define __SOPHOS_DECC__ /* * Export keyword. */ #define SOPHOS_PUBLIC #define SOPHOS_PUBLIC_PTR * #define SOPHOS_EXPORT #define SOPHOS_EXPORTC #define SOPHOS_IMPORT #define SOPHOS_STDCALL /* * Far keyword. */ #define SOPHOS_FAR /* * Inline keyword. */ # define SOPHOS_INL_KW # if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW # else # define SOPHOS_INLINEC # endif /* * Operating system */ # if defined(__unix__) # define __SOPHOS_DEC_UNIX__ # elif defined(VMS) # define __SOPHOS_VMS__ # else # error Unsupported Digital C/C++ target operating system # endif /* * Hardware platform. */ # if defined(__alpha) # define __SOPHOS_ALPHA__ # elif defined(VAX) # define __SOPHOS_VAX__ # else # error Unsupported Digital C/C++ target hardware platform # endif /* ----- */ /* * GNU C/C++. */ #elif defined(__GNUC__) # define __SOPHOS_GC__ /* * Export keyword for GCC */ #define SOPHOS_PUBLIC #define SOPHOS_PUBLIC_PTR * #define SOPHOS_EXPORT #define SOPHOS_EXPORTC #define SOPHOS_IMPORT #define SOPHOS_STDCALL /* * Far keyword. */ #define SOPHOS_FAR /* * Inline keyword. */ # define SOPHOS_INL_KW __inline__ # if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW # else # define SOPHOS_INLINEC # endif /* * Operating system for GCC */ # if defined(__linux__) # define __SOPHOS_LINUX__ # elif defined(__hpux__) # define __SOPHOS_HP_UX__ # elif defined(__sun__) # define __SOPHOS_SOL2__ # elif defined(__svr4__) # define __SOPHOS_SCO_UNIXWARE__ # elif defined(_AIX) # define __SOPHOS_AIX__ # elif defined(__FreeBSD__) # define __SOPHOS_FREEBSD__ # elif defined(__APPLE__) # define __SOPHOS_MACOS__ # ifdef __MACOS_CLASSIC__ # define __SOPHOS_EF_CFM__ # if TARGET_API_MAC_CARBON || defined(__CARBON__) || defined(CARBON) # define __SOPHOS_API_CARBON__ # define __SOPHOS_CFM_CARBON__ # else # define __SOPHOS_API_APPLE_OS8__ # define __SOPHOS_MAC_CLASSIC__ # endif /* # if TARGET_AP_MAC_CARBON */ # else # define __SOPHOS_EF_MACHO__ # define __SOPHOS_OSX__ # if TARGET_API_MAC_CARBON || defined(__CARBON__) || defined(CARBON) # define __SOPHOS_API_CARBON__ # else /* Would add an elif defined(COCOA) here if we were to add a cocoa target. */ # define __SOPHOS_API_OSX_UNIX__ # endif /* # if TARGET_AP_MAC_CARBON */ # endif # elif (defined(_SCO_DS) && defined(_SCO_ELF) && defined(_SCO_XPG_VERS) && defined(_SCO_C_DIALECT)) # define __SOPHOS_SCO_OPENSERVER__ # elif defined(__unix__) # define __SOPHOS_DEC_UNIX__ # elif defined(__SOPHOS_BANYAN_VINES__) /* Intentionally empty section! */ # elif defined(__OS2__) # define __SOPHOS_OS2__ # elif defined(__VMS__) # define __SOPHOS_VMS__ # else # error Unsupported GNU C target operating system # endif /* * Hardware platform. */ # if defined(__i386__) # define __SOPHOS_I386__ # elif (defined(__hppa__) && defined(_PA_RISC1_1)) # define __SOPHOS_HP_PA__ # elif defined(__sparc__) # define __SOPHOS_SPARC__ # elif (defined(_POWER) || defined(__ppc__) || defined(__POWERPC__) || defined(__PPC__)) # define __SOPHOS_POWERPC__ # elif (defined(TARGET_CPU_68K) || defined(__CFM68K__) || defined(m68k) || defined(_M_M68K)) # define __SOPHOS_68000__ # elif defined(__alpha__) # define __SOPHOS_ALPHA__ # elif defined (__s390__) # define __SOPHOS_S390__ # elif defined(__VAX) # define __SOPHOS_VAX__ # else # error Unsupported GNU C/C++ target hardware platform # endif /* ----- */ /* * Metrowerks Codewarrior C/C++ */ #elif defined(__MWERKS__) # define __SOPHOS_MWERKS__ /* * Export keyword. */ # define SOPHOS_EXPORT # define SOPHOS_EXPORTC # define SOPHOS_PUBLIC # define SOPHOS_PUBLIC_PTR * # define SOPHOS_FAR # define SOPHOS_IMPORT /* * Inline keyword. */ # define SOPHOS_INL_KW inline #if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW #else /* defined(__SOPHOS_INLINE__) */ # define SOPHOS_INLINEC #endif /* defined(__SOPHOS_INLINE__) */ /* * Operating system. */ # if defined(__MACH__) # define SOPHOS_STDCALL # define __SOPHOS_MACOS__ # define __SOPHOS_EF_MACHO__ # define __SOPHOS_OSX__ # define __SOPHOS_API_OSX_UNIX__ # if TARGET_API_MAC_CARBON || defined(CARBON) || defined(__CARBON__) # define __SOPHOS_API_CARBON__ # endif # elif macintosh # define SOPHOS_STDCALL # define __SOPHOS_MACOS__ # define __SOPHOS_EF_CFM__ /* __CARBON__ is set in file , which should be included if CARBON is defined */ # if TARGET_API_MAC_CARBON || defined(CARBON) || defined(__CARBON__) # define __SOPHOS_API_CARBON__ # define __SOPHOS_CFM_CARBON__ # else # define __SOPHOS_API_APPLE_OS8__ # define __SOPHOS_MAC_CLASSIC__ # endif /* #ifdef __CARBON__ */ # elif defined (N_PLAT_NLM) /* Netware 386 */ # define SOPHOS_STDCALL __stdcall # define __SOPHOS_NW__ # define __SOPHOS_YIELD__ # elif defined (_WIN32) # define SOPHOS_STDCALL __stdcall # define __SOPHOS_WIN32__ # else # error Unsupported Metrowerks target OS # endif /* * Hardware platform. */ # if __POWERPC__ # define __SOPHOS_POWERPC__ # elif __MC68K__ || defined(__CFM68K__) # define __SOPHOS_68000__ # elif defined(_M_I386) /* Intel x86 32-bit */ # define __SOPHOS_I386__ # else # error Unsupported Metrowerks target hardware platform. # endif /* ----- */ #elif defined(__IBMC__) || defined(__IBMCPP__) # define __SOPHOS_IBMC__ /* * Export keywords - IBMC */ # if defined(__DLL__) || defined(__SOPHOS_EXPORT__) || defined(SOPHOS_DLL) /* it's a DLL or __SOPHOS_EXPORT__ is defined */ # if defined(__OS2__) # if defined(_M_I386) # define SOPHOS_EXPORT # define SOPHOS_EXPORTC _System # define SOPHOS_FAR # define SOPHOS_PUBLIC _System # define SOPHOS_PUBLIC_PTR * _System # else # error Unsupported IBM C/C++ target (probably 16-bit) # endif # else # error Support for IBM VACPP on NT not yet implemented # endif # else /* it's neither a DLL nor is __SOPHOS_EXPORT__ defined */ # define SOPHOS_EXPORT # define SOPHOS_EXPORTC _System # define SOPHOS_FAR # define SOPHOS_PUBLIC _System # define SOPHOS_PUBLIC_PTR * _System # endif #define SOPHOS_STDCALL #if defined(__SOPHOS_DYNAMIC__) # define SOPHOS_IMPORT #else # define SOPHOS_IMPORT #endif /* * Inline keyword - IBMC */ # define SOPHOS_INL_KW #if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW #else /* defined(__SOPHOS_INLINE__) */ # define SOPHOS_INLINEC #endif /* defined(__SOPHOS_INLINE__) */ /* * Operating system - IBMC */ # if defined(__DOS__) /* DOS */ # if defined(__FLAT__) # define __SOPHOS_DOS32__ # else # define __SOPHOS_DOS__ # endif # elif defined(__WINDOWS__) /* Windows 3.x */ # define __SOPHOS_WIN16__ # define __SOPHOS_YIELD__ # elif defined(__NT__) /* Win32 (95/98/NT) */ # define __SOPHOS_WIN32__ # elif defined(__OS2__) /* OS/2 2.x and 3.x */ # define __SOPHOS_OS2__ # elif defined(_AIX) # define __SOPHOS_AIX__ # else /* Unsupported operating system */ # error Unsupported IBM C/C++ target operating system # endif /* * Hardware platform - IBMC */ # if defined(M_I86) && ( defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__)) /* Intel x86 16-bit */ # define __SOPHOS_I86__ # elif defined(_M_I386) /* Intel x86 32-bit */ # define __SOPHOS_I386__ # elif (defined(_POWER) || defined(__ppc__) || defined(__POWERPC__) || defined(__PPC__)) # define __SOPHOS_POWERPC__ # else /* Unsupported hardware platform */ # error Unsupported IBM C/C++ target hardware platform # endif /* ----- */ #elif defined(__SUNPRO_C) # define __SOPHOS_SUNC__ /* * Export keywords - SUNC */ #define SOPHOS_PUBLIC #define SOPHOS_PUBLIC_PTR * #define SOPHOS_EXPORT #define SOPHOS_EXPORTC #define SOPHOS_IMPORT #define SOPHOS_STDCALL /* * Far keyword. */ #define SOPHOS_FAR /* * Inline keyword. */ # define SOPHOS_INL_KW __inline__ # if defined(__SOPHOS_INLINE__) # define SOPHOS_INLINEC SOPHOS_INL_KW # else # define SOPHOS_INLINEC # endif /* * Operating system for SUNC */ # if defined(__sun) # define __SOPHOS_SOL2__ # else # error Unsupported SUN C target operating system # endif /* * Hardware platform. */ # if defined(__i386) # define __SOPHOS_I386__ # elif defined(__sparc) # define __SOPHOS_SPARC__ # else # error Unsupported SUN C target hardware platform # endif /* ----- */ /* * Unknown compiler. */ #else # error Unsupported compiler #endif /* ----- */ /* * Set macros describing the endian nature of the platform. */ #if (defined(__SOPHOS_VMS__)) # undef __SOPHOS_BIG_ENDIAN__ # define __SOPHOS_LITTLE_ENDIAN__ /* This comment is supposed to make someone think about the reason (the real, * technical reason, not "just in case" or "it's always been like this" or "it * works, doesn't it?") for doing the following, and come to the conclusion * that it does not have to be done: Surely endianess depends on hardware only * (at least with all these platforms). Why is the operating compared against? * It only necessitates another change for an additional platform and hence * introduces another error source. If someone adds the platform Linux for * HPPA, say, the following will result in the wrong endianess. As has in fact * happened with Linux for PPC. (Dec 2001) */ #elif (defined(__SOPHOS_SPARC__) || \ defined(__SOPHOS_HP_UX__) || \ defined(__SOPHOS_POWERPC__) || \ defined(__SOPHOS_S390__) || \ defined(__SOPHOS_68000__)) # define __SOPHOS_BIG_ENDIAN__ # undef __SOPHOS_LITTLE_ENDIAN__ # else # undef __SOPHOS_BIG_ENDIAN__ # define __SOPHOS_LITTLE_ENDIAN__ #endif /* * Set another macro concerning aligned data access if necessary. */ #if (!defined(__SOPHOS_VMS__)) # if ((defined(__SOPHOS_SPARC__) && defined(__SOPHOS_SOL2__)) || \ (defined(__SOPHOS_ALPHA__) && defined(__SOPHOS_LINUX__)) || \ (defined(__SOPHOS_HP_UX__) && defined(__SOPHOS_HP_PA__)) || \ (defined(__SOPHOS_ALPHA__) && defined(__SOPHOS_DEC_UNIX__)) ) # define __SOPHOS_ALIGNED_ACCESS__ # endif #endif /* * Group all the Unix variants together under one define. */ #if (!defined(__SOPHOS_VMS__)) # if (defined(__SOPHOS_SOL2__) || \ defined(__SOPHOS_LINUX__) || \ defined(__SOPHOS_DEC_UNIX__) || \ defined(__SOPHOS_AIX__) || \ defined(__SOPHOS_FREEBSD__) || \ defined(__SOPHOS_SCO_OPENSERVER__) || \ defined(__SOPHOS_SCO_UNIXWARE__) || \ (defined(__SOPHOS_OSX__) && defined(__SOPHOS_API_OSX_UNIX__)) || \ defined(__SOPHOS_HP_UX__)) # define __SOPHOS_UNIX__ # endif #endif #endif /* __S_COMPUT_H__ */