diff options
Diffstat (limited to 'generic/Item.c')
-rw-r--r-- | generic/Item.c | 831 |
1 files changed, 339 insertions, 492 deletions
diff --git a/generic/Item.c b/generic/Item.c index f268880..5d9ac86 100644 --- a/generic/Item.c +++ b/generic/Item.c @@ -172,8 +172,11 @@ static char *attribute_type_strings[] = { "mapinfo", "image", "leaderanchors", - "JoinStyle", - "CapStyle" + "joinstyle", + "capstyle", + "gradientgeometry", + "gradientcolor", + "window" }; @@ -187,11 +190,11 @@ static char *attribute_type_strings[] = { static void Damage(WidgetInfo *wi, ZnBBox *damage); static void Invalidate(Item item, int reason); static int ConfigureField(FieldSet field_set, unsigned int field, - int argc, ZnAttrList argv, int *flags); + int argc, Tcl_Obj *CONST argv[], int *flags); static int QueryField(FieldSet field_set, unsigned int field, - int argc, ZnAttrList argv); -static Arg AttributeToString(WidgetInfo *wi, char *record, ZnAttrConfig *desc, - char *buffer, Tcl_FreeProc **free_proc); + int argc, Tcl_Obj *CONST argv[]); +static Tcl_Obj *AttributeToObj(WidgetInfo *wi, char *record, + ZnAttrConfig *desc, char *buffer); static void FieldImageChange(ClientData client_data, int x, int y, int width, int height, int image_width, int image_height); static void FieldTileChange(ClientData client_data, int x, int y, int width, @@ -228,23 +231,17 @@ InitAttrDesc(ZnAttrConfig *attr_desc) ********************************************************************************** */ static int -AttributesInfo(Item item, - int field, /* 0< means the item itself. */ - int argc, - Arg *args) +AttributesInfo(Item item, + int field, /* 0< means the item itself. */ + int argc, + Tcl_Obj *CONST args[]) { WidgetInfo *wi = item->wi; char *record; ZnAttrConfig *desc; Tk_Uid attr_uid = NULL; -#ifndef PTK - Arg entries[5]; -#else - Arg *entries; -#endif - Arg result; + Tcl_Obj *l, *entries[5]; char buffer[256]; - Tcl_FreeProc *free_proc; if (field < 0) { record = (char *) item; @@ -267,12 +264,12 @@ AttributesInfo(Item item, } if (argc == 1) { - attr_uid = Tk_GetUid(LangString(args[0])); + attr_uid = Tk_GetUid(Tcl_GetString(args[0])); while (True) { if (desc->type == ZN_CONFIG_END) { Tcl_AppendResult(wi->interp, "unknown attribute \"", - LangString(args[0]), "\"", NULL); + Tcl_GetString(args[0]), "\"", NULL); return ZN_ERROR; } else if (attr_uid == desc->uid) { @@ -282,49 +279,35 @@ AttributesInfo(Item item, desc++; } } + entries[0] = NewStringObj(desc->name); + entries[1] = NewStringObj(attribute_type_strings[desc->type]); + entries[2] = NewBooleanObj(desc->read_only ? 1 : 0); + entries[3] = NewStringObj(""); + entries[4] = AttributeToObj(wi, record, desc, buffer); #ifdef PTK - entries = LangAllocVec(5); - LangSetInt(&entries[2], desc->read_only ? 1 : 0); + l = Tcl_Merge(5, entries); + Tcl_SetObjResult(wi->interp, l); #else - entries[2] = desc->read_only ? "1" : "0"; -#endif - LangSetString(&entries[0], desc->name); - LangSetString(&entries[1], attribute_type_strings[desc->type]); - LangSetString(&entries[3], ""); - LangSetArg(&entries[4], AttributeToString(wi, record, desc, buffer, &free_proc)); - result = Tcl_Merge(5, entries); -#ifndef PTK - if (free_proc == TCL_DYNAMIC) { - ZnFree(entries[4]); - } - Tcl_SetResult(wi->interp, result, TCL_DYNAMIC); -#else - LangFreeVec(5, entries); - Tcl_ArgResult(wi->interp, result); + Tcl_SetObjResult(wi->interp, Tcl_NewListObj(5, entries)); #endif } else { +#ifdef PTK + Tcl_Obj *o; +#endif + l = Tcl_GetObjResult(wi->interp); while (desc->type != ZN_CONFIG_END) { + entries[0] = NewStringObj(desc->name); + entries[1] = NewStringObj(attribute_type_strings[desc->type]); + entries[2] = NewBooleanObj(desc->read_only ? 1 : 0); + entries[3] = NewStringObj(""); + entries[4] = AttributeToObj(wi, record, desc, buffer); #ifdef PTK - entries = LangAllocVec(5); - LangSetInt(&entries[2], desc->read_only ? 1 : 0); + o = NULL; + LangSetArg(&o, Tcl_Merge(5, entries)); + Tcl_ListObjAppendElement(wi->interp, l, o); #else - entries[2] = desc->read_only ? "1" : "0"; -#endif - LangSetString(&entries[0], desc->name); - LangSetString(&entries[1], attribute_type_strings[desc->type]); - LangSetString(&entries[3], ""); - LangSetArg(&entries[4], AttributeToString(wi, record, desc, buffer, &free_proc)); - result = Tcl_Merge(5, entries); -#ifndef PTK - if (free_proc == TCL_DYNAMIC) { - ZnFree(entries[4]); - } - Tcl_AppendElement(wi->interp, result); - ZnFree(result); -#else - LangFreeVec(5, entries); - Tcl_AppendArg(wi->interp, result); + Tcl_ListObjAppendElement(wi->interp, l, Tcl_NewListObj(5, entries)); #endif desc++; } @@ -342,11 +325,11 @@ AttributesInfo(Item item, ********************************************************************************** */ static int -ConfigureAttributes(char *record, - int field, /* 0< means item itself. */ - int argc, - Arg *args, - int *flags) +ConfigureAttributes(char *record, + int field, /* 0< means item itself. */ + int argc, + Tcl_Obj *CONST args[], + int *flags) { WidgetInfo *wi; Item item = NULL; @@ -356,7 +339,7 @@ ConfigureAttributes(char *record, ZnPtr valp; ZnAttrConfig *attr_desc; FieldSet field_set = NULL; - + char *str; if (field < 0) { item = (Item) record; @@ -376,20 +359,20 @@ ConfigureAttributes(char *record, } for (i = 0; i < argc; i += 2) { - attr_uid = Tk_GetUid(LangString(args[i])); + attr_uid = Tk_GetUid(Tcl_GetString(args[i])); desc = attr_desc; while (True) { if (desc->type == ZN_CONFIG_END) { /*printf("ERROR: record <0x%X>\n", record);*/ Tcl_AppendResult(wi->interp, "unknown attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } else if (attr_uid == desc->uid) { if (desc->read_only) { Tcl_AppendResult(wi->interp, "attribute \"", - LangString(args[i]), "\" can only be read", NULL); + Tcl_GetString(args[i]), "\" can only be read", NULL); return ZN_ERROR; } valp = record + desc->offset; @@ -398,7 +381,7 @@ ConfigureAttributes(char *record, case ZN_CONFIG_COLOR: { XColor *color; - Tk_Uid new_name = Tk_GetUid(LangString(args[i+1])); + Tk_Uid new_name = Tk_GetUid(Tcl_GetString(args[i+1])); char *name = NULL; if (*((XColor **) valp)) { name = ZnNameOfColor(*((XColor **) valp)); @@ -407,7 +390,7 @@ ConfigureAttributes(char *record, color = ZnGetColor(wi->interp, wi->win, new_name); if (!color) { Tcl_AppendResult(wi->interp, " color expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (*((XColor **) valp)) { @@ -421,7 +404,7 @@ ConfigureAttributes(char *record, case ZN_CONFIG_GRADIENT_COLOR: { ZnColorGradient cg; - Tk_Uid new_name = Tk_GetUid(LangString(args[i+1])); + Tk_Uid new_name = Tk_GetUid(Tcl_GetString(args[i+1])); char *name = NULL; if (*((ZnColorGradient *) valp)) { name = ZnNameOfColorGradient(*((ZnColorGradient *) valp)); @@ -431,7 +414,7 @@ ConfigureAttributes(char *record, if (!cg) { Tcl_AppendResult(wi->interp, " color gradient expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (*((ZnColorGradient *) valp)) { @@ -445,9 +428,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_BOOL: { int b; - if (Tcl_GetBoolean(wi->interp, args[i+1], &b) != ZN_OK) { + if (Tcl_GetBooleanFromObj(wi->interp, args[i+1], &b) != ZN_OK) { Tcl_AppendResult(wi->interp, " boolean expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (b ^ (ISSET(*((char *) valp), desc->bool_bit) != 0)) { @@ -463,12 +446,13 @@ ConfigureAttributes(char *record, if (*((Pixmap *) valp) != ZnUnspecifiedPattern) { name = Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp)); } - if (strcmp(name, LangString(args[i+1])) != 0) { - if (strlen(LangString(args[i+1])) != 0) { - pattern = Tk_GetBitmap(wi->interp, wi->win, Tk_GetUid(LangString(args[i+1]))); + str = Tcl_GetString(args[i+1]); + if (strcmp(name, str) != 0) { + if (strlen(str) != 0) { + pattern = Tk_GetBitmap(wi->interp, wi->win, Tk_GetUid(str)); if (pattern == None) { Tcl_AppendResult(wi->interp, " pattern expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } } @@ -482,62 +466,40 @@ ConfigureAttributes(char *record, } case ZN_CONFIG_PATTERNS: { - ZnList new_pat_list = NULL; - Pixmap *pats; - int num_pats, result, j; - Arg *elems; -#ifdef PTK - LangFreeProc *freeProc = NULL; -#endif + ZnList new_pat_list = NULL; + Pixmap *pats; + int num_pats, j, k; + Tcl_Obj **elems; - if (strlen(LangString(args[i+1])) != 0) { - result = Lang_SplitList(wi->interp, args[i+1], &num_pats, &elems, &freeProc); - if (result == ZN_ERROR) { - Tcl_AppendResult(wi->interp, - " pattern list expected for attribute \"", - LangString(args[i]), "\"", NULL); -#ifdef PTK - if (elems != NULL && freeProc) { - (*freeProc)(num_pats, elems); - } -#endif - return ZN_ERROR; - } - if (num_pats) { - new_pat_list = ZnListNew(num_pats, sizeof(Pixmap)); - ZnListAssertSize(new_pat_list, num_pats); - pats = (Pixmap *) ZnListArray(new_pat_list); - for (j = 0; j < num_pats; j++) { - if (strlen(LangString(elems[j])) != 0) { - pats[j] = Tk_GetBitmap(wi->interp, wi->win, - Tk_GetUid(LangString(elems[j]))); - if (pats[j] == None) { - Tcl_AppendResult(wi->interp, - " unknown pattern \"", LangString(elems[j]), - "\" in pattern list", NULL); - ZnListFree(new_pat_list); -#ifndef PTK - Tcl_Free((char *) elems); -#else - if (freeProc) { - (*freeProc)(num_pats, elems); - } -#endif - return ZN_ERROR; + if (Tcl_ListObjGetElements(wi->interp, args[i+1], + &num_pats, &elems) == ZN_ERROR) { + Tcl_AppendResult(wi->interp, + " pattern list expected for attribute \"", + Tcl_GetString(args[i]), "\"", NULL); + return ZN_ERROR; + } + if (num_pats) { + new_pat_list = ZnListNew(num_pats, sizeof(Pixmap)); + ZnListAssertSize(new_pat_list, num_pats); + pats = (Pixmap *) ZnListArray(new_pat_list); + for (j = 0; j < num_pats; j++) { + str = Tcl_GetString(elems[j]); + if (strlen(str) != 0) { + pats[j] = Tk_GetBitmap(wi->interp, wi->win, Tk_GetUid(str)); + if (pats[j] == None) { + Tcl_AppendResult(wi->interp, " unknown pattern \"", str, + "\" in pattern list", NULL); + for (k = 0; k < j; k++) { + Tk_FreeBitmap(wi->dpy, pats[k]); } - } - else { - pats[j] = ZnUnspecifiedPattern; + ZnListFree(new_pat_list); + return ZN_ERROR; } } + else { + pats[j] = ZnUnspecifiedPattern; + } } -#ifndef PTK - Tcl_Free((char *) elems); -#else - if (freeProc) { - (*freeProc)(num_pats, elems); - } -#endif } if (*((ZnList *) valp)) { num_pats = ZnListSize(*((ZnList *) valp)); @@ -561,42 +523,25 @@ ConfigureAttributes(char *record, } case ZN_CONFIG_TAGS: { - int num_tags, result, j; - Arg *elems; -#ifdef PTK - LangFreeProc *freeProc = NULL; -#endif + int num_tags, j; + Tcl_Obj **elems; - if (strlen(LangString(args[i+1])) != 0) { - result = Lang_SplitList(wi->interp, args[i+1], &num_tags, &elems, &freeProc); - if (result == ZN_ERROR) { - Tcl_AppendResult(wi->interp, - " tag list expected for attribute \"", - LangString(args[i]), "\"", NULL); -#ifdef PTK - if (elems != NULL && freeProc) { - (*freeProc)(num_tags, elems); - } -#endif - return ZN_ERROR; - } - if (*((ZnList *) valp)) { - ITEM.FreeTags(item); - *flags |= desc->flags; - } - if (num_tags) { - for (j = 0; j < num_tags; j++) { - ITEM.AddTag(item, Tk_GetUid(LangString(elems[j]))); - } - *flags |= desc->flags; - } -#ifndef PTK - Tcl_Free((char *)elems); -#else - if (freeProc) { - (*freeProc)(num_tags, elems); + if (Tcl_ListObjGetElements(wi->interp, args[i+1], + &num_tags, &elems) == ZN_ERROR) { + Tcl_AppendResult(wi->interp, + " tag list expected for attribute \"", + Tcl_GetString(args[i]), "\"", NULL); + return ZN_ERROR; + } + if (*((ZnList *) valp)) { + ITEM.FreeTags(item); + *flags |= desc->flags; + } + if (num_tags) { + for (j = 0; j < num_tags; j++) { + ITEM.AddTag(item, Tk_GetUid(Tcl_GetString(elems[j]))); } -#endif + *flags |= desc->flags; } break; } @@ -605,10 +550,11 @@ ConfigureAttributes(char *record, case ZN_CONFIG_IMAGE: { char *text = ""; - if (strcmp(LangString(args[i+1]), *((char **) valp)) != 0) { - if (strlen(LangString(args[i+1])) != 0) { - text = (char *) ZnMalloc(strlen(LangString(args[i+1]))+1); - strcpy(text, LangString(args[i+1])); + str = Tcl_GetString(args[i+1]); + if (strcmp(str, *((char **) valp)) != 0) { + if (strlen(str) != 0) { + text = (char *) ZnMalloc(strlen(str)+1); + strcpy(text, str); } if (strlen(*((char **) valp)) != 0) { ZnFree(*((char **) valp)); @@ -625,11 +571,12 @@ ConfigureAttributes(char *record, if (*((Tk_Font *) valp)) { name = Tk_NameOfFont(*((Tk_Font *) valp)); } - if (strcmp(name, LangString(args[i+1])) != 0) { - font = Tk_GetFont(wi->interp, wi->win, LangString(args[i+1])); + str = Tcl_GetString(args[i+1]); + if (strcmp(name, str) != 0) { + font = Tk_GetFont(wi->interp, wi->win, str); if (!font) { Tcl_AppendResult(wi->interp, " font expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (*((Tk_Font *) valp)) { @@ -642,65 +589,48 @@ ConfigureAttributes(char *record, } case ZN_CONFIG_BORDER: { - Border border = NO_BORDER; - int j, len, largc, result; - Arg *largv; -#ifdef PTK - LangFreeProc *freeProc = NULL; -#endif + Border border = NO_BORDER; + int j, len, largc; + Tcl_Obj **largv; - result = Lang_SplitList(wi->interp, args[i+1], &largc, &largv, &freeProc); - if (result == ZN_ERROR) { + if (Tcl_ListObjGetElements(wi->interp, args[i+1], + &largc, &largv) == ZN_ERROR) { border_error: Tcl_AppendResult(wi->interp, " border expected for attribute \"", - LangString(args[i]), "\"", NULL); -#ifdef PTK - if (largv != NULL && freeProc) { - (*freeProc)(largc, largv); - } -#endif + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } - len = strlen(LangString(args[i+1])); for (j = 0; j < largc; j++) { - if (strncasecmp(LangString(largv[j]), LEFT_SPEC, len) == 0) { + str = Tcl_GetString(largv[j]); + len = strlen(str); + if (strncasecmp(str, LEFT_SPEC, len) == 0) { border |= LEFT_BORDER; } - else if (strncasecmp(LangString(largv[j]), RIGHT_SPEC, len) == 0) { + else if (strncasecmp(str, RIGHT_SPEC, len) == 0) { border |= RIGHT_BORDER; } - else if (strncasecmp(LangString(largv[j]), TOP_SPEC, len) == 0) { + else if (strncasecmp(str, TOP_SPEC, len) == 0) { border |= TOP_BORDER; } - else if (strncasecmp(LangString(largv[j]), BOTTOM_SPEC, len) == 0) { + else if (strncasecmp(str, BOTTOM_SPEC, len) == 0) { border |= BOTTOM_BORDER; } - else if (strncasecmp(LangString(largv[j]), CONTOUR_SPEC, len) == 0) { + else if (strncasecmp(str, CONTOUR_SPEC, len) == 0) { border |= CONTOUR_BORDER; } - else if (strncasecmp(LangString(largv[j]), OBLIQUE_SPEC, len) == 0) { + else if (strncasecmp(str, OBLIQUE_SPEC, len) == 0) { border |= OBLIQUE; } - else if (strncasecmp(LangString(largv[j]), COUNTER_OBLIQUE_SPEC, len) == 0) { + else if (strncasecmp(str, COUNTER_OBLIQUE_SPEC, len) == 0) { border |= COUNTER_OBLIQUE; } - else if (strncasecmp(LangString(largv[j]), NO_BORDER_SPEC, len) == 0) { + else if (strncasecmp(str, NO_BORDER_SPEC, len) == 0) { border |= NO_BORDER; } else { -#ifndef PTK - Tcl_Free((char *) largv); -#endif goto border_error; } } -#ifndef PTK - Tcl_Free((char *) largv); -#else - if (largv != NULL && freeProc) { - (*freeProc)(largc, largv); - } -#endif if (border != *((Border *) valp)) { *((Border *) valp) = border; *flags |= desc->flags; @@ -711,31 +641,32 @@ ConfigureAttributes(char *record, { LineShape line_shape; int len; - len = strlen(LangString(args[i+1])); - if (strncasecmp(LangString(args[i+1]), STRAIGHT_SPEC, len) == 0) { + str = Tcl_GetString(args[i+1]); + len = strlen(str); + if (strncasecmp(str, STRAIGHT_SPEC, len) == 0) { line_shape = LINE_STRAIGHT; } - else if (strncasecmp(LangString(args[i+1]), RIGHT_LIGHTNING_SPEC, len) == 0) { + else if (strncasecmp(str, RIGHT_LIGHTNING_SPEC, len) == 0) { line_shape = LINE_RIGHT_LIGHTNING; } - else if (strncasecmp(LangString(args[i+1]), LEFT_LIGHTNING_SPEC, len) == 0) { + else if (strncasecmp(str, LEFT_LIGHTNING_SPEC, len) == 0) { line_shape = LINE_LEFT_LIGHTNING; } - else if (strncasecmp(LangString(args[i+1]), RIGHT_CORNER_SPEC, len) == 0) { + else if (strncasecmp(str, RIGHT_CORNER_SPEC, len) == 0) { line_shape = LINE_LEFT_CORNER; } - else if (strncasecmp(LangString(args[i+1]), LEFT_CORNER_SPEC, len) == 0) { + else if (strncasecmp(str, LEFT_CORNER_SPEC, len) == 0) { line_shape = LINE_LEFT_CORNER; } - else if (strncasecmp(LangString(args[i+1]), DOUBLE_RIGHT_CORNER_SPEC, len) == 0) { + else if (strncasecmp(str, DOUBLE_RIGHT_CORNER_SPEC, len) == 0) { line_shape = LINE_DOUBLE_LEFT_CORNER; } - else if (strncasecmp(LangString(args[i+1]), DOUBLE_LEFT_CORNER_SPEC, len) == 0) { + else if (strncasecmp(str, DOUBLE_LEFT_CORNER_SPEC, len) == 0) { line_shape = LINE_DOUBLE_LEFT_CORNER; } else { Tcl_AppendResult(wi->interp, " line shape expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (line_shape != *((LineShape *) valp)) { @@ -748,18 +679,19 @@ ConfigureAttributes(char *record, { LineStyle line_style; int len; - len = strlen(LangString(args[i+1])); - if (strncasecmp(LangString(args[i+1]), SIMPLE_SPEC, len) == 0) + str = Tcl_GetString(args[i+1]); + len = strlen(str); + if (strncasecmp(str, SIMPLE_SPEC, len) == 0) line_style = LINE_SIMPLE; - else if (strncasecmp(LangString(args[i+1]), DASHED_SPEC, len) == 0) + else if (strncasecmp(str, DASHED_SPEC, len) == 0) line_style = LINE_DASHED; - else if (strncasecmp(LangString(args[i+1]), MIXED_SPEC, len) == 0) + else if (strncasecmp(str, MIXED_SPEC, len) == 0) line_style = LINE_MIXED; - else if (strncasecmp(LangString(args[i+1]), DOTTED_SPEC, len) == 0) + else if (strncasecmp(str, DOTTED_SPEC, len) == 0) line_style = LINE_DOTTED; else { Tcl_AppendResult(wi->interp, " line style expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (line_style != *((LineStyle *) valp)) { @@ -771,9 +703,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_LINE_END: { ZnLineEnd line_end = NULL; - char *ptr = LangString(args[i+1]); - if (strlen(ptr) != 0) { - line_end = LineEndCreate(wi->interp, LangString(args[i+1])); + str = Tcl_GetString(args[i+1]); + if (strlen(str) != 0) { + line_end = LineEndCreate(wi->interp, str); if (line_end == NULL) { return ZN_ERROR; } @@ -794,9 +726,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_GRADIENT_GEOM: { ZnGradientGeom gg = NULL; - char *ptr = LangString(args[i+1]); - if (strlen(ptr) != 0) { - gg = GradientGeomCreate(wi->interp, LangString(args[i+1])); + str = Tcl_GetString(args[i+1]); + if (strlen(str) != 0) { + gg = GradientGeomCreate(wi->interp, str); if (gg == NULL) { return ZN_ERROR; } @@ -817,9 +749,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_RELIEF: { int relief; - if (Tk_GetRelief(wi->interp, LangString(args[i+1]), &relief) == ZN_ERROR) { + if (Tk_GetRelief(wi->interp, Tcl_GetString(args[i+1]), &relief) == ZN_ERROR) { Tcl_AppendResult(wi->interp, " relief expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (relief != *((ReliefStyle *) valp)) { @@ -832,9 +764,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_JOIN_STYLE: { int join; - if (Tk_GetJoinStyle(wi->interp, LangString(args[i+1]), &join) == ZN_ERROR) { + if (Tk_GetJoinStyle(wi->interp, Tcl_GetString(args[i+1]), &join) == ZN_ERROR) { Tcl_AppendResult(wi->interp, " join expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (join != *((int *) valp)) { @@ -846,9 +778,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_CAP_STYLE: { int cap; - if (Tk_GetCapStyle(wi->interp, LangString(args[i+1]), &cap) == ZN_ERROR) { + if (Tk_GetCapStyle(wi->interp, Tcl_GetString(args[i+1]), &cap) == ZN_ERROR) { Tcl_AppendResult(wi->interp, " cap expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (cap != *((int *) valp)) { @@ -859,39 +791,22 @@ ConfigureAttributes(char *record, } case ZN_CONFIG_POINT: { - ZnPoint point; - int largc, result; - Arg *largv; -#ifdef PTK - LangFreeProc *freeProc = NULL; -#endif - - result = Lang_SplitList(wi->interp, args[i+1], &largc, &largv, &freeProc); - if (result == ZN_ERROR || largc != 2) { + ZnPoint point; + int largc; + Tcl_Obj **largv; + + if ((Tcl_ListObjGetElements(wi->interp, args[i+1], + &largc, &largv) == ZN_ERROR) || + (largc != 2)) { point_error: -#ifdef PTK - if (largv != NULL && freeProc) { - (*freeProc)(largc, largv); - } -#endif Tcl_AppendResult(wi->interp, " position expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } - if ((Tcl_GetDouble(wi->interp, largv[0], &point.x) == ZN_ERROR) || - (Tcl_GetDouble(wi->interp, largv[1], &point.y) == ZN_ERROR)) { -#ifndef PTK - Tcl_Free((char *)largv); -#endif + if ((Tcl_GetDoubleFromObj(wi->interp, largv[0], &point.x) == ZN_ERROR) || + (Tcl_GetDoubleFromObj(wi->interp, largv[1], &point.y) == ZN_ERROR)) { goto point_error; } -#ifndef PTK - Tcl_Free((char *)largv); -#else - if (largv != NULL && freeProc) { - (*freeProc)(largc, largv); - } -#endif if ((point.x != ((ZnPoint *) valp)->x) || (point.y != ((ZnPoint *) valp)->y)) { *((ZnPoint *) valp) = point; @@ -901,41 +816,24 @@ ConfigureAttributes(char *record, } case ZN_CONFIG_RECT: { - ZnRect rect; - int largc, result; - Arg *largv; -#ifdef PTK - LangFreeProc *freeProc = NULL; -#endif + ZnRect rect; + int largc; + Tcl_Obj **largv; - result = Lang_SplitList(wi->interp, args[i+1], &largc, &largv, &freeProc); - if (result == ZN_ERROR || largc != 4) { + if ((Tcl_ListObjGetElements(wi->interp, args[i+1], + &largc, &largv) == ZN_ERROR) || + largc != 4) { rect_error: -#ifdef PTK - if (largv != NULL && freeProc) { - (*freeProc)(largc, largv); - } -#endif Tcl_AppendResult(wi->interp, " rectangle expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } - if ((Tcl_GetDouble(wi->interp, largv[0], &rect.x) == ZN_ERROR) || - (Tcl_GetDouble(wi->interp, largv[1], &rect.y) == ZN_ERROR) || - (Tcl_GetDouble(wi->interp, largv[2], &rect.w) == ZN_ERROR) || - (Tcl_GetDouble(wi->interp, largv[3], &rect.h) == ZN_ERROR)) { -#ifndef PTK - Tcl_Free((char *)largv); -#endif + if ((Tcl_GetDoubleFromObj(wi->interp, largv[0], &rect.x) == ZN_ERROR) || + (Tcl_GetDoubleFromObj(wi->interp, largv[1], &rect.y) == ZN_ERROR) || + (Tcl_GetDoubleFromObj(wi->interp, largv[2], &rect.w) == ZN_ERROR) || + (Tcl_GetDoubleFromObj(wi->interp, largv[3], &rect.h) == ZN_ERROR)) { goto rect_error; } -#ifndef PTK - Tcl_Free((char *)largv); -#else - if (largv != NULL && freeProc) { - (*freeProc)(largc, largv); - } -#endif if ((rect.x != ((ZnRect *) valp)->x) && (rect.y != ((ZnRect *) valp)->y) && (rect.w != ((ZnRect *) valp)->w) && @@ -948,9 +846,10 @@ ConfigureAttributes(char *record, case ZN_CONFIG_DIM: { int size; - if (Tk_GetPixels(wi->interp, wi->win, LangString(args[i+1]), &size) == ZN_ERROR) { + if (Tk_GetPixels(wi->interp, wi->win, + Tcl_GetString(args[i+1]), &size) == ZN_ERROR) { Tcl_AppendResult(wi->interp, " dimension expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (size != *((int *) valp)) { @@ -962,12 +861,12 @@ ConfigureAttributes(char *record, case ZN_CONFIG_PRI: { int pri; - if (Tcl_GetInt(wi->interp, args[i+1], &pri) == ZN_ERROR) { + if (Tcl_GetIntFromObj(wi->interp, args[i+1], &pri) == ZN_ERROR) { return ZN_ERROR; } if (pri < 0) { Tcl_AppendResult(wi->interp, " priority must be a positive integer \"", - LangString(args[i+1]), "\"", NULL); + Tcl_GetString(args[i+1]), "\"", NULL); return ZN_ERROR; } if (pri != *((int *) valp)) { @@ -986,11 +885,11 @@ ConfigureAttributes(char *record, { Item item2; int num; - if (strlen(LangString(args[i+1])) == 0) { + if (strlen(Tcl_GetString(args[i+1])) == 0) { item2 = ZN_NO_ITEM; } else { - num = ZnItemsWithTagOrId(wi, LangString(args[i+1]), &item2, NULL); + num = ZnItemsWithTagOrId(wi, args[i+1], &item2, NULL); if (num == 0) { return ZN_ERROR; } @@ -1004,11 +903,12 @@ ConfigureAttributes(char *record, case ZN_CONFIG_WINDOW: { ZnWindow win, ancestor, parent; - if (strlen(LangString(args[i+1])) == 0) { + str = Tcl_GetString(args[i+1]); + if (strlen(str) == 0) { win = NULL; } else { - win = Tk_NameToWindow(wi->interp, args[i+1], wi->win); + win = Tk_NameToWindow(wi->interp, str, wi->win); if (win == NULL) { return ZN_ERROR; } @@ -1053,20 +953,20 @@ ConfigureAttributes(char *record, case ZN_CONFIG_ANGLE: { int integer; - if (Tcl_GetInt(wi->interp, args[i+1], &integer) == ZN_ERROR) { + if (Tcl_GetIntFromObj(wi->interp, args[i+1], &integer) == ZN_ERROR) { return ZN_ERROR; } if (desc->type == ZN_CONFIG_ANGLE) { if ((integer < 0) || (integer > 360)) { Tcl_AppendResult(wi->interp, " angle must be between 0 and 360 \"", - LangString(args[i+1]), "\"", NULL); + Tcl_GetString(args[i+1]), "\"", NULL); return ZN_ERROR; } } else if (desc->type == ZN_CONFIG_UINT) { if (integer < 0) { Tcl_AppendResult(wi->interp, " positive integer expected for \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } } @@ -1079,9 +979,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_JUSTIFY: { Tk_Justify justify; - if (Tk_GetJustify(wi->interp, LangString(args[i+1]), &justify) == ZN_ERROR) { + if (Tk_GetJustify(wi->interp, Tcl_GetString(args[i+1]), &justify) == ZN_ERROR) { Tcl_AppendResult(wi->interp, " justify expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (justify != *((ZnJustify *) valp)) { @@ -1093,9 +993,9 @@ ConfigureAttributes(char *record, case ZN_CONFIG_ANCHOR: { Tk_Anchor anchor; - if (Tk_GetAnchor(wi->interp, LangString(args[i+1]), &anchor) == ZN_ERROR) { + if (Tk_GetAnchor(wi->interp, Tcl_GetString(args[i+1]), &anchor) == ZN_ERROR) { Tcl_AppendResult(wi->interp, " anchor expected for attribute \"", - LangString(args[i]), "\"", NULL); + Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } if (anchor != *((ZnAnchor *) valp)) { @@ -1107,13 +1007,13 @@ ConfigureAttributes(char *record, case ZN_CONFIG_LABEL_FORMAT: { ZnLabelFormat frmt = NULL; - char *ptr = LangString(args[i+1]); - - while (*ptr && (*ptr == ' ')) { - ptr++; + + str = Tcl_GetString(args[i+1]); + while (*str && (*str == ' ')) { + str++; } - if (strlen(ptr) != 0) { - frmt = LabelFormatCreate(wi->interp, ptr, + if (strlen(str) != 0) { + frmt = LabelFormatCreate(wi->interp, str, item->class->GetFieldSet(item)->num_fields); if (frmt == NULL) { return ZN_ERROR; @@ -1138,13 +1038,15 @@ ConfigureAttributes(char *record, { AutoAlign aa; int j; - if (strcmp(LangString(args[i+1]), "-") == 0) { + + str = Tcl_GetString(args[i+1]); + if (strcmp(str, "-") == 0) { aa.automatic = False; } - else if (strlen(LangString(args[i+1])) == 3) { + else if (strlen(str) == 3) { aa.automatic = True; for (j = 0; j < 3; j++) { - switch(LangString(args[i+1])[j]) { + switch(str[j]) { case 'l': case 'L': aa.align[j] = ZnJustifyLeft; @@ -1159,14 +1061,16 @@ ConfigureAttributes(char *record, break; default: Tcl_AppendResult(wi->interp, "invalid auto justify specifcation \"", - LangString(args[i+1]), "\" should be - or a triple of lcr", NULL); + Tcl_GetString(args[i+1]), + "\" should be - or a triple of lcr", NULL); return ZN_ERROR; } } } else { Tcl_AppendResult(wi->interp, "invalid auto alignment specification \"", - LangString(args[i+1]), "\" should be - or a triple of lcr", NULL); + Tcl_GetString(args[i+1]), + "\" should be - or a triple of lcr", NULL); return ZN_ERROR; } if ((aa.automatic != ((AutoAlign *) valp)->automatic) || @@ -1199,25 +1103,25 @@ ConfigureAttributes(char *record, LeaderAnchors lanch = NULL; int anchors[4]; int index, num_tok, anchor_index=0; - char *ptr = LangString(args[i+1]); - while (*ptr && (*ptr == ' ')) { - ptr++; + str = Tcl_GetString(args[i+1]); + while (*str && (*str == ' ')) { + str++; } - while (!*ptr && (anchor_index < 4)) { - switch (*ptr) { + while (!*str && (anchor_index < 4)) { + switch (*str) { case '|': - num_tok = sscanf(ptr, "|%d%n", &anchors[anchor_index], &index); + num_tok = sscanf(str, "|%d%n", &anchors[anchor_index], &index); if (num_tok != 1) { la_error: Tcl_AppendResult(wi->interp, " incorrect leader anchors \"", - LangString(args[i+1]), "\"", NULL); + Tcl_GetString(args[i+1]), "\"", NULL); return ZN_ERROR; } anchors[anchor_index+1] = -1; break; case '%': - num_tok = sscanf(ptr, "%%%dx%d%n", &anchors[anchor_index], + num_tok = sscanf(str, "%%%dx%d%n", &anchors[anchor_index], &anchors[anchor_index+1], &index); if (num_tok != 2) { goto la_error; @@ -1237,7 +1141,7 @@ ConfigureAttributes(char *record, break; } anchor_index += 2; - ptr += index; + str += index; } /* * If empty, pick the default (center of the bounding box). @@ -1283,148 +1187,124 @@ ConfigureAttributes(char *record, /* ********************************************************************************** * - * AttributeToString -- + * AttributeToObj -- * - * Returns the string representation of the attribute pointed + * Returns the obj representation of the attribute pointed * by 'valp'. The attribute type is given by 'type'. The function * never fail. The buffer parameter should be able to * contain 256 characters at least. * ********************************************************************************** */ -static Arg -AttributeToString(WidgetInfo *wi, - char *record, - ZnAttrConfig *desc, - char *buffer, - Tcl_FreeProc **free_proc) +static Tcl_Obj * +AttributeToObj(WidgetInfo *wi, + char *record, + ZnAttrConfig *desc, + char *buffer) { -#ifndef PTK -#define NUM_ELEMS 10 - Arg elems[NUM_ELEMS]; + Tcl_Obj *result = NULL; + char *valp = record + desc->offset; + char *str = ""; + Tcl_Obj *o, *objs[4]; + int i; +#ifdef PTK + Tcl_Obj **tmp=NULL; #endif - Arg *el_ptr; - Arg result = NULL; - char *valp = record + desc->offset; - - *free_proc = TCL_STATIC; switch (desc->type) { case ZN_CONFIG_COLOR: - LangSetString(&result, ""); if (*((XColor **) valp)) { - LangSetString(&result, ZnNameOfColor(*((XColor **) valp))); + result = NewStringObj(ZnNameOfColor(*((XColor **) valp))); } break; case ZN_CONFIG_BOOL: -#ifndef PTK - result = ISSET(*((char *) valp), desc->bool_bit) ? "1" : "0"; -#else - LangSetInt(&result, ISSET(*((char *) valp), desc->bool_bit) ? 1 : 0); -#endif + result = NewBooleanObj(ISSET(*((char *) valp), desc->bool_bit)?1:0); break; case ZN_CONFIG_PATTERN: - LangSetString(&result, ""); if (*((Pixmap *) valp)) { - LangSetString(&result, Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp))); + result = NewStringObj(Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp))); } break; case ZN_CONFIG_PATTERNS: { - int num_pats, i; - Pixmap *pats; + int num_pats=0; + Pixmap *pats; +#ifndef PTK + result = Tcl_NewListObj(0, NULL); +#endif if (*((ZnList *) valp)) { pats = (Pixmap *) ZnListArray(*((ZnList *) valp)); num_pats = ZnListSize(*((ZnList *) valp)); -#ifndef PTK - if (num_pats > NUM_ELEMS) { - el_ptr = (char **) ZnMalloc(num_pats*sizeof(char *)); - } - else { - el_ptr = elems; - } -#else - el_ptr = LangAllocVec(num_pats); +#ifdef PTK + tmp = (Tcl_Obj **) ZnMalloc(num_pats * sizeof(Tcl_Obj *)); #endif for (i = 0; i < num_pats; i++) { if (pats[i] != ZnUnspecifiedPattern) { - LangSetString(&el_ptr[i], Tk_NameOfBitmap(wi->dpy, pats[i])); + o = NewStringObj(Tk_NameOfBitmap(wi->dpy, pats[i])); } else { - LangSetString(&el_ptr[i], ""); + o = NewStringObj(""); } - } - result = Tcl_Merge(num_pats, el_ptr); - *free_proc = TCL_DYNAMIC; -#ifndef PTK - if (el_ptr != elems) { - ZnFree(el_ptr); - } +#ifdef PTK + tmp[i] = o; #else - LangFreeVec(num_pats, el_ptr); + Tcl_ListObjAppendElement(wi->interp, result, o); #endif + } } - else { - LangSetString(&result, ""); - } +#ifdef PTK + result = Tcl_Merge(num_pats, tmp); + ZnFree(tmp); +#endif break; } case ZN_CONFIG_TAGS: { - int num_tags, i; + int num_tags=0; Tk_Uid *tags; - + +#ifndef PTK + result = Tcl_NewListObj(0, NULL); +#endif if (*((ZnList *) valp)) { tags = (Tk_Uid *) ZnListArray(*((ZnList *) valp)); num_tags = ZnListSize(*((ZnList *) valp)); -#ifndef PTK - if (num_tags > NUM_ELEMS) { - el_ptr = (char **) ZnMalloc(num_tags*sizeof(char *)); - } - else { - el_ptr = elems; - } -#else - el_ptr = LangAllocVec(num_tags); +#ifdef PTK + tmp = (Tcl_Obj **) ZnMalloc(num_tags * sizeof(Tcl_Obj *)); #endif for (i = 0; i < num_tags; i++) { - LangSetString(&el_ptr[i], tags[i]); - } - result = Tcl_Merge(num_tags, el_ptr); - *free_proc = TCL_DYNAMIC; -#ifndef PTK - if (el_ptr != elems) { - ZnFree(el_ptr); - } +#ifdef PTK + tmp[i] = NewStringObj(tags[i]); #else - LangFreeVec(num_tags, el_ptr); + Tcl_ListObjAppendElement(wi->interp, result, + NewStringObj(tags[i])); #endif + } } - else { - LangSetString(&result, ""); - } +#ifdef PTK + result = Tcl_Merge(num_tags, tmp); + ZnFree(tmp); +#endif break; } case ZN_CONFIG_TEXT: case ZN_CONFIG_MAP_INFO: case ZN_CONFIG_IMAGE: - LangSetString(&result, *((char **) valp)); + result = NewStringObj(*((char **) valp)); break; case ZN_CONFIG_FONT: - LangSetString(&result, ""); if (*((Tk_Font *) valp)) { - LangSetString(&result, Tk_NameOfFont(*((Tk_Font *) valp))); + result = NewStringObj(Tk_NameOfFont(*((Tk_Font *) valp))); } break; case ZN_CONFIG_BORDER: { Border border = *((Border *) valp); if (border == NO_BORDER) { - LangSetString(&result, NO_BORDER_SPEC); + result = NewStringObj(NO_BORDER_SPEC); break; } - *free_proc = TCL_VOLATILE; buffer[0] = 0; if ((border & CONTOUR_BORDER) == CONTOUR_BORDER) { strcat(buffer, CONTOUR_SPEC); @@ -1464,7 +1344,7 @@ AttributeToString(WidgetInfo *wi, } strcat(buffer, COUNTER_OBLIQUE_SPEC); } - LangSetString(&result, buffer); + result = NewStringObj(buffer); } break; case ZN_CONFIG_LINE_SHAPE: @@ -1472,27 +1352,28 @@ AttributeToString(WidgetInfo *wi, LineShape line_shape = *((LineShape *) valp); switch (line_shape) { case LINE_STRAIGHT: - LangSetString(&result, STRAIGHT_SPEC); + str = STRAIGHT_SPEC; break; case LINE_RIGHT_LIGHTNING: - LangSetString(&result, RIGHT_LIGHTNING_SPEC); + str = RIGHT_LIGHTNING_SPEC; break; case LINE_LEFT_LIGHTNING: - LangSetString(&result, LEFT_LIGHTNING_SPEC); + str = LEFT_LIGHTNING_SPEC; break; case LINE_RIGHT_CORNER: - LangSetString(&result, RIGHT_CORNER_SPEC); + str = RIGHT_CORNER_SPEC; break; case LINE_LEFT_CORNER: - LangSetString(&result, LEFT_CORNER_SPEC); + str = LEFT_CORNER_SPEC; break; case LINE_DOUBLE_RIGHT_CORNER: - LangSetString(&result, DOUBLE_RIGHT_CORNER_SPEC); + str = DOUBLE_RIGHT_CORNER_SPEC; break; case LINE_DOUBLE_LEFT_CORNER: - LangSetString(&result, DOUBLE_LEFT_CORNER_SPEC); + str = DOUBLE_LEFT_CORNER_SPEC; break; } + result = NewStringObj(str); break; } case ZN_CONFIG_LINE_STYLE: @@ -1500,29 +1381,27 @@ AttributeToString(WidgetInfo *wi, LineStyle line_style = *((LineStyle *) valp); switch (line_style) { case LINE_SIMPLE: - LangSetString(&result, SIMPLE_SPEC); + str = SIMPLE_SPEC; break; case LINE_DASHED: - LangSetString(&result, DASHED_SPEC); + str = DASHED_SPEC; break; case LINE_MIXED: - LangSetString(&result, MIXED_SPEC); + str = MIXED_SPEC; break; case LINE_DOTTED: - LangSetString(&result, DOTTED_SPEC); + str = DOTTED_SPEC; break; } + result = NewStringObj(str); break; } case ZN_CONFIG_LINE_END: { ZnLineEnd line_end = *((ZnLineEnd *) valp); - if (!line_end) { - LangSetString(&result, ""); - } - else { - LangSetString(&result, LineEndGetString(line_end)); + if (line_end) { + result = NewStringObj(LineEndGetString(line_end)); } break; } @@ -1530,74 +1409,52 @@ AttributeToString(WidgetInfo *wi, { ZnGradientGeom gg = *((ZnGradientGeom *) valp); - if (!gg) { - LangSetString(&result, ""); - } - else { - LangSetString(&result, GradientGeomGetString(gg)); + if (gg) { + result = NewStringObj(GradientGeomGetString(gg)); } break; } case ZN_CONFIG_RELIEF: - LangSetString(&result , Tk_NameOfRelief(*((ReliefStyle *) valp))); + result = NewStringObj(Tk_NameOfRelief(*((ReliefStyle *) valp))); break; case ZN_CONFIG_JOIN_STYLE: - LangSetString(&result , Tk_NameOfJoinStyle(*((int *) valp))); + result = NewStringObj(Tk_NameOfJoinStyle(*((int *) valp))); break; case ZN_CONFIG_CAP_STYLE: - LangSetString(&result , Tk_NameOfCapStyle(*((int *) valp))); + result = NewStringObj(Tk_NameOfCapStyle(*((int *) valp))); break; case ZN_CONFIG_POINT: { -#ifndef PTK - *free_proc = TCL_VOLATILE; - sprintf(buffer, "%g %g", ((ZnPoint *) valp)->x, ((ZnPoint *) valp)->y); - result = buffer; + objs[0] = NewDoubleObj(((ZnPoint *) valp)->x); + objs[1] = NewDoubleObj(((ZnPoint *) valp)->y); +#ifdef PTK + result = Tcl_Merge(2, objs); #else - Arg *list = LangAllocVec(2); - LangSetInt(&list[0], ((ZnPoint *) valp)->x); - LangSetInt(&list[1], ((ZnPoint *) valp)->y); - result = Tcl_Merge(2, list); - LangFreeVec(2, list); + result = Tcl_NewListObj(2, objs); #endif break; } case ZN_CONFIG_RECT: { -#ifndef PTK - *free_proc = TCL_VOLATILE; - sprintf(buffer, "%g %g %g %g", - ((ZnRect *) valp)->x, ((ZnRect *) valp)->y, - ((ZnRect *) valp)->w, ((ZnRect *) valp)->h); - result = buffer; + objs[0] = NewDoubleObj(((ZnRect *) valp)->x); + objs[1] = NewDoubleObj(((ZnRect *) valp)->y); + objs[2] = NewDoubleObj(((ZnRect *) valp)->w); + objs[3] = NewDoubleObj(((ZnRect *) valp)->h); +#ifdef PTK + result = Tcl_Merge(4, objs); #else - Arg *list = LangAllocVec(4); - LangSetInt(&list[0], ((ZnRect *) valp)->x); - LangSetInt(&list[1], ((ZnRect *) valp)->x); - LangSetInt(&list[2], ((ZnRect *) valp)->w); - LangSetInt(&list[3], ((ZnRect *) valp)->h); - result = Tcl_Merge(4, list); - LangFreeVec(4, list); + result = Tcl_NewListObj(4, objs); #endif break; } case ZN_CONFIG_ITEM: - if (*((Item *) valp) == ZN_NO_ITEM) { - LangSetString(&result, ""); - } - else { - *free_proc = TCL_VOLATILE; - sprintf(buffer, "%d", (*((Item *) valp))->id); - LangSetString(&result, buffer); + if (*((Item *) valp) != ZN_NO_ITEM) { + result = NewLongObj((*((Item *) valp))->id); } break; case ZN_CONFIG_WINDOW: - if (*((ZnWindow *) valp) == NULL) { - LangSetString(&result, ""); - } - else { - *free_proc = TCL_VOLATILE; - LangSetString(&result, Tk_PathName(*((ZnWindow *) valp))); + if (*((ZnWindow *) valp) != NULL) { + result = NewStringObj(Tk_PathName(*((ZnWindow *) valp))); } break; case ZN_CONFIG_INT: @@ -1605,28 +1462,20 @@ AttributeToString(WidgetInfo *wi, case ZN_CONFIG_DIM: case ZN_CONFIG_PRI: case ZN_CONFIG_ANGLE: - *free_proc = TCL_VOLATILE; - sprintf(buffer, "%d", *((int *) valp)); - LangSetString(&result, buffer); + result = Tcl_NewIntObj(*((int *) valp)); break; case ZN_CONFIG_JUSTIFY: - { - Tk_Justify justify = *((ZnJustify *) valp); - LangSetString(&result, Tk_NameOfJustify(justify)); - break; - } + result = NewStringObj(Tk_NameOfJustify(*((ZnJustify *) valp))); + break; case ZN_CONFIG_ANCHOR: - LangSetString(&result, Tk_NameOfAnchor(*((Tk_Anchor *) valp))); + result = NewStringObj(Tk_NameOfAnchor(*((Tk_Anchor *) valp))); break; case ZN_CONFIG_LABEL_FORMAT: { ZnLabelFormat frmt = *((ZnLabelFormat *) valp); - if (!frmt) { - LangSetString(&result, ""); - } - else { - LangSetString(&result, LabelFormatGetString(frmt)); + if (frmt) { + result = NewStringObj(LabelFormatGetString(frmt)); } break; } @@ -1635,11 +1484,11 @@ AttributeToString(WidgetInfo *wi, AutoAlign *aa = (AutoAlign *) valp; int i; if (aa->automatic == False) { - LangSetString(&result, "-"); + result = NewStringObj("-"); } else { - *free_proc = TCL_VOLATILE; buffer[0] = 0; + str = buffer; for (i = 0; i < 3; i++) { switch (aa->align[i]) { case ZnJustifyLeft: @@ -1653,10 +1502,10 @@ AttributeToString(WidgetInfo *wi, break; } } - LangSetString(&result, buffer); + result = NewStringObj(buffer); } } - break; + break; case ZN_CONFIG_LEADER_ANCHORS: { @@ -1677,10 +1526,13 @@ AttributeToString(WidgetInfo *wi, else { count = sprintf(ptr, "%%%dx%d", lanch->right_x, lanch->right_y); } - LangSetString(&result, buffer); + result = NewStringObj(buffer); } } + if (result == NULL) { + result = NewStringObj(""); + } return result; } @@ -1695,13 +1547,12 @@ AttributeToString(WidgetInfo *wi, static int QueryAttribute(char *record, int field, /* 0< means item itself. */ - Arg attr_name) + Tcl_Obj *attr_name) { WidgetInfo *wi; Item item; - Tk_Uid attr_uid = Tk_GetUid(LangString(attr_name)); - Arg result = NULL; - Tcl_FreeProc *free_proc; + Tk_Uid attr_uid = Tk_GetUid(Tcl_GetString(attr_name)); + Tcl_Obj *result = NULL; char buffer[256]; ZnAttrConfig *desc; @@ -1723,17 +1574,12 @@ QueryAttribute(char *record, while (True) { if (desc->type == ZN_CONFIG_END) { - Tcl_AppendResult(wi->interp, "unknown attribute \"", - attr_uid, "\"", NULL); + Tcl_AppendResult(wi->interp, "unknown attribute \"", attr_uid, "\"", NULL); return ZN_ERROR; } else if (attr_uid == desc->uid) { - result = AttributeToString(wi, record, desc, buffer, &free_proc); -#ifndef PTK - Tcl_SetResult(wi->interp, result, free_proc); -#else - Tcl_ArgResult(wi->interp, result); -#endif + result = AttributeToObj(wi, record, desc, buffer); + Tcl_SetObjResult(wi->interp, result); break; } else { @@ -2960,7 +2806,7 @@ static Item CreateItem(WidgetInfo *wi, ItemClass item_class, int *argc, - Arg **args) + Tcl_Obj *CONST *args[]) { Item item; @@ -3057,7 +2903,7 @@ static int ConfigureItem(Item item, int field, int argc, - ZnAttrList argv, + Tcl_Obj *CONST argv[], ZnBool init) { WidgetInfo *wi = item->wi; @@ -3109,10 +2955,10 @@ ConfigureItem(Item item, ********************************************************************************** */ static int -QueryItem(Item item, - int field, - int argc, - ZnAttrList argv) +QueryItem(Item item, + int field, + int argc, + Tcl_Obj *CONST argv[]) { if (field < 0) { return item->class->Query(item, argc, argv); @@ -3987,7 +3833,7 @@ static int ConfigureField(FieldSet field_set, unsigned int field, int argc, - ZnAttrList argv, + Tcl_Obj *CONST argv[], int *flags) { int i; @@ -4094,7 +3940,7 @@ static int QueryField(FieldSet field_set, unsigned int field, int argc, - ZnAttrList argv) + Tcl_Obj *CONST argv[]) { Field field_ptr; @@ -4279,7 +4125,8 @@ DrawFields(FieldSet field_set) clip_text_bbox.orig.y != text_bbox.orig.y || clip_text_bbox.corner.x != text_bbox.corner.x || clip_text_bbox.corner.y != text_bbox.corner.y || - clip_pm_bbox.orig.x != pm_bbox.orig.x || clip_pm_bbox.orig.y != pm_bbox.orig.y || + clip_pm_bbox.orig.x != pm_bbox.orig.x || + clip_pm_bbox.orig.y != pm_bbox.orig.y || clip_pm_bbox.corner.x != pm_bbox.corner.x || clip_pm_bbox.corner.y != pm_bbox.corner.y) { /* we must clip. */ |