void applyclientparamcontrols3(NCDAPCOMMON* dapcomm) { /* clear the flags */ CLRFLAG(dapcomm->controls,NCF_CACHE); CLRFLAG(dapcomm->controls,NCF_SHOWFETCH); CLRFLAG(dapcomm->controls,NCF_NC3); CLRFLAG(dapcomm->controls,NCF_NCDAP); CLRFLAG(dapcomm->controls,NCF_PREFETCH); CLRFLAG(dapcomm->controls,NCF_PREFETCH_EAGER); /* Turn on any default on flags */ SETFLAG(dapcomm->controls,DFALT_ON_FLAGS); SETFLAG(dapcomm->controls,(NCF_NC3|NCF_NCDAP)); /* enable/disable caching */ if(paramcheck34(dapcomm,"cache",NULL)) SETFLAG(dapcomm->controls,NCF_CACHE); else if(paramcheck34(dapcomm,"nocache",NULL)) CLRFLAG(dapcomm->controls,NCF_CACHE); /* enable/disable cache prefetch and lazy vs eager*/ if(paramcheck34(dapcomm,"prefetch","eager")) { SETFLAG(dapcomm->controls,NCF_PREFETCH); SETFLAG(dapcomm->controls,NCF_PREFETCH_EAGER); } else if(paramcheck34(dapcomm,"prefetch","lazy") || paramcheck34(dapcomm,"prefetch",NULL)) { SETFLAG(dapcomm->controls,NCF_PREFETCH); CLRFLAG(dapcomm->controls,NCF_PREFETCH_EAGER); } else if(paramcheck34(dapcomm,"noprefetch",NULL)) CLRFLAG(dapcomm->controls,NCF_PREFETCH); if(FLAGSET(dapcomm->controls,NCF_UNCONSTRAINABLE)) SETFLAG(dapcomm->controls,NCF_CACHE); if(paramcheck34(dapcomm,"show","fetch")) SETFLAG(dapcomm->controls,NCF_SHOWFETCH); nclog(NCLOGNOTE,"Caching=%d",FLAGSET(dapcomm->controls,NCF_CACHE)); }
static NCerror buildglobalattrs3(NCDAPCOMMON* dapcomm, CDFnode* root) { int i; NCerror ncstat = NC_NOERR; const char* txt; char *nltxt, *p; NCbytes* buf = NULL; NClist* cdfnodes; NC* drno = dapcomm->controller; if(root->attributes != NULL) { for(i=0;i<nclistlength(root->attributes);i++) { NCattribute* att = (NCattribute*)nclistget(root->attributes,i); ncstat = buildattribute3a(dapcomm,att,NC_NAT,NC_GLOBAL); if(ncstat != NC_NOERR) goto done; } } /* Add global attribute identifying the sequence dimensions */ if(paramcheck34(dapcomm,"show","seqdims")) { buf = ncbytesnew(); cdfnodes = dapcomm->cdf.ddsroot->tree->nodes; for(i=0;i<nclistlength(cdfnodes);i++) { CDFnode* dim = (CDFnode*)nclistget(cdfnodes,i); if(dim->nctype != NC_Dimension) continue; if(DIMFLAG(dim,CDFDIMSEQ)) { char* cname = cdflegalname3(dim->ocname); if(ncbyteslength(buf) > 0) ncbytescat(buf,", "); ncbytescat(buf,cname); nullfree(cname); } } if(ncbyteslength(buf) > 0) { ncstat = nc_put_att_text(drno->substrate,NC_GLOBAL,"_sequence_dimensions", ncbyteslength(buf),ncbytescontents(buf)); } } /* Define some additional system global attributes depending on show= clientparams*/ /* Ignore failures*/ if(paramcheck34(dapcomm,"show","translate")) { /* Add a global attribute to show the translation */ ncstat = nc_put_att_text(drno->substrate,NC_GLOBAL,"_translate", strlen("netcdf-3"),"netcdf-3"); } if(paramcheck34(dapcomm,"show","url")) { if(dapcomm->oc.rawurltext != NULL) ncstat = nc_put_att_text(drno->substrate,NC_GLOBAL,"_url", strlen(dapcomm->oc.rawurltext),dapcomm->oc.rawurltext); } if(paramcheck34(dapcomm,"show","dds")) { txt = NULL; if(dapcomm->cdf.ddsroot != NULL) txt = oc_inq_text(dapcomm->oc.conn,dapcomm->cdf.ddsroot->ocnode); if(txt != NULL) { /* replace newlines with spaces*/ nltxt = nulldup(txt); for(p=nltxt;*p;p++) {if(*p == '\n' || *p == '\r' || *p == '\t') {*p = ' ';}}; ncstat = nc_put_att_text(drno->substrate,NC_GLOBAL,"_dds",strlen(nltxt),nltxt); nullfree(nltxt); } } if(paramcheck34(dapcomm,"show","das")) { txt = NULL; if(dapcomm->oc.ocdasroot != OCNULL) txt = oc_inq_text(dapcomm->oc.conn,dapcomm->oc.ocdasroot); if(txt != NULL) { nltxt = nulldup(txt); for(p=nltxt;*p;p++) {if(*p == '\n' || *p == '\r' || *p == '\t') {*p = ' ';}}; ncstat = nc_put_att_text(drno->substrate,NC_GLOBAL,"_das",strlen(nltxt),nltxt); nullfree(nltxt); } } done: ncbytesfree(buf); return THROW(ncstat); }
/* and any necessary pseudo-dimensions for string types*/ static NCerror buildvars(NCDAPCOMMON* dapcomm) { int i,j; NCerror ncstat = NC_NOERR; int varid; NClist* varnodes = dapcomm->cdf.varnodes; NC* drno = dapcomm->controller; char* definename; ASSERT((varnodes != NULL)); for(i=0;i<nclistlength(varnodes);i++) { CDFnode* var = (CDFnode*)nclistget(varnodes,i); int dimids[NC_MAX_VAR_DIMS]; unsigned int ncrank; NClist* vardims = NULL; if(!var->visible) continue; if(var->array.basevar != NULL) continue; #ifdef DEBUG1 fprintf(stderr,"buildvars.candidate=|%s|\n",var->ncfullname); #endif vardims = var->array.dimsetall; ncrank = nclistlength(vardims); if(ncrank > 0) { for(j=0;j<ncrank;j++) { CDFnode* dim = (CDFnode*)nclistget(vardims,j); dimids[j] = dim->ncid; } } definename = getdefinename(var); #ifdef DEBUG1 fprintf(stderr,"define: var: %s/%s", definename,var->ocname); if(ncrank > 0) { int k; for(k=0;k<ncrank;k++) { CDFnode* dim = (CDFnode*)nclistget(vardims,k); fprintf(stderr,"[%ld]",dim->dim.declsize); } } fprintf(stderr,"\n"); #endif ncstat = nc_def_var(drno->substrate, definename, var->externaltype, ncrank, (ncrank==0?NULL:dimids), &varid); nullfree(definename); if(ncstat != NC_NOERR) { THROWCHK(ncstat); goto done; } var->ncid = varid; if(var->attributes != NULL) { for(j=0;j<nclistlength(var->attributes);j++) { NCattribute* att = (NCattribute*)nclistget(var->attributes,j); ncstat = buildattribute3a(dapcomm,att,var->etype,varid); if(ncstat != NC_NOERR) goto done; } } /* Tag the variable with its DAP path */ if(paramcheck34(dapcomm,"show","projection")) showprojection3(dapcomm,var); } done: return THROW(ncstat); }