tif_win3.c
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:5k
源码类别:

打印编程

开发平台:

Visual C++

  1. /* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_win3.c,v 1.2 2005/12/21 12:23:13 joris Exp $ */
  2. /*
  3.  * Copyright (c) 1988-1997 Sam Leffler
  4.  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and 
  7.  * its documentation for any purpose is hereby granted without fee, provided
  8.  * that (i) the above copyright notices and this permission notice appear in
  9.  * all copies of the software and related documentation, and (ii) the names of
  10.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  11.  * publicity relating to the software without the specific, prior written
  12.  * permission of Sam Leffler and Silicon Graphics.
  13.  * 
  14.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  15.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  16.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  17.  * 
  18.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  19.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  20.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  22.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  23.  * OF THIS SOFTWARE.
  24.  */
  25. /*
  26.  * TIFF Library Windows 3.x-specific Routines.
  27.  */
  28. #include "tiffiop.h"
  29. #if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(_MSC_VER)
  30. #include <io.h> /* for open, close, etc. function prototypes */
  31. #endif
  32. #include <windows.h>
  33. #include <windowsx.h>
  34. #include <memory.h>
  35. static tsize_t 
  36. _tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
  37. {
  38. return (_hread(fd, buf, size));
  39. }
  40. static tsize_t
  41. _tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
  42. {
  43. return (_hwrite(fd, buf, size));
  44. }
  45. static toff_t
  46. _tiffSeekProc(thandle_t fd, toff_t off, int whence)
  47. {
  48. return (_llseek(fd, (off_t) off, whence));
  49. }
  50. static int
  51. _tiffCloseProc(thandle_t fd)
  52. {
  53. return (_lclose(fd));
  54. }
  55. #include <sys/stat.h>
  56. static toff_t
  57. _tiffSizeProc(thandle_t fd)
  58. {
  59. struct stat sb;
  60. return (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size);
  61. }
  62. static int
  63. _tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
  64. {
  65. return (0);
  66. }
  67. static void
  68. _tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
  69. {
  70. }
  71. /*
  72.  * Open a TIFF file descriptor for read/writing.
  73.  */
  74. TIFF*
  75. TIFFFdOpen(int fd, const char* name, const char* mode)
  76. {
  77. TIFF* tif;
  78. tif = TIFFClientOpen(name, mode,
  79.     (thandle_t) fd,
  80.     _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
  81.     _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
  82. if (tif)
  83. tif->tif_fd = fd;
  84. return (tif);
  85. }
  86. /*
  87.  * Open a TIFF file for read/writing.
  88.  */
  89. TIFF*
  90. TIFFOpen(const char* name, const char* mode)
  91. {
  92. static const char module[] = "TIFFOpen";
  93. int m, fd;
  94. OFSTRUCT of;
  95. int mm = 0;
  96. m = _TIFFgetMode(mode, module);
  97. if (m == -1)
  98. return ((TIFF*)0);
  99. if (m & O_CREAT) {
  100. if ((m & O_TRUNC) || OpenFile(name, &of, OF_EXIST) != HFILE_ERROR)
  101. mm |= OF_CREATE;
  102. }
  103. if (m & O_WRONLY)
  104. mm |= OF_WRITE;
  105. if (m & O_RDWR)
  106. mm |= OF_READWRITE;
  107. fd = OpenFile(name, &of, mm);
  108. if (fd < 0) {
  109. TIFFErrorExt(0, module, "%s: Cannot open", name);
  110. return ((TIFF*)0);
  111. }
  112. return (TIFFFdOpen(fd, name, mode));
  113. }
  114. tdata_t
  115. _TIFFmalloc(tsize_t s)
  116. {
  117. return (tdata_t) GlobalAllocPtr(GHND, (DWORD) s);
  118. }
  119. void
  120. _TIFFfree(tdata_t p)
  121. {
  122. GlobalFreePtr(p);
  123. }
  124. tdata_t
  125. _TIFFrealloc(tdata_t p, tsize_t s)
  126. {
  127. return (tdata_t) GlobalReAllocPtr(p, (DWORD) s, GHND);
  128. }
  129. void
  130. _TIFFmemset(tdata_t p, int v, tsize_t c)
  131. {
  132. char* pp = (char*) p;
  133. while (c > 0) {
  134. tsize_t chunk = 0x10000 - ((uint32) pp & 0xffff);/* What's left in segment */
  135. if (chunk > 0xff00) /* No more than 0xff00 */
  136. chunk = 0xff00;
  137. if (chunk > c) /* No more than needed */
  138. chunk = c;
  139. memset(pp, v, chunk);
  140. pp = (char*) (chunk + (char huge*) pp);
  141. c -= chunk;
  142. }
  143. }
  144. void
  145. _TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c)
  146. {
  147. if (c > 0xFFFF)
  148. hmemcpy((void _huge*) d, (void _huge*) s, c);
  149. else
  150. (void) memcpy(d, s, (size_t) c);
  151. }
  152. int
  153. _TIFFmemcmp(const tdata_t d, const tdata_t s, tsize_t c)
  154. {
  155. char* dd = (char*) d;
  156. char* ss = (char*) s;
  157. tsize_t chunks, chunkd, chunk;
  158. int result;
  159. while (c > 0) {
  160. chunks = 0x10000 - ((uint32) ss & 0xffff); /* What's left in segment */
  161. chunkd = 0x10000 - ((uint32) dd & 0xffff); /* What's left in segment */
  162. chunk = c; /* Get the largest of     */
  163. if (chunk > chunks) /*   c, chunks, chunkd,   */
  164. chunk = chunks; /*   0xff00               */
  165. if (chunk > chunkd)
  166. chunk = chunkd;
  167. if (chunk > 0xff00)
  168. chunk = 0xff00;
  169. result = memcmp(dd, ss, chunk);
  170. if (result != 0)
  171. return (result);
  172. dd = (char*) (chunk + (char huge*) dd);
  173. ss = (char*) (chunk + (char huge*) ss);
  174. c -= chunk;
  175. }
  176. return (0);
  177. }
  178. static void
  179. win3WarningHandler(const char* module, const char* fmt, va_list ap)
  180. {
  181. char e[512] = { '' };
  182. if (module != NULL)
  183. strcat(strcpy(e, module), ":");
  184. vsprintf(e+strlen(e), fmt, ap);
  185. strcat(e, ".");
  186. MessageBox(GetActiveWindow(), e, "LibTIFF Warning",
  187.     MB_OK|MB_ICONEXCLAMATION);
  188. }
  189. TIFFErrorHandler _TIFFwarningHandler = win3WarningHandler;
  190. static void
  191. win3ErrorHandler(const char* module, const char* fmt, va_list ap)
  192. {
  193. char e[512] = { '' };
  194. if (module != NULL)
  195. strcat(strcpy(e, module), ":");
  196. vsprintf(e+strlen(e), fmt, ap);
  197. strcat(e, ".");
  198. MessageBox(GetActiveWindow(), e, "LibTIFF Error", MB_OK|MB_ICONSTOP);
  199. }
  200. TIFFErrorHandler _TIFFerrorHandler = win3ErrorHandler;