1 /*
2  * tkUnixPort.h --
3  *
4  *  This file is included by all of the Tk C files.  It contains
5  *  information that may be configuration-dependent, such as
6  *  #includes for system include files and a few other things.
7  *
8  * Copyright (c) 1991-1993 The Regents of the University of California.
9  * Copyright (c) 1994-1996 Sun Microsystems, Inc.
10  *
11  * See the file "license.terms" for information on usage and redistribution
12  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
13  *
14  * RCS: @(#) Id
15  */
16 
17 #ifndef _UNIXPORT
18 #define _UNIXPORT
19 
20 #define __UNIX__ 1
21 
22 /*
23  * Macro to use instead of "void" for arguments that must have
24  * type "void *" in ANSI C;  maps them to type "char *" in
25  * non-ANSI systems.  This macro may be used in some of the include
26  * files below, which is why it is defined here.
27  */
28 
29 #ifndef VOID
30 #   ifdef __STDC__
31 #       define VOID void
32 #   else
33 #       define VOID char
34 #   endif
35 #endif
36 
37 #include <stdio.h>
38 #include <ctype.h>
39 #include <fcntl.h>
40 #ifndef NO_LIMITS_H
41 #   include <limits.h>
42 #else
43 #   include "../compat/limits.h"
44 #endif
45 #include <math.h>
46 #include <pwd.h>
47 #ifdef NO_STDLIB_H
48 #   include "../compat/stdlib.h"
49 #else
50 #   include <stdlib.h>
51 #endif
52 #include <string.h>
53 #include <sys/types.h>
54 #include <sys/file.h>
55 #ifdef HAVE_SYS_SELECT_H
56 #   include <sys/select.h>
57 #endif
58 #include <sys/stat.h>
59 #ifndef _TCL
60 #   include <tcl.h>
61 #endif
62 #if TIME_WITH_SYS_TIME
63 #   include <sys/time.h>
64 #   include <time.h>
65 #else
66 #   if HAVE_SYS_TIME_H
67 #       include <sys/time.h>
68 #   else
69 #       include <time.h>
70 #   endif
71 #endif
72 #if HAVE_INTTYPES_H
73 #    include <inttypes.h>
74 #endif
75 #ifndef NO_UNISTD_H
76 #   include <unistd.h>
77 #else
78 #   include "../compat/unistd.h"
79 #endif
80 #include <X11/Xlib.h>
81 #include <X11/cursorfont.h>
82 #include <X11/keysym.h>
83 #include <X11/Xatom.h>
84 #include <X11/Xproto.h>
85 #include <X11/Xresource.h>
86 #include <X11/Xutil.h>
87 
88 /*
89  * The following macro defines the type of the mask arguments to
90  * select:
91  */
92 
93 #ifndef NO_FD_SET
94 #   define SELECT_MASK fd_set
95 #else
96 #   ifndef _AIX
97   typedef long fd_mask;
98 #   endif
99 #   if defined(_IBMR2)
100 #  define SELECT_MASK void
101 #   else
102 #  define SELECT_MASK int
103 #   endif
104 #endif
105 
106 /*
107  * The following macro defines the number of fd_masks in an fd_set:
108  */
109 
110 #ifndef FD_SETSIZE
111 #   ifdef OPEN_MAX
112 #  define FD_SETSIZE OPEN_MAX
113 #   else
114 #  define FD_SETSIZE 256
115 #   endif
116 #endif
117 #if !defined(howmany)
118 #   define howmany(x, y) (((x)+((y)-1))/(y))
119 #endif
120 #ifndef NFDBITS
121 #   define NFDBITS NBBY*sizeof(fd_mask)
122 #endif
123 #define MASK_SIZE howmany(FD_SETSIZE, NFDBITS)
124 
125 /*
126  * Define "NBBY" (number of bits per byte) if it's not already defined.
127  */
128 
129 #ifndef NBBY
130 #   define NBBY 8
131 #endif
132 
133 /*
134  * These macros are just wrappers for the equivalent X Region calls.
135  */
136 
137 #define TkClipBox(rgn, rect) XClipBox((Region) rgn, rect)
138 #define TkCreateRegion() (TkRegion) XCreateRegion()
139 #define TkDestroyRegion(rgn) XDestroyRegion((Region) rgn)
140 #define TkIntersectRegion(a, b, r) XIntersectRegion((Region) a, \
141   (Region) b, (Region) r)
142 #define TkRectInRegion(r, x, y, w, h) XRectInRegion((Region) r, x, y, w, h)
143 #define TkSetRegion(d, gc, rgn) XSetRegion(d, gc, (Region) rgn)
144 #define TkSubtractRegion(a, b, r) XSubtractRegion((Region) a, \
145   (Region) b, (Region) r)
146 #define TkUnionRectWithRegion(rect, src, ret) XUnionRectWithRegion(rect, \
147   (Region) src, (Region) ret)
148 
149 /*
150  * The TkPutImage macro strips off the color table information, which isn't
151  * needed for X.
152  */
153 
154 #define TkPutImage(colors, ncolors, display, pixels, gc, image, srcx, srcy, destx, desty, width, height) \
155   XPutImage(display, pixels, gc, image, srcx, srcy, destx, \
156   desty, width, height);
157 
158 /*
159  * Supply macros for seek offsets, if they're not already provided by
160  * an include file.
161  */
162 
163 #ifndef SEEK_SET
164 #   define SEEK_SET 0
165 #endif
166 
167 #ifndef SEEK_CUR
168 #   define SEEK_CUR 1
169 #endif
170 
171 #ifndef SEEK_END
172 #   define SEEK_END 2
173 #endif
174 
175 /*
176  * Declarations for various library procedures that may not be declared
177  * in any other header file.
178  */
179 
180 
181 /*
182  * These functions do nothing under Unix, so we just eliminate calls to them.
183  */
184 
185 #define TkpButtonSetDefaults(specPtr) {}
186 #define TkpDestroyButton(butPtr) {}
187 #define TkSelUpdateClipboard(a,b) {}
188 #define TkSetPixmapColormap(p,c) {}
189 
190 /*
191  * These calls implement native bitmaps which are not supported under
192  * UNIX.  The macros eliminate the calls.
193  */
194 
195 #define TkpDefineNativeBitmaps()
196 #define TkpCreateNativeBitmap(display, source) None
197 #define TkpGetNativeAppBitmap(display, name, w, h) None
198 
199 /*
200  * This macro stores a representation of the window handle in a string.
201  * This should perhaps use the real size of an XID.
202  */
203 
204 #define TkpPrintWindowId(buf,w) \
205   sprintf((buf), "%#08lx", (unsigned long) (w))
206 
207 /*
208  * The following declaration is used to get access to a private Tcl interface
209  * that is needed for portability reasons.
210  *
211  * Disabled for now to determined whether we really still need this.
212 
213 #ifndef _TCLINT
214 #include <tclInt.h>
215 #endif
216  */
217 
218 #endif /* _UNIXPORT */
219