/* * tkInt.h (CTk) -- * * Declarations for things used internally by the Tk * procedures but not exported outside the module. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994 Sun Microsystems, Inc. * Copyright (c) 1994-1995 Cleveland Clinic Foundation * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * @(#) $Header: /usrs/andrewm/work/RCS/ctk.shar,v 1.50 1996/01/15 14:47:16 andrewm Exp andrewm $ */ #ifndef _TKINT #define _TKINT #ifndef _TK #include "tk.h" #endif #include /* * One of the following structures is maintained for each display * containing a window managed by Tk: */ struct TkDisplay { /* * Maintained by ctkDisplay.c */ char *name; /* Name of display device. Malloc-ed. */ char *type; /* Device type. Malloc-ed. */ ClientData display; /* Curses's info about display. */ Tcl_Channel chan; /* Input channel for the device */ int fd; /* Input file descriptor for device. */ FILE *inPtr; /* Input file pointer for device. */ TkWindow *cursorPtr; /* Window to display cursor in. */ int cursorX, cursorY; /* Position in `cursWinPtr' to display * cursor. */ /* * Maintained by tkWindow.c */ int numWindows; /* Windows currently existing in display * (including root). */ TkWindow *rootPtr; /* Root window of display. */ TkWindow *focusPtr; /* Window that has the keyboard focus. */ struct TkDisplay *nextPtr; /* Next in list of all displays. */ }; /* * One of the following structures exists for each event handler * created by calling Tk_CreateEventHandler. This information * is used by tkEvent.c only. */ struct TkEventHandler { unsigned long mask; /* Events for which to invoke * proc. */ Tk_EventProc *proc; /* Procedure to invoke when an event * in mask occurs. */ ClientData clientData; /* Argument to pass to proc. */ struct TkEventHandler *nextPtr; /* Next in list of handlers * associated with window (NULL means * end of list). */ }; /* * Tk keeps one of the following data structures for each main * window (created by a call to Tk_CreateMainWindow). It stores * information that is shared by all of the windows associated * with a particular main window. */ struct TkMainInfo { int refCount; /* Number of windows whose "mainPtr" fields * point here. When this becomes zero, can * free up the structure (the reference * count is zero because windows can get * deleted in almost any order; the main * window isn't necessarily the last one * deleted). */ struct TkWindow *winPtr; /* Pointer to main window. */ Tcl_Interp *interp; /* Interpreter associated with application. */ Tcl_HashTable nameTable; /* Hash table mapping path names to TkWindow * structs for all windows related to this * main window. Managed by tkWindow.c. */ Tk_BindingTable bindingTable; /* Used in conjunction with "bind" command * to bind events to Tcl commands. */ TkDisplay *curDispPtr; /* Display for last binding command invoked * in this application; used only by * tkBind.c. */ int bindingDepth; /* Number of active instances of Tk_BindEvent * in this application. Used only by * tkBind.c. */ struct ElArray *optionRootPtr; /* Top level of option hierarchy for this * main window. NULL means uninitialized. * Managed by tkOption.c. */ struct TkMainInfo *nextPtr; /* Next in list of all main windows managed by * this process. */ }; /* * Pointer to first entry in list of all displays currently known. */ extern TkDisplay *tkDisplayList; /* * Flags passed to TkMeasureChars: */ #define TK_WHOLE_WORDS 1 #define TK_AT_LEAST_ONE 2 #define TK_PARTIAL_OK 4 #define TK_NEWLINES_NOT_SPECIAL 8 #define TK_IGNORE_TABS 16 /* * Location of library directory containing Tk scripts. This value * is put in the $tkLibrary variable for each application. */ #ifndef CTK_LIBRARY #define CTK_LIBRARY "/usr/local/lib/ctk" #endif /* * Special flag to pass to Tk_CreateFileHandler to indicate that * the file descriptor is actually for a display, not a file, and * should be treated specially. Make sure that this value doesn't * conflict with TK_READABLE, TK_WRITABLE, or TK_EXCEPTION from tk.h. */ #define TK_IS_DISPLAY 32 /* * The macro below is used to modify a "char" value (e.g. by casting * it to an unsigned character) so that it can be used safely with * macros such as isspace. */ #define UCHAR(c) ((unsigned char) (c)) /* * Miscellaneous variables shared among Tk modules but not exported * to the outside world: */ extern Tk_Uid tkActiveUid; extern void (*tkDelayedEventProc) _ANSI_ARGS_((void)); extern Tk_Uid tkDisabledUid; extern TkMainInfo *tkMainWindowList; extern Tk_Uid tkNormalUid; /* * Internal procedures shared among Tk modules but not exported * to the outside world: */ extern void TkBindEventProc _ANSI_ARGS_((TkWindow *winPtr, XEvent *eventPtr)); extern void TkComputeTextGeometry _ANSI_ARGS_(( char *string, int numChars, int wrapLength, int *widthPtr, int *heightPtr)); extern int TkCopyAndGlobalEval _ANSI_ARGS_((Tcl_Interp *interp, char *script)); extern Time TkCurrentTime _ANSI_ARGS_((void)); extern int TkDeadAppCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int argc, char **argv)); extern void TkDisplayChars _ANSI_ARGS_((TkWindow *winPtr, Ctk_Style style, char *string, int numChars, int x, int y, int tabOrigin, int flags)); extern void TkDisplayText _ANSI_ARGS_((TkWindow *winPtr, Ctk_Style style, char *string, int numChars, int x, int y, int length, Tk_Justify justify, int underline)); extern void TkEventCleanupProc _ANSI_ARGS_(( ClientData clientData, Tcl_Interp *interp)); extern void TkEventDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); extern void TkFocusDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); extern int TkFocusFilterEvent _ANSI_ARGS_((TkWindow *winPtr, XEvent *eventPtr)); extern void TkFreeBindingTags _ANSI_ARGS_((TkWindow *winPtr)); extern TkWindow * TkGetFocus _ANSI_ARGS_((TkWindow *winPtr)); extern int TkGetInterpNames _ANSI_ARGS_((Tcl_Interp *interp, Tk_Window tkwin)); extern char * TkInitFrame _ANSI_ARGS_((Tcl_Interp *interp, Tk_Window tkwin, int toplevel, int argc, char *argv[])); extern int TkMeasureChars _ANSI_ARGS_(( char *source, int maxChars, int startX, int maxX, int tabOrigin, int flags, int *nextXPtr)); extern void TkOptionClassChanged _ANSI_ARGS_((TkWindow *winPtr)); extern void TkOptionDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); extern void TkQueueEvent _ANSI_ARGS_((TkDisplay *dispPtr, XEvent *eventPtr)); extern void TkDeleteMain _ANSI_ARGS_((TkMainInfo *mainPtr)); #define CtkIsDisplayed(tkwin) (((tkwin)->flags)& CTK_DISPLAYED) typedef void (CtkSpanProc) _ANSI_ARGS_((int left, int right, int y, ClientData data)); #define CtkSpanIsEmpty(left, right) ((left) >= (right)) #define CtkCopyRect(dr,sr) (memcpy((dr), (sr), sizeof(Ctk_Rect))) #define CtkMoveRect(rect,x,y) \ ((rect)->left += (x), (rect)->top += (y), \ (rect)->right += (x), (rect)->bottom += (y)) #define CtkSetRect(rect,l,t,r,b) \ ((rect)->left = (l), (rect)->top = (t), \ (rect)->right = (r), (rect)->bottom = (b)) EXTERN int CtkDisplayInit _ANSI_ARGS_((Tcl_Interp *interp, TkDisplay *dispPtr, char *displayName)); EXTERN void CtkDisplayEnd _ANSI_ARGS_((TkDisplay *dispPtr)); EXTERN void CtkDisplayBell _ANSI_ARGS_((TkDisplay *dispPtr)); EXTERN void CtkSetFocus _ANSI_ARGS_((TkWindow *winPtr)); EXTERN void Ctk_Forget _ANSI_ARGS_((Tk_Window tkwin)); EXTERN void CtkFillRegion _ANSI_ARGS_((TkDisplay *dispPtr, CtkRegion *rgn_ptr, Ctk_Style style, int ch)); EXTERN void CtkIntersectSpans _ANSI_ARGS_((int *left_ptr, int *right_ptr, int left2, int right2)); EXTERN void CtkIntersectRects _ANSI_ARGS_((Ctk_Rect *r1_ptr, CONST Ctk_Rect *r2_ptr)); EXTERN CtkRegion * CtkCreateRegion _ANSI_ARGS_((Ctk_Rect *rect)); EXTERN void CtkDestroyRegion _ANSI_ARGS_((CtkRegion *rgn)); EXTERN void CtkForEachIntersectingSpan _ANSI_ARGS_(( CtkSpanProc *func, ClientData func_data, int left, int right, int y, CtkRegion *rgn)); EXTERN void CtkForEachSpan _ANSI_ARGS_((CtkSpanProc *func, ClientData func_data, CtkRegion *rgn)); EXTERN CtkRegion * CtkRegionMinusRect _ANSI_ARGS_((CtkRegion *rgn_id, Ctk_Rect *rect, int want_inter)); EXTERN void CtkUnionRegions _ANSI_ARGS_((CtkRegion *rgn1, CtkRegion *rgn2)); EXTERN void CtkRegionGetRect _ANSI_ARGS_((CtkRegion *rgn, Ctk_Rect *rect_ptr)); EXTERN int CtkPointInRegion _ANSI_ARGS_((int x, int y, CtkRegion *rgn)); #endif /* _TKINT */