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