- allow HIPFUNC functions to be saved and restored with its arguments

This commit is contained in:
zolliker
2013-06-25 11:18:04 +00:00
parent 1edc042db1
commit 8ecedfe443

View File

@ -50,7 +50,8 @@ static void saveSICSNode(pHdb node, char *prefix, char separator, FILE * fd)
hdbValue v; hdbValue v;
pDynString data = NULL; pDynString data = NULL;
char *cmd; char *cmd;
char *str, *value; char *str = NULL;
char *value;
cmd = GetHdbProp(node, "creationCmd"); cmd = GetHdbProp(node, "creationCmd");
if (cmd != NULL) { if (cmd != NULL) {
@ -58,18 +59,36 @@ static void saveSICSNode(pHdb node, char *prefix, char separator, FILE * fd)
} }
if (GetHdbProperty(node, "__save", val, 20) == 1) { if (GetHdbProperty(node, "__save", val, 20) == 1) {
GetHipadabaPar(node, &v, NULL); GetHipadabaPar(node, &v, NULL);
data = formatValue(v, node); if (v.dataType == HIPFUNC) {
if (data != NULL) { fprintf(fd, "%s", prefix);
value = GetCharArray(data); child = node->child;
str = Arg2Tcl(1, &value, NULL, 0); while (child != NULL) {
if (strcasecmp(val, "update") == 0) { GetHipadabaPar(child, &v, NULL);
GetHdbPath(node, p, sizeof p); data = formatValue(v, child);
fprintf(fd, "hupdate %s %s\n", p, str); if (data != NULL) {
} else { value = GetCharArray(data);
fprintf(fd, "%s %s\n", prefix, str); str = Arg2Tcl(1, &value, NULL, 0);
fprintf(fd, " %s", str);
}
DeleteDynString(data);
free(str);
child = child->next;
}
fprintf(fd, "\n");
} else {
data = formatValue(v, node);
if (data != NULL) {
value = GetCharArray(data);
str = Arg2Tcl(1, &value, NULL, 0);
if (strcasecmp(val, "update") == 0) {
GetHdbPath(node, p, sizeof p);
fprintf(fd, "hupdate %s %s\n", p, str);
} else {
fprintf(fd, "%s %s\n", prefix, str);
}
DeleteDynString(data);
free(str);
} }
DeleteDynString(data);
free(str);
} }
ReleaseHdbValue(&v); ReleaseHdbValue(&v);
} }