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

打印编程

开发平台:

Visual C++

  1. /* "$Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_atari.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 ATARI-specific Routines.
  27.  */
  28. #include "tiffiop.h"
  29. #if defined(__TURBOC__)
  30. #include <tos.h>
  31. #include <stdio.h>
  32. #else
  33. #include <osbind.h>
  34. #include <fcntl.h>
  35. #endif
  36. #ifndef O_ACCMODE
  37. #define O_ACCMODE 3
  38. #endif
  39. #include <errno.h>
  40. #define AEFILNF   -33
  41. static tsize_t
  42. _tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size)
  43. {
  44. long r;
  45. r = Fread((int) fd, size, buf);
  46. if (r < 0) {
  47. errno = (int)-r;
  48. r = -1;
  49. }
  50. return r;
  51. }
  52. static tsize_t
  53. _tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
  54. {
  55. long r;
  56. r = Fwrite((int) fd, size, buf);
  57. if (r < 0) {
  58. errno = (int)-r;
  59. r = -1;
  60. }
  61. return r;
  62. }
  63. static toff_t
  64. _tiffSeekProc(thandle_t fd, off_t off, int whence)
  65. {
  66. char buf[256];
  67. long current_off, expected_off, new_off;
  68. if (whence == SEEK_END || off <= 0)
  69. return Fseek(off, (int) fd, whence);
  70. current_off = Fseek(0, (int) fd, SEEK_CUR); /* find out where we are */
  71. if (whence == SEEK_SET)
  72. expected_off = off;
  73. else
  74. expected_off = off + current_off;
  75. new_off = Fseek(off, (int) fd, whence);
  76. if (new_off == expected_off)
  77. return new_off;
  78. /* otherwise extend file -- zero filling the hole */
  79. if (new_off < 0)            /* error? */
  80. new_off = Fseek(0, (int) fd, SEEK_END); /* go to eof */
  81. _TIFFmemset(buf, 0, sizeof(buf));
  82. while (expected_off > new_off) {
  83. off = expected_off - new_off;
  84. if (off > sizeof(buf))
  85. off = sizeof(buf);
  86. if ((current_off = Fwrite((int) fd, off, buf)) != off)
  87. return (current_off > 0) ?
  88.     new_off + current_off : new_off;
  89. new_off += off;
  90. }
  91. return new_off;
  92. }
  93. static int
  94. _tiffCloseProc(thandle_t fd)
  95. {
  96. long r;
  97. r = Fclose((int) fd);
  98. if (r < 0) {
  99. errno = (int)-r;
  100. r = -1;
  101. }
  102. return (int)r;
  103. }
  104. static toff_t
  105. _tiffSizeProc(thandle_t fd)
  106. {
  107. long pos, eof;
  108. pos = Fseek(0, (int) fd, SEEK_CUR);
  109. eof = Fseek(0, (int) fd, SEEK_END);
  110. Fseek(pos, (int) fd, SEEK_SET);
  111. return eof;
  112. }
  113. static int
  114. _tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize)
  115. {
  116. return (0);
  117. }
  118. static void
  119. _tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size)
  120. {
  121. }
  122. /*
  123. * Open a TIFF file descriptor for read/writing.
  124. */
  125. TIFF*
  126. TIFFFdOpen(int fd, const char* name, const char* mode)
  127. {
  128. TIFF* tif;
  129. tif = TIFFClientOpen(name, mode,
  130. (thandle_t) fd,
  131. _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc,
  132. _tiffSizeProc, _tiffMapProc, _tiffUnmapProc);
  133. if (tif)
  134. tif->tif_fd = fd;
  135. return (tif);
  136. }
  137. /*
  138. * Open a TIFF file for read/writing.
  139. */
  140. TIFF*
  141. TIFFOpen(const char* name, const char* mode)
  142. {
  143. static const char module[] = "TIFFOpen";
  144. int m;
  145. long fd;
  146. m = _TIFFgetMode(mode, module);
  147. if (m == -1)
  148. return ((TIFF*)0);
  149. if (m & O_TRUNC) {
  150. fd = Fcreate(name, 0);
  151. } else {
  152. fd = Fopen(name, m & O_ACCMODE);
  153. if (fd == AEFILNF && m & O_CREAT)
  154. fd = Fcreate(name, 0);
  155. }
  156. if (fd < 0)
  157. errno = (int)fd;
  158. if (fd < 0) {
  159. TIFFErrorExt(0, module, "%s: Cannot open", name);
  160. return ((TIFF*)0);
  161. }
  162. return (TIFFFdOpen(fd, name, mode));
  163. }
  164. #include <stdlib.h>
  165. tdata_t
  166. _TIFFmalloc(tsize_t s)
  167. {
  168. return (malloc((size_t) s));
  169. }
  170. void
  171. _TIFFfree(tdata_t p)
  172. {
  173. free(p);
  174. }
  175. tdata_t
  176. _TIFFrealloc(tdata_t p, tsize_t s)
  177. {
  178. return (realloc(p, (size_t) s));
  179. }
  180. void
  181. _TIFFmemset(tdata_t p, int v, size_t c)
  182. {
  183. memset(p, v, (size_t) c);
  184. }
  185. void
  186. _TIFFmemcpy(tdata_t d, const tdata_t s, size_t c)
  187. {
  188. memcpy(d, s, (size_t) c);
  189. }
  190. int
  191. _TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c)
  192. {
  193. return (memcmp(p1, p2, (size_t) c));
  194. }
  195. static void
  196. atariWarningHandler(const char* module, const char* fmt, va_list ap)
  197. {
  198. if (module != NULL)
  199. fprintf(stderr, "%s: ", module);
  200. fprintf(stderr, "Warning, ");
  201. vfprintf(stderr, fmt, ap);
  202. fprintf(stderr, ".n");
  203. }
  204. TIFFErrorHandler _TIFFwarningHandler = atariWarningHandler;
  205. static void
  206. atariErrorHandler(const char* module, const char* fmt, va_list ap)
  207. {
  208. if (module != NULL)
  209. fprintf(stderr, "%s: ", module);
  210. vfprintf(stderr, fmt, ap);
  211. fprintf(stderr, ".n");
  212. }
  213. TIFFErrorHandler _TIFFerrorHandler = atariErrorHandler;