diff options
Diffstat (limited to 'generic')
54 files changed, 1588 insertions, 1135 deletions
diff --git a/generic/tk.decls b/generic/tk.decls index dee5c13..d125ca2 100644 --- a/generic/tk.decls +++ b/generic/tk.decls @@ -11,7 +11,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: tk.decls,v 1.15.2.3 2001/11/11 17:58:53 wolfsuit Exp $ +# RCS: @(#) $Id: tk.decls,v 1.15.2.4 2002/02/05 02:25:14 wolfsuit Exp $ library tk @@ -55,8 +55,8 @@ declare 4 generic { } declare 5 generic { - void Tk_AddOption (Tk_Window tkwin, char *name, \ - char *value, int priority) + void Tk_AddOption (Tk_Window tkwin, CONST char *name, \ + CONST char *value, int priority) } declare 6 generic { @@ -78,7 +78,7 @@ declare 8 generic { declare 9 generic { int Tk_CanvasGetCoord (Tcl_Interp *interp, \ - Tk_Canvas canvas, char *str, double *doublePtr) + Tk_Canvas canvas, CONST char *str, double *doublePtr) } declare 10 generic { @@ -528,7 +528,7 @@ declare 103 generic { declare 104 generic { int Tk_GetPixels (Tcl_Interp *interp, \ - Tk_Window tkwin, char *str, int *intPtr) + Tk_Window tkwin, CONST char *str, int *intPtr) } declare 105 generic { @@ -551,7 +551,7 @@ declare 108 generic { declare 109 generic { int Tk_GetScreenMM (Tcl_Interp *interp, \ - Tk_Window tkwin, char *str, double *doublePtr) + Tk_Window tkwin, CONST char *str, double *doublePtr) } declare 110 generic { @@ -692,7 +692,7 @@ declare 140 generic { declare 141 generic { Tk_Window Tk_NameToWindow (Tcl_Interp *interp, \ - char *pathName, Tk_Window tkwin) + CONST char *pathName, Tk_Window tkwin) } declare 142 generic { @@ -703,7 +703,7 @@ declare 142 generic { declare 143 generic { int Tk_ParseArgv (Tcl_Interp *interp, \ - Tk_Window tkwin, int *argcPtr, char **argv, \ + Tk_Window tkwin, int *argcPtr, CONST84 char **argv, \ Tk_ArgvInfo *argTable, int flags) } diff --git a/generic/tk3d.c b/generic/tk3d.c index 4106745..28ec01d 100644 --- a/generic/tk3d.c +++ b/generic/tk3d.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tk3d.c,v 1.11 2001/08/15 15:44:35 dkf Exp $ + * RCS: @(#) $Id: tk3d.c,v 1.11.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tk3d.h" @@ -20,7 +20,7 @@ * used by Tk_GetReliefFromObj. */ -static char *reliefStrings[] = {"flat", "groove", "raised", +static CONST char *reliefStrings[] = {"flat", "groove", "raised", "ridge", "solid", "sunken", (char *) NULL}; diff --git a/generic/tkArgv.c b/generic/tkArgv.c index 7f35368..1a29ba3 100644 --- a/generic/tkArgv.c +++ b/generic/tkArgv.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkArgv.c,v 1.3 1999/04/16 01:51:10 stanton Exp $ + * RCS: @(#) $Id: tkArgv.c,v 1.3.18.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkPort.h" @@ -67,7 +67,7 @@ Tk_ParseArgv(interp, tkwin, argcPtr, argv, argTable, flags) * NULL means ignore Tk option specs. */ int *argcPtr; /* Number of arguments in argv. Modified * to hold # args left in argv at end. */ - char **argv; /* Array of arguments. Modified to hold + CONST char **argv; /* Array of arguments. Modified to hold * those that couldn't be processed here. */ Tk_ArgvInfo *argTable; /* Array of option descriptions */ int flags; /* Or'ed combination of various flag bits, @@ -77,7 +77,7 @@ Tk_ParseArgv(interp, tkwin, argcPtr, argv, argTable, flags) /* Pointer to the current entry in the * table of argument descriptions. */ Tk_ArgvInfo *matchPtr; /* Descriptor that matches current argument. */ - char *curArg; /* Current argument */ + CONST char *curArg; /* Current argument */ register char c; /* Second character of current arg (used for * quick check for matching; use 2nd char. * because first char. will almost always @@ -202,7 +202,7 @@ Tk_ParseArgv(interp, tkwin, argcPtr, argv, argTable, flags) if (argc == 0) { goto missingArg; } else { - *((char **)infoPtr->dst) = argv[srcIndex]; + *((CONST char **)infoPtr->dst) = argv[srcIndex]; srcIndex++; argc--; } @@ -239,7 +239,8 @@ Tk_ParseArgv(interp, tkwin, argcPtr, argv, argTable, flags) } break; case TK_ARGV_FUNC: { - typedef int (ArgvFunc)_ANSI_ARGS_((char *, char *, char *)); + typedef int (ArgvFunc) _ANSI_ARGS_ ((char *, char *, + CONST char *)); ArgvFunc *handlerProc; handlerProc = (ArgvFunc *) infoPtr->src; @@ -252,7 +253,7 @@ Tk_ParseArgv(interp, tkwin, argcPtr, argv, argTable, flags) } case TK_ARGV_GENFUNC: { typedef int (ArgvGenFunc)_ANSI_ARGS_((char *, Tcl_Interp *, - char *, int, char **)); + char *, int, CONST char **)); ArgvGenFunc *handlerProc; handlerProc = (ArgvGenFunc *) infoPtr->src; diff --git a/generic/tkBind.c b/generic/tkBind.c index d6df238..7d9682a 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkBind.c,v 1.18.2.2 2001/10/17 07:02:07 wolfsuit Exp $ + * RCS: @(#) $Id: tkBind.c,v 1.18.2.3 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkPort.h" @@ -810,7 +810,7 @@ TkBindFree(mainPtr) bindInfoPtr = (BindInfo *) mainPtr->bindInfo; DeleteVirtualEventTable(&bindInfoPtr->virtualEventTable); bindInfoPtr->deleted = 1; - Tcl_EventuallyFree((ClientData) bindInfoPtr, Tcl_Free); + Tcl_EventuallyFree((ClientData) bindInfoPtr, TCL_DYNAMIC); mainPtr->bindInfo = NULL; } @@ -2617,7 +2617,7 @@ Tk_EventObjCmd(clientData, interp, objc, objv) Tk_Window tkwin; VirtualEventTable *vetPtr; TkBindInfo bindInfo; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "add", "delete", "generate", "info", NULL }; @@ -2941,7 +2941,7 @@ DeleteVirtualEvent(interp, vetPtr, virtString, eventString) eventPSPtr = FindSequence(interp, &vetPtr->patternTable, NULL, eventString, 0, 0, &eventMask); if (eventPSPtr == NULL) { - char *string; + CONST char *string; string = Tcl_GetStringResult(interp); return (string[0] != '\0') ? TCL_ERROR : TCL_OK; @@ -3186,7 +3186,7 @@ HandleEventGenerate(interp, mainWin, objc, objv) Tk_Window tkwin, tkwin2; TkWindow *mainPtr; unsigned long eventMask; - static char *fieldStrings[] = { + static CONST char *fieldStrings[] = { "-when", "-above", "-borderwidth", "-button", "-count", "-delta", "-detail", "-focus", "-height", diff --git a/generic/tkButton.c b/generic/tkButton.c index 3e835fb..e2a731c 100644 --- a/generic/tkButton.c +++ b/generic/tkButton.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkButton.c,v 1.13 2001/08/29 23:22:24 hobbs Exp $ + * RCS: @(#) $Id: tkButton.c,v 1.13.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkButton.h" @@ -481,7 +481,7 @@ static Tk_OptionSpec *optionSpecs[] = { * into a single enumerated type used to dispatch the widget command. */ -static char *commandNames[][8] = { +static CONST char *commandNames[][8] = { {"cget", "configure", (char *) NULL}, {"cget", "configure", "flash", "invoke", (char *) NULL}, {"cget", "configure", "deselect", "flash", "invoke", "select", @@ -942,9 +942,9 @@ static void DestroyButton(butPtr) TkButton *butPtr; /* Info about button widget. */ { + butPtr->flags |= BUTTON_DELETED; TkpDestroyButton(butPtr); - butPtr->flags |= BUTTON_DELETED; if (butPtr->flags & REDRAW_PENDING) { Tcl_CancelIdleCall(TkpDisplayButton, (ClientData) butPtr); } @@ -1625,6 +1625,10 @@ ButtonTextVarProc(clientData, interp, name1, name2, flags) char *name; Tcl_Obj *valuePtr; + if (butPtr->flags & BUTTON_DELETED) { + return (char *) NULL; + } + name = Tcl_GetString(butPtr->textVarNamePtr); /* diff --git a/generic/tkCanvLine.c b/generic/tkCanvLine.c index 9a0c369..ac56c50 100644 --- a/generic/tkCanvLine.c +++ b/generic/tkCanvLine.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvLine.c,v 1.9 2001/07/03 06:03:44 hobbs Exp $ + * RCS: @(#) $Id: tkCanvLine.c,v 1.9.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include <stdio.h> @@ -1872,7 +1872,7 @@ ParseArrowShape(clientData, interp, tkwin, value, recordPtr, offset) LineItem *linePtr = (LineItem *) recordPtr; double a, b, c; int argc; - char **argv = NULL; + CONST char **argv = NULL; if (offset != Tk_Offset(LineItem, arrowShapeA)) { panic("ParseArrowShape received bogus offset"); diff --git a/generic/tkCanvPs.c b/generic/tkCanvPs.c index 940b754..85f3194 100644 --- a/generic/tkCanvPs.c +++ b/generic/tkCanvPs.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvPs.c,v 1.7 2000/04/25 01:03:06 hobbs Exp $ + * RCS: @(#) $Id: tkCanvPs.c,v 1.7.8.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkInt.h" @@ -128,7 +128,7 @@ static CONST char * CONST prolog[]= { \n\ % This is a standard prolog for Postscript generated by Tk's canvas\n\ % widget.\n\ -% RCS: @(#) $Id: tkCanvPs.c,v 1.7 2000/04/25 01:03:06 hobbs Exp $\n\ +% RCS: @(#) $Id: tkCanvPs.c,v 1.7.8.1 2002/02/05 02:25:14 wolfsuit Exp $\n\ \n\ % The definitions below just define all of the variables used in\n\ % any of the procedures here. This is needed for obscure reasons\n\ @@ -470,7 +470,8 @@ TkCanvPostscriptCmd(canvasPtr, interp, argc, argv) int result; Tk_Item *itemPtr; #define STRING_LENGTH 400 - char string[STRING_LENGTH+1], *p; + char string[STRING_LENGTH+1]; + CONST char *p; time_t now; size_t length; Tk_Window tkwin = canvasPtr->tkwin; @@ -967,7 +968,7 @@ Tk_PostscriptColor(interp, psInfo, colorPtr) */ if (psInfoPtr->colorVar != NULL) { - char *cmdString; + CONST char *cmdString; cmdString = Tcl_GetVar2(interp, psInfoPtr->colorVar, Tk_NameOfColor(colorPtr), 0); @@ -1047,9 +1048,10 @@ Tk_PostscriptFont(interp, psInfo, tkfont) Tcl_DStringInit(&ds); if (psInfoPtr->fontVar != NULL) { - char *list, **argv; + CONST char *list; int argc; double size; + CONST char **argv; char *name; name = Tk_NameOfFont(tkfont); diff --git a/generic/tkCanvText.c b/generic/tkCanvText.c index ef57473..43730cd 100644 --- a/generic/tkCanvText.c +++ b/generic/tkCanvText.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvText.c,v 1.10 2001/08/17 21:08:28 drh Exp $ + * RCS: @(#) $Id: tkCanvText.c,v 1.10.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include <stdio.h> @@ -1376,7 +1376,8 @@ GetSelText(canvas, itemPtr, offset, buffer, maxBytes) { TextItem *textPtr = (TextItem *) itemPtr; int byteCount; - char *text, *selStart, *selEnd; + char *text; + CONST char *selStart, *selEnd; Tk_CanvasTextInfo *textInfoPtr = textPtr->textInfoPtr; if ((textInfoPtr->selectFirst < 0) || diff --git a/generic/tkCanvUtil.c b/generic/tkCanvUtil.c index 5ec5eb7..595180b 100644 --- a/generic/tkCanvUtil.c +++ b/generic/tkCanvUtil.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvUtil.c,v 1.5 1999/12/16 21:57:35 hobbs Exp $ + * RCS: @(#) $Id: tkCanvUtil.c,v 1.5.8.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkInt.h" @@ -189,7 +189,7 @@ int Tk_CanvasGetCoord(interp, canvas, string, doublePtr) Tcl_Interp *interp; /* Interpreter for error reporting. */ Tk_Canvas canvas; /* Canvas to which coordinate applies. */ - char *string; /* Describes coordinate (any screen + CONST char *string; /* Describes coordinate (any screen * coordinate form may be used here). */ double *doublePtr; /* Place to store converted coordinate. */ { @@ -376,7 +376,7 @@ Tk_CanvasTagsParseProc(clientData, interp, tkwin, value, widgRec, offset) { register Tk_Item *itemPtr = (Tk_Item *) widgRec; int argc, i; - char **argv; + CONST char **argv; Tk_Uid *newPtr; /* @@ -454,7 +454,7 @@ Tk_CanvasTagsPrintProc(clientData, tkwin, widgRec, offset, freeProcPtr) return (char *) itemPtr->tagPtr[0]; } *freeProcPtr = TCL_DYNAMIC; - return Tcl_Merge(itemPtr->numTags, (char **) itemPtr->tagPtr); + return Tcl_Merge(itemPtr->numTags, (CONST char **) itemPtr->tagPtr); } @@ -777,7 +777,7 @@ Tk_GetDash(interp, value, dash) * store dash information. */ { int argc, i; - char **largv, **argv = NULL; + CONST char **largv, **argv = NULL; char *pt; if ((value==(char *) NULL) || (*value==0) ) { diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c index 48cd329..f8bf769 100644 --- a/generic/tkCanvas.c +++ b/generic/tkCanvas.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvas.c,v 1.16 2001/04/03 04:40:31 hobbs Exp $ + * RCS: @(#) $Id: tkCanvas.c,v 1.16.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ /* #define USE_OLD_TAG_SEARCH 1 */ @@ -299,9 +299,8 @@ static Tk_Item * NextItem _ANSI_ARGS_((TagSearch *searchPtr)); #endif /* USE_OLD_TAG_SEARCH */ static void PickCurrentItem _ANSI_ARGS_((TkCanvas *canvasPtr, XEvent *eventPtr)); -static void PrintScrollFractions _ANSI_ARGS_((int screen1, - int screen2, int object1, int object2, - char *string)); +static Tcl_Obj * ScrollFractions _ANSI_ARGS_((int screen1, + int screen2, int object1, int object2)); #ifdef USE_OLD_TAG_SEARCH static void RelinkItems _ANSI_ARGS_((TkCanvas *canvasPtr, Tcl_Obj *tag, Tk_Item *prevPtr)); @@ -527,7 +526,7 @@ CanvasWidgetCmd(clientData, interp, argc, argv) #endif /* USE_OLD_TAG_SEARCH */ int index; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "addtag", "bbox", "bind", "canvasx", "canvasy", "cget", "configure", "coords", "create", "dchars", "delete", "dtag", @@ -776,7 +775,7 @@ CanvasWidgetCmd(clientData, interp, argc, argv) command = Tk_GetBinding(interp, canvasPtr->bindingTable, object, Tcl_GetStringFromObj(argv[3], NULL)); if (command == NULL) { - char *string; + CONST char *string; string = Tcl_GetStringResult(interp); /* @@ -1620,7 +1619,7 @@ CanvasWidgetCmd(clientData, interp, argc, argv) } case CANV_SCAN: { int x, y, gain=10; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "mark", "dragto", NULL }; @@ -1668,7 +1667,7 @@ CanvasWidgetCmd(clientData, interp, argc, argv) } case CANV_SELECT: { int index, optionindex; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "adjust", "clear", "from", "item", "to", NULL }; enum options { @@ -1816,10 +1815,11 @@ CanvasWidgetCmd(clientData, interp, argc, argv) double fraction; if (argc == 2) { - PrintScrollFractions(canvasPtr->xOrigin + canvasPtr->inset, + Tcl_SetObjResult(interp, ScrollFractions( + canvasPtr->xOrigin + canvasPtr->inset, canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin) - canvasPtr->inset, canvasPtr->scrollX1, - canvasPtr->scrollX2, Tcl_GetStringResult(interp)); + canvasPtr->scrollX2)); } else { char **args = GetStringsFromObjs(argc, argv); type = Tk_GetScrollInfo(interp, argc, args, &fraction, &count); @@ -1859,10 +1859,11 @@ CanvasWidgetCmd(clientData, interp, argc, argv) double fraction; if (argc == 2) { - PrintScrollFractions(canvasPtr->yOrigin + canvasPtr->inset, + Tcl_SetObjResult(interp,ScrollFractions(\ + canvasPtr->yOrigin + canvasPtr->inset, canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin) - canvasPtr->inset, canvasPtr->scrollY1, - canvasPtr->scrollY2, Tcl_GetStringResult(interp)); + canvasPtr->scrollY2)); } else { char **args = GetStringsFromObjs(argc, argv); type = Tk_GetScrollInfo(interp, argc, args, &fraction, &count); @@ -2062,7 +2063,7 @@ ConfigureCanvas(interp, canvasPtr, argc, argv, flags) canvasPtr->scrollY2 = 0; if (canvasPtr->regionString != NULL) { int argc2; - char **argv2; + CONST char **argv2; if (Tcl_SplitList(canvasPtr->interp, canvasPtr->regionString, &argc2, &argv2) != TCL_OK) { @@ -3972,7 +3973,7 @@ FindItems(interp, canvasPtr, argc, argv, newTag, first, searchPtrPtr) Tk_Item *itemPtr; Tk_Uid uid; int index; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "above", "all", "below", "closest", "enclosed", "overlapping", "withtag", NULL }; @@ -5205,12 +5206,12 @@ GridAlign(coord, spacing) /* *---------------------------------------------------------------------- * - * PrintScrollFractions -- + * ScrollFractions -- * * Given the range that's visible in the window and the "100% - * range" for what's in the canvas, print a string containing - * the scroll fractions. This procedure is used for both x - * and y scrolling. + * range" for what's in the canvas, return a list of two + * doubles representing the scroll fractions. This procedure + * is used for both x and y scrolling. * * Results: * The memory pointed to by string is modified to hold @@ -5223,17 +5224,15 @@ GridAlign(coord, spacing) *---------------------------------------------------------------------- */ -static void -PrintScrollFractions(screen1, screen2, object1, object2, string) +static Tcl_Obj * +ScrollFractions(screen1, screen2, object1, object2) int screen1; /* Lowest coordinate visible in the window. */ int screen2; /* Highest coordinate visible in the window. */ int object1; /* Lowest coordinate in the object. */ int object2; /* Highest coordinate in the object. */ - char *string; /* Two real numbers get printed here. Must - * have enough storage for two %g - * conversions. */ { double range, f1, f2; + char buffer[2*TCL_DOUBLE_SPACE+2]; range = object2 - object1; if (range <= 0) { @@ -5252,7 +5251,8 @@ PrintScrollFractions(screen1, screen2, object1, object2, string) f2 = f1; } } - sprintf(string, "%g %g", f1, f2); + sprintf(buffer, "%g %g", f1, f2); + return Tcl_NewStringObj(buffer, -1); } /* @@ -5281,7 +5281,6 @@ CanvasUpdateScrollbars(canvasPtr) TkCanvas *canvasPtr; /* Information about canvas. */ { int result; - char buffer[200]; Tcl_Interp *interp; int xOrigin, yOrigin, inset, width, height, scrollX1, scrollX2, scrollY1, scrollY2; @@ -5313,9 +5312,11 @@ CanvasUpdateScrollbars(canvasPtr) scrollY2 = canvasPtr->scrollY2; canvasPtr->flags &= ~UPDATE_SCROLLBARS; if (canvasPtr->xScrollCmd != NULL) { - PrintScrollFractions(xOrigin + inset, xOrigin + width - inset, - scrollX1, scrollX2, buffer); - result = Tcl_VarEval(interp, xScrollCmd, " ", buffer, (char *) NULL); + Tcl_Obj *fractions = ScrollFractions(xOrigin + inset, + xOrigin + width - inset, scrollX1, scrollX2); + result = Tcl_VarEval(interp, xScrollCmd, " ", + Tcl_GetString(fractions), (char *) NULL); + Tcl_DecrRefCount(fractions); if (result != TCL_OK) { Tcl_BackgroundError(interp); } @@ -5324,9 +5325,11 @@ CanvasUpdateScrollbars(canvasPtr) } if (yScrollCmd != NULL) { - PrintScrollFractions(yOrigin + inset, yOrigin + height - inset, - scrollY1, scrollY2, buffer); - result = Tcl_VarEval(interp, yScrollCmd, " ", buffer, (char *) NULL); + Tcl_Obj *fractions = ScrollFractions(yOrigin + inset, + yOrigin + height - inset, scrollY1, scrollY2); + result = Tcl_VarEval(interp, yScrollCmd, " ", + Tcl_GetString(fractions), (char *) NULL); + Tcl_DecrRefCount(fractions); if (result != TCL_OK) { Tcl_BackgroundError(interp); } diff --git a/generic/tkClipboard.c b/generic/tkClipboard.c index 426af71..cf87dc1 100644 --- a/generic/tkClipboard.c +++ b/generic/tkClipboard.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkClipboard.c,v 1.7 2000/08/01 18:52:45 ericm Exp $ + * RCS: @(#) $Id: tkClipboard.c,v 1.7.6.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkInt.h" @@ -434,7 +434,7 @@ Tk_ClipboardObjCmd(clientData, interp, objc, objv) Tk_Window tkwin = (Tk_Window) clientData; char *path = NULL; Atom selection; - static char *optionStrings[] = { "append", "clear", "get", NULL }; + static CONST char *optionStrings[] = { "append", "clear", "get", NULL }; enum options { CLIPBOARD_APPEND, CLIPBOARD_CLEAR, CLIPBOARD_GET }; int index, i; @@ -454,8 +454,9 @@ Tk_ClipboardObjCmd(clientData, interp, objc, objv) char *targetName = NULL; char *formatName = NULL; char *string; - static char *appendOptionStrings[] = { "-displayof", "-format", - "-type", NULL }; + static CONST char *appendOptionStrings[] = { + "-displayof", "-format", "-type", NULL + }; enum appendOptions { APPEND_DISPLAYOF, APPEND_FORMAT, APPEND_TYPE }; int subIndex, length; @@ -525,7 +526,7 @@ Tk_ClipboardObjCmd(clientData, interp, objc, objv) Tcl_GetString(objv[i])); } case CLIPBOARD_CLEAR: { - static char *clearOptionStrings[] = { "-displayof", NULL }; + static CONST char *clearOptionStrings[] = { "-displayof", NULL }; enum clearOptions { CLEAR_DISPLAYOF }; int subIndex; if (objc != 2 && objc != 4) { @@ -556,7 +557,9 @@ Tk_ClipboardObjCmd(clientData, interp, objc, objv) Tcl_DString selBytes; int result; char *string; - static char *getOptionStrings[] = { "-displayof", "-type", NULL }; + static CONST char *getOptionStrings[] = { + "-displayof", "-type", NULL + }; enum getOptions { APPEND_DISPLAYOF, APPEND_TYPE }; int subIndex; diff --git a/generic/tkCmds.c b/generic/tkCmds.c index 30f9137..65ec9e6 100644 --- a/generic/tkCmds.c +++ b/generic/tkCmds.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCmds.c,v 1.20.2.2 2001/10/17 07:02:07 wolfsuit Exp $ + * RCS: @(#) $Id: tkCmds.c,v 1.20.2.3 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkPort.h" @@ -65,7 +65,7 @@ Tk_BellObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *bellOptions[] = {"-displayof", "-nice", (char *) NULL}; + static CONST char *bellOptions[] = {"-displayof", "-nice", (char *) NULL}; enum options { TK_BELL_DISPLAYOF, TK_BELL_NICE }; Tk_Window tkwin = (Tk_Window) clientData; int i, index, nice = 0; @@ -618,7 +618,7 @@ Tk_TkObjCmd(clientData, interp, objc, objv) { int index; Tk_Window tkwin; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "appname", "scaling", "useinputmethods", NULL }; enum options { @@ -709,13 +709,13 @@ Tk_TkObjCmd(clientData, interp, objc, objv) * That will indicate to the user that input methods * are just not available. */ - int bool; - if (Tcl_GetBooleanFromObj(interp, objv[2+skip], &bool) + int boolVal; + if (Tcl_GetBooleanFromObj(interp, objv[2+skip], &boolVal) != TCL_OK) { return TCL_ERROR; } #ifdef TK_USE_INPUT_METHODS - dispPtr->useInputMethods = bool; + dispPtr->useInputMethods = boolVal; #endif /* TK_USE_INPUT_METHODS */ } else if ((objc - skip) != 2) { Tcl_WrongNumArgs(interp, 2, objv, @@ -758,7 +758,7 @@ Tk_TkwaitObjCmd(clientData, interp, objc, objv) { Tk_Window tkwin = (Tk_Window) clientData; int done, index; - static char *optionStrings[] = { "variable", "visibility", "window", + static CONST char *optionStrings[] = { "variable", "visibility", "window", (char *) NULL }; enum options { TKWAIT_VARIABLE, TKWAIT_VISIBILITY, TKWAIT_WINDOW }; @@ -920,7 +920,7 @@ Tk_UpdateObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *updateOptions[] = {"idletasks", (char *) NULL}; + static CONST char *updateOptions[] = {"idletasks", (char *) NULL}; int flags, index; TkDisplay *dispPtr; @@ -1008,7 +1008,7 @@ Tk_WinfoObjCmd(clientData, interp, objc, objv) {StaticGray, "staticgray"}, {-1, NULL} }; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "cells", "children", "class", "colormapfull", "depth", "geometry", "height", "id", "ismapped", "manager", "name", "parent", @@ -1599,7 +1599,7 @@ Tk_WmObjCmd(clientData, interp, objc, objv) Tk_Window tkwin; TkWindow *winPtr; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "aspect", "client", "command", "deiconify", "focusmodel", "frame", "geometry", "grid", "group", "iconbitmap", "iconify", "iconmask", diff --git a/generic/tkConfig.c b/generic/tkConfig.c index ab8b55f..bd0a650 100644 --- a/generic/tkConfig.c +++ b/generic/tkConfig.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkConfig.c,v 1.15 2001/08/15 15:44:36 dkf Exp $ + * RCS: @(#) $Id: tkConfig.c,v 1.15.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ /* @@ -743,7 +743,7 @@ DoObjConfig(interp, recordPtr, optionPtr, valuePtr, tkwin, savedOptionPtr) int new; if (Tcl_GetIndexFromObj(interp, valuePtr, - (char **) optionPtr->specPtr->clientData, + (CONST char **) optionPtr->specPtr->clientData, optionPtr->specPtr->optionName+1, 0, &new) != TCL_OK) { return TCL_ERROR; } diff --git a/generic/tkConsole.c b/generic/tkConsole.c index bb6bcad..c631fab 100644 --- a/generic/tkConsole.c +++ b/generic/tkConsole.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkConsole.c,v 1.13 2001/08/06 18:29:41 dgp Exp $ + * RCS: @(#) $Id: tkConsole.c,v 1.13.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tk.h" @@ -47,9 +47,6 @@ TCL_DECLARE_MUTEX(consoleMutex) * The first three will be used in the tk app shells... */ -void TkConsolePrint _ANSI_ARGS_((Tcl_Interp *interp, - int devId, char *buffer, long size)); - static int ConsoleCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int argc, char **argv)); static void ConsoleDeleteProc _ANSI_ARGS_((ClientData clientData)); @@ -61,7 +58,7 @@ static int InterpreterCmd _ANSI_ARGS_((ClientData clientData, static int ConsoleInput _ANSI_ARGS_((ClientData instanceData, char *buf, int toRead, int *errorCode)); static int ConsoleOutput _ANSI_ARGS_((ClientData instanceData, - char *buf, int toWrite, int *errorCode)); + CONST char *buf, int toWrite, int *errorCode)); static int ConsoleClose _ANSI_ARGS_((ClientData instanceData, Tcl_Interp *interp)); static void ConsoleWatch _ANSI_ARGS_((ClientData instanceData, @@ -336,7 +333,7 @@ Tk_CreateConsoleWindow(interp) ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); #ifdef MAC_TCL - static char initCmd[] = "source -rsrc {Console}"; + static char initCmd[] = "if {[catch {source $tk_library:console.tcl}]} {source -rsrc console}"; #else static char initCmd[] = "source $tk_library/console.tcl"; #endif @@ -408,7 +405,7 @@ Tk_CreateConsoleWindow(interp) static int ConsoleOutput(instanceData, buf, toWrite, errorCode) ClientData instanceData; /* Indicates which device to use. */ - char *buf; /* The data buffer. */ + CONST char *buf; /* The data buffer. */ int toWrite; /* How many bytes to write? */ int *errorCode; /* Where to store error code. */ { @@ -476,6 +473,9 @@ ConsoleClose(instanceData, interp) ClientData instanceData; /* Unused. */ Tcl_Interp *interp; /* Unused. */ { + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + tsdPtr->gStdoutInterp = NULL; return 0; } @@ -775,7 +775,7 @@ TkConsolePrint(interp, devId, buffer, size) Tcl_Interp *interp; /* Main interpreter. */ int devId; /* TCL_STDOUT for stdout, TCL_STDERR for * stderr. */ - char *buffer; /* Text buffer. */ + CONST char *buffer; /* Text buffer. */ long size; /* Size of text buffer. */ { Tcl_DString command, output; diff --git a/generic/tkCursor.c b/generic/tkCursor.c index ee2663e..09527b0 100644 --- a/generic/tkCursor.c +++ b/generic/tkCursor.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCursor.c,v 1.7 2001/08/15 15:44:36 dkf Exp $ + * RCS: @(#) $Id: tkCursor.c,v 1.7.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkPort.h" @@ -276,13 +276,12 @@ GetCursor(interp, tkwin, string) cursorPtr->objRefCount = 0; cursorPtr->otherTable = &dispPtr->cursorNameTable; cursorPtr->hashPtr = nameHashPtr; - cursorPtr->nextPtr = NULL; + cursorPtr->nextPtr = existingCursorPtr; cursorPtr->idHashPtr = Tcl_CreateHashEntry(&dispPtr->cursorIdTable, (char *) cursorPtr->cursor, &new); if (!new) { panic("cursor already registered in Tk_GetCursor"); } - cursorPtr->nextPtr = existingCursorPtr; Tcl_SetHashValue(nameHashPtr, cursorPtr); Tcl_SetHashValue(cursorPtr->idHashPtr, cursorPtr); @@ -384,6 +383,7 @@ Tk_GetCursorFromData(interp, tkwin, source, mask, width, height, cursorPtr->objRefCount = 0; cursorPtr->idHashPtr = Tcl_CreateHashEntry(&dispPtr->cursorIdTable, (char *) cursorPtr->cursor, &new); + cursorPtr->nextPtr = NULL; if (!new) { panic("cursor already registered in Tk_GetCursorFromData"); diff --git a/generic/tkDecls.h b/generic/tkDecls.h index a60433b..10b234a 100644 --- a/generic/tkDecls.h +++ b/generic/tkDecls.h @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkDecls.h,v 1.15 2001/09/26 20:25:17 pspjuth Exp $ + * RCS: @(#) $Id: tkDecls.h,v 1.15.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #ifndef _TKDECLS @@ -50,7 +50,8 @@ EXTERN void Tk_3DVerticalBevel _ANSI_ARGS_((Tk_Window tkwin, int relief)); /* 5 */ EXTERN void Tk_AddOption _ANSI_ARGS_((Tk_Window tkwin, - char * name, char * value, int priority)); + CONST char * name, CONST char * value, + int priority)); /* 6 */ EXTERN void Tk_BindEvent _ANSI_ARGS_(( Tk_BindingTable bindingTable, @@ -66,7 +67,7 @@ EXTERN void Tk_CanvasEventuallyRedraw _ANSI_ARGS_(( int y2)); /* 9 */ EXTERN int Tk_CanvasGetCoord _ANSI_ARGS_((Tcl_Interp * interp, - Tk_Canvas canvas, char * str, + Tk_Canvas canvas, CONST char * str, double * doublePtr)); /* 10 */ EXTERN Tk_CanvasTextInfo * Tk_CanvasGetTextInfo _ANSI_ARGS_(( @@ -391,7 +392,8 @@ EXTERN Tk_Uid Tk_GetOption _ANSI_ARGS_((Tk_Window tkwin, char * name, char * className)); /* 104 */ EXTERN int Tk_GetPixels _ANSI_ARGS_((Tcl_Interp * interp, - Tk_Window tkwin, char * str, int * intPtr)); + Tk_Window tkwin, CONST char * str, + int * intPtr)); /* 105 */ EXTERN Pixmap Tk_GetPixmap _ANSI_ARGS_((Display * display, Drawable d, int width, int height, int depth)); @@ -407,7 +409,7 @@ EXTERN int Tk_GetScrollInfo _ANSI_ARGS_((Tcl_Interp * interp, int * intPtr)); /* 109 */ EXTERN int Tk_GetScreenMM _ANSI_ARGS_((Tcl_Interp * interp, - Tk_Window tkwin, char * str, + Tk_Window tkwin, CONST char * str, double * doublePtr)); /* 110 */ EXTERN int Tk_GetSelection _ANSI_ARGS_((Tcl_Interp * interp, @@ -497,15 +499,16 @@ EXTERN char * Tk_NameOfJustify _ANSI_ARGS_((Tk_Justify justify)); EXTERN char * Tk_NameOfRelief _ANSI_ARGS_((int relief)); /* 141 */ EXTERN Tk_Window Tk_NameToWindow _ANSI_ARGS_((Tcl_Interp * interp, - char * pathName, Tk_Window tkwin)); + CONST char * pathName, Tk_Window tkwin)); /* 142 */ EXTERN void Tk_OwnSelection _ANSI_ARGS_((Tk_Window tkwin, Atom selection, Tk_LostSelProc * proc, ClientData clientData)); /* 143 */ EXTERN int Tk_ParseArgv _ANSI_ARGS_((Tcl_Interp * interp, - Tk_Window tkwin, int * argcPtr, char ** argv, - Tk_ArgvInfo * argTable, int flags)); + Tk_Window tkwin, int * argcPtr, + CONST84 char ** argv, Tk_ArgvInfo * argTable, + int flags)); /* 144 */ EXTERN void Tk_PhotoPutBlock _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr, int x, int y, @@ -857,11 +860,11 @@ typedef struct TkStubs { GC (*tk_3DBorderGC) _ANSI_ARGS_((Tk_Window tkwin, Tk_3DBorder border, int which)); /* 2 */ void (*tk_3DHorizontalBevel) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, int leftIn, int rightIn, int topBevel, int relief)); /* 3 */ void (*tk_3DVerticalBevel) _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, Tk_3DBorder border, int x, int y, int width, int height, int leftBevel, int relief)); /* 4 */ - void (*tk_AddOption) _ANSI_ARGS_((Tk_Window tkwin, char * name, char * value, int priority)); /* 5 */ + void (*tk_AddOption) _ANSI_ARGS_((Tk_Window tkwin, CONST char * name, CONST char * value, int priority)); /* 5 */ void (*tk_BindEvent) _ANSI_ARGS_((Tk_BindingTable bindingTable, XEvent * eventPtr, Tk_Window tkwin, int numObjects, ClientData * objectPtr)); /* 6 */ void (*tk_CanvasDrawableCoords) _ANSI_ARGS_((Tk_Canvas canvas, double x, double y, short * drawableXPtr, short * drawableYPtr)); /* 7 */ void (*tk_CanvasEventuallyRedraw) _ANSI_ARGS_((Tk_Canvas canvas, int x1, int y1, int x2, int y2)); /* 8 */ - int (*tk_CanvasGetCoord) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, char * str, double * doublePtr)); /* 9 */ + int (*tk_CanvasGetCoord) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, CONST char * str, double * doublePtr)); /* 9 */ Tk_CanvasTextInfo * (*tk_CanvasGetTextInfo) _ANSI_ARGS_((Tk_Canvas canvas)); /* 10 */ int (*tk_CanvasPsBitmap) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, Pixmap bitmap, int x, int y, int width, int height)); /* 11 */ int (*tk_CanvasPsColor) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Canvas canvas, XColor * colorPtr)); /* 12 */ @@ -956,12 +959,12 @@ typedef struct TkStubs { int (*tk_GetJustify) _ANSI_ARGS_((Tcl_Interp * interp, char * str, Tk_Justify * justifyPtr)); /* 101 */ int (*tk_GetNumMainWindows) _ANSI_ARGS_((void)); /* 102 */ Tk_Uid (*tk_GetOption) _ANSI_ARGS_((Tk_Window tkwin, char * name, char * className)); /* 103 */ - int (*tk_GetPixels) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str, int * intPtr)); /* 104 */ + int (*tk_GetPixels) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, CONST char * str, int * intPtr)); /* 104 */ Pixmap (*tk_GetPixmap) _ANSI_ARGS_((Display * display, Drawable d, int width, int height, int depth)); /* 105 */ int (*tk_GetRelief) _ANSI_ARGS_((Tcl_Interp * interp, char * name, int * reliefPtr)); /* 106 */ void (*tk_GetRootCoords) _ANSI_ARGS_((Tk_Window tkwin, int * xPtr, int * yPtr)); /* 107 */ int (*tk_GetScrollInfo) _ANSI_ARGS_((Tcl_Interp * interp, int argc, char ** argv, double * dblPtr, int * intPtr)); /* 108 */ - int (*tk_GetScreenMM) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str, double * doublePtr)); /* 109 */ + int (*tk_GetScreenMM) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, CONST char * str, double * doublePtr)); /* 109 */ int (*tk_GetSelection) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Atom selection, Atom target, Tk_GetSelProc * proc, ClientData clientData)); /* 110 */ Tk_Uid (*tk_GetUid) _ANSI_ARGS_((CONST char * str)); /* 111 */ Visual * (*tk_GetVisual) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, char * str, int * depthPtr, Colormap * colormapPtr)); /* 112 */ @@ -993,9 +996,9 @@ typedef struct TkStubs { char * (*tk_NameOfJoinStyle) _ANSI_ARGS_((int join)); /* 138 */ char * (*tk_NameOfJustify) _ANSI_ARGS_((Tk_Justify justify)); /* 139 */ char * (*tk_NameOfRelief) _ANSI_ARGS_((int relief)); /* 140 */ - Tk_Window (*tk_NameToWindow) _ANSI_ARGS_((Tcl_Interp * interp, char * pathName, Tk_Window tkwin)); /* 141 */ + Tk_Window (*tk_NameToWindow) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * pathName, Tk_Window tkwin)); /* 141 */ void (*tk_OwnSelection) _ANSI_ARGS_((Tk_Window tkwin, Atom selection, Tk_LostSelProc * proc, ClientData clientData)); /* 142 */ - int (*tk_ParseArgv) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, int * argcPtr, char ** argv, Tk_ArgvInfo * argTable, int flags)); /* 143 */ + int (*tk_ParseArgv) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, int * argcPtr, CONST84 char ** argv, Tk_ArgvInfo * argTable, int flags)); /* 143 */ void (*tk_PhotoPutBlock) _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr, int x, int y, int width, int height)); /* 144 */ void (*tk_PhotoPutZoomedBlock) _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr, int x, int y, int width, int height, int zoomX, int zoomY, int subsampleX, int subsampleY)); /* 145 */ int (*tk_PhotoGetImage) _ANSI_ARGS_((Tk_PhotoHandle handle, Tk_PhotoImageBlock * blockPtr)); /* 146 */ diff --git a/generic/tkEntry.c b/generic/tkEntry.c index 43c3429..46d2a56 100644 --- a/generic/tkEntry.c +++ b/generic/tkEntry.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkEntry.c,v 1.23 2001/09/21 22:08:19 hobbs Exp $ + * RCS: @(#) $Id: tkEntry.c,v 1.23.2.1 2002/02/05 02:25:14 wolfsuit Exp $ */ #include "tkInt.h" @@ -45,7 +45,7 @@ typedef struct { * Fields that are set by widget commands other than "configure". */ - char *string; /* Pointer to storage for string; + CONST char *string; /* Pointer to storage for string; * NULL-terminated; malloc-ed. */ int insertPos; /* Character index before which next typed * character will be inserted. */ @@ -134,7 +134,7 @@ typedef struct { * configuration settings above. */ - char *displayString; /* String to use when displaying. This may + CONST char *displayString; /* String to use when displaying. This may * be a pointer to string, or a pointer to * malloced memory with the same character * length as string but whose characters @@ -597,7 +597,7 @@ static Tk_OptionSpec sbOptSpec[] = { * enumerated types used to dispatch the entry widget command. */ -static char *entryCmdNames[] = { +static CONST char *entryCmdNames[] = { "bbox", "cget", "configure", "delete", "get", "icursor", "index", "insert", "scan", "selection", "validate", "xview", (char *) NULL }; @@ -608,7 +608,7 @@ enum entryCmd { COMMAND_SCAN, COMMAND_SELECTION, COMMAND_VALIDATE, COMMAND_XVIEW }; -static char *selCmdNames[] = { +static CONST char *selCmdNames[] = { "adjust", "clear", "from", "present", "range", "to", (char *) NULL }; @@ -623,7 +623,7 @@ enum selCmd { * enumerated types used to dispatch the spinbox widget command. */ -static char *sbCmdNames[] = { +static CONST char *sbCmdNames[] = { "bbox", "cget", "configure", "delete", "get", "icursor", "identify", "index", "insert", "invoke", "scan", "selection", "set", "validate", "xview", (char *) NULL @@ -636,7 +636,7 @@ enum sbCmd { SB_CMD_SET, SB_CMD_VALIDATE, SB_CMD_XVIEW }; -static char *sbSelCmdNames[] = { +static CONST char *sbSelCmdNames[] = { "adjust", "clear", "element", "from", "present", "range", "to", (char *) NULL }; @@ -650,7 +650,7 @@ enum sbselCmd { * Extra for selection of elements */ -static char *selElementNames[] = { +static CONST char *selElementNames[] = { "none", "buttondown", "buttonup", (char *) NULL, "entry" }; enum selelement { @@ -690,7 +690,7 @@ static void EntryLostSelection _ANSI_ARGS_(( static void EventuallyRedraw _ANSI_ARGS_((Entry *entryPtr)); static void EntryScanTo _ANSI_ARGS_((Entry *entryPtr, int y)); static void EntrySetValue _ANSI_ARGS_((Entry *entryPtr, - char *value)); + CONST char *value)); static void EntrySelectTo _ANSI_ARGS_(( Entry *entryPtr, int index)); static char * EntryTextVarProc _ANSI_ARGS_((ClientData clientData, @@ -700,12 +700,13 @@ static void EntryUpdateScrollbar _ANSI_ARGS_((Entry *entryPtr)); static int EntryValidate _ANSI_ARGS_((Entry *entryPtr, char *cmd)); static int EntryValidateChange _ANSI_ARGS_((Entry *entryPtr, - char *change, char *new, int index, int type)); + char *change, CONST char *new, int index, + int type)); static void ExpandPercents _ANSI_ARGS_((Entry *entryPtr, - char *before, char *change, char *new, + CONST char *before, char *change, CONST char *new, int index, int type, Tcl_DString *dsPtr)); static void EntryValueChanged _ANSI_ARGS_((Entry *entryPtr, - char *newValue)); + CONST char *newValue)); static void EntryVisibleRange _ANSI_ARGS_((Entry *entryPtr, double *firstPtr, double *lastPtr)); static int EntryWidgetObjCmd _ANSI_ARGS_((ClientData clientData, @@ -770,6 +771,7 @@ Tk_EntryObjCmd(clientData, interp, objc, objv) register Entry *entryPtr; Tk_OptionTable optionTable; Tk_Window tkwin; + char *tmp; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "pathName ?options?"); @@ -807,8 +809,9 @@ Tk_EntryObjCmd(clientData, interp, objc, objv) (ClientData) entryPtr, EntryCmdDeletedProc); entryPtr->optionTable = optionTable; entryPtr->type = TK_ENTRY; - entryPtr->string = (char *) ckalloc(1); - entryPtr->string[0] = '\0'; + tmp = (char *) ckalloc(1); + tmp[0] = '\0'; + entryPtr->string = tmp; entryPtr->selectFirst = -1; entryPtr->selectLast = -1; @@ -984,7 +987,7 @@ EntryWidgetObjCmd(clientData, interp, objc, objv) Tcl_WrongNumArgs(interp, 2, objv, (char *) NULL); goto error; } - Tcl_SetResult(interp, entryPtr->string, TCL_STATIC); + Tcl_SetStringObj(Tcl_GetObjResult(interp), entryPtr->string, -1); break; } @@ -1325,7 +1328,7 @@ DestroyEntry(memPtr) * stuff. */ - ckfree(entryPtr->string); + ckfree((char *)entryPtr->string); if (entryPtr->textVarName != NULL) { Tcl_UntraceVar(entryPtr->interp, entryPtr->textVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, @@ -1339,7 +1342,7 @@ DestroyEntry(memPtr) } Tcl_DeleteTimerHandler(entryPtr->insertBlinkHandler); if (entryPtr->displayString != entryPtr->string) { - ckfree(entryPtr->displayString); + ckfree((char *)entryPtr->displayString); } if (entryPtr->type == TK_SPINBOX) { Spinbox *sbPtr = (Spinbox *) entryPtr; @@ -1634,7 +1637,7 @@ ConfigureEntry(interp, entryPtr, objc, objv, flags) */ if (entryPtr->textVarName != NULL) { - char *value; + CONST char *value; value = Tcl_GetVar(interp, entryPtr->textVarName, TCL_GLOBAL_ONLY); if (value == NULL) { @@ -2081,7 +2084,7 @@ EntryComputeGeometry(entryPtr) char *p; if (entryPtr->displayString != entryPtr->string) { - ckfree(entryPtr->displayString); + ckfree((char *)entryPtr->displayString); entryPtr->displayString = entryPtr->string; entryPtr->numDisplayBytes = entryPtr->numBytes; } @@ -2107,10 +2110,9 @@ EntryComputeGeometry(entryPtr) size = Tcl_UniCharToUtf(ch, buf); entryPtr->numDisplayBytes = entryPtr->numChars * size; - entryPtr->displayString = - (char *) ckalloc((unsigned) (entryPtr->numDisplayBytes + 1)); + p = (char *) ckalloc((unsigned) (entryPtr->numDisplayBytes + 1)); + entryPtr->displayString = p; - p = entryPtr->displayString; for (i = entryPtr->numChars; --i >= 0; ) { p += Tcl_UniCharToUtf(ch, p); } @@ -2214,7 +2216,8 @@ InsertChars(entryPtr, index, value) * string). */ { int byteIndex, byteCount, oldChars, charsAdded, newByteCount; - char *new, *string; + CONST char *string; + char *new; string = entryPtr->string; byteIndex = Tcl_UtfAtIndex(string, index) - string; @@ -2237,7 +2240,7 @@ InsertChars(entryPtr, index, value) return; } - ckfree(string); + ckfree((char *)string); entryPtr->string = new; /* @@ -2311,7 +2314,8 @@ DeleteChars(entryPtr, index, count) int count; /* How many characters to delete. */ { int byteIndex, byteCount, newByteCount; - char *new, *string, *todelete; + CONST char *string; + char *new, *todelete; if ((index + count) > entryPtr->numChars) { count = entryPtr->numChars - index; @@ -2343,7 +2347,7 @@ DeleteChars(entryPtr, index, count) } ckfree(todelete); - ckfree(entryPtr->string); + ckfree((char *)entryPtr->string); entryPtr->string = new; entryPtr->numChars -= count; entryPtr->numBytes -= byteCount; @@ -2423,7 +2427,7 @@ DeleteChars(entryPtr, index, count) static void EntryValueChanged(entryPtr, newValue) Entry *entryPtr; /* Entry whose value just changed. */ - char *newValue; /* If this value is not NULL, we first + CONST char *newValue; /* If this value is not NULL, we first * force the value of the entry to this */ { if (newValue != NULL) { @@ -2483,9 +2487,9 @@ EntryValueChanged(entryPtr, newValue) static void EntrySetValue(entryPtr, value) Entry *entryPtr; /* Entry whose value is to be changed. */ - char *value; /* New text to display in entry. */ + CONST char *value; /* New text to display in entry. */ { - char *oldSource; + CONST char *oldSource; int code, valueLen, malloced = 0; if (strcmp(value, entryPtr->string) == 0) { @@ -2501,9 +2505,9 @@ EntrySetValue(entryPtr, value) * point to volatile memory, like the value of the -textvar * which may get freed during validation */ - oldSource = (char *) ckalloc((unsigned) (valueLen + 1)); - strcpy(oldSource, value); - value = oldSource; + char *tmp = (char *) ckalloc((unsigned) (valueLen + 1)); + strcpy(tmp, value); + value = tmp; malloced = 1; entryPtr->flags |= VALIDATE_VAR; @@ -2516,19 +2520,20 @@ EntrySetValue(entryPtr, value) */ if (entryPtr->flags & VALIDATE_ABORT) { entryPtr->flags &= ~VALIDATE_ABORT; - ckfree(value); + ckfree((char *)value); return; } } oldSource = entryPtr->string; - ckfree(entryPtr->string); + ckfree((char *)entryPtr->string); if (malloced) { entryPtr->string = value; } else { - entryPtr->string = (char *) ckalloc((unsigned) (valueLen + 1)); - strcpy(entryPtr->string, value); + char *tmp = (char *) ckalloc((unsigned) (valueLen + 1)); + strcpy(tmp, value); + entryPtr->string = tmp; } entryPtr->numBytes = valueLen; entryPtr->numChars = Tcl_NumUtfChars(value, valueLen); @@ -2955,7 +2960,8 @@ EntryFetchSelection(clientData, offset, buffer, maxBytes) { Entry *entryPtr = (Entry *) clientData; int byteCount; - char *string, *selStart, *selEnd; + CONST char *string; + CONST char *selStart, *selEnd; if ((entryPtr->selectFirst < 0) || !(entryPtr->exportSelection)) { return -1; @@ -3275,7 +3281,7 @@ EntryTextVarProc(clientData, interp, name1, name2, flags) int flags; /* Information about what happened. */ { Entry *entryPtr = (Entry *) clientData; - char *value; + CONST char *value; /* * If the variable is unset, then immediately recreate it unless @@ -3392,7 +3398,7 @@ EntryValidateChange(entryPtr, change, new, index, type) register Entry *entryPtr; /* Entry that needs validation. */ char *change; /* Characters to be added/deleted * (NULL-terminated string). */ - char *new; /* Potential new value of entry string */ + CONST char *new; /* Potential new value of entry string */ int index; /* index of insert/delete, -1 otherwise */ int type; /* forced, delete, insert, * focusin or focusout */ @@ -3526,11 +3532,12 @@ EntryValidateChange(entryPtr, change, new, index, type) static void ExpandPercents(entryPtr, before, change, new, index, type, dsPtr) register Entry *entryPtr; /* Entry that needs validation. */ - register char *before; /* Command containing percent + register CONST char *before; + /* Command containing percent * expressions to be replaced. */ char *change; /* Characters to added/deleted * (NULL-terminated string). */ - char *new; /* Potential new value of entry string */ + CONST char *new; /* Potential new value of entry string */ int index; /* index of insert/delete */ int type; /* INSERT or DELETE */ Tcl_DString *dsPtr; /* Dynamic string in which to append @@ -3539,7 +3546,7 @@ ExpandPercents(entryPtr, before, change, new, index, type, dsPtr) int spaceNeeded, cvtFlags; /* Used to substitute string as proper Tcl * list element. */ int number, length; - register char *string; + register CONST char *string; Tcl_UniChar ch; char numStorage[2*TCL_INTEGER_SPACE]; @@ -3693,6 +3700,7 @@ Tk_SpinboxObjCmd(clientData, interp, objc, objv) register Spinbox *sbPtr; Tk_OptionTable optionTable; Tk_Window tkwin; + char *tmp; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "pathName ?options?"); @@ -3731,8 +3739,9 @@ Tk_SpinboxObjCmd(clientData, interp, objc, objv) (ClientData) sbPtr, EntryCmdDeletedProc); entryPtr->optionTable = optionTable; entryPtr->type = TK_SPINBOX; - entryPtr->string = (char *) ckalloc(1); - entryPtr->string[0] = '\0'; + tmp = (char *) ckalloc(1); + tmp[0] = '\0'; + entryPtr->string = tmp; entryPtr->selectFirst = -1; entryPtr->selectLast = -1; @@ -3927,7 +3936,7 @@ SpinboxWidgetObjCmd(clientData, interp, objc, objv) Tcl_WrongNumArgs(interp, 2, objv, (char *) NULL); goto error; } - Tcl_SetResult(interp, entryPtr->string, TCL_STATIC); + Tcl_SetStringObj(Tcl_GetObjResult(interp), entryPtr->string, -1); break; } @@ -3957,7 +3966,8 @@ SpinboxWidgetObjCmd(clientData, interp, objc, objv) } elem = GetSpinboxElement(sbPtr, x, y); if (elem != SEL_NONE) { - Tcl_SetResult(interp, selElementNames[elem], TCL_VOLATILE); + Tcl_SetStringObj(Tcl_GetObjResult(interp), + selElementNames[elem], -1); } break; } @@ -4185,9 +4195,8 @@ SpinboxWidgetObjCmd(clientData, interp, objc, objv) goto error; } if (objc == 3) { - Tcl_SetResult(interp, - selElementNames[sbPtr->selElement], - TCL_VOLATILE); + Tcl_SetStringObj(Tcl_GetObjResult(interp), + selElementNames[sbPtr->selElement], -1); } else { int lastElement = sbPtr->selElement; @@ -4215,7 +4224,7 @@ SpinboxWidgetObjCmd(clientData, interp, objc, objv) if (objc == 3) { EntryValueChanged(entryPtr, Tcl_GetString(objv[2])); } - Tcl_SetResult(interp, entryPtr->string, TCL_STATIC); + Tcl_SetStringObj(Tcl_GetObjResult(interp), entryPtr->string, -1); break; } diff --git a/generic/tkFileFilter.c b/generic/tkFileFilter.c index b9bebd7..3cbaba9 100644 --- a/generic/tkFileFilter.c +++ b/generic/tkFileFilter.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkFileFilter.c,v 1.4 2000/07/06 03:17:43 mo Exp $ + * RCS: @(#) $Id: tkFileFilter.c,v 1.4.6.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -17,7 +17,7 @@ static int AddClause _ANSI_ARGS_(( Tcl_Interp * interp, FileFilter * filterPtr, - char * patternsStr, char * ostypesStr, + CONST char * patternsStr, CONST char * ostypesStr, int isWindows)); static void FreeClauses _ANSI_ARGS_((FileFilter * filterPtr)); static void FreeGlobPatterns _ANSI_ARGS_(( @@ -25,7 +25,7 @@ static void FreeGlobPatterns _ANSI_ARGS_(( static void FreeMacFileTypes _ANSI_ARGS_(( FileFilterClause * clausePtr)); static FileFilter * GetFilter _ANSI_ARGS_((FileFilterList * flistPtr, - char * name)); + CONST char * name)); /* *---------------------------------------------------------------------- @@ -86,8 +86,8 @@ TkGetFileFilters(interp, flistPtr, string, isWindows) int isWindows; /* True if we are running on Windows. */ { int listArgc; - char ** listArgv = NULL; - char ** typeInfo = NULL; + CONST char ** listArgv = NULL; + CONST char ** typeInfo = NULL; int code = TCL_OK; int i; @@ -206,16 +206,16 @@ TkFreeFileFilters(flistPtr) static int AddClause(interp, filterPtr, patternsStr, ostypesStr, isWindows) Tcl_Interp * interp; /* Interpreter to use for error reporting. */ FileFilter * filterPtr; /* Stores the new filter clause */ - char * patternsStr; /* A TCL list of glob patterns. */ - char * ostypesStr; /* A TCL list of Mac OSType strings. */ + CONST char * patternsStr; /* A TCL list of glob patterns. */ + CONST char * ostypesStr; /* A TCL list of Mac OSType strings. */ int isWindows; /* True if we are running on Windows; False * if we are running on the Mac; Glob * patterns need to be processed differently * on these two platforms */ { - char ** globList = NULL; + CONST char ** globList = NULL; int globCount; - char ** ostypeList = NULL; + CONST char ** ostypeList = NULL; int ostypeCount; FileFilterClause * clausePtr; int i; @@ -358,7 +358,7 @@ static int AddClause(interp, filterPtr, patternsStr, ostypesStr, isWindows) static FileFilter * GetFilter(flistPtr, name) FileFilterList * flistPtr; /* The FileFilterList that contains the * newly created filter */ - char * name; /* Name of the filter. It is usually displayed + CONST char * name; /* Name of the filter. It is usually displayed * in the "File Types" listbox in the file * dialogs. */ { diff --git a/generic/tkFocus.c b/generic/tkFocus.c index 44756ef..063c4d7 100644 --- a/generic/tkFocus.c +++ b/generic/tkFocus.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkFocus.c,v 1.5 1999/08/10 16:58:37 hobbs Exp $ + * RCS: @(#) $Id: tkFocus.c,v 1.5.16.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -121,8 +121,9 @@ Tk_FocusObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *focusOptions[] = {"-displayof", "-force", "-lastfor", - (char *) NULL}; + static CONST char *focusOptions[] = { + "-displayof", "-force", "-lastfor", (char *) NULL + }; Tk_Window tkwin = (Tk_Window) clientData; TkWindow *winPtr = (TkWindow *) clientData; TkWindow *newPtr, *focusWinPtr, *topLevelPtr; diff --git a/generic/tkFont.c b/generic/tkFont.c index 9d7e9ec..c9c0f08 100644 --- a/generic/tkFont.c +++ b/generic/tkFont.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkFont.c,v 1.12.2.2 2002/01/22 01:12:39 wolfsuit Exp $ + * RCS: @(#) $Id: tkFont.c,v 1.12.2.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -168,7 +168,7 @@ static TkStateMap xlfdSetwidthMap[] = { * when configuring a set of font attributes. */ -static char *fontOpt[] = { +static CONST char *fontOpt[] = { "-family", "-size", "-weight", @@ -479,7 +479,7 @@ Tk_FontObjCmd(clientData, interp, objc, objv) int index; Tk_Window tkwin; TkFontInfo *fiPtr; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "actual", "configure", "create", "delete", "families", "measure", "metrics", "names", NULL @@ -684,7 +684,7 @@ Tk_FontObjCmd(clientData, interp, objc, objv) Tk_Font tkfont; int skip, index, i; CONST TkFontMetrics *fmPtr; - static char *switches[] = { + static CONST char *switches[] = { "-ascent", "-descent", "-linespace", "-fixed", NULL }; diff --git a/generic/tkFrame.c b/generic/tkFrame.c index 55dfc8f..4d37f0b 100644 --- a/generic/tkFrame.c +++ b/generic/tkFrame.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkFrame.c,v 1.10 2001/09/26 21:36:19 pspjuth Exp $ + * RCS: @(#) $Id: tkFrame.c,v 1.10.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "default.h" @@ -718,7 +718,7 @@ FrameWidgetObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *frameOptions[] = { + static CONST char *frameOptions[] = { "cget", "configure", (char *) NULL }; enum options { diff --git a/generic/tkGet.c b/generic/tkGet.c index dd920be..a3b6677 100644 --- a/generic/tkGet.c +++ b/generic/tkGet.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkGet.c,v 1.6 1999/12/14 06:52:28 hobbs Exp $ + * RCS: @(#) $Id: tkGet.c,v 1.6.8.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -37,9 +37,12 @@ static Tcl_ThreadDataKey dataKey; * used by Tk_GetAnchorFromObj and Tk_GetJustifyFromObj. */ -static char *anchorStrings[] = {"n", "ne", "e", "se", "s", "sw", "w", "nw", - "center", (char *) NULL}; -static char *justifyStrings[] = {"left", "right", "center", (char *) NULL}; +static CONST char *anchorStrings[] = { + "n", "ne", "e", "se", "s", "sw", "w", "nw", "center", (char *) NULL +}; +static CONST char *justifyStrings[] = { + "left", "right", "center", (char *) NULL +}; /* @@ -545,7 +548,7 @@ Tk_GetScreenMM(interp, tkwin, string, doublePtr) Tk_Window tkwin; /* Window whose screen determines conversion * from centimeters and other absolute * units. */ - char *string; /* String describing a screen distance. */ + CONST char *string; /* String describing a screen distance. */ double *doublePtr; /* Place to store converted result. */ { char *end; @@ -621,7 +624,7 @@ Tk_GetPixels(interp, tkwin, string, intPtr) Tk_Window tkwin; /* Window whose screen determines conversion * from centimeters and other absolute * units. */ - char *string; /* String describing a number of pixels. */ + CONST char *string; /* String describing a number of pixels. */ int *intPtr; /* Place to store converted result. */ { double d; diff --git a/generic/tkGrab.c b/generic/tkGrab.c index 7bc447d..6638e68 100644 --- a/generic/tkGrab.c +++ b/generic/tkGrab.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkGrab.c,v 1.6.6.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkGrab.c,v 1.6.6.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -202,10 +202,10 @@ Tk_GrabObjCmd(clientData, interp, objc, objv) char *arg; int index; int len; - static char *optionStrings[] = { "current", "release", + static CONST char *optionStrings[] = { "current", "release", "set", "status", (char *) NULL }; - static char *flagStrings[] = { "-global", (char *) NULL }; + static CONST char *flagStrings[] = { "-global", (char *) NULL }; enum options { GRABCMD_CURRENT, GRABCMD_RELEASE, GRABCMD_SET, GRABCMD_STATUS }; diff --git a/generic/tkGrid.c b/generic/tkGrid.c index 05f5a00..6449697 100644 --- a/generic/tkGrid.c +++ b/generic/tkGrid.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkGrid.c,v 1.17 2001/09/30 19:01:58 pspjuth Exp $ + * RCS: @(#) $Id: tkGrid.c,v 1.17.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -333,7 +333,7 @@ Tk_GridObjCmd(clientData, interp, objc, objv) Tcl_Obj *CONST objv[]; /* Argument objects. */ { Tk_Window tkwin = (Tk_Window) clientData; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "bbox", "columnconfigure", "configure", "forget", "info", "location", "propagate", "remove", "rowconfigure", "size", "slaves", (char *) NULL }; @@ -849,7 +849,7 @@ GridRowColumnConfigureCommand(tkwin, interp, objc, objv) int ok; /* temporary TCL result code */ int i, j; char *string; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "-minsize", "-pad", "-uniform", "-weight", (char *) NULL }; enum options { ROWCOL_MINSIZE, ROWCOL_PAD, ROWCOL_UNIFORM, ROWCOL_WEIGHT }; int index; @@ -1117,7 +1117,7 @@ GridSlavesCommand(tkwin, interp, objc, objv) Gridder *slavePtr; int i, value; int row = -1, column = -1; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "-column", "-row", (char *) NULL }; enum options { SLAVES_COLUMN, SLAVES_ROW }; int index; @@ -1848,7 +1848,7 @@ ResolveConstraints(masterPtr, slotType, maxOffset) UniformGroup *old = uniformGroupPtr; memcpy((VOID *) new, (VOID *) old, oldSize); if (old != uniformPre) { - Tcl_Free((char *) old); + ckfree((char *) old); } uniformGroupPtr = new; uniformGroupsAlloced += UNIFORM_PREALLOC; @@ -1888,7 +1888,7 @@ ResolveConstraints(masterPtr, slotType, maxOffset) } if (uniformGroupPtr != uniformPre) { - Tcl_Free((char *) uniformGroupPtr); + ckfree((char *) uniformGroupPtr); } /* @@ -2074,7 +2074,7 @@ ResolveConstraints(masterPtr, slotType, maxOffset) --layoutPtr; if (layoutPtr != layoutData) { - Tcl_Free((char *)layoutPtr); + ckfree((char *)layoutPtr); } return requiredSize; } @@ -2254,7 +2254,7 @@ CheckSlotData(masterPtr, slot, slotType, checkOnly) masterPtr->masterDataPtr->columnPtr; memcpy((VOID *) new, (VOID *) old, oldSize ); memset((VOID *) (new+numSlot), 0, newSize - oldSize ); - Tcl_Free((char *) old); + ckfree((char *) old); if (slotType == ROW) { masterPtr->masterDataPtr->rowPtr = new ; masterPtr->masterDataPtr->rowSpace = newNumSlot ; @@ -2405,14 +2405,14 @@ DestroyGrid(memPtr) if (gridPtr->masterDataPtr != NULL) { if (gridPtr->masterDataPtr->rowPtr != NULL) { - Tcl_Free((char *) gridPtr->masterDataPtr -> rowPtr); + ckfree((char *) gridPtr->masterDataPtr -> rowPtr); } if (gridPtr->masterDataPtr->columnPtr != NULL) { - Tcl_Free((char *) gridPtr->masterDataPtr -> columnPtr); + ckfree((char *) gridPtr->masterDataPtr -> columnPtr); } - Tcl_Free((char *) gridPtr->masterDataPtr); + ckfree((char *) gridPtr->masterDataPtr); } - Tcl_Free((char *) gridPtr); + ckfree((char *) gridPtr); } /* @@ -2536,7 +2536,7 @@ ConfigureSlaves(interp, tkwin, objc, objv) char *lastWindow; /* use this window to base current * Row/col on */ int numSkip; /* number of 'x' found */ - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "-column", "-columnspan", "-in", "-ipadx", "-ipady", "-padx", "-pady", "-row", "-rowspan", "-sticky", (char *) NULL }; @@ -2554,7 +2554,7 @@ ConfigureSlaves(interp, tkwin, objc, objv) firstChar = 0; for (numWindows = i = 0; i < objc; i++) { prevChar = firstChar; - string = Tcl_GetStringFromObj(objv[i], &length); + string = Tcl_GetStringFromObj(objv[i], (int *) &length); firstChar = string[0]; if (firstChar == '.') { diff --git a/generic/tkImage.c b/generic/tkImage.c index b629816..9a31077 100644 --- a/generic/tkImage.c +++ b/generic/tkImage.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkImage.c,v 1.12 2001/04/12 12:30:42 dkf Exp $ + * RCS: @(#) $Id: tkImage.c,v 1.12.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -160,7 +160,7 @@ Tk_ImageObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument strings. */ { - static char *imageOptions[] = { + static CONST char *imageOptions[] = { "create", "delete", "height", "inuse", "names", "type", "types", "width", (char *) NULL }; @@ -368,12 +368,8 @@ Tk_ImageObjCmd(clientData, interp, objc, objv) return TCL_ERROR; } masterPtr = (ImageMaster *) Tcl_GetHashValue(hPtr); - if (masterPtr->typePtr != NULL) { - for (imagePtr = masterPtr->instancePtr; imagePtr != NULL; - imagePtr = imagePtr->nextPtr) { - count = 1; - break; - } + if (masterPtr->typePtr != NULL && masterPtr->instancePtr != NULL) { + count = 1; } Tcl_SetBooleanObj(Tcl_GetObjResult(interp), count); break; diff --git a/generic/tkImgBmap.c b/generic/tkImgBmap.c index 8f03e74..a4ad503 100644 --- a/generic/tkImgBmap.c +++ b/generic/tkImgBmap.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkImgBmap.c,v 1.12 2001/07/14 15:53:53 drh Exp $ + * RCS: @(#) $Id: tkImgBmap.c,v 1.12.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -498,7 +498,8 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, int *hotXPtr, *hotYPtr; /* Position of hot spot or -1,-1. */ { int width, height, numBytes, hotX, hotY; - char *p, *end, *expandedFileName; + CONST char *expandedFileName; + char *p, *end; ParseInfo pi; char *data = NULL; Tcl_DString buffer; @@ -761,7 +762,7 @@ ImgBmapCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *bmapOptions[] = {"cget", "configure", (char *) NULL}; + static CONST char *bmapOptions[] = {"cget", "configure", (char *) NULL}; BitmapMaster *masterPtr = (BitmapMaster *) clientData; int code, index; diff --git a/generic/tkImgGIF.c b/generic/tkImgGIF.c index 108c7ad..089aacb 100644 --- a/generic/tkImgGIF.c +++ b/generic/tkImgGIF.c @@ -29,7 +29,7 @@ * | provided "as is" without express or implied warranty. | * +-------------------------------------------------------------------+ * - * RCS: @(#) $Id: tkImgGIF.c,v 1.18 2001/09/14 20:35:58 andreas_kupries Exp $ + * RCS: @(#) $Id: tkImgGIF.c,v 1.18.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ /* @@ -249,7 +249,7 @@ FileReadGIF(interp, chan, fileName, format, imageHandle, destX, destY, int bitPixel; unsigned char colorMap[MAXCOLORMAPSIZE][4]; int transparent = -1; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "-index", NULL }; diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c index 2a9d1df..1846990 100644 --- a/generic/tkImgPhoto.c +++ b/generic/tkImgPhoto.c @@ -7,6 +7,7 @@ * * Copyright (c) 1994 The Australian National University. * Copyright (c) 1994-1997 Sun Microsystems, Inc. + * Copyright (c) 2002 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -15,7 +16,7 @@ * Department of Computer Science, * Australian National University. * - * RCS: @(#) $Id: tkImgPhoto.c,v 1.24 2001/09/14 20:35:58 andreas_kupries Exp $ + * RCS: @(#) $Id: tkImgPhoto.c,v 1.24.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -563,13 +564,14 @@ ImgPhotoCmd(clientData, interp, objc, objv) Tcl_Obj *CONST objv[]; /* Argument objects. */ { int oldformat = 0; - static char *photoOptions[] = { + static CONST char *photoOptions[] = { "blank", "cget", "configure", "copy", "data", "get", "put", - "read", "redither", "write", (char *) NULL + "read", "redither", "transparency", "write", (char *) NULL }; enum options { PHOTO_BLANK, PHOTO_CGET, PHOTO_CONFIGURE, PHOTO_COPY, PHOTO_DATA, - PHOTO_GET, PHOTO_PUT, PHOTO_READ, PHOTO_REDITHER, PHOTO_WRITE + PHOTO_GET, PHOTO_PUT, PHOTO_READ, PHOTO_REDITHER, PHOTO_TRANS, + PHOTO_WRITE }; PhotoMaster *masterPtr = (PhotoMaster *) clientData; @@ -578,8 +580,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) int dataWidth, dataHeight; struct SubcommandOptions options; int listArgc; - char **listArgv; - char **srcArgv; + CONST char **listArgv; + CONST char **srcArgv; unsigned char *pixelPtr; Tk_PhotoImageBlock block; Tk_Window tkwin; @@ -607,8 +609,9 @@ ImgPhotoCmd(clientData, interp, objc, objv) } return proc(clientData, interp, objc, objv); } + switch ((enum options) index) { - case PHOTO_BLANK: { + case PHOTO_BLANK: /* * photo blank command - just call Tk_PhotoBlank. */ @@ -620,9 +623,10 @@ ImgPhotoCmd(clientData, interp, objc, objv) return TCL_ERROR; } break; - } - case PHOTO_CGET: { + + case PHOTO_CGET: { char *arg; + if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "option"); return TCL_ERROR; @@ -643,8 +647,9 @@ ImgPhotoCmd(clientData, interp, objc, objv) Tk_ConfigureValue(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, Tcl_GetString(objv[2]), 0); break; - } - case PHOTO_CONFIGURE: { + } + + case PHOTO_CONFIGURE: /* * photo configure command - handle this in the standard way. */ @@ -676,39 +681,38 @@ ImgPhotoCmd(clientData, interp, objc, objv) return TCL_OK; } if (objc == 3) { - char *arg = Tcl_GetStringFromObj(objv[2], (int *) &length); - if (!strncmp(arg, "-data", length)) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - "-data {} {} {}", (char *) NULL); - if (masterPtr->dataString) { - Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp), - masterPtr->dataString); - } else { + char *arg = Tcl_GetStringFromObj(objv[2], (int *) &length); + if (!strncmp(arg, "-data", length)) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - " {}", (char *) NULL); - } - return TCL_OK; - } else if (!strncmp(arg, "-format", length)) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - "-format {} {} {}", (char *) NULL); - if (masterPtr->format) { - Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp), - masterPtr->format); - } else { + "-data {} {} {}", (char *) NULL); + if (masterPtr->dataString) { + Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp), + masterPtr->dataString); + } else { + Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), + " {}", (char *) NULL); + } + return TCL_OK; + } else if (!strncmp(arg, "-format", length)) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - " {}", (char *) NULL); + "-format {} {} {}", (char *) NULL); + if (masterPtr->format) { + Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp), + masterPtr->format); + } else { + Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), + " {}", (char *) NULL); + } + return TCL_OK; + } else { + return Tk_ConfigureInfo(interp, Tk_MainWindow(interp), + configSpecs, (char *) masterPtr, arg, 0); } - return TCL_OK; - } else { - return Tk_ConfigureInfo(interp, Tk_MainWindow(interp), - configSpecs, (char *) masterPtr, arg, 0); - } } return ImgPhotoConfigureMaster(interp, masterPtr, objc-2, objv+2, TK_CONFIG_ARGV_ONLY); - break; - } - case PHOTO_COPY: { + + case PHOTO_COPY: /* * photo copy command - first parse options. */ @@ -734,7 +738,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) * Check the values given for the -from option. */ - if ((srcHandle = Tk_FindPhoto(interp, Tcl_GetString(options.name))) == NULL) { + srcHandle = Tk_FindPhoto(interp, Tcl_GetString(options.name)); + if (srcHandle == NULL) { Tcl_AppendResult(interp, "image \"", Tcl_GetString(options.name), "\" doesn't", " exist or is not a photo image", (char *) NULL); @@ -753,11 +758,11 @@ ImgPhotoCmd(clientData, interp, objc, objv) * Fill in default values for unspecified parameters. */ - if (((options.options & OPT_FROM) == 0) || (options.fromX2 < 0)) { + if (!(options.options & OPT_FROM) || (options.fromX2 < 0)) { options.fromX2 = block.width; options.fromY2 = block.height; } - if (((options.options & OPT_TO) == 0) || (options.toX2 < 0)) { + if (!(options.options & OPT_TO) || (options.toX2 < 0)) { width = options.fromX2 - options.fromX; if (options.subsampleX > 0) { width = (width + options.subsampleX - 1) / options.subsampleX; @@ -794,7 +799,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) */ block.pixelPtr += options.fromX * block.pixelSize - + options.fromY * block.pitch; + + options.fromY * block.pitch; block.width = options.fromX2 - options.fromX; block.height = options.fromY2 - options.fromY; Tk_PhotoPutZoomedBlock((Tk_PhotoHandle) masterPtr, &block, @@ -803,8 +808,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) options.subsampleX, options.subsampleY); break; - } - case PHOTO_DATA: { + + case PHOTO_DATA: { char *data; /* @@ -877,7 +882,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) data = ImgGetPhoto(masterPtr, &block, &options); - result = ((int (*) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *formatString, + result = ((int (*) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Obj *formatString, Tk_PhotoImageBlock *blockPtr, VOID *dummy))) stringWriteProc) (interp, options.format, &block, (VOID *) NULL); if (options.background) { @@ -889,6 +894,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) return result; break; } + case PHOTO_GET: { /* * photo get command - first parse and check parameters. @@ -921,7 +927,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) Tcl_AppendResult(interp, string, (char *) NULL); break; } - case PHOTO_PUT: { + + case PHOTO_PUT: /* * photo put command - first parse the options and colors specified. */ @@ -930,7 +937,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) memset((VOID *) &options, 0, sizeof(options)); options.name = NULL; if (ParseSubcommandOptions(&options, interp, OPT_TO|OPT_FORMAT, - &index, objc, objv) != TCL_OK) { + &index, objc, objv) != TCL_OK) { return TCL_ERROR; } if ((options.name == NULL) || (index < objc)) { @@ -941,8 +948,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) if (MatchStringFormat(interp, options.name ? objv[2]:NULL, options.format, &imageFormat, &imageWidth, &imageHeight, &oldformat) == TCL_OK) { - Tcl_Obj *format; - Tcl_Obj *data; + Tcl_Obj *format, *data; + if (((options.options & OPT_TO) == 0) || (options.toX2 < 0)) { options.toX2 = options.toX + imageWidth; options.toY2 = options.toY + imageHeight; @@ -963,8 +970,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) } if ((*imageFormat->stringReadProc)(interp, data, format, (Tk_PhotoHandle) masterPtr, - options.toX, options.toY, imageWidth, imageHeight, 0, 0) - != TCL_OK) { + options.toX, options.toY, imageWidth, imageHeight, + 0, 0) != TCL_OK) { return TCL_ERROR; } masterPtr->flags |= IMAGE_CHANGED; @@ -975,8 +982,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) } Tcl_ResetResult(interp); if (Tcl_SplitList(interp, Tcl_GetString(options.name), - &dataHeight, &srcArgv) - != TCL_OK) { + &dataHeight, &srcArgv) != TCL_OK) { return TCL_ERROR; } tkwin = Tk_MainWindow(interp); @@ -990,17 +996,14 @@ ImgPhotoCmd(clientData, interp, objc, objv) } if (y == 0) { dataWidth = listArgc; - pixelPtr = (unsigned char *) ckalloc((unsigned) - dataWidth * dataHeight * 3); + pixelPtr = (unsigned char *) + ckalloc((unsigned) dataWidth * dataHeight * 3); block.pixelPtr = pixelPtr; - } else { - if (listArgc != dataWidth) { - Tcl_AppendResult(interp, "all elements of color list must", - " have the same number of elements", - (char *) NULL); - ckfree((char *) listArgv); - break; - } + } else if (listArgc != dataWidth) { + Tcl_AppendResult(interp, "all elements of color list must", + " have the same number of elements", (char *) NULL); + ckfree((char *) listArgv); + break; } for (x = 0; x < dataWidth; ++x) { if (!XParseColor(Tk_Display(tkwin), Tk_Colormap(tkwin), @@ -1014,8 +1017,9 @@ ImgPhotoCmd(clientData, interp, objc, objv) *pixelPtr++ = color.blue >> 8; } ckfree((char *) listArgv); - if (x < dataWidth) + if (x < dataWidth) { break; + } } ckfree((char *) srcArgv); if (y < dataHeight || dataHeight == 0 || dataWidth == 0) { @@ -1033,7 +1037,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) * copy the block in using Tk_PhotoPutBlock. */ - if (((options.options & OPT_TO) == 0) || (options.toX2 < 0)) { + if (!(options.options & OPT_TO) || (options.toX2 < 0)) { options.toX2 = options.toX + dataWidth; options.toY2 = options.toY + dataHeight; } @@ -1050,13 +1054,14 @@ ImgPhotoCmd(clientData, interp, objc, objv) options.toY2 - options.toY); ckfree((char *) block.pixelPtr); break; - } - case PHOTO_READ: { + + case PHOTO_READ: { + Tcl_Obj *format; + /* * photo read command - first parse the options specified. */ - Tcl_Obj *format; index = 2; memset((VOID *) &options, 0, sizeof(options)); options.name = NULL; @@ -1067,8 +1072,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) return TCL_ERROR; } if ((options.name == NULL) || (index < objc)) { - Tcl_WrongNumArgs(interp, 2, objv, - "fileName ?options?"); + Tcl_WrongNumArgs(interp, 2, objv, "fileName ?options?"); return TCL_ERROR; } @@ -1078,7 +1082,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) if (Tcl_IsSafe(interp)) { Tcl_AppendResult(interp, "can't get image from a file in a", - " safe interpreter", (char *) NULL); + " safe interpreter", (char *) NULL); return TCL_ERROR; } @@ -1103,8 +1107,8 @@ ImgPhotoCmd(clientData, interp, objc, objv) } if (MatchFileFormat(interp, chan, - Tcl_GetString(options.name), options.format, - &imageFormat, &imageWidth, &imageHeight, &oldformat) != TCL_OK) { + Tcl_GetString(options.name), options.format, &imageFormat, + &imageWidth, &imageHeight, &oldformat) != TCL_OK) { Tcl_Close(NULL, chan); return TCL_ERROR; } @@ -1156,42 +1160,179 @@ ImgPhotoCmd(clientData, interp, objc, objv) } return result; break; - } - case PHOTO_REDITHER: { - if (objc == 2) { + } + + case PHOTO_REDITHER: + if (objc != 2) { + Tcl_WrongNumArgs(interp, 2, objv, (char *) NULL); + return TCL_ERROR; + } + + /* + * Call Dither if any part of the image is not correctly + * dithered at present. + */ + + x = masterPtr->ditherX; + y = masterPtr->ditherY; + if (masterPtr->ditherX != 0) { + Tk_DitherPhoto((Tk_PhotoHandle) masterPtr, x, y, + masterPtr->width - x, 1); + } + if (masterPtr->ditherY < masterPtr->height) { + x = 0; + Tk_DitherPhoto((Tk_PhotoHandle)masterPtr, 0, + masterPtr->ditherY, masterPtr->width, + masterPtr->height - masterPtr->ditherY); + } + + if (y < masterPtr->height) { /* - * Call Dither if any part of the image is not correctly - * dithered at present. + * Tell the core image code that part of the image has changed. */ - x = masterPtr->ditherX; - y = masterPtr->ditherY; - if (masterPtr->ditherX != 0) { - Tk_DitherPhoto((Tk_PhotoHandle) masterPtr, x, y, masterPtr->width - x, 1); + Tk_ImageChanged(masterPtr->tkMaster, x, y, + (masterPtr->width - x), (masterPtr->height - y), + masterPtr->width, masterPtr->height); + } + break; + + case PHOTO_TRANS: { + static CONST char *photoTransOptions[] = { + "get", "set", (char *) NULL + }; + enum transOptions { + PHOTO_TRANS_GET, PHOTO_TRANS_SET + }; + + if (objc < 3) { + Tcl_WrongNumArgs(interp, 2, objv, "option ?arg arg ...?"); + return TCL_ERROR; + } + if (Tcl_GetIndexFromObj(interp, objv[2], photoTransOptions, "option", + 0, &index) != TCL_OK) { + return TCL_ERROR; + } + + switch ((enum transOptions) index) { + case PHOTO_TRANS_GET: { + XRectangle testBox; + TkRegion testRegion; + + if (objc != 5) { + Tcl_WrongNumArgs(interp, 3, objv, "x y"); + return TCL_ERROR; + } + if ((Tcl_GetIntFromObj(interp, objv[3], &x) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[4], &y) != TCL_OK)) { + return TCL_ERROR; + } + if ((x < 0) || (x >= masterPtr->width) + || (y < 0) || (y >= masterPtr->height)) { + Tcl_AppendResult(interp, Tcl_GetString(objv[0]), + " transparency get: coordinates out of range", + (char *) NULL); + return TCL_ERROR; + } + + testBox.x = x; + testBox.y = y; + testBox.width = 1; + testBox.height = 1; + /* What a way to do a test! */ + testRegion = TkCreateRegion(); + TkUnionRectWithRegion(&testBox, testRegion, testRegion); + TkIntersectRegion(testRegion, masterPtr->validRegion, testRegion); + TkClipBox(testRegion, &testBox); + TkDestroyRegion(testRegion); + + Tcl_SetBooleanObj(Tcl_GetObjResult(interp), + (testBox.width==0 && testBox.height==0)); + return TCL_OK; + } + + case PHOTO_TRANS_SET: { + int transFlag; + XRectangle setBox; + + if (objc != 6) { + Tcl_WrongNumArgs(interp, 3, objv, "x y boolean"); + return TCL_ERROR; } - if (masterPtr->ditherY < masterPtr->height) { - x = 0; - Tk_DitherPhoto((Tk_PhotoHandle)masterPtr, 0, masterPtr->ditherY, masterPtr->width, - masterPtr->height - masterPtr->ditherY); + if ((Tcl_GetIntFromObj(interp, objv[3], &x) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[4], &y) != TCL_OK) + || (Tcl_GetBooleanFromObj(interp, objv[5], + &transFlag) != TCL_OK)) { + return TCL_ERROR; + } + if ((x < 0) || (x >= masterPtr->width) + || (y < 0) || (y >= masterPtr->height)) { + Tcl_AppendResult(interp, Tcl_GetString(objv[0]), + " transparency set: coordinates out of range", + (char *) NULL); + return TCL_ERROR; } - if (y < masterPtr->height) { + if (transFlag) { /* - * Tell the core image code that part of the image has changed. + * Make pixel transparent. Do by building a mask for + * all the other pixels in the image and setting the + * validRegion to the intersection of that with the + * old validRegion. There isn't a neater way to do + * this given the limited set of operations available + * in the platform-independent region operations. */ - - Tk_ImageChanged(masterPtr->tkMaster, x, y, - (masterPtr->width - x), (masterPtr->height - y), - masterPtr->width, masterPtr->height); + TkRegion setRegion = TkCreateRegion(); + + if (y > 0) { + setBox.x = 0; + setBox.y = 0; + setBox.width = masterPtr->width; + setBox.height = y; + TkUnionRectWithRegion(&setBox, setRegion, setRegion); + } + if (x > 0) { + setBox.x = 0; + setBox.y = y; + setBox.width = x; + setBox.height = 1; + TkUnionRectWithRegion(&setBox, setRegion, setRegion); + } + if (x < masterPtr->width-1) { + setBox.x = x+1; + setBox.y = y; + setBox.width = masterPtr->width-1 - x; + setBox.height = 1; + TkUnionRectWithRegion(&setBox, setRegion, setRegion); + } + if (y < masterPtr->height-1) { + setBox.x = 0; + setBox.y = y+1; + setBox.width = masterPtr->width; + setBox.height = masterPtr->height-1 - y; + TkUnionRectWithRegion(&setBox, setRegion, setRegion); + } + TkIntersectRegion(masterPtr->validRegion, setRegion, + masterPtr->validRegion); + TkDestroyRegion(setRegion); + } else { + /* + * Make pixel opaque. + */ + setBox.x = x; + setBox.y = y; + setBox.width = 1; + setBox.height = 1; + TkUnionRectWithRegion(&setBox, masterPtr->validRegion, + masterPtr->validRegion); } + } - } else { - Tcl_WrongNumArgs(interp, 2, objv, (char *) NULL); - return TCL_ERROR; } - break; - } - case PHOTO_WRITE: { + return TCL_OK; + } + + case PHOTO_WRITE: { char *data; Tcl_Obj *format; @@ -1201,7 +1342,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) if (Tcl_IsSafe(interp)) { Tcl_AppendResult(interp, "can't write image to a file in a", - " safe interpreter", (char *) NULL); + " safe interpreter", (char *) NULL); return TCL_ERROR; } @@ -1235,7 +1376,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) * Fill in default values for unspecified parameters. */ - if (((options.options & OPT_FROM) == 0) || (options.fromX2 < 0)) { + if (!(options.options & OPT_FROM) || (options.fromX2 < 0)) { options.fromX2 = masterPtr->width; options.fromY2 = masterPtr->height; } @@ -1247,7 +1388,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) matched = 0; for (imageFormat = tsdPtr->formatList; imageFormat != NULL; - imageFormat = imageFormat->nextPtr) { + imageFormat = imageFormat->nextPtr) { if ((options.format == NULL) || (strncasecmp(Tcl_GetString(options.format), imageFormat->name, strlen(imageFormat->name)) == 0)) { @@ -1258,18 +1399,18 @@ ImgPhotoCmd(clientData, interp, objc, objv) } } if (imageFormat == NULL) { - oldformat = 1; - for (imageFormat = tsdPtr->oldFormatList; imageFormat != NULL; - imageFormat = imageFormat->nextPtr) { - if ((options.format == NULL) - || (strncasecmp(Tcl_GetString(options.format), - imageFormat->name, strlen(imageFormat->name)) == 0)) { - matched = 1; - if (imageFormat->fileWriteProc != NULL) { - break; + oldformat = 1; + for (imageFormat = tsdPtr->oldFormatList; imageFormat != NULL; + imageFormat = imageFormat->nextPtr) { + if ((options.format == NULL) + || (strncasecmp(Tcl_GetString(options.format), + imageFormat->name, strlen(imageFormat->name)) == 0)) { + matched = 1; + if (imageFormat->fileWriteProc != NULL) { + break; + } } } - } } if (imageFormat == NULL) { if (options.format == NULL) { @@ -1299,8 +1440,7 @@ ImgPhotoCmd(clientData, interp, objc, objv) format = (Tcl_Obj *) Tcl_GetString(options.format); } result = (*imageFormat->fileWriteProc)(interp, - Tcl_GetString(options.name), - format, &block); + Tcl_GetString(options.name), format, &block); if (options.background) { Tk_FreeColor(options.background); } @@ -1308,10 +1448,9 @@ ImgPhotoCmd(clientData, interp, objc, objv) ckfree(data); } return result; - break; - } } + } return TCL_OK; } @@ -2534,6 +2673,10 @@ ImgPhotoInstanceSetSize(instancePtr) (masterPtr->width > 0) ? masterPtr->width: 1, (masterPtr->height > 0) ? masterPtr->height: 1, instancePtr->visualInfo.depth); + if(!newPixmap) { + panic("Fail to create pixmap with Tk_GetPixmap in ImgPhotoInstanceSetSize.\n"); + return; + } /* * The following is a gross hack needed to properly support colormaps diff --git a/generic/tkInt.decls b/generic/tkInt.decls index 02de437..44d4afe 100644 --- a/generic/tkInt.decls +++ b/generic/tkInt.decls @@ -9,7 +9,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: tkInt.decls,v 1.21.2.2 2001/10/17 07:02:06 wolfsuit Exp $ +# RCS: @(#) $Id: tkInt.decls,v 1.21.2.3 2002/02/05 02:25:15 wolfsuit Exp $ library tk @@ -178,7 +178,8 @@ declare 32 generic { } declare 33 generic { - char * TkGetDefaultScreenName (Tcl_Interp *interp, char *screenName) + CONST char * TkGetDefaultScreenName (Tcl_Interp *interp, \ + CONST char *screenName) } declare 34 generic { @@ -287,7 +288,7 @@ declare 57 generic { } declare 58 generic { - void TkpDisplayWarning (char *msg, char *title) + void TkpDisplayWarning (CONST char *msg, CONST char *title) } declare 59 generic { @@ -328,7 +329,7 @@ declare 67 generic { } declare 68 generic { - TkDisplay * TkpOpenDisplay (char *display_name) + TkDisplay * TkpOpenDisplay (CONST char *display_name) } declare 69 generic { @@ -556,9 +557,10 @@ declare 119 {mac aqua win} { TkRegion src, TkRegion dr_return) } -declare 120 {mac macosx} { - void TkGenerateActivateEvents (TkWindow *winPtr, int active) -} +# removed duplicate from tkIntPlat table +#declare 120 {mac macosx} { +# void TkGenerateActivateEvents (TkWindow *winPtr, int active) +#} declare 121 {mac macosx} { Pixmap TkpCreateNativeBitmap (Display *display, char * source) @@ -568,48 +570,50 @@ declare 122 {mac macosx} { void TkpDefineNativeBitmaps (void) } -declare 123 {mac macosx} { - unsigned long TkpGetMS (void) -} +# removed duplicate from tkIntPlat table +#declare 123 {mac macosx} { +# unsigned long TkpGetMS (void) +#} declare 124 {mac macosx} { Pixmap TkpGetNativeAppBitmap (Display *display, \ CONST char *name, int *width, int *height) } -declare 125 {mac macosx} { - void TkPointerDeadWindow (TkWindow *winPtr) -} - -declare 126 {mac macosx} { - void TkpSetCapture (TkWindow *winPtr) -} - -declare 127 {mac macosx} { - void TkpSetCursor (TkpCursor cursor) -} - -declare 128 {mac macosx} { - void TkpWmSetState (TkWindow *winPtr, int state) -} - -declare 130 {mac macosx} { - Window TkGetTransientMaster (TkWindow *winPtr) -} - -declare 131 {mac macosx} { - int TkGenerateButtonEvent (int x, int y, \ - Window window, unsigned int state) -} - -declare 133 {mac macosx} { - void TkGenWMDestroyEvent (Tk_Window tkwin) -} - -declare 134 {mac macosx} { - void TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \ - int width, int height, int flags) -} +# removed duplicates from tkIntPlat table +#declare 125 {mac macosx} { +# void TkPointerDeadWindow (TkWindow *winPtr) +#} +# +#declare 126 {mac macosx} { +# void TkpSetCapture (TkWindow *winPtr) +#} +# +#declare 127 {mac macosx} { +# void TkpSetCursor (TkpCursor cursor) +#} +# +#declare 128 {mac macosx} { +# void TkpWmSetState (TkWindow *winPtr, int state) +#} +# +#declare 130 {mac macosx} { +# Window TkGetTransientMaster (TkWindow *winPtr) +#} +# +#declare 131 {mac macosx} { +# int TkGenerateButtonEvent (int x, int y, \ +# Window window, unsigned int state) +#} +# +#declare 133 {mac macosx} { +# void TkGenWMDestroyEvent (Tk_Window tkwin) +#} +# +#declare 134 {mac macosx} { +# void TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \ +# int width, int height, int flags) +#} declare 135 generic { void TkpDrawHighlightBorder (Tk_Window tkwin, GC fgGC, GC bgGC, \ @@ -637,6 +641,10 @@ declare 140 generic { TkRegion TkPhotoGetValidRegion (Tk_PhotoHandle handle) } +declare 141 generic { + TkWindow ** TkWmStackorderToplevel(TkWindow *parentPtr) +} + ############################################################################## # Define the platform specific internal Tcl interface. These functions are @@ -833,13 +841,14 @@ declare 0 mac { void TkGenerateActivateEvents (TkWindow *winPtr, int active) } -declare 1 mac { - Pixmap TkpCreateNativeBitmap (Display *display, char * source) -} - -declare 2 mac { - void TkpDefineNativeBitmaps (void) -} +# removed duplicates from tkInt table +#declare 1 {mac macosx} { +# Pixmap TkpCreateNativeBitmap (Display *display, char * source) +#} +# +#declare 2 {mac macosx} { +# void TkpDefineNativeBitmaps (void) +#} declare 3 mac { unsigned long TkpGetMS (void) @@ -878,10 +887,11 @@ declare 16 mac { void TkGenWMDestroyEvent (Tk_Window tkwin) } -declare 17 mac { - void TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \ - int width, int height, int flags) -} +# removed duplicate from tkPlat table (tk.decls) +#declare 17 mac { +# void TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \ +# int width, int height, int flags) +#} declare 18 mac { unsigned int TkMacButtonKeyState (void) @@ -891,9 +901,10 @@ declare 19 mac { void TkMacClearMenubarActive (void) } -declare 20 mac { - int TkMacConvertEvent (EventRecord *eventPtr) -} +# removed duplicate from tkPlat table (tk.decls) +#declare 20 mac { +# int TkMacConvertEvent (EventRecord *eventPtr) +#} declare 21 mac { int TkMacDispatchMenuEvent (int menuID, int index) @@ -903,17 +914,19 @@ declare 22 mac { void TkMacInstallCursor (int resizeOverride) } -declare 23 mac { - int TkMacConvertTkEvent (EventRecord *eventPtr, Window window) -} +# removed duplicate from tkPlat table (tk.decls) +#declare 23 mac { +# int TkMacConvertTkEvent (EventRecord *eventPtr, Window window) +#} declare 24 mac { void TkMacHandleTearoffMenu (void) } -declare 26 mac { - void TkMacInvalClipRgns (TkWindow *winPtr) -} +# removed duplicate from tkPlat table (tk.decls) +#declare 26 mac { +# void TkMacInvalClipRgns (TkWindow *winPtr) +#} declare 27 mac { void TkMacDoHLEvent (EventRecord *theEvent) @@ -923,9 +936,10 @@ declare 29 mac { Time TkMacGenerateTime (void) } -declare 30 mac { - GWorldPtr TkMacGetDrawablePort (Drawable drawable) -} +# removed duplicate from tkPlat table (tk.decls) +#declare 30 mac { +# GWorldPtr TkMacGetDrawablePort (Drawable drawable) +#} declare 31 mac { TkWindow * TkMacGetScrollbarGrowWindow (TkWindow *winPtr) @@ -943,17 +957,18 @@ declare 34 mac { void TkMacHandleMenuSelect (long mResult, int optionKeyPressed) } -declare 35 mac { - int TkMacHaveAppearance (void) -} - -declare 36 mac { - void TkMacInitAppleEvents (Tcl_Interp *interp) -} - -declare 37 mac { - void TkMacInitMenus (Tcl_Interp *interp) -} +# removed duplicates from tkPlat table (tk.decls) +#declare 35 mac { +# int TkMacHaveAppearance (void) +#} +# +#declare 36 mac { +# void TkMacInitAppleEvents (Tcl_Interp *interp) +#} +# +#declare 37 mac { +# void TkMacInitMenus (Tcl_Interp *interp) +#} declare 38 mac { void TkMacInvalidateWindow (MacDrawable *macWin, int flag) @@ -1056,6 +1071,10 @@ declare 65 mac { void TkMacPreprocessMenu (void) } +declare 66 mac { + int TkpIsWindowFloating (WindowRef window) +} + ######################## # Mac OS X specific functions @@ -1252,6 +1271,27 @@ declare 47 aqua { Tk_Window TkMacOSXGetCapture (void) } +declare 49 aqua { + Window TkGetTransientMaster (TkWindow *winPtr) +} + +declare 50 aqua { + int TkGenerateButtonEvent (int x, int y, \ + Window window, unsigned int state) +} + +declare 51 aqua { + void TkGenWMDestroyEvent (Tk_Window tkwin) +} + +declare 52 aqua { + void TkGenWMConfigureEvent (Tk_Window tkwin, int x, int y, \ + int width, int height, int flags) +} + +declare 53 aqua { + unsigned long TkpGetMS (void) +} ############################################################################## @@ -1545,7 +1585,7 @@ declare 61 win { } declare 62 win { - void XSetCommand (Display* d, Window w, char** c, int i) + void XSetCommand (Display* d, Window w, CONST char** c, int i) } declare 63 win { diff --git a/generic/tkInt.h b/generic/tkInt.h index 440c339..4fd3b46 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: $Id: tkInt.h,v 1.40 2001/09/26 21:36:19 pspjuth Exp $ + * RCS: $Id: tkInt.h,v 1.40.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #ifndef _TKINT @@ -1035,8 +1035,8 @@ EXTERN int Tk_WinfoObjCmd _ANSI_ARGS_((ClientData clientData, EXTERN int Tk_WmCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int argc, char **argv)); -void TkConsolePrint _ANSI_ARGS_((Tcl_Interp *interp, - int devId, char *buffer, long size)); +EXTERN void TkConsolePrint _ANSI_ARGS_((Tcl_Interp *interp, + int devId, CONST char *buffer, long size)); EXTERN void TkEventInit _ANSI_ARGS_((void)); diff --git a/generic/tkIntDecls.h b/generic/tkIntDecls.h index 98f871e..a410c00 100644 --- a/generic/tkIntDecls.h +++ b/generic/tkIntDecls.h @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkIntDecls.h,v 1.13.2.3 2001/11/11 17:58:53 wolfsuit Exp $ + * RCS: @(#) $Id: tkIntDecls.h,v 1.13.2.4 2002/02/05 02:25:15 wolfsuit Exp $ */ #ifndef _TKINTDECLS @@ -141,8 +141,8 @@ EXTERN void TkGetButtPoints _ANSI_ARGS_((double p1[], EXTERN TkCursor * TkGetCursorByName _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_Uid string)); /* 33 */ -EXTERN char * TkGetDefaultScreenName _ANSI_ARGS_(( - Tcl_Interp * interp, char * screenName)); +EXTERN CONST char * TkGetDefaultScreenName _ANSI_ARGS_(( + Tcl_Interp * interp, CONST char * screenName)); /* 34 */ EXTERN TkDisplay * TkGetDisplay _ANSI_ARGS_((Display * display)); /* 35 */ @@ -214,8 +214,8 @@ EXTERN void TkpCloseDisplay _ANSI_ARGS_((TkDisplay * dispPtr)); EXTERN void TkpClaimFocus _ANSI_ARGS_((TkWindow * topLevelPtr, int force)); /* 58 */ -EXTERN void TkpDisplayWarning _ANSI_ARGS_((char * msg, - char * title)); +EXTERN void TkpDisplayWarning _ANSI_ARGS_((CONST char * msg, + CONST char * title)); /* 59 */ EXTERN void TkpGetAppName _ANSI_ARGS_((Tcl_Interp * interp, Tcl_DString * name)); @@ -241,7 +241,8 @@ EXTERN Window TkpMakeWindow _ANSI_ARGS_((TkWindow * winPtr, EXTERN void TkpMenuNotifyToplevelCreate _ANSI_ARGS_(( Tcl_Interp * interp1, char * menuName)); /* 68 */ -EXTERN TkDisplay * TkpOpenDisplay _ANSI_ARGS_((char * display_name)); +EXTERN TkDisplay * TkpOpenDisplay _ANSI_ARGS_(( + CONST char * display_name)); /* 69 */ EXTERN int TkPointerEvent _ANSI_ARGS_((XEvent * eventPtr, TkWindow * winPtr)); @@ -469,16 +470,7 @@ EXTERN void TkUnionRectWithRegion _ANSI_ARGS_((XRectangle* rect, EXTERN void TkUnionRectWithRegion _ANSI_ARGS_((XRectangle* rect, TkRegion src, TkRegion dr_return)); #endif /* MAC_OSX_TK */ -#ifdef MAC_TCL -/* 120 */ -EXTERN void TkGenerateActivateEvents _ANSI_ARGS_(( - TkWindow * winPtr, int active)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 120 */ -EXTERN void TkGenerateActivateEvents _ANSI_ARGS_(( - TkWindow * winPtr, int active)); -#endif /* MAC_OSX_TCL */ +/* Slot 120 is reserved */ #ifdef MAC_TCL /* 121 */ EXTERN Pixmap TkpCreateNativeBitmap _ANSI_ARGS_((Display * display, @@ -497,14 +489,7 @@ EXTERN void TkpDefineNativeBitmaps _ANSI_ARGS_((void)); /* 122 */ EXTERN void TkpDefineNativeBitmaps _ANSI_ARGS_((void)); #endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 123 */ -EXTERN unsigned long TkpGetMS _ANSI_ARGS_((void)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 123 */ -EXTERN unsigned long TkpGetMS _ANSI_ARGS_((void)); -#endif /* MAC_OSX_TCL */ +/* Slot 123 is reserved */ #ifdef MAC_TCL /* 124 */ EXTERN Pixmap TkpGetNativeAppBitmap _ANSI_ARGS_((Display * display, @@ -515,80 +500,16 @@ EXTERN Pixmap TkpGetNativeAppBitmap _ANSI_ARGS_((Display * display, EXTERN Pixmap TkpGetNativeAppBitmap _ANSI_ARGS_((Display * display, CONST char * name, int * width, int * height)); #endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 125 */ -EXTERN void TkPointerDeadWindow _ANSI_ARGS_((TkWindow * winPtr)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 125 */ -EXTERN void TkPointerDeadWindow _ANSI_ARGS_((TkWindow * winPtr)); -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 126 */ -EXTERN void TkpSetCapture _ANSI_ARGS_((TkWindow * winPtr)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 126 */ -EXTERN void TkpSetCapture _ANSI_ARGS_((TkWindow * winPtr)); -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 127 */ -EXTERN void TkpSetCursor _ANSI_ARGS_((TkpCursor cursor)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 127 */ -EXTERN void TkpSetCursor _ANSI_ARGS_((TkpCursor cursor)); -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 128 */ -EXTERN void TkpWmSetState _ANSI_ARGS_((TkWindow * winPtr, - int state)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 128 */ -EXTERN void TkpWmSetState _ANSI_ARGS_((TkWindow * winPtr, - int state)); -#endif /* MAC_OSX_TCL */ +/* Slot 125 is reserved */ +/* Slot 126 is reserved */ +/* Slot 127 is reserved */ +/* Slot 128 is reserved */ /* Slot 129 is reserved */ -#ifdef MAC_TCL -/* 130 */ -EXTERN Window TkGetTransientMaster _ANSI_ARGS_((TkWindow * winPtr)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 130 */ -EXTERN Window TkGetTransientMaster _ANSI_ARGS_((TkWindow * winPtr)); -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 131 */ -EXTERN int TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, - Window window, unsigned int state)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 131 */ -EXTERN int TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, - Window window, unsigned int state)); -#endif /* MAC_OSX_TCL */ +/* Slot 130 is reserved */ +/* Slot 131 is reserved */ /* Slot 132 is reserved */ -#ifdef MAC_TCL -/* 133 */ -EXTERN void TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 133 */ -EXTERN void TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin)); -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -/* 134 */ -EXTERN void TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, - int x, int y, int width, int height, - int flags)); -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -/* 134 */ -EXTERN void TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, - int x, int y, int width, int height, - int flags)); -#endif /* MAC_OSX_TCL */ +/* Slot 133 is reserved */ +/* Slot 134 is reserved */ /* 135 */ EXTERN void TkpDrawHighlightBorder _ANSI_ARGS_((Tk_Window tkwin, GC fgGC, GC bgGC, int highlightWidth, @@ -607,6 +528,9 @@ EXTERN void TkpInitKeymapInfo _ANSI_ARGS_((TkDisplay * dispPtr)); /* 140 */ EXTERN TkRegion TkPhotoGetValidRegion _ANSI_ARGS_(( Tk_PhotoHandle handle)); +/* 141 */ +EXTERN TkWindow ** TkWmStackorderToplevel _ANSI_ARGS_(( + TkWindow * parentPtr)); typedef struct TkIntStubs { int magic; @@ -645,7 +569,7 @@ typedef struct TkIntStubs { char * (*tkGetBitmapData) _ANSI_ARGS_((Tcl_Interp * interp, char * string, char * fileName, int * widthPtr, int * heightPtr, int * hotXPtr, int * hotYPtr)); /* 30 */ void (*tkGetButtPoints) _ANSI_ARGS_((double p1[], double p2[], double width, int project, double m1[], double m2[])); /* 31 */ TkCursor * (*tkGetCursorByName) _ANSI_ARGS_((Tcl_Interp * interp, Tk_Window tkwin, Tk_Uid string)); /* 32 */ - char * (*tkGetDefaultScreenName) _ANSI_ARGS_((Tcl_Interp * interp, char * screenName)); /* 33 */ + CONST char * (*tkGetDefaultScreenName) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * screenName)); /* 33 */ TkDisplay * (*tkGetDisplay) _ANSI_ARGS_((Display * display)); /* 34 */ int (*tkGetDisplayOf) _ANSI_ARGS_((Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[], Tk_Window * tkwinPtr)); /* 35 */ TkWindow * (*tkGetFocusWin) _ANSI_ARGS_((TkWindow * winPtr)); /* 36 */ @@ -670,7 +594,7 @@ typedef struct TkIntStubs { int (*tkpChangeFocus) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 55 */ void (*tkpCloseDisplay) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 56 */ void (*tkpClaimFocus) _ANSI_ARGS_((TkWindow * topLevelPtr, int force)); /* 57 */ - void (*tkpDisplayWarning) _ANSI_ARGS_((char * msg, char * title)); /* 58 */ + void (*tkpDisplayWarning) _ANSI_ARGS_((CONST char * msg, CONST char * title)); /* 58 */ void (*tkpGetAppName) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_DString * name)); /* 59 */ TkWindow * (*tkpGetOtherWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 60 */ TkWindow * (*tkpGetWrapperWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 61 */ @@ -680,7 +604,7 @@ typedef struct TkIntStubs { void (*tkpMakeMenuWindow) _ANSI_ARGS_((Tk_Window tkwin, int transient)); /* 65 */ Window (*tkpMakeWindow) _ANSI_ARGS_((TkWindow * winPtr, Window parent)); /* 66 */ void (*tkpMenuNotifyToplevelCreate) _ANSI_ARGS_((Tcl_Interp * interp1, char * menuName)); /* 67 */ - TkDisplay * (*tkpOpenDisplay) _ANSI_ARGS_((char * display_name)); /* 68 */ + TkDisplay * (*tkpOpenDisplay) _ANSI_ARGS_((CONST char * display_name)); /* 68 */ int (*tkPointerEvent) _ANSI_ARGS_((XEvent * eventPtr, TkWindow * winPtr)); /* 69 */ int (*tkPolygonToArea) _ANSI_ARGS_((double * polyPtr, int numPoints, double * rectPtr)); /* 70 */ double (*tkPolygonToPoint) _ANSI_ARGS_((double * polyPtr, int numPoints, double * pointPtr)); /* 71 */ @@ -809,18 +733,7 @@ typedef struct TkIntStubs { #ifdef MAC_OSX_TK void (*tkUnionRectWithRegion) _ANSI_ARGS_((XRectangle* rect, TkRegion src, TkRegion dr_return)); /* 119 */ #endif /* MAC_OSX_TK */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved120; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved120; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 120 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 120 */ -#endif /* MAC_OSX_TCL */ #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ void *reserved121; #endif /* UNIX */ @@ -845,18 +758,7 @@ typedef struct TkIntStubs { #ifdef MAC_OSX_TCL void (*tkpDefineNativeBitmaps) _ANSI_ARGS_((void)); /* 122 */ #endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved123; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved123; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 123 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 123 */ -#endif /* MAC_OSX_TCL */ #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ void *reserved124; #endif /* UNIX */ @@ -869,110 +771,23 @@ typedef struct TkIntStubs { #ifdef MAC_OSX_TCL Pixmap (*tkpGetNativeAppBitmap) _ANSI_ARGS_((Display * display, CONST char * name, int * width, int * height)); /* 124 */ #endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved125; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved125; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 125 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 125 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved126; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved126; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkpSetCapture) _ANSI_ARGS_((TkWindow * winPtr)); /* 126 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkpSetCapture) _ANSI_ARGS_((TkWindow * winPtr)); /* 126 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved127; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved127; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkpSetCursor) _ANSI_ARGS_((TkpCursor cursor)); /* 127 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkpSetCursor) _ANSI_ARGS_((TkpCursor cursor)); /* 127 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved128; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved128; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkpWmSetState) _ANSI_ARGS_((TkWindow * winPtr, int state)); /* 128 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkpWmSetState) _ANSI_ARGS_((TkWindow * winPtr, int state)); /* 128 */ -#endif /* MAC_OSX_TCL */ void *reserved129; -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ void *reserved130; -#endif /* UNIX */ -#ifdef __WIN32__ - void *reserved130; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - Window (*tkGetTransientMaster) _ANSI_ARGS_((TkWindow * winPtr)); /* 130 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - Window (*tkGetTransientMaster) _ANSI_ARGS_((TkWindow * winPtr)); /* 130 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved131; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved131; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - int (*tkGenerateButtonEvent) _ANSI_ARGS_((int x, int y, Window window, unsigned int state)); /* 131 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - int (*tkGenerateButtonEvent) _ANSI_ARGS_((int x, int y, Window window, unsigned int state)); /* 131 */ -#endif /* MAC_OSX_TCL */ void *reserved132; -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved133; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved133; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkGenWMDestroyEvent) _ANSI_ARGS_((Tk_Window tkwin)); /* 133 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkGenWMDestroyEvent) _ANSI_ARGS_((Tk_Window tkwin)); /* 133 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - void *reserved134; -#endif /* UNIX */ -#ifdef __WIN32__ void *reserved134; -#endif /* __WIN32__ */ -#ifdef MAC_TCL - void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 134 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 134 */ -#endif /* MAC_OSX_TCL */ void (*tkpDrawHighlightBorder) _ANSI_ARGS_((Tk_Window tkwin, GC fgGC, GC bgGC, int highlightWidth, Drawable drawable)); /* 135 */ void (*tkSetFocusWin) _ANSI_ARGS_((TkWindow * winPtr, int force)); /* 136 */ void (*tkpSetKeycodeAndState) _ANSI_ARGS_((Tk_Window tkwin, KeySym keySym, XEvent * eventPtr)); /* 137 */ KeySym (*tkpGetKeySym) _ANSI_ARGS_((TkDisplay * dispPtr, XEvent * eventPtr)); /* 138 */ void (*tkpInitKeymapInfo) _ANSI_ARGS_((TkDisplay * dispPtr)); /* 139 */ TkRegion (*tkPhotoGetValidRegion) _ANSI_ARGS_((Tk_PhotoHandle handle)); /* 140 */ + TkWindow ** (*tkWmStackorderToplevel) _ANSI_ARGS_((TkWindow * parentPtr)); /* 141 */ } TkIntStubs; #ifdef __cplusplus @@ -1564,18 +1379,7 @@ extern TkIntStubs *tkIntStubsPtr; (tkIntStubsPtr->tkUnionRectWithRegion) /* 119 */ #endif #endif /* MAC_OSX_TK */ -#ifdef MAC_TCL -#ifndef TkGenerateActivateEvents -#define TkGenerateActivateEvents \ - (tkIntStubsPtr->tkGenerateActivateEvents) /* 120 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkGenerateActivateEvents -#define TkGenerateActivateEvents \ - (tkIntStubsPtr->tkGenerateActivateEvents) /* 120 */ -#endif -#endif /* MAC_OSX_TCL */ +/* Slot 120 is reserved */ #ifdef MAC_TCL #ifndef TkpCreateNativeBitmap #define TkpCreateNativeBitmap \ @@ -1600,18 +1404,7 @@ extern TkIntStubs *tkIntStubsPtr; (tkIntStubsPtr->tkpDefineNativeBitmaps) /* 122 */ #endif #endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkpGetMS -#define TkpGetMS \ - (tkIntStubsPtr->tkpGetMS) /* 123 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkpGetMS -#define TkpGetMS \ - (tkIntStubsPtr->tkpGetMS) /* 123 */ -#endif -#endif /* MAC_OSX_TCL */ +/* Slot 123 is reserved */ #ifdef MAC_TCL #ifndef TkpGetNativeAppBitmap #define TkpGetNativeAppBitmap \ @@ -1624,104 +1417,16 @@ extern TkIntStubs *tkIntStubsPtr; (tkIntStubsPtr->tkpGetNativeAppBitmap) /* 124 */ #endif #endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkPointerDeadWindow -#define TkPointerDeadWindow \ - (tkIntStubsPtr->tkPointerDeadWindow) /* 125 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkPointerDeadWindow -#define TkPointerDeadWindow \ - (tkIntStubsPtr->tkPointerDeadWindow) /* 125 */ -#endif -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkpSetCapture -#define TkpSetCapture \ - (tkIntStubsPtr->tkpSetCapture) /* 126 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkpSetCapture -#define TkpSetCapture \ - (tkIntStubsPtr->tkpSetCapture) /* 126 */ -#endif -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkpSetCursor -#define TkpSetCursor \ - (tkIntStubsPtr->tkpSetCursor) /* 127 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkpSetCursor -#define TkpSetCursor \ - (tkIntStubsPtr->tkpSetCursor) /* 127 */ -#endif -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkpWmSetState -#define TkpWmSetState \ - (tkIntStubsPtr->tkpWmSetState) /* 128 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkpWmSetState -#define TkpWmSetState \ - (tkIntStubsPtr->tkpWmSetState) /* 128 */ -#endif -#endif /* MAC_OSX_TCL */ +/* Slot 125 is reserved */ +/* Slot 126 is reserved */ +/* Slot 127 is reserved */ +/* Slot 128 is reserved */ /* Slot 129 is reserved */ -#ifdef MAC_TCL -#ifndef TkGetTransientMaster -#define TkGetTransientMaster \ - (tkIntStubsPtr->tkGetTransientMaster) /* 130 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkGetTransientMaster -#define TkGetTransientMaster \ - (tkIntStubsPtr->tkGetTransientMaster) /* 130 */ -#endif -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkGenerateButtonEvent -#define TkGenerateButtonEvent \ - (tkIntStubsPtr->tkGenerateButtonEvent) /* 131 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkGenerateButtonEvent -#define TkGenerateButtonEvent \ - (tkIntStubsPtr->tkGenerateButtonEvent) /* 131 */ -#endif -#endif /* MAC_OSX_TCL */ +/* Slot 130 is reserved */ +/* Slot 131 is reserved */ /* Slot 132 is reserved */ -#ifdef MAC_TCL -#ifndef TkGenWMDestroyEvent -#define TkGenWMDestroyEvent \ - (tkIntStubsPtr->tkGenWMDestroyEvent) /* 133 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkGenWMDestroyEvent -#define TkGenWMDestroyEvent \ - (tkIntStubsPtr->tkGenWMDestroyEvent) /* 133 */ -#endif -#endif /* MAC_OSX_TCL */ -#ifdef MAC_TCL -#ifndef TkGenWMConfigureEvent -#define TkGenWMConfigureEvent \ - (tkIntStubsPtr->tkGenWMConfigureEvent) /* 134 */ -#endif -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL -#ifndef TkGenWMConfigureEvent -#define TkGenWMConfigureEvent \ - (tkIntStubsPtr->tkGenWMConfigureEvent) /* 134 */ -#endif -#endif /* MAC_OSX_TCL */ +/* Slot 133 is reserved */ +/* Slot 134 is reserved */ #ifndef TkpDrawHighlightBorder #define TkpDrawHighlightBorder \ (tkIntStubsPtr->tkpDrawHighlightBorder) /* 135 */ @@ -1746,6 +1451,10 @@ extern TkIntStubs *tkIntStubsPtr; #define TkPhotoGetValidRegion \ (tkIntStubsPtr->tkPhotoGetValidRegion) /* 140 */ #endif +#ifndef TkWmStackorderToplevel +#define TkWmStackorderToplevel \ + (tkIntStubsPtr->tkWmStackorderToplevel) /* 141 */ +#endif #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ diff --git a/generic/tkIntPlatDecls.h b/generic/tkIntPlatDecls.h index 204b1f3..baa4c6a 100644 --- a/generic/tkIntPlatDecls.h +++ b/generic/tkIntPlatDecls.h @@ -9,7 +9,7 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * - * RCS: @(#) $Id: tkIntPlatDecls.h,v 1.9.2.2 2001/10/17 07:02:07 wolfsuit Exp $ + * RCS: @(#) $Id: tkIntPlatDecls.h,v 1.9.2.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #ifndef _TKINTPLATDECLS @@ -150,11 +150,8 @@ EXTERN int TkWinGetPlatformId _ANSI_ARGS_((void)); /* 0 */ EXTERN void TkGenerateActivateEvents _ANSI_ARGS_(( TkWindow * winPtr, int active)); -/* 1 */ -EXTERN Pixmap TkpCreateNativeBitmap _ANSI_ARGS_((Display * display, - char * source)); -/* 2 */ -EXTERN void TkpDefineNativeBitmaps _ANSI_ARGS_((void)); +/* Slot 1 is reserved */ +/* Slot 2 is reserved */ /* 3 */ EXTERN unsigned long TkpGetMS _ANSI_ARGS_((void)); /* Slot 4 is reserved */ @@ -180,37 +177,28 @@ EXTERN int TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, /* Slot 15 is reserved */ /* 16 */ EXTERN void TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin)); -/* 17 */ -EXTERN void TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, - int x, int y, int width, int height, - int flags)); +/* Slot 17 is reserved */ /* 18 */ EXTERN unsigned int TkMacButtonKeyState _ANSI_ARGS_((void)); /* 19 */ EXTERN void TkMacClearMenubarActive _ANSI_ARGS_((void)); -/* 20 */ -EXTERN int TkMacConvertEvent _ANSI_ARGS_(( - EventRecord * eventPtr)); +/* Slot 20 is reserved */ /* 21 */ EXTERN int TkMacDispatchMenuEvent _ANSI_ARGS_((int menuID, int index)); /* 22 */ EXTERN void TkMacInstallCursor _ANSI_ARGS_((int resizeOverride)); -/* 23 */ -EXTERN int TkMacConvertTkEvent _ANSI_ARGS_(( - EventRecord * eventPtr, Window window)); +/* Slot 23 is reserved */ /* 24 */ EXTERN void TkMacHandleTearoffMenu _ANSI_ARGS_((void)); /* Slot 25 is reserved */ -/* 26 */ -EXTERN void TkMacInvalClipRgns _ANSI_ARGS_((TkWindow * winPtr)); +/* Slot 26 is reserved */ /* 27 */ EXTERN void TkMacDoHLEvent _ANSI_ARGS_((EventRecord * theEvent)); /* Slot 28 is reserved */ /* 29 */ EXTERN Time TkMacGenerateTime _ANSI_ARGS_((void)); -/* 30 */ -EXTERN GWorldPtr TkMacGetDrawablePort _ANSI_ARGS_((Drawable drawable)); +/* Slot 30 is reserved */ /* 31 */ EXTERN TkWindow * TkMacGetScrollbarGrowWindow _ANSI_ARGS_(( TkWindow * winPtr)); @@ -222,13 +210,9 @@ EXTERN int TkMacGrowToplevel _ANSI_ARGS_((WindowRef whichWindow, /* 34 */ EXTERN void TkMacHandleMenuSelect _ANSI_ARGS_((long mResult, int optionKeyPressed)); -/* 35 */ -EXTERN int TkMacHaveAppearance _ANSI_ARGS_((void)); -/* 36 */ -EXTERN void TkMacInitAppleEvents _ANSI_ARGS_(( - Tcl_Interp * interp)); -/* 37 */ -EXTERN void TkMacInitMenus _ANSI_ARGS_((Tcl_Interp * interp)); +/* Slot 35 is reserved */ +/* Slot 36 is reserved */ +/* Slot 37 is reserved */ /* 38 */ EXTERN void TkMacInvalidateWindow _ANSI_ARGS_(( MacDrawable * macWin, int flag)); @@ -295,6 +279,8 @@ EXTERN MacDrawable * TkMacContainerId _ANSI_ARGS_((TkWindow * winPtr)); EXTERN MacDrawable * TkMacGetHostToplevel _ANSI_ARGS_((TkWindow * winPtr)); /* 65 */ EXTERN void TkMacPreprocessMenu _ANSI_ARGS_((void)); +/* 66 */ +EXTERN int TkpIsWindowFloating _ANSI_ARGS_((WindowRef window)); #endif /* MAC_TCL */ #ifdef MAC_OSX_TK /* 0 */ @@ -421,6 +407,20 @@ EXTERN void TkMacOSXPreprocessMenu _ANSI_ARGS_((void)); EXTERN int TkpIsWindowFloating _ANSI_ARGS_((WindowRef window)); /* 47 */ EXTERN Tk_Window TkMacOSXGetCapture _ANSI_ARGS_((void)); +/* Slot 48 is reserved */ +/* 49 */ +EXTERN Window TkGetTransientMaster _ANSI_ARGS_((TkWindow * winPtr)); +/* 50 */ +EXTERN int TkGenerateButtonEvent _ANSI_ARGS_((int x, int y, + Window window, unsigned int state)); +/* 51 */ +EXTERN void TkGenWMDestroyEvent _ANSI_ARGS_((Tk_Window tkwin)); +/* 52 */ +EXTERN void TkGenWMConfigureEvent _ANSI_ARGS_((Tk_Window tkwin, + int x, int y, int width, int height, + int flags)); +/* 53 */ +EXTERN unsigned long TkpGetMS _ANSI_ARGS_((void)); #endif /* MAC_OSX_TK */ typedef struct TkIntPlatStubs { @@ -476,8 +476,8 @@ typedef struct TkIntPlatStubs { #endif /* __WIN32__ */ #ifdef MAC_TCL void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 0 */ - Pixmap (*tkpCreateNativeBitmap) _ANSI_ARGS_((Display * display, char * source)); /* 1 */ - void (*tkpDefineNativeBitmaps) _ANSI_ARGS_((void)); /* 2 */ + void *reserved1; + void *reserved2; unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 3 */ void *reserved4; void (*tkPointerDeadWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 5 */ @@ -492,27 +492,27 @@ typedef struct TkIntPlatStubs { int (*tkGenerateButtonEvent) _ANSI_ARGS_((int x, int y, Window window, unsigned int state)); /* 14 */ void *reserved15; void (*tkGenWMDestroyEvent) _ANSI_ARGS_((Tk_Window tkwin)); /* 16 */ - void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 17 */ + void *reserved17; unsigned int (*tkMacButtonKeyState) _ANSI_ARGS_((void)); /* 18 */ void (*tkMacClearMenubarActive) _ANSI_ARGS_((void)); /* 19 */ - int (*tkMacConvertEvent) _ANSI_ARGS_((EventRecord * eventPtr)); /* 20 */ + void *reserved20; int (*tkMacDispatchMenuEvent) _ANSI_ARGS_((int menuID, int index)); /* 21 */ void (*tkMacInstallCursor) _ANSI_ARGS_((int resizeOverride)); /* 22 */ - int (*tkMacConvertTkEvent) _ANSI_ARGS_((EventRecord * eventPtr, Window window)); /* 23 */ + void *reserved23; void (*tkMacHandleTearoffMenu) _ANSI_ARGS_((void)); /* 24 */ void *reserved25; - void (*tkMacInvalClipRgns) _ANSI_ARGS_((TkWindow * winPtr)); /* 26 */ + void *reserved26; void (*tkMacDoHLEvent) _ANSI_ARGS_((EventRecord * theEvent)); /* 27 */ void *reserved28; Time (*tkMacGenerateTime) _ANSI_ARGS_((void)); /* 29 */ - GWorldPtr (*tkMacGetDrawablePort) _ANSI_ARGS_((Drawable drawable)); /* 30 */ + void *reserved30; TkWindow * (*tkMacGetScrollbarGrowWindow) _ANSI_ARGS_((TkWindow * winPtr)); /* 31 */ Window (*tkMacGetXWindow) _ANSI_ARGS_((WindowRef macWinPtr)); /* 32 */ int (*tkMacGrowToplevel) _ANSI_ARGS_((WindowRef whichWindow, Point start)); /* 33 */ void (*tkMacHandleMenuSelect) _ANSI_ARGS_((long mResult, int optionKeyPressed)); /* 34 */ - int (*tkMacHaveAppearance) _ANSI_ARGS_((void)); /* 35 */ - void (*tkMacInitAppleEvents) _ANSI_ARGS_((Tcl_Interp * interp)); /* 36 */ - void (*tkMacInitMenus) _ANSI_ARGS_((Tcl_Interp * interp)); /* 37 */ + void *reserved35; + void *reserved36; + void *reserved37; void (*tkMacInvalidateWindow) _ANSI_ARGS_((MacDrawable * macWin, int flag)); /* 38 */ int (*tkMacIsCharacterMissing) _ANSI_ARGS_((Tk_Font tkfont, unsigned int searchChar)); /* 39 */ void (*tkMacMakeRealWindowExist) _ANSI_ARGS_((TkWindow * winPtr)); /* 40 */ @@ -541,6 +541,7 @@ typedef struct TkIntPlatStubs { MacDrawable * (*tkMacContainerId) _ANSI_ARGS_((TkWindow * winPtr)); /* 63 */ MacDrawable * (*tkMacGetHostToplevel) _ANSI_ARGS_((TkWindow * winPtr)); /* 64 */ void (*tkMacPreprocessMenu) _ANSI_ARGS_((void)); /* 65 */ + int (*tkpIsWindowFloating) _ANSI_ARGS_((WindowRef window)); /* 66 */ #endif /* MAC_TCL */ #ifdef MAC_OSX_TK void (*tkGenerateActivateEvents) _ANSI_ARGS_((TkWindow * winPtr, int active)); /* 0 */ @@ -591,6 +592,12 @@ typedef struct TkIntPlatStubs { void (*tkMacOSXPreprocessMenu) _ANSI_ARGS_((void)); /* 45 */ int (*tkpIsWindowFloating) _ANSI_ARGS_((WindowRef window)); /* 46 */ Tk_Window (*tkMacOSXGetCapture) _ANSI_ARGS_((void)); /* 47 */ + void *reserved48; + Window (*tkGetTransientMaster) _ANSI_ARGS_((TkWindow * winPtr)); /* 49 */ + int (*tkGenerateButtonEvent) _ANSI_ARGS_((int x, int y, Window window, unsigned int state)); /* 50 */ + void (*tkGenWMDestroyEvent) _ANSI_ARGS_((Tk_Window tkwin)); /* 51 */ + void (*tkGenWMConfigureEvent) _ANSI_ARGS_((Tk_Window tkwin, int x, int y, int width, int height, int flags)); /* 52 */ + unsigned long (*tkpGetMS) _ANSI_ARGS_((void)); /* 53 */ #endif /* MAC_OSX_TK */ } TkIntPlatStubs; @@ -786,14 +793,8 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkGenerateActivateEvents \ (tkIntPlatStubsPtr->tkGenerateActivateEvents) /* 0 */ #endif -#ifndef TkpCreateNativeBitmap -#define TkpCreateNativeBitmap \ - (tkIntPlatStubsPtr->tkpCreateNativeBitmap) /* 1 */ -#endif -#ifndef TkpDefineNativeBitmaps -#define TkpDefineNativeBitmaps \ - (tkIntPlatStubsPtr->tkpDefineNativeBitmaps) /* 2 */ -#endif +/* Slot 1 is reserved */ +/* Slot 2 is reserved */ #ifndef TkpGetMS #define TkpGetMS \ (tkIntPlatStubsPtr->tkpGetMS) /* 3 */ @@ -835,10 +836,7 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkGenWMDestroyEvent \ (tkIntPlatStubsPtr->tkGenWMDestroyEvent) /* 16 */ #endif -#ifndef TkGenWMConfigureEvent -#define TkGenWMConfigureEvent \ - (tkIntPlatStubsPtr->tkGenWMConfigureEvent) /* 17 */ -#endif +/* Slot 17 is reserved */ #ifndef TkMacButtonKeyState #define TkMacButtonKeyState \ (tkIntPlatStubsPtr->tkMacButtonKeyState) /* 18 */ @@ -847,10 +845,7 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkMacClearMenubarActive \ (tkIntPlatStubsPtr->tkMacClearMenubarActive) /* 19 */ #endif -#ifndef TkMacConvertEvent -#define TkMacConvertEvent \ - (tkIntPlatStubsPtr->tkMacConvertEvent) /* 20 */ -#endif +/* Slot 20 is reserved */ #ifndef TkMacDispatchMenuEvent #define TkMacDispatchMenuEvent \ (tkIntPlatStubsPtr->tkMacDispatchMenuEvent) /* 21 */ @@ -859,19 +854,13 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkMacInstallCursor \ (tkIntPlatStubsPtr->tkMacInstallCursor) /* 22 */ #endif -#ifndef TkMacConvertTkEvent -#define TkMacConvertTkEvent \ - (tkIntPlatStubsPtr->tkMacConvertTkEvent) /* 23 */ -#endif +/* Slot 23 is reserved */ #ifndef TkMacHandleTearoffMenu #define TkMacHandleTearoffMenu \ (tkIntPlatStubsPtr->tkMacHandleTearoffMenu) /* 24 */ #endif /* Slot 25 is reserved */ -#ifndef TkMacInvalClipRgns -#define TkMacInvalClipRgns \ - (tkIntPlatStubsPtr->tkMacInvalClipRgns) /* 26 */ -#endif +/* Slot 26 is reserved */ #ifndef TkMacDoHLEvent #define TkMacDoHLEvent \ (tkIntPlatStubsPtr->tkMacDoHLEvent) /* 27 */ @@ -881,10 +870,7 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkMacGenerateTime \ (tkIntPlatStubsPtr->tkMacGenerateTime) /* 29 */ #endif -#ifndef TkMacGetDrawablePort -#define TkMacGetDrawablePort \ - (tkIntPlatStubsPtr->tkMacGetDrawablePort) /* 30 */ -#endif +/* Slot 30 is reserved */ #ifndef TkMacGetScrollbarGrowWindow #define TkMacGetScrollbarGrowWindow \ (tkIntPlatStubsPtr->tkMacGetScrollbarGrowWindow) /* 31 */ @@ -901,18 +887,9 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkMacHandleMenuSelect \ (tkIntPlatStubsPtr->tkMacHandleMenuSelect) /* 34 */ #endif -#ifndef TkMacHaveAppearance -#define TkMacHaveAppearance \ - (tkIntPlatStubsPtr->tkMacHaveAppearance) /* 35 */ -#endif -#ifndef TkMacInitAppleEvents -#define TkMacInitAppleEvents \ - (tkIntPlatStubsPtr->tkMacInitAppleEvents) /* 36 */ -#endif -#ifndef TkMacInitMenus -#define TkMacInitMenus \ - (tkIntPlatStubsPtr->tkMacInitMenus) /* 37 */ -#endif +/* Slot 35 is reserved */ +/* Slot 36 is reserved */ +/* Slot 37 is reserved */ #ifndef TkMacInvalidateWindow #define TkMacInvalidateWindow \ (tkIntPlatStubsPtr->tkMacInvalidateWindow) /* 38 */ @@ -1016,6 +993,10 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkMacPreprocessMenu \ (tkIntPlatStubsPtr->tkMacPreprocessMenu) /* 65 */ #endif +#ifndef TkpIsWindowFloating +#define TkpIsWindowFloating \ + (tkIntPlatStubsPtr->tkpIsWindowFloating) /* 66 */ +#endif #endif /* MAC_TCL */ #ifdef MAC_OSX_TK #ifndef TkGenerateActivateEvents @@ -1210,6 +1191,27 @@ extern TkIntPlatStubs *tkIntPlatStubsPtr; #define TkMacOSXGetCapture \ (tkIntPlatStubsPtr->tkMacOSXGetCapture) /* 47 */ #endif +/* Slot 48 is reserved */ +#ifndef TkGetTransientMaster +#define TkGetTransientMaster \ + (tkIntPlatStubsPtr->tkGetTransientMaster) /* 49 */ +#endif +#ifndef TkGenerateButtonEvent +#define TkGenerateButtonEvent \ + (tkIntPlatStubsPtr->tkGenerateButtonEvent) /* 50 */ +#endif +#ifndef TkGenWMDestroyEvent +#define TkGenWMDestroyEvent \ + (tkIntPlatStubsPtr->tkGenWMDestroyEvent) /* 51 */ +#endif +#ifndef TkGenWMConfigureEvent +#define TkGenWMConfigureEvent \ + (tkIntPlatStubsPtr->tkGenWMConfigureEvent) /* 52 */ +#endif +#ifndef TkpGetMS +#define TkpGetMS \ + (tkIntPlatStubsPtr->tkpGetMS) /* 53 */ +#endif #endif /* MAC_OSX_TK */ #endif /* defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) */ diff --git a/generic/tkIntXlibDecls.h b/generic/tkIntXlibDecls.h index 804014e..d9d9f2b 100644 --- a/generic/tkIntXlibDecls.h +++ b/generic/tkIntXlibDecls.h @@ -9,7 +9,7 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * - * RCS: @(#) $Id: tkIntXlibDecls.h,v 1.13.8.2 2001/10/17 07:02:07 wolfsuit Exp $ + * RCS: @(#) $Id: tkIntXlibDecls.h,v 1.13.8.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #ifndef _TKINTXLIBDECLS @@ -231,7 +231,7 @@ EXTERN Status XSendEvent _ANSI_ARGS_((Display* d, Window w, Bool b, long l, XEvent* x)); /* 62 */ EXTERN void XSetCommand _ANSI_ARGS_((Display* d, Window w, - char** c, int i)); + CONST char** c, int i)); /* 63 */ EXTERN void XSetIconName _ANSI_ARGS_((Display* d, Window w, _Xconst char* c)); @@ -1006,7 +1006,7 @@ typedef struct TkIntXlibStubs { void (*xResizeWindow) _ANSI_ARGS_((Display* d, Window w, unsigned int ui1, unsigned int ui2)); /* 59 */ void (*xSelectInput) _ANSI_ARGS_((Display* d, Window w, long l)); /* 60 */ Status (*xSendEvent) _ANSI_ARGS_((Display* d, Window w, Bool b, long l, XEvent* x)); /* 61 */ - void (*xSetCommand) _ANSI_ARGS_((Display* d, Window w, char** c, int i)); /* 62 */ + void (*xSetCommand) _ANSI_ARGS_((Display* d, Window w, CONST char** c, int i)); /* 62 */ void (*xSetIconName) _ANSI_ARGS_((Display* d, Window w, _Xconst char* c)); /* 63 */ void (*xSetInputFocus) _ANSI_ARGS_((Display* d, Window w, int i, Time t)); /* 64 */ void (*xSetSelectionOwner) _ANSI_ARGS_((Display* d, Atom a, Window w, Time t)); /* 65 */ diff --git a/generic/tkListbox.c b/generic/tkListbox.c index a939479..82eb5c4 100644 --- a/generic/tkListbox.c +++ b/generic/tkListbox.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkListbox.c,v 1.22 2001/08/29 23:22:24 hobbs Exp $ + * RCS: @(#) $Id: tkListbox.c,v 1.22.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -321,7 +321,7 @@ static Tk_OptionSpec itemAttrOptionSpecs[] = { * commands) and map the indexes into the string tables into * enumerated types used to dispatch the listbox widget command. */ -static char *commandNames[] = { +static CONST char *commandNames[] = { "activate", "bbox", "cget", "configure", "curselection", "delete", "get", "index", "insert", "itemcget", "itemconfigure", "nearest", "scan", "see", "selection", "size", "xview", "yview", @@ -336,7 +336,7 @@ enum command { COMMAND_SIZE, COMMAND_XVIEW, COMMAND_YVIEW }; -static char *selCommandNames[] = { +static CONST char *selCommandNames[] = { "anchor", "clear", "includes", "set", (char *) NULL }; @@ -344,7 +344,7 @@ enum selcommand { SELECTION_ANCHOR, SELECTION_CLEAR, SELECTION_INCLUDES, SELECTION_SET }; -static char *scanCommandNames[] = { +static CONST char *scanCommandNames[] = { "mark", "dragto", (char *) NULL }; @@ -352,7 +352,7 @@ enum scancommand { SCAN_MARK, SCAN_DRAGTO }; -static char *indexNames[] = { +static CONST char *indexNames[] = { "active", "anchor", "end", (char *)NULL }; @@ -2673,8 +2673,12 @@ ChangeListboxOffset(listPtr, offset) /* * Make sure that the new offset is within the allowable range, and * round it off to an even multiple of xScrollUnit. + * + * Add half a scroll unit to do entry/text-like synchronization. + * [Bug #225025] */ + offset += listPtr->xScrollUnit / 2; maxOffset = listPtr->maxWidth - (Tk_Width(listPtr->tkwin) - 2*listPtr->inset - 2*listPtr->selBorderWidth) + listPtr->xScrollUnit - 1; diff --git a/generic/tkMain.c b/generic/tkMain.c index 5f581b8..0dec459 100644 --- a/generic/tkMain.c +++ b/generic/tkMain.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMain.c,v 1.9.2.1 2001/10/15 09:22:00 wolfsuit Exp $ + * RCS: @(#) $Id: tkMain.c,v 1.9.2.2 2002/02/05 02:25:15 wolfsuit Exp $ */ #include <ctype.h> @@ -55,11 +55,13 @@ static Tcl_ThreadDataKey dataKey; */ #if !defined(__WIN32__) && !defined(_WIN32) +#if !defined(MAC_TCL) extern int isatty _ANSI_ARGS_((int fd)); +#else +#include <unistd.h> +#endif extern char * strrchr _ANSI_ARGS_((CONST char *string, int c)); #endif -extern void TkpDisplayWarning _ANSI_ARGS_((char *msg, - char *title)); /* * Forward declarations for procedures defined later in this file. @@ -97,7 +99,8 @@ Tk_MainEx(argc, argv, appInitProc, interp) * to execute commands. */ Tcl_Interp *interp; { - char *args, *fileName; + char *args; + CONST char *fileName; char buf[TCL_INTEGER_SPACE]; int code; size_t length; @@ -160,7 +163,7 @@ Tk_MainEx(argc, argv, appInitProc, interp) * and "argv". */ - args = Tcl_Merge(argc-1, argv+1); + args = Tcl_Merge(argc-1, (CONST char **)argv+1); Tcl_ExternalToUtfDString(NULL, args, -1, &argString); Tcl_SetVar(interp, "argv", Tcl_DStringValue(&argString), TCL_GLOBAL_ONLY); Tcl_DStringFree(&argString); @@ -404,12 +407,12 @@ Prompt(interp, partial) * exists a partial command, so use * the secondary prompt. */ { - char *promptCmd; + Tcl_Obj *promptCmd; int code; Tcl_Channel outChannel, errChannel; - promptCmd = Tcl_GetVar(interp, - partial ? "tcl_prompt2" : "tcl_prompt1", TCL_GLOBAL_ONLY); + promptCmd = Tcl_GetVar2Ex(interp, + partial ? "tcl_prompt2" : "tcl_prompt1", NULL, TCL_GLOBAL_ONLY); if (promptCmd == NULL) { defaultPrompt: if (!partial) { @@ -426,7 +429,7 @@ defaultPrompt: } } } else { - code = Tcl_Eval(interp, promptCmd); + code = Tcl_EvalObjEx(interp, promptCmd, TCL_EVAL_GLOBAL); if (code != TCL_OK) { Tcl_AddErrorInfo(interp, "\n (script that generates prompt)"); diff --git a/generic/tkMenu.c b/generic/tkMenu.c index ff50130..ae6f760 100644 --- a/generic/tkMenu.c +++ b/generic/tkMenu.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenu.c,v 1.13 2001/10/12 13:30:31 tmh Exp $ + * RCS: @(#) $Id: tkMenu.c,v 1.13.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ /* @@ -105,8 +105,10 @@ TCL_DECLARE_MUTEX(menuMutex) char *tkMenuStateStrings[] = {"active", "normal", "disabled", (char *) NULL}; -static char *menuEntryTypeStrings[] = {"cascade", "checkbutton", "command", - "radiobutton", "separator", (char *) NULL}; +static CONST char *menuEntryTypeStrings[] = { + "cascade", "checkbutton", "command", "radiobutton", "separator", + (char *) NULL +}; /* * The following table defines the legal values for the -compound option. @@ -243,7 +245,7 @@ static Tk_OptionSpec *specsArray[] = { * Menu type strings for use with Tcl_GetIndexFromObj. */ -static char *menuTypeStrings[] = {"normal", "tearoff", "menubar", +static CONST char *menuTypeStrings[] = {"normal", "tearoff", "menubar", (char *) NULL}; Tk_OptionSpec tkMenuConfigSpecs[] = { @@ -311,7 +313,7 @@ Tk_OptionSpec tkMenuConfigSpecs[] = { * along with MenuWidgetObjCmd. */ -static char *menuOptions[] = { +static CONST char *menuOptions[] = { "activate", "add", "cget", "clone", "configure", "delete", "entrycget", "entryconfigure", "index", "insert", "invoke", "post", "postcascade", "type", "unpost", "yposition", (char *) NULL @@ -463,7 +465,7 @@ MenuCmd(clientData, interp, objc, objv) int i, index; int toplevel; char *windowName; - static char *typeStringList[] = {"-type", (char *) NULL}; + static CONST char *typeStringList[] = {"-type", (char *) NULL}; TkMenuOptionTables *optionTablesPtr = (TkMenuOptionTables *) clientData; if (objc < 2) { @@ -1012,9 +1014,9 @@ MenuWidgetObjCmd(clientData, interp, objc, objv) if (menuPtr->entries[index]->type == TEAROFF_ENTRY) { Tcl_SetResult(interp, "tearoff", TCL_STATIC); } else { - Tcl_SetResult(interp, + Tcl_SetStringObj(Tcl_GetObjResult(interp), menuEntryTypeStrings[menuPtr->entries[index]->type], - TCL_STATIC); + -1); } break; } @@ -1996,7 +1998,7 @@ ConfigureMenuCloneEntries(interp, menuPtr, index, objc, objv) oldCascadeName = Tcl_GetStringFromObj(oldCascadePtr, NULL); cascadeEntryChanged = (strcmp(oldCascadeName, newCascadeName) - == 0); + != 0); } if (oldCascadePtr != NULL) { Tcl_DecrRefCount(oldCascadePtr); @@ -2467,7 +2469,7 @@ MenuVarProc(clientData, interp, name1, name2, flags) { TkMenuEntry *mePtr = (TkMenuEntry *) clientData; TkMenu *menuPtr; - char *value; + CONST char *value; char *name = Tcl_GetStringFromObj(mePtr->namePtr, NULL); char *onValue; diff --git a/generic/tkMenubutton.c b/generic/tkMenubutton.c index 28d82a9..18decbc 100644 --- a/generic/tkMenubutton.c +++ b/generic/tkMenubutton.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenubutton.c,v 1.8 2001/10/12 13:30:31 tmh Exp $ + * RCS: @(#) $Id: tkMenubutton.c,v 1.8.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkMenubutton.h" @@ -155,7 +155,7 @@ static Tk_OptionSpec optionSpecs[] = { * to dispatch the scale widget command. */ -static char *commandNames[] = { +static CONST char *commandNames[] = { "cget", "configure", (char *) NULL }; @@ -627,7 +627,7 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) * current value. */ - char *value; + CONST char *value; value = Tcl_GetVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY); if (value == NULL) { @@ -872,7 +872,7 @@ MenuButtonTextVarProc(clientData, interp, name1, name2, flags) int flags; /* Information about what happened. */ { register TkMenuButton *mbPtr = (TkMenuButton *) clientData; - char *value; + CONST char *value; /* * If the variable is unset, then immediately recreate it unless diff --git a/generic/tkMessage.c b/generic/tkMessage.c index 1e82ba5..17db4bb 100644 --- a/generic/tkMessage.c +++ b/generic/tkMessage.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMessage.c,v 1.10 2001/08/29 23:22:24 hobbs Exp $ + * RCS: @(#) $Id: tkMessage.c,v 1.10.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -313,7 +313,7 @@ MessageWidgetObjCmd(clientData, interp, objc, objv) Tcl_Obj *CONST objv[]; /* Argument strings. */ { register Message *msgPtr = (Message *) clientData; - static char *optionStrings[] = { "cget", "configure", (char *) NULL }; + static CONST char *optionStrings[] = { "cget", "configure", (char *) NULL }; enum options { MESSAGE_CGET, MESSAGE_CONFIGURE }; int index; int result = TCL_OK; @@ -479,7 +479,7 @@ ConfigureMessage(interp, msgPtr, objc, objv, flags) */ if (msgPtr->textVarName != NULL) { - char *value; + CONST char *value; value = Tcl_GetVar(interp, msgPtr->textVarName, TCL_GLOBAL_ONLY); if (value == NULL) { @@ -852,7 +852,7 @@ MessageTextVarProc(clientData, interp, name1, name2, flags) int flags; /* Information about what happened. */ { register Message *msgPtr = (Message *) clientData; - char *value; + CONST char *value; /* * If the variable is unset, then immediately recreate it unless diff --git a/generic/tkOldConfig.c b/generic/tkOldConfig.c index 61b1258..24effae 100644 --- a/generic/tkOldConfig.c +++ b/generic/tkOldConfig.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkOldConfig.c,v 1.9 2000/05/17 21:17:21 ericm Exp $ + * RCS: @(#) $Id: tkOldConfig.c,v 1.9.6.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -707,7 +707,8 @@ FormatConfigInfo(interp, tkwin, specPtr, widgRec) char *widgRec; /* Pointer to record holding current * values of info for widget. */ { - char *argv[6], *result; + CONST char *argv[6]; + char *result; char buffer[200]; Tcl_FreeProc *freeProc = (Tcl_FreeProc *) NULL; @@ -735,9 +736,9 @@ FormatConfigInfo(interp, tkwin, specPtr, widgRec) result = Tcl_Merge(5, argv); if (freeProc != NULL) { if ((freeProc == TCL_DYNAMIC) || (freeProc == (Tcl_FreeProc *) free)) { - ckfree(argv[4]); + ckfree((char *)argv[4]); } else { - (*freeProc)(argv[4]); + (*freeProc)((char *)argv[4]); } } return result; diff --git a/generic/tkOption.c b/generic/tkOption.c index d0cb8bc..cbcdca8 100644 --- a/generic/tkOption.c +++ b/generic/tkOption.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkOption.c,v 1.8 2000/05/30 17:35:19 ericm Exp $ + * RCS: @(#) $Id: tkOption.c,v 1.8.6.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -262,8 +262,8 @@ void Tk_AddOption(tkwin, name, value, priority) Tk_Window tkwin; /* Window token; option will be associated * with main window for this window. */ - char *name; /* Multi-element name of option. */ - char *value; /* String value for option. */ + CONST char *name; /* Multi-element name of option. */ + CONST char *value; /* String value for option. */ int priority; /* Overall priority level to use for * this option, such as TK_USER_DEFAULT_PRIO * or TK_INTERACTIVE_PRIO. Must be between @@ -273,8 +273,8 @@ Tk_AddOption(tkwin, name, value, priority) register ElArray **arrayPtrPtr; register Element *elPtr; Element newEl; - register char *p; - char *field; + register CONST char *p; + CONST char *field; int count, firstField, length; #define TMP_SIZE 100 char tmp[TMP_SIZE+1]; @@ -638,7 +638,7 @@ Tk_OptionObjCmd(clientData, interp, objc, objv) ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); - static char *optionCmds[] = { + static CONST char *optionCmds[] = { "add", "clear", "get", "readfile", NULL }; @@ -1091,7 +1091,8 @@ ReadOptionFile(interp, tkwin, fileName, priority) * or TK_INTERACTIVE_PRIO. Must be between * 0 and TK_MAX_PRIO. */ { - char *realName, *buffer; + CONST char *realName; + char *buffer; int result, bufferSize; Tcl_Channel chan; Tcl_DString newName; diff --git a/generic/tkPack.c b/generic/tkPack.c index 106b547..a64b722 100644 --- a/generic/tkPack.c +++ b/generic/tkPack.c @@ -10,14 +10,16 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPack.c,v 1.13 2001/09/26 20:25:17 pspjuth Exp $ + * RCS: @(#) $Id: tkPack.c,v 1.13.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" #include "tkInt.h" typedef enum {TOP, BOTTOM, LEFT, RIGHT} Side; -static char *sideNames[] = {"top", "bottom", "left", "right", (char *) NULL }; +static CONST char *sideNames[] = { + "top", "bottom", "left", "right", (char *) NULL +}; /* For each window that the packer cares about (either because * the window is managed by the packer or because the window @@ -201,7 +203,7 @@ Tk_PackObjCmd(clientData, interp, objc, objv) { Tk_Window tkwin = (Tk_Window) clientData; char *argv2; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { /* after, append, before and unpack are deprecated */ "after", "append", "before", "unpack", "configure", "forget", "info", "propagate", "slaves", (char *) NULL }; @@ -1221,7 +1223,7 @@ PackAfter(interp, prevPtr, masterPtr, objc, objv) packPtr->flags |= OLD_STYLE; for (index = 0 ; index < optionCount; index++) { Tcl_Obj *curOptPtr = options[index]; - char *curOpt = Tcl_GetStringFromObj(curOptPtr, &length); + char *curOpt = Tcl_GetStringFromObj(curOptPtr, (int *) &length); c = curOpt[0]; @@ -1550,7 +1552,7 @@ ConfigureSlaves(interp, tkwin, objc, objv) Tk_Window other, slave, parent, ancestor; int i, j, numWindows, tmp, positionGiven; char *string; - static char *optionStrings[] = { + static CONST char *optionStrings[] = { "-after", "-anchor", "-before", "-expand", "-fill", "-in", "-ipadx", "-ipady", "-padx", "-pady", "-side", (char *) NULL }; enum options { diff --git a/generic/tkPlace.c b/generic/tkPlace.c index 746581a..5cd4c7a 100644 --- a/generic/tkPlace.c +++ b/generic/tkPlace.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPlace.c,v 1.10 2001/09/26 20:25:17 pspjuth Exp $ + * RCS: @(#) $Id: tkPlace.c,v 1.10.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -209,8 +209,9 @@ Tk_PlaceObjCmd(clientData, interp, objc, objv) char *string; TkDisplay *dispPtr; Tk_OptionTable optionTable; - static char *optionStrings[] = { "configure", "forget", "info", "slaves", - (char *) NULL }; + static CONST char *optionStrings[] = { + "configure", "forget", "info", "slaves", (char *) NULL + }; enum options { PLACE_CONFIGURE, PLACE_FORGET, PLACE_INFO, PLACE_SLAVES }; int index; diff --git a/generic/tkPointer.c b/generic/tkPointer.c index 90cb8ba..33bc77a 100644 --- a/generic/tkPointer.c +++ b/generic/tkPointer.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPointer.c,v 1.4.18.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkPointer.c,v 1.4.18.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -20,7 +20,13 @@ #include "tkWinInt.h" #endif -#if defined(MAC_TCL) || defined(MAC_OSX_TK) +#if defined(MAC_TCL) +#include "tkMacInt.h" +#define Cursor XCursor +#endif + +# if defined(MAC_OSX_TK) +#include "tkMacOSXInt.h" #define Cursor XCursor #endif diff --git a/generic/tkScale.c b/generic/tkScale.c index 1be68ec..a012534 100644 --- a/generic/tkScale.c +++ b/generic/tkScale.c @@ -18,7 +18,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkScale.c,v 1.14 2001/08/29 23:22:24 hobbs Exp $ + * RCS: @(#) $Id: tkScale.c,v 1.14.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -147,7 +147,7 @@ static Tk_OptionSpec optionSpecs[] = { * to dispatch the scale widget command. */ -static char *commandNames[] = { +static CONST char *commandNames[] = { "cget", "configure", "coords", "get", "identify", "set", (char *) NULL }; diff --git a/generic/tkSelect.c b/generic/tkSelect.c index e52187d..c276904 100644 --- a/generic/tkSelect.c +++ b/generic/tkSelect.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkSelect.c,v 1.7.2.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkSelect.c,v 1.7.2.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -325,7 +325,7 @@ Tk_DeleteSelHandler(tkwin, selection, target) */ ((CommandInfo*)selPtr->clientData)->interp = NULL; - Tcl_EventuallyFree(selPtr->clientData, Tcl_Free); + Tcl_EventuallyFree(selPtr->clientData, TCL_DYNAMIC); } ckfree((char *) selPtr); } @@ -690,8 +690,9 @@ Tk_SelectionObjCmd(clientData, interp, objc, objv) char *selName = NULL, *string; int count, index; Tcl_Obj **objs; - static char *optionStrings[] = { "clear", "get", "handle", "own", - (char *) NULL }; + static CONST char *optionStrings[] = { + "clear", "get", "handle", "own", (char *) NULL + }; enum options { SELECTION_CLEAR, SELECTION_GET, SELECTION_HANDLE, SELECTION_OWN }; @@ -707,8 +708,9 @@ Tk_SelectionObjCmd(clientData, interp, objc, objv) switch ((enum options) index) { case SELECTION_CLEAR: { - static char *clearOptionStrings[] = { "-displayof", "-selection", - (char *) NULL }; + static CONST char *clearOptionStrings[] = { + "-displayof", "-selection", (char *) NULL + }; enum clearOptions { CLEAR_DISPLAYOF, CLEAR_SELECTION }; int clearIndex; @@ -764,8 +766,9 @@ Tk_SelectionObjCmd(clientData, interp, objc, objv) char *targetName = NULL; Tcl_DString selBytes; int result; - static char *getOptionStrings[] = { "-displayof", "-selection", - "-type", (char *) NULL }; + static CONST char *getOptionStrings[] = { + "-displayof", "-selection", "-type", (char *) NULL + }; enum getOptions { GET_DISPLAYOF, GET_SELECTION, GET_TYPE }; int getIndex; @@ -837,8 +840,9 @@ Tk_SelectionObjCmd(clientData, interp, objc, objv) char *formatName = NULL; register CommandInfo *cmdInfoPtr; int cmdLength; - static char *handleOptionStrings[] = { "-format", "-selection", - "-type", (char *) NULL }; + static CONST char *handleOptionStrings[] = { + "-format", "-selection", "-type", (char *) NULL + }; enum handleOptions { HANDLE_FORMAT, HANDLE_SELECTION, HANDLE_TYPE }; int handleIndex; @@ -923,7 +927,7 @@ Tk_SelectionObjCmd(clientData, interp, objc, objv) register LostCommand *lostPtr; char *script = NULL; int cmdLength; - static char *ownOptionStrings[] = { + static CONST char *ownOptionStrings[] = { "-command", "-displayof", "-selection", (char *) NULL }; enum ownOptions { OWN_COMMAND, OWN_DISPLAYOF, OWN_SELECTION }; @@ -1122,7 +1126,7 @@ TkSelDeadWindow(winPtr) */ ((CommandInfo*)selPtr->clientData)->interp = NULL; - Tcl_EventuallyFree(selPtr->clientData, Tcl_Free); + Tcl_EventuallyFree(selPtr->clientData, TCL_DYNAMIC); } ckfree((char *) selPtr); } @@ -1336,7 +1340,7 @@ HandleTclCommand(clientData, offset, buffer, maxBytes) Tcl_DString oldResult; Tcl_Obj *objPtr; int extraBytes, charOffset, count, numChars; - char *p; + CONST char *p; /* * We must also protect the interpreter and the command from being diff --git a/generic/tkSquare.c b/generic/tkSquare.c index 1a2704d..ee8d535 100644 --- a/generic/tkSquare.c +++ b/generic/tkSquare.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkSquare.c,v 1.4 2001/08/29 23:22:24 hobbs Exp $ + * RCS: @(#) $Id: tkSquare.c,v 1.4.2.1 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkPort.h" @@ -104,7 +104,7 @@ static void SquareDisplay _ANSI_ARGS_((ClientData clientData)); static void KeepInWindow _ANSI_ARGS_((Square *squarePtr)); static void SquareObjEventProc _ANSI_ARGS_((ClientData clientData, XEvent *eventPtr)); -static int SquareWidgetCmd _ANSI_ARGS_((ClientData clientData, +static int SquareWidgetObjCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *, int objc, Tcl_Obj * CONST objv[])); /* @@ -169,7 +169,7 @@ SquareObjCmd(clientData, interp, objc, objv) squarePtr->display = Tk_Display(tkwin); squarePtr->interp = interp; squarePtr->widgetCmd = Tcl_CreateObjCommand(interp, - Tk_PathName(squarePtr->tkwin), SquareWidgetCmd, + Tk_PathName(squarePtr->tkwin), SquareWidgetObjCmd, (ClientData) squarePtr, SquareDeletedProc); squarePtr->gc = None; squarePtr->optionTable = optionTable; @@ -203,7 +203,7 @@ error: /* *-------------------------------------------------------------- * - * SquareWidgetCmd -- + * SquareWidgetObjCmd -- * * This procedure is invoked to process the Tcl command * that corresponds to a widget managed by this module. @@ -219,7 +219,7 @@ error: */ static int -SquareWidgetCmd(clientData, interp, objc, objv) +SquareWidgetObjCmd(clientData, interp, objc, objv) ClientData clientData; /* Information about square widget. */ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ @@ -227,7 +227,7 @@ SquareWidgetCmd(clientData, interp, objc, objv) { Square *squarePtr = (Square *) clientData; int result = TCL_OK; - static char *squareOptions[] = {"cget", "configure", (char *) NULL}; + static CONST char *squareOptions[] = {"cget", "configure", (char *) NULL}; enum { SQUARE_CGET, SQUARE_CONFIGURE }; diff --git a/generic/tkStubInit.c b/generic/tkStubInit.c index 34c7f6e..516f4c9 100644 --- a/generic/tkStubInit.c +++ b/generic/tkStubInit.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkStubInit.c,v 1.28.2.3 2001/11/11 17:58:53 wolfsuit Exp $ + * RCS: @(#) $Id: tkStubInit.c,v 1.28.2.4 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -256,18 +256,7 @@ TkIntStubs tkIntStubs = { #ifdef MAC_OSX_TK TkUnionRectWithRegion, /* 119 */ #endif /* MAC_OSX_TK */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 120 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 120 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkGenerateActivateEvents, /* 120 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkGenerateActivateEvents, /* 120 */ -#endif /* MAC_OSX_TCL */ #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ NULL, /* 121 */ #endif /* UNIX */ @@ -292,18 +281,7 @@ TkIntStubs tkIntStubs = { #ifdef MAC_OSX_TCL TkpDefineNativeBitmaps, /* 122 */ #endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 123 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 123 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkpGetMS, /* 123 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkpGetMS, /* 123 */ -#endif /* MAC_OSX_TCL */ #if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ NULL, /* 124 */ #endif /* UNIX */ @@ -316,110 +294,23 @@ TkIntStubs tkIntStubs = { #ifdef MAC_OSX_TCL TkpGetNativeAppBitmap, /* 124 */ #endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 125 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 125 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkPointerDeadWindow, /* 125 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkPointerDeadWindow, /* 125 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 126 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 126 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkpSetCapture, /* 126 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkpSetCapture, /* 126 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 127 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 127 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkpSetCursor, /* 127 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkpSetCursor, /* 127 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ NULL, /* 128 */ -#endif /* UNIX */ -#ifdef __WIN32__ - NULL, /* 128 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkpWmSetState, /* 128 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkpWmSetState, /* 128 */ -#endif /* MAC_OSX_TCL */ NULL, /* 129 */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 130 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 130 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkGetTransientMaster, /* 130 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkGetTransientMaster, /* 130 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ NULL, /* 131 */ -#endif /* UNIX */ -#ifdef __WIN32__ - NULL, /* 131 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkGenerateButtonEvent, /* 131 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkGenerateButtonEvent, /* 131 */ -#endif /* MAC_OSX_TCL */ NULL, /* 132 */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ - NULL, /* 133 */ -#endif /* UNIX */ -#ifdef __WIN32__ NULL, /* 133 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkGenWMDestroyEvent, /* 133 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkGenWMDestroyEvent, /* 133 */ -#endif /* MAC_OSX_TCL */ -#if !(defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK))/* UNIX */ NULL, /* 134 */ -#endif /* UNIX */ -#ifdef __WIN32__ - NULL, /* 134 */ -#endif /* __WIN32__ */ -#ifdef MAC_TCL - TkGenWMConfigureEvent, /* 134 */ -#endif /* MAC_TCL */ -#ifdef MAC_OSX_TCL - TkGenWMConfigureEvent, /* 134 */ -#endif /* MAC_OSX_TCL */ TkpDrawHighlightBorder, /* 135 */ TkSetFocusWin, /* 136 */ TkpSetKeycodeAndState, /* 137 */ TkpGetKeySym, /* 138 */ TkpInitKeymapInfo, /* 139 */ TkPhotoGetValidRegion, /* 140 */ + TkWmStackorderToplevel, /* 141 */ }; TkIntPlatStubs tkIntPlatStubs = { @@ -474,8 +365,8 @@ TkIntPlatStubs tkIntPlatStubs = { #endif /* __WIN32__ */ #ifdef MAC_TCL TkGenerateActivateEvents, /* 0 */ - TkpCreateNativeBitmap, /* 1 */ - TkpDefineNativeBitmaps, /* 2 */ + NULL, /* 1 */ + NULL, /* 2 */ TkpGetMS, /* 3 */ NULL, /* 4 */ TkPointerDeadWindow, /* 5 */ @@ -490,27 +381,27 @@ TkIntPlatStubs tkIntPlatStubs = { TkGenerateButtonEvent, /* 14 */ NULL, /* 15 */ TkGenWMDestroyEvent, /* 16 */ - TkGenWMConfigureEvent, /* 17 */ + NULL, /* 17 */ TkMacButtonKeyState, /* 18 */ TkMacClearMenubarActive, /* 19 */ - TkMacConvertEvent, /* 20 */ + NULL, /* 20 */ TkMacDispatchMenuEvent, /* 21 */ TkMacInstallCursor, /* 22 */ - TkMacConvertTkEvent, /* 23 */ + NULL, /* 23 */ TkMacHandleTearoffMenu, /* 24 */ NULL, /* 25 */ - TkMacInvalClipRgns, /* 26 */ + NULL, /* 26 */ TkMacDoHLEvent, /* 27 */ NULL, /* 28 */ TkMacGenerateTime, /* 29 */ - TkMacGetDrawablePort, /* 30 */ + NULL, /* 30 */ TkMacGetScrollbarGrowWindow, /* 31 */ TkMacGetXWindow, /* 32 */ TkMacGrowToplevel, /* 33 */ TkMacHandleMenuSelect, /* 34 */ - TkMacHaveAppearance, /* 35 */ - TkMacInitAppleEvents, /* 36 */ - TkMacInitMenus, /* 37 */ + NULL, /* 35 */ + NULL, /* 36 */ + NULL, /* 37 */ TkMacInvalidateWindow, /* 38 */ TkMacIsCharacterMissing, /* 39 */ TkMacMakeRealWindowExist, /* 40 */ @@ -539,6 +430,7 @@ TkIntPlatStubs tkIntPlatStubs = { TkMacContainerId, /* 63 */ TkMacGetHostToplevel, /* 64 */ TkMacPreprocessMenu, /* 65 */ + TkpIsWindowFloating, /* 66 */ #endif /* MAC_TCL */ #ifdef MAC_OSX_TK TkGenerateActivateEvents, /* 0 */ @@ -589,6 +481,12 @@ TkIntPlatStubs tkIntPlatStubs = { TkMacOSXPreprocessMenu, /* 45 */ TkpIsWindowFloating, /* 46 */ TkMacOSXGetCapture, /* 47 */ + NULL, /* 48 */ + TkGetTransientMaster, /* 49 */ + TkGenerateButtonEvent, /* 50 */ + TkGenWMDestroyEvent, /* 51 */ + TkGenWMConfigureEvent, /* 52 */ + TkpGetMS, /* 53 */ #endif /* MAC_OSX_TK */ }; diff --git a/generic/tkStubLib.c b/generic/tkStubLib.c index a7d10ac..08d6113 100644 --- a/generic/tkStubLib.c +++ b/generic/tkStubLib.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkStubLib.c,v 1.6.2.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkStubLib.c,v 1.6.2.3 2002/02/05 02:25:15 wolfsuit Exp $ */ /* @@ -18,13 +18,9 @@ * do these includes before we add the stubs defines. This a hack. */ -#if defined(MAC_TCL) -#include "tkMacInt.h" -#else defined(MAC_OSX_TK) +#if defined(MAC_OSX_TK) #include "tkMacOSXInt.h" -#endif -#if defined(MAC_TCL) || defined(MAC_OSX_TK) #include "tkInt.h" #include "tkPort.h" #endif /* MAC_TCL */ @@ -46,8 +42,6 @@ #endif #undef USE_TK_STUB_PROCS -#if !defined(MAC_TCL) && !defined(MAC_OSX_TK) - #include "tkPort.h" #include "tkInt.h" @@ -55,7 +49,9 @@ #include "tkWinInt.h" #endif -#endif /* !MAC_TCL */ +#ifdef MAC_TCL +#include "tkMacInt.h" +#endif #include "tkDecls.h" #include "tkIntDecls.h" diff --git a/generic/tkTest.c b/generic/tkTest.c index 41976c3..65f9aab 100644 --- a/generic/tkTest.c +++ b/generic/tkTest.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkTest.c,v 1.15.6.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkTest.c,v 1.15.6.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "tkInt.h" @@ -631,7 +631,7 @@ TestobjconfigObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *options[] = {"alltypes", "chain1", "chain2", + static CONST char *options[] = {"alltypes", "chain1", "chain2", "configerror", "delete", "info", "internal", "new", "notenoughparams", "twowindows", (char *) NULL}; enum { @@ -1354,7 +1354,9 @@ TrivialConfigObjCmd(clientData, interp, objc, objv) Tcl_Obj *CONST objv[]; /* Argument objects. */ { int result = TCL_OK; - static char *options[] = {"cget", "configure", "csave", (char *) NULL}; + static CONST char *options[] = { + "cget", "configure", "csave", (char *) NULL + }; enum { CGET, CONFIGURE, CSAVE }; @@ -1538,7 +1540,7 @@ TestfontObjCmd(clientData, interp, objc, objv) int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - static char *options[] = {"counts", "subfonts", (char *) NULL}; + static CONST char *options[] = {"counts", "subfonts", (char *) NULL}; enum option {COUNTS, SUBFONTS}; int index; Tk_Window tkwin; diff --git a/generic/tkText.c b/generic/tkText.c index cd2c64b..f848d21 100644 --- a/generic/tkText.c +++ b/generic/tkText.c @@ -14,7 +14,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkText.c,v 1.18.4.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkText.c,v 1.18.4.3 2002/02/05 02:25:15 wolfsuit Exp $ */ #include "default.h" @@ -42,6 +42,9 @@ static Tk_CustomOption stateOption = { */ static Tk_ConfigSpec configSpecs[] = { + {TK_CONFIG_BOOLEAN, "-autoseparators", "autoSeparators", + "AutoSeparators", DEF_TEXT_AUTO_SEPARATORS, + Tk_Offset(TkText, autoSeparators), 0}, {TK_CONFIG_BORDER, "-background", "background", "Background", DEF_TEXT_BG_COLOR, Tk_Offset(TkText, border), TK_CONFIG_COLOR_ONLY}, {TK_CONFIG_BORDER, "-background", "background", "Background", @@ -129,6 +132,8 @@ static Tk_ConfigSpec configSpecs[] = { {TK_CONFIG_STRING, "-takefocus", "takeFocus", "TakeFocus", DEF_TEXT_TAKE_FOCUS, Tk_Offset(TkText, takeFocus), TK_CONFIG_NULL_OK}, + {TK_CONFIG_BOOLEAN, "-undo", "undo", "Undo", + DEF_TEXT_UNDO, Tk_Offset(TkText, undo), 0}, {TK_CONFIG_INT, "-width", "width", "Width", DEF_TEXT_WIDTH, Tk_Offset(TkText, width), 0}, {TK_CONFIG_CUSTOM, "-wrap", "wrap", "Wrap", @@ -292,6 +297,8 @@ static int TextFetchSelection _ANSI_ARGS_((ClientData clientData, int offset, char *buffer, int maxBytes)); static int TextSearchCmd _ANSI_ARGS_((TkText *textPtr, Tcl_Interp *interp, int argc, char **argv)); +static int TextEditCmd _ANSI_ARGS_((TkText *textPtr, + Tcl_Interp *interp, int argc, char **argv)); static int TextWidgetCmd _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int argc, char **argv)); static void TextWorldChanged _ANSI_ARGS_(( @@ -304,6 +311,19 @@ static void DumpLine _ANSI_ARGS_((Tcl_Interp *interp, static int DumpSegment _ANSI_ARGS_((Tcl_Interp *interp, char *key, char *value, char * command, TkTextIndex *index, int what)); +static int TextEditUndo _ANSI_ARGS_((Tcl_Interp * interp, + TkText *textPtr)); +static int TextEditRedo _ANSI_ARGS_((Tcl_Interp * interp, + TkText *textPtr)); +static void TextGetText _ANSI_ARGS_((TkTextIndex * index1, + TkTextIndex * index2, Tcl_DString *dsPtr)); +static void pushStack _ANSI_ARGS_(( TkTextEditAtom ** stack, + TkTextEditAtom * elem )); + +static TkTextEditAtom * popStack _ANSI_ARGS_((TkTextEditAtom ** stack)); +static void clearStack _ANSI_ARGS_((TkTextEditAtom ** stack)); +static void insertSeparator _ANSI_ARGS_((TkTextEditAtom ** stack)); +static void updateDirtyFlag _ANSI_ARGS_((TkText *textPtr)); /* * The structure below defines text class behavior by means of procedures @@ -361,7 +381,14 @@ Tk_TextCmd(clientData, interp, argc, argv) return TCL_ERROR; } + /* + * Create the text widget and initialize everything to zero, + * then set the necessary initial (non-NULL) values. + */ + textPtr = (TkText *) ckalloc(sizeof(TkText)); + memset((VOID *) textPtr, 0, sizeof(TkText)); + textPtr->tkwin = new; textPtr->display = Tk_Display(new); textPtr->interp = interp; @@ -370,61 +397,24 @@ Tk_TextCmd(clientData, interp, argc, argv) (ClientData) textPtr, TextCmdDeletedProc); textPtr->tree = TkBTreeCreate(textPtr); Tcl_InitHashTable(&textPtr->tagTable, TCL_STRING_KEYS); - textPtr->numTags = 0; Tcl_InitHashTable(&textPtr->markTable, TCL_STRING_KEYS); Tcl_InitHashTable(&textPtr->windowTable, TCL_STRING_KEYS); Tcl_InitHashTable(&textPtr->imageTable, TCL_STRING_KEYS); textPtr->state = TK_STATE_NORMAL; - textPtr->border = NULL; - textPtr->borderWidth = 0; - textPtr->padX = 0; - textPtr->padY = 0; textPtr->relief = TK_RELIEF_FLAT; - textPtr->highlightWidth = 0; - textPtr->highlightBgColorPtr = NULL; - textPtr->highlightColorPtr = NULL; textPtr->cursor = None; - textPtr->fgColor = NULL; - textPtr->tkfont = NULL; textPtr->charWidth = 1; - textPtr->spacing1 = 0; - textPtr->spacing2 = 0; - textPtr->spacing3 = 0; - textPtr->tabOptionString = NULL; - textPtr->tabArrayPtr = NULL; textPtr->wrapMode = TEXT_WRAPMODE_CHAR; - textPtr->width = 0; - textPtr->height = 0; - textPtr->setGrid = 0; textPtr->prevWidth = Tk_Width(new); textPtr->prevHeight = Tk_Height(new); TkTextCreateDInfo(textPtr); TkTextMakeByteIndex(textPtr->tree, 0, 0, &startIndex); TkTextSetYView(textPtr, &startIndex, 0); - textPtr->selTagPtr = NULL; - textPtr->selBorder = NULL; - textPtr->selBdString = NULL; - textPtr->selFgColorPtr = NULL; textPtr->exportSelection = 1; - textPtr->abortSelections = 0; - textPtr->insertMarkPtr = NULL; - textPtr->insertBorder = NULL; - textPtr->insertWidth = 0; - textPtr->insertBorderWidth = 0; - textPtr->insertOnTime = 0; - textPtr->insertOffTime = 0; - textPtr->insertBlinkHandler = (Tcl_TimerToken) NULL; - textPtr->bindingTable = NULL; - textPtr->currentMarkPtr = NULL; textPtr->pickEvent.type = LeaveNotify; - textPtr->pickEvent.xcrossing.x = 0; - textPtr->pickEvent.xcrossing.y = 0; - textPtr->numCurTags = 0; - textPtr->curTagArrayPtr = NULL; - textPtr->takeFocus = NULL; - textPtr->xScrollCmd = NULL; - textPtr->yScrollCmd = NULL; - textPtr->flags = 0; + textPtr->undo = 1; + textPtr->isDirtyIncrement = 1; + textPtr->autoSeparators = 1; /* * Create the "sel" tag and the "current" and "insert" marks. @@ -484,9 +474,8 @@ TextWidgetCmd(clientData, interp, argc, argv) char **argv; /* Argument strings. */ { register TkText *textPtr = (TkText *) clientData; - int result = TCL_OK; + int c, result = TCL_OK; size_t length; - int c; TkTextIndex index1, index2; if (argc < 2) { @@ -635,6 +624,8 @@ TextWidgetCmd(clientData, interp, argc, argv) sprintf(buf, "%d %d %d %d %d", x, y, width, height, base); Tcl_SetResult(interp, buf, TCL_VOLATILE); } + } else if ((c == 'e') && (strncmp(argv[1], "edit", length) == 0)) { + result = TextEditCmd(textPtr, interp, argc, argv); } else if ((c == 'g') && (strncmp(argv[1], "get", length) == 0)) { if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # args: should be \"", @@ -654,34 +645,16 @@ TextWidgetCmd(clientData, interp, argc, argv) result = TCL_ERROR; goto done; } - if (TkTextIndexCmp(&index1, &index2) >= 0) { - goto done; - } - while (1) { - int offset, last, savedChar; - TkTextSegment *segPtr; - - segPtr = TkTextIndexToSeg(&index1, &offset); - last = segPtr->size; - if (index1.linePtr == index2.linePtr) { - int last2; - - if (index2.byteIndex == index1.byteIndex) { - break; - } - last2 = index2.byteIndex - index1.byteIndex + offset; - if (last2 < last) { - last = last2; - } - } - if (segPtr->typePtr == &tkTextCharType) { - savedChar = segPtr->body.chars[last]; - segPtr->body.chars[last] = 0; - Tcl_AppendResult(interp, segPtr->body.chars + offset, - (char *) NULL); - segPtr->body.chars[last] = savedChar; - } - TkTextIndexForwBytes(&index1, last-offset, &index1); + if (TkTextIndexCmp(&index1, &index2) < 0) { + /* + * Place the text in a DString and move it to the result. Since + * this could in principle be a megabyte or more, we want to do + * it efficiently! + */ + Tcl_DString ds; + TextGetText(&index1, &index2, &ds); + Tcl_DStringResult(interp, &ds); + Tcl_DStringFree(&ds); } } else if ((c == 'i') && (strncmp(argv[1], "index", length) == 0) && (length >= 3)) { @@ -703,7 +676,7 @@ TextWidgetCmd(clientData, interp, argc, argv) } else if ((c == 'i') && (strncmp(argv[1], "insert", length) == 0) && (length >= 3)) { int i, j, numTags; - char **tagNames; + CONST char **tagNames; TkTextTag **oldTagArrayPtr; if (argc < 4) { @@ -770,8 +743,8 @@ TextWidgetCmd(clientData, interp, argc, argv) } else { Tcl_AppendResult(interp, "bad option \"", argv[1], "\": must be bbox, cget, compare, configure, debug, delete, ", - "dlineinfo, dump, get, image, index, insert, mark, scan, ", - "search, see, tag, window, xview, or yview", + "dlineinfo, dump, edit, get, image, index, insert, mark, ", + "scan, search, see, tag, window, xview, or yview", (char *) NULL); result = TCL_ERROR; } @@ -838,6 +811,8 @@ DestroyText(memPtr) if (textPtr->bindingTable != NULL) { Tk_DeleteBindingTable(textPtr->bindingTable); } + clearStack(&(textPtr->undoStack)); + clearStack(&(textPtr->redoStack)); /* * NOTE: do NOT free up selBorder, selBdString, or selFgColorPtr: @@ -1208,6 +1183,8 @@ InsertChars(textPtr, indexPtr, string) { int lineIndex, resetView, offset; TkTextIndex newTop; + TkTextEditAtom * insertion; + char indexBuffer[TK_POS_CHARS]; /* * Don't allow insertions on the last (dummy) line of the text. @@ -1236,6 +1213,32 @@ InsertChars(textPtr, indexPtr, string) } TkTextChanged(textPtr, indexPtr, indexPtr); TkBTreeInsertChars(indexPtr, string); + + /* + * Push the insertion on the undo stack + */ + + if ( textPtr->undo ) { + if (textPtr->autoSeparators && textPtr->undoStack && + textPtr->undoStack->type != TK_EDIT_INSERT) { + insertSeparator(&(textPtr->undoStack)); + } + + insertion = (TkTextEditAtom *) ckalloc(sizeof(TkTextEditAtom)); + insertion->type = TK_EDIT_INSERT; + + TkTextPrintIndex(indexPtr,indexBuffer); + insertion->index = (char *) ckalloc(strlen(indexBuffer) + 1); + strcpy(insertion->index,indexBuffer); + + insertion->string = (char *) ckalloc(strlen(string) + 1); + strcpy(insertion->string,string); + + pushStack(&(textPtr->undoStack),insertion); + clearStack(&(textPtr->redoStack)); + } + updateDirtyFlag(textPtr); + if (resetView) { TkTextMakeByteIndex(textPtr->tree, lineIndex, 0, &newTop); TkTextIndexForwBytes(&newTop, offset, &newTop); @@ -1279,6 +1282,8 @@ DeleteChars(textPtr, index1String, index2String) { int line1, line2, line, byteIndex, resetView; TkTextIndex index1, index2; + TkTextEditAtom * deletion; + char indexBuffer[TK_POS_CHARS]; /* * Parse the starting and stopping indices. @@ -1390,6 +1395,37 @@ DeleteChars(textPtr, index1String, index2String) byteIndex -= (index2.byteIndex - index1.byteIndex); } } + + /* + * Push the deletion on the undo stack + */ + + if (textPtr->undo) { + Tcl_DString ds; + + if (textPtr->autoSeparators && (textPtr->undoStack != NULL) + && (textPtr->undoStack->type != TK_EDIT_DELETE)) { + insertSeparator(&(textPtr->undoStack)); + } + + deletion = (TkTextEditAtom *) ckalloc(sizeof(TkTextEditAtom)); + deletion->type = TK_EDIT_DELETE; + + TkTextPrintIndex(&index1, indexBuffer); + deletion->index = (char *) ckalloc(strlen(indexBuffer) + 1); + strcpy(deletion->index, indexBuffer); + + TextGetText(&index1, &index2, &ds); + deletion->string = + (char *) ckalloc((unsigned int) Tcl_DStringLength(&ds) + 1); + strcpy(deletion->string, Tcl_DStringValue(&ds)); + Tcl_DStringFree(&ds); + + pushStack(&(textPtr->undoStack), deletion); + clearStack(&(textPtr->redoStack)); + } + updateDirtyFlag(textPtr); + TkBTreeDeleteChars(&index1, &index2); if (resetView) { TkTextMakeByteIndex(textPtr->tree, line, byteIndex, &index1); @@ -1569,6 +1605,7 @@ TkTextLostSelection(clientData) ClientData clientData; /* Information about text widget. */ { register TkText *textPtr = (TkText *) clientData; + XEvent event; #ifdef ALWAYS_SHOW_SELECTION TkTextIndex start, end; @@ -1587,6 +1624,21 @@ TkTextLostSelection(clientData) TkTextRedrawTag(textPtr, &start, &end, textPtr->selTagPtr, 1); TkBTreeTag(&start, &end, textPtr->selTagPtr, 0); #endif + + /* + * Send an event that the selection changed. This is equivalent to + * "event generate $textWidget <<Selection>>" + */ + + memset((VOID *) &event, 0, sizeof(event)); + event.xany.type = VirtualEvent; + event.xany.serial = NextRequest(Tk_Display(textPtr->tkwin)); + event.xany.send_event = False; + event.xany.window = Tk_WindowId(textPtr->tkwin); + event.xany.display = Tk_Display(textPtr->tkwin); + ((XVirtualEvent *) &event)->name = Tk_GetUid("Selection"); + Tk_HandleEvent(&event); + textPtr->flags &= ~GOT_SELECTION; } @@ -1912,7 +1964,7 @@ TextSearchCmd(textPtr, interp, argc, argv) i = p - startOfLine; thisLength = patLength; } else { - char *start, *end; + CONST char *start, *end; int match; match = Tcl_RegExpExec(interp, regexp, @@ -2073,7 +2125,7 @@ TkTextGetTabs(interp, tkwin, string) * the text manual entry for details. */ { int argc, i, count, c; - char **argv; + CONST char **argv; TkTextTabArray *tabArrayPtr; TkTextTab *tabPtr; Tcl_UniChar ch; @@ -2319,9 +2371,9 @@ DumpLine(interp, textPtr, what, linePtr, startByte, endByte, lineno, command) offset += segPtr->size, segPtr = segPtr->nextPtr) { if ((what & TK_DUMP_TEXT) && (segPtr->typePtr == &tkTextCharType) && (offset + segPtr->size > startByte)) { - char savedChar; /* Last char used in the seg */ - int last = segPtr->size; /* Index of savedChar */ - int first = 0; /* Index of first char in seg */ + char savedChar; /* Last char used in the seg */ + int last = segPtr->size; /* Index of savedChar */ + int first = 0; /* Index of first char in seg */ if (offset + segPtr->size > endByte) { last = endByte - offset; } @@ -2406,7 +2458,7 @@ DumpSegment(interp, key, value, command, index, what) Tcl_AppendElement(interp, buffer); return TCL_OK; } else { - char *argv[4]; + CONST char *argv[4]; char *list; int result; argv[0] = key; @@ -2419,4 +2471,475 @@ DumpSegment(interp, key, value, command, index, what) return result; } } + +/* + * pushStack + * Push elem on the stack identified by stack. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static void pushStack ( stack, elem ) + TkTextEditAtom ** stack; + TkTextEditAtom * elem; +{ + elem->next = *stack; + *stack = elem; +} + +/* + * popStack -- + * Remove and return the top element from the stack identified by + * stack. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static TkTextEditAtom * popStack ( stack ) + TkTextEditAtom ** stack ; +{ + TkTextEditAtom * elem = NULL; + if (*stack != NULL ) { + elem = *stack; + *stack = elem->next; + } + return elem; +} + +/* + * insertSeparator -- + * insert a separator on the stack, indicating a border for + * an undo/redo chunk. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static void insertSeparator ( stack ) + TkTextEditAtom ** stack; +{ + TkTextEditAtom * separator; + + if ( *stack != NULL && (*stack)->type != TK_EDIT_SEPARATOR ) { + separator = (TkTextEditAtom *) ckalloc(sizeof(TkTextEditAtom)); + separator->type = TK_EDIT_SEPARATOR; + pushStack(stack,separator); + } +} + +/* + * clearStack -- + * Clear an entire undo or redo stack and destroy all elements in it. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static void clearStack ( stack ) + TkTextEditAtom ** stack; /* An Undo or Redo stack */ +{ + TkTextEditAtom * elem; + + while ( (elem = popStack(stack)) ) { + if ( elem->type != TK_EDIT_SEPARATOR ) { + ckfree(elem->index); + ckfree(elem->string); + } + ckfree((char *)elem); + } + *stack = NULL; +} + +/* + * TextEditUndo -- + * undo the last change. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static int TextEditUndo (interp,textPtr) + Tcl_Interp * interp; + TkText * textPtr; /* Overall information about text widget. */ +{ + TkTextEditAtom * elem; + TkTextIndex fromIndex, toIndex; + char buffer[TK_POS_CHARS]; + char viewIndex[TK_POS_CHARS]; + + if ( ! textPtr->undo ) { + return TCL_OK; + } + + /* Turn off the undo feature */ + + textPtr->undo = 0; + + /* insert a separator on the redo stack */ + + insertSeparator(&(textPtr->redoStack)); + + /* Pop and skip the first separator if there is one*/ + + elem = popStack(&(textPtr->undoStack)); + + if ( elem == NULL ) { + textPtr->undo = 1; + return TCL_ERROR; + } + + if ( ( elem != NULL ) && ( elem->type == TK_EDIT_SEPARATOR ) ) { + ckfree((char *) elem); + elem = popStack(&(textPtr->undoStack)); + } + + while ( elem && (elem->type != TK_EDIT_SEPARATOR) ) { + switch ( elem->type ) { + case TK_EDIT_INSERT: + TkTextGetIndex(interp,textPtr,elem->index,&toIndex); + strcpy(viewIndex,elem->index); + TkTextIndexForwBytes(&toIndex,(int)strlen(elem->string),&toIndex); + TkTextPrintIndex(&toIndex,buffer); + textPtr->isDirtyIncrement = -1; + DeleteChars(textPtr,elem->index,buffer); + textPtr->isDirtyIncrement = 1; + break; + case TK_EDIT_DELETE: + TkTextGetIndex(interp,textPtr,elem->index,&fromIndex); + textPtr->isDirtyIncrement = -1; + InsertChars(textPtr,&fromIndex,elem->string); + TkTextIndexForwBytes(&fromIndex,(int)strlen(elem->string),&toIndex); + TkTextPrintIndex(&toIndex,viewIndex); + textPtr->isDirtyIncrement = 1; + break; + default: + return TCL_ERROR; + } + pushStack(&(textPtr->redoStack),elem); + elem = popStack(&(textPtr->undoStack)); + } + + /* view the last changed position */ + + TkTextGetIndex(interp,textPtr,viewIndex,&toIndex); + TkTextSetMark(textPtr, "insert", &toIndex); + + /* insert a separator on the undo stack */ + + insertSeparator(&(textPtr->undoStack)); + + /* Turn back on the undo feature */ + + textPtr->undo = 1; + + return TCL_OK; +} + +/* + * TextEditRedo -- + * redo the last undone change. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static int TextEditRedo (interp,textPtr) + Tcl_Interp * interp; + TkText * textPtr; /* Overall information about text widget. */ +{ + TkTextEditAtom *elem; + TkTextIndex fromIndex, toIndex; + char buffer[TK_POS_CHARS]; + char viewIndex[TK_POS_CHARS]; + + if (!textPtr->undo) { + return TCL_OK; + } + + /* Turn off the undo feature temporarily */ + + textPtr->undo = 0; + /* insert a separator on the undo stack */ + + insertSeparator(&(textPtr->undoStack)); + + /* Pop and skip the first separator if there is one*/ + + elem = popStack(&(textPtr->redoStack)); + + if ( elem == NULL ) { + textPtr->undo = 1; + return TCL_ERROR; + } + + if ( ( elem != NULL ) && ( elem->type == TK_EDIT_SEPARATOR ) ) { + ckfree((char *) elem); + elem = popStack(&(textPtr->redoStack)); + } + + while ( elem && (elem->type != TK_EDIT_SEPARATOR) ) { + switch ( elem->type ) { + case TK_EDIT_INSERT: + TkTextGetIndex(interp, textPtr, elem->index, &fromIndex); + InsertChars(textPtr, &fromIndex, elem->string); + TkTextIndexForwBytes(&fromIndex, (int) strlen(elem->string), + &toIndex); + TkTextPrintIndex(&toIndex, viewIndex); + break; + case TK_EDIT_DELETE: + TkTextGetIndex(interp, textPtr, elem->index, &toIndex); + strcpy(viewIndex, elem->index); + TkTextIndexForwBytes(&toIndex, (int) strlen(elem->string), + &toIndex); + TkTextPrintIndex(&toIndex, buffer); + DeleteChars(textPtr, elem->index, buffer); + break; + default: + return TCL_ERROR; + } + pushStack(&(textPtr->undoStack), elem); + elem = popStack(&(textPtr->redoStack)); + } + + /* view the last changed position */ + + TkTextGetIndex(interp, textPtr, viewIndex, &toIndex); + TkTextSetMark(textPtr, "insert", &toIndex); + + /* insert a separator on the undo stack */ + + insertSeparator(&(textPtr->undoStack)); + + /* Turn back on the undo feature */ + + textPtr->undo = 1; + + return TCL_OK; +} + +/* + * TextEditCmd -- + * + * Handle the subcommands to "$text edit ...". + * See documentation for details. + * + * Results: + * None + * + * Side effects: + * None. + */ + +static int +TextEditCmd(textPtr, interp, argc, argv) + TkText *textPtr; /* Information about text widget. */ + Tcl_Interp *interp; /* Current interpreter. */ + int argc; /* Number of arguments. */ + char **argv; /* Argument strings. */ +{ + int c, setModified; + size_t length; + + if (argc < 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " edit option ?arg arg ...?\"", (char *) NULL); + return TCL_ERROR; + } + c = argv[2][0]; + length = strlen(argv[2]); + if ((c == 'm') && (strncmp(argv[2], "modified", length) == 0)) { + if (argc == 3) { + Tcl_SetObjResult(interp, Tcl_NewBooleanObj(textPtr->isDirty)); + } else if (argc != 4) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " edit modified ?boolean?\"", (char *) NULL); + return TCL_ERROR; + } else { + XEvent event; + if (Tcl_GetBoolean(interp, argv[3], &setModified) != TCL_OK) { + return TCL_ERROR; + } + /* + * Set or reset the dirty info and trigger a Modified event. + */ + + if (setModified) { + textPtr->isDirty = 1; + textPtr->modifiedSet = 1; + } else { + textPtr->isDirty = 0; + textPtr->modifiedSet = 0; + } + + /* + * Send an event that the text was modified. This is equivalent to + * "event generate $textWidget <<Modified>>" + */ + + memset((VOID *) &event, 0, sizeof(event)); + event.xany.type = VirtualEvent; + event.xany.serial = NextRequest(Tk_Display(textPtr->tkwin)); + event.xany.send_event = False; + event.xany.window = Tk_WindowId(textPtr->tkwin); + event.xany.display = Tk_Display(textPtr->tkwin); + ((XVirtualEvent *) &event)->name = Tk_GetUid("Modified"); + Tk_HandleEvent(&event); + } + } else if ((c == 'r') && (strncmp(argv[2], "redo", length) == 0) + && (length >= 3)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " edit redo\"", (char *) NULL); + return TCL_ERROR; + } + if ( TextEditRedo(interp,textPtr) ) { + Tcl_AppendResult(interp, "nothing to redo", (char *) NULL); + return TCL_ERROR; + } + } else if ((c == 'r') && (strncmp(argv[2], "reset", length) == 0) + && (length >= 3)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " edit reset\"", (char *) NULL); + return TCL_ERROR; + } + clearStack(&(textPtr->undoStack)); + clearStack(&(textPtr->redoStack)); + } else if ((c == 's') && (strncmp(argv[2], "separator", length) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " edit separator\"", (char *) NULL); + return TCL_ERROR; + } + insertSeparator(&(textPtr->undoStack)); + } else if ((c == 'u') && (strncmp(argv[2], "undo", length) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", + argv[0], " edit undo\"", (char *) NULL); + return TCL_ERROR; + } + if ( TextEditUndo(interp,textPtr) ) { + Tcl_AppendResult(interp, "nothing to undo", + (char *) NULL); + return TCL_ERROR; + } + } else { + Tcl_AppendResult(interp, "bad edit option \"", argv[2], + "\": must be modified, redo, reset, separator or undo", + (char *) NULL); + return TCL_ERROR; + } + + return TCL_OK; +} + +/* + * TextGetText -- + * Returns the text from indexPtr1 to indexPtr2, placing that text + * in the Tcl_DString given. That DString should be free or uninitialized. + * + * Results: + * None. + * + * Side effects: + * Memory will be allocated for the DString. Remember to free it. + */ + +static void +TextGetText(indexPtr1,indexPtr2, dsPtr) + TkTextIndex *indexPtr1; + TkTextIndex *indexPtr2; + Tcl_DString *dsPtr; +{ + TkTextIndex tmpIndex; + Tcl_DStringInit(dsPtr); + + TkTextMakeByteIndex(indexPtr1->tree, TkBTreeLineIndex(indexPtr1->linePtr), + indexPtr1->byteIndex, &tmpIndex); + + if (TkTextIndexCmp(indexPtr1, indexPtr2) < 0) { + while (1) { + int offset, last; + TkTextSegment *segPtr; + + segPtr = TkTextIndexToSeg(&tmpIndex, &offset); + last = segPtr->size; + if (tmpIndex.linePtr == indexPtr2->linePtr) { + int last2; + + if (indexPtr2->byteIndex == tmpIndex.byteIndex) { + break; + } + last2 = indexPtr2->byteIndex - tmpIndex.byteIndex + offset; + if (last2 < last) { + last = last2; + } + } + if (segPtr->typePtr == &tkTextCharType) { + Tcl_DStringAppend(dsPtr, segPtr->body.chars + offset, + last - offset); + } + TkTextIndexForwBytes(&tmpIndex, last-offset, &tmpIndex); + } + } +} + +/* + * updateDirtyFlag -- + * increases the dirtyness of the text widget + * + * Results: + * None + * + * Side effects: + * None. + */ + +static void updateDirtyFlag (textPtr) + TkText *textPtr; /* Information about text widget. */ +{ + int oldDirtyFlag; + + if (textPtr->modifiedSet) { + return; + } + oldDirtyFlag = textPtr->isDirty; + textPtr->isDirty += textPtr->isDirtyIncrement; + if (textPtr->isDirty == 0 || oldDirtyFlag == 0) { + XEvent event; + /* + * Send an event that the text was modified. This is equivalent to + * "event generate $textWidget <<Modified>>" + */ + + memset((VOID *) &event, 0, sizeof(event)); + event.xany.type = VirtualEvent; + event.xany.serial = NextRequest(Tk_Display(textPtr->tkwin)); + event.xany.send_event = False; + event.xany.window = Tk_WindowId(textPtr->tkwin); + event.xany.display = Tk_Display(textPtr->tkwin); + ((XVirtualEvent *) &event)->name = Tk_GetUid("Modified"); + Tk_HandleEvent(&event); + } +} diff --git a/generic/tkText.h b/generic/tkText.h index f89c18f..0b65e94 100644 --- a/generic/tkText.h +++ b/generic/tkText.h @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkText.h,v 1.7 2000/01/06 02:18:58 hobbs Exp $ + * RCS: @(#) $Id: tkText.h,v 1.7.8.1 2002/02/05 02:25:16 wolfsuit Exp $ */ #ifndef _TKTEXT @@ -451,6 +451,25 @@ typedef struct TkTextTabArray { * BE THE LAST IN THE STRUCTURE. */ } TkTextTabArray; +/* enum definining the types used in an edit stack */ + +typedef enum { + TK_EDIT_SEPARATOR, /* Marker */ + TK_EDIT_INSERT, /* The undo is an insert */ + TK_EDIT_DELETE /* The undo is a delete */ +} TkTextEditType; + +/* strcut defining the basic undo/redo stack element */ + +typedef struct TkTextEditAtom { + TkTextEditType type; /* The type that will trigger the + * required action*/ + char * index; /* The starting index of the range */ + char * string; /* The text to be inserted / deleted */ + struct TkTextEditAtom * next; /* Pointer to the next element in the + * stack */ +} TkTextEditAtom; + /* * A data structure of the following type is kept for each text widget that * currently exists for this process: @@ -604,7 +623,7 @@ typedef struct TkText { /* Pointer to segment for "current" mark, * or NULL if none. */ XEvent pickEvent; /* The event from which the current character - * was chosen. Must be saved so that we + * was chosen. Must be saved so that we * can repick after modifications to the * text. */ int numCurTags; /* Number of tags associated with character @@ -616,15 +635,43 @@ typedef struct TkText { * Miscellaneous additional information: */ - char *takeFocus; /* Value of -takeFocus option; not used in + char *takeFocus; /* Value of -takeFocus option; not used in * the C code, but used by keyboard traversal * scripts. Malloc'ed, but may be NULL. */ char *xScrollCmd; /* Prefix of command to issue to update * horizontal scrollbar when view changes. */ char *yScrollCmd; /* Prefix of command to issue to update * vertical scrollbar when view changes. */ - int flags; /* Miscellaneous flags; see below for + int flags; /* Miscellaneous flags; see below for * definitions. */ + + /* + * Information related to the undo/redo functonality + */ + + TkTextEditAtom * undoStack; /* The undo stack */ + + TkTextEditAtom * redoStack; /* The redo stack */ + + int undo; /* non zero means the undo/redo behaviour is + * enabled */ + + int autoSeparators; /* non zero means the separatorss will be + * inserted automatically */ + + int modifiedSet; /* Flag indicating that the 'dirtynesss' of + * the text widget has been expplicitly set. + */ + + int isDirty; /* Flag indicating the 'dirtynesss' of the text + * widget. If the flag is not zero, unsaved + * modifications have been applied to the + * text widget */ + + int isDirtyIncrement; /* Amount with which the isDirty flag is + * incremented every edit action + */ + } TkText; /* @@ -787,7 +834,7 @@ EXTERN int TkTextDLineInfo _ANSI_ARGS_((TkText *textPtr, TkTextIndex *indexPtr, int *xPtr, int *yPtr, int *widthPtr, int *heightPtr, int *basePtr)); EXTERN TkTextTag * TkTextCreateTag _ANSI_ARGS_((TkText *textPtr, - char *tagName)); + CONST char *tagName)); EXTERN void TkTextFreeDInfo _ANSI_ARGS_((TkText *textPtr)); EXTERN void TkTextFreeTag _ANSI_ARGS_((TkText *textPtr, TkTextTag *tagPtr)); diff --git a/generic/tkTextIndex.c b/generic/tkTextIndex.c index 8376419..f24fe48 100644 --- a/generic/tkTextIndex.c +++ b/generic/tkTextIndex.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkTextIndex.c,v 1.3 1999/04/16 01:51:24 stanton Exp $ + * RCS: @(#) $Id: tkTextIndex.c,v 1.3.18.1 2002/02/05 02:25:16 wolfsuit Exp $ */ #include "default.h" @@ -64,7 +64,7 @@ TkTextMakeByteIndex(tree, lineIndex, byteIndex, indexPtr) { TkTextSegment *segPtr; int index; - char *p, *start; + CONST char *p, *start; Tcl_UniChar ch; indexPtr->tree = tree; @@ -977,7 +977,7 @@ TkTextIndexBackChars(srcPtr, charCount, dstPtr) { TkTextSegment *segPtr, *oldPtr; int lineIndex, segSize; - char *p, *start, *end; + CONST char *p, *start, *end; if (charCount <= 0) { TkTextIndexForwChars(srcPtr, -charCount, dstPtr); diff --git a/generic/tkTextTag.c b/generic/tkTextTag.c index c126fcc..d043196 100644 --- a/generic/tkTextTag.c +++ b/generic/tkTextTag.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkTextTag.c,v 1.5 2000/01/06 02:18:59 hobbs Exp $ + * RCS: @(#) $Id: tkTextTag.c,v 1.5.8.1 2002/02/05 02:25:16 wolfsuit Exp $ */ #include "default.h" @@ -151,7 +151,7 @@ TkTextTagCmd(textPtr, interp, argc, argv) index2 = index1; TkTextIndexForwChars(&index2, 1, &index2); } - + if (tagPtr->affectsDisplay) { TkTextRedrawTag(textPtr, &index1, &index2, tagPtr, !addTag); } else { @@ -159,18 +159,34 @@ TkTextTagCmd(textPtr, interp, argc, argv) * Still need to trigger enter/leave events on tags that * have changed. */ - + TkTextEventuallyRepick(textPtr); } TkBTreeTag(&index1, &index2, tagPtr, addTag); - + /* * If the tag is "sel" then grab the selection if we're supposed * to export it and don't already have it. Also, invalidate * partially-completed selection retrievals. */ - + if (tagPtr == textPtr->selTagPtr) { + XEvent event; + /* + * Send an event that the selection changed. + * This is equivalent to + * "event generate $textWidget <<Selection>>" + */ + + memset((VOID *) &event, 0, sizeof(event)); + event.xany.type = VirtualEvent; + event.xany.serial = NextRequest(Tk_Display(textPtr->tkwin)); + event.xany.send_event = False; + event.xany.window = Tk_WindowId(textPtr->tkwin); + event.xany.display = Tk_Display(textPtr->tkwin); + ((XVirtualEvent *) &event)->name = Tk_GetUid("Selection"); + Tk_HandleEvent(&event); + if (addTag && textPtr->exportSelection && !(textPtr->flags & GOT_SELECTION)) { Tk_OwnSelection(textPtr->tkwin, XA_PRIMARY, @@ -234,7 +250,7 @@ TkTextTagCmd(textPtr, interp, argc, argv) command = Tk_GetBinding(interp, textPtr->bindingTable, (ClientData) tagPtr, argv[4]); if (command == NULL) { - char *string = Tcl_GetStringResult(interp); + CONST char *string = Tcl_GetStringResult(interp); /* * Ignore missing binding errors. This is a special hack @@ -462,6 +478,25 @@ TkTextTagCmd(textPtr, interp, argc, argv) TkTextMakeByteIndex(textPtr->tree, TkBTreeNumLines(textPtr->tree), 0, &last), TkBTreeTag(&first, &last, tagPtr, 0); + + if (tagPtr == textPtr->selTagPtr) { + XEvent event; + /* + * Send an event that the selection changed. + * This is equivalent to + * "event generate $textWidget <<Selection>>" + */ + + memset((VOID *) &event, 0, sizeof(event)); + event.xany.type = VirtualEvent; + event.xany.serial = NextRequest(Tk_Display(textPtr->tkwin)); + event.xany.send_event = False; + event.xany.window = Tk_WindowId(textPtr->tkwin); + event.xany.display = Tk_Display(textPtr->tkwin); + ((XVirtualEvent *) &event)->name = Tk_GetUid("Selection"); + Tk_HandleEvent(&event); + } + Tcl_DeleteHashEntry(hPtr); if (textPtr->bindingTable != NULL) { Tk_DeleteAllBindings(textPtr->bindingTable, @@ -769,7 +804,7 @@ TkTextTagCmd(textPtr, interp, argc, argv) TkTextTag * TkTextCreateTag(textPtr, tagName) TkText *textPtr; /* Widget in which tag is being used. */ - char *tagName; /* Name of desired tag. */ + CONST char *tagName; /* Name of desired tag. */ { register TkTextTag *tagPtr; Tcl_HashEntry *hPtr; diff --git a/generic/tkWindow.c b/generic/tkWindow.c index f0482e1..0101778 100644 --- a/generic/tkWindow.c +++ b/generic/tkWindow.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWindow.c,v 1.39.2.2 2001/10/17 07:10:46 wolfsuit Exp $ + * RCS: @(#) $Id: tkWindow.c,v 1.39.2.3 2002/02/05 02:25:16 wolfsuit Exp $ */ #include "tkPort.h" @@ -206,7 +206,7 @@ static Tk_Window CreateTopLevelWindow _ANSI_ARGS_((Tcl_Interp *interp, static void DeleteWindowsExitProc _ANSI_ARGS_(( ClientData clientData)); static TkDisplay * GetScreen _ANSI_ARGS_((Tcl_Interp *interp, - char *screenName, int *screenPtr)); + CONST char *screenName, int *screenPtr)); static int Initialize _ANSI_ARGS_((Tcl_Interp *interp)); static int NameWindow _ANSI_ARGS_((Tcl_Interp *interp, TkWindow *winPtr, TkWindow *parentPtr, @@ -356,12 +356,12 @@ CreateTopLevelWindow(interp, parent, name, screenName, flags) static TkDisplay * GetScreen(interp, screenName, screenPtr) Tcl_Interp *interp; /* Place to leave error message. */ - char *screenName; /* Name for screen. NULL or empty means + CONST char *screenName; /* Name for screen. NULL or empty means * use DISPLAY envariable. */ int *screenPtr; /* Where to store screen number. */ { register TkDisplay *dispPtr; - char *p; + CONST char *p; int screenId; size_t length; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) @@ -2209,7 +2209,7 @@ Tk_SetClassProcs(tkwin, procs, instanceData) Tk_Window Tk_NameToWindow(interp, pathName, tkwin) Tcl_Interp *interp; /* Where to report errors. */ - char *pathName; /* Path name of window. */ + CONST char *pathName; /* Path name of window. */ Tk_Window tkwin; /* Token for window: name is assumed to * belong to the same main window as tkwin. */ { @@ -2571,6 +2571,11 @@ OpenIM(dispPtr) #else unsigned short i; XIMStyles *stylePtr; + char *modifier_list; + + if ((modifier_list = XSetLocaleModifiers("")) == NULL) { + goto error; + } dispPtr->inputMethod = XOpenIM(dispPtr->display, NULL, NULL, NULL); if (dispPtr->inputMethod == NULL) { @@ -2825,7 +2830,9 @@ Initialize(interp) { char *p; int argc, code; - char **argv, *args[20]; + CONST char **argv; + char *args[20]; + CONST char *argString = NULL; Tcl_DString class; ThreadSpecificData *tsdPtr; @@ -2935,7 +2942,7 @@ Initialize(interp) * cross interp refcounting and changing the code below. */ - p = Tcl_GetStringResult(master); + argString = Tcl_GetStringResult(master); } else { /* * If there is an "argv" variable, get its value, extract out @@ -2943,13 +2950,13 @@ Initialize(interp) * the arguments that we used. */ - p = Tcl_GetVar2(interp, "argv", (char *) NULL, TCL_GLOBAL_ONLY); + argString = Tcl_GetVar2(interp, "argv", (char *) NULL, TCL_GLOBAL_ONLY); } argv = NULL; - if (p != NULL) { + if (argString != NULL) { char buffer[TCL_INTEGER_SPACE]; - if (Tcl_SplitList(interp, p, &argc, &argv) != TCL_OK) { + if (Tcl_SplitList(interp, argString, &argc, &argv) != TCL_OK) { argError: Tcl_AddErrorInfo(interp, "\n (processing arguments in argv variable)"); |