/*

 Copyright (C) 1990-1996 Mark Adler, Richard B. Wales, Jean-loup Gailly,
 Kai Uwe Rommel, Onno van der Linden and Igor Mandrichenko.
 Permission is granted to any individual or institution to use, copy, or
 redistribute this software so long as all of the original files are included,
 that it is not sold for profit, and that this copyright notice is retained.

*/

#if defined(__OS2__) && !defined(OS2)
#  define OS2
#endif

/* Automatic setting of the common Microsoft C idenfifier MSC.
 * NOTE: Watcom also defines M_I*86 !
 */
#if defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))
#  ifndef MSC
#    define MSC                 /* This should work for older MSC, too!  */
#  endif
#endif

#if defined(__WATCOMC__) && defined(__386__)
#  define WATCOMC_386
#endif

#if defined(__EMX__) || defined(WATCOMC_386) || defined(__BORLANDC__)
#  if (defined(OS2) && !defined(__32BIT__))
#    define __32BIT__
#  endif
#endif

#if defined(OS2) && !defined(__32BIT__)
#  define MEMORY16
#endif

#ifndef NO_ASM
#  define ASMV
/* #  define ASM_CRC */
#endif

#ifdef MEMORY16
#  ifdef __TURBOC__
#    include <alloc.h>
#    if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
#      if defined(DYNAMIC_CRC_TABLE) && defined(DYNALLOC_CRCTAB)
        error: No dynamic CRC table allocation with Borland C far data models.
#      endif /* DYNAMIC_CRC_TABLE */
#    endif /* Turbo/Borland C far data memory models */
#    define nearmalloc malloc
#    define nearfree   free
#    define DYN_ALLOC
#  else /* !__TURBOC__ */
#    include <malloc.h>
#    define nearmalloc _nmalloc
#    define nearfree   _nfree
#    define farmalloc  _fmalloc
#    define farfree    _ffree
#  endif /* ?__TURBOC__ */
#  define MY_ZCALLOC 1
#  if defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB)
#    define USE_OWN_CRCTAB
#  endif
#endif /* ?MEMORY16 */


/* The symbol MSDOS is consistently used in the generic source files
 * to identify code to support for MSDOS (and MSDOS related) stuff.
 * e.g: FAT or (FAT like) file systems,
 *      '\\' as directory separator in paths,
 *      "\r\n" as record (line) terminator in text files, ...
 *
 * MSDOS is defined anyway with MS C 16-bit. So the block above works.
 * For the 32-bit compilers, MSDOS must not be defined in the block above.
 */
#if (defined(OS2) && !defined(MSDOS))
#  define MSDOS
/* inherit MS-DOS file system etc. stuff */
#endif

#define USE_CASE_MAP
#define PROCNAME(n) (action == ADD || action == UPDATE ? wild(n) : procname(n))

/* time stamp resolution of file system is 2 seconds */
#define ROUNDED_TIME(time)  (((time) + 1) & (~1))

#define FOPR "rb"
#define FOPM "r+b"
#define FOPW "wb"

#ifdef __32BIT__
#  define CBSZ 0x40000
#  define ZBSZ 0x40000
#else
#  define CBSZ 0xE000
#  define ZBSZ 0x7F00 /* Some libraries do not allow a buffer size > 32K */
#endif

#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>

#ifdef ZCRYPT_INTERNAL
#  ifndef __GO32__
#    include <process.h>        /* getpid() declaration for srand seed */
#  endif
#endif

/* for some (all ?) versions of IBM C Set/2 and IBM C Set++ */
#ifndef S_IFMT
#  define S_IFMT 0xF000
#endif /* !S_IFMT */

#ifdef MSC
#  define NO_UNISTD_H
#endif

#ifdef __WATCOMC__
#  define NO_MKTEMP
/* Get asm routines to link properly without using "__cdecl": */
#  ifdef __386__
#    ifdef ASMV
#      pragma aux window "*";
#      pragma aux prev "*";
#      pragma aux prev_length "*";
#      pragma aux strstart "*";
#      pragma aux match_start "*";
#      pragma aux max_chain_length "*";
#      pragma aux good_match "*";
#      pragma aux nice_match "*";
#      pragma aux match_init "*";
#      pragma aux longest_match "*";
#    endif
#    ifndef USE_ZLIB
#      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]
#      pragma aux get_crc_table "_*" parm caller [] value [eax] \
                                      modify [eax ecx edx]
#    endif /* !USE_ZLIB */
#  else /* !__386__ */
#    if defined(ASMV) || defined(ASM_CRC)
/*#      error 16 bit assembly modules currently DO NOT WORK with Watcom C. */
#    endif
#    ifdef ASMV
#      pragma aux match_init    "_*" parm caller [] loadds modify [ax bx]
#      pragma aux longest_match "_*" parm caller [] loadds value [ax] \
                                      modify [ax bx cx dx es]
#    endif
#    ifndef USE_ZLIB
#      pragma aux crc32         "_*" parm caller [] value [ax dx] \
                                      modify [ax bx cx dx es]
#      pragma aux get_crc_table "_*" parm caller [] value [ax] \
                                      modify [ax bx cx dx]
#    endif /* !USE_ZLIB */
#  endif /* ?__386__ */
#endif

#ifdef __IBMC__
#  define NO_UNISTD_H
#  define NO_MKTEMP
#endif
