int /* [rcd] Successful conversion returns NCO_NOERR */ nco_cln_prs_tm /* UDUnits1 Extract time stamp from a parsed udunits string */ (const char *unt_sng, /* I [ptr] units attribute string */ tm_cln_sct *tm_in) /* O [sct] Time structure to be populated */ { const char fnc_nm[]="nco_cln_prs_tm()"; /* [sng] Function name */ int rcd; utUnit udu_sct_in; /* UDUnits structure, input units */ #ifdef UDUNITS_PATH /* UDUNITS_PATH macro expands to where autoconf found database file */ rcd=utInit(UDUNITS_PATH); #else /* !UDUNITS_PATH */ /* When empty, utInit() uses environment variable UDUNITS_PATH, if any Otherwise it uses default initial location hardcoded when library was built */ rcd=utInit(""); #endif /* !UDUNITS_PATH */ if(rcd != UDUNITS_NOERR){ (void)fprintf(stdout,"%s: %s failed to initialize UDUnits library\n",nco_prg_nm_get(),fnc_nm); return NCO_ERR; } /* end if err */ /* Units string to convert from */ rcd=utScan(unt_sng,&udu_sct_in); if(rcd != UDUNITS_NOERR){ if(rcd == UT_EINVALID) (void)fprintf(stderr,"ERROR: units attribute \"%s\" is invalid \n",unt_sng); if(rcd == UT_ESYNTAX) (void)fprintf(stderr,"ERROR units attribute \"%s\" contains a syntax error",unt_sng); if(rcd == UT_EUNKNOWN) (void)fprintf(stderr,"ERROR units attribute \"%s\" is not in udunits database",unt_sng); (void)utTerm(); /* Free memory taken by UDUnits library */ return NCO_ERR; } /* endif unkown type */ /* Extract time origin */ if(utIsTime(&udu_sct_in)){ utCalendar(0.0,&udu_sct_in,&tm_in->year,&tm_in->month,&tm_in->day,&tm_in->hour,&tm_in->min,&tm_in->sec); rcd=NCO_NOERR; }else{ rcd=NCO_ERR; } /* endelse */ (void)utTerm(); /* Free memory taken by UDUnits library */ return rcd; } /* end UDUnits1 nco_cln_prs_tm() */
//---------------------------------------- CUnitSmartCleaner::~CUnitSmartCleaner() { utTerm(); }
int /* [rcd] Successful conversion returns NCO_NOERR */ nco_cln_clc_dff /* [fnc] UDUnits1 Difference between two co-ordinate units */ (const char *fl_unt_sng, /* I [ptr] units attribute string from disk */ const char *fl_bs_sng, /* I [ptr] units attribute string from disk */ double crr_val, double *og_val) /* O [ptr] */ { const char fnc_nm[]="nco_cln_clc_dff()"; /* [sng] Function name */ double slp; double incpt; int rcd; utUnit udu_sct_in; /* UDUnits structure, input units */ utUnit udu_sct_out; /* UDUnits structure, output units */ /* Quick return if units identical */ if(!strcmp(fl_unt_sng,fl_bs_sng) ){ *og_val=crr_val; return NCO_NOERR; } /* endif */ #ifdef UDUNITS_PATH /* UDUNITS_PATH macro expands to where autoconf found database file */ rcd=utInit(UDUNITS_PATH); #else /* !UDUNITS_PATH */ /* When empty, utInit() uses environment variable UDUNITS_PATH, if any Otherwise it uses default initial location hardcoded when library was built */ rcd=utInit(""); #endif /* !UDUNITS_PATH */ if(rcd != UDUNITS_NOERR){ (void)fprintf(stdout,"%s: %s failed to initialize UDUnits2 library\n",nco_prg_nm_get(),fnc_nm); return NCO_ERR; } /* end if err */ /* units string to convert from */ rcd=utScan(fl_unt_sng,&udu_sct_in); if(rcd != UDUNITS_NOERR){ if(rcd == UT_EINVALID) (void)fprintf(stderr,"ERROR: units attribute \"%s\" is invalid \n",fl_unt_sng); if(rcd == UT_ESYNTAX) (void)fprintf(stderr,"ERROR units attribute \"%s\" contains a syntax error",fl_unt_sng); if(rcd == UT_EUNKNOWN) (void)fprintf(stderr,"ERROR units attribute \"%s\" is not in udunits database",fl_unt_sng); (void)utTerm(); /* Free memory taken by UDUnits library */ return NCO_ERR; } /* endif unkown type */ /* units string to convert to */ rcd=utScan(fl_bs_sng,&udu_sct_out); if(rcd != UDUNITS_NOERR){ if(rcd == UT_EINVALID) (void)fprintf(stderr,"ERROR: units attribute \"%s\" is invalid \n",fl_bs_sng); if(rcd == UT_ESYNTAX) (void)fprintf(stderr,"ERROR units attribute \"%s\" contains a syntax error",fl_bs_sng); if(rcd == UT_EUNKNOWN) (void)fprintf(stderr,"ERROR units attribute \"%s\" is not in udunits database",fl_bs_sng); (void)utTerm(); /* Free memory taken by UDUnits library */ return NCO_ERR; } /* endif unkown type */ rcd=utConvert(&udu_sct_in,&udu_sct_out,&slp,&incpt); if(rcd == UT_ECONVERT){ (void)fprintf(stderr,"ERROR: user specified unit \"%s\" cannot be converted to units \"%s\"\n",fl_unt_sng,fl_bs_sng); (void)utTerm(); return NCO_ERR; } /* endif */ *og_val=crr_val*slp+incpt; /* debug stuff */ if(nco_dbg_lvl_get() > nco_dbg_std) (void)fprintf(stderr,"%s: %s reports difference between systems \"%s\" and \"%s\" is %f\n",nco_prg_nm_get(),fnc_nm,fl_unt_sng,fl_bs_sng,*og_val); (void)utTerm(); return NCO_NOERR; } /* end UDUnits1 nco_cln_clc_dff() */