4  * Copyright (c) 1988-1997 Sam Leffler 
   5  * Copyright (c) 1991-1997 Silicon Graphics, Inc. 
   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. 
  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.   
  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  
  28  * TIFF Library Macintosh-specific routines. 
  30  * These routines use only Toolbox and high-level File Manager traps. 
  31  * They make no calls to the THINK C "unix" compatibility library.  Also, 
  32  * malloc is not used directly but it is still referenced internally by 
  33  * the ANSI library in rare cases.  Heap fragmentation by the malloc ring 
  34  * buffer is therefore minimized. 
  36  * O_RDONLY and O_RDWR are treated identically here.  The tif_mode flag is 
  37  * checked in TIFFWriteCheck(). 
  39  * Create below fills in a blank creator signature and sets the file type 
  40  * to 'TIFF'.  It is much better for the application to do this by Create'ing 
  41  * the file first and TIFFOpen'ing it later. 
  49 #if defined(__PPCC__) || defined(__SC__) || defined(__MRC__) || defined(applec) 
  50 #define CtoPstr c2pstr 
  54 _tiffReadProc(thandle_t fd
, tdata_t buf
, tsize_t size
) 
  56         return (FSRead((short) fd
, (long*) &size
, (char*) buf
) == noErr 
? 
  61 _tiffWriteProc(thandle_t fd
, tdata_t buf
, tsize_t size
) 
  63         return (FSWrite((short) fd
, (long*) &size
, (char*) buf
) == noErr 
? 
  68 _tiffSeekProc(thandle_t fd
, toff_t off
, int whence
) 
  72         if (GetEOF((short) fd
, &size
) != noErr
) 
  74         (void) GetFPos((short) fd
, &fpos
); 
  78                 if (off 
+ fpos 
> size
) 
  79                         SetEOF((short) fd
, off 
+ fpos
); 
  80                 if (SetFPos((short) fd
, fsFromMark
, off
) != noErr
) 
  85                         SetEOF((short) fd
, off 
+ size
); 
  86                 if (SetFPos((short) fd
, fsFromStart
, off 
+ size
) != noErr
) 
  91                         SetEOF((short) fd
, off
); 
  92                 if (SetFPos((short) fd
, fsFromStart
, off
) != noErr
) 
  97         return (toff_t
)(GetFPos((short) fd
, &fpos
) == noErr 
? fpos 
: EOF
); 
 101 _tiffMapProc(thandle_t fd
, tdata_t
* pbase
, toff_t
* psize
) 
 107 _tiffUnmapProc(thandle_t fd
, tdata_t base
, toff_t size
) 
 112 _tiffCloseProc(thandle_t fd
) 
 114         return (FSClose((short) fd
)); 
 118 _tiffSizeProc(thandle_t fd
) 
 122         if (GetEOF((short) fd
, &size
) != noErr
) { 
 123                 TIFFError("_tiffSizeProc", "%s: Cannot get file size"); 
 126         return ((toff_t
) size
); 
 130  * Open a TIFF file descriptor for read/writing. 
 133 TIFFFdOpen(int fd
, const char* name
, const char* mode
) 
 137         tif 
= TIFFClientOpen(name
, mode
, (thandle_t
) fd
, 
 138             _tiffReadProc
, _tiffWriteProc
, _tiffSeekProc
, _tiffCloseProc
, 
 139             _tiffSizeProc
, _tiffMapProc
, _tiffUnmapProc
); 
 146  * Open a TIFF file for read/writing. 
 149 TIFFOpen(const char* name
, const char* mode
) 
 151         static const char module[] = "TIFFOpen"; 
 157         strcpy((char*) pname
, name
); 
 158         CtoPstr((char*) pname
); 
 160         switch (_TIFFgetMode(mode
, module)) { 
 163         case O_RDWR 
| O_CREAT 
| O_TRUNC
: 
 164                 if (GetFInfo(pname
, 0, &finfo
) == noErr
) 
 167         case O_RDWR 
| O_CREAT
: 
 168                 if ((err 
= GetFInfo(pname
, 0, &finfo
)) == fnfErr
) { 
 169                         if (Create(pname
, 0, '    ', 'TIFF') != noErr
) 
 171                         if (FSOpen(pname
, 0, &fref
) != noErr
) 
 173                 } else if (err 
== noErr
) { 
 174                         if (FSOpen(pname
, 0, &fref
) != noErr
) 
 181                 if (FSOpen(pname
, 0, &fref
) != noErr
) 
 185         return (TIFFFdOpen((int) fref
, name
, mode
)); 
 187         TIFFError(module, "%s: Cannot create", name
); 
 190         TIFFError(module, "%s: Cannot open", name
); 
 195 _TIFFmemset(tdata_t p
, int v
, tsize_t c
) 
 197         memset(p
, v
, (size_t) c
); 
 201 _TIFFmemcpy(tdata_t d
, const tdata_t s
, tsize_t c
) 
 203         memcpy(d
, s
, (size_t) c
); 
 207 _TIFFmemcmp(const tdata_t p1
, const tdata_t p2
, tsize_t c
) 
 209         return (memcmp(p1
, p2
, (size_t) c
)); 
 213 _TIFFmalloc(tsize_t s
) 
 215         return (NewPtr((size_t) s
)); 
 225 _TIFFrealloc(tdata_t p
, tsize_t s
) 
 229         SetPtrSize(p
, (size_t) s
); 
 230         if (MemError() && (n 
= NewPtr((size_t) s
)) != NULL
) { 
 231                 BlockMove(p
, n
, GetPtrSize(p
)); 
 234         return ((tdata_t
) n
); 
 238 appleWarningHandler(const char* module, const char* fmt
, va_list ap
) 
 241                 fprintf(stderr
, "%s: ", module); 
 242         fprintf(stderr
, "Warning, "); 
 243         vfprintf(stderr
, fmt
, ap
); 
 244         fprintf(stderr
, ".\n"); 
 246 TIFFErrorHandler _TIFFwarningHandler 
= appleWarningHandler
; 
 249 appleErrorHandler(const char* module, const char* fmt
, va_list ap
) 
 252                 fprintf(stderr
, "%s: ", module); 
 253         vfprintf(stderr
, fmt
, ap
); 
 254         fprintf(stderr
, ".\n"); 
 256 TIFFErrorHandler _TIFFerrorHandler 
= appleErrorHandler
;