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. //
  11. // File:        WINCE.H
  12. //
  13. // Description: This file declares all the Win32 APIs and C runtime functions
  14. //              that the Info-ZIP code calls, but are not implemented natively
  15. //              on Windows CE.  See WINCE.CPP for the implementation.
  16. //
  17. // Copyright:   All the source files for Pocket UnZip, except for components
  18. //              written by the Info-ZIP group, are copyrighted 1997 by Steve P.
  19. //              Miller.  The product "Pocket UnZip" itself is property of the
  20. //              author and cannot be altered in any way without written consent
  21. //              from Steve P. Miller.
  22. //
  23. // Disclaimer:  All project files are provided "as is" with no guarantee of
  24. //              their correctness.  The authors are not liable for any outcome
  25. //              that is the result of using this source.  The source for Pocket
  26. //              UnZip has been placed in the public domain to help provide an
  27. //              understanding of its implementation.  You are hereby granted
  28. //              full permission to use this source in any way you wish, except
  29. //              to alter Pocket UnZip itself.  For comments, suggestions, and
  30. //              bug reports, please write to stevemil@pobox.com.
  31. //
  32. //
  33. // Date      Name          History
  34. // --------  ------------  -----------------------------------------------------
  35. // 02/01/97  Steve Miller  Created (Version 1.0 using Info-ZIP UnZip 5.30)
  36. //
  37. //******************************************************************************
  38.  
  39. #ifndef __WINCE_H__
  40. #define __WINCE_H__
  41.  
  42. #ifdef __cplusplus
  43. extern "C" {
  44. #endif
  45.  
  46. //******************************************************************************
  47. //***** For all platforms - Our debug output function
  48. //******************************************************************************
  49.  
  50. // If we are building for debug, we implement the DebugOut() function. If we are
  51. // building for release, then we turn all calls to DebugOut() into no-ops.  The
  52. // Microsoft compiler (and hopefully others) will not generate any code at all
  53. // for the retail version of DebugOut() defined here.  This works much better
  54. // than trying to create a variable argument macro - something C/C++ does not
  55. // support cleanly.
  56.  
  57. #ifdef DEBUG
  58. void DebugOut(LPCTSTR szFormat, ...);
  59. #else
  60. __inline void DebugOut(LPCTSTR szFormat, ...) {}
  61. #endif
  62.  
  63.  
  64. //******************************************************************************
  65. //***** Windows NT Native
  66. //******************************************************************************
  67.  
  68. #if !defined(_WIN32_WCE)
  69. #ifndef UNICODE
  70. #include <stdio.h>
  71. #endif
  72. #include <io.h>
  73. #include <time.h>
  74. #include <fcntl.h>
  75. #include <sys\stat.h>
  76. #endif
  77.  
  78. //******************************************************************************
  79. //***** Windows CE Native
  80. //******************************************************************************
  81.  
  82. #if defined(_WIN32_WCE)
  83.  
  84. #if defined(__WINCE_CPP)
  85.    // internal, suppress "import linkage" specifier
  86. #  define ZCRTIMP
  87. #else
  88.    // do not use import linkage specifier either; symbols are provided locally
  89. #  define ZCRTIMP
  90. #endif
  91.  
  92. #ifndef ZeroMemory
  93. #define ZeroMemory(Destination,Length) memset(Destination, 0, Length)
  94. #endif
  95.  
  96. #ifdef _MBCS
  97.    // WinCE C RTL does not provide the setlocale function
  98. #  define setlocale(category, locale)
  99. #endif
  100.  
  101. // A few forgotten defines in Windows CE's TCHAR.H
  102. #ifndef _stprintf
  103. #define _stprintf wsprintf
  104. #endif
  105.  
  106. #if _WIN32_WCE < 211 //sr551b functions in stdlib CE300
  107. #ifndef _vsntprintf
  108. #define _vsntprintf(d,c,f,a) wvsprintf(d,f,a)
  109. #endif
  110. #ifndef _vsnwprintf
  111. #define _vsnwprintf(d,c,f,a) wvsprintf(d,f,a)
  112. #endif
  113. #endif //end sr551b
  114.  
  115. //******************************************************************************
  116. //***** SYS\TYPES.H functions
  117. //******************************************************************************
  118.  
  119. #ifndef _OFF_T_DEFINED
  120. typedef long _off_t;
  121. #define _OFF_T_DEFINED
  122. #endif
  123. #ifndef _TIME_T_DEFINED
  124. typedef long time_t;
  125. #define _TIME_T_DEFINED
  126. #endif
  127.  
  128. //******************************************************************************
  129. //***** CTYPE.H functions
  130. //******************************************************************************
  131. #if _WIN32_WCE < 300
  132. ZCRTIMP int __cdecl isupper(int);
  133. #endif
  134. _CRTIMP int __cdecl tolower(int);
  135. // This is a coarse approximation to ASCII isalpha(), it returns TRUE not only
  136. // on all ASCII letters but also on punctuation chars in the range of 0x40-0x7F
  137. #ifndef isalpha
  138. #define isalpha(c) (((c) & 0xC0) == 0xC0)
  139. #endif
  140.  
  141. //******************************************************************************
  142. //***** FCNTL.H functions
  143. //******************************************************************************
  144.  
  145. #ifndef _O_RDONLY       // do not redefine existing FCNTL.H constants
  146.  
  147. #define _O_RDONLY 0x0000   // open for reading only
  148. #define _O_WRONLY 0x0001   // open for writing only
  149. #define _O_RDWR   0x0002   // open for reading and writing
  150. #define _O_APPEND 0x0008   // writes done at eof
  151.  
  152. #define _O_CREAT  0x0100   // create and open file
  153. #define _O_TRUNC  0x0200   // open and truncate
  154. #define _O_EXCL   0x0400   // open only if file doesn't already exist
  155.  
  156.  
  157. //# define _O_TEXT    0x4000   // file mode is text (translated)
  158. #define _O_BINARY 0x8000   // file mode is binary (untranslated)
  159.  
  160. #endif // _O_RDONLY (and alikes...) undefined
  161.  
  162. #ifndef O_RDONLY        // do not redefine existing FCNTL.H constants
  163.  
  164. #define O_RDONLY  _O_RDONLY
  165. #define O_WRONLY  _O_WRONLY
  166. #define O_RDWR    _O_RDWR
  167. #define O_APPEND  _O_APPEND
  168. #define O_CREAT   _O_CREAT
  169. #define O_TRUNC   _O_TRUNC
  170. #define O_EXCL    _O_EXCL
  171. #define O_TEXT    _O_TEXT
  172. #define O_BINARY  _O_BINARY
  173. //#define O_RAW      _O_BINARY
  174. //#define O_TEMPORARY   _O_TEMPORARY
  175. //#define O_NOINHERIT   _O_NOINHERIT
  176. //#define O_SEQUENTIAL  _O_SEQUENTIAL
  177. //#define O_RANDOM   _O_RANDOM
  178.  
  179. #endif // O_RDONLY (and other old-fashioned constants) undefined
  180.  
  181. //******************************************************************************
  182. //***** IO.H functions
  183. //******************************************************************************
  184.  
  185. ZCRTIMP int __cdecl chmod(const char *, int);
  186. ZCRTIMP int __cdecl close(int);
  187. ZCRTIMP int __cdecl isatty(int);
  188. ZCRTIMP long __cdecl lseek(int, long, int);
  189. ZCRTIMP int __cdecl open(const char *, int, ...);
  190. ZCRTIMP int __cdecl read(int, void *, unsigned int);
  191. #if _WIN32_WCE < 211
  192. ZCRTIMP int __cdecl setmode(int, int);
  193. #else
  194. # define setmode _setmode
  195. #endif
  196. ZCRTIMP int __cdecl unlink(const char *);
  197.  
  198.  
  199. //******************************************************************************
  200. //***** STDIO.H functions
  201. //******************************************************************************
  202.  
  203. #if _WIN32_WCE < 211 //sr551b functions in stdlib CE300
  204. //typedef struct _iobuf FILE;
  205. typedef int FILE;
  206.  
  207. #define stdin  ((int*)-2)
  208. #define stdout ((int*)-3)
  209. #define stderr ((int*)-4)
  210.  
  211. #define EOF    (-1)
  212.  
  213. ZCRTIMP int __cdecl fflush(FILE *);
  214. ZCRTIMP char * __cdecl fgets(char *, int, FILE *);
  215. ZCRTIMP int __cdecl fileno(FILE *);
  216. ZCRTIMP FILE * __cdecl fopen(const char *, const char *);
  217. ZCRTIMP int __cdecl fprintf(FILE *, const char *, ...);
  218. ZCRTIMP int __cdecl fclose(FILE *);
  219. ZCRTIMP int __cdecl putc(int, FILE *);
  220. ZCRTIMP int __cdecl sprintf(char *, const char *, ...);
  221. #endif // _WIN32_WCE < 211
  222. #if _WIN32_WCE >= 211
  223. // CE falsely uses (FILE *) pointer args for UNIX style I/O functions that
  224. // normally expect numeric file handles (e.g. setmode())
  225. # undef fileno
  226. # define fileno(strm)  (strm)
  227. #endif // _WIN32_WCE < 211
  228. #ifndef POCKET_UNZIP
  229. ZCRTIMP void __cdecl perror(const char* errorText);
  230. #endif
  231. #ifdef USE_FWRITE
  232. ZCRTIMP void __cdecl setbuf(FILE *, char *);
  233. #endif
  234.  
  235.  
  236. //******************************************************************************
  237. //***** STDLIB.H functions
  238. //******************************************************************************
  239.  
  240. #ifdef _MBCS
  241. #ifndef MB_CUR_MAX
  242. # define MB_CUR_MAX 2
  243. #endif
  244. ZCRTIMP int __cdecl mblen(const char *mbc, size_t mbszmax);
  245. #endif /* _MBCS */
  246. #if _WIN32_WCE >= 211
  247. # define errno ((int)GetLastError())
  248. #endif
  249. #ifdef _WIN32_WCE_EMULATION
  250.   // The emulation runtime library lacks a required element for setjmp/longjmp,
  251.   // disable the recovery functionality for now.
  252. # undef setjmp
  253. # define setjmp(buf) 0
  254. # undef longjmp
  255. # define longjmp(buf, rv)
  256. #endif
  257.  
  258. //******************************************************************************
  259. //***** STRING.H functions
  260. //******************************************************************************
  261.  
  262. ZCRTIMP int     __cdecl _stricmp(const char *, const char *);
  263. ZCRTIMP char *  __cdecl _strupr(char *);
  264. ZCRTIMP char *  __cdecl strerror(int errnum);
  265. ZCRTIMP char *  __cdecl strrchr(const char *, int);
  266.  
  267.  
  268. //******************************************************************************
  269. //***** TIME.H functions
  270. //******************************************************************************
  271.  
  272. #ifndef _TM_DEFINED
  273. struct tm {
  274.    int tm_sec;     // seconds after the minute - [0,59]
  275.    int tm_min;     // minutes after the hour - [0,59]
  276.    int tm_hour;    // hours since midnight - [0,23]
  277.    int tm_mday;    // day of the month - [1,31]
  278.    int tm_mon;     // months since January - [0,11]
  279.    int tm_year;    // years since 1900
  280. // int tm_wday;    // days since Sunday - [0,6]
  281. // int tm_yday;    // days since January 1 - [0,365]
  282.    int tm_isdst;   // daylight savings time flag
  283. };
  284. #define _TM_DEFINED
  285. #endif
  286.  
  287. ZCRTIMP struct tm * __cdecl localtime(const time_t *);
  288. // tzset is not supported on native WCE, define it as a NOP macro
  289. #ifndef tzset
  290. # define tzset()
  291. #endif
  292.  
  293. //******************************************************************************
  294. //***** SYS\STAT.H functions
  295. //******************************************************************************
  296.  
  297. struct stat {
  298. // _dev_t st_dev;
  299. // _ino_t st_ino;
  300.    unsigned short st_mode;
  301. // short st_nlink;
  302. // short st_uid;
  303. // short st_gid;
  304. // _dev_t st_rdev;
  305.    _off_t st_size;
  306. // time_t st_atime;
  307.    time_t st_mtime;
  308. // time_t st_ctime;
  309. };
  310.  
  311. #define _S_IFMT   0170000  // file type mask
  312. #define _S_IFDIR  0040000  // directory
  313. //#define _S_IFCHR   0020000  // character special
  314. //#define _S_IFIFO   0010000  // pipe
  315. #define _S_IFREG  0100000  // regular
  316. #define _S_IREAD  0000400  // read permission, owner
  317. #define _S_IWRITE 0000200  // write permission, owner
  318. #define _S_IEXEC  0000100  // execute/search permission, owner
  319.  
  320. #define S_IFMT  _S_IFMT
  321. #define S_IFDIR  _S_IFDIR
  322. //#define S_IFCHR  _S_IFCHR
  323. //#define S_IFREG  _S_IFREG
  324. #define S_IREAD  _S_IREAD
  325. #define S_IWRITE _S_IWRITE
  326. #define S_IEXEC  _S_IEXEC
  327.  
  328. ZCRTIMP int __cdecl stat(const char *, struct stat *);
  329.  
  330.  
  331. //******************************************************************************
  332.  
  333. #endif // _WIN32_WCE
  334.  
  335. #ifdef __cplusplus
  336. } // extern "C"
  337. #endif
  338.  
  339. #endif // __WINCE_H__
  340.