1 /* $Header: /usr/people/sam/tiff/libtiff/RCS/tiffcompat.h,v 1.21 92/03/30 18:31:03 sam Exp $ */
2 
3 /*
4  * Copyright (c) 1990, 1991, 1992 Sam Leffler
5  * Copyright (c) 1991, 1992 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 #ifndef _COMPAT_
28 #define	_COMPAT_
29 /*
30  * This file contains a hodgepodge of definitions and
31  * declarations that are needed to provide compatibility
32  * between the native system and the base UNIX implementation
33  * that the library assumes (~4BSD).  In particular, you
34  * can override the standard i/o interface (read/write/lseek)
35  * by redefining the ReadOK/WriteOK/SeekOK macros to your
36  * liking.
37  *
38  * NB: This file is a mess.
39  */
40 #if (defined(__STDC__) || defined(__EXTENDED__)) && !defined(USE_PROTOTYPES)
41 #define	USE_PROTOTYPES	1
42 #define	USE_CONST	1
43 #endif
44 
45 #if !USE_CONST && !defined(const)
46 #define	const
47 #endif
48 
49 #ifdef THINK_C
50 #include <unix.h>
51 #include <math.h>
52 #endif
53 #if USE_PROTOTYPES
54 #include <stdio.h>
55 #endif
56 #ifndef THINK_C
57 #include <sys/types.h>
58 #endif
59 #ifdef VMS
60 #include <file.h>
61 #include <unixio.h>
62 #else
63 #include <fcntl.h>
64 #endif
65 #if defined(THINK_C) || defined(applec)
66 #include <stdlib.h>
67 #endif
68 
69 /*
70  * Workarounds for BSD lseek definitions.
71  */
72 #if defined(SYSV) || defined(VMS)
73 #if defined(SYSV)
74 #include <unistd.h>
75 #endif
76 #define	L_SET	SEEK_SET
77 #define	L_INCR	SEEK_CUR
78 #define	L_XTND	SEEK_END
79 #endif
80 #ifndef L_SET
81 #define L_SET	0
82 #define L_INCR	1
83 #define L_XTND	2
84 #endif
85 
86 /*
87  * SVID workarounds for BSD bit
88  * string manipulation routines.
89  */
90 #if defined(__STDC__) || defined(SYSV) || defined(THINK_C) || defined(applec) || defined(VMS)
91 #define	bzero(dst,len)		memset((char *)dst, 0, len)
92 #define	bcopy(src,dst,len)	memcpy((char *)dst, (char *)src, len)
93 #define	bcmp(src, dst, len)	memcmp((char *)dst, (char *)src, len)
94 #endif
95 
96 /*
97  * These expand the BSD typedefs.  This is done rather than typedef'ing
98  * them so that we don't care whether or not <sys/types.h> defines them
99  * (something that's hard to tell without trying to compile).
100  */
101 #define u_char  unsigned char
102 #define u_short unsigned short
103 #define u_int   unsigned int
104 #define u_long  unsigned long
105 
106 /*
107  * Return an open file descriptor or -1.
108  */
109 #if defined(applec) || defined(THINK_C)
110 #define	TIFFOpenFile(name, mode, prot)	open(name, mode)
111 #else
112 #if defined(MSDOS)
113 #define	TIFFOpenFile(name, mode, prot)	open(name, mode|O_BINARY, prot)
114 #else
115 #define	TIFFOpenFile(name, mode, prot)	open(name, mode, prot)
116 #endif
117 #endif
118 
119 /*
120  * Return the size in bytes of the file
121  * associated with the supplied file descriptor.
122  */
123 #if USE_PROTOTYPES
124 extern	long TIFFGetFileSize(int fd);
125 #else
126 extern	long TIFFGetFileSize();
127 #endif
128 
129 #ifdef MMAP_SUPPORT
130 /*
131  * Mapped file support.
132  *
133  * TIFFMapFileContents must map the entire file into
134  *     memory and return the address of the mapped
135  *     region and the size of the mapped region.
136  * TIFFUnmapFileContents does the inverse operation.
137  */
138 #if USE_PROTOTYPES
139 extern	int TIFFMapFileContents(int fd, char **paddr, long *psize);
140 extern	void TIFFUnmapFileContents(char *addr, long size);
141 #else
142 extern	int TIFFMapFileContents();
143 extern	void TIFFUnmapFileContents();
144 #endif
145 #endif
146 
147 /*
148  * Mac workaround to handle the file
149  * extension semantics of lseek.
150  */
151 #ifdef applec
152 #define	lseek	mpw_lseek
153 extern long mpw_lseek(int, long, int);
154 #else
155 extern	long lseek();
156 #endif
157 
158 /*
159  * Default Read/Seek/Write definitions.
160  */
161 #ifndef ReadOK
162 #define	ReadOK(fd, buf, size)	(read(fd, (char *)buf, size) == size)
163 #endif
164 #ifndef SeekOK
165 #define	SeekOK(fd, off)	(lseek(fd, (long)off, L_SET) == (long)off)
166 #endif
167 #ifndef WriteOK
168 #define	WriteOK(fd, buf, size)	(write(fd, (char *)buf, size) == size)
169 #endif
170 
171 #if defined(__MACH__) || defined(THINK_C)
172 extern	void *malloc(size_t size);
173 extern	void *realloc(void *ptr, size_t size);
174 #else /* !__MACH__ && !THINK_C */
175 #if defined(MSDOS)
176 #include <malloc.h>
177 #else /* !MSDOS */
178 #if defined(_IBMR2)
179 #include <stdlib.h>
180 #else /* !_IBMR2 */
181 extern	char *malloc();
182 extern	char *realloc();
183 #endif /* _IBMR2 */
184 #endif /* !MSDOS */
185 #endif /* !__MACH__ */
186 
187 /*
188  * dblparam_t is the type that a double precision
189  * floating point value will have on the parameter
190  * stack (when coerced by the compiler).
191  */
192 #ifdef applec
193 typedef extended dblparam_t;
194 #else
195 typedef double dblparam_t;
196 #endif
197 
198 /*
199  * Varargs parameter list handling...YECH!!!!
200  */
201 #if defined(__STDC__) && !defined(USE_VARARGS)
202 #define	USE_VARARGS	0
203 #endif
204 
205 #if defined(USE_VARARGS)
206 #if USE_VARARGS
207 #include <varargs.h>
208 #define	VA_START(ap, parmN)	va_start(ap)
209 #else
210 #include <stdarg.h>
211 #define	VA_START(ap, parmN)	va_start(ap, parmN)
212 #endif
213 #endif /* defined(USE_VARARGS) */
214 #endif /* _COMPAT_ */
215