diff --git a/sicsobj.c b/sicsobj.c index f3d43668..47660d6c 100644 --- a/sicsobj.c +++ b/sicsobj.c @@ -50,7 +50,8 @@ static void saveSICSNode(pHdb node, char *prefix, char separator, FILE * fd) hdbValue v; pDynString data = NULL; char *cmd; - char *str, *value; + char *str = NULL; + char *value; cmd = GetHdbProp(node, "creationCmd"); 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) { GetHipadabaPar(node, &v, NULL); - 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); + if (v.dataType == HIPFUNC) { + fprintf(fd, "%s", prefix); + child = node->child; + while (child != NULL) { + GetHipadabaPar(child, &v, NULL); + data = formatValue(v, child); + if (data != NULL) { + value = GetCharArray(data); + 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); }