Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.   Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
  3.  
  4.   See the accompanying file LICENSE, version 2009-Jan-02 or later
  5.   (the contents of which are also included in unzip.h) for terms of use.
  6.   If, for some reason, all these files are missing, the Info-ZIP license
  7.   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
  8. */
  9. /*---------------------------------------------------------------------------
  10.     Win32 specific configuration section:
  11.   ---------------------------------------------------------------------------*/
  12.  
  13. #ifndef __w32cfg_h
  14. #define __w32cfg_h
  15.  
  16. #ifdef __CYGWIN__
  17. /* We treat the file system underneath the Cygwin Unix emulator environment
  18.  * as "native VFAT/NTFS" and use the WIN32 API for its special attributes...
  19.  */
  20. #  ifdef UNIX
  21. #    undef UNIX
  22. #  endif
  23. #endif
  24.  
  25. #if (defined(_MSC_VER) && !defined(MSC))
  26. #  define MSC
  27. #endif
  28.  
  29. /* enable multibyte character set support by default */
  30. #if (!defined(_MBCS) && !defined(NO_MBCS))
  31. #  define _MBCS
  32. #endif
  33. #if (defined(_MBCS) && defined(NO_MBCS))
  34. #  undef _MBCS
  35. #endif
  36. #if (defined(__CYGWIN__) && defined(_MBCS))
  37. #  undef _MBCS                  /* Cygwin RTL lacks support for __mb_cur_max */
  38. #endif
  39. #if (defined(__DJGPP__) && !defined(__EMX__) && defined(_MBCS))
  40. #  undef _MBCS                  /* __mb_cur_max missing for RSXNTdj 1.6 beta */
  41. #endif
  42.  
  43. #include <sys/types.h>          /* off_t, time_t, dev_t, ... */
  44. #include <sys/stat.h>
  45. #include <io.h>                 /* read(), open(), etc. */
  46. #include <time.h>
  47. #if ((defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset))
  48. #  define tzset _tzset
  49. #endif
  50. #if (defined(__LCC__) && !defined(tzset))
  51. #  define tzset _tzset
  52. #endif
  53. #ifdef __MINGW32__
  54.    extern void _tzset(void);    /* this is missing in <time.h> */
  55. #  ifndef tzset
  56. #    define tzset _tzset
  57. #  endif
  58. #endif
  59. #ifdef W32_USE_IZ_TIMEZONE
  60. #  ifdef __BORLANDC__
  61. #    define tzname tzname
  62. #    define IZTZ_DEFINESTDGLOBALS
  63. #  endif
  64. #  ifdef __WATCOMC__
  65. #    define IZTZ_DEFINESTDGLOBALS
  66. #  endif
  67. #  ifndef tzset
  68. #    define tzset _tzset
  69. #  endif
  70. #  ifndef timezone
  71. #    define timezone _timezone
  72. #  endif
  73. #  ifndef daylight
  74. #    define daylight _daylight
  75. #  endif
  76. #  ifndef tzname
  77. #    define tzname _tzname
  78. #  endif
  79. #  if (!defined(NEED__ISINDST) && !defined(__BORLANDC__))
  80. #    define NEED__ISINDST
  81. #  endif
  82. #  ifdef IZTZ_GETLOCALETZINFO
  83. #    undef IZTZ_GETLOCALETZINFO
  84. #  endif
  85. #  define IZTZ_GETLOCALETZINFO GetPlatformLocalTimezone
  86. #endif /* W32_USE_IZ_TIMEZONE */
  87. #include <memory.h>
  88. #if (!defined(__RSXNT__) && !defined(__CYGWIN__))
  89. #  include <direct.h>           /* mkdir() */
  90. #endif
  91. #include <fcntl.h>
  92. #ifdef __CYGWIN__
  93. #  include <unistd.h>
  94.    extern int setmode(int, int);        /* this is missing in <fcntl.h> */
  95. #endif
  96. #if (defined(MSC) || defined(__WATCOMC__) || defined(__MINGW32__))
  97. #  include <sys/utime.h>
  98. #else
  99. #  include <utime.h>
  100. #endif
  101. #define GOT_UTIMBUF
  102.  
  103. #ifdef _MBCS
  104. #  if (!defined(__EMX__) && !defined(__DJGPP__) && !defined(__CYGWIN__))
  105. #  if (!defined(__MINGW32__) || defined(__MSVCRT__))
  106. #    include <stdlib.h>
  107. #    include <mbstring.h>
  108.      /* for MSC (and compatible compilers), use routines supplied by RTL */
  109. #    define CLEN(ptr) _mbclen((const uch *)(ptr))
  110. #    define PREINCSTR(ptr) (ptr = (char *)_mbsinc((const uch *)(ptr)))
  111. #    define MBSCHR(str, c) (char *)_mbschr((const uch *)(str), (c))
  112. #    define MBSRCHR(str, c) (char *)_mbsrchr((const uch *)(str), (c))
  113. #  endif
  114. #  endif
  115. #  if (defined(__MINGW32__) && !defined(MB_CUR_MAX))
  116. #    ifdef __MSVCRT__
  117.        extern int *__p___mb_cur_max(void);
  118. #      define MB_CUR_MAX (*__p___mb_cur_max())
  119. #    else
  120.        extern int *_imp____mb_cur_max_dll;
  121. #      define MB_CUR_MAX (*_imp____mb_cur_max_dll)
  122. #    endif
  123. #  endif
  124. #  if (defined(__LCC__) && !defined(MB_CUR_MAX))
  125.      extern int *_imp____mb_cur_max;
  126. #    define MB_CUR_MAX (*_imp____mb_cur_max)
  127. #  endif
  128. #  if (defined(__DJGPP__) && !defined(__EMX__) && !defined(MB_CUR_MAX))
  129.      extern int *_imp____mb_cur_max;
  130. #    define MB_CUR_MAX (*_imp____mb_cur_max)
  131. #  endif
  132. #endif
  133.  
  134. /* for UnZip, the "basic" part of the win32 api is sufficient */
  135. #ifndef WIN32_LEAN_AND_MEAN
  136. #  define WIN32_LEAN_AND_MEAN
  137. #endif
  138.  
  139. #if defined(__FILEIO_C)
  140. #  ifndef __CYGWIN__
  141. #    include <conio.h>
  142. #  endif
  143. #  include <windows.h>
  144. #  ifdef __RSXNT__
  145. #    include "../win32/rsxntwin.h"
  146. #  endif
  147. #  ifndef TIME_ZONE_ID_INVALID
  148. #    define TIME_ZONE_ID_INVALID  (DWORD)0xFFFFFFFFL
  149. #  endif
  150. #endif
  151. #if (defined(__ENVARGS_C) || defined(__EXTRACT_C) || defined(__UNZIP_C) || \
  152.      defined(ZCRYPT_INTERNAL))
  153. #  include <windows.h>
  154. #  ifdef __RSXNT__
  155. #    include "../win32/rsxntwin.h"
  156. #  endif
  157. #  ifndef TIME_ZONE_ID_INVALID
  158. #    define TIME_ZONE_ID_INVALID  (DWORD)0xFFFFFFFFL
  159. #  endif
  160. #endif
  161.  
  162. #ifndef Cdecl
  163. #  define Cdecl __cdecl
  164. #endif
  165.  
  166. /* the following definitions are considered as "obsolete" by Microsoft and
  167.  * might be missing in some versions of <windows.h>
  168.  */
  169. #ifndef AnsiToOem
  170. #  define AnsiToOem CharToOemA
  171. #endif
  172. #ifndef OemToAnsi
  173. #  define OemToAnsi OemToCharA
  174. #endif
  175.  
  176. #define DIR_END       '\\'      /* OS uses '\\' as directory separator */
  177. #define DIR_END2      '/'       /* also check for '/' (RTL may convert) */
  178. #ifdef DATE_FORMAT
  179. #  undef DATE_FORMAT
  180. #endif
  181. #define DATE_FORMAT   dateformat()
  182. #ifdef DATE_SEPCHAR
  183. #  undef DATE_SEPCHAR
  184. #endif
  185. #define DATE_SEPCHAR  dateseparator()
  186. #define lenEOL        2
  187. #define PutNativeEOL  {*q++ = native(CR); *q++ = native(LF);}
  188.  
  189. #if (defined(__RSXNT__) && !defined(HAVE_MKTIME))
  190. #  define HAVE_MKTIME           /* use mktime() in time conversion routines */
  191. #endif
  192. #if (defined(MSC) && !defined(HAVE_MKTIME))
  193. #  define HAVE_MKTIME           /* use mktime() in time conversion routines */
  194. #endif
  195. #if (defined(__CYGWIN__) && defined(HAVE_MKTIME))
  196. #  undef HAVE_MKTIME            /* Cygnus' mktime() implementation is buggy */
  197. #endif
  198. #if (defined(W32_USE_IZ_TIMEZONE) && !defined(HAVE_MKTIME))
  199. #  define HAVE_MKTIME           /* use mktime() in time conversion routines */
  200. #endif
  201. #if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME))
  202. #  define USE_EF_UT_TIME
  203. #endif
  204. #if (!defined(NO_DIR_ATTRIB) && !defined(SET_DIR_ATTRIB))
  205. #  define SET_DIR_ATTRIB
  206. #endif
  207. #if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP))
  208. #  define TIMESTAMP
  209. #endif
  210. #if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS))
  211. #  define NTSD_EAS      /* enable NTSD support unless explicitly suppressed */
  212. #endif
  213. #if (defined(NTSD_EAS) && !defined(RESTORE_ACL))
  214. #  define RESTORE_ACL   /* "restore ACLs" only needed when NTSD_EAS active */
  215. #endif
  216. #if (!defined(NO_UNICODE_SUPPORT) && !defined(UNICODE_SUPPORT))
  217. #  define UNICODE_SUPPORT       /* enable UTF-8 filename support by default */
  218. #endif
  219. #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR))
  220. #  define UNICODE_WCHAR         /* wchar_t is UTF-16 encoded on WIN32 */
  221. #endif
  222. #ifdef UTF8_MAYBE_NATIVE
  223. #  undef UTF8_MAYBE_NATIVE      /* UTF-8 cannot be system charset on WIN32 */
  224. #endif
  225.  
  226. /* The following compiler systems provide or use a runtime library with a
  227.  * locale-aware isprint() implementation.  For these systems, the "enhanced"
  228.  * unprintable charcode detection in fnfilter() gets enabled.
  229.  */
  230. #if (!defined(HAVE_WORKING_ISPRINT) && !defined(NO_WORKING_ISPRINT))
  231. #  if defined(MSC) || defined(__BORLANDC__)
  232. #    define HAVE_WORKING_ISPRINT
  233. #  endif
  234. #  if defined(__MINGW32__) && defined(__MSVCRT__)
  235. #    define HAVE_WORKING_ISPRINT
  236. #  endif
  237. #endif
  238.  
  239. /* WIN32 runs solely on little-endian processors; enable support
  240.  * for the 32-bit optimized CRC-32 C code by default.
  241.  */
  242. #ifdef IZ_CRC_BE_OPTIMIZ
  243. #  undef IZ_CRC_BE_OPTIMIZ
  244. #endif
  245. #if !defined(IZ_CRC_LE_OPTIMIZ) && !defined(NO_CRC_OPTIMIZ)
  246. #  define IZ_CRC_LE_OPTIMIZ
  247. #endif
  248.  
  249. /* handlers for OEM <--> ANSI string conversions */
  250. #ifdef __RSXNT__
  251.    /* RSXNT uses OEM coded strings in functions supplied by C RTL */
  252. #  ifdef CRTL_CP_IS_ISO
  253. #    undef CRTL_CP_IS_ISO
  254. #  endif
  255. #  ifndef CRTL_CP_IS_OEM
  256. #    define CRTL_CP_IS_OEM
  257. #  endif
  258. #else
  259.    /* "real" native WIN32 compilers use ANSI coded strings in C RTL calls */
  260. #  ifndef CRTL_CP_IS_ISO
  261. #    define CRTL_CP_IS_ISO
  262. #  endif
  263. #  ifdef CRTL_CP_IS_OEM
  264. #    undef CRTL_CP_IS_OEM
  265. #  endif
  266. #endif
  267.  
  268. #ifdef CRTL_CP_IS_ISO
  269.    /* C RTL's file system support assumes ANSI coded strings */
  270. #  define ISO_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  271. #  define OEM_TO_INTERN(src, dst)  OemToAnsi(src, dst)
  272. #  define INTERN_TO_ISO(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  273. #  define INTERN_TO_OEM(src, dst)  AnsiToOem(src, dst)
  274. #endif /* CRTL_CP_IS_ISO */
  275. #ifdef CRTL_CP_IS_OEM
  276.    /* C RTL's file system support assumes OEM coded strings */
  277. #  define ISO_TO_INTERN(src, dst)  AnsiToOem(src, dst)
  278. #  define OEM_TO_INTERN(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  279. #  define INTERN_TO_ISO(src, dst)  OemToAnsi(src, dst)
  280. #  define INTERN_TO_OEM(src, dst)  {if ((src) != (dst)) strcpy((dst), (src));}
  281. #endif /* CRTL_CP_IS_OEM */
  282. #define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1)
  283. #define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1)
  284. #ifndef WINDLL
  285.    /* Despite best intentions, for the command-line version UzpPassword()
  286.     * could return either character set, depending on whether running under
  287.     * Win95 (DOS-session) or WinNT (native WinNT command interpreter)! */
  288. #  define STR_TO_CP2(dst, src)  (AnsiToOem(src, dst), dst)
  289. #  define STR_TO_CP3(dst, src)  (OemToAnsi(src, dst), dst)
  290. #else
  291.    /* The WINDLL front end is known to supply ISO/ANSI-coded passwords! */
  292. #  define STR_TO_CP2(dst, src)  (AnsiToOem(src, dst), dst)
  293. #endif
  294. /* dummy defines to disable these functions, they are not needed */
  295. #define STR_TO_OEM
  296. #define STR_TO_ISO
  297.  
  298. /* Static variables that we have to add to Uz_Globs: */
  299. #define SYSTEM_SPECIFIC_GLOBALS \
  300.     int created_dir, renamed_fullpath, fnlen;\
  301.     unsigned nLabelDrive;\
  302.     char lastRootPath[4];\
  303.     int lastVolOldFAT, lastVolLocTim;\
  304.     char *rootpath, *buildpathHPFS, *buildpathFAT, *endHPFS, *endFAT;\
  305.     ZCONST char *wildname;\
  306.     char *dirname, matchname[FILNAMSIZ];\
  307.     int rootlen, have_dirname, dirnamelen, notfirstcall;\
  308.     zvoid *wild_dir;
  309.  
  310. /* created_dir, renamed_fullpath, fnlen, and nLabelDrive are used by   */
  311. /*    both mapname() and checkdir().                                   */
  312. /* lastRootPath, lastVolOldFAT and lastVolLocTim are used by           */
  313. /*    IsVolumeOldFAT() and NTQueryVolInfo().                           */
  314. /* rootlen, rootpath, buildpathHPFS, buildpathFAT, endHPFS, and endFAT */
  315. /*    are used by checkdir().                                          */
  316. /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */
  317. /*    and notfirstcall are used by do_wild().                          */
  318.  
  319. /* This replacement for C-RTL-supplied getch() (or similar) functionality
  320.  * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95,
  321.  * and supports the <ALT>+[0]<digit><digit><digit> feature.
  322.  */
  323. int getch_win32  OF((void));
  324.  
  325. /* Up to now, all versions of Microsoft C runtime libraries lack the support
  326.  * for customized (non-US) switching rules between daylight saving time and
  327.  * standard time in the TZ environment variable string.
  328.  * But non-US timezone rules are correctly supported when timezone information
  329.  * is read from the OS system settings in the Win32 registry.
  330.  * The following work-around deletes any TZ environment setting from
  331.  * the process environment.  This results in a fallback of the RTL time
  332.  * handling code to the (correctly interpretable) OS system settings, read
  333.  * from the registry.
  334.  */
  335. #ifdef USE_EF_UT_TIME
  336. # if (defined(__WATCOMC__) || defined(__CYGWIN__) || \
  337.       defined(W32_USE_IZ_TIMEZONE))
  338. #   define iz_w32_prepareTZenv()
  339. # else
  340. #   define iz_w32_prepareTZenv()        putenv("TZ=")
  341. # endif
  342. #endif
  343.  
  344. /* This patch of stat() is useful for at least two compilers.  It is   */
  345. /* difficult to take a stat() of a root directory under Windows95, so  */
  346. /* zstat_win32() detects that case and fills in suitable values.       */
  347. #ifndef __RSXNT__
  348. #  ifndef W32_STATROOT_FIX
  349. #    define W32_STATROOT_FIX
  350. #  endif
  351. #endif /* !__RSXNT__ */
  352.  
  353. #define W32_STAT_BANDAID
  354. #if defined(REENTRANT)
  355. #  define __W32STAT_GLOBALS__       Uz_Globs *pG,
  356. #  define __W32STAT_G__             pG,
  357. #else
  358. #  define __W32STAT_GLOBALS__
  359. #  define __W32STAT_G__
  360. #endif
  361. #ifdef SSTAT
  362. #  undef SSTAT
  363. #endif
  364. #ifdef WILD_STAT_BUG
  365. #  define SSTAT(path, pbuf) (iswild(path) || zstat_win32(__W32STAT_G__ path, pbuf))
  366. #else
  367. #  define SSTAT(path, pbuf) zstat_win32(__W32STAT_G__ path, pbuf)
  368. #endif
  369.  
  370. #ifdef __WATCOMC__
  371. #  ifdef __386__
  372. #    ifndef WATCOMC_386
  373. #      define WATCOMC_386
  374. #    endif
  375. #    define __32BIT__
  376. #    undef far
  377. #    define far
  378. #    undef near
  379. #    define near
  380. #    undef Cdecl
  381. #    define Cdecl
  382.  
  383. /* gaah -- Watcom's docs claim that _get_osfhandle exists, but it doesn't.  */
  384. #    define _get_osfhandle _os_handle
  385.  
  386. /* Get asm routines to link properly without using "__cdecl": */
  387. #    ifndef USE_ZLIB
  388. #      pragma aux crc32         "_*" parm caller [] value [eax] modify [eax]
  389. #      pragma aux get_crc_table "_*" parm caller [] value [eax] \
  390.                                       modify [eax ecx edx]
  391. #    endif /* !USE_ZLIB */
  392. #  endif /* __386__ */
  393. #endif /* __WATCOMC__ */
  394.  
  395. #define SCREENWIDTH 80
  396. #define SCREENSIZE(scrrows, scrcols)  screensize(scrrows, scrcols)
  397. int screensize(int *tt_rows, int *tt_cols);
  398.  
  399. /* on the DOS or NT console screen, line-wraps are always enabled */
  400. #define SCREENLWRAP 1
  401. #define TABSIZE 8
  402.  
  403.  
  404. /* 64-bit-Integers & Large File Support
  405.  * (pasted here from Zip 3b, osdep.h - Myles Bennett 7-jun-2004)
  406.  * (updated from Zip 3.0d - Ed Gordon 6-oct-2004)
  407.  *
  408.  *  If this is set it is assumed that the port
  409.  *  supports 64-bit file calls.  The types are
  410.  *  defined here.  Any local implementations are
  411.  *  in w32i64.c and the prototypes for the calls are
  412.  *  in unzip.h.  Note that a port must support
  413.  *  these calls fully or should not set
  414.  *  LARGE_FILE_SUPPORT.
  415.  */
  416.  
  417. /* Automatically set ZIP64_SUPPORT if supported */
  418.  
  419. #ifndef NO_ZIP64_SUPPORT
  420. # ifndef ZIP64_SUPPORT
  421. #   if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
  422. #     define ZIP64_SUPPORT
  423. #   elif defined(__LCC__)
  424.       /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */
  425. #   elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100))
  426. #     define ZIP64_SUPPORT
  427. #   elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520))
  428.       /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */
  429. #   endif
  430. # endif
  431. #endif
  432.  
  433. #ifdef ZIP64_SUPPORT
  434.   /* base type for file offsets and file sizes */
  435. # if (defined(__GNUC__) || defined(ULONG_LONG_MAX))
  436.     typedef long long    zoff_t;
  437. # else
  438.     /* all other compilers use this as intrinsic 64-bit type */
  439.     typedef __int64      zoff_t;
  440. # endif
  441. # define ZOFF_T_DEFINED
  442.  
  443.   /* user-defined types and format strings for 64-bit numbers and
  444.    * file pointer functions  (these depend on the rtl library and library
  445.    * headers used; they are NOT compiler-specific)
  446.    */
  447. # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__)
  448.     /* MS C and VC, MinGW32, lcc32 */
  449.     /* these systems use the Microsoft C RTL */
  450.  
  451.     /* 64-bit stat struct */
  452.     typedef struct _stati64 z_stat;
  453. #   define Z_STAT_DEFINED
  454.  
  455. #   ifdef __LCC__
  456.       /* The LCC headers lack these declarations of MSC rtl functions in
  457.          sys/stat.h. */
  458.       struct _stati64 {
  459.         unsigned int st_dev;
  460.         unsigned short st_ino;
  461.         unsigned short st_mode;
  462.         short st_nlink;
  463.         short st_uid;
  464.         short st_gid;
  465.         unsigned int st_rdev;
  466.         __int64 st_size;
  467.         time_t st_atime;
  468.         time_t st_mtime;
  469.         time_t st_ctime;
  470.       };
  471.       int _stati64(const char *, struct _stati64 *);
  472.       int _fstati64(int, struct _stati64 *);
  473.        __int64 _lseeki64(int, __int64, int);
  474. #   endif /* __LCC__ */
  475.  
  476.     /* printf format size prefix for zoff_t values */
  477. #   define FZOFFT_FMT "I64"
  478. #   define FZOFFT_HEX_WID_VALUE "16"
  479.  
  480. #   define SHORTHDRSTATS "%9I64u  %02u%c%02u%c%02u %02u:%02u  %c"
  481. #   define SHORTFILETRAILER " --------                   -------\n%9I64u                   %9lu file%s\n"
  482.  
  483. # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520))
  484.     /* Borland C 5.2 or newer */
  485.  
  486.     /* 64-bit stat struct */
  487.     typedef struct stati64 z_stat;
  488. #   define Z_STAT_DEFINED
  489.  
  490.     /* Borland C does not provide a 64-bit-capable _lseeki64(), so we
  491.        need to use the stdio.h stream functions instead. */
  492. #   ifndef USE_STRM_INPUT
  493. #     define USE_STRM_INPUT
  494. #   endif
  495.  
  496.     /* printf format size prefix for zoff_t values */
  497. #   define FZOFFT_FMT "L"
  498. #   define FZOFFT_HEX_WID_VALUE "16"
  499.  
  500. #   define SHORTHDRSTATS "%9Lu  %02u%c%02u%c%02u %02u:%02u  %c"
  501. #   define SHORTFILETRAILER " --------                   -------\n%9Lu                   %9lu file%s\n"
  502.  
  503. # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100))
  504.     /* WATCOM C */
  505.  
  506.     /* 64-bit stat struct */
  507.     typedef struct _stati64 z_stat;
  508. #   define Z_STAT_DEFINED
  509.  
  510.     /* printf format size prefix for zoff_t values */
  511. #   define FZOFFT_FMT "ll"
  512. #   define FZOFFT_HEX_WID_VALUE "16"
  513.  
  514. #   define SHORTHDRSTATS "%9llu  %02u%c%02u%c%02u %02u:%02u  %c"
  515. #   define SHORTFILETRAILER " --------                   -------\n%9llu                   %9lu file%s\n"
  516.  
  517. # elif (defined(__IBMC__) && (__IBMC__ >= 350))
  518.     /* IBM C */
  519.  
  520.     /* 64-bit stat struct */
  521.  
  522.     /* printf format size prefix for zoff_t values */
  523. #   define FZOFFT_FMT "I64"
  524. #   define FZOFFT_HEX_WID_VALUE "16"
  525.  
  526. #   define SHORTHDRSTATS "%9I64u  %02u%c%02u%c%02u %02u:%02u  %c"
  527. #   define SHORTFILETRAILER " --------                   -------\n%9I64u                   %9lu file%s\n"
  528.  
  529. # endif
  530.  
  531. #endif
  532.  
  533. /* If port has LARGE_FILE_SUPPORT then define here
  534.    to make automatic unless overridden */
  535.  
  536. #ifndef LARGE_FILE_SUPPORT
  537. # ifndef NO_LARGE_FILE_SUPPORT
  538. #   if defined(_MSC_VER) || defined(__MINGW32__)
  539. #     define LARGE_FILE_SUPPORT
  540. #   elif defined(__LCC__)
  541.       /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */
  542. #   elif defined(__CYGWIN__)
  543. #     define LARGE_FILE_SUPPORT
  544. #   elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100))
  545. #     define LARGE_FILE_SUPPORT
  546. #   elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520))
  547.       /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */
  548. #   endif
  549. # endif
  550. #endif
  551.  
  552.  
  553. #ifndef LARGE_FILE_SUPPORT
  554.   /* No Large File Support */
  555.  
  556.   /* base type for file offsets and file sizes */
  557.   typedef long zoff_t;
  558. # define ZOFF_T_DEFINED
  559.  
  560.   /* stat struct */
  561.   typedef struct stat z_stat;
  562. # define Z_STAT_DEFINED
  563.  
  564. #  define FZOFFT_FMT "l"
  565. #  define FZOFFT_HEX_WID_VALUE "8"
  566.  
  567.  
  568. #  define SHORTHDRSTATS "%9lu  %02u%c%02u%c%02u %02u:%02u  %c"
  569. #  define SHORTFILETRAILER " --------                   -------\n%9lu                   %9lu file%s\n"
  570.  
  571. #endif /* LARGE_FILE_SUPPORT */
  572.  
  573. #endif /* !__w32cfg_h */
  574.