home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _ee9f787cf5a51f76448f6022f3bc57b8 < prev    next >
Encoding:
Text File  |  2004-06-01  |  15.9 KB  |  513 lines

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