From 5532f937dc3ce946118004e9ac19d56907246f2b Mon Sep 17 00:00:00 2001 From: koennecke Date: Fri, 3 Mar 2006 15:30:54 +0000 Subject: [PATCH] - Fixed a bug in napi5.c --- HistDriv.i | 3 +- HistMem.i | 3 +- drive.c | 2 +- histdriv.c | 3 + histmem.c | 63 ++++----- histogram.tex | 2 +- histogram.w | 2 +- hmdata.c | 8 +- napi.c | 344 +++++++++++++++++++++++++++++++++++++++++++------- napi.h | 252 +++++++++++++----------------------- napi4.c | 68 +++++----- napi4.h | 56 ++++---- napi5.c | 124 ++++++++++++------ napi5.h | 55 ++++---- nxio.c | 2 +- nxxml.c | 76 ++++++----- nxxml.h | 56 ++++---- sicsstat.tcl | 6 +- 18 files changed, 692 insertions(+), 433 deletions(-) diff --git a/HistDriv.i b/HistDriv.i index c24438b7..ae5e646d 100644 --- a/HistDriv.i +++ b/HistDriv.i @@ -23,6 +23,7 @@ /* status flags */ int iReconfig; int iUpdate; + pStringDict pOption; /* interface functions */ int (*Configure)(pHistDriver self, SConnection *pCon, @@ -71,7 +72,7 @@ #line 474 "histogram.w" -#line 228 "histogram.w" +#line 229 "histogram.w" pHistDriver CreateHistDriver(pStringDict pDict); void DeleteHistDriver(pHistDriver self); diff --git a/HistMem.i b/HistMem.i index 74a106b1..c3bc4a22 100644 --- a/HistMem.i +++ b/HistMem.i @@ -11,7 +11,7 @@ #ifndef SICSHISTMEMINT #define SICSHISTMEMINT -#line 250 "histogram.w" +#line 251 "histogram.w" typedef struct __HistMem { pObjectDescriptor pDes; @@ -21,7 +21,6 @@ int iInit; pICountable pCountInt; pICallBack pCall; - pStringDict pOption; } HistMem; #line 490 "histogram.w" diff --git a/drive.c b/drive.c index 06298e6f..577b91b4 100644 --- a/drive.c +++ b/drive.c @@ -465,7 +465,7 @@ SCWrite(pCon,pBueffel,eError); return 0; } - if(argc < 2) + if(argc > 2) { iRet = AddCommand(pSics,argv[2], RunWrapper,NULL,NULL); } else { diff --git a/histdriv.c b/histdriv.c index 6e27586b..14304f87 100644 --- a/histdriv.c +++ b/histdriv.c @@ -94,6 +94,9 @@ { self->FreePrivate(self); } + if(self->pOption){ + DeleteStringDict(self->pOption); + } if(self->data) { killHMData(self->data); diff --git a/histmem.c b/histmem.c index 26586a2c..11123427 100644 --- a/histmem.c +++ b/histmem.c @@ -388,6 +388,7 @@ { pHistMem pNew = NULL; pSite site = NULL; + pStringDict pOption; /* make memory */ pNew = (pHistMem)malloc(sizeof(HistMem)); @@ -432,24 +433,24 @@ pNew->pCountInt->Continue = HistContinue; /* initialise options dictionary */ - pNew->pOption = CreateStringDict(); - if(!pNew->pOption) + pOption = CreateStringDict(); + if(!pOption) { DeleteDescriptor(pNew->pDes); free(pNew); return NULL; } - StringDictAddPair(pNew->pOption,"driver",driver); - StringDictAddPair(pNew->pOption,"update","0"); + StringDictAddPair(pOption,"driver",driver); + StringDictAddPair(pOption,"update","0"); /* initialise driver */ if(strcmp(driver,"sim") == 0) { - pNew->pDriv = CreateSIMHM(pNew->pOption); + pNew->pDriv = CreateSIMHM(pOption); } else if(strcmp(driver,"mcstas") == 0) { - pNew->pDriv = NewMcStasHM(pNew->pOption); + pNew->pDriv = NewMcStasHM(pOption); } else { @@ -457,20 +458,21 @@ if(site != NULL) { pNew->pDriv = site->CreateHistogramMemoryDriver(driver, - pNew->pOption); + pOption); } } if(pNew->pDriv == NULL) { DeleteDescriptor(pNew->pDes); - DeleteStringDict(pNew->pOption); + DeleteStringDict(pOption); free(pNew); return NULL; } pNew->iAccess = usUser; pNew->iExponent = 0; pNew->iInit = 0; + pNew->pDriv->pOption = pOption; return pNew; } @@ -500,10 +502,6 @@ { DeleteCallBackInterface(self->pCall); } - if(self->pOption) - { - DeleteStringDict(self->pOption); - } free(self); } /*-------------------------------------------------------------------------*/ @@ -533,7 +531,7 @@ return 0; } - StringDictAddPair(pNew->pOption,"name",argv[1]); + StringDictAddPair(pNew->pDriv->pOption,"name",argv[1]); /* install HM as command */ iRet = AddCommand(pSics,argv[1],HistAction,DeleteHistMemory,(void *)pNew); @@ -551,7 +549,7 @@ { assert(self); strtolower(name); - return StringDictGet(self->pOption,name, result,iLen); + return StringDictGet(self->pDriv->pOption,name, result,iLen); } /*-----------------------------------------------------------------------*/ int HistSetOption(pHistMem self, char *name, char *value) @@ -561,10 +559,10 @@ assert(self); self->iInit = 1; strtolower(name); - status = StringDictUpdate(self->pOption,name, value); + status = StringDictUpdate(self->pDriv->pOption,name, value); if(status == 0) { - return StringDictAddPair(self->pOption,name, value); + return StringDictAddPair(self->pDriv->pOption,name, value); } return 1; } @@ -577,13 +575,13 @@ assert(self); assert(pCon); - iRet = HistDriverConfig(self->pDriv,self->pOption,pCon); + iRet = HistDriverConfig(self->pDriv,self->pDriv->pOption,pCon); if(!iRet) { SCWrite(pCon,"ERROR: failed to configure histogram memory",eError); return 0; } - iRet = self->pDriv->Configure(self->pDriv,pCon, self->pOption,pSics); + iRet = self->pDriv->Configure(self->pDriv,pCon, self->pDriv->pOption,pSics); if(!iRet) { SCWrite(pCon,"ERROR: failed to configure histogram memory",eError); @@ -974,17 +972,17 @@ static int checkHMEnd(pHistMem self, char *text){ memset(pValue, 0, sizeof(pValue)); memset(name, 0, sizeof(name)); - iRet = StringDictGet(self->pOption,"name",name,19); + iRet = StringDictGet(self->pDriv->pOption,"name",name,19); if(0==iRet) { strcpy(name,"*"); } - iRet = StringDictGet(self->pOption,"driver",pValue,sizeof(pValue)-1); + iRet = StringDictGet(self->pDriv->pOption,"driver",pValue,sizeof(pValue)-1); if(0pOption,"update",&fVal); + iRet = StringDictGetAsNumber(self->pDriv->pOption,"update",&fVal); if(0pOption,"rank",&fVal); + iRet = StringDictGetAsNumber(self->pDriv->pOption,"rank",&fVal); if(0pOption,pValue,&fVal); + iRet = StringDictGetAsNumber(self->pDriv->pOption,pValue,&fVal); if(0pOption,pValue,sizeof(pValue)-1); + pKey = StringDictGetNext(self->pDriv->pOption,pValue,sizeof(pValue)-1); while(pKey != NULL) { iDiscard=0; if(0==strcmp("name",pKey)) iDiscard=1; @@ -1021,7 +1019,7 @@ static int checkHMEnd(pHistMem self, char *text){ snprintf(pBuffer,511,"%s.%s = %s",name,pKey,pValue); SCWrite(pCon,pBuffer,eStatus); } - pKey = StringDictGetNext(self->pOption,pValue,sizeof(pValue)-1); + pKey = StringDictGetNext(self->pDriv->pOption,pValue,sizeof(pValue)-1); } /* Display Count Mode */ @@ -1259,6 +1257,16 @@ static int checkHMEnd(pHistMem self, char *text){ HMListOption(self,pCon); return 1; } + /* stop */ + else if(strcmp(argv[1],"stop") == 0) + { if(!SCMatchRights(pCon,usUser)) + { + return 0; + } + self->pDriv->Halt(self->pDriv); + SCSendOK(pCon); + return 1; + } /* normal counting*/ else if(strcmp(argv[1],"count") == 0) { @@ -1693,11 +1701,6 @@ static int checkHMEnd(pHistMem self, char *text){ } } lVal = HistSum(self,pCon,iaStart,iaEnd); - if(lVal < 0) - { - SCWrite(pCon,"ERROR: summing failed",eError); - return 0; - } sprintf(pBueffel,"%s.sum = %ld",argv[0],lVal); SCWrite(pCon,pBueffel,eValue); return 1; diff --git a/histogram.tex b/histogram.tex index 5ae02080..e5911e74 100644 --- a/histogram.tex +++ b/histogram.tex @@ -128,6 +128,7 @@ $\langle$HistType {\footnotesize ?}$\rangle\equiv$ \mbox{}\verb@ /* status flags */@\\ \mbox{}\verb@ int iReconfig;@\\ \mbox{}\verb@ int iUpdate;@\\ +\mbox{}\verb@ pStringDict pOption;@\\ \mbox{}\verb@ /* interface functions */@\\ \mbox{}\verb@ int (*Configure)(pHistDriver self,@\\ \mbox{}\verb@ SConnection *pCon,@\\ @@ -313,7 +314,6 @@ $\langle$HistST {\footnotesize ?}$\rangle\equiv$ \mbox{}\verb@ int iInit;@\\ \mbox{}\verb@ pICountable pCountInt;@\\ \mbox{}\verb@ pICallBack pCall;@\\ -\mbox{}\verb@ pStringDict pOption;@\\ \mbox{}\verb@ } HistMem;@\\ \mbox{}\verb@@$\diamond$ \end{list} diff --git a/histogram.w b/histogram.w index 398037c5..f529081f 100644 --- a/histogram.w +++ b/histogram.w @@ -95,6 +95,7 @@ definition: /* status flags */ int iReconfig; int iUpdate; + pStringDict pOption; /* interface functions */ int (*Configure)(pHistDriver self, SConnection *pCon, @@ -256,7 +257,6 @@ histogram memory object is fairly simple: int iInit; pICountable pCountInt; pICallBack pCall; - pStringDict pOption; } HistMem; @} According to the general Sics object interface the first field is the object diff --git a/hmdata.c b/hmdata.c index e506aea4..b9201f66 100644 --- a/hmdata.c +++ b/hmdata.c @@ -320,9 +320,6 @@ static long SumRow(HistInt *iData, int iDataLength, int iStart, int iEnd){ for(i = iStart; i < iEnd; i++){ lSum += iData[i]; } - if(lSum < 0){ - lSum = -lSum; - } return lSum; } /*--------------------------------------------------------------------------*/ @@ -332,7 +329,7 @@ long sumHMDataRectangle(pHistMem hist, SConnection *pCon, pHMdata self = hist->pDriv->data; int i, iHistLength, status, iIndex; char pBueffel[256]; - unsigned long lSum; + unsigned long lSum, lRowSum; assert(self); @@ -380,8 +377,9 @@ long sumHMDataRectangle(pHistMem hist, SConnection *pCon, lSum = 0; for(i = iStart[0]; i < iEnd[0]; i++){ iIndex = i*self->iDim[1]; - lSum += SumRow(self->localBuffer,iHistLength, + lRowSum = SumRow(self->localBuffer,iHistLength, iIndex+iStart[1], iIndex+iEnd[1]); + lSum += lRowSum; } break; default: diff --git a/napi.c b/napi.c index 4f7cb501..75fed79f 100644 --- a/napi.c +++ b/napi.c @@ -23,7 +23,7 @@ ----------------------------------------------------------------------------*/ -static const char* rscid = "$Id: napi.c,v 1.12 2005/09/07 13:51:12 koennecke Exp $"; /* Revision interted by CVS */ +static const char* rscid = "$Id: napi.c,v 1.13 2006/03/03 15:30:55 koennecke Exp $"; /* Revision interted by CVS */ #include #include @@ -34,14 +34,13 @@ static const char* rscid = "$Id: napi.c,v 1.12 2005/09/07 13:51:12 koennecke Exp #include #include "napi.h" - - static int iFortifyScope; +static int iFortifyScope; /*------------------------------------------------------------------------ HDF-5 cache size special stuff -------------------------------------------------------------------------*/ long nx_cacheSize = 1024000; /* 1MB, HDF-5 default */ -NXstatus CALLING_STYLE NXsetcache(long newVal) +NXstatus NXsetcache(long newVal) { if(newVal > 0) { @@ -50,6 +49,8 @@ NXstatus CALLING_STYLE NXsetcache(long newVal) } return NX_ERROR; } + + /*-----------------------------------------------------------------------*/ static NXstatus NXisXML(CONSTCHAR *filename) { @@ -66,6 +67,7 @@ static NXstatus NXisXML(CONSTCHAR *filename) } return NX_ERROR; } + /*-------------------------------------------------------------------------*/ @@ -83,12 +85,16 @@ static NXstatus NXisXML(CONSTCHAR *filename) /*---------------------------------------------------------------------*/ - NX_EXTERNAL void CALLING_STYLE NXMSetError(void *pData, + extern void NXMSetError(void *pData, void (*NewError)(void *pD, char *text)) { NXpData = pData; NXIReportError = NewError; } +/*----------------------------------------------------------------------*/ +extern ErrFunc NXMGetError(){ + return NXIReportError; +} #ifdef HDF5 #include "napi5.h" @@ -143,7 +149,7 @@ static int determineFileType(CONSTCHAR *filename) return 0; } /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXopen(CONSTCHAR *filename, NXaccess am, NXhandle *gHandle) + NXstatus NXopen(CONSTCHAR *filename, NXaccess am, NXhandle *gHandle) { int hdf_type=0; int iRet=0; @@ -274,7 +280,7 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXclose (NXhandle *fid) + NXstatus NXclose (NXhandle *fid) { NXhandle hfil; int status; @@ -293,7 +299,7 @@ static int determineFileType(CONSTCHAR *filename) /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXmakegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) + NXstatus NXmakegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxmakegroup(pFunc->pNexusData, name, nxclass); @@ -301,7 +307,7 @@ static int determineFileType(CONSTCHAR *filename) /*------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXopengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) + NXstatus NXopengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxopengroup(pFunc->pNexusData, name, nxclass); @@ -309,7 +315,7 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXclosegroup (NXhandle fid) + NXstatus NXclosegroup (NXhandle fid) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxclosegroup(pFunc->pNexusData); @@ -317,7 +323,7 @@ static int determineFileType(CONSTCHAR *filename) /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXmakedata (NXhandle fid, CONSTCHAR *name, int datatype, + NXstatus NXmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[]) { pNexusFunction pFunc = (pNexusFunction)fid; @@ -336,7 +342,7 @@ static int determineFileType(CONSTCHAR *filename) /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXcompmakedata (NXhandle fid, CONSTCHAR *name, int datatype, + NXstatus NXcompmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[],int compress_type, int chunk_size[]) { pNexusFunction pFunc = (pNexusFunction)fid; @@ -355,7 +361,7 @@ static int determineFileType(CONSTCHAR *filename) /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXcompress (NXhandle fid, int compress_type) + NXstatus NXcompress (NXhandle fid, int compress_type) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxcompress (pFunc->pNexusData, compress_type); @@ -364,7 +370,7 @@ static int determineFileType(CONSTCHAR *filename) /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXopendata (NXhandle fid, CONSTCHAR *name) + NXstatus NXopendata (NXhandle fid, CONSTCHAR *name) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxopendata(pFunc->pNexusData, name); @@ -373,7 +379,7 @@ static int determineFileType(CONSTCHAR *filename) /* ----------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXclosedata (NXhandle fid) + NXstatus NXclosedata (NXhandle fid) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxclosedata(pFunc->pNexusData); @@ -381,7 +387,7 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXputdata (NXhandle fid, void *data) + NXstatus NXputdata (NXhandle fid, void *data) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxputdata(pFunc->pNexusData, data); @@ -389,7 +395,7 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXputattr (NXhandle fid, CONSTCHAR *name, void *data, + NXstatus NXputattr (NXhandle fid, CONSTCHAR *name, void *data, int datalen, int iType) { pNexusFunction pFunc = (pNexusFunction)fid; @@ -398,7 +404,7 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXputslab (NXhandle fid, void *data, int iStart[], int iSize[]) + NXstatus NXputslab (NXhandle fid, void *data, int iStart[], int iSize[]) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxputslab(pFunc->pNexusData, data, iStart, iSize); @@ -406,7 +412,7 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXgetdataID (NXhandle fid, NXlink* sRes) + NXstatus NXgetdataID (NXhandle fid, NXlink* sRes) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxgetdataID(pFunc->pNexusData, sRes); @@ -415,13 +421,13 @@ static int determineFileType(CONSTCHAR *filename) /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXmakelink (NXhandle fid, NXlink* sLink) + NXstatus NXmakelink (NXhandle fid, NXlink* sLink) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxmakelink(pFunc->pNexusData, sLink); } /* --------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXopensourcegroup(NXhandle fid) + NXstatus NXopensourcegroup(NXhandle fid) { char target_path[512]; int status, type = NX_CHAR, length = 511; @@ -436,7 +442,7 @@ static int determineFileType(CONSTCHAR *filename) } /*----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXflush(NXhandle *pHandle) + NXstatus NXflush(NXhandle *pHandle) { NXhandle hfil; int status; @@ -452,7 +458,7 @@ static int determineFileType(CONSTCHAR *filename) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXmalloc (void** data, int rank, + NXstatus NXmalloc (void** data, int rank, int dimensions[], int datatype) { int i; @@ -487,7 +493,7 @@ static int determineFileType(CONSTCHAR *filename) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXfree (void** data) + NXstatus NXfree (void** data) { if (data == NULL) { NXIReportError (NXpData, "ERROR: passing NULL to NXfree"); @@ -505,7 +511,7 @@ static int determineFileType(CONSTCHAR *filename) /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NXgetnextentry (NXhandle fid, NXname name, NXname nxclass, int *datatype) + NXstatus NXgetnextentry (NXhandle fid, NXname name, NXname nxclass, int *datatype) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxgetnextentry(pFunc->pNexusData, name, nxclass, datatype); @@ -552,7 +558,7 @@ static char *nxitrim(char *str) } /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetdata (NXhandle fid, void *data) + NXstatus NXgetdata (NXhandle fid, void *data) { int status, type, rank, iDim[NX_MAXRANK]; char *pPtr, *pPtr2; @@ -577,7 +583,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetinfo (NXhandle fid, int *rank, + NXstatus NXgetinfo (NXhandle fid, int *rank, int dimension[], int *iType) { int status; @@ -607,7 +613,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetslab (NXhandle fid, void *data, + NXstatus NXgetslab (NXhandle fid, void *data, int iStart[], int iSize[]) { pNexusFunction pFunc = (pNexusFunction)fid; @@ -617,7 +623,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetnextattr (NXhandle fileid, NXname pName, + NXstatus NXgetnextattr (NXhandle fileid, NXname pName, int *iLength, int *iType) { pNexusFunction pFunc = (pNexusFunction)fileid; @@ -627,7 +633,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetattr (NXhandle fid, char *name, void *data, int* datalen, int* iType) + NXstatus NXgetattr (NXhandle fid, char *name, void *data, int* datalen, int* iType) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxgetattr(pFunc->pNexusData, name, data, datalen, iType); @@ -636,7 +642,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetattrinfo (NXhandle fid, int *iN) + NXstatus NXgetattrinfo (NXhandle fid, int *iN) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxgetattrinfo(pFunc->pNexusData, iN); @@ -645,7 +651,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetgroupID (NXhandle fileid, NXlink* sRes) + NXstatus NXgetgroupID (NXhandle fileid, NXlink* sRes) { pNexusFunction pFunc = (pNexusFunction)fileid; return pFunc->nxgetgroupID(pFunc->pNexusData, sRes); @@ -653,7 +659,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXgetgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass) + NXstatus NXgetgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxgetgroupinfo(pFunc->pNexusData, iN, pName, pClass); @@ -662,7 +668,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXsameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID) + NXstatus NXsameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID) { pNexusFunction pFunc = (pNexusFunction)fileid; return pFunc->nxsameID(pFunc->pNexusData, pFirstID, pSecondID); @@ -670,14 +676,14 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXinitattrdir (NXhandle fid) + NXstatus NXinitattrdir (NXhandle fid) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxinitattrdir(pFunc->pNexusData); } /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXsetnumberformat (NXhandle fid, + NXstatus NXsetnumberformat (NXhandle fid, int type, char *format) { pNexusFunction pFunc = (pNexusFunction)fid; @@ -698,7 +704,7 @@ static char *nxitrim(char *str) /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXinitgroupdir (NXhandle fid) + NXstatus NXinitgroupdir (NXhandle fid) { pNexusFunction pFunc = (pNexusFunction)fid; return pFunc->nxinitgroupdir(pFunc->pNexusData); @@ -927,7 +933,7 @@ static NXstatus stepOneGroupUp(NXhandle hfil, char *name) return NX_ERROR; } /*---------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXopenpath(NXhandle hfil, CONSTCHAR *path) +NXstatus NXopenpath(NXhandle hfil, CONSTCHAR *path) { int status, run = 1; NXname pathElement; @@ -964,7 +970,7 @@ NXstatus CALLING_STYLE NXopenpath(NXhandle hfil, CONSTCHAR *path) return NX_OK; } /*---------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXopengrouppath(NXhandle hfil, CONSTCHAR *path) +NXstatus NXopengrouppath(NXhandle hfil, CONSTCHAR *path) { int status, run = 1; NXname pathElement; @@ -1000,6 +1006,13 @@ NXstatus CALLING_STYLE NXopengrouppath(NXhandle hfil, CONSTCHAR *path) } return NX_OK; } + +NXstatus NXIprintlink(NXhandle fid, NXlink* link) +{ + pNexusFunction pFunc = (pNexusFunction)fid; + return pFunc->nxprintlink(pFunc->pNexusData, link); +} + /*-------------------------------------------------------------------- format NeXus time. Code needed in every NeXus file driver ---------------------------------------------------------------------*/ @@ -1081,7 +1094,7 @@ char *NXIformatNeXusTime(){ * NXhandle. We could store the NXhandle value in the FORTRAN array * instead, but that would mean writing far more wrappers */ - NXstatus CALLING_STYLE NXfopen(char * filename, NXaccess* am, + NXstatus NXfopen(char * filename, NXaccess* am, NexusFunction* pHandle) { NXstatus ret; @@ -1106,7 +1119,7 @@ char *NXIformatNeXusTime(){ * array holding the NexusFunction structure. We need to malloc() * a temporary copy as NXclose will try to free() this */ - NXstatus CALLING_STYLE NXfclose (NexusFunction* pHandle) + NXstatus NXfclose (NexusFunction* pHandle) { NXhandle h; NXstatus ret; @@ -1118,7 +1131,7 @@ char *NXIformatNeXusTime(){ } /*---------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXfflush(NexusFunction* pHandle) + NXstatus NXfflush(NexusFunction* pHandle) { NXhandle h; NXstatus ret; @@ -1129,7 +1142,7 @@ char *NXIformatNeXusTime(){ return ret; } /*----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXfmakedata(NXhandle fid, char *name, int *pDatatype, + NXstatus NXfmakedata(NXhandle fid, char *name, int *pDatatype, int *pRank, int dimensions[]) { NXstatus ret; @@ -1157,7 +1170,7 @@ char *NXIformatNeXusTime(){ } - NXstatus CALLING_STYLE NXfcompmakedata(NXhandle fid, char *name, + NXstatus NXfcompmakedata(NXhandle fid, char *name, int *pDatatype, int *pRank, int dimensions[], int *compression_type, int chunk[]) @@ -1190,12 +1203,12 @@ char *NXIformatNeXusTime(){ return ret; } /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXfcompress(NXhandle fid, int *compr_type) + NXstatus NXfcompress(NXhandle fid, int *compr_type) { return NXcompress(fid,*compr_type); } /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NXfputattr(NXhandle fid, char *name, void *data, + NXstatus NXfputattr(NXhandle fid, char *name, void *data, int *pDatalen, int *pIType) { return NXputattr(fid, name, data, *pDatalen, *pIType); @@ -1214,3 +1227,242 @@ char *NXIformatNeXusTime(){ va_end(valist); return ret; } + +/* + * windows stdcall aliases + */ +#ifdef _WIN32 + +NXstatus __stdcall NXISETCACHE(long newVal) +{ + return NXsetcache(newVal); +} + +void __stdcall NXNXNXREPORTERROR(void *pData, char *string) +{ + NXNXNXReportError(pData, string); +} + +NXstatus __stdcall NXIOPEN(CONSTCHAR *filename, NXaccess am, NXhandle *gHandle) +{ + return NXopen(filename, am, gHandle); +} + +NXstatus __stdcall NXICLOSE(NXhandle *fid) +{ + return NXclose(fid); +} + +NXstatus __stdcall NXIFLUSH(NXhandle* pHandle) +{ + return NXflush(pHandle); +} + +NXstatus __stdcall NXIMAKEGROUP(NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass) +{ + return NXmakegroup(handle, name, NXclass); +} + +NXstatus __stdcall NXIOPENGROUP(NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass) +{ + return NXopengroup(handle, name, NXclass); +} + +NXstatus __stdcall NXIOPENPATH(NXhandle handle, CONSTCHAR *path) +{ + return NXopenpath(handle, path); +} + +NXstatus __stdcall NXIOPENGROUPPATH (NXhandle handle, CONSTCHAR *path) +{ + return NXopengrouppath(handle, path); +} + +NXstatus __stdcall NXICLOSEGROUP(NXhandle handle) +{ + return NXclosegroup(handle); +} + +NXstatus __stdcall NXIMAKEDATA (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]) +{ + return NXmakedata (handle, label, datatype, rank, dim); +} + +NXstatus __stdcall NXICOMPMAKEDATA (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]) +{ + return NXcompmakedata (handle, label, datatype, rank, dim, comp_typ, bufsize); +} + +NXstatus __stdcall NXICOMPRESS (NXhandle handle, int compr_type) +{ + return NXcompress (handle, compr_type); +} + +NXstatus __stdcall NXIOPENDATA (NXhandle handle, CONSTCHAR* label) +{ + return NXopendata (handle, label); +} + +NXstatus __stdcall NXICLOSEDATA(NXhandle handle) +{ + return NXclosedata(handle); +} + +NXstatus __stdcall NXIPUTDATA(NXhandle handle, void* data) +{ + return NXputdata(handle, data); +} + +NXstatus __stdcall NXIPUTATTR(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType) +{ + return NXputattr(handle, name, data, iDataLen, iType); +} + +NXstatus __stdcall NXIPUTSLAB(NXhandle handle, void* data, int start[], int size[]) +{ + return NXputslab(handle, data, start, size); +} + +NXstatus __stdcall NXIGETDATAID(NXhandle handle, NXlink* pLink) +{ + return NXgetdataID(handle, pLink); +} + +NXstatus __stdcall NXIMAKELINK(NXhandle handle, NXlink* pLink) +{ + return NXmakelink(handle, pLink); +} + +NXstatus __stdcall NXIOPENSOURCEGROUP(NXhandle handle) +{ + return NXopensourcegroup(handle); +} + +NXstatus __stdcall NXIGETDATA(NXhandle handle, void* data) +{ + return NXgetdata(handle, data); +} + +NXstatus __stdcall NXIGETINFO(NXhandle handle, int* rank, int dimension[], int* datatype) +{ + return NXgetinfo(handle, rank, dimension, datatype); +} + +NXstatus __stdcall NXIGETNEXTENTRY(NXhandle handle, NXname name, NXname nxclass, int* datatype) +{ + return NXgetnextentry(handle, name, nxclass, datatype); +} + +NXstatus __stdcall NXIGETSLAB(NXhandle handle, void* data, int start[], int size[]) +{ + return NXgetslab(handle, data, start, size); +} + +NXstatus __stdcall NXIGETNEXTATTR(NXhandle handle, NXname pName, int *iLength, int *iType) +{ + return NXgetnextattr(handle, pName, iLength, iType); +} + +NXstatus __stdcall NXIGETATTR(NXhandle handle, char* name, void* data, int* iDataLen, int* iType) +{ + return NXgetattr(handle, name, data, iDataLen, iType); +} + +NXstatus __stdcall NXIGETATTRINFO(NXhandle handle, int* no_items) +{ + return NXgetattrinfo(handle, no_items); +} + +NXstatus __stdcall NXIGETGROUPID(NXhandle handle, NXlink* pLink) +{ + return NXgetgroupID(handle, pLink); +} + +NXstatus __stdcall NXIGETGROUPINFO(NXhandle handle, int* no_items, NXname name, NXname nxclass) +{ + return NXgetgroupinfo(handle, no_items, name, nxclass); +} + +NXstatus __stdcall NXISAMEID(NXhandle handle, NXlink* pFirstID, NXlink* pSecondID) +{ + return NXsameID(handle, pFirstID, pSecondID); +} + +NXstatus __stdcall NXIINITGROUPDIR(NXhandle handle) +{ + return NXinitgroupdir(handle); +} +NXstatus __stdcall NXIINITATTRDIR(NXhandle handle) +{ + return NXinitattrdir(handle); +} +NXstatus __stdcall NXISETNUMBERFORMAT(NXhandle handle, int type, char *format) +{ + return NXsetnumberformat(handle,type, format); +} + +NXstatus __stdcall NXIMALLOC(void** data, int rank, int dimensions[], int datatype) +{ + return NXmalloc(data, rank, dimensions, datatype); +} + +NXstatus __stdcall NXIFREE(void** data) +{ + return NXfree(data); +} + +#if 0 +/*----------------------------------------------------------------------- + NAPI internals +------------------------------------------------------------------------*/ +extern void NXMSetError(void *pData, void (*ErrFunc)(void *pD, char *text)); +extern void (*NXIReportError)(void *pData,char *text); +extern void *NXpData; +extern char *NXIformatNeXusTime(); +#endif + +/* FORTRAN internals */ + +NXstatus __stdcall NXIFOPEN(char * filename, NXaccess* am, + NexusFunction* pHandle) +{ + return NXfopen(filename, am, pHandle); +} + +NXstatus __stdcall NXIFCLOSE (NexusFunction* pHandle) +{ + return NXfclose (pHandle); +} + +NXstatus __stdcall NXIFPUTATTR(NXhandle fid, char *name, void *data, + int *pDatalen, int *pIType) +{ + return NXfputattr(fid, name, data, pDatalen, pIType); +} + +NXstatus __stdcall NXIFCOMPRESS(NXhandle fid, int *compr_type) +{ + return NXfcompress(fid, compr_type); +} + +NXstatus __stdcall NXIFCOMPMAKEDATA(NXhandle fid, char *name, + int *pDatatype, + int *pRank, int dimensions[], + int *compression_type, int chunk[]) +{ + return NXfcompmakedata(fid, name, pDatatype, pRank, dimensions, + compression_type, chunk); +} + +NXstatus __stdcall NXIFMAKEDATA(NXhandle fid, char *name, int *pDatatype, + int *pRank, int dimensions[]) +{ + return NXfmakedata(fid, name, pDatatype, pRank, dimensions); +} + +NXstatus __stdcall NXIFFLUSH(NexusFunction* pHandle) +{ + return NXfflush(pHandle); +} + +#endif /* _WIN32 */ diff --git a/napi.h b/napi.h index 26543077..f27b05b7 100644 --- a/napi.h +++ b/napi.h @@ -21,7 +21,7 @@ For further information, see - $Id: napi.h,v 1.9 2005/09/07 13:51:12 koennecke Exp $ + $Id: napi.h,v 1.10 2006/03/03 15:30:55 koennecke Exp $ ----------------------------------------------------------------------------*/ @@ -33,18 +33,8 @@ #define CONSTCHAR const char -#if defined(_WIN32) && defined(_DLL) -# ifdef NX45DLL_EXPORTS -# define NX_EXTERNAL __declspec(dllexport) -# else -# define NX_EXTERNAL __declspec(dllimport) -# endif -#else -# define NX_EXTERNAL -#endif - #ifdef _WIN32 -#define snprintf nxisnprintf +//#define snprintf nxisnprintf extern int nxisnprintf(char* buffer, int len, const char* format, ... ); #endif /* _WIN32 */ @@ -133,16 +123,12 @@ typedef struct { #define CONCAT(__a,__b) __a##__b /* token concatenation */ -#if defined(__unix) || defined(__unix__) || defined (__VMS) || defined(__APPLE__) - # ifdef __VMS # define MANGLE(__arg) __arg # else # define MANGLE(__arg) CONCAT(__arg,_) # endif -# define CALLING_STYLE /* blank */ - # define NXopen MANGLE(nxiopen) # define NXclose MANGLE(nxiclose) # define NXmakegroup MANGLE(nximakegroup) @@ -180,7 +166,10 @@ typedef struct { # define NXinitattrdir MANGLE(nxiinitattrdir) # define NXsetnumberformat MANGLE(nxisetnumberformat) # define NXsetcache MANGLE(nxisetcache) -/* FORTRAN helpers - for NeXus internal use only */ + +/* + * FORTRAN helpers - for NeXus internal use only + */ # define NXfopen MANGLE(nxifopen) # define NXfclose MANGLE(nxifclose) # define NXfflush MANGLE(nxifflush) @@ -189,80 +178,6 @@ typedef struct { # define NXfcompress MANGLE(nxifcompress) # define NXfputattr MANGLE(nxifputattr) -#elif defined(_WIN32) -/* - * START OF WINDOWS SPECIFIC CONFIGURATION - * - * Added by Freddie Akeroyd 9/8/2002 - * - * Various PC calling conventions - you need only uncomment one of the following definitions of MANGLE() - * anlong with the appropriate CALLING_STYLE - * The choice arises because under Windows the default way FORTRAN calls FORTRAN is different - * from the dafault way C calls C, and so when you need to have FORTRAN calling C you must - * force them to use the same convention. Notice the use of "default way" above ... by choice - * of compiler options (or compiler vendor) you may actually have FORTRAN calling in the C way - * etc., so you might need to experiment with the options below until you get no "unresolved symbols" - * - * Choice 1: Should allow both FORTRAN and C NeXus interfaces to work in a "default" setup - * Choice 2: For when choice 1: gives problems and you only require the C interface - * Choice 3: An alternative to 1: which may allow both FORTRAN and C in a non-default setup - */ -# define MANGLE(__arg) __arg /* Choice 1 */ -# define CALLING_STYLE __stdcall /* Choice 1 */ -/* # define MANGLE(__arg) __arg /* Choice 2 */ -/* # define CALLING_STYLE /* Choice 2 */ -/* # define MANGLE(__arg) CONCAT(__arg,_) /* Choice 3 */ -/* # define CALLING_STYLE __stdcall /* Choice 3 */ -/* - * END OF WINDOWS SPECIFIC CONFIGURATION - */ -# define NXopen MANGLE(NXIOPEN) -# define NXclose MANGLE(NXICLOSE) -# define NXflush MANGLE(NXIFLUSH) -# define NXmakegroup MANGLE(NXIMAKEGROUP) -# define NXopengroup MANGLE(NXIOPENGROUP) -# define NXopenpath MANGLE(NXIOPENPATH) -# define NXopengrouppath MANGLE(NXIOPENGROUPPATH) -# define NXclosegroup MANGLE(NXICLOSEGROUP) -# define NXmakedata MANGLE(NXIMAKEDATA) -# define NXcompress MANGLE(NXICOMPRESS) -# define NXopendata MANGLE(NXIOPENDATA) -# define NXclosedata MANGLE(NXICLOSEDATA) -# define NXgetdata MANGLE(NXIGETDATA) -# define NXgetslab MANGLE(NXIGETSLAB) -# define NXgetattr MANGLE(NXIGETATTR) -# define NXgetdim MANGLE(NXIGETDIM) -# define NXputdata MANGLE(NXIPUTDATA) -# define NXputslab MANGLE(NXIPUTSLAB) -# define NXputattr MANGLE(NXIPUTATTR) -# define NXputdim MANGLE(NXIPUTDIM) -# define NXgetinfo MANGLE(NXIGETINFO) -# define NXgetgroupinfo MANGLE(NXIGETGROUPINFO) -# define NXsameID MANGLE(NXISAMEID) -# define NXinitgroupdir MANGLE(NXIINITGROUPDIR) -# define NXgetnextentry MANGLE(NXIGETNEXTENTRY) -# define NXgetattrinfo MANGLE(NXIGETATTRINFO) -# define NXinitattrdir MANGLE(NXIINITATTRDIR) -# define NXsetnumberformat MANGLE(NXISETNUMBERFORMAT) -# define NXgetnextattr MANGLE(NXIGETNEXTATTR) -# define NXgetgroupID MANGLE(NXIGETGROUPID) -# define NXgetdataID MANGLE(NXIGETDATAID) -# define NXmakelink MANGLE(NXIMAKELINK) -# define NXopensourcegroup MANGLE(NXIOPENSOURCEGROUP) -# define NXmalloc MANGLE(NXIMALLOC) -# define NXfree MANGLE(NXIFREE) -/* FORTRAN helpers - for NeXus internal use only */ -# define NXfopen MANGLE(NXIFOPEN) -# define NXfclose MANGLE(NXIFCLOSE) -# define NXfflush MANGLE(NXIFFLUSH) -# define NXfmakedata MANGLE(NXIFMAKEDATA) -# define NXfcompmakedata MANGLE(NXIFCOMPMAKEDATA) -# define NXfcompress MANGLE(NXIFCOMPRESS) -# define NXfputattr MANGLE(NXIFPUTATTR) -#else -# error Cannot compile - unknown operating system -#endif - /* * Standard interface @@ -271,105 +186,120 @@ typedef struct { #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -NX_EXTERNAL NXstatus CALLING_STYLE NXopen(CONSTCHAR * filename, NXaccess access_method, NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NXclose(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NXflush(NXhandle* pHandle); +extern NXstatus NXopen(CONSTCHAR * filename, NXaccess access_method, NXhandle* pHandle); +extern NXstatus NXclose(NXhandle* pHandle); +extern NXstatus NXflush(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NXmakegroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); -NX_EXTERNAL NXstatus CALLING_STYLE NXopengroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); -NX_EXTERNAL NXstatus CALLING_STYLE NXopenpath (NXhandle handle, CONSTCHAR *path); -NX_EXTERNAL NXstatus CALLING_STYLE NXopengrouppath (NXhandle handle, CONSTCHAR *path); +extern NXstatus NXmakegroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); +extern NXstatus NXopengroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); +extern NXstatus NXopenpath (NXhandle handle, CONSTCHAR *path); +extern NXstatus NXopengrouppath (NXhandle handle, CONSTCHAR *path); -NX_EXTERNAL NXstatus CALLING_STYLE NXclosegroup(NXhandle handle); +extern NXstatus NXclosegroup(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); -NX_EXTERNAL NXstatus CALLING_STYLE NXcompmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); -NX_EXTERNAL NXstatus CALLING_STYLE NXcompress (NXhandle handle, int compr_type); -NX_EXTERNAL NXstatus CALLING_STYLE NXopendata (NXhandle handle, CONSTCHAR* label); -NX_EXTERNAL NXstatus CALLING_STYLE NXclosedata(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXputdata(NXhandle handle, void* data); +extern NXstatus NXmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); +extern NXstatus NXcompmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); +extern NXstatus NXcompress (NXhandle handle, int compr_type); +extern NXstatus NXopendata (NXhandle handle, CONSTCHAR* label); +extern NXstatus NXclosedata(NXhandle handle); +extern NXstatus NXputdata(NXhandle handle, void* data); -NX_EXTERNAL NXstatus CALLING_STYLE NXputattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); -NX_EXTERNAL NXstatus CALLING_STYLE NXputslab(NXhandle handle, void* data, int start[], int size[]); +extern NXstatus NXputattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); +extern NXstatus NXputslab(NXhandle handle, void* data, int start[], int size[]); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetdataID(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NXmakelink(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NXopensourcegroup(NXhandle handle); +extern NXstatus NXgetdataID(NXhandle handle, NXlink* pLink); +extern NXstatus NXmakelink(NXhandle handle, NXlink* pLink); +extern NXstatus NXopensourcegroup(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetdata(NXhandle handle, void* data); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetinfo(NXhandle handle, int* rank, int dimension[], int* datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); +extern NXstatus NXgetdata(NXhandle handle, void* data); +extern NXstatus NXgetinfo(NXhandle handle, int* rank, int dimension[], int* datatype); +extern NXstatus NXgetnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetslab(NXhandle handle, void* data, int start[], int size[]); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetattrinfo(NXhandle handle, int* no_items); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetgroupID(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NXgetgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); -NX_EXTERNAL NXstatus CALLING_STYLE NXsameID(NXhandle handle, NXlink* pFirstID, NXlink* pSecondID); +extern NXstatus NXgetslab(NXhandle handle, void* data, int start[], int size[]); +extern NXstatus NXgetnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); +extern NXstatus NXgetattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); +extern NXstatus NXgetattrinfo(NXhandle handle, int* no_items); +extern NXstatus NXgetgroupID(NXhandle handle, NXlink* pLink); +extern NXstatus NXgetgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); +extern NXstatus NXsameID(NXhandle handle, NXlink* pFirstID, NXlink* pSecondID); -NX_EXTERNAL NXstatus CALLING_STYLE NXinitgroupdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXinitattrdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXsetnumberformat(NXhandle handle, +extern NXstatus NXinitgroupdir(NXhandle handle); +extern NXstatus NXinitattrdir(NXhandle handle); +extern NXstatus NXsetnumberformat(NXhandle handle, int type, char *format); -NX_EXTERNAL NXstatus CALLING_STYLE NXmalloc(void** data, int rank, int dimensions[], int datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NXfree(void** data); +extern NXstatus NXmalloc(void** data, int rank, int dimensions[], int datatype); +extern NXstatus NXfree(void** data); /*----------------------------------------------------------------------- NAPI internals ------------------------------------------------------------------------*/ -NX_EXTERNAL void CALLING_STYLE NXMSetError(void *pData, void (*ErrFunc)(void *pD, char *text)); +typedef void (*ErrFunc)(void *data, char *text); +extern void NXMSetError(void *pData, ErrFunc); +extern ErrFunc NXMGetError(); extern void (*NXIReportError)(void *pData,char *text); extern void *NXpData; extern char *NXIformatNeXusTime(); - +extern NXstatus NXIprintlink(NXhandle fid, NXlink* link); /* another special function for setting the default cache size for HDF-5 */ -NX_EXTERNAL NXstatus CALLING_STYLE NXsetcache(long newVal); +extern NXstatus NXsetcache(long newVal); -/* - * We need to include CALLING_STYLE in the function pointer definition - * or else we get a type mismatch on Win32 - */ typedef struct { NXhandle *pNexusData; int stripFlag; - NXstatus (CALLING_STYLE *nxclose)(NXhandle* pHandle); - NXstatus (CALLING_STYLE *nxflush)(NXhandle* pHandle); - NXstatus (CALLING_STYLE *nxmakegroup) (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); - NXstatus (CALLING_STYLE *nxopengroup) (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); - NXstatus (CALLING_STYLE *nxclosegroup)(NXhandle handle); - NXstatus (CALLING_STYLE *nxmakedata) (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); - NXstatus (CALLING_STYLE *nxcompmakedata) (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); - NXstatus (CALLING_STYLE *nxcompress) (NXhandle handle, int compr_type); - NXstatus (CALLING_STYLE *nxopendata) (NXhandle handle, CONSTCHAR* label); - NXstatus (CALLING_STYLE *nxclosedata)(NXhandle handle); - NXstatus (CALLING_STYLE *nxputdata)(NXhandle handle, void* data); - NXstatus (CALLING_STYLE *nxputattr)(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); - NXstatus (CALLING_STYLE *nxputslab)(NXhandle handle, void* data, int start[], int size[]); - NXstatus (CALLING_STYLE *nxgetdataID)(NXhandle handle, NXlink* pLink); - NXstatus (CALLING_STYLE *nxmakelink)(NXhandle handle, NXlink* pLink); - NXstatus (CALLING_STYLE *nxgetdata)(NXhandle handle, void* data); - NXstatus (CALLING_STYLE *nxgetinfo)(NXhandle handle, int* rank, int dimension[], int* datatype); - NXstatus (CALLING_STYLE *nxgetnextentry)(NXhandle handle, NXname name, NXname nxclass, int* datatype); - NXstatus (CALLING_STYLE *nxgetslab)(NXhandle handle, void* data, int start[], int size[]); - NXstatus (CALLING_STYLE *nxgetnextattr)(NXhandle handle, NXname pName, int *iLength, int *iType); - NXstatus (CALLING_STYLE *nxgetattr)(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); - NXstatus (CALLING_STYLE *nxgetattrinfo)(NXhandle handle, int* no_items); - NXstatus (CALLING_STYLE *nxgetgroupID)(NXhandle handle, NXlink* pLink); - NXstatus (CALLING_STYLE *nxgetgroupinfo)(NXhandle handle, int* no_items, NXname name, NXname nxclass); - NXstatus (CALLING_STYLE *nxsameID)(NXhandle handle, NXlink* pFirstID, NXlink* pSecondID); - NXstatus (CALLING_STYLE *nxinitgroupdir)(NXhandle handle); - NXstatus (CALLING_STYLE *nxinitattrdir)(NXhandle handle); - NXstatus (CALLING_STYLE *nxsetnumberformat)(NXhandle handle, - int type,char *format); + NXstatus ( *nxclose)(NXhandle* pHandle); + NXstatus ( *nxflush)(NXhandle* pHandle); + NXstatus ( *nxmakegroup) (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); + NXstatus ( *nxopengroup) (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); + NXstatus ( *nxclosegroup)(NXhandle handle); + NXstatus ( *nxmakedata) (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); + NXstatus ( *nxcompmakedata) (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); + NXstatus ( *nxcompress) (NXhandle handle, int compr_type); + NXstatus ( *nxopendata) (NXhandle handle, CONSTCHAR* label); + NXstatus ( *nxclosedata)(NXhandle handle); + NXstatus ( *nxputdata)(NXhandle handle, void* data); + NXstatus ( *nxputattr)(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); + NXstatus ( *nxputslab)(NXhandle handle, void* data, int start[], int size[]); + NXstatus ( *nxgetdataID)(NXhandle handle, NXlink* pLink); + NXstatus ( *nxmakelink)(NXhandle handle, NXlink* pLink); + NXstatus ( *nxgetdata)(NXhandle handle, void* data); + NXstatus ( *nxgetinfo)(NXhandle handle, int* rank, int dimension[], int* datatype); + NXstatus ( *nxgetnextentry)(NXhandle handle, NXname name, NXname nxclass, int* datatype); + NXstatus ( *nxgetslab)(NXhandle handle, void* data, int start[], int size[]); + NXstatus ( *nxgetnextattr)(NXhandle handle, NXname pName, int *iLength, int *iType); + NXstatus ( *nxgetattr)(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); + NXstatus ( *nxgetattrinfo)(NXhandle handle, int* no_items); + NXstatus ( *nxgetgroupID)(NXhandle handle, NXlink* pLink); + NXstatus ( *nxgetgroupinfo)(NXhandle handle, int* no_items, NXname name, NXname nxclass); + NXstatus ( *nxsameID)(NXhandle handle, NXlink* pFirstID, NXlink* pSecondID); + NXstatus ( *nxinitgroupdir)(NXhandle handle); + NXstatus ( *nxinitattrdir)(NXhandle handle); + NXstatus ( *nxsetnumberformat)(NXhandle handle, int type, char *format); + NXstatus ( *nxprintlink)(NXhandle handle, NXlink* link); } NexusFunction, *pNexusFunction; /*---------------------*/ extern long nx_cacheSize; + +/* FORTRAN internals */ + + extern NXstatus NXfopen(char * filename, NXaccess* am, + NexusFunction* pHandle); + extern NXstatus NXfclose (NexusFunction* pHandle); + extern NXstatus NXfputattr(NXhandle fid, char *name, void *data, + int *pDatalen, int *pIType); + extern NXstatus NXfcompress(NXhandle fid, int *compr_type); + extern NXstatus NXfcompmakedata(NXhandle fid, char *name, + int *pDatatype, + int *pRank, int dimensions[], + int *compression_type, int chunk[]); + extern NXstatus NXfmakedata(NXhandle fid, char *name, int *pDatatype, + int *pRank, int dimensions[]); + extern NXstatus NXfflush(NexusFunction* pHandle); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/napi4.c b/napi4.c index 6838ce60..76b800ea 100644 --- a/napi4.c +++ b/napi4.c @@ -21,7 +21,7 @@ For further information, see - $Id: napi4.c,v 1.5 2005/09/07 13:51:12 koennecke Exp $ + $Id: napi4.c,v 1.6 2006/03/03 15:30:55 koennecke Exp $ ----------------------------------------------------------------------------*/ #include @@ -320,7 +320,7 @@ extern void *NXpData; ---------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4open(CONSTCHAR *filename, NXaccess am, + NXstatus NX4open(CONSTCHAR *filename, NXaccess am, NXhandle* pHandle) { pNexusFile pNew = NULL; @@ -454,7 +454,7 @@ extern void *NXpData; /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4close (NXhandle* fid) + NXstatus NX4close (NXhandle* fid) { pNexusFile pFile = NULL; int iRet; @@ -492,7 +492,7 @@ extern void *NXpData; /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4makegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) + NXstatus NX4makegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) { pNexusFile pFile; int32 iNew, iRet; @@ -536,7 +536,7 @@ extern void *NXpData; /*------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4opengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) + NXstatus NX4opengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) { pNexusFile pFile; int32 iRef; @@ -570,7 +570,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4closegroup (NXhandle fid) + NXstatus NX4closegroup (NXhandle fid) { pNexusFile pFile; @@ -603,7 +603,7 @@ extern void *NXpData; /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4makedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, + NXstatus NX4makedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[]) { pNexusFile pFile; @@ -728,7 +728,7 @@ extern void *NXpData; /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4compmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, + NXstatus NX4compmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[],int compress_type, int chunk_size[]) { pNexusFile pFile; @@ -895,7 +895,7 @@ extern void *NXpData; /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4compress (NXhandle fid, int compress_type) + NXstatus NX4compress (NXhandle fid, int compress_type) { pNexusFile pFile; int32 iRank, iAtt, iType, iRet; @@ -959,7 +959,7 @@ extern void *NXpData; /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4opendata (NXhandle fid, CONSTCHAR *name) + NXstatus NX4opendata (NXhandle fid, CONSTCHAR *name) { pNexusFile pFile; int32 iNew; @@ -1001,7 +1001,7 @@ extern void *NXpData; /* ----------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4closedata (NXhandle fid) + NXstatus NX4closedata (NXhandle fid) { pNexusFile pFile; int iRet; @@ -1026,7 +1026,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4putdata (NXhandle fid, void *data) + NXstatus NX4putdata (NXhandle fid, void *data) { pNexusFile pFile; int32 iStart[MAX_VAR_DIMS], iSize[MAX_VAR_DIMS], iStride[MAX_VAR_DIMS]; @@ -1063,7 +1063,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ NXstatus - CALLING_STYLE NX4putattr (NXhandle fid, CONSTCHAR *name, void *data, int datalen, int iType) + NX4putattr (NXhandle fid, CONSTCHAR *name, void *data, int datalen, int iType) { pNexusFile pFile; int iRet, type; @@ -1126,7 +1126,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4putslab (NXhandle fid, void *data, int iStart[], int iSize[]) + NXstatus NX4putslab (NXhandle fid, void *data, int iStart[], int iSize[]) { pNexusFile pFile; int iRet; @@ -1183,7 +1183,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4getdataID (NXhandle fid, NXlink* sRes) + NXstatus NX4getdataID (NXhandle fid, NXlink* sRes) { pNexusFile pFile; @@ -1206,7 +1206,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4makelink (NXhandle fid, NXlink* sLink) + NXstatus NX4makelink (NXhandle fid, NXlink* sLink) { pNexusFile pFile; int32 iVG, iRet, dataID, type = DFNT_CHAR8, length; @@ -1229,11 +1229,20 @@ extern void *NXpData; } return NX_OK; } + + /*----------------------------------------------------------------------*/ + NXstatus NX4printlink (NXhandle fid, NXlink* sLink) + { + pNexusFile pFile; + pFile = NXIassert (fid); + printf("HDF4 link: iTag = %d, iRef = %d, target=\"%s\"\n", sLink->iTag, sLink->iRef, sLink->targetPath); + return NX_OK; + } /*----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4flush(NXhandle *pHandle) + NXstatus NX4flush(NXhandle *pHandle) { char *pFileName, *pCopy = NULL; int access, dummy, iRet, i, iStack; @@ -1314,7 +1323,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getnextentry (NXhandle fid, NXname name, NXname nxclass, int *datatype) + NXstatus NX4getnextentry (NXhandle fid, NXname name, NXname nxclass, int *datatype) { pNexusFile pFile; int iRet, iStackPtr, iCurDir; @@ -1396,7 +1405,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getdata (NXhandle fid, void *data) + NXstatus NX4getdata (NXhandle fid, void *data) { pNexusFile pFile; int32 iStart[MAX_VAR_DIMS], iSize[MAX_VAR_DIMS]; @@ -1421,7 +1430,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ NXstatus - CALLING_STYLE NX4getinfo (NXhandle fid, int *rank, int dimension[], + NX4getinfo (NXhandle fid, int *rank, int dimension[], int *iType) { pNexusFile pFile; @@ -1453,7 +1462,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getslab (NXhandle fid, void *data, int iStart[], int iSize[]) + NXstatus NX4getslab (NXhandle fid, void *data, int iStart[], int iSize[]) { pNexusFile pFile; int32 myStart[MAX_VAR_DIMS], mySize[MAX_VAR_DIMS]; @@ -1496,7 +1505,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getnextattr (NXhandle fileid, NXname pName, + NXstatus NX4getnextattr (NXhandle fileid, NXname pName, int *iLength, int *iType) { pNexusFile pFile; @@ -1539,7 +1548,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getattr (NXhandle fid, char *name, void *data, int* datalen, int* iType) + NXstatus NX4getattr (NXhandle fid, char *name, void *data, int* datalen, int* iType) { pNexusFile pFile; int32 iNew, iType32; @@ -1648,7 +1657,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getattrinfo (NXhandle fid, int *iN) + NXstatus NX4getattrinfo (NXhandle fid, int *iN) { pNexusFile pFile; int iRet; @@ -1674,7 +1683,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4getgroupID (NXhandle fileid, NXlink* sRes) + NXstatus NX4getgroupID (NXhandle fileid, NXlink* sRes) { pNexusFile pFile; @@ -1697,7 +1706,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ NXstatus - CALLING_STYLE NX4getgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass) + NX4getgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass) { pNexusFile pFile; @@ -1718,7 +1727,7 @@ extern void *NXpData; /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX4sameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID) + NXstatus NX4sameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID) { pNexusFile pFile; @@ -1733,7 +1742,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4initattrdir (NXhandle fid) + NXstatus NX4initattrdir (NXhandle fid) { pNexusFile pFile; int iRet; @@ -1750,7 +1759,7 @@ extern void *NXpData; /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX4initgroupdir (NXhandle fid) + NXstatus NX4initgroupdir (NXhandle fid) { pNexusFile pFile; int iRet; @@ -1795,4 +1804,5 @@ void NX4assignFunctions(pNexusFunction fHandle) fHandle->nxsameID=NX4sameID; fHandle->nxinitgroupdir=NX4initgroupdir; fHandle->nxinitattrdir=NX4initattrdir; + fHandle->nxprintlink=NX4printlink; } diff --git a/napi4.h b/napi4.h index 05a9e70f..f07cce9a 100644 --- a/napi4.h +++ b/napi4.h @@ -7,40 +7,42 @@ * HDF4 interface */ -NX_EXTERNAL NXstatus CALLING_STYLE NX4open(CONSTCHAR *filename, NXaccess access_method, NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4close(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4flush(NXhandle* pHandle); +extern NXstatus NX4open(CONSTCHAR *filename, NXaccess access_method, NXhandle* pHandle); +extern NXstatus NX4close(NXhandle* pHandle); +extern NXstatus NX4flush(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4makegroup (NXhandle handle, CONSTCHAR* Vgroup, CONSTCHAR* NXclass); -NX_EXTERNAL NXstatus CALLING_STYLE NX4opengroup (NXhandle handle, CONSTCHAR* Vgroup, CONSTCHAR* NXclass); -NX_EXTERNAL NXstatus CALLING_STYLE NX4closegroup(NXhandle handle); +extern NXstatus NX4makegroup (NXhandle handle, CONSTCHAR* Vgroup, CONSTCHAR* NXclass); +extern NXstatus NX4opengroup (NXhandle handle, CONSTCHAR* Vgroup, CONSTCHAR* NXclass); +extern NXstatus NX4closegroup(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4makedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX4compmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX4compress (NXhandle handle, int compr_type); -NX_EXTERNAL NXstatus CALLING_STYLE NX4opendata (NXhandle handle, CONSTCHAR* label); +extern NXstatus NX4makedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); +extern NXstatus NX4compmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); +extern NXstatus NX4compress (NXhandle handle, int compr_type); +extern NXstatus NX4opendata (NXhandle handle, CONSTCHAR* label); -NX_EXTERNAL NXstatus CALLING_STYLE NX4closedata(NXhandle handle); +extern NXstatus NX4closedata(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getdata(NXhandle handle, void* data); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getslab(NXhandle handle, void* data, int start[], int size[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); +extern NXstatus NX4getdata(NXhandle handle, void* data); +extern NXstatus NX4getslab(NXhandle handle, void* data, int start[], int size[]); +extern NXstatus NX4getattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); -NX_EXTERNAL NXstatus CALLING_STYLE NX4putdata(NXhandle handle, void* data); -NX_EXTERNAL NXstatus CALLING_STYLE NX4putslab(NXhandle handle, void* data, int start[], int size[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX4putattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); +extern NXstatus NX4putdata(NXhandle handle, void* data); +extern NXstatus NX4putslab(NXhandle handle, void* data, int start[], int size[]); +extern NXstatus NX4putattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getinfo(NXhandle handle, int* rank, int dimension[], int* datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); -NX_EXTERNAL NXstatus CALLING_STYLE NX4initgroupdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getattrinfo(NXhandle handle, int* no_items); -NX_EXTERNAL NXstatus CALLING_STYLE NX4initattrdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); +extern NXstatus NX4getinfo(NXhandle handle, int* rank, int dimension[], int* datatype); +extern NXstatus NX4getgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); +extern NXstatus NX4initgroupdir(NXhandle handle); +extern NXstatus NX4getnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); +extern NXstatus NX4getattrinfo(NXhandle handle, int* no_items); +extern NXstatus NX4initattrdir(NXhandle handle); +extern NXstatus NX4getnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getgroupID(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NX4getdataID(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NX4makelink(NXhandle handle, NXlink* pLink); +extern NXstatus NX4getgroupID(NXhandle handle, NXlink* pLink); +extern NXstatus NX4getdataID(NXhandle handle, NXlink* pLink); +extern NXstatus NX4makelink(NXhandle handle, NXlink* pLink); +extern NXstatus NX4printlink(NXhandle handle, NXlink* pLink); + void NX4assignFunctions(pNexusFunction fHandle); diff --git a/napi5.c b/napi5.c index aca1767f..a860f215 100644 --- a/napi5.c +++ b/napi5.c @@ -62,8 +62,10 @@ extern void *NXpData; forward declaration of NX5closegroup in order to get rid of a nasty warning */ -NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); - +NXstatus NX5closegroup (NXhandle fid); +/*-------------------------------------------------------------------*/ +static void ignoreError(void *data, char *text){ +} /*--------------------------------------------------------------------*/ static pNexusFile5 NXI5assert(NXhandle fid) @@ -112,7 +114,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); ---------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5open(CONSTCHAR *filename, NXaccess am, + NXstatus NX5open(CONSTCHAR *filename, NXaccess am, NXhandle* pHandle) { hid_t attr1,aid1, aid2; @@ -301,7 +303,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ------------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5close (NXhandle* fid) + NXstatus NX5close (NXhandle* fid) { pNexusFile5 pFile = NULL; int iRet; @@ -348,7 +350,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5makegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) + NXstatus NX5makegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) { pNexusFile5 pFile; hid_t iRet; @@ -404,7 +406,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); return strstr(member_name, attr_name) ? 1 : 0; } - NXstatus CALLING_STYLE NX5opengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) + NXstatus NX5opengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass) { pNexusFile5 pFile; @@ -436,6 +438,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); } /* check contents of group attribute */ attr1 = H5Aopen_name(pFile->iCurrentG, "NX_class"); + if (attr1 < 0) + { + NXIReportError (NXpData, "Error opening group attribute!"); + return NX_ERROR; + } atype=H5Tcopy(H5T_C_S1); H5Tset_size(atype,128); iRet = H5Aread(attr1, atype, data); @@ -478,6 +485,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); } /* check contains of group attribute */ attr1 = H5Aopen_name(pFile->iCurrentG, "NX_class"); + if (attr1 < 0) + { + NXIReportError (NXpData, "Error opening group attribute!"); + return NX_ERROR; + } atype=H5Tcopy(H5T_C_S1); H5Tset_size(atype,128); iRet = H5Aread(attr1, atype, data); @@ -496,6 +508,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); pFile->iStack5[pFile->iStackPtr].iVref=pFile->iCurrentG; strcpy(pFile->iStack5[pFile->iStackPtr].irefn,name); pFile->iAtt5.iCurrentIDX=0; + pFile->iCurrentD = 0; if(pFile->iCurrentLGG != NULL){ free(pFile->iCurrentLGG); } @@ -506,7 +519,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5closegroup (NXhandle fid) + NXstatus NX5closegroup (NXhandle fid) { pNexusFile5 pFile; int i,ii; @@ -563,7 +576,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5compmakedata (NXhandle fid, CONSTCHAR *name, + NXstatus NX5compmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[], int compress_type, int chunk_size[]) @@ -732,7 +745,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5makedata (NXhandle fid, CONSTCHAR *name, int datatype, + NXstatus NX5makedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[]) { pNexusFile5 pFile; @@ -756,7 +769,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5compress (NXhandle fid, int compress_type) + NXstatus NX5compress (NXhandle fid, int compress_type) { printf(" NXcompress ERROR: NeXus API based on HDF5 doesn't support\n"); printf(" NXcompress function! Using HDF5 library,\n"); @@ -767,7 +780,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* --------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5opendata (NXhandle fid, CONSTCHAR *name) + NXstatus NX5opendata (NXhandle fid, CONSTCHAR *name) { pNexusFile5 pFile; char pBuffer[256]; @@ -807,7 +820,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ----------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5closedata (NXhandle fid) + NXstatus NX5closedata (NXhandle fid) { pNexusFile5 pFile; int iRet; @@ -828,7 +841,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); - NXstatus CALLING_STYLE NX5putdata (NXhandle fid, void *data) + NXstatus NX5putdata (NXhandle fid, void *data) { pNexusFile5 pFile; hid_t iRet; @@ -850,7 +863,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5putattr (NXhandle fid, CONSTCHAR *name, void *data, + NXstatus NX5putattr (NXhandle fid, CONSTCHAR *name, void *data, int datalen, int iType) { pNexusFile5 pFile; @@ -967,7 +980,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5putslab (NXhandle fid, void *data, int iStart[], int iSize[]) + NXstatus NX5putslab (NXhandle fid, void *data, int iStart[], int iSize[]) { pNexusFile5 pFile; int iRet, i; @@ -1036,9 +1049,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5getdataID (NXhandle fid, NXlink* sRes) + NXstatus NX5getdataID (NXhandle fid, NXlink* sRes) { pNexusFile5 pFile; + ErrFunc oldErr; + int datalen, type = NX_CHAR; pFile = NXI5assert (fid); @@ -1048,15 +1063,31 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); if(pFile->iCurrentD <= 0){ return NX_ERROR; } + strcpy(sRes->iTag5,""); strcpy(sRes->iRef5,"/"); strcat(sRes->iRef5,pFile->name_ref); strcpy(sRes->iRefd,pFile->iCurrentLD); + oldErr = NXMGetError(); + NXMSetError(NXpData, ignoreError); + datalen = 1024; + memset(&sRes->targetPath,0,datalen*sizeof(char)); + NX5getattr(fid,"target",&sRes->targetPath,&datalen,&type); return NX_OK; } /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5makelink (NXhandle fid, NXlink* sLink) + NXstatus NX5printlink (NXhandle fid, NXlink* sLink) + { + pNexusFile5 pFile; + pFile = NXI5assert (fid); + printf("HDF5 link: iTag5 = \"%s\", iRef5 = \"%s\", iRefd = \"%s\"\n", sLink->iTag5, sLink->iRef5, sLink->iRefd); + return NX_OK; + } + + /* ------------------------------------------------------------------- */ + + NXstatus NX5makelink (NXhandle fid, NXlink* sLink) { pNexusFile5 pFile; /* int iRet; */ @@ -1076,7 +1107,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); strcpy(sLink->iTag5,pFile->name_ref); } else { /* group link */ - strcpy(buffer,pFile->iCurrentLGG); + strcpy(buffer,pFile->name_ref); strcat(buffer, sLink->iTag5); strcpy(sLink->iTag5,"/"); strcat(sLink->iTag5,buffer); @@ -1127,7 +1158,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*----------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5flush(NXhandle *pHandle) + NXstatus NX5flush(NXhandle *pHandle) { pNexusFile5 pFile = NULL; int iRet; @@ -1206,7 +1237,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass) + NXstatus NX5getgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass) { pNexusFile5 pFile; hid_t atype,attr_id; @@ -1243,7 +1274,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getnextentry (NXhandle fid,NXname name, NXname nxclass, int *datatype) + NXstatus NX5getnextentry (NXhandle fid,NXname name, NXname nxclass, int *datatype) { pNexusFile5 pFile; hid_t grp, attr1,type,atype; @@ -1253,6 +1284,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); char ph_name[1024]; info_type op_data; int iRet_iNX=-1; + char pBuffer[256]; pFile = NXI5assert (fid); op_data.iname = NULL; @@ -1295,7 +1327,17 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); } strcat(ph_name,name); grp=H5Gopen(pFile->iFID,ph_name); + if (grp < 0) { + sprintf (pBuffer, "ERROR: Group %s does not exist!", ph_name); + NXIReportError (NXpData, pBuffer); + return NX_ERROR; + } attr1 = H5Aopen_name(grp, "NX_class"); + if (attr1 < 0) { + H5Gclose(grp); + NXIReportError (NXpData, "Error opening group class"); + return NX_ERROR; + } type=H5T_C_S1; atype=H5Tcopy(type); H5Tset_size(atype,128); @@ -1385,7 +1427,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getdata (NXhandle fid, void *data) + NXstatus NX5getdata (NXhandle fid, void *data) { pNexusFile5 pFile; int iStart[H5S_MAX_RANK], status; @@ -1468,7 +1510,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getinfo (NXhandle fid, int *rank, int dimension[], int *iType) + NXstatus NX5getinfo (NXhandle fid, int *rank, int dimension[], int *iType) { pNexusFile5 pFile; int i, iRank, mType, iRet; @@ -1551,7 +1593,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getslab (NXhandle fid, void *data, int iStart[], int iSize[]) + NXstatus NX5getslab (NXhandle fid, void *data, int iStart[], int iSize[]) { pNexusFile5 pFile; hssize_t myStart[H5S_MAX_RANK]; @@ -1686,7 +1728,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); return 1; } - NXstatus CALLING_STYLE NX5getnextattr (NXhandle fileid, NXname pName, + NXstatus NX5getnextattr (NXhandle fileid, NXname pName, int *iLength, int *iType) { pNexusFile5 pFile; @@ -1717,7 +1759,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); NXIReportError (NXpData, "ERROR iterating through ROOT Attr. list!"); return NX_ERROR; } - } else { + } else if (pFile->iCurrentD > 0) { intern_idx=H5Aget_num_attrs(pFile->iCurrentD); if (intern_idx > idx) { iRet=H5Aiterate(pFile->iCurrentD,&idx,attr_info,&iname); @@ -1728,10 +1770,15 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); } intern_idx=-1; if (iRet < 0) { - NXIReportError (NXpData, "ERROR iterating through Attr. list!"); + NXIReportError (NXpData, "ERROR iterating through data Attr. list!"); return NX_ERROR; } } + else + { + pFile->iAtt5.iCurrentIDX = 0; + return NX_EOD; /* no group attributes */ + } if (iRet>0) { pFile->iAtt5.iCurrentIDX++; @@ -1836,7 +1883,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getattr (NXhandle fid, char *name, void *data, int* datalen, int* iType) + NXstatus NX5getattr (NXhandle fid, char *name, void *data, int* datalen, int* iType) { pNexusFile5 pFile; int iNew, iRet; @@ -1938,7 +1985,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getattrinfo (NXhandle fid, int *iN) + NXstatus NX5getattrinfo (NXhandle fid, int *iN) { pNexusFile5 pFile; char *iname = NULL; @@ -2000,7 +2047,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5getgroupID (NXhandle fileid, NXlink* sRes) + NXstatus NX5getgroupID (NXhandle fileid, NXlink* sRes) { pNexusFile5 pFile; int u; @@ -2017,6 +2064,11 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); strcpy(sRes->iTag5,"/"); strcat(sRes->iTag5, pFile->iCurrentLGG); strcpy(sRes->iRefd,""); + /* + TODO: once we have group attributes, this should be set to + the groups target attribute + */ + strcpy(sRes->targetPath, sRes->iTag5); return NX_OK; } /* not reached */ @@ -2025,14 +2077,12 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /* ------------------------------------------------------------------- */ - NXstatus CALLING_STYLE NX5sameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID) + NXstatus NX5sameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID) { pNexusFile5 pFile; pFile = NXI5assert (fileid); - if ((strcmp(pFirstID->iTag5,pSecondID->iTag5) == 0) & - (strcmp(pFirstID->iRef5,pSecondID->iRef5) == 0) & - (strcmp(pFirstID->iRefd,pSecondID->iRefd) == 0)) { + if ((strcmp(pFirstID->targetPath,pSecondID->targetPath) == 0)){ return NX_OK; } else { return NX_ERROR; @@ -2041,7 +2091,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5initattrdir (NXhandle fid) + NXstatus NX5initattrdir (NXhandle fid) { pNexusFile5 pFile; @@ -2052,7 +2102,7 @@ NXstatus CALLING_STYLE NX5closegroup (NXhandle fid); /*-------------------------------------------------------------------------*/ - NXstatus CALLING_STYLE NX5initgroupdir (NXhandle fid) + NXstatus NX5initgroupdir (NXhandle fid) { pNexusFile5 pFile; @@ -2091,5 +2141,5 @@ void NX5assignFunctions(pNexusFunction fHandle) fHandle->nxsameID=NX5sameID; fHandle->nxinitgroupdir=NX5initgroupdir; fHandle->nxinitattrdir=NX5initattrdir; - + fHandle->nxprintlink=NX5printlink; } diff --git a/napi5.h b/napi5.h index 5c4b6664..61d67315 100644 --- a/napi5.h +++ b/napi5.h @@ -4,40 +4,41 @@ /* HDF5 interface */ -NX_EXTERNAL NXstatus CALLING_STYLE NX5open(CONSTCHAR *filename, NXaccess access_method, NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NX5close(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NX5flush(NXhandle* pHandle); +extern NXstatus NX5open(CONSTCHAR *filename, NXaccess access_method, NXhandle* pHandle); +extern NXstatus NX5close(NXhandle* pHandle); +extern NXstatus NX5flush(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NX5makegroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); -NX_EXTERNAL NXstatus CALLING_STYLE NX5opengroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); -NX_EXTERNAL NXstatus CALLING_STYLE NX5closegroup(NXhandle handle); +extern NXstatus NX5makegroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); +extern NXstatus NX5opengroup (NXhandle handle, CONSTCHAR *name, CONSTCHAR* NXclass); +extern NXstatus NX5closegroup(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX5makedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX5compmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX5compress (NXhandle handle, int compr_type); -NX_EXTERNAL NXstatus CALLING_STYLE NX5opendata (NXhandle handle, CONSTCHAR* label); -NX_EXTERNAL NXstatus CALLING_STYLE NX5closedata(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX5putdata(NXhandle handle, void* data); +extern NXstatus NX5makedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[]); +extern NXstatus NX5compmakedata (NXhandle handle, CONSTCHAR* label, int datatype, int rank, int dim[], int comp_typ, int bufsize[]); +extern NXstatus NX5compress (NXhandle handle, int compr_type); +extern NXstatus NX5opendata (NXhandle handle, CONSTCHAR* label); +extern NXstatus NX5closedata(NXhandle handle); +extern NXstatus NX5putdata(NXhandle handle, void* data); -NX_EXTERNAL NXstatus CALLING_STYLE NX5putattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); -NX_EXTERNAL NXstatus CALLING_STYLE NX5putslab(NXhandle handle, void* data, int start[], int size[]); +extern NXstatus NX5putattr(NXhandle handle, CONSTCHAR* name, void* data, int iDataLen, int iType); +extern NXstatus NX5putslab(NXhandle handle, void* data, int start[], int size[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getdataID(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NX5makelink(NXhandle handle, NXlink* pLink); +extern NXstatus NX5getdataID(NXhandle handle, NXlink* pLink); +extern NXstatus NX5makelink(NXhandle handle, NXlink* pLink); +extern NXstatus NX5printlink(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getdata(NXhandle handle, void* data); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getinfo(NXhandle handle, int* rank, int dimension[], int* datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); +extern NXstatus NX5getdata(NXhandle handle, void* data); +extern NXstatus NX5getinfo(NXhandle handle, int* rank, int dimension[], int* datatype); +extern NXstatus NX5getnextentry(NXhandle handle, NXname name, NXname nxclass, int* datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getslab(NXhandle handle, void* data, int start[], int size[]); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getattrinfo(NXhandle handle, int* no_items); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getgroupID(NXhandle handle, NXlink* pLink); -NX_EXTERNAL NXstatus CALLING_STYLE NX5getgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); +extern NXstatus NX5getslab(NXhandle handle, void* data, int start[], int size[]); +extern NXstatus NX5getnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); +extern NXstatus NX5getattr(NXhandle handle, char* name, void* data, int* iDataLen, int* iType); +extern NXstatus NX5getattrinfo(NXhandle handle, int* no_items); +extern NXstatus NX5getgroupID(NXhandle handle, NXlink* pLink); +extern NXstatus NX5getgroupinfo(NXhandle handle, int* no_items, NXname name, NXname nxclass); -NX_EXTERNAL NXstatus CALLING_STYLE NX5initgroupdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NX5initattrdir(NXhandle handle); +extern NXstatus NX5initgroupdir(NXhandle handle); +extern NXstatus NX5initattrdir(NXhandle handle); void NX5assignFunctions(pNexusFunction fHandle); diff --git a/nxio.c b/nxio.c index d06230ca..ca5be754 100644 --- a/nxio.c +++ b/nxio.c @@ -514,7 +514,7 @@ int isDataNode(mxml_node_t *node){ /*--------------------------------------------------------------------*/ static int isTextData(mxml_node_t *node){ const char *attr = NULL; - int rank, type, iDim[NX_MAXRANK]; + int rank, type = 0, iDim[NX_MAXRANK]; if(!isDataNode(node)){ return 0; diff --git a/nxxml.c b/nxxml.c index 6da95720..73fa4713 100644 --- a/nxxml.c +++ b/nxxml.c @@ -92,7 +92,7 @@ static void errorCallbackForMxml(const char *txt){ NXIReportError(NXpData,(char *)txt); } /*-----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXopen(CONSTCHAR *filename, NXaccess am, +NXstatus NXXopen(CONSTCHAR *filename, NXaccess am, NXhandle* pHandle) { pXMLNexus xmlHandle = NULL; FILE *fp = NULL; @@ -171,7 +171,7 @@ NXstatus CALLING_STYLE NXXopen(CONSTCHAR *filename, NXaccess am, return NX_OK; } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXclose (NXhandle* fid){ +NXstatus NXXclose (NXhandle* fid){ pXMLNexus xmlHandle = NULL; FILE *fp = NULL; @@ -193,7 +193,7 @@ NXstatus CALLING_STYLE NXXclose (NXhandle* fid){ return NX_OK; } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXflush(NXhandle *fid){ +NXstatus NXXflush(NXhandle *fid){ pXMLNexus xmlHandle = NULL; FILE *fp = NULL; @@ -214,7 +214,7 @@ NXstatus CALLING_STYLE NXXflush(NXhandle *fid){ /*======================================================================= Group functions =========================================================================*/ -NXstatus CALLING_STYLE NXXmakegroup (NXhandle fid, CONSTCHAR *name, +NXstatus NXXmakegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass){ pXMLNexus xmlHandle = NULL; mxml_node_t *newGroup = NULL; @@ -261,7 +261,7 @@ static mxml_node_t *searchGroupLinks(pXMLNexus xmlHandle, CONSTCHAR *name, return NULL; } /*------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXopengroup (NXhandle fid, CONSTCHAR *name, +NXstatus NXXopengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass){ pXMLNexus xmlHandle = NULL; mxml_node_t *newGroup = NULL; @@ -295,7 +295,7 @@ NXstatus CALLING_STYLE NXXopengroup (NXhandle fid, CONSTCHAR *name, return NX_OK; } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXclosegroup (NXhandle fid){ +NXstatus NXXclosegroup (NXhandle fid){ pXMLNexus xmlHandle = NULL; mxml_node_t *newGroup = NULL; char error[1024]; @@ -317,7 +317,7 @@ NXstatus CALLING_STYLE NXXclosegroup (NXhandle fid){ /*========================================================================= dataset functions =========================================================================*/ -NXstatus CALLING_STYLE NXXcompmakedata (NXhandle fid, CONSTCHAR *name, +NXstatus NXXcompmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[], @@ -357,7 +357,7 @@ static char *buildTypeString(int datatype, int rank, int dimensions[]){ return typestring; } /*------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXmakedata (NXhandle fid, +NXstatus NXXmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[]){ pXMLNexus xmlHandle = NULL; @@ -453,7 +453,7 @@ static int strtrimcr(char *szStr, char *szSet) return(j - i); /* Return the difference between old and new length */ } /*-----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXopendata (NXhandle fid, CONSTCHAR *name){ +NXstatus NXXopendata (NXhandle fid, CONSTCHAR *name){ pXMLNexus xmlHandle = NULL; mxml_node_t *dataNode = NULL; char error[1024]; @@ -492,7 +492,7 @@ NXstatus CALLING_STYLE NXXopendata (NXhandle fid, CONSTCHAR *name){ return NX_OK; } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXclosedata (NXhandle fid){ +NXstatus NXXclosedata (NXhandle fid){ pXMLNexus xmlHandle = NULL; xmlHandle = (pXMLNexus)fid; @@ -518,7 +518,7 @@ static mxml_node_t *findData(mxml_node_t *node){ return NULL; } /*------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXputdata (NXhandle fid, void *data){ +NXstatus NXXputdata (NXhandle fid, void *data){ pXMLNexus xmlHandle = NULL; mxml_node_t *userData = NULL; mxml_node_t *current = NULL; @@ -550,7 +550,7 @@ NXstatus CALLING_STYLE NXXputdata (NXhandle fid, void *data){ return NX_OK; } /*------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetdata (NXhandle fid, void *data){ +NXstatus NXXgetdata (NXhandle fid, void *data){ pXMLNexus xmlHandle = NULL; mxml_node_t *userData = NULL; mxml_node_t *current = NULL; @@ -582,7 +582,7 @@ NXstatus CALLING_STYLE NXXgetdata (NXhandle fid, void *data){ return NX_OK; } /*------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetinfo (NXhandle fid, int *rank, +NXstatus NXXgetinfo (NXhandle fid, int *rank, int dimension[], int *iType){ pXMLNexus xmlHandle = NULL; mxml_node_t *userData = NULL; @@ -671,7 +671,7 @@ static void putSlabData(pNXDS dataset, pNXDS slabData, int dim, } } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXputslab (NXhandle fid, void *data, +NXstatus NXXputslab (NXhandle fid, void *data, int iStart[], int iSize[]){ pXMLNexus xmlHandle = NULL; @@ -735,7 +735,7 @@ static void getSlabData(pNXDS dataset, pNXDS slabData, int dim, } } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetslab (NXhandle fid, void *data, +NXstatus NXXgetslab (NXhandle fid, void *data, int iStart[], int iSize[]){ pXMLNexus xmlHandle = NULL; mxml_node_t *userData = NULL; @@ -772,7 +772,7 @@ NXstatus CALLING_STYLE NXXgetslab (NXhandle fid, void *data, return NX_OK; } /*----------------------------------------------------------------------*/ -static NXstatus CALLING_STYLE NXXsetnumberformat(NXhandle fid, +static NXstatus NXXsetnumberformat(NXhandle fid, int type, char *format){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; @@ -866,14 +866,14 @@ static char *formatAttributeData(void *data, int datalen, int iType){ break; } if(intData){ - snprintf(number,79,"%s%ld",type,iValue); + snprintf(number,79,"%s%d",type,iValue); } else { snprintf(number,79,"%s%f",type,dValue); } return number; } /*---------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXputattr (NXhandle fid, CONSTCHAR *name, void *data, +NXstatus NXXputattr (NXhandle fid, CONSTCHAR *name, void *data, int datalen, int iType){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; @@ -909,7 +909,7 @@ NXstatus CALLING_STYLE NXXputattr (NXhandle fid, CONSTCHAR *name, void *data, return NX_OK; } /*--------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetattr (NXhandle fid, char *name, +NXstatus NXXgetattr (NXhandle fid, char *name, void *data, int* datalen, int* iType){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; @@ -1006,7 +1006,7 @@ NXstatus CALLING_STYLE NXXgetattr (NXhandle fid, char *name, return NX_OK; } /*====================== search functions =================================*/ -NXstatus CALLING_STYLE NXXgetnextentry (NXhandle fid,NXname name, +NXstatus NXXgetnextentry (NXhandle fid,NXname name, NXname nxclass, int *datatype){ pXMLNexus xmlHandle = NULL; mxml_node_t *next = NULL, *userData; @@ -1020,11 +1020,8 @@ NXstatus CALLING_STYLE NXXgetnextentry (NXhandle fid,NXname name, if(isDataNode(xmlHandle->stack[xmlHandle->stackPointer].current)){ /* - be nice to users: close the open dataset even as this is - a usage error + be nice to user: silently fix this problem */ - NXIReportError(NXpData, - "WARNING: fixing bad NAPI usage: dataset still open"); NXXclosedata(fid); } @@ -1084,7 +1081,7 @@ NXstatus CALLING_STYLE NXXgetnextentry (NXhandle fid,NXname name, return NX_OK; } /*----------------------------------------------------------------------*/ -NX_EXTERNAL NXstatus CALLING_STYLE NXXinitgroupdir(NXhandle fid){ +extern NXstatus NXXinitgroupdir(NXhandle fid){ pXMLNexus xmlHandle = NULL; int stackPtr; @@ -1101,7 +1098,7 @@ NX_EXTERNAL NXstatus CALLING_STYLE NXXinitgroupdir(NXhandle fid){ return NX_OK; } /*-------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetnextattr (NXhandle fid, NXname pName, +NXstatus NXXgetnextattr (NXhandle fid, NXname pName, int *iLength, int *iType){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; @@ -1157,7 +1154,7 @@ NXstatus CALLING_STYLE NXXgetnextattr (NXhandle fid, NXname pName, return NX_OK; } /*-------------------------------------------------------------------------*/ -NX_EXTERNAL NXstatus CALLING_STYLE NXXinitattrdir(NXhandle fid){ +extern NXstatus NXXinitattrdir(NXhandle fid){ pXMLNexus xmlHandle = NULL; int stackPtr; @@ -1180,7 +1177,7 @@ NX_EXTERNAL NXstatus CALLING_STYLE NXXinitattrdir(NXhandle fid){ return NX_OK; } /*-------------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetgroupinfo (NXhandle fid, int *iN, +NXstatus NXXgetgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass){ pXMLNexus xmlHandle = NULL; mxml_node_t *child = NULL; @@ -1213,7 +1210,7 @@ NXstatus CALLING_STYLE NXXgetgroupinfo (NXhandle fid, int *iN, return NX_OK; } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetattrinfo (NXhandle fid, int *iN){ +NXstatus NXXgetattrinfo (NXhandle fid, int *iN){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; int stackPtr, currentAtt; @@ -1328,7 +1325,7 @@ static char *findLinkPath(mxml_node_t *node){ return result; } /*--------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetdataID (NXhandle fid, NXlink* sRes){ +NXstatus NXXgetdataID (NXhandle fid, NXlink* sRes){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; char *linkPath = NULL; @@ -1351,7 +1348,7 @@ NXstatus CALLING_STYLE NXXgetdataID (NXhandle fid, NXlink* sRes){ return NX_OK; } /*--------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXgetgroupID (NXhandle fid, NXlink* sRes){ +NXstatus NXXgetgroupID (NXhandle fid, NXlink* sRes){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL; char *linkPath = NULL; @@ -1378,8 +1375,20 @@ NXstatus CALLING_STYLE NXXgetgroupID (NXhandle fid, NXlink* sRes){ free(linkPath); return NX_OK; } + /*-----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXmakelink (NXhandle fid, NXlink* sLink){ + NXstatus NXXprintlink (NXhandle fid, NXlink* sLink) + { + pXMLNexus xmlHandle = NULL; + xmlHandle = (pXMLNexus)fid; + assert(xmlHandle); + + printf("XML link: target=\"%s\"\n", sLink->targetPath); + return NX_OK; + } + +/*-----------------------------------------------------------------------*/ +NXstatus NXXmakelink (NXhandle fid, NXlink* sLink){ pXMLNexus xmlHandle = NULL; mxml_node_t *current = NULL, *linkNode = NULL; mxml_node_t *linkedNode = NULL; @@ -1405,7 +1414,7 @@ NXstatus CALLING_STYLE NXXmakelink (NXhandle fid, NXlink* sLink){ return NX_OK; } /*----------------------------------------------------------------------*/ -NXstatus CALLING_STYLE NXXsameID (NXhandle fileid, NXlink* pFirstID, +NXstatus NXXsameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID){ if(strcmp(pFirstID->targetPath,pSecondID->targetPath) == 0) { return NX_OK; @@ -1448,5 +1457,6 @@ void NXXassignFunctions(pNexusFunction fHandle){ fHandle->nxinitgroupdir=NXXinitgroupdir; fHandle->nxinitattrdir=NXXinitattrdir; fHandle->nxsetnumberformat=NXXsetnumberformat; + fHandle->nxprintlink=NXXprintlink; } diff --git a/nxxml.h b/nxxml.h index f8ec57a9..fc27345d 100644 --- a/nxxml.h +++ b/nxxml.h @@ -22,55 +22,57 @@ #ifndef NEXUSXML #define NEXUSXML -NX_EXTERNAL NXstatus CALLING_STYLE NXXopen(CONSTCHAR *filename, +extern NXstatus NXXopen(CONSTCHAR *filename, NXaccess access_method, NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NXXclose(NXhandle* pHandle); -NX_EXTERNAL NXstatus CALLING_STYLE NXXflush(NXhandle* pHandle); +extern NXstatus NXXclose(NXhandle* pHandle); +extern NXstatus NXXflush(NXhandle* pHandle); -NXstatus CALLING_STYLE NXXmakegroup (NXhandle fid, CONSTCHAR *name, +NXstatus NXXmakegroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass); -NXstatus CALLING_STYLE NXXopengroup (NXhandle fid, CONSTCHAR *name, +NXstatus NXXopengroup (NXhandle fid, CONSTCHAR *name, CONSTCHAR *nxclass); -NXstatus CALLING_STYLE NXXclosegroup (NXhandle fid); +NXstatus NXXclosegroup (NXhandle fid); -NXstatus CALLING_STYLE NXXcompmakedata (NXhandle fid, CONSTCHAR *name, +NXstatus NXXcompmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[], int compress_type, int chunk_size[]); -NXstatus CALLING_STYLE NXXmakedata (NXhandle fid, +NXstatus NXXmakedata (NXhandle fid, CONSTCHAR *name, int datatype, int rank, int dimensions[]); -NXstatus CALLING_STYLE NXXopendata (NXhandle fid, CONSTCHAR *name); -NXstatus CALLING_STYLE NXXclosedata (NXhandle fid); -NXstatus CALLING_STYLE NXXputdata (NXhandle fid, void *data); -NXstatus CALLING_STYLE NXXgetdata (NXhandle fid, void *data); -NXstatus CALLING_STYLE NXXgetinfo (NXhandle fid, int *rank, +NXstatus NXXopendata (NXhandle fid, CONSTCHAR *name); +NXstatus NXXclosedata (NXhandle fid); +NXstatus NXXputdata (NXhandle fid, void *data); +NXstatus NXXgetdata (NXhandle fid, void *data); +NXstatus NXXgetinfo (NXhandle fid, int *rank, int dimension[], int *iType); -NXstatus CALLING_STYLE NXXputslab (NXhandle fid, void *data, +NXstatus NXXputslab (NXhandle fid, void *data, int iStart[], int iSize[]); -NXstatus CALLING_STYLE NXXgetslab (NXhandle fid, void *data, +NXstatus NXXgetslab (NXhandle fid, void *data, int iStart[], int iSize[]); -NXstatus CALLING_STYLE NXXputattr (NXhandle fid, CONSTCHAR *name, void *data, +NXstatus NXXputattr (NXhandle fid, CONSTCHAR *name, void *data, int datalen, int iType); -NXstatus CALLING_STYLE NXXgetattr (NXhandle fid, char *name, +NXstatus NXXgetattr (NXhandle fid, char *name, void *data, int* datalen, int* iType); -NXstatus CALLING_STYLE NXXgetnextentry (NXhandle fid,NXname name, +NXstatus NXXgetnextentry (NXhandle fid,NXname name, NXname nxclass, int *datatype); -NX_EXTERNAL NXstatus CALLING_STYLE NXXgetnextattr(NXhandle handle, +extern NXstatus NXXgetnextattr(NXhandle handle, NXname pName, int *iLength, int *iType); -NX_EXTERNAL NXstatus CALLING_STYLE NXXinitgroupdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXXinitattrdir(NXhandle handle); -NX_EXTERNAL NXstatus CALLING_STYLE NXXgetattrinfo (NXhandle fid, int *iN); -NX_EXTERNAL NXstatus CALLING_STYLE NXXgetgroupinfo (NXhandle fid, int *iN, +extern NXstatus NXXinitgroupdir(NXhandle handle); +extern NXstatus NXXinitattrdir(NXhandle handle); +extern NXstatus NXXgetattrinfo (NXhandle fid, int *iN); +extern NXstatus NXXgetgroupinfo (NXhandle fid, int *iN, NXname pName, NXname pClass); -NX_EXTERNAL NXstatus CALLING_STYLE NXXgetdataID (NXhandle fid, NXlink* sRes); -NX_EXTERNAL NXstatus CALLING_STYLE NXXgetgroupID (NXhandle fid, NXlink* sRes); -NX_EXTERNAL NXstatus CALLING_STYLE NXXmakelink (NXhandle fid, NXlink* sLink); -NX_EXTERNAL NXstatus CALLING_STYLE NXXsameID (NXhandle fileid, +extern NXstatus NXXgetdataID (NXhandle fid, NXlink* sRes); +extern NXstatus NXXgetgroupID (NXhandle fid, NXlink* sRes); +extern NXstatus NXXmakelink (NXhandle fid, NXlink* sLink); +extern NXstatus NXXprintlink (NXhandle fid, NXlink* sLink); +extern NXstatus NXXsameID (NXhandle fileid, NXlink* pFirstID, NXlink* pSecondID); + void NXXassignFunctions(pNexusFunction fHandle); #endif diff --git a/sicsstat.tcl b/sicsstat.tcl index 552344a7..c86b1f28 100644 --- a/sicsstat.tcl +++ b/sicsstat.tcl @@ -1,7 +1,5 @@ # Counter counter -counter SetPreset 500.000000 +counter SetPreset 10.000000 counter SetMode Timer hm CountMode timer -hm preset 600.000000 -hm genbin 1000.000000 1000.000000 1000 -hm init +hm preset 10.000000