aboutsummaryrefslogtreecommitdiff
path: root/generic/Item.c
diff options
context:
space:
mode:
authorlecoanet2000-06-05 12:03:13 +0000
committerlecoanet2000-06-05 12:03:13 +0000
commit14af846df5c01a8d5e6edc35e2ba6fa2e3011b56 (patch)
tree53cef755c62c6e918425c652b117efcf4c347287 /generic/Item.c
parent010431ef74a07daf218da2ca2aa436be6b068623 (diff)
downloadtkzinc-14af846df5c01a8d5e6edc35e2ba6fa2e3011b56.zip
tkzinc-14af846df5c01a8d5e6edc35e2ba6fa2e3011b56.tar.gz
tkzinc-14af846df5c01a8d5e6edc35e2ba6fa2e3011b56.tar.bz2
tkzinc-14af846df5c01a8d5e6edc35e2ba6fa2e3011b56.tar.xz
Passage en Tcl_Objs et compilation conditionnelle de GPC
Diffstat (limited to 'generic/Item.c')
-rw-r--r--generic/Item.c831
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. */