- 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:
186
nxcopy.c
186
nxcopy.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user