home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2004 July / APC0407D2.iso / workshop / apache / files / ActivePerl-5.8.3.809-MSWin32-x86.msi / _ee9f787cf5a51f76448f6022f3bc57b8 < prev    next >
Encoding:
Text File  |  2004-02-02  |  14.9 KB  |  484 lines

  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 */
  484.