/*******************************************************************/ /* */ /* sd_create.c */ /* This program creates an HDF file, file1.hdf, which */ /* contains an SDS of size 10 x 5. */ /* */ /*******************************************************************/ #include "mfhdf.h" #define DIM0 4 #define DIM1 3 #define DIM2 2 #define XX 5 #define YY 5 main( ) { int32 sd_id, sds_id, sds_id1, sds_id2, sds_id3, sds_idx, sds_idx1, istat; int32 dims[3], start[3], rank=3; int32 edges1[3], edges2[1]; int16 array1_data[DIM0][DIM1][DIM2], outdata[DIM0][DIM1][DIM2]; char name1[10]; int32 dtype, nattrs, dimsizes[3]; intn ii, jj, kk; /* Create and open the file and initiate the SD interface. */ sd_id = SDstart("hdffile_unlim.hdf", DFACC_CREATE); if (sd_id == FAIL) { fprintf(stderr,"SDstart failed.\n"); HEprint(stdout,0); exit (-1); } else fprintf(stderr,"\n... hdffile_unlim.hdf created\n"); /* Define the rank and dimensions of the data set to be created. */ rank = 3; dims[0] = SD_UNLIMITED; dims[1] = DIM1; dims[2] = DIM2; /* Create the array data set. */ sds_id = SDcreate(sd_id, "data1", DFNT_INT16, rank, dims); #if 0 istat = SDendaccess(sds_id); sds_idx = SDnametoindex (sd_id, "data1"); sds_id = SDselect (sd_id, sds_idx); #endif /* Fill the array with values. */ for (ii = 0; ii < DIM0; ii++) for (jj = 0; jj < DIM1; jj++) for (kk = 0; kk < DIM2; kk++) { array1_data[ii][jj][kk] = kk + jj + 100; } /* Define the location, pattern, and size of the data set */ for (ii = 0; ii < rank; ii++) { start[ii] = 0; } edges1[0] = DIM0; edges1[1] = DIM1; edges1[2] = DIM2; /* write the first time to data1 */ istat = SDwritedata(sds_id, start, NULL, edges1, (VOIDP)array1_data); if (istat == -1) fprintf(stderr," SDwritedata data1 first time failed \n"); HDmemset(&outdata, 0, sizeof(outdata)); istat = SDreaddata(sds_id, start, NULL, edges1, (VOIDP) outdata); if (istat == -1) fprintf(stderr," SDreaddata failed \n"); fprintf(stderr, "\nData read from data1 after first write: \n"); for (ii = 0; ii < DIM0; ii++) { for (jj = 0; jj < DIM1; jj++) { for (kk = 0; kk < DIM2; kk++) { fprintf(stderr, " %d ", outdata[ii][jj][kk]); } fprintf(stderr, "\n"); } fprintf(stderr, "\n"); } fprintf(stderr, "\n\n"); istat = SDendaccess(sds_id); sds_idx = SDnametoindex (sd_id, "data1"); sds_id = SDselect (sd_id, sds_idx); istat = SDgetinfo(sds_id, name1, &rank, dimsizes, &dtype, &nattrs); fprintf(stderr, "dataset %s has %d dimensions: %d,%d,%d\n", name1, rank, dimsizes[0], dimsizes[1], dimsizes[2]); istat = SDendaccess(sds_id); if (istat == -1) fprintf(stderr," SDendaccess failed \n"); istat = SDend(sd_id); }