- Fixes to make SL6 work

- New NeXus libraries
- Added new raw binary transfer mode for mass data
- Added a check script option to configurable virtual motor


SKIPPED:
	psi/dumprot.c
	psi/make_gen
	psi/psi.c
	psi/rebin.c
	psi/sanslirebin.c
This commit is contained in:
koennecke
2012-03-29 08:41:05 +00:00
parent 14f257c2ab
commit 9eca96b064
56 changed files with 8881 additions and 6327 deletions

186
nxcopy.c
View File

@@ -13,6 +13,7 @@
#include "sicsdata.h"
#include "nxcopy.h"
#include "HistMem.h"
#include "macro.h"
/*-------------------------------------------------------------------------------
* decode a SWIG style pointer into the real pointer value.
* Stolen from SWIG generated code.
@@ -233,13 +234,190 @@ static int NXDataToHdbNode(ClientData clientData, Tcl_Interp * interp,
val = NXDatasetToHdbValue(data);
status = UpdateHipadabaPar(node, val, NULL);
if (status != 1) {
Tcl_SetStringObj(resultPtr, "data type mismatch",
strlen("data type mismatch"));
return TCL_ERROR;
Tcl_SetStringObj(resultPtr, "data type mismatch",
strlen("data type mismatch"));
return TCL_ERROR;
}
return TCL_OK;
}
/*---------------------------------------------------------------------------*/
static int NXDataSend(ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[])
{
Tcl_Obj *resultPtr;
pNXDS data = NULL;
SConnection *pCon = NULL;
char *sendName = NULL;
int *dataToSend = NULL;
int length, i;
const char *text;
char buffer[256];
if (objc < 3) {
Tcl_WrongNumArgs(interp, objc, objv, "Usage: nxdatasend nxdata sendname");
return TCL_ERROR;
}
resultPtr = Tcl_GetObjResult(interp);
/*
* get nxdataset pointer
*/
text = Tcl_GetStringFromObj(objv[1], NULL);
if (strstr(text, "NULL") != NULL) {
strncpy(buffer, "nxdata argument is NULL pointer", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
text++;
SWIG_UnpackData(text, &data, sizeof(void *));
if (data->magic != MAGIC) {
strncpy(buffer, "nxdata argument is no valid nxdataset" , sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
length = getNXDatasetLength(data);
/*
* get connection
*/
pCon = MacroPeek();
if(pCon == NULL){
strncpy(buffer, "connection not FOUND!", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
/*
* get send name
*/
sendName = Tcl_GetStringFromObj(objv[2], NULL);
if (strstr(text, "NULL") != NULL) {
strncpy(buffer, "sendname argument is NULL pointer", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
dataToSend = malloc(length*sizeof(int));
if(dataToSend == NULL){
strncpy(buffer, "Out-of-memory in NXDataSend", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
switch(getNXDatasetType(data)){
case NX_INT32:
case NX_UINT32:
for(i = 0; i < length; i++){
dataToSend[i] = htonl(data->u.iPtr[i]);
}
break;
case NX_INT16:
case NX_UINT16:
for(i = 0; i < length; i++){
dataToSend[i] = htonl((int)data->u.sPtr[i]);
}
break;
default:
strncpy(buffer, "Datatype not supported", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
SCWriteZipped(pCon, sendName, dataToSend, length * sizeof(int));
free(dataToSend);
strncpy(buffer, "OK", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_OK;
}
/*---------------------------------------------------------------------------*/
static int NXDataSendBin(ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[])
{
Tcl_Obj *resultPtr;
pNXDS data = NULL;
SConnection *pCon = NULL;
char *sendName = NULL;
int *dataToSend = NULL;
int length, i;
const char *text;
char buffer[256];
if (objc < 3) {
Tcl_WrongNumArgs(interp, objc, objv, "Usage: nxdatasend nxdata sendname");
return TCL_ERROR;
}
resultPtr = Tcl_GetObjResult(interp);
/*
* get nxdataset pointer
*/
text = Tcl_GetStringFromObj(objv[1], NULL);
if (strstr(text, "NULL") != NULL) {
strncpy(buffer, "nxdata argument is NULL pointer", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
text++;
SWIG_UnpackData(text, &data, sizeof(void *));
if (data->magic != MAGIC) {
strncpy(buffer, "nxdata argument is no valid nxdataset" , sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
length = getNXDatasetLength(data);
/*
* get connection
*/
pCon = MacroPeek();
if(pCon == NULL){
strncpy(buffer, "connection not FOUND!", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
/*
* get send name
*/
sendName = Tcl_GetStringFromObj(objv[2], NULL);
if (strstr(text, "NULL") != NULL) {
strncpy(buffer, "sendname argument is NULL pointer", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
dataToSend = malloc(length*sizeof(int));
if(dataToSend == NULL){
strncpy(buffer, "Out-of-memory in NXDataSend", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
switch(getNXDatasetType(data)){
case NX_INT32:
case NX_UINT32:
for(i = 0; i < length; i++){
dataToSend[i] = htonl(data->u.iPtr[i]);
}
break;
case NX_INT16:
case NX_UINT16:
for(i = 0; i < length; i++){
dataToSend[i] = htonl((int)data->u.sPtr[i]);
}
break;
default:
strncpy(buffer, "Datatype not supported", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_ERROR;
}
SCWriteBinary(pCon, sendName, dataToSend, length * sizeof(int));
free(dataToSend);
strncpy(buffer, "OK", sizeof(buffer));
Tcl_SetStringObj(resultPtr,buffer,strlen(buffer));
return TCL_OK;
}
/*---------------------------------------------------------------------------*/
static int NXDataToHM(ClientData clientData, Tcl_Interp * interp,
int objc, Tcl_Obj * CONST objv[])
@@ -306,5 +484,7 @@ int NXcopy_Init(Tcl_Interp * pInter)
NULL);
Tcl_CreateObjCommand(pInter, "nxToHdb", NXDataToHdbNode, NULL, NULL);
Tcl_CreateObjCommand(pInter, "nxToHM", NXDataToHM, NULL, NULL);
Tcl_CreateObjCommand(pInter, "nxSend", NXDataSend, NULL, NULL);
Tcl_CreateObjCommand(pInter, "nxSendBin", NXDataSendBin, NULL, NULL);
return 1;
}