From 67a09be756f65c8f46a666d40618d64cb758b31b Mon Sep 17 00:00:00 2001 From: Elena.Budnik Date: Tue, 1 Oct 2019 16:03:42 +0200 Subject: [PATCH] new info for remote --- php/src/ncinfo_remote.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 17 deletions(-) diff --git a/php/src/ncinfo_remote.c b/php/src/ncinfo_remote.c index 921d76c..9146fbd 100644 --- a/php/src/ncinfo_remote.c +++ b/php/src/ncinfo_remote.c @@ -6,6 +6,8 @@ * 1 - labels * 2 - units * 3 - fillvalue + * 4 - is virtual + * 5 - is spectra */ #include @@ -17,7 +19,8 @@ void check(int stat) { if (stat != NC_NOERR) { - printf("NetCDF error: %s\n", nc_strerror(stat)); + fprintf(stdout,"Unknown"); + // printf("NetCDF error: %s\n", nc_strerror(stat)); exit(1); } } @@ -35,9 +38,13 @@ main(int argc, char **argv) int infoId; float number_attr; - const char *info[2]; + const char *info[4]; info[0] = "UNITS"; info[1] = "_FillValue"; + info[2] = "FILLVAL"; + info[3] = "VIRTUAL"; + info[4] = "DISPLAY_TYPE"; + info[5] = "DEPEND_1"; if (argc <= 3) { printf("Incorrect number of arguments\n"); @@ -54,6 +61,7 @@ main(int argc, char **argv) stat = nc_inq_vardimid(ncID, varID, dimids); check(stat); size_t len = 0; + // size if (ndims > 1) for (i = 1; i < ndims; i++) { stat = nc_inq_dimlen(ncID, dimids[i], &len); check(stat); @@ -68,19 +76,36 @@ main(int argc, char **argv) fprintf(stdout,"%d ", len); } - if (infoId == 1) + if (infoId == 1) // components { size_t attlen = 0; - stat = nc_inq_attlen(ncID, varID, "LABL_PTR_1", &attlen); check(stat); - + stat = nc_inq_attlen(ncID, varID, "LABL_PTR_1", &attlen); + + if (stat != NC_NOERR) { + fprintf(stdout, "-1"); + exit(0); + } unsigned char *string_attr = (unsigned char *)malloc(attlen * sizeof(char*)); - stat = nc_get_att(ncID, varID, "LABL_PTR_1", string_attr); check(stat); - - stat = nc_inq_varid(ncID, string_attr, &labelID); check(stat); - stat = nc_inq_varndims(ncID, labelID, &ndims); check(stat); - - stat = nc_inq_vardimid(ncID, labelID, dimids); check(stat); - + stat = nc_get_att(ncID, varID, "LABL_PTR_1", string_attr); + if (stat != NC_NOERR) { + fprintf(stdout, "-1"); + exit(0); + } + stat = nc_inq_varid(ncID, string_attr, &labelID); + if (stat != NC_NOERR) { + fprintf(stdout, "-1"); + exit(0); + } + stat = nc_inq_varndims(ncID, labelID, &ndims); + if (stat != NC_NOERR) { + fprintf(stdout, "-1"); + exit(0); + } + stat = nc_inq_vardimid(ncID, labelID, dimids); + if (stat != NC_NOERR) { + fprintf(stdout, "-1"); + exit(0); + } for (i = 0; i < ndims; i++) { stat = nc_inq_dimlen(ncID, dimids[i], &len); check(stat); if (i == 0) size = len; @@ -100,7 +125,7 @@ main(int argc, char **argv) free(string_var); } - if (infoId == 2) + if (infoId == 2) // Units { size_t attlen = 0; stat = nc_inq_attlen(ncID, varID, info[infoId-2], &attlen); check(stat); @@ -111,13 +136,48 @@ main(int argc, char **argv) free(string_attr); } - if (infoId == 3) + if (infoId == 3) // Fill Value { - stat = nc_get_att(ncID, varID, info[infoId-2], &number_attr); check(stat); - fprintf(stdout, "%e", number_attr); - + stat = nc_get_att(ncID, varID, info[infoId-2], &number_attr); + + if (stat != NC_NOERR) { + stat = nc_get_att(ncID, varID, info[infoId-1], &number_attr); + check(stat); + } + fprintf(stdout, "%e", number_attr); } + if (infoId == 4) // is virtual + { + size_t attlen = 0; + stat = nc_inq_attlen(ncID, varID, info[infoId-1], &attlen); + if (stat != NC_NOERR) { + fprintf(stdout, "1"); + } + else { + fprintf(stdout, "0"); + } + } + + if (infoId == 5) // is spectrogram + { + size_t attlen = 0; + stat = nc_inq_attlen(ncID, varID, info[infoId-1], &attlen); + + if (stat != NC_NOERR) { + fprintf(stdout, "0"); + } + else { + unsigned char *string_attr = (unsigned char *)malloc(attlen * sizeof(char*)); + stat = nc_get_att(ncID, varID, info[infoId-1], string_attr); + if (strcasecmp(string_attr,"spectrogram") != 0) + fprintf(stdout, "0"); + else + fprintf(stdout, "1"); + + free(string_attr); + } + } stat = nc_close(ncID); exit(0); } -- libgit2 0.21.2