コード例 #1
0
ファイル: nxinterhelper.c プロジェクト: nexusformat/code
/*-----------------------------------------------------------------------*/
void *nx_isexternalgroup(void *handle, char *name, char *nxclass){
  int status, length = 1024;
  NXhandle hfil;
  char url[1024];

  hfil = (NXhandle)handle;
  status = NXisexternalgroup(hfil,name, nxclass,url,length);
  if(status == NX_OK){
    createTextNXDataset(url);
  } else {
    return NULL;
  }
  return NULL;/*NOTREACHED*/
}
コード例 #2
0
ファイル: NXbrowse.c プロジェクト: ebknudsen/code
/* Outputs the contents of a NeXus group */
int NXBdir(NXhandle fileId)
{
    int status, dataType, dataRank, dataDimensions[NX_MAXRANK], length;
    NXname name, nxclass, nxurl;

    if (NXinitgroupdir(fileId) != NX_OK)
        return NX_ERROR;
    do {
        status = NXgetnextentry(fileId, name, nxclass, &dataType);
        if (status == NX_ERROR)
            break;
        if (status == NX_OK) {
            if (strncmp(nxclass, "CDF", 3) == 0) {
                ;
            } else if (strcmp(nxclass, "SDS") == 0) {
                printf("  NX Data  : %s", name);
                if (NXopendata(fileId, name) != NX_OK)
                    return NX_ERROR;
                if (NXgetinfo (fileId, &dataRank, dataDimensions, &dataType) != NX_OK)
                    return NX_ERROR;
                if (NXclosedata(fileId) != NX_OK)
                    return NX_ERROR;
                PrintDimensions(dataRank, dataDimensions);
                printf(" ");
                PrintType(dataType);
                printf("\n");
            } else {
                length = sizeof(nxurl);
                if (NXisexternalgroup(fileId, name, nxclass, nxurl, length) == NX_OK) {
                    printf("  NX external Group: %s (%s), linked to: %s \n",
                           name, nxclass, nxurl);
                } else {
                    printf("  NX Group : %s (%s)\n", name, nxclass);
                    if ((status = NXopengroup(fileId, name, nxclass)) != NX_OK) {
                        return status;
                    }
                    PrintGroupAttributes(fileId, name);
                    if ((status = NXclosegroup(fileId)) != NX_OK) {
                        return status;
                    }
                }
            }
        }
    } while (status == NX_OK);
    return status;
}
コード例 #3
0
ファイル: napi_test.c プロジェクト: guyjennings/qceplib
/*---------------------------------------------------------------------*/
static int testExternal(char *progName){
  char nxfile[255], ext[5], testFile[80], time[132], filename[256];
  int create;
  NXhandle hfil;
  int dummylen = 1;
  float dummyfloat = 1;
  float temperature;

  if(strstr(progName,"hdf4") != NULL){
    strcpy(ext,"hdf");
    create = NXACC_CREATE;
  } else if(strstr(progName,"hdf5") != NULL){
    strcpy(ext,"h5");
    create = NXACC_CREATE5;
  } else if(strstr(progName,"xml") != NULL){
    strcpy(ext,"xml");
    create = NXACC_CREATEXML;
  } else {
    printf("Failed to recognise napi_test program in testExternal\n");
    return 1;
  }

  sprintf(testFile,"nxext.%s", ext);

  /*
    create the test file
  */
  if(NXopen(testFile,create,&hfil) != NX_OK){
    return 1;
  }
  /*if(NXmakegroup(hfil,"entry1","NXentry") != NX_OK){
    return 1;
  }*/
  sprintf(nxfile,"nxfile://data/dmc01.%s#/entry1",ext);
  if(NXlinkexternal(hfil,"entry1","NXentry",nxfile) != NX_OK){
    return 1;
  }
  /*if(NXmakegroup(hfil,"entry2","NXentry") != NX_OK){
    return 1;
  }*/
  sprintf(nxfile,"nxfile://data/dmc02.%s#/entry1",ext);
  if(NXlinkexternal(hfil,"entry2","NXentry",nxfile) != NX_OK){
    return 1;
  }
  if(NXmakegroup(hfil,"entry3","NXentry") != NX_OK){
    return 1;
  }
  if(NXopengroup(hfil,"entry3","NXentry") != NX_OK){
    return 1;
  }
  /* force create old style external link */
  if (NXmakedata (hfil, "extlinkdata", NX_FLOAT32, 1, &dummylen) != NX_OK) return 1;
  if (NXopendata (hfil, "extlinkdata") != NX_OK) return 1;
  if (NXputdata (hfil, &dummyfloat) != NX_OK) return 1;
  sprintf(nxfile,"nxfile://data/dmc01.%s#/entry1/sample/temperature_mean",ext);
  if(NXputattr(hfil,"napimount",nxfile,strlen(nxfile), NX_CHAR) != NX_OK) return 1;
  /* this would segfault because we are tricking the napi stack
  if(NXclosedata(&hfil) != NX_OK){
    return 1;
  }
  */
  if(NXopenpath(hfil,"/entry3") != NX_OK){
    return 1;
  }
  /* create new style external link on hdf5 , equivalent to the above on other backends */
  if (NXlinkexternaldataset(hfil, "extlinknative", nxfile) != NX_OK) return 1;

  if(NXclose(&hfil) != NX_OK){
    return 1;
  }

  /*
    actually test linking
  */
  if(NXopen(testFile,NXACC_RDWR,&hfil) != NX_OK){
    return 1;
  }
  if(NXopenpath(hfil,"/entry1/start_time") != NX_OK){
    return 1;
  }
  memset(time,0,132);
  if(NXgetdata(hfil,time) != NX_OK){
    return 1;
  }
  printf("First file time: %s\n", time);

  if(NXinquirefile(hfil,filename,256) != NX_OK){
    return 1;
  }
  printf("NXinquirefile found: %s\n", relativePathOf(filename));

  if(NXopenpath(hfil,"/entry2/sample/sample_name") != NX_OK){
    return 1;
  }
  memset(time,0,132);
  if(NXgetdata(hfil,time) != NX_OK){
    return 1;
  }
  printf("Second file sample: %s\n", time);
  if(NXinquirefile(hfil,filename,256) != NX_OK){
    return 1;
  }
  printf("NXinquirefile found: %s\n", relativePathOf(filename));

  if(NXopenpath(hfil,"/entry2/start_time") != NX_OK){
    return 1;
  }
  memset(time,0,132);
  if(NXgetdata(hfil,time) != NX_OK){
    return 1;
  }
  printf("Second file time: %s\n", time);
  NXopenpath(hfil,"/");
  if(NXisexternalgroup(hfil,"entry1","NXentry",filename,255) != NX_OK){
    return 1;
  } else {
    printf("entry1 external URL = %s\n", filename);
  }

  printf("testing link to external data set\n");
  if(NXopenpath(hfil,"/entry3") != NX_OK){
    return 1;
  }
  if(NXisexternaldataset(hfil,"extlinkdata",filename,255) != NX_OK){
    printf("extlinkdata should be external link\n");
    return 1;
  } else {
    printf("extlinkdata external URL = %s\n", filename);
  }
  if (NXopendata (hfil, "extlinkdata") != NX_OK) return 1;
  memset(&temperature,0,4);
  if(NXgetdata(hfil,&temperature) != NX_OK){
    return 1;
  }
  printf("value retrieved: %4.2f\n", temperature);

  if(NXopenpath(hfil,"/entry3") != NX_OK){
    return 1;
  }
  if(NXisexternaldataset(hfil,"extlinknative",filename,255) != NX_OK){
    printf("extlinknative should be external link\n");
    return 1;
  } else {
    printf("extlinknative external URL = %s\n", filename);
  }
  if (NXopendata (hfil, "extlinknative") != NX_OK) return 1;
  memset(&temperature,0,4);
  if(NXgetdata(hfil,&temperature) != NX_OK){
    return 1;
  }
  printf("value retrieved: %4.2f\n", temperature);

  NXclose(&hfil);
  printf("External File Linking tested OK\n");
  return 0;
}