- minor improvements
This commit is contained in:
@ -10,7 +10,6 @@
|
|||||||
#include <sicshipadaba.h>
|
#include <sicshipadaba.h>
|
||||||
#include "statusfile.h"
|
#include "statusfile.h"
|
||||||
|
|
||||||
#define MAX_HDB_PATH 1024
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
static pDynString ComposeSicsCommand(pHdb node)
|
static pDynString ComposeSicsCommand(pHdb node)
|
||||||
{
|
{
|
||||||
|
@ -1776,7 +1776,8 @@ int ProcessSICSHdbPar(pHdb root, SConnection * pCon,
|
|||||||
pHdb parNode = NULL;
|
pHdb parNode = NULL;
|
||||||
pDynString parData = NULL;
|
pDynString parData = NULL;
|
||||||
char error[512];
|
char error[512];
|
||||||
int i, status;
|
int i, status, firstValueArg;
|
||||||
|
float value;
|
||||||
|
|
||||||
assert(root != NULL && pCon != NULL);
|
assert(root != NULL && pCon != NULL);
|
||||||
|
|
||||||
@ -1785,7 +1786,18 @@ int ProcessSICSHdbPar(pHdb root, SConnection * pCon,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
parNode = GetHipadabaNode(root, argv[0]);
|
/* if the single argument is a number and the type of the root is a number
|
||||||
|
then we want to set the root itself to this number */
|
||||||
|
if (argc == 1
|
||||||
|
&& (root->value.dataType == HIPINT || root->value.dataType == HIPFLOAT)
|
||||||
|
&& sscanf(argv[0], "%f", &value) == 1) {
|
||||||
|
parNode = root;
|
||||||
|
firstValueArg = 0;
|
||||||
|
} else {
|
||||||
|
parNode = GetHipadabaNode(root, argv[0]);
|
||||||
|
firstValueArg = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (parNode == NULL) {
|
if (parNode == NULL) {
|
||||||
/* no error reporting here, upper level code might wish to continue
|
/* no error reporting here, upper level code might wish to continue
|
||||||
* processing commands after having tested for parameters.
|
* processing commands after having tested for parameters.
|
||||||
@ -1793,7 +1805,7 @@ int ProcessSICSHdbPar(pHdb root, SConnection * pCon,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > firstValueArg) {
|
||||||
/*
|
/*
|
||||||
* setting the value is attempted.
|
* setting the value is attempted.
|
||||||
*/
|
*/
|
||||||
@ -1805,8 +1817,8 @@ int ProcessSICSHdbPar(pHdb root, SConnection * pCon,
|
|||||||
SCWrite(pCon, "ERROR: out of memory processing parameter", eError);
|
SCWrite(pCon, "ERROR: out of memory processing parameter", eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
DynStringConcat(parData, argv[1]);
|
DynStringConcat(parData, argv[firstValueArg]);
|
||||||
for (i = 2; i < argc; i++) {
|
for (i = firstValueArg + 1; i < argc; i++) {
|
||||||
DynStringConcat(parData, " ");
|
DynStringConcat(parData, " ");
|
||||||
DynStringConcat(parData, argv[i]);
|
DynStringConcat(parData, argv[i]);
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <sics.h>
|
#include <sics.h>
|
||||||
#include <dynstring.h>
|
#include <dynstring.h>
|
||||||
#include <sicsobj.h>
|
#include <sicsobj.h>
|
||||||
|
#define MAX_HDB_PATH 1024
|
||||||
/*======================== callback error codes ===============================*/
|
/*======================== callback error codes ===============================*/
|
||||||
#define SICSCBRO -607
|
#define SICSCBRO -607
|
||||||
#define SICSCBPERM -608
|
#define SICSCBPERM -608
|
||||||
|
23
sicsobj.c
23
sicsobj.c
@ -41,10 +41,18 @@ void DefaultFree(void *data)
|
|||||||
static void saveSICSNode(pHdb node, char *prefix, FILE * fd)
|
static void saveSICSNode(pHdb node, char *prefix, FILE * fd)
|
||||||
{
|
{
|
||||||
char newprefix[1024], val[20];
|
char newprefix[1024], val[20];
|
||||||
|
char path[MAX_HDB_PATH];
|
||||||
pHdb child;
|
pHdb child;
|
||||||
hdbValue v;
|
hdbValue v;
|
||||||
pDynString data = NULL;
|
pDynString data = NULL;
|
||||||
|
char *cmd;
|
||||||
|
|
||||||
|
cmd = GetHdbProp(node, "creationCmd");
|
||||||
|
if (cmd != NULL) {
|
||||||
|
GetHdbPath(node, path, sizeof path);
|
||||||
|
fprintf(fd, cmd, prefix, path);
|
||||||
|
fprintf(fd, "\n");
|
||||||
|
}
|
||||||
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);
|
data = formatValue(v, node);
|
||||||
@ -67,10 +75,18 @@ int SaveSICSOBJ(void *data, char *name, FILE * fd)
|
|||||||
{
|
{
|
||||||
pSICSOBJ self = (pSICSOBJ) data;
|
pSICSOBJ self = (pSICSOBJ) data;
|
||||||
char prefix[1024];
|
char prefix[1024];
|
||||||
|
char path[MAX_HDB_PATH];
|
||||||
pHdb node;
|
pHdb node;
|
||||||
|
char *cmd;
|
||||||
|
|
||||||
if (self != NULL && self->objectNode != NULL) {
|
if (self != NULL && self->objectNode != NULL) {
|
||||||
node = self->objectNode->child;
|
node = self->objectNode->child;
|
||||||
|
cmd = GetHdbProp(self->objectNode, "creationCmd");
|
||||||
|
if (cmd != NULL) {
|
||||||
|
GetHdbPath(self->objectNode, path, sizeof path);
|
||||||
|
fprintf(fd, cmd, name, path);
|
||||||
|
fprintf(fd, "\n");
|
||||||
|
}
|
||||||
while (node != NULL) {
|
while (node != NULL) {
|
||||||
snprintf(prefix, 1024, "%s %s", name, node->name);
|
snprintf(prefix, 1024, "%s %s", name, node->name);
|
||||||
saveSICSNode(node, prefix, fd);
|
saveSICSNode(node, prefix, fd);
|
||||||
@ -138,6 +154,7 @@ pSICSOBJ MakeSICSOBJv(char *name, char *class, int type, int priv)
|
|||||||
pNew->objectNode = MakeSICSHdbPar(name, priv, val);
|
pNew->objectNode = MakeSICSHdbPar(name, priv, val);
|
||||||
ReleaseHdbValue(&val);
|
ReleaseHdbValue(&val);
|
||||||
}
|
}
|
||||||
|
SetHdbProperty(pNew->objectNode, "sicscommand", name);
|
||||||
if (pNew->pDes == NULL || pNew->objectNode == NULL) {
|
if (pNew->pDes == NULL || pNew->objectNode == NULL) {
|
||||||
free(pNew);
|
free(pNew);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
@ -536,7 +553,7 @@ pSICSOBJ SetupSICSOBJ(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (strcasecmp(argv[0], "DynSicsObj") == 0) {
|
if (strcasecmp(argv[0], "DynSicsObj") == 0) {
|
||||||
/* make object dynamic by defining a descriptor command */
|
/* make object dynamic by defining a creation command */
|
||||||
SetDescriptorKey(pNew->pDes, "creationCommand", "0");
|
SetDescriptorKey(pNew->pDes, "creationCommand", "0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user