1/* $Header$ */ 2 3/* 4 * Copyright (c) 1988-1997 Sam Leffler 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. 6 * 7 * Permission to use, copy, modify, distribute, and sell this software and 8 * its documentation for any purpose is hereby granted without fee, provided 9 * that (i) the above copyright notices and this permission notice appear in 10 * all copies of the software and related documentation, and (ii) the names of 11 * Sam Leffler and Silicon Graphics may not be used in any advertising or 12 * publicity relating to the software without the specific, prior written 13 * permission of Sam Leffler and Silicon Graphics. 14 * 15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 18 * 19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 24 * OF THIS SOFTWARE. 25 */ 26 27/* 28 * TIFF Library MSDOS-specific Routines. 29 */ 30#if defined(__WATCOMC__) || defined(__BORLANDC__) || defined(_MSC_VER) 31#include <io.h> /* for open, close, etc. function prototypes */ 32#include <stdio.h> 33#endif 34#include "tiffiop.h" 35 36static tsize_t 37_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) 38{ 39 return (read((int) fd, buf, size)); 40} 41 42static tsize_t 43_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) 44{ 45 return (write((int) fd, buf, size)); 46} 47 48static toff_t 49_tiffSeekProc(thandle_t fd, toff_t off, int whence) 50{ 51 return (lseek((int) fd, (off_t) off, whence)); 52} 53 54static int 55_tiffCloseProc(thandle_t fd) 56{ 57 return (close((int) fd)); 58} 59 60#include <sys/stat.h> 61 62static toff_t 63_tiffSizeProc(thandle_t fd) 64{ 65 struct stat sb; 66 return (fstat((int) fd, &sb) < 0 ? 0 : sb.st_size); 67} 68 69static int 70_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) 71{ 72 return (0); 73} 74 75static void 76_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) 77{ 78} 79 80/* 81 * Open a TIFF file descriptor for read/writing. 82 */ 83TIFF* 84TIFFFdOpen(int fd, const char* name, const char* mode) 85{ 86 TIFF* tif; 87 88 tif = TIFFClientOpen(name, mode, 89 (void*) fd, 90 _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, 91 _tiffSizeProc, _tiffMapProc, _tiffUnmapProc); 92 if (tif) 93 tif->tif_fd = fd; 94 return (tif); 95} 96 97/* 98 * Open a TIFF file for read/writing. 99 */ 100TIFF* 101TIFFOpen(const char* name, const char* mode) 102{ 103 static const char module[] = "TIFFOpen"; 104 int m, fd; 105 106 m = _TIFFgetMode(mode, module); 107 if (m == -1) 108 return ((TIFF*)0); 109 fd = open(name, m|O_BINARY, 0666); 110 if (fd < 0) { 111 TIFFError(module, "%s: Cannot open", name); 112 return ((TIFF*)0); 113 } 114 return (TIFFFdOpen(fd, name, mode)); 115} 116 117#ifdef __GNUC__ 118extern char* malloc(); 119extern char* realloc(); 120#else 121#include <malloc.h> 122#endif 123 124tdata_t 125_TIFFmalloc(tsize_t s) 126{ 127 return (malloc((size_t) s)); 128} 129 130void 131_TIFFfree(tdata_t p) 132{ 133 free(p); 134} 135 136tdata_t 137_TIFFrealloc(tdata_t p, tsize_t s) 138{ 139 return (realloc(p, (size_t) s)); 140} 141 142void 143_TIFFmemset(tdata_t p, int v, tsize_t c) 144{ 145 memset(p, v, (size_t) c); 146} 147 148void 149_TIFFmemcpy(tdata_t d, const tdata_t s, tsize_t c) 150{ 151 memcpy(d, s, (size_t) c); 152} 153 154int 155_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) 156{ 157 return (memcmp(p1, p2, (size_t) c)); 158} 159 160static void 161msdosWarningHandler(const char* module, const char* fmt, va_list ap) 162{ 163 if (module != NULL) 164 fprintf(stderr, "%s: ", module); 165 fprintf(stderr, "Warning, "); 166 vfprintf(stderr, fmt, ap); 167 fprintf(stderr, ".\n"); 168} 169TIFFErrorHandler _TIFFwarningHandler = msdosWarningHandler; 170 171static void 172msdosErrorHandler(const char* module, const char* fmt, va_list ap) 173{ 174 if (module != NULL) 175 fprintf(stderr, "%s: ", module); 176 vfprintf(stderr, fmt, ap); 177 fprintf(stderr, ".\n"); 178} 179TIFFErrorHandler _TIFFerrorHandler = msdosErrorHandler; 180