diff options
Diffstat (limited to 'graphics/tclblt/patches/usetkint.patch')
-rw-r--r-- | graphics/tclblt/patches/usetkint.patch | 1409 |
1 files changed, 1409 insertions, 0 deletions
diff --git a/graphics/tclblt/patches/usetkint.patch b/graphics/tclblt/patches/usetkint.patch new file mode 100644 index 0000000000000..deb67e4461b12 --- /dev/null +++ b/graphics/tclblt/patches/usetkint.patch @@ -0,0 +1,1409 @@ +Description: Patch removes internal definitions of the main Tk structures. + Since they have been changed since Tcl/Tk 8.4 it's much better to + include tkInt.h and other few headers. They are internal Tk headers, + so the BLT library built with Tcl/Tk 8.6 won't work with Tcl/Tk 8.5. +Author: FreeBSD BLT port maintainers +Last-Modified: Fri, 04 Jul 2014 09:13:24 +0400 + +--- a/generic/bltTkInt.h ++++ b/generic/bltTkInt.h +@@ -27,214 +27,8 @@ + #ifndef _BLT_TKINT_H + #define _BLT_TKINT_H + +-typedef struct { +- Tk_Uid family; /* Font family. The most important field. */ +- int pointsize; /* Pointsize of font, 0 for default size, or +- * negative number meaning pixel size. */ +- int weight; /* Weight flag; see below for def'n. */ +- int slant; /* Slant flag; see below for def'n. */ +- int underline; /* Non-zero for underline font. */ +- int overstrike; /* Non-zero for overstrike font. */ +-} TkFontAttributes; +- +-typedef struct { +- int ascent; /* From baseline to top of font. */ +- int descent; /* From baseline to bottom of font. */ +- int maxWidth; /* Width of widest character in font. */ +- int fixed; /* Non-zero if this is a fixed-width font, +- * 0 otherwise. */ +-} TkFontMetrics; +- +- +-typedef struct TkFontStruct { +- /* +- * Fields used and maintained exclusively by generic code. +- */ +-#if (TK_VERSION_NUMBER >= _VERSION(8,1,0)) +- int resourceRefCount; /* Number of active uses of this font (each +- * active use corresponds to a call to +- * Tk_AllocFontFromTable or Tk_GetFont). +- * If this count is 0, then this TkFont +- * structure is no longer valid and it isn't +- * present in a hash table: it is being +- * kept around only because there are objects +- * referring to it. The structure is freed +- * when resourceRefCount and objRefCount +- * are both 0. */ +- int objRefCount; /* The number of Tcl objects that reference +- * this structure. */ +-#else +- int refCount; /* Number of users of the TkFont. */ +-#endif +- Tcl_HashEntry *cacheHashPtr;/* Entry in font cache for this structure, +- * used when deleting it. */ +- Tcl_HashEntry *namedHashPtr;/* Pointer to hash table entry that +- * corresponds to the named font that the +- * tkfont was based on, or NULL if the tkfont +- * was not based on a named font. */ +-#if (TK_VERSION_NUMBER >= _VERSION(8,1,0)) +- Screen *screen; /* The screen where this font is valid. */ +-#endif /* TK_VERSION_NUMBER >= 8.1.0 */ +- int tabWidth; /* Width of tabs in this font (pixels). */ +- int underlinePos; /* Offset from baseline to origin of +- * underline bar (used for drawing underlines +- * on a non-underlined font). */ +- int underlineHeight; /* Height of underline bar (used for drawing +- * underlines on a non-underlined font). */ +- +- /* +- * Fields in the generic font structure that are filled in by +- * platform-specific code. +- */ +- +- Font fid; /* For backwards compatibility with XGCValues +- * structures. Remove when TkGCValues is +- * implemented. */ +- TkFontAttributes fa; /* Actual font attributes obtained when the +- * the font was created, as opposed to the +- * desired attributes passed in to +- * TkpGetFontFromAttributes(). The desired +- * metrics can be determined from the string +- * that was used to create this font. */ +- TkFontMetrics fm; /* Font metrics determined when font was +- * created. */ +-#if (TK_VERSION_NUMBER >= _VERSION(8,1,0)) +- struct TkFontStruct *nextPtr; /* Points to the next TkFont structure with +- * the same name. All fonts with the +- * same name (but different displays) are +- * chained together off a single entry in +- * a hash table. */ +-#endif /* TK_VERSION_NUMBER >= 8.1.0 */ +-} TkFont; +- +-/* +- * This structure is used by the Mac and Window porting layers as +- * the internal representation of a clip_mask in a GC. +- */ +-typedef struct TkRegionStruct *TkRegion; +- +-typedef struct { +- int type; /* One of TKP_CLIP_PIXMAP or TKP_CLIP_REGION */ +- union { +- Pixmap pixmap; +- TkRegion region; +- } value; +-} TkpClipMask; +- +-#define TKP_CLIP_PIXMAP 0 +-#define TKP_CLIP_REGION 1 +- +-#ifdef WIN32 +-/* +- * The TkWinDrawable is the internal implementation of an X Drawable (either +- * a Window or a Pixmap). The following constants define the valid Drawable +- * types. +- */ +- +-#define TWD_BITMAP 1 +-#define TWD_WINDOW 2 +-#define TWD_WINDC 3 +- +-typedef struct TkWindowStruct TkWindow; +- +-typedef struct { +- int type; +- HWND handle; +- TkWindow *winPtr; +-} TkWinWindow; +- +-typedef struct { +- int type; +- HBITMAP handle; +- Colormap colormap; +- int depth; +-} TkWinBitmap; +- +-typedef struct { +- int type; +- HDC hdc; +-} TkWinDC; +- +-typedef union { +- int type; +- TkWinWindow window; +- TkWinBitmap bitmap; +- TkWinDC winDC; +-} TkWinDrawable; +- +-/* +- * The TkWinDCState is used to save the state of a device context +- * so that it can be restored later. +- */ +- +-typedef struct { +- HPALETTE palette; +- int bkmode; /* This field was added in Tk +- * 8.3.1. Be careful that you don't +- * use this structure in a context +- * where its size is important. */ +-} TkWinDCState; +- +-extern HDC TkWinGetDrawableDC(Display *display, Drawable drawable, +- TkWinDCState * state); +-extern HDC TkWinReleaseDrawableDC(Drawable drawable, HDC dc, +- TkWinDCState * state); +- +-extern HWND Tk_GetHWND _ANSI_ARGS_((Window window)); +- +-extern HINSTANCE Tk_GetHINSTANCE _ANSI_ARGS_((void)); +- +-extern Window Tk_AttachHWND _ANSI_ARGS_((Tk_Window tkwin, HWND hWnd)); +- +-#endif /* WIN32 */ +- +-/* +- * The Border structure used internally by the Tk_3D* routines. +- * The following is a copy of it from tk3d.c. +- */ +- +-typedef struct TkBorderStruct { +- Screen *screen; /* Screen on which the border will be used. */ +- Visual *visual; /* Visual for all windows and pixmaps using +- * the border. */ +- int depth; /* Number of bits per pixel of drawables where +- * the border will be used. */ +- Colormap colormap; /* Colormap out of which pixels are +- * allocated. */ +- int refCount; /* Number of different users of +- * this border. */ +-#if (TK_VERSION_NUMBER >= _VERSION(8,1,0)) +- int objRefCount; /* The number of Tcl objects that reference +- * this structure. */ +-#endif /* TK_VERSION_NUMBER >= 8.1.0 */ +- XColor *bgColor; /* Background color (intensity between +- * lightColorPtr and darkColorPtr). */ +- XColor *darkColor; /* Color for darker areas (must free when +- * deleting structure). NULL means shadows +- * haven't been allocated yet.*/ +- XColor *lightColor; /* Color used for lighter areas of border +- * (must free this when deleting structure). +- * NULL means shadows haven't been allocated +- * yet. */ +- Pixmap shadow; /* Stipple pattern to use for drawing +- * shadows areas. Used for displays with +- * <= 64 colors or where colormap has filled +- * up. */ +- GC bgGC; /* Used (if necessary) to draw areas in +- * the background color. */ +- GC darkGC; /* Used to draw darker parts of the +- * border. None means the shadow colors +- * haven't been allocated yet.*/ +- GC lightGC; /* Used to draw lighter parts of +- * the border. None means the shadow colors +- * haven't been allocated yet. */ +- Tcl_HashEntry *hashPtr; /* Entry in borderTable (needed in +- * order to delete structure). */ +- struct TkBorderStruct *nextPtr; /* Points to the next TkBorder structure with +- * the same color name. Borders with the +- * same name but different screens or +- * colormaps are chained together off a +- * single entry in borderTable. */ +-} TkBorder; ++#include <tkInt.h> ++#include <tk3d.h> ++#include <tkFont.h> + + #endif /* BLT_TKINT_H */ +--- a/generic/bltWindow.c ++++ b/generic/bltWindow.c +@@ -33,25 +33,7 @@ + #include <X11/Xproto.h> + #endif + +-typedef struct TkIdStackStruct TkIdStack; +-typedef struct TkErrorHandlerStruct TkErrorHandler; +-typedef struct TkSelectionInfoStruct TkSelectionInfo; +-typedef struct TkClipboardTargetStruct TkClipboardTarget; +- +-#ifndef WIN32 +-typedef struct TkWindowStruct TkWindow; +-#endif +-typedef struct TkWindowEventStruct TkWindowEvent; +-typedef struct TkMainInfoStruct TkMainInfo; +-typedef struct TkEventHandlerStruct TkEventHandler; +-typedef struct TkSelHandlerStruct TkSelHandler; +-typedef struct TkWinInfoStruct TkWinInfo; +-typedef struct TkClassProcsStruct TkClassProcs; +-typedef struct TkWindowPrivateStruct TkWindowPrivate; +-typedef struct TkGrabEventStruct TkGrabEvent; +-typedef struct TkColormapStruct TkColormap; +-typedef struct TkStressedCmapStruct TkStressedCmap; +-typedef struct TkWmInfoStruct TkWmInfo; ++#include <tkInt.h> + + #ifdef XNQueryInputStyle + #define TK_USE_INPUT_METHODS +@@ -70,766 +52,6 @@ + #define TK_REPARENTED 0 + #endif + +-#if (TK_VERSION_NUMBER >= _VERSION(8,1,0)) +- +-typedef struct TkCaret { +- struct TkWindow *winPtr; /* the window on which we requested caret +- * placement */ +- int x; /* relative x coord of the caret */ +- int y; /* relative y coord of the caret */ +- int height; /* specified height of the window */ +-} TkCaret; +- +-/* +- * One of the following structures is maintained for each display +- * containing a window managed by Tk. In part, the structure is +- * used to store thread-specific data, since each thread will have +- * its own TkDisplay structure. +- */ +- +-typedef struct TkDisplayStruct { +- Display *display; /* Xlib's info about display. */ +- struct TkDisplayStruct *nextPtr; /* Next in list of all displays. */ +- char *name; /* Name of display (with any screen +- * identifier removed). Malloc-ed. */ +- Time lastEventTime; /* Time of last event received for this +- * display. */ +- +- /* +- * Information used primarily by tk3d.c: +- */ +- +- int borderInit; /* 0 means borderTable needs initializing. */ +- Tcl_HashTable borderTable; /* Maps from color name to TkBorder +- * structure. */ +- +- /* +- * Information used by tkAtom.c only: +- */ +- +- int atomInit; /* 0 means stuff below hasn't been +- * initialized yet. */ +- Tcl_HashTable nameTable; /* Maps from names to Atom's. */ +- Tcl_HashTable atomTable; /* Maps from Atom's back to names. */ +- +- /* +- * Information used primarily by tkBind.c: +- */ +- +- int bindInfoStale; /* Non-zero means the variables in this +- * part of the structure are potentially +- * incorrect and should be recomputed. */ +- unsigned int modeModMask; /* Has one bit set to indicate the modifier +- * corresponding to "mode shift". If no +- * such modifier, than this is zero. */ +- unsigned int metaModMask; /* Has one bit set to indicate the modifier +- * corresponding to the "Meta" key. If no +- * such modifier, then this is zero. */ +- unsigned int altModMask; /* Has one bit set to indicate the modifier +- * corresponding to the "Meta" key. If no +- * such modifier, then this is zero. */ +- enum { +- LU_IGNORE, LU_CAPS, LU_SHIFT +- } lockUsage; /* Indicates how to interpret lock modifier. */ +- int numModKeyCodes; /* Number of entries in modKeyCodes array +- * below. */ +- KeyCode *modKeyCodes; /* Pointer to an array giving keycodes for +- * all of the keys that have modifiers +- * associated with them. Malloc'ed, but +- * may be NULL. */ +- +- /* +- * Information used by tkBitmap.c only: +- */ +- +- int bitmapInit; /* 0 means tables above need initializing. */ +- int bitmapAutoNumber; /* Used to number bitmaps. */ +- Tcl_HashTable bitmapNameTable; +- /* Maps from name of bitmap to the first +- * TkBitmap record for that name. */ +- Tcl_HashTable bitmapIdTable;/* Maps from bitmap id to the TkBitmap +- * structure for the bitmap. */ +- Tcl_HashTable bitmapDataTable; +- /* Used by Tk_GetBitmapFromData to map from +- * a collection of in-core data about a +- * bitmap to a reference giving an auto- +- * matically-generated name for the bitmap. */ +- +- /* +- * Information used by tkCanvas.c only: +- */ +- +- int numIdSearches; +- int numSlowSearches; +- +- /* +- * Used by tkColor.c only: +- */ +- +- int colorInit; /* 0 means color module needs initializing. */ +- TkStressedCmap *stressPtr; /* First in list of colormaps that have +- * filled up, so we have to pick an +- * approximate color. */ +- Tcl_HashTable colorNameTable; +- /* Maps from color name to TkColor structure +- * for that color. */ +- Tcl_HashTable colorValueTable; +- /* Maps from integer RGB values to TkColor +- * structures. */ +- +- /* +- * Used by tkCursor.c only: +- */ +- +- int cursorInit; /* 0 means cursor module need initializing. */ +- Tcl_HashTable cursorNameTable; +- /* Maps from a string name to a cursor to the +- * TkCursor record for the cursor. */ +- Tcl_HashTable cursorDataTable; +- /* Maps from a collection of in-core data +- * about a cursor to a TkCursor structure. */ +- Tcl_HashTable cursorIdTable; +- /* Maps from a cursor id to the TkCursor +- * structure for the cursor. */ +- char cursorString[20]; /* Used to store a cursor id string. */ +- Font cursorFont; /* Font to use for standard cursors. +- * None means font not loaded yet. */ +- +- /* +- * Information used by tkError.c only: +- */ +- +- struct TkErrorHandler *errorPtr; +- /* First in list of error handlers +- * for this display. NULL means +- * no handlers exist at present. */ +- int deleteCount; /* Counts # of handlers deleted since +- * last time inactive handlers were +- * garbage-collected. When this number +- * gets big, handlers get cleaned up. */ +- +- /* +- * Used by tkEvent.c only: +- */ +- +- struct TkWindowEvent *delayedMotionPtr; +- /* Points to a malloc-ed motion event +- * whose processing has been delayed in +- * the hopes that another motion event +- * will come along right away and we can +- * merge the two of them together. NULL +- * means that there is no delayed motion +- * event. */ +- +- /* +- * Information used by tkFocus.c only: +- */ +- +- int focusDebug; /* 1 means collect focus debugging +- * statistics. */ +- struct TkWindow *implicitWinPtr; +- /* If the focus arrived at a toplevel window +- * implicitly via an Enter event (rather +- * than via a FocusIn event), this points +- * to the toplevel window. Otherwise it is +- * NULL. */ +- struct TkWindow *focusPtr; /* Points to the window on this display that +- * should be receiving keyboard events. When +- * multiple applications on the display have +- * the focus, this will refer to the +- * innermost window in the innermost +- * application. This information isn't used +- * under Unix or Windows, but it's needed on +- * the Macintosh. */ +- +- /* +- * Information used by tkGC.c only: +- */ +- +- Tcl_HashTable gcValueTable; /* Maps from a GC's values to a TkGC structure +- * describing a GC with those values. */ +- Tcl_HashTable gcIdTable; /* Maps from a GC to a TkGC. */ +- int gcInit; /* 0 means the tables below need +- * initializing. */ +- +- /* +- * Information used by tkGeometry.c only: +- */ +- +- Tcl_HashTable maintainHashTable; +- /* Hash table that maps from a master's +- * Tk_Window token to a list of slaves +- * managed by that master. */ +- int geomInit; +- +- /* +- * Information used by tkGet.c only: +- */ +- +- Tcl_HashTable uidTable; /* Stores all Tk_Uids used in a thread. */ +- int uidInit; /* 0 means uidTable needs initializing. */ +- +- /* +- * Information used by tkGrab.c only: +- */ +- +- struct TkWindow *grabWinPtr; +- /* Window in which the pointer is currently +- * grabbed, or NULL if none. */ +- struct TkWindow *eventualGrabWinPtr; +- /* Value that grabWinPtr will have once the +- * grab event queue (below) has been +- * completely emptied. */ +- struct TkWindow *buttonWinPtr; +- /* Window in which first mouse button was +- * pressed while grab was in effect, or NULL +- * if no such press in effect. */ +- struct TkWindow *serverWinPtr; +- /* If no application contains the pointer then +- * this is NULL. Otherwise it contains the +- * last window for which we've gotten an +- * Enter or Leave event from the server (i.e. +- * the last window known to have contained +- * the pointer). Doesn't reflect events +- * that were synthesized in tkGrab.c. */ +- TkGrabEvent *firstGrabEventPtr; +- /* First in list of enter/leave events +- * synthesized by grab code. These events +- * must be processed in order before any other +- * events are processed. NULL means no such +- * events. */ +- TkGrabEvent *lastGrabEventPtr; +- /* Last in list of synthesized events, or NULL +- * if list is empty. */ +- int grabFlags; /* Miscellaneous flag values. See definitions +- * in tkGrab.c. */ +- +- /* +- * Information used by tkGrid.c only: +- */ +- +- int gridInit; /* 0 means table below needs initializing. */ +- Tcl_HashTable gridHashTable;/* Maps from Tk_Window tokens to +- * corresponding Grid structures. */ +- +- /* +- * Information used by tkImage.c only: +- */ +- +- int imageId; /* Value used to number image ids. */ +- +- /* +- * Information used by tkMacWinMenu.c only: +- */ +- +- int postCommandGeneration; +- +- /* +- * Information used by tkOption.c only. +- */ +- +- +- +- /* +- * Information used by tkPack.c only. +- */ +- +- int packInit; /* 0 means table below needs initializing. */ +- Tcl_HashTable packerHashTable; +- /* Maps from Tk_Window tokens to +- * corresponding Packer structures. */ +- +- +- /* +- * Information used by tkPlace.c only. +- */ +- +- int placeInit; /* 0 means tables below need initializing. */ +- Tcl_HashTable masterTable; /* Maps from Tk_Window toke to the Master +- * structure for the window, if it exists. */ +- Tcl_HashTable slaveTable; /* Maps from Tk_Window toke to the Slave +- * structure for the window, if it exists. */ +- +- /* +- * Information used by tkSelect.c and tkClipboard.c only: +- */ +- +- +- struct TkSelectionInfo *selectionInfoPtr; +- /* First in list of selection information +- * records. Each entry contains information +- * about the current owner of a particular +- * selection on this display. */ +- Atom multipleAtom; /* Atom for MULTIPLE. None means +- * selection stuff isn't initialized. */ +- Atom incrAtom; /* Atom for INCR. */ +- Atom targetsAtom; /* Atom for TARGETS. */ +- Atom timestampAtom; /* Atom for TIMESTAMP. */ +- Atom textAtom; /* Atom for TEXT. */ +- Atom compoundTextAtom; /* Atom for COMPOUND_TEXT. */ +- Atom applicationAtom; /* Atom for TK_APPLICATION. */ +- Atom windowAtom; /* Atom for TK_WINDOW. */ +- Atom clipboardAtom; /* Atom for CLIPBOARD. */ +-#if (TK_VERSION_NUMBER >= _VERSION(8,4,0)) +- Atom utf8Atom; +-#endif +- Tk_Window clipWindow; /* Window used for clipboard ownership and to +- * retrieve selections between processes. NULL +- * means clipboard info hasn't been +- * initialized. */ +- int clipboardActive; /* 1 means we currently own the clipboard +- * selection, 0 means we don't. */ +- struct TkMainInfo *clipboardAppPtr; +- /* Last application that owned clipboard. */ +- struct TkClipboardTarget *clipTargetPtr; +- /* First in list of clipboard type information +- * records. Each entry contains information +- * about the buffers for a given selection +- * target. */ +- +- /* +- * Information used by tkSend.c only: +- */ +- +- Tk_Window commTkwin; /* Window used for communication +- * between interpreters during "send" +- * commands. NULL means send info hasn't +- * been initialized yet. */ +- Atom commProperty; /* X's name for comm property. */ +- Atom registryProperty; /* X's name for property containing +- * registry of interpreter names. */ +- Atom appNameProperty; /* X's name for property used to hold the +- * application name on each comm window. */ +- +- /* +- * Information used by tkXId.c only: +- */ +- +- struct TkIdStack *idStackPtr; +- /* First in list of chunks of free resource +- * identifiers, or NULL if there are no free +- * resources. */ +- XID(*defaultAllocProc) _ANSI_ARGS_((Display *display)); +- /* Default resource allocator for display. */ +- struct TkIdStack *windowStackPtr; +- /* First in list of chunks of window +- * identifers that can't be reused right +- * now. */ +-#if (TK_VERSION_NUMBER < _VERSION(8,4,0)) +- int idCleanupScheduled; /* 1 means a call to WindowIdCleanup has +- * already been scheduled, 0 means it +- * hasn't. */ +-#else +- Tcl_TimerToken idCleanupScheduled; +- /* If set, it means a call to WindowIdCleanup +- * has already been scheduled, 0 means it +- * hasn't. */ +-#endif +- /* +- * Information used by tkUnixWm.c and tkWinWm.c only: +- */ +- +-#if (TK_VERSION_NUMBER < _VERSION(8,4,0)) +- int wmTracing; /* Used to enable or disable tracing in +- * this module. If tracing is enabled, +- * then information is printed on +- * standard output about interesting +- * interactions with the window manager. */ +-#endif +- struct TkWmInfo *firstWmPtr; /* Points to first top-level window. */ +- struct TkWmInfo *foregroundWmPtr; +- /* Points to the foreground window. */ +- +- /* +- * Information maintained by tkWindow.c for use later on by tkXId.c: +- */ +- +- +- int destroyCount; /* Number of Tk_DestroyWindow operations +- * in progress. */ +- unsigned long lastDestroyRequest; +- /* Id of most recent XDestroyWindow request; +- * can re-use ids in windowStackPtr when +- * server has seen this request and event +- * queue is empty. */ +- +- /* +- * Information used by tkVisual.c only: +- */ +- +- TkColormap *cmapPtr; /* First in list of all non-default colormaps +- * allocated for this display. */ +- +- /* +- * Miscellaneous information: +- */ +- +-#ifdef TK_USE_INPUT_METHODS +- XIM inputMethod; /* Input method for this display */ +- XIMStyle inputStyle; /* Input style selected for this display. */ +-#if (TK_VERSION_NUMBER >= _VERSION(8,4,0)) +-#if TK_XIM_SPOT +- XFontSet inputXfs; /* XFontSet cached for over-the-spot XIM. */ +-#endif /* TK_XIM_SPOT */ +-#endif /* TK_VERSION_NUMBER >= 8.4 */ +-#endif /* TK_USE_INPUT_METHODS */ +- Tcl_HashTable winTable; /* Maps from X window ids to TkWindow ptrs. */ +- int refCount; /* Reference count of how many Tk applications +- * are using this display. Used to clean up +- * the display when we no longer have any +- * Tk applications using it. +- */ +- /* +- * The following field were all added for Tk8.3 +- */ +- int mouseButtonState; /* current mouse button state for this +- * display */ +- Window mouseButtonWindow; /* Window the button state was set in, added +- * in Tk 8.4. */ +-#if (TK_VERSION_NUMBER < _VERSION(8,4,0)) +- int warpInProgress; +-#endif +- Window warpWindow; +- int warpX; +- int warpY; +-#if (TK_VERSION_NUMBER < _VERSION(8,4,0)) +- int useInputMethods; /* Whether to use input methods */ +-#else +- /* +- * The following field(s) were all added for Tk8.4 +- */ +-/* long deletionEpoch; * Incremented by window deletions */ +- unsigned int flags; /* Various flag values: these are all +- * defined in below. */ +- TkCaret caret; /* information about the caret for this +- * display. This is not a pointer. */ +- +- int iconDataSize; /* Size of default iconphoto image data. */ +- unsigned char *iconDataPtr; /* Default iconphoto image data, if set. */ +- +-#endif +-} TkDisplay; +- +-#else +- +-/* +- * One of the following structures is maintained for each display +- * containing a window managed by Tk: +- */ +-typedef struct TkDisplayStruct { +- Display *display; /* Xlib's info about display. */ +- struct TkDisplayStruct *nextPtr; /* Next in list of all displays. */ +- char *name; /* Name of display (with any screen +- * identifier removed). Malloc-ed. */ +- Time lastEventTime; /* Time of last event received for this +- * display. */ +- +- /* +- * Information used primarily by tkBind.c: +- */ +- +- int bindInfoStale; /* Non-zero means the variables in this +- * part of the structure are potentially +- * incorrect and should be recomputed. */ +- unsigned int modeModMask; /* Has one bit set to indicate the modifier +- * corresponding to "mode shift". If no +- * such modifier, than this is zero. */ +- unsigned int metaModMask; /* Has one bit set to indicate the modifier +- * corresponding to the "Meta" key. If no +- * such modifier, then this is zero. */ +- unsigned int altModMask; /* Has one bit set to indicate the modifier +- * corresponding to the "Meta" key. If no +- * such modifier, then this is zero. */ +- enum { +- LU_IGNORE, LU_CAPS, LU_SHIFT +- } lockUsage; +- /* Indicates how to interpret lock modifier. */ +- int numModKeyCodes; /* Number of entries in modKeyCodes array +- * below. */ +- KeyCode *modKeyCodes; /* Pointer to an array giving keycodes for +- * all of the keys that have modifiers +- * associated with them. Malloc'ed, but +- * may be NULL. */ +- +- /* +- * Information used by tkError.c only: +- */ +- +- TkErrorHandler *errorPtr; +- /* First in list of error handlers +- * for this display. NULL means +- * no handlers exist at present. */ +- int deleteCount; /* Counts # of handlers deleted since +- * last time inactive handlers were +- * garbage-collected. When this number +- * gets big, handlers get cleaned up. */ +- +- /* +- * Information used by tkSend.c only: +- */ +- +- Tk_Window commTkwin; /* Window used for communication +- * between interpreters during "send" +- * commands. NULL means send info hasn't +- * been initialized yet. */ +- Atom commProperty; /* X's name for comm property. */ +- Atom registryProperty; /* X's name for property containing +- * registry of interpreter names. */ +- Atom appNameProperty; /* X's name for property used to hold the +- * application name on each comm window. */ +- +- /* +- * Information used by tkSelect.c and tkClipboard.c only: +- */ +- +- TkSelectionInfo *selectionInfoPtr; +- /* First in list of selection information +- * records. Each entry contains information +- * about the current owner of a particular +- * selection on this display. */ +- Atom multipleAtom; /* Atom for MULTIPLE. None means +- * selection stuff isn't initialized. */ +- Atom incrAtom; /* Atom for INCR. */ +- Atom targetsAtom; /* Atom for TARGETS. */ +- Atom timestampAtom; /* Atom for TIMESTAMP. */ +- Atom textAtom; /* Atom for TEXT. */ +- Atom compoundTextAtom; /* Atom for COMPOUND_TEXT. */ +- Atom applicationAtom; /* Atom for TK_APPLICATION. */ +- Atom windowAtom; /* Atom for TK_WINDOW. */ +- Atom clipboardAtom; /* Atom for CLIPBOARD. */ +- +- Tk_Window clipWindow; /* Window used for clipboard ownership and to +- * retrieve selections between processes. NULL +- * means clipboard info hasn't been +- * initialized. */ +- int clipboardActive; /* 1 means we currently own the clipboard +- * selection, 0 means we don't. */ +- TkMainInfo *clipboardAppPtr; +- /* Last application that owned clipboard. */ +- TkClipboardTarget *clipTargetPtr; +- /* First in list of clipboard type information +- * records. Each entry contains information +- * about the buffers for a given selection +- * target. */ +- +- /* +- * Information used by tkAtom.c only: +- */ +- +- int atomInit; /* 0 means stuff below hasn't been +- * initialized yet. */ +- Tcl_HashTable nameTable; /* Maps from names to Atom's. */ +- Tcl_HashTable atomTable; /* Maps from Atom's back to names. */ +- +- /* +- * Information used by tkCursor.c only: +- */ +- +- Font cursorFont; /* Font to use for standard cursors. +- * None means font not loaded yet. */ +- +- /* +- * Information used by tkGrab.c only: +- */ +- +- TkWindow *grabWinPtr; +- /* Window in which the pointer is currently +- * grabbed, or NULL if none. */ +- TkWindow *eventualGrabWinPtr; +- /* Value that grabWinPtr will have once the +- * grab event queue (below) has been +- * completely emptied. */ +- TkWindow *buttonWinPtr; +- /* Window in which first mouse button was +- * pressed while grab was in effect, or NULL +- * if no such press in effect. */ +- TkWindow *serverWinPtr; +- /* If no application contains the pointer then +- * this is NULL. Otherwise it contains the +- * last window for which we've gotten an +- * Enter or Leave event from the server (i.e. +- * the last window known to have contained +- * the pointer). Doesn't reflect events +- * that were synthesized in tkGrab.c. */ +- TkGrabEvent *firstGrabEventPtr; +- /* First in list of enter/leave events +- * synthesized by grab code. These events +- * must be processed in order before any other +- * events are processed. NULL means no such +- * events. */ +- TkGrabEvent *lastGrabEventPtr; +- /* Last in list of synthesized events, or NULL +- * if list is empty. */ +- int grabFlags; /* Miscellaneous flag values. See definitions +- * in tkGrab.c. */ +- +- /* +- * Information used by tkXId.c only: +- */ +- +- TkIdStack *idStackPtr; +- /* First in list of chunks of free resource +- * identifiers, or NULL if there are no free +- * resources. */ +- XID(*defaultAllocProc) _ANSI_ARGS_((Display *display)); +- /* Default resource allocator for display. */ +- TkIdStack *windowStackPtr; +- /* First in list of chunks of window +- * identifers that can't be reused right +- * now. */ +- int idCleanupScheduled; /* 1 means a call to WindowIdCleanup has +- * already been scheduled, 0 means it +- * hasn't. */ +- +- /* +- * Information maintained by tkWindow.c for use later on by tkXId.c: +- */ +- +- +- int destroyCount; /* Number of Tk_DestroyWindow operations +- * in progress. */ +- unsigned long lastDestroyRequest; +- /* Id of most recent XDestroyWindow request; +- * can re-use ids in windowStackPtr when +- * server has seen this request and event +- * queue is empty. */ +- +- /* +- * Information used by tkVisual.c only: +- */ +- +- TkColormap *cmapPtr; /* First in list of all non-default colormaps +- * allocated for this display. */ +- +- /* +- * Information used by tkFocus.c only: +- */ +-#if (TK_MAJOR_VERSION == 4) +- +- TkWindow *focusWinPtr; +- /* Window that currently has the focus for +- * this display, or NULL if none. */ +- TkWindow *implicitWinPtr; +- /* If the focus arrived at a toplevel window +- * implicitly via an Enter event (rather +- * than via a FocusIn event), this points +- * to the toplevel window. Otherwise it is +- * NULL. */ +- TkWindow *focusOnMapPtr; +- /* This points to a toplevel window that is +- * supposed to receive the X input focus as +- * soon as it is mapped (needed to handle the +- * fact that X won't allow the focus on an +- * unmapped window). NULL means no delayed +- * focus op in progress. */ +- int forceFocus; /* Associated with focusOnMapPtr: non-zero +- * means claim the focus even if some other +- * application currently has it. */ +-#else +- TkWindow *implicitWinPtr; +- /* If the focus arrived at a toplevel window +- * implicitly via an Enter event (rather +- * than via a FocusIn event), this points +- * to the toplevel window. Otherwise it is +- * NULL. */ +- TkWindow *focusPtr; /* Points to the window on this display that +- * should be receiving keyboard events. When +- * multiple applications on the display have +- * the focus, this will refer to the +- * innermost window in the innermost +- * application. This information isn't used +- * under Unix or Windows, but it's needed on +- * the Macintosh. */ +-#endif /* TK_MAJOR_VERSION == 4 */ +- +- /* +- * Used by tkColor.c only: +- */ +- +- TkStressedCmap *stressPtr; /* First in list of colormaps that have +- * filled up, so we have to pick an +- * approximate color. */ +- +- /* +- * Used by tkEvent.c only: +- */ +- +- TkWindowEvent *delayedMotionPtr; +- /* Points to a malloc-ed motion event +- * whose processing has been delayed in +- * the hopes that another motion event +- * will come along right away and we can +- * merge the two of them together. NULL +- * means that there is no delayed motion +- * event. */ +- /* +- * Miscellaneous information: +- */ +- +-#ifdef TK_USE_INPUT_METHODS +- XIM inputMethod; /* Input method for this display */ +-#endif /* TK_USE_INPUT_METHODS */ +- Tcl_HashTable winTable; /* Maps from X window ids to TkWindow ptrs. */ +-#if (TK_MAJOR_VERSION > 4) +- int refCount; /* Reference count of how many Tk applications +- * are using this display. Used to clean up +- * the display when we no longer have any +- * Tk applications using it. +- */ +-#endif /* TK_MAJOR_VERSION > 4 */ +- +-} TkDisplay; +- +-#endif /* TK_VERSION_NUMBER >= _VERSION(8,1,0) */ +- +- +-struct TkWindowStruct { +- Display *display; +- TkDisplay *dispPtr; +- int screenNum; +- Visual *visual; +- int depth; +- Window window; +- TkWindow *childList; +- TkWindow *lastChildPtr; +- TkWindow *parentPtr; +- TkWindow *nextPtr; +- TkMainInfo *infoPtr; +- char *pathName; +- Tk_Uid nameUid; +- Tk_Uid classUid; +- XWindowChanges changes; +- unsigned int dirtyChanges; +- XSetWindowAttributes atts; +- unsigned long dirtyAtts; +- unsigned int flags; +- TkEventHandler *handlerList; +-#ifdef TK_USE_INPUT_METHODS +- XIC inputContext; +-#endif /* TK_USE_INPUT_METHODS */ +- ClientData *tagPtr; +- int nTags; +- int optionLevel; +- TkSelHandler *selHandlerList; +- Tk_GeomMgr *geomMgrPtr; +- ClientData geomData; +- int reqWidth, reqHeight; +- int internalBorderWidth; +- TkWinInfo *wmInfoPtr; +-#if (TK_MAJOR_VERSION > 4) +- TkClassProcs *classProcsPtr; +- ClientData instanceData; +-#endif +- TkWindowPrivate *privatePtr; +- int internalBorderRight; +- int internalBorderTop; +- int internalBorderBottom; +- +- int minReqWidth; +- int minReqHeight; +- +-}; +- + #ifdef WIN32 + /* + *---------------------------------------------------------------------- +--- a/generic/bltPs.c ++++ b/generic/bltPs.c +@@ -895,7 +895,7 @@ + return; + } + if ((relief == TK_RELIEF_SOLID) || +- (borderPtr->lightColor == NULL) || (borderPtr->darkColor == NULL)) { ++ (borderPtr->lightColorPtr == NULL) || (borderPtr->darkColorPtr == NULL)) { + if (relief == TK_RELIEF_SOLID) { + darkColor.red = darkColor.blue = darkColor.green = 0x00; + lightColor.red = lightColor.blue = lightColor.green = 0x00; +@@ -903,7 +903,7 @@ + } else { + Screen *screenPtr; + +- lightColor = *borderPtr->bgColor; ++ lightColor = *borderPtr->bgColorPtr; + screenPtr = Tk_Screen(tokenPtr->tkwin); + if (lightColor.pixel == WhitePixelOfScreen(screenPtr)) { + darkColor.red = darkColor.blue = darkColor.green = 0x00; +@@ -914,8 +914,8 @@ + lightColorPtr = &lightColor; + darkColorPtr = &darkColor; + } else { +- lightColorPtr = borderPtr->lightColor; +- darkColorPtr = borderPtr->darkColor; ++ lightColorPtr = borderPtr->lightColorPtr; ++ darkColorPtr = borderPtr->darkColorPtr; + } + + +@@ -944,7 +944,7 @@ + topColor = darkColorPtr; + bottomColor = lightColorPtr; + } else { +- topColor = bottomColor = borderPtr->bgColor; ++ topColor = bottomColor = borderPtr->bgColorPtr; + } + Blt_BackgroundToPostScript(tokenPtr, bottomColor); + Blt_RectangleToPostScript(tokenPtr, x, y + height - borderWidth, width, +@@ -984,7 +984,7 @@ + * Setting the pen color as foreground or background only affects + * the plot when the colormode option is "monochrome". + */ +- Blt_BackgroundToPostScript(tokenPtr, borderPtr->bgColor); ++ Blt_BackgroundToPostScript(tokenPtr, borderPtr->bgColorPtr); + Blt_RectangleToPostScript(tokenPtr, x, y, width, height); + Blt_Draw3DRectangleToPostScript(tokenPtr, border, x, y, width, height, + borderWidth, relief); +--- a/generic/bltText.c ++++ b/generic/bltText.c +@@ -903,7 +903,7 @@ + TkBorder *borderPtr = (TkBorder *) tsPtr->border; + XColor *color1, *color2; + +- color1 = borderPtr->lightColor, color2 = borderPtr->darkColor; ++ color1 = borderPtr->lightColorPtr, color2 = borderPtr->darkColorPtr; + if (tsPtr->state & STATE_EMPHASIS) { + XColor *hold; + +@@ -968,7 +968,7 @@ + TkBorder *borderPtr = (TkBorder *) tsPtr->border; + XColor *color1, *color2; + +- color1 = borderPtr->lightColor, color2 = borderPtr->darkColor; ++ color1 = borderPtr->lightColorPtr, color2 = borderPtr->darkColorPtr; + if (tsPtr->state & STATE_EMPHASIS) { + XColor *hold; + +--- a/generic/tkFrame.c ++++ b/generic/tkFrame.c +@@ -116,7 +116,7 @@ + int flags; /* Various flags; see below for + * definitions. */ + Blt_Tile tile; +-} Frame; ++} bltFrame; + + /* + * Flag bits for frames: +@@ -143,65 +143,65 @@ + static Tk_ConfigSpec configSpecs[] = + { + {TK_CONFIG_BORDER, "-background", "background", "Background", +- DEF_FRAME_BACKGROUND, Tk_Offset(Frame, border), ++ DEF_FRAME_BACKGROUND, Tk_Offset(bltFrame, border), + BOTH | TK_CONFIG_COLOR_ONLY | TK_CONFIG_NULL_OK}, + {TK_CONFIG_BORDER, "-background", "background", "Background", +- DEF_FRAME_BG_MONO, Tk_Offset(Frame, border), ++ DEF_FRAME_BG_MONO, Tk_Offset(bltFrame, border), + BOTH | TK_CONFIG_MONO_ONLY | TK_CONFIG_NULL_OK}, + {TK_CONFIG_SYNONYM, "-bd", "borderWidth", (char *)NULL, + (char *)NULL, 0, BOTH}, + {TK_CONFIG_SYNONYM, "-bg", "background", (char *)NULL, + (char *)NULL, 0, BOTH}, + {TK_CONFIG_PIXELS, "-borderwidth", "borderWidth", "BorderWidth", +- DEF_FRAME_BORDERWIDTH, Tk_Offset(Frame, borderWidth), BOTH}, ++ DEF_FRAME_BORDERWIDTH, Tk_Offset(bltFrame, borderWidth), BOTH}, + {TK_CONFIG_STRING, "-class", "class", "Class", +- DEF_FRAME_CLASS, Tk_Offset(Frame, className), FRAME}, ++ DEF_FRAME_CLASS, Tk_Offset(bltFrame, className), FRAME}, + {TK_CONFIG_STRING, "-class", "class", "Class", +- DEF_TOPLEVEL_CLASS, Tk_Offset(Frame, className), TOPLEVEL}, ++ DEF_TOPLEVEL_CLASS, Tk_Offset(bltFrame, className), TOPLEVEL}, + {TK_CONFIG_STRING, "-colormap", "colormap", "Colormap", +- DEF_FRAME_COLORMAP, Tk_Offset(Frame, colormapName), ++ DEF_FRAME_COLORMAP, Tk_Offset(bltFrame, colormapName), + BOTH | TK_CONFIG_NULL_OK}, + #if (TK_MAJOR_VERSION > 4) + {TK_CONFIG_BOOLEAN, "-container", "container", "Container", +- DEF_FRAME_CONTAINER, Tk_Offset(Frame, isContainer), BOTH}, ++ DEF_FRAME_CONTAINER, Tk_Offset(bltFrame, isContainer), BOTH}, + #endif /* TK_MAJOR_VERSION > 4 */ + {TK_CONFIG_ACTIVE_CURSOR, "-cursor", "cursor", "Cursor", +- DEF_FRAME_CURSOR, Tk_Offset(Frame, cursor), BOTH | TK_CONFIG_NULL_OK}, ++ DEF_FRAME_CURSOR, Tk_Offset(bltFrame, cursor), BOTH | TK_CONFIG_NULL_OK}, + {TK_CONFIG_PIXELS, "-height", "height", "Height", +- DEF_FRAME_HEIGHT, Tk_Offset(Frame, height), BOTH}, ++ DEF_FRAME_HEIGHT, Tk_Offset(bltFrame, height), BOTH}, + {TK_CONFIG_COLOR, "-highlightbackground", "highlightBackground", + "HighlightBackground", DEF_FRAME_HIGHLIGHT_BG, +- Tk_Offset(Frame, highlightBgColorPtr), BOTH}, ++ Tk_Offset(bltFrame, highlightBgColorPtr), BOTH}, + {TK_CONFIG_COLOR, "-highlightcolor", "highlightColor", "HighlightColor", +- DEF_FRAME_HIGHLIGHT, Tk_Offset(Frame, highlightColorPtr), BOTH}, ++ DEF_FRAME_HIGHLIGHT, Tk_Offset(bltFrame, highlightColorPtr), BOTH}, + {TK_CONFIG_PIXELS, "-highlightthickness", "highlightThickness", + "HighlightThickness", +- DEF_FRAME_HIGHLIGHT_WIDTH, Tk_Offset(Frame, highlightWidth), BOTH}, ++ DEF_FRAME_HIGHLIGHT_WIDTH, Tk_Offset(bltFrame, highlightWidth), BOTH}, + #if (TK_MAJOR_VERSION > 4) + {TK_CONFIG_STRING, "-menu", "menu", "Menu", +- DEF_TOPLEVEL_MENU, Tk_Offset(Frame, menuName), ++ DEF_TOPLEVEL_MENU, Tk_Offset(bltFrame, menuName), + TOPLEVEL | TK_CONFIG_NULL_OK}, + #endif /* TK_MAJOR_VERSION > 4 */ + {TK_CONFIG_RELIEF, "-relief", "relief", "Relief", +- DEF_FRAME_RELIEF, Tk_Offset(Frame, relief), BOTH}, ++ DEF_FRAME_RELIEF, Tk_Offset(bltFrame, relief), BOTH}, + {TK_CONFIG_STRING, "-screen", "screen", "Screen", +- DEF_TOPLEVEL_SCREEN, Tk_Offset(Frame, screenName), ++ DEF_TOPLEVEL_SCREEN, Tk_Offset(bltFrame, screenName), + TOPLEVEL | TK_CONFIG_NULL_OK}, + {TK_CONFIG_STRING, "-takefocus", "takeFocus", "TakeFocus", +- DEF_FRAME_TAKE_FOCUS, Tk_Offset(Frame, takeFocus), ++ DEF_FRAME_TAKE_FOCUS, Tk_Offset(bltFrame, takeFocus), + BOTH | TK_CONFIG_NULL_OK}, + {TK_CONFIG_CUSTOM, "-tile", "tile", "Tile", +- (char *)NULL, Tk_Offset(Frame, tile), BOTH | TK_CONFIG_NULL_OK, ++ (char *)NULL, Tk_Offset(bltFrame, tile), BOTH | TK_CONFIG_NULL_OK, + &bltTileOption}, + #if (TK_MAJOR_VERSION > 4) + {TK_CONFIG_STRING, "-use", "use", "Use", +- DEF_FRAME_USE, Tk_Offset(Frame, useThis), TOPLEVEL|TK_CONFIG_NULL_OK}, ++ DEF_FRAME_USE, Tk_Offset(bltFrame, useThis), TOPLEVEL|TK_CONFIG_NULL_OK}, + #endif + {TK_CONFIG_STRING, "-visual", "visual", "Visual", +- DEF_FRAME_VISUAL, Tk_Offset(Frame, visualName), ++ DEF_FRAME_VISUAL, Tk_Offset(bltFrame, visualName), + BOTH | TK_CONFIG_NULL_OK}, + {TK_CONFIG_PIXELS, "-width", "width", "Width", +- DEF_FRAME_WIDTH, Tk_Offset(Frame, width), BOTH}, ++ DEF_FRAME_WIDTH, Tk_Offset(bltFrame, width), BOTH}, + {TK_CONFIG_END, (char *)NULL, (char *)NULL, (char *)NULL, + (char *)NULL, 0, 0} + }; +@@ -211,7 +211,7 @@ + */ + + static int ConfigureFrame _ANSI_ARGS_((Tcl_Interp *interp, +- Frame * framePtr, int argc, char **argv, ++ bltFrame * framePtr, int argc, CONST84 char **argv, + int flags)); + static void DestroyFrame _ANSI_ARGS_((DestroyData *memPtr)); + static void DisplayFrame _ANSI_ARGS_((ClientData clientData)); +@@ -219,27 +219,16 @@ + ClientData clientData)); + static void FrameEventProc _ANSI_ARGS_((ClientData clientData, + XEvent *eventPtr)); +-static int FrameWidgetCmd _ANSI_ARGS_((ClientData clientData, +- Tcl_Interp *interp, int argc, char **argv)); + static void MapFrame _ANSI_ARGS_((ClientData clientData)); + + static Blt_TileChangedProc TileChangedProc; +-static Tcl_CmdProc FrameCmd, ToplevelCmd; ++static Tcl_CmdProc FrameCmd, ToplevelCmd, FrameWidgetCmd; + +-#ifdef TILE_MAINWINDOW +-EXTERN +-#else + static +-#endif +-int TkCreateFrame _ANSI_ARGS_((ClientData clientData, +- Tcl_Interp *interp, int argc, char **argv, ++int BltCreateFrame _ANSI_ARGS_((ClientData clientData, ++ Tcl_Interp *interp, int argc, CONST84 char **argv, + int toplevel, char *appName)); + +-EXTERN void TkSetWindowMenuBar _ANSI_ARGS_((Tcl_Interp *interp, Tk_Window tkwin, +- char *oldMenuName, char *menuName)); +- +-EXTERN Tk_Window TkCreateMainWindow _ANSI_ARGS_((Tcl_Interp * interp, +- char * screenName, char * baseName)); + #if (TK_MAJOR_VERSION == 8) && (TK_MINOR_VERSION > 3) + #define TkSetClassProcs Tk_SetClassProcs + #else +@@ -247,10 +236,10 @@ + ClientData instanceData)); + #endif /* TK_MAJOR_VERSION == 8 && TK_MINOR_VERSION > 3 */ + ++#if (TCL_VERSION_NUMBER < _VERSION(8,6,0)) + EXTERN void TkpSetMainMenubar _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, + char * menuName)); +-EXTERN int TkpUseWindow _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, +- char * string)); ++#endif + EXTERN void TkpMakeContainer _ANSI_ARGS_((Tk_Window tkwin)); + + +@@ -279,9 +268,9 @@ + * interpreter. */ + Tcl_Interp *interp; /* Current interpreter. */ + int argc; /* Number of arguments. */ +- char **argv; /* Argument strings. */ ++ CONST84 char **argv; /* Argument strings. */ + { +- return TkCreateFrame(clientData, interp, argc, argv, 0, (char *)NULL); ++ return BltCreateFrame(clientData, interp, argc, argv, 0, (char *)NULL); + } + + static int +@@ -290,9 +279,9 @@ + * interpreter. */ + Tcl_Interp *interp; /* Current interpreter. */ + int argc; /* Number of arguments. */ +- char **argv; /* Argument strings. */ ++ CONST84 char **argv; /* Argument strings. */ + { +- return TkCreateFrame(clientData, interp, argc, argv, 1, (char *)NULL); ++ return BltCreateFrame(clientData, interp, argc, argv, 1, (char *)NULL); + } + + /* +@@ -319,20 +308,20 @@ + static + #endif /* TILE_MAINWINDOW */ + int +-TkCreateFrame(clientData, interp, argc, argv, toplevel, appName) ++BltCreateFrame(clientData, interp, argc, argv, toplevel, appName) + ClientData clientData; /* Main window associated with interpreter. + * If we're called by Tk_Init to create a + * new application, then this is NULL. */ + Tcl_Interp *interp; /* Current interpreter. */ + int argc; /* Number of arguments. */ +- char **argv; /* Argument strings. */ ++ CONST84 char *argv[]; /* Argument strings. */ + int toplevel; /* Non-zero means create a toplevel window, + * zero means create a frame. */ + char *appName; /* Should only be non-NULL if clientData is + * NULL: gives the base name to use for the + * new application. */ + { +- Frame *framePtr; ++ bltFrame *framePtr; + Tk_Window new; + char *className, *screenName, *visualName, *colormapName, *arg, *useOption; + int i, c, length, depth; +@@ -407,7 +396,7 @@ + */ + + if (appName == NULL) { +- panic("TkCreateFrame didn't get application name"); ++ panic("BltCreateFrame didn't get application name"); + } + new = (Tk_Window)TkCreateMainWindow(interp, screenName, appName); + } +@@ -467,7 +456,7 @@ + * in the widget record from the special options. + */ + +- framePtr = Blt_Malloc(sizeof(Frame)); ++ framePtr = Blt_Malloc(sizeof(bltFrame)); + framePtr->tkwin = new; + framePtr->display = Tk_Display(new); + framePtr->interp = interp; +@@ -558,9 +547,9 @@ + ClientData clientData; /* Information about frame widget. */ + Tcl_Interp *interp; /* Current interpreter. */ + int argc; /* Number of arguments. */ +- char **argv; /* Argument strings. */ ++ CONST84 char *argv[]; /* Argument strings. */ + { +- register Frame *framePtr = (Frame *) clientData; ++ register bltFrame *framePtr = (bltFrame *) clientData; + int result; + size_t length; + int c, i; +@@ -660,7 +649,7 @@ + DestroyFrame(memPtr) + DestroyData *memPtr; /* Info about frame widget. */ + { +- register Frame *framePtr = (Frame *) memPtr; ++ register bltFrame *framePtr = (bltFrame *) memPtr; + + Tk_FreeOptions(configSpecs, (char *)framePtr, framePtr->display, + framePtr->mask); +@@ -689,7 +678,7 @@ + ClientData clientData; + Blt_Tile tile; + { +- Frame *framePtr = (Frame *) clientData; ++ bltFrame *framePtr = (bltFrame *) clientData; + + if (framePtr->tkwin != NULL) { + if (!(framePtr->flags & REDRAW_PENDING)) { +@@ -723,10 +712,10 @@ + static int + ConfigureFrame(interp, framePtr, argc, argv, flags) + Tcl_Interp *interp; /* Used for error reporting. */ +- register Frame *framePtr; /* Information about widget; may or may ++ register bltFrame *framePtr; /* Information about widget; may or may + * not already have values for some fields. */ + int argc; /* Number of valid entries in argv. */ +- char **argv; /* Arguments. */ ++ CONST84 char **argv; /* Arguments. */ + int flags; /* Flags to pass to Tk_ConfigureWidget. */ + { + #if (TK_MAJOR_VERSION > 4) +@@ -810,7 +799,7 @@ + DisplayFrame(clientData) + ClientData clientData; /* Information about widget. */ + { +- register Frame *framePtr = (Frame *) clientData; ++ register bltFrame *framePtr = (bltFrame *) clientData; + register Tk_Window tkwin = framePtr->tkwin; + GC gc; + +@@ -877,7 +866,7 @@ + ClientData clientData; /* Information about window. */ + register XEvent *eventPtr; /* Information about event. */ + { +- register Frame *framePtr = (Frame *) clientData; ++ register bltFrame *framePtr = (bltFrame *) clientData; + + if (((eventPtr->type == Expose) && (eventPtr->xexpose.count == 0)) + || (eventPtr->type == ConfigureNotify)) { +@@ -964,7 +953,7 @@ + FrameCmdDeletedProc(clientData) + ClientData clientData; /* Pointer to widget record for widget. */ + { +- Frame *framePtr = (Frame *) clientData; ++ bltFrame *framePtr = (bltFrame *) clientData; + Tk_Window tkwin = framePtr->tkwin; + + #if (TK_MAJOR_VERSION > 4) +@@ -1010,7 +999,7 @@ + MapFrame(clientData) + ClientData clientData; /* Pointer to frame structure. */ + { +- Frame *framePtr = (Frame *) clientData; ++ bltFrame *framePtr = (bltFrame *) clientData; + + /* + * Wait for all other background events to be processed before +@@ -1067,9 +1056,9 @@ + #define Tk_InstanceData(tkwin) (((Tk_FakeWin *)(tkwin))->dummy18) + #define Tk_MainPtr(tkwin) (((Tk_FakeWin *)(tkwin))->dummy5) + if (Tk_MainPtr(tkwin) != NULL) { +- Frame *framePtr; ++ bltFrame *framePtr; + +- framePtr = (Frame *) Tk_InstanceData(tkwin); ++ framePtr = (bltFrame *) Tk_InstanceData(tkwin); + TkpMenuNotifyToplevelCreate(framePtr->interp, framePtr->menuName); + } + #endif /* TK_MAJOR_VERSION > 4 */ +--- a/configure.in ++++ b/configure.in +@@ -816,6 +816,7 @@ + if test "${TK_INC_DIR}" != "/usr/include" ; then + INC_SPECS="${INC_SPECS} -I${TK_INC_DIR}" + fi ++INC_SPECS="${INC_SPECS} -I${TK_SRC_DIR}/generic -I${TK_SRC_DIR}/unix" + + # Tcl include files + # |