Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | /* |
2 | * tix.h -- | |
3 | * | |
4 | * This is the standard header file for all tix C code. It | |
5 | * defines many macros and utility functions to make it easier to | |
6 | * write TCL commands and TK widgets in C. No more needs to write | |
7 | * 2000 line functions! | |
8 | * | |
9 | * Copyright (c) 1996, Expert Interface Technologies | |
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 | */ | |
15 | #ifndef _TIX_PORT_H_ | |
16 | #include "tixPort.h" | |
17 | #endif | |
18 | #ifndef _TIX | |
19 | #define _TIX | |
20 | #define _TIX_H_ | |
21 | ||
22 | #ifndef TIX_VERSION | |
23 | #define TIX_VERSION "4.1" | |
24 | #endif | |
25 | #define TIX_PATCHLEVEL "4.1.0" | |
26 | #define TIX_PATCH_LEVEL TIX_PATCHLEVEL | |
27 | ||
28 | #define TIX_RELEASE "4.1.0.007" | |
29 | ||
30 | #ifndef _TK | |
31 | #include "tk.h" | |
32 | #endif | |
33 | ||
34 | ||
35 | #if defined(__WIN32__) || defined(_WIN32) || defined (__BORLAND) || defined(_Windows) | |
36 | #ifndef _WINDOWS | |
37 | #define _WINDOWS | |
38 | #endif | |
39 | #endif | |
40 | ||
41 | /* | |
42 | * When building Tix itself, BUILD_tix should be defined by the makefile | |
43 | * so that all EXTERN declarations get DLLEXPORT; when building apps | |
44 | * using Tix, BUILD_tix should NOT be defined so that all EXTERN | |
45 | * declarations get DLLIMPORT as defined in tcl.h | |
46 | * | |
47 | * NOTE: This ifdef MUST appear after the include of tcl.h and tk.h | |
48 | * because the EXTERN declarations in those files need DLLIMPORT. | |
49 | */ | |
50 | #ifdef BUILD_tix | |
51 | # undef TCL_STORAGE_CLASS | |
52 | # define TCL_STORAGE_CLASS DLLEXPORT | |
53 | #endif | |
54 | ||
55 | #ifdef __cplusplus | |
56 | extern "C" { | |
57 | #endif | |
58 | ||
59 | #if (TCL_MAJOR_VERSION > 7) | |
60 | # define TCL_7_5_OR_LATER | |
61 | #else | |
62 | # if ((TCL_MAJOR_VERSION == 7) && (TCL_MINOR_VERSION >= 5)) | |
63 | # define TCL_7_5_OR_LATER | |
64 | # endif | |
65 | #endif | |
66 | ||
67 | ||
68 | #if (TK_MAJOR_VERSION > 4) | |
69 | # define TK_4_1_OR_LATER | |
70 | #else | |
71 | # if ((TK_MAJOR_VERSION == 4) && (TK_MINOR_VERSION >= 1)) | |
72 | # define TK_4_1_OR_LATER | |
73 | # endif | |
74 | #endif /* TK_MAJOR_VERSION ... */ | |
75 | ||
76 | #if (TK_MAJOR_VERSION >= 8) | |
77 | # define TK_8_0_OR_LATER | |
78 | #endif | |
79 | ||
80 | #ifdef TK_4_1_OR_LATER | |
81 | /* TK 4.1 or later */ | |
82 | # define Tix_FreeProc Tcl_FreeProc | |
83 | ||
84 | #else | |
85 | /* TK 4.0 */ | |
86 | # define Tix_FreeProc Tk_FreeProc | |
87 | ||
88 | /* These portable features were not defined in previous versions of | |
89 | * TK but are used in Tix. Let's define them here. | |
90 | */ | |
91 | # define TkPutImage(a, b, c, d, e, f, g, h, i, j, k, l) \ | |
92 | XPutImage(c, d, e, f, g, h, i, j, k, l) | |
93 | ||
94 | # define TkStringToKeysym XStringToKeysym | |
95 | ||
96 | #endif /* TK_4_1_OR_LATER */ | |
97 | ||
98 | ||
99 | #define TIX_STDIN_ALWAYS 0 | |
100 | #define TIX_STDIN_OPTIONAL 1 | |
101 | #define TIX_STDIN_NONE 2 | |
102 | ||
103 | typedef struct { | |
104 | char *name; /* Name of command. */ | |
105 | int (*cmdProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, | |
106 | int argc, Tcl_Obj **objv)); | |
107 | /* Command procedure. */ | |
108 | } Tix_TclCmd; | |
109 | ||
110 | ||
111 | /*---------------------------------------------------------------------- | |
112 | * | |
113 | * | |
114 | * SUB-COMMAND HANDLING | |
115 | * | |
116 | * | |
117 | *---------------------------------------------------------------------- | |
118 | */ | |
119 | typedef int (*Tix_CmdProc) _ANSI_ARGS_((ClientData clientData, | |
120 | Tcl_Interp *interp, int argc, Tcl_Obj **objv)); | |
121 | typedef int (*Tix_SubCmdProc) _ANSI_ARGS_((ClientData clientData, | |
122 | Tcl_Interp *interp, int argc, Tcl_Obj **objv)); | |
123 | typedef int (*Tix_CheckArgvProc) _ANSI_ARGS_((ClientData clientData, | |
124 | Tcl_Interp *interp, int argc, Tcl_Obj **objv)); | |
125 | ||
126 | typedef struct _Tix_CmdInfo { | |
127 | int numSubCmds; | |
128 | int minargc; | |
129 | int maxargc; | |
130 | char * info; | |
131 | } Tix_CmdInfo; | |
132 | ||
133 | typedef struct _Tix_SubCmdInfo { | |
134 | int namelen; | |
135 | char * name; | |
136 | int minargc; | |
137 | int maxargc; | |
138 | Tix_SubCmdProc proc; | |
139 | char * info; | |
140 | Tix_CheckArgvProc checkArgvProc; | |
141 | } Tix_SubCmdInfo; | |
142 | ||
143 | /* | |
144 | * Tix_ArraySize -- | |
145 | * | |
146 | * Find out the number of elements inside a C array. The argument "x" | |
147 | * must be a valid C array. Pointers don't work. | |
148 | */ | |
149 | #define Tix_ArraySize(x) (sizeof(x) / sizeof(x[0])) | |
150 | ||
151 | /* | |
152 | * This is used for Tix_CmdInfo.maxargc and Tix_SubCmdInfo.maxargc, | |
153 | * indicating that this command takes a variable number of arguments. | |
154 | */ | |
155 | #define TIX_VAR_ARGS -1 | |
156 | ||
157 | /* | |
158 | * TIX_DEFAULT_LEN -- | |
159 | * | |
160 | * Use this for Tix_SubCmdInfo.namelen and Tix_ExecSubCmds() will try to | |
161 | * determine the length of the subcommand name for you. | |
162 | */ | |
163 | #define TIX_DEFAULT_LEN -1 | |
164 | ||
165 | /* | |
166 | * TIX_DEFAULT_SUB_CMD -- | |
167 | * | |
168 | * Use this for Tix_SubCmdInfo.name. This will match any subcommand name, | |
169 | * including the empty string, when Tix_ExecSubCmds() finds a subcommand | |
170 | * to execute. | |
171 | */ | |
172 | #define TIX_DEFAULT_SUBCMD 0 | |
173 | ||
174 | /* | |
175 | * TIX_DECLARE_CMD -- | |
176 | * | |
177 | * This is just a handy macro to declare a C function to use as a | |
178 | * command function. | |
179 | */ | |
180 | #define TIX_DECLARE_CMD(func) \ | |
181 | int func _ANSI_ARGS_((ClientData clientData,\ | |
182 | Tcl_Interp *interp, int argc, Tcl_Obj **objv)) | |
183 | ||
184 | /* | |
185 | * TIX_DECLARE_SUBCMD -- | |
186 | * | |
187 | * This is just a handy macro to declare a C function to use as a | |
188 | * sub command function. | |
189 | */ | |
190 | #define TIX_DECLARE_SUBCMD(func) \ | |
191 | int func _ANSI_ARGS_((ClientData clientData,\ | |
192 | Tcl_Interp *interp, int argc, Tcl_Obj **objv)) | |
193 | ||
194 | /* | |
195 | * TIX_DEFINE_CMD -- | |
196 | * | |
197 | * This is just a handy macro to define a C function to use as a | |
198 | * command function. | |
199 | */ | |
200 | #define TIX_DEFINE_CMD(func) \ | |
201 | int func(clientData, interp, argc, objv) \ | |
202 | ClientData clientData; /* Main window associated with \ | |
203 | * interpreter. */ \ | |
204 | Tcl_Interp *interp; /* Current interpreter. */ \ | |
205 | int argc; /* Number of arguments. */ \ | |
206 | Tcl_Obj **objv; /* Argument strings. */ | |
207 | ||
208 | ||
209 | /*---------------------------------------------------------------------- | |
210 | * Link-list functions -- | |
211 | * | |
212 | * These functions makes it easy to use link lists in C code. | |
213 | * | |
214 | *---------------------------------------------------------------------- | |
215 | */ | |
216 | typedef struct Tix_ListInfo { | |
217 | int nextOffset; /* offset of the "next" pointer in a list | |
218 | * item */ | |
219 | int prevOffset; /* offset of the "next" pointer in a list | |
220 | * item */ | |
221 | } Tix_ListInfo; | |
222 | ||
223 | ||
224 | /* Singly-linked list */ | |
225 | typedef struct Tix_LinkList { | |
226 | int numItems; /* number of items in this list */ | |
227 | char * head; /* (general pointer) head of the list */ | |
228 | char * tail; /* (general pointer) tail of the list */ | |
229 | } Tix_LinkList; | |
230 | ||
231 | typedef struct Tix_ListIterator { | |
232 | char * last; | |
233 | char * curr; | |
234 | unsigned int started : 1; /* True if the search operation has | |
235 | * already started for this list */ | |
236 | unsigned int deleted : 1; /* True if a delete operation has been | |
237 | * performed on the current item (in this | |
238 | * case the curr pointer has already been | |
239 | * adjusted | |
240 | */ | |
241 | } Tix_ListIterator; | |
242 | ||
243 | #define Tix_IsLinkListEmpty(list) ((list.numItems) == 0) | |
244 | #define TIX_UNIQUE 1 | |
245 | #define TIX_UNDEFINED -1 | |
246 | ||
247 | /*---------------------------------------------------------------------- | |
248 | * General Single Link List -- | |
249 | * | |
250 | * The next pointer can be anywhere inside a link. | |
251 | *---------------------------------------------------------------------- | |
252 | */ | |
253 | ||
254 | EXTERN void Tix_LinkListInit _ANSI_ARGS_((Tix_LinkList * lPtr)); | |
255 | EXTERN void Tix_LinkListAppend _ANSI_ARGS_((Tix_ListInfo * infoPtr, | |
256 | Tix_LinkList * lPtr, char * itemPtr, int flags)); | |
257 | EXTERN void Tix_LinkListStart _ANSI_ARGS_((Tix_ListInfo * infoPtr, | |
258 | Tix_LinkList * lPtr, Tix_ListIterator * liPtr)); | |
259 | EXTERN void Tix_LinkListNext _ANSI_ARGS_((Tix_ListInfo * infoPtr, | |
260 | Tix_LinkList * lPtr, Tix_ListIterator * liPtr)); | |
261 | EXTERN void Tix_LinkListDelete _ANSI_ARGS_((Tix_ListInfo * infoPtr, | |
262 | Tix_LinkList * lPtr, Tix_ListIterator * liPtr)); | |
263 | EXTERN int Tix_LinkListDeleteRange _ANSI_ARGS_(( | |
264 | Tix_ListInfo * infoPtr, Tix_LinkList * lPtr, | |
265 | char * fromPtr, char * toPtr, | |
266 | Tix_ListIterator * liPtr)); | |
267 | EXTERN int Tix_LinkListFind _ANSI_ARGS_(( | |
268 | Tix_ListInfo * infoPtr, Tix_LinkList * lPtr, | |
269 | char * itemPtr, Tix_ListIterator * liPtr)); | |
270 | EXTERN int Tix_LinkListFindAndDelete _ANSI_ARGS_(( | |
271 | Tix_ListInfo * infoPtr, Tix_LinkList * lPtr, | |
272 | char * itemPtr, Tix_ListIterator * liPtr)); | |
273 | EXTERN void Tix_LinkListInsert _ANSI_ARGS_(( | |
274 | Tix_ListInfo * infoPtr, | |
275 | Tix_LinkList * lPtr, char * itemPtr, | |
276 | Tix_ListIterator * liPtr)); | |
277 | EXTERN void Tix_LinkListIteratorInit _ANSI_ARGS_(( Tix_ListIterator * liPtr)); | |
278 | ||
279 | #define Tix_LinkListDone(liPtr) ((liPtr)->curr == NULL) | |
280 | ||
281 | ||
282 | /*---------------------------------------------------------------------- | |
283 | * Simple Single Link List -- | |
284 | * | |
285 | * The next pointer is always offset 0 in the link structure. | |
286 | *---------------------------------------------------------------------- | |
287 | */ | |
288 | ||
289 | EXTERN void Tix_SimpleListInit _ANSI_ARGS_((Tix_LinkList * lPtr)); | |
290 | EXTERN void Tix_SimpleListAppend _ANSI_ARGS_(( | |
291 | Tix_LinkList * lPtr, char * itemPtr, int flags)); | |
292 | EXTERN void Tix_SimpleListStart _ANSI_ARGS_(( | |
293 | Tix_LinkList * lPtr, Tix_ListIterator * liPtr)); | |
294 | EXTERN void Tix_SimpleListNext _ANSI_ARGS_(( | |
295 | Tix_LinkList * lPtr, Tix_ListIterator * liPtr)); | |
296 | EXTERN void Tix_SimpleListDelete _ANSI_ARGS_(( | |
297 | Tix_LinkList * lPtr, Tix_ListIterator * liPtr)); | |
298 | EXTERN int Tix_SimpleListDeleteRange _ANSI_ARGS_(( | |
299 | Tix_LinkList * lPtr, | |
300 | char * fromPtr, char * toPtr, | |
301 | Tix_ListIterator * liPtr)); | |
302 | EXTERN int Tix_SimpleListFind _ANSI_ARGS_(( | |
303 | Tix_LinkList * lPtr, | |
304 | char * itemPtr, Tix_ListIterator * liPtr)); | |
305 | EXTERN int Tix_SimpleListFindAndDelete _ANSI_ARGS_(( | |
306 | Tix_LinkList * lPtr, char * itemPtr, | |
307 | Tix_ListIterator * liPtr)); | |
308 | EXTERN void Tix_SimpleListInsert _ANSI_ARGS_(( | |
309 | Tix_LinkList * lPtr, char * itemPtr, | |
310 | Tix_ListIterator * liPtr)); | |
311 | EXTERN void Tix_SimpleListIteratorInit _ANSI_ARGS_(( | |
312 | Tix_ListIterator * liPtr)); | |
313 | ||
314 | #define Tix_SimpleListDone(liPtr) ((liPtr)->curr == NULL) | |
315 | ||
316 | /*---------------------------------------------------------------------- | |
317 | * | |
318 | * | |
319 | * | |
320 | * CUSTOM CONFIG OPTIONS | |
321 | * | |
322 | * | |
323 | *---------------------------------------------------------------------- | |
324 | */ | |
325 | #define TIX_RELIEF_RAISED 1 | |
326 | #define TIX_RELIEF_FLAT 2 | |
327 | #define TIX_RELIEF_SUNKEN 4 | |
328 | #define TIX_RELIEF_GROOVE 8 | |
329 | #define TIX_RELIEF_RIDGE 16 | |
330 | #define TIX_RELIEF_SOLID 32 | |
331 | ||
332 | typedef int Tix_Relief; | |
333 | ||
334 | EXTERN Tk_CustomOption tixConfigItemType; | |
335 | EXTERN Tk_CustomOption tixConfigItemStyle; | |
336 | EXTERN Tk_CustomOption tixConfigRelief; | |
337 | ||
338 | ||
339 | /* | |
340 | * C functions exported by Tix | |
341 | */ | |
342 | ||
343 | EXTERN int Tix_ArgcError _ANSI_ARGS_((Tcl_Interp *interp, | |
344 | int argc, Tcl_Obj **objv, int prefixCount, | |
345 | char *message)); | |
346 | EXTERN void Tix_CreateCommands _ANSI_ARGS_(( | |
347 | Tcl_Interp *interp, Tix_TclCmd *commands, | |
348 | ClientData clientData, | |
349 | Tcl_CmdDeleteProc *deleteProc)); | |
350 | EXTERN Tk_Window Tix_CreateSubWindow _ANSI_ARGS_(( | |
351 | Tcl_Interp * interp, Tk_Window tkwin, | |
352 | char * subPath)); | |
353 | EXTERN int Tix_DefinePixmap _ANSI_ARGS_(( | |
354 | Tcl_Interp * interp, Tk_Uid name, char **data)); | |
355 | EXTERN void Tix_DrawAnchorLines _ANSI_ARGS_(( | |
356 | Display *display, Drawable drawable, | |
357 | GC gc, int x, int y, int w, int h)); | |
358 | EXTERN int Tix_EvalArgv _ANSI_ARGS_(( | |
359 | Tcl_Interp * interp, int argc, Tcl_Obj **objv)); | |
360 | EXTERN int Tix_ExistMethod _ANSI_ARGS_((Tcl_Interp *interp, | |
361 | char *context, char *method)); | |
362 | EXTERN void Tix_Exit _ANSI_ARGS_((Tcl_Interp * interp, int code)); | |
363 | EXTERN Pixmap Tix_GetRenderBuffer _ANSI_ARGS_((Display *display, | |
364 | Drawable d, int width, int height, int depth)); | |
365 | ||
366 | #ifdef TCL_VARARGS | |
367 | /* | |
368 | * The TCL_VARARGS macro is only defined in Tcl 7.5 or later | |
369 | */ | |
370 | EXTERN int Tix_GlobalVarEval _ANSI_ARGS_( | |
371 | TCL_VARARGS(Tcl_Interp *,interp)); | |
372 | #else | |
373 | EXTERN int Tix_GlobalVarEval _ANSI_ARGS_( | |
374 | VARARGS(Tcl_Interp *interp)); | |
375 | #endif | |
376 | ||
377 | EXTERN int Tix_HandleSubCmds _ANSI_ARGS_(( | |
378 | Tix_CmdInfo * cmdInfo, | |
379 | Tix_SubCmdInfo * subCmdInfo, | |
380 | ClientData clientData, Tcl_Interp *interp, | |
381 | int argc, Tcl_Obj **objv)); | |
382 | EXTERN int Tix_Init _ANSI_ARGS_((Tcl_Interp *interp)); | |
383 | ||
384 | EXTERN int Tix_LoadTclLibrary _ANSI_ARGS_(( | |
385 | Tcl_Interp *interp, char *envName, | |
386 | char *tclName, char *initFile, | |
387 | char *defDir, char * appName)); | |
388 | EXTERN void Tix_OpenStdin _ANSI_ARGS_((Tcl_Interp *interp)); | |
389 | EXTERN void Tix_SetArgv _ANSI_ARGS_((Tcl_Interp *interp, | |
390 | int argc, Tcl_Obj **objv)); | |
391 | EXTERN void Tix_SetRcFileName _ANSI_ARGS_(( | |
392 | Tcl_Interp * interp, char * rcFileName)); | |
393 | EXTERN char * TixGetStringFromObj _ANSI_ARGS_(( | |
394 | char *objPtr,int *lengthPtr)); | |
395 | ||
396 | /* | |
397 | * Entry points for Tk_CONFIG_CUSTOM stubs to call | |
398 | */ | |
399 | ||
400 | EXTERN int TixDItemParseProc _ANSI_ARGS_((ClientData clientData, | |
401 | Tcl_Interp *interp, Tk_Window tkwin, Arg value, | |
402 | char *widRec, int offset)); | |
403 | ||
404 | EXTERN Arg TixDItemPrintProc _ANSI_ARGS_(( | |
405 | ClientData clientData, Tk_Window tkwin, char *widRec, | |
406 | int offset, Tcl_FreeProc **freeProcPtr)); | |
407 | ||
408 | EXTERN int TixDItemStyleParseProc _ANSI_ARGS_((ClientData clientData, | |
409 | Tcl_Interp *interp, Tk_Window tkwin, Arg value, | |
410 | char *widRec, int offset)); | |
411 | ||
412 | EXTERN Arg TixDItemStylePrintProc _ANSI_ARGS_(( | |
413 | ClientData clientData, Tk_Window tkwin, char *widRec, | |
414 | int offset, Tcl_FreeProc **freeProcPtr)); | |
415 | ||
416 | ||
417 | /* | |
418 | * Commands exported by Tix | |
419 | * | |
420 | */ | |
421 | ||
422 | extern TIX_DECLARE_CMD(Tix_CallMethodCmd); | |
423 | extern TIX_DECLARE_CMD(Tix_ChainMethodCmd); | |
424 | extern TIX_DECLARE_CMD(Tix_ClassCmd); | |
425 | extern TIX_DECLARE_CMD(Tix_DoWhenIdleCmd); | |
426 | extern TIX_DECLARE_CMD(Tix_DoWhenMappedCmd); | |
427 | extern TIX_DECLARE_CMD(Tix_FalseCmd); | |
428 | extern TIX_DECLARE_CMD(Tix_FileCmd); | |
429 | extern TIX_DECLARE_CMD(Tix_FlushXCmd); | |
430 | extern TIX_DECLARE_CMD(Tix_FormCmd); | |
431 | extern TIX_DECLARE_CMD(Tix_GridCmd); | |
432 | extern TIX_DECLARE_CMD(Tix_GeometryRequestCmd); | |
433 | extern TIX_DECLARE_CMD(Tix_Get3DBorderCmd); | |
434 | extern TIX_DECLARE_CMD(Tix_GetBooleanCmd); | |
435 | extern TIX_DECLARE_CMD(Tix_GetIntCmd); | |
436 | extern TIX_DECLARE_CMD(Tix_GetMethodCmd); | |
437 | extern TIX_DECLARE_CMD(Tix_HListCmd); | |
438 | extern TIX_DECLARE_CMD(Tix_HandleOptionsCmd); | |
439 | extern TIX_DECLARE_CMD(Tix_InputOnlyCmd); | |
440 | extern TIX_DECLARE_CMD(Tix_ItemStyleCmd); | |
441 | extern TIX_DECLARE_CMD(Tix_ManageGeometryCmd); | |
442 | extern TIX_DECLARE_CMD(Tix_MapWindowCmd); | |
443 | extern TIX_DECLARE_CMD(Tix_MoveResizeWindowCmd); | |
444 | extern TIX_DECLARE_CMD(Tix_NoteBookFrameCmd); | |
445 | extern TIX_DECLARE_CMD(Tix_RaiseWindowCmd); | |
446 | extern TIX_DECLARE_CMD(Tix_ShellInputCmd); | |
447 | extern TIX_DECLARE_CMD(Tix_StringSubCmd); | |
448 | extern TIX_DECLARE_CMD(Tix_StrEqCmd); | |
449 | extern TIX_DECLARE_CMD(Tix_TListCmd); | |
450 | extern TIX_DECLARE_CMD(Tix_TmpLineCmd); | |
451 | extern TIX_DECLARE_CMD(Tix_TrueCmd); | |
452 | extern TIX_DECLARE_CMD(Tix_UnmapWindowCmd); | |
453 | extern TIX_DECLARE_CMD(Tix_MwmCmd); | |
454 | extern TIX_DECLARE_CMD(Tix_CreateWidgetCmd); | |
455 | ||
456 | #define SET_RECORD(interp, record, var, value) \ | |
457 | Tcl_SetVar2(interp, record, var, value, TCL_GLOBAL_ONLY) | |
458 | ||
459 | #define GET_RECORD(interp, record, var) \ | |
460 | Tcl_GetVar2(interp, record, var, TCL_GLOBAL_ONLY) | |
461 | ||
462 | ||
463 | #define TIX_HASHKEY(k) ((sizeof(k)>sizeof(int))?((char*)&(k)):((char*)(k))) | |
464 | ||
465 | /*---------------------------------------------------------------------- | |
466 | * Compatibility section | |
467 | *---------------------------------------------------------------------- */ | |
468 | ||
469 | #undef strdup | |
470 | #define strdup DoNotUse_strdup | |
471 | EXTERN char * tixStrDup _ANSI_ARGS_((CONST char * s)); | |
472 | ||
473 | #ifdef _WINDOWS | |
474 | /* This is the way win/tkWinPort.h in tk8.0.5 defines it */ | |
475 | #define strcasecmp stricmp | |
476 | #endif | |
477 | ||
478 | ||
479 | #ifdef __cplusplus | |
480 | } | |
481 | #endif | |
482 | ||
483 | #endif /* _TIX */ |