#include "mfhdf.h" #define DIM1 4 #define DIM2 6 #define DIM3 8 main() { int32 sd_id, sds_id, sds_id1, sds_id2, sds_id3, sds_idx, sds_idx1, istat; int32 dims[1], start[1], rank=1; int32 edges1[1], edges2[1], edges3[1]; int16 array1_data[DIM1], outdata[DIM1], outdata3[DIM3]; int16 array2_data[DIM2], array3_data[DIM3], outdata2[DIM2]; intn i, j, k; int32 n_attrs=0, n_datasets=0; /* Create and open the file and initiate the SD interface. */ sd_id = SDstart("hdffile_3unlim.hdf", DFACC_CREATE); if (sd_id == FAIL) { fprintf(stderr,"SDstart failed.\n"); HEprint(stdout,0); exit (-1); } else fprintf(stderr,"\n... hdffile_3unlim.hdf created\n"); /* Define the rank and dimensions of the data set to be created. */ rank = 1; dims[0] = SD_UNLIMITED; /* Create the array data set. */ sds_id1 = SDcreate(sd_id, "data1", DFNT_INT16, rank, dims); istat = SDendaccess(sds_id1); sds_id2 = SDcreate(sd_id, "data2", DFNT_INT16, rank, dims); istat = SDendaccess(sds_id2); sds_id3 = SDcreate(sd_id, "data3", DFNT_INT16, rank, dims); istat = SDendaccess(sds_id3); /* Fill the array with values. */ for (jj = 0; jj < DIM1; jj++) { array_data[jj] = j + 100; } sds_idx = SDnametoindex (sd_id, "data1"); sds_id1 = SDselect (sd_id, sds_idx); /* Define the location, pattern, and size of the data set */ for (i = 0; i < rank; i++) { start[i] = 0; } edges1[0] = DIM1; edges2[0] = DIM2; edges3[0] = DIM3; /* write the first time to data1 */ istat = SDwritedata(sds_id1, start, NULL, edges1, (VOIDP)array_data); if (istat == -1) fprintf(stderr," SDwritedata data1 first time failed \n"); HDmemset(&outdata, 0, sizeof(outdata)); istat = SDreaddata(sds_id1, start, NULL, edges1, (VOIDP) outdata); if (istat == -1) fprintf(stderr," SDreaddata failed \n"); fprintf(stderr, "\nData read from data1 after first write: \n"); for (j = 0; j < DIM1; j++) { fprintf(stderr, " %d ", outdata[j]); } fprintf(stderr, "\n\n"); istat = SDendaccess(sds_id1); if (istat == -1) fprintf(stderr," SDendaccess failed \n"); fprintf(stderr, "NO SDend\n"); #if 0 fprintf(stderr, "With SDend\n"); istat = SDend(sd_id); sd_id = SDstart("hdffile_3unlim.hdf", DFACC_RDWR); if (sd_id == FAIL) { fprintf(stderr,"SDstart failed.\n"); HEprint(stdout,0); exit (-1); } else fprintf(stderr,"\n... hdffile_3unlim.hdf opened\n"); #endif sds_idx = SDnametoindex (sd_id, "data2"); sds_id2 = SDselect (sd_id, sds_idx); sds_idx = SDnametoindex (sd_id, "data3"); sds_id3 = SDselect (sd_id, sds_idx); /* Fill the array with values. */ for (jj = 0; jj < DIM1; jj++) { array2_data[ii][jj] = array_data[jj] + 100; } /* write the first time to data2 */ istat = SDwritedata(sds_id2, start, NULL, edges2, (VOIDP)array2_data); if (istat == -1) fprintf(stderr," SDwritedata data 2 first time failed \n"); HDmemset(&outdata, 0, sizeof(outdata)); istat = SDreaddata(sds_id2, start, NULL, edges2, (VOIDP) outdata2); fprintf(stderr, "\nData read from data2 after first write: \n"); for (j = 0; j < DIM2; j++) { fprintf(stderr, " %d ", outdata2[j]); } fprintf(stderr, "\n\n"); istat = SDendaccess(sds_id2); if (istat == -1) fprintf(stderr," SDendaccess failed \n"); /* write the first time to data3 */ istat = SDwritedata(sds_id3, start, NULL, edges3, (VOIDP)array3_data); if (istat == -1) fprintf(stderr," SDwritedata data3 first time failed \n"); HDmemset(&outdata, 0, sizeof(outdata)); istat = SDreaddata(sds_id3, start, NULL, edges3, (VOIDP) outdata3); fprintf(stderr, "\nData read from data3 after first write: \n"); for (j = 0; j < DIM3; j++) { fprintf(stderr, " %d ", outdata3[j]); } fprintf(stderr, "\n\n"); istat = SDendaccess(sds_id3); if (istat == -1) fprintf(stderr," SDendaccess failed \n"); istat = SDend(sd_id); /* * Open the file and read data back... */ fprintf(stderr,"\nOpen file to read data back...\n"); sd_id = SDstart("hdffile_3unlim.hdf", DFACC_RDWR); if (sd_id == FAIL) { fprintf(stderr,"SDstart failed.\n"); HEprint(stdout,0); exit (-1); } else fprintf(stderr,"\n... hdffile_3unlim.hdf opened\n"); status = SDfileinfo(fid, &n_datasets, &n_attrs); fprintf(stderr,"SDfileinfo -> %i\n", status); for (ii = 0; ii < n_datasets; ii++) { char name[10]; int32 rank, dimsizes[1], dtype, nattrs; int32 rank1, dimsizes1[1], dtype1, nattrs1; sds_id = SDselect (sd_id, ii); fprintf(stderr,"SDselect -> %i\n", sds_id); istat = SDgetinfo(sds_id, name, &rank, dimsizes, &dtype, &nattrs); printf("sds 1: name = %s, rank = %d, dimsizes[0]=%d\n", name, rank, dimsizes[0]); start[0] = 0; edges[0] = dimsizes[0]; istat = SDreaddata(sds_id, start, NULL, edges, (VOIDP) outdata); istat = SDendaccess(sds_id); printf("\nData read from data1: \n"); for (jj = 0; jj < dimsizes[0]; jj++) { { printf(" %d ", outdata1[jj]); if (outdata[jj] != (array_data[jj]+(100*ii))) printf("ERROR: read data doesn't match input, in: %d, out: %d\n", array_data[jj]+(100*ii), outdata[jj]); } } printf("\n\n"); } istat = SDend(sd_id); }