- design improvements in scriptcontext (sct send) and ascon (AsconBaseHandler)

- bug fixes
This commit is contained in:
zolliker
2009-03-03 14:07:43 +00:00
parent 0dc196becb
commit 2e060ccf73
8 changed files with 292 additions and 172 deletions

View File

@ -351,40 +351,45 @@ static int isNodePrintable(pHdb node)
}
/*---------------------------------------------------------------------------*/
static void objFormatNode(pHdb node, pDynString data)
static void objFormatNode(pHdb node, char separator,
char *prefix, pDynString data)
{
char par[40];
pDynString val = NULL;
snprintf(par, 40, "%-20s = ", node->name);
char par[128];
pDynString dyn = NULL;
int i;
pHdb child;
char *vis;
snprintf(par, sizeof par, "%-20s = ", prefix);
DynStringConcat(data, par);
val = formatValue(node->value, node);
if (val != NULL) {
DynStringConcat(data, GetCharArray(val));
DynStringConcatChar(data, '\n');
DeleteDynString(val);
dyn = formatValue(node->value, node);
if (dyn != NULL) {
DynStringConcat(data, GetCharArray(dyn));
} else {
dyn = CreateDynString(60, 63);
}
DynStringConcatChar(data, '\n');
for (child = node->child; child != NULL; child = child->next) {
DynStringCopy(dyn, prefix);
DynStringConcatChar(dyn, separator);
DynStringConcat(dyn, child->name);
objFormatNode(child, '/', GetCharArray(dyn), data);
}
DeleteDynString(dyn);
}
/*---------------------------------------------------------------------------*/
static int ListObj(pSICSOBJ self, SConnection * pCon, int argc,
char *argv[])
{
pHdb node = NULL;
pDynString data;
data = CreateDynString(128, 128);
if (data == NULL) {
return 0;
}
node = self->pDes->parNode;
if (node != NULL) {
objFormatNode(node, data);
node = node->child;
while (node != NULL) {
objFormatNode(node, data);
node = node->next;
}
if (self->pDes->parNode != NULL) {
objFormatNode(self->pDes->parNode, ' ', argv[0], data);
}
SCWrite(pCon, GetCharArray(data), eValue);
DeleteDynString(data);
@ -440,7 +445,7 @@ int InvokeSICSOBJ(SConnection * pCon, SicsInterp * pSics, void *pData,
} else if (strcmp(argv[1], "list") == 0) {
return ListObj(self, pCon, argc, argv);
}
SCPrintf(pCon, eError, "ERROR: %s %s not found", argv[0], argv[1]);
/* error message written by the caller */
}
return status;
@ -508,7 +513,7 @@ pSICSOBJ SetupSICSOBJ(SConnection * pCon, SicsInterp * pSics, void *pData,
SetDescriptorKey(pNew->pDes, "creationCommand", "0");
}
SetHdbProperty(pNew->objectNode, "objectName", argv[1]);
SetHdbProperty(pNew->objectNode, "sicsdev", argv[1]);
status = AddCommand(pSics,
argv[1], InterInvokeSICSOBJ, KillSICSOBJ, pNew);
if (status != 1) {