- changed formatValue for custom formats

- changed internalID of HipadabaCallbacks to void*
This commit is contained in:
zolliker
2008-01-18 07:29:59 +00:00
parent 3cd46c4c83
commit 07ad4ab978

View File

@ -71,7 +71,7 @@ pHdbCallback MakeCheckPermissionCallback(int priv){
return NULL;
}
*testPriv = priv;
return MakeHipadabaCallback(SICSCheckPermissionCallback, testPriv,free,-1,-1);
return MakeHipadabaCallback(SICSCheckPermissionCallback, testPriv,free,-1,NULL);
}
/*-------------------------------------------------------------------------------------*/
static int SICSSetUpdateCallback(void *userData, void *callData, pHdb node,
@ -80,7 +80,7 @@ static int SICSSetUpdateCallback(void *userData, void *callData, pHdb node,
}
/*-------------------------------------------------------------------------------------*/
pHdbCallback MakeSetUpdateCallback(){
return MakeHipadabaCallback(SICSSetUpdateCallback, NULL,NULL,-1,-1);
return MakeHipadabaCallback(SICSSetUpdateCallback, NULL,NULL,-1,NULL);
}
/*---------------------------------------------------------------------------------------*/
static int SICSReadOnlyCallback(void *userData, void *callData, pHdb node,
@ -96,7 +96,7 @@ static int SICSReadOnlyCallback(void *userData, void *callData, pHdb node,
}
/*-------------------------------------------------------------------------------------*/
pHdbCallback MakeReadOnlyCallback(){
return MakeHipadabaCallback(SICSReadOnlyCallback, NULL,NULL,-1,-1);
return MakeHipadabaCallback(SICSReadOnlyCallback, NULL,NULL,-1,NULL);
}
/*-------------------------------------------------------------------------------------*/
static int SICSDriveCallback(void *userData, void *callData, pHdb node,
@ -118,7 +118,7 @@ static int SICSDriveCallback(void *userData, void *callData, pHdb node,
}
/*---------------------------------------------------------------------------------------*/
pHdbCallback MakeSICSDriveCallback(void *sicsObject){
return MakeHipadabaCallback(SICSDriveCallback, sicsObject,NULL,-1,-1);
return MakeHipadabaCallback(SICSDriveCallback, sicsObject,NULL,-1,NULL);
}
/*---------------------------------------------------------------------------------------*/
static int SICSReadDriveCallback(void *userData, void *callData, pHdb node,
@ -181,11 +181,11 @@ static int SICSFuncCallback(void *userData, void *callData, pHdb node,
}
/*---------------------------------------------------------------------------*/
pHdbCallback MakeSICSFuncCallback(void *obj){
return MakeHipadabaCallback(SICSFuncCallback, obj,NULL,-1,-1);
return MakeHipadabaCallback(SICSFuncCallback, obj,NULL,-1,NULL);
}
/*--------------------------------------------------------------------------------------*/
pHdbCallback MakeSICSReadDriveCallback(void *sicsObject){
return MakeHipadabaCallback(SICSReadDriveCallback, sicsObject,NULL,-1,-1);
return MakeHipadabaCallback(SICSReadDriveCallback, sicsObject,NULL,-1,NULL);
}
/*---------------------------------------------------------------------------------------*/
typedef struct {
@ -341,7 +341,7 @@ static int SICSNotifyCallback(void *userData, void *callData, pHdb node,
}
}
if(v.arrayLength < 100){
printedData = formatValue(v);
printedData = formatValue(v, node);
if(pPath == NULL || printedData == NULL || result == NULL){
SCWriteInContext(cbInfo->pCon,"ERROR: out of memory formatting data" ,
eEvent,cbInfo->context);
@ -377,7 +377,7 @@ pHdbCallback MakeNotifyCallback(SConnection *pCon, int id){
}
cbInfo->pCon = pCon;
cbInfo->context = SCGetContext(pCon);
return MakeHipadabaCallback(SICSNotifyCallback, cbInfo,free,id,pCon->ident);
return MakeHipadabaCallback(SICSNotifyCallback, cbInfo,free,id,pCon);
}
/*-------------------------------------------------------------------------*/
static int TreeChangeCallback(void *userData, void *callData, pHdb node,
@ -414,7 +414,7 @@ pHdbCallback MakeTreeChangeCallback(SConnection *pCon, int id){
}
cbInfo->pCon = pCon;
cbInfo->context = SCGetContext(pCon);
return MakeHipadabaCallback(TreeChangeCallback, cbInfo,free,id,pCon->ident);
return MakeHipadabaCallback(TreeChangeCallback, cbInfo,free,id,pCon);
}
/*----------------------------------------------------------------------------------------*/
static int SICSScriptWriteCallback(void *userData, void *callData, pHdb node,
@ -430,7 +430,7 @@ static int SICSScriptWriteCallback(void *userData, void *callData, pHdb node,
assert(command != NULL && pCon != NULL);
newVal = formatValue(v);
newVal = formatValue(v, node);
if(newVal == NULL){
SCWrite(pCon,"ERROR: out of memory setting parameter",eError);
return 0;
@ -459,7 +459,7 @@ static int SICSScriptWriteCallback(void *userData, void *callData, pHdb node,
}
/*---------------------------------------------------------------------------------------*/
static pHdbCallback MakeSICSWriteScriptCallback(char *script){
return MakeHipadabaCallback(SICSScriptWriteCallback, strdup(script),free,-1,-1);
return MakeHipadabaCallback(SICSScriptWriteCallback, strdup(script),free,-1,NULL);
}
/*----------------------------------------------------------------------------------------*/
static int SICSScriptReadCallback(void *userData, void *callData, pHdb node,
@ -519,7 +519,7 @@ static int SICSScriptReadCallback(void *userData, void *callData, pHdb node,
/*----------------------------------------------------------------------------*/
static pHdbCallback MakeSICSReadScriptCallback(char *script){
return MakeHipadabaCallback(SICSScriptReadCallback, strdup(script),
free,-1,-1);
free,-1,NULL);
}
/*---------------------------------------------------------------------------*/
typedef struct {
@ -560,7 +560,7 @@ pHdbCallback MakeIntRangeCallback(int min, int max){
range->min = min;
range->max = max;
return MakeHipadabaCallback(SICSIntRangeCallback, range,
free,-1,-1);
free,-1,NULL);
}
/*---------------------------------------------------------------------------*/
typedef struct {
@ -601,7 +601,7 @@ pHdbCallback MakeFloatRangeCallback(double min, double max){
range->min = min;
range->max = max;
return MakeHipadabaCallback(SICSFloatRangeCallback, range,
free,-1,-1);
free,-1,NULL);
}
/*-------------------------------------------------------------------------*/
static int MemReadCallback(void *userData, void *callData, pHdb node,
@ -649,12 +649,12 @@ static int MemGenReadCallback(void *userData, void *callData, pHdb node,
/*-------------------------------------------------------------------------*/
pHdbCallback MakeMemGenReadCallback(void *address){
return MakeHipadabaCallback(MemReadCallback, address,
NULL,-1,-1);
NULL,-1,NULL);
}
/*-------------------------------------------------------------------------*/
pHdbCallback MakeMemReadCallback(float *address){
return MakeHipadabaCallback(MemReadCallback, address,
NULL,-1,-1);
NULL,-1,NULL);
}
/*-------------------------------------------------------------------------*/
static int MemSetCallback(void *userData, void *callData, pHdb node,
@ -707,12 +707,12 @@ static int MemGenSetCallback(void *userData, void *callData, pHdb node,
/*-------------------------------------------------------------------------*/
pHdbCallback MakeMemSetCallback(float *address){
return MakeHipadabaCallback(MemSetCallback, address,
NULL,-1,-1);
NULL,-1,NULL);
}
/*-------------------------------------------------------------------------*/
pHdbCallback MakeMemGenSetCallback(void *address){
return MakeHipadabaCallback(MemSetCallback, address,
NULL,-1,-1);
NULL,-1,NULL);
}
/*--------------------------------------------------------------------------*/
static void killHdbValue(void *pData){
@ -762,7 +762,7 @@ pHdbCallback MakeIntFixedCallback(int *data, int length){
}
memcpy(v->v.intArray,data,length*sizeof(int));
return MakeHipadabaCallback(SICSIntFixedCallback, v,
killHdbValue,-1,-1);
killHdbValue,-1,NULL);
}
/*============= Parameter Creation ===========================================*/
pHdb MakeSICSHdbPar(char *name, int priv, hdbValue v){
@ -1236,7 +1236,7 @@ int ProcessSICSHdbPar(pHdb root, SConnection *pCon,
if(status != 1){
return 0;
}
parData = formatValue(input);
parData = formatValue(input, parNode);
if(parData == NULL){
SCWrite(pCon,"ERROR: out of memory reading parameter data",eError);
return 0;
@ -1263,7 +1263,7 @@ void PrintSICSParList(pHdb node, SConnection *pCon, char *prefix){
while(child != NULL){
if(child->value.dataType != HIPNONE){
GetHipadabaPar(child,&v,pCon);
value = formatValue(child->value);
value = formatValue(child->value, child);
if(value != NULL){
SCPrintf(pCon,eValue,"%s%s = %s", prefix, child->name,
GetCharArray(value));
@ -1288,7 +1288,7 @@ void SaveSICSHipadaba(FILE *fd, pHdb node, char *prefix){
currentChild = node->child;
while(currentChild != NULL){
if(currentChild->value.dataType != HIPNONE && !isSICSHdbRO(currentChild)){
data = formatValue(currentChild->value);
data = formatValue(currentChild->value, currentChild);
if(data != NULL){
fprintf(fd,"%s%s %s\n", prefix, currentChild->name, GetCharArray(data));
DeleteDynString(data);
@ -1311,10 +1311,11 @@ void SaveSICSHipadaba(FILE *fd, pHdb node, char *prefix){
}
}
/*================ value helpers ============================================*/
pDynString formatValue(hdbValue v){
pDynString formatValue(hdbValue v, pHdb node){
pDynString result = NULL;
int i;
char number[30];
char format[16];
result = CreateDynString(64,64);
if(result == NULL){
@ -1328,7 +1329,11 @@ pDynString formatValue(hdbValue v){
DynStringCopy(result,number);
break;
case HIPFLOAT:
snprintf(number,30,"%12.4f", v.v.doubleValue);
if (GetHdbProperty(node, "fmt", format, sizeof format -1)) {
snprintf(number,30,format, v.v.doubleValue);
} else {
snprintf(number,30,"%12.4f", v.v.doubleValue);
}
DynStringCopy(result,number);
break;
case HIPTEXT:
@ -1343,8 +1348,13 @@ pDynString formatValue(hdbValue v){
break;
case HIPFLOATAR:
case HIPFLOATVARAR:
if (!GetHdbProperty(node, "fmt", format+1, sizeof format -2)) {
format[0]=' ';
} else {
strcpy(format, " %12.4f");
}
for(i = 0; i < v.arrayLength; i++){
snprintf(number,30," %12.4f", v.v.floatArray[i]);
snprintf(number,30,format, v.v.floatArray[i]);
DynStringConcat(result,number);
}
break;
@ -1546,6 +1556,7 @@ static int MakeHdbNode(SConnection *pCon, SicsInterp *pSics, void *pData,
pHdb parent = NULL;
pHdb child = NULL;
char buffer[512], buffer2[512];
hdbValue val;
if(!SCMatchRights(pCon,usMugger)){
return 0;
@ -1603,7 +1614,9 @@ static int MakeHdbNode(SConnection *pCon, SicsInterp *pSics, void *pData,
return 0;
}
if(type != HIPNONE){
child = MakeSICSHdbPar(pPtr, priv, makeHdbValue(type,length));
val = makeHdbValue(type,length);
child = MakeSICSHdbPar(pPtr, priv, val);
ReleaseHdbValue(&val);
} else {
child = MakeHipadabaNode(pPtr,type,length);
}
@ -1940,7 +1953,7 @@ static int GetHdbNode(SConnection *pCon, SicsInterp *pSics, void *pData,
}
memset(&newValue,0,sizeof(hdbValue));
GetHipadabaPar(targetNode, &newValue, pCon);
parData = formatValue(newValue);
parData = formatValue(newValue, targetNode);
if(parData == NULL){
SCWrite(pCon,"ERROR: out of memory formatting data",eError);
return 0;
@ -1981,7 +1994,7 @@ static int GetHdbVal(SConnection *pCon, SicsInterp *pSics, void *pData,
}
memset(&newValue,0,sizeof(hdbValue));
GetHipadabaPar(targetNode, &newValue, pCon);
parData = formatValue(newValue);
parData = formatValue(newValue, targetNode);
if(parData == NULL){
SCWrite(pCon,"ERROR: out of memory formatting data",eError);
return 0;
@ -2056,7 +2069,7 @@ static int HdbNodeVal(SConnection *pCon, SicsInterp *pSics, void *pData,
}
memset(&newValue,0,sizeof(hdbValue));
GetHipadabaPar(targetNode, &newValue, pCon);
parData = formatValue(newValue);
parData = formatValue(newValue, targetNode);
if(parData == NULL){
SCWrite(pCon,"ERROR: out of memory formatting data",eError);
return 0;
@ -2122,7 +2135,7 @@ static pDynString formatJSONList(pHdb node){
DynStringConcat(result,current->name);
DynStringConcat(result,"\"");
if(current->value.dataType != HIPNONE){
data = formatValue(current->value);
data = formatValue(current->value, current);
if(data != NULL){
DynStringConcat(result,": ");
DynStringConcat(result,GetCharArray(data));
@ -2155,7 +2168,7 @@ static pDynString formatListWithVal(pHdb node){
while(current != NULL){
if(current->value.dataType != HIPNONE){
DynStringConcat(result,current->name);
data = formatValue(current->value);
data = formatValue(current->value, current);
if(data != NULL){
DynStringConcat(result," = ");
DynStringConcat(result,GetCharArray(data));
@ -2437,7 +2450,7 @@ static int ChainHdbNode(SConnection *pCon, SicsInterp *pSics, void *pData,
return 0;
}
kalle = MakeHipadabaCallback(ChainCallback,slave, NULL, -1,-1);
kalle = MakeHipadabaCallback(ChainCallback,slave, NULL, -1,NULL);
if(kalle == NULL){
SCWrite(pCon,"ERROR: out of memory creating callback",eError);
return 0;
@ -2527,7 +2540,7 @@ static int CommandSetCallback(void *userData, void *callData, pHdb node,
DynStringConcat(cmd," ");
current = node->child;
while(current != NULL){
par = formatValue(current->value);
par = formatValue(current->value, current);
if(par != NULL){
DynStringConcat(cmd, GetCharArray(par));
DynStringConcat(cmd," ");
@ -2597,14 +2610,14 @@ static int SicsCommandNode(SConnection *pCon, SicsInterp *pSics, void *pData,
node->value.arrayLength = strlen(argv[2]);
SetHdbProperty(node,"sicscommand", argv[2]);
kalle = MakeHipadabaCallback(CommandSetCallback,NULL, NULL, -1,-1);
kalle = MakeHipadabaCallback(CommandSetCallback,NULL, NULL, -1,NULL);
if(kalle == NULL){
SCWrite(pCon,"ERROR: out of memory in hcommand",eError);
return 0;
}
AppendHipadabaCallback(node,HCBSET, kalle);
kalle = MakeHipadabaCallback(CommandGetCallback,NULL, NULL, -1,-1);
kalle = MakeHipadabaCallback(CommandGetCallback,NULL, NULL, -1,NULL);
if(kalle == NULL){
SCWrite(pCon,"ERROR: out of memory in hcommand",eError);
return 0;