* This is the standard header file for all tix C code. It
* defines many macros and utility functions to make it easier to
* write TCL commands and TK widgets in C. No more needs to write
* Copyright (c) 1996, Expert Interface Technologies
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#define TIX_VERSION "4.1"
#define TIX_PATCHLEVEL "4.1.0"
#define TIX_PATCH_LEVEL TIX_PATCHLEVEL
#define TIX_RELEASE "4.1.0.007"
#if defined(__WIN32__) || defined(_WIN32) || defined (__BORLAND) || defined(_Windows)
* When building Tix itself, BUILD_tix should be defined by the makefile
* so that all EXTERN declarations get DLLEXPORT; when building apps
* using Tix, BUILD_tix should NOT be defined so that all EXTERN
* declarations get DLLIMPORT as defined in tcl.h
* NOTE: This ifdef MUST appear after the include of tcl.h and tk.h
* because the EXTERN declarations in those files need DLLIMPORT.
# undef TCL_STORAGE_CLASS
# define TCL_STORAGE_CLASS DLLEXPORT
#if (TCL_MAJOR_VERSION > 7)
# define TCL_7_5_OR_LATER
# if ((TCL_MAJOR_VERSION == 7) && (TCL_MINOR_VERSION >= 5))
# define TCL_7_5_OR_LATER
#if (TK_MAJOR_VERSION > 4)
# if ((TK_MAJOR_VERSION == 4) && (TK_MINOR_VERSION >= 1))
#endif /* TK_MAJOR_VERSION ... */
#if (TK_MAJOR_VERSION >= 8)
# define Tix_FreeProc Tcl_FreeProc
# define Tix_FreeProc Tk_FreeProc
/* These portable features were not defined in previous versions of
* TK but are used in Tix. Let's define them here.
# define TkPutImage(a, b, c, d, e, f, g, h, i, j, k, l) \
XPutImage(c, d, e, f, g, h, i, j, k, l)
# define TkStringToKeysym XStringToKeysym
#endif /* TK_4_1_OR_LATER */
#define TIX_STDIN_ALWAYS 0
#define TIX_STDIN_OPTIONAL 1
char *name
; /* Name of command. */
int (*cmdProc
) _ANSI_ARGS_((ClientData clientData
, Tcl_Interp
*interp
,
int argc
, Tcl_Obj
**objv
));
/*----------------------------------------------------------------------
*----------------------------------------------------------------------
typedef int (*Tix_CmdProc
) _ANSI_ARGS_((ClientData clientData
,
Tcl_Interp
*interp
, int argc
, Tcl_Obj
**objv
));
typedef int (*Tix_SubCmdProc
) _ANSI_ARGS_((ClientData clientData
,
Tcl_Interp
*interp
, int argc
, Tcl_Obj
**objv
));
typedef int (*Tix_CheckArgvProc
) _ANSI_ARGS_((ClientData clientData
,
Tcl_Interp
*interp
, int argc
, Tcl_Obj
**objv
));
typedef struct _Tix_CmdInfo
{
typedef struct _Tix_SubCmdInfo
{
Tix_CheckArgvProc checkArgvProc
;
* Find out the number of elements inside a C array. The argument "x"
* must be a valid C array. Pointers don't work.
#define Tix_ArraySize(x) (sizeof(x) / sizeof(x[0]))
* This is used for Tix_CmdInfo.maxargc and Tix_SubCmdInfo.maxargc,
* indicating that this command takes a variable number of arguments.
* Use this for Tix_SubCmdInfo.namelen and Tix_ExecSubCmds() will try to
* determine the length of the subcommand name for you.
#define TIX_DEFAULT_LEN -1
* Use this for Tix_SubCmdInfo.name. This will match any subcommand name,
* including the empty string, when Tix_ExecSubCmds() finds a subcommand
#define TIX_DEFAULT_SUBCMD 0
* This is just a handy macro to declare a C function to use as a
#define TIX_DECLARE_CMD(func) \
int func _ANSI_ARGS_((ClientData clientData,\
Tcl_Interp *interp, int argc, Tcl_Obj **objv))
* This is just a handy macro to declare a C function to use as a
#define TIX_DECLARE_SUBCMD(func) \
int func _ANSI_ARGS_((ClientData clientData,\
Tcl_Interp *interp, int argc, Tcl_Obj **objv))
* This is just a handy macro to define a C function to use as a
#define TIX_DEFINE_CMD(func) \
int func(clientData, interp, argc, objv) \
ClientData clientData; /* Main window associated with \
Tcl_Interp *interp; /* Current interpreter. */ \
int argc; /* Number of arguments. */ \
Tcl_Obj **objv; /* Argument strings. */
/*----------------------------------------------------------------------
* These functions makes it easy to use link lists in C code.
*----------------------------------------------------------------------
typedef struct Tix_ListInfo
{
int nextOffset
; /* offset of the "next" pointer in a list
int prevOffset
; /* offset of the "next" pointer in a list
typedef struct Tix_LinkList
{
int numItems
; /* number of items in this list */
char * head
; /* (general pointer) head of the list */
char * tail
; /* (general pointer) tail of the list */
typedef struct Tix_ListIterator
{
unsigned int started
: 1; /* True if the search operation has
* already started for this list */
unsigned int deleted
: 1; /* True if a delete operation has been
* performed on the current item (in this
* case the curr pointer has already been
#define Tix_IsLinkListEmpty(list) ((list.numItems) == 0)
/*----------------------------------------------------------------------
* General Single Link List --
* The next pointer can be anywhere inside a link.
*----------------------------------------------------------------------
EXTERN
void Tix_LinkListInit
_ANSI_ARGS_((Tix_LinkList
* lPtr
));
EXTERN
void Tix_LinkListAppend
_ANSI_ARGS_((Tix_ListInfo
* infoPtr
,
Tix_LinkList
* lPtr
, char * itemPtr
, int flags
));
EXTERN
void Tix_LinkListStart
_ANSI_ARGS_((Tix_ListInfo
* infoPtr
,
Tix_LinkList
* lPtr
, Tix_ListIterator
* liPtr
));
EXTERN
void Tix_LinkListNext
_ANSI_ARGS_((Tix_ListInfo
* infoPtr
,
Tix_LinkList
* lPtr
, Tix_ListIterator
* liPtr
));
EXTERN
void Tix_LinkListDelete
_ANSI_ARGS_((Tix_ListInfo
* infoPtr
,
Tix_LinkList
* lPtr
, Tix_ListIterator
* liPtr
));
EXTERN
int Tix_LinkListDeleteRange
_ANSI_ARGS_((
Tix_ListInfo
* infoPtr
, Tix_LinkList
* lPtr
,
char * fromPtr
, char * toPtr
,
Tix_ListIterator
* liPtr
));
EXTERN
int Tix_LinkListFind
_ANSI_ARGS_((
Tix_ListInfo
* infoPtr
, Tix_LinkList
* lPtr
,
char * itemPtr
, Tix_ListIterator
* liPtr
));
EXTERN
int Tix_LinkListFindAndDelete
_ANSI_ARGS_((
Tix_ListInfo
* infoPtr
, Tix_LinkList
* lPtr
,
char * itemPtr
, Tix_ListIterator
* liPtr
));
EXTERN
void Tix_LinkListInsert
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, char * itemPtr
,
Tix_ListIterator
* liPtr
));
EXTERN
void Tix_LinkListIteratorInit
_ANSI_ARGS_(( Tix_ListIterator
* liPtr
));
#define Tix_LinkListDone(liPtr) ((liPtr)->curr == NULL)
/*----------------------------------------------------------------------
* Simple Single Link List --
* The next pointer is always offset 0 in the link structure.
*----------------------------------------------------------------------
EXTERN
void Tix_SimpleListInit
_ANSI_ARGS_((Tix_LinkList
* lPtr
));
EXTERN
void Tix_SimpleListAppend
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, char * itemPtr
, int flags
));
EXTERN
void Tix_SimpleListStart
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, Tix_ListIterator
* liPtr
));
EXTERN
void Tix_SimpleListNext
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, Tix_ListIterator
* liPtr
));
EXTERN
void Tix_SimpleListDelete
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, Tix_ListIterator
* liPtr
));
EXTERN
int Tix_SimpleListDeleteRange
_ANSI_ARGS_((
char * fromPtr
, char * toPtr
,
Tix_ListIterator
* liPtr
));
EXTERN
int Tix_SimpleListFind
_ANSI_ARGS_((
char * itemPtr
, Tix_ListIterator
* liPtr
));
EXTERN
int Tix_SimpleListFindAndDelete
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, char * itemPtr
,
Tix_ListIterator
* liPtr
));
EXTERN
void Tix_SimpleListInsert
_ANSI_ARGS_((
Tix_LinkList
* lPtr
, char * itemPtr
,
Tix_ListIterator
* liPtr
));
EXTERN
void Tix_SimpleListIteratorInit
_ANSI_ARGS_((
Tix_ListIterator
* liPtr
));
#define Tix_SimpleListDone(liPtr) ((liPtr)->curr == NULL)
/*----------------------------------------------------------------------
*----------------------------------------------------------------------
#define TIX_RELIEF_RAISED 1
#define TIX_RELIEF_FLAT 2
#define TIX_RELIEF_SUNKEN 4
#define TIX_RELIEF_GROOVE 8
#define TIX_RELIEF_RIDGE 16
#define TIX_RELIEF_SOLID 32
EXTERN Tk_CustomOption tixConfigItemType
;
EXTERN Tk_CustomOption tixConfigItemStyle
;
EXTERN Tk_CustomOption tixConfigRelief
;
* C functions exported by Tix
EXTERN
int Tix_ArgcError
_ANSI_ARGS_((Tcl_Interp
*interp
,
int argc
, Tcl_Obj
**objv
, int prefixCount
,
EXTERN
void Tix_CreateCommands
_ANSI_ARGS_((
Tcl_Interp
*interp
, Tix_TclCmd
*commands
,
Tcl_CmdDeleteProc
*deleteProc
));
EXTERN Tk_Window Tix_CreateSubWindow
_ANSI_ARGS_((
Tcl_Interp
* interp
, Tk_Window tkwin
,
EXTERN
int Tix_DefinePixmap
_ANSI_ARGS_((
Tcl_Interp
* interp
, Tk_Uid name
, char **data
));
EXTERN
void Tix_DrawAnchorLines
_ANSI_ARGS_((
Display
*display
, Drawable drawable
,
GC gc
, int x
, int y
, int w
, int h
));
EXTERN
int Tix_EvalArgv
_ANSI_ARGS_((
Tcl_Interp
* interp
, int argc
, Tcl_Obj
**objv
));
EXTERN
int Tix_ExistMethod
_ANSI_ARGS_((Tcl_Interp
*interp
,
char *context
, char *method
));
EXTERN
void Tix_Exit
_ANSI_ARGS_((Tcl_Interp
* interp
, int code
));
EXTERN Pixmap Tix_GetRenderBuffer
_ANSI_ARGS_((Display
*display
,
Drawable d
, int width
, int height
, int depth
));
* The TCL_VARARGS macro is only defined in Tcl 7.5 or later
EXTERN
int Tix_GlobalVarEval
_ANSI_ARGS_(
TCL_VARARGS(Tcl_Interp
*,interp
));
EXTERN
int Tix_GlobalVarEval
_ANSI_ARGS_(
VARARGS(Tcl_Interp
*interp
));
EXTERN
int Tix_HandleSubCmds
_ANSI_ARGS_((
Tix_SubCmdInfo
* subCmdInfo
,
ClientData clientData
, Tcl_Interp
*interp
,
int argc
, Tcl_Obj
**objv
));
EXTERN
int Tix_Init
_ANSI_ARGS_((Tcl_Interp
*interp
));
EXTERN
int Tix_LoadTclLibrary
_ANSI_ARGS_((
Tcl_Interp
*interp
, char *envName
,
char *tclName
, char *initFile
,
char *defDir
, char * appName
));
EXTERN
void Tix_OpenStdin
_ANSI_ARGS_((Tcl_Interp
*interp
));
EXTERN
void Tix_SetArgv
_ANSI_ARGS_((Tcl_Interp
*interp
,
int argc
, Tcl_Obj
**objv
));
EXTERN
void Tix_SetRcFileName
_ANSI_ARGS_((
Tcl_Interp
* interp
, char * rcFileName
));
EXTERN
char * TixGetStringFromObj
_ANSI_ARGS_((
char *objPtr
,int *lengthPtr
));
* Entry points for Tk_CONFIG_CUSTOM stubs to call
EXTERN
int TixDItemParseProc
_ANSI_ARGS_((ClientData clientData
,
Tcl_Interp
*interp
, Tk_Window tkwin
, Arg value
,
char *widRec
, int offset
));
EXTERN Arg TixDItemPrintProc
_ANSI_ARGS_((
ClientData clientData
, Tk_Window tkwin
, char *widRec
,
int offset
, Tcl_FreeProc
**freeProcPtr
));
EXTERN
int TixDItemStyleParseProc
_ANSI_ARGS_((ClientData clientData
,
Tcl_Interp
*interp
, Tk_Window tkwin
, Arg value
,
char *widRec
, int offset
));
EXTERN Arg TixDItemStylePrintProc
_ANSI_ARGS_((
ClientData clientData
, Tk_Window tkwin
, char *widRec
,
int offset
, Tcl_FreeProc
**freeProcPtr
));
* Commands exported by Tix
extern TIX_DECLARE_CMD(Tix_CallMethodCmd
);
extern TIX_DECLARE_CMD(Tix_ChainMethodCmd
);
extern TIX_DECLARE_CMD(Tix_ClassCmd
);
extern TIX_DECLARE_CMD(Tix_DoWhenIdleCmd
);
extern TIX_DECLARE_CMD(Tix_DoWhenMappedCmd
);
extern TIX_DECLARE_CMD(Tix_FalseCmd
);
extern TIX_DECLARE_CMD(Tix_FileCmd
);
extern TIX_DECLARE_CMD(Tix_FlushXCmd
);
extern TIX_DECLARE_CMD(Tix_FormCmd
);
extern TIX_DECLARE_CMD(Tix_GridCmd
);
extern TIX_DECLARE_CMD(Tix_GeometryRequestCmd
);
extern TIX_DECLARE_CMD(Tix_Get3DBorderCmd
);
extern TIX_DECLARE_CMD(Tix_GetBooleanCmd
);
extern TIX_DECLARE_CMD(Tix_GetIntCmd
);
extern TIX_DECLARE_CMD(Tix_GetMethodCmd
);
extern TIX_DECLARE_CMD(Tix_HListCmd
);
extern TIX_DECLARE_CMD(Tix_HandleOptionsCmd
);
extern TIX_DECLARE_CMD(Tix_InputOnlyCmd
);
extern TIX_DECLARE_CMD(Tix_ItemStyleCmd
);
extern TIX_DECLARE_CMD(Tix_ManageGeometryCmd
);
extern TIX_DECLARE_CMD(Tix_MapWindowCmd
);
extern TIX_DECLARE_CMD(Tix_MoveResizeWindowCmd
);
extern TIX_DECLARE_CMD(Tix_NoteBookFrameCmd
);
extern TIX_DECLARE_CMD(Tix_RaiseWindowCmd
);
extern TIX_DECLARE_CMD(Tix_ShellInputCmd
);
extern TIX_DECLARE_CMD(Tix_StringSubCmd
);
extern TIX_DECLARE_CMD(Tix_StrEqCmd
);
extern TIX_DECLARE_CMD(Tix_TListCmd
);
extern TIX_DECLARE_CMD(Tix_TmpLineCmd
);
extern TIX_DECLARE_CMD(Tix_TrueCmd
);
extern TIX_DECLARE_CMD(Tix_UnmapWindowCmd
);
extern TIX_DECLARE_CMD(Tix_MwmCmd
);
extern TIX_DECLARE_CMD(Tix_CreateWidgetCmd
);
#define SET_RECORD(interp, record, var, value) \
Tcl_SetVar2(interp, record, var, value, TCL_GLOBAL_ONLY)
#define GET_RECORD(interp, record, var) \
Tcl_GetVar2(interp, record, var, TCL_GLOBAL_ONLY)
#define TIX_HASHKEY(k) ((sizeof(k)>sizeof(int))?((char*)&(k)):((char*)(k)))
/*----------------------------------------------------------------------
*---------------------------------------------------------------------- */
#define strdup DoNotUse_strdup
EXTERN
char * tixStrDup
_ANSI_ARGS_((CONST
char * s
));
/* This is the way win/tkWinPort.h in tk8.0.5 defines it */
#define strcasecmp stricmp