1 /*
2  * tkMacOSXPort.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) 1994-1996 Sun Microsystems, Inc.
9  * Copyright 2001, Apple Computer, Inc.
10  * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net>
11  *
12  * See the file "license.terms" for information on usage and redistribution
13  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14  *
15  * RCS: @(#) Id
16  */
17 
18 #ifndef _TKMACPORT
19 #define _TKMACPORT
20 
21 /*
22  * Macro to use instead of "void" for arguments that must have
23  * type "void *" in ANSI C; maps them to type "char *" in
24  * non-ANSI systems. This macro may be used in some of the include
25  * files below, which is why it is defined here.
26  */
27 
28 #ifndef VOID
29 #   ifdef __STDC__
30 #  define VOID void
31 #   else
32 #  define VOID char
33 #   endif
34 #endif
35 
36 #include <stdio.h>
37 #include <ctype.h>
38 #include <fcntl.h>
39 #include <limits.h>
40 #include <math.h>
41 #include <pwd.h>
42 #include <stdlib.h>
43 #include <string.h>
44 #include <sys/types.h>
45 #include <sys/file.h>
46 #ifdef HAVE_SYS_SELECT_H
47 #   include <sys/select.h>
48 #endif
49 #include <sys/stat.h>
50 #ifndef _TCL
51 #   include <tcl.h>
52 #endif
53 #if TIME_WITH_SYS_TIME
54 #   include <sys/time.h>
55 #   include <time.h>
56 #else
57 #   if HAVE_SYS_TIME_H
58 #  include <sys/time.h>
59 #   else
60 #  include <time.h>
61 #   endif
62 #endif
63 #if HAVE_INTTYPES_H
64 #    include <inttypes.h>
65 #endif
66 #include <unistd.h>
67 #include <X11/Xlib.h>
68 #include <X11/cursorfont.h>
69 #include <X11/keysym.h>
70 #include <X11/Xatom.h>
71 #include <X11/Xfuncproto.h>
72 #include <X11/Xutil.h>
73 #include "tkIntXlibDecls.h"
74 
75 /*
76  * The following macro defines the type of the mask arguments to
77  * select:
78  */
79 
80 #ifndef NO_FD_SET
81 #   define SELECT_MASK fd_set
82 #else
83 #   ifndef _AIX
84   typedef long fd_mask;
85 #   endif
86 #   if defined(_IBMR2)
87 #  define SELECT_MASK void
88 #   else
89 #  define SELECT_MASK int
90 #   endif
91 #endif
92 
93 /*
94  * The following macro defines the number of fd_masks in an fd_set:
95  */
96 
97 #ifndef FD_SETSIZE
98 #   ifdef OPEN_MAX
99 #  define FD_SETSIZE OPEN_MAX
100 #   else
101 #  define FD_SETSIZE 256
102 #   endif
103 #endif
104 #if !defined(howmany)
105 #   define howmany(x, y) (((x)+((y)-1))/(y))
106 #endif
107 #ifndef NFDBITS
108 #   define NFDBITS NBBY*sizeof(fd_mask)
109 #endif
110 #define MASK_SIZE howmany(FD_SETSIZE, NFDBITS)
111 
112 /*
113  * Define "NBBY" (number of bits per byte) if it's not already defined.
114  */
115 
116 #ifndef NBBY
117 #   define NBBY 8
118 #endif
119 
120 /*
121  * The following define causes Tk to use its internal keysym hash table
122  */
123 
124 #define REDO_KEYSYM_LOOKUP
125 
126 /*
127  * Defines for X functions that are used by Tk but are treated as
128  * no-op functions on the Macintosh.
129  */
130 
131 #define XFlush(display)
132 #define XFree(data) {if ((data) != NULL) ckfree((char *) (data));}
133 #define XGrabServer(display)
134 #define XNoOp(display) {display->request++;}
135 #define XUngrabServer(display)
136 #define XSynchronize(display, bool) {display->request++;}
137 #define XVisualIDFromVisual(visual) (visual->visualid)
138 
139 /*
140  * The following functions are not used on the Mac, so we stub them out.
141  */
142 
143 #define TkFreeWindowId(dispPtr,w)
144 #define TkInitXId(dispPtr)
145 #define TkpButtonSetDefaults(specPtr) {}
146 #define TkpCmapStressed(tkwin,colormap) (0)
147 #define TkpFreeColor(tkColPtr)
148 #define TkSetPixmapColormap(p,c) {}
149 #define TkpSync(display)
150 
151 /*
152  * The following macro returns the pixel value that corresponds to the
153  * RGB values in the given XColor structure.
154  */
155 
156 #define PIXEL_MAGIC ((unsigned char) 0x69)
157 #define TkpGetPixel(p) ((((((PIXEL_MAGIC << 8) \
158   | (((p)->red >> 8) & 0xff)) << 8) \
159   | (((p)->green >> 8) & 0xff)) << 8) \
160   | (((p)->blue >> 8) & 0xff))
161 
162 /*
163  * This macro stores a representation of the window handle in a string.
164  * This should perhaps use the real size of an XID.
165  */
166 
167 #define TkpPrintWindowId(buf,w) \
168   sprintf((buf), "0x%x", (unsigned int) (w))
169 
170 /*
171  * TkpScanWindowId is just an alias for Tcl_GetInt on Unix.
172  */
173 
174 #define TkpScanWindowId(i,s,wp) \
175   Tcl_GetInt((i),(s),(int *) (wp))
176 
177 /*
178  * Turn off Tk double-buffering as Aqua windows are already double-buffered.
179  */
180 
181 #define TK_NO_DOUBLE_BUFFERING 1
182 
183 /*
184  * Magic pixel code values for system colors.
185  *
186  * NOTE: values must be kept in sync with indices into the
187  *   systemColorMap array in tkMacOSXColor.c !
188  */
189 
190 #define TRANSPARENT_PIXEL    30
191 #define HIGHLIGHT_PIXEL      31
192 #define HIGHLIGHT_SECONDARY_PIXEL  32
193 #define HIGHLIGHT_TEXT_PIXEL    33
194 #define HIGHLIGHT_ALTERNATE_PIXEL  34
195 #define CONTROL_TEXT_PIXEL    35
196 #define CONTROL_BODY_PIXEL    37
197 #define CONTROL_FRAME_PIXEL    39
198 #define WINDOW_BODY_PIXEL    41
199 #define MENU_ACTIVE_PIXEL    43
200 #define MENU_ACTIVE_TEXT_PIXEL    45
201 #define MENU_BACKGROUND_PIXEL    47
202 #define MENU_DISABLED_PIXEL    49
203 #define MENU_TEXT_PIXEL      51
204 #define APPEARANCE_PIXEL    52
205 
206 #endif /* _TKMACPORT */
207