awips2/ncep/gov.noaa.nws.ncep.viz.rsc.ncgrid/dgdriv_c/cflmnam.c
Steve Harris 8485b90ff8 12.4.1-10 baseline
Former-commit-id: bf53d06834caa780226121334ac1bcf0534c3f16
2012-05-01 18:06:13 -05:00

174 lines
5.1 KiB
C

#include "geminc.h"
#include "gemprm.h"
void cfl_mnam ( char *dattim, char *templt, char *filnam, int *iret )
/************************************************************************
* cfl_mnam *
* *
* This function constructs a file name using the template and a GEMPAK *
* date/time string. The GEMPAK date/time string must be complete and *
* standard, i.e., it may not have a 4-digit year. *
* *
* YYYY Year with the century *
* YY Year without the century *
* MMM Month 3 letter abbreviation *
* NNN Month 3 letter abbreviation, all caps *
* MM Month number *
* DD Day *
* HH Hour *
* NN Minute *
* DWK Day of the week 3 letter abbreviation *
* DWU Day of the week 3 letter abbreviation, all caps *
* fFFF Forecast hour (3 digits) *
* fFF Forecast hour (2 digits) *
* *
* cfl_mnam ( dattim, templt, filnam, iret ) *
* *
* Input parameters: *
* *dattim char Full GEMPAK Date/time string *
* *templt char File name template *
* *
* Output parameters: *
* *filnam char File name *
* *iret int Return code *
** *
* G. Krueger/EAI 3/96 *
* S. Jacobs/NCEP 6/96 Changed to mixed case for month and day *
* names; changed minutes to NN *
* G. Krueger/EAI 8/96 Match with FL library; Simplified *
* I. Durham/GSC 5/98 Changed underscore decl. to an include *
* S. Jacobs/NCEP 4/99 Added UC ver of month and day-of-week *
* D.W.Plummer/NCEP 3/00 Added FFF forecast hour processing *
* M. Li/SAIC 02/02 Added check for the length of data/time *
* M. Li/SAIC 03/01 Modified the forecast time processing *
***********************************************************************/
{
int dtyear, dtmonth, idtarr[5], idaywk, lf, ier;
char *pyy, *pmm, *pdd, *phh, *pmn, *pfff, *pdwk, tstr[3],
fcst[8], tfc[8];
char moname[12][4] = { "Jan", "Feb", "Mar", "Apr", "May",
"Jun", "Jul", "Aug", "Sep", "Oct",
"Nov", "Dec" };
char noname[12][4] = { "JAN", "FEB", "MAR", "APR", "MAY",
"JUN", "JUL", "AUG", "SEP", "OCT",
"NOV", "DEC" };
char dwname[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu",
"Fri", "Sat" };
char wdname[7][4] = { "SUN", "MON", "TUE", "WED", "THU",
"FRI", "SAT" };
/*---------------------------------------------------------------------*/
*iret = 0;
strcpy ( filnam, templt );
/*
* Substitute the first 2 digits of a 4 digit year for YYYY.
*/
pyy = strstr ( filnam, "YYYY" );
if ( pyy != NULL ) {
cst_ncpy ( tstr, dattim, 2, &ier );
cst_numb ( tstr, &dtyear, &ier );
if ( dtyear <= 50 ) {
memcpy ( pyy, "20", 2 );
} else {
memcpy ( pyy, "19", 2 );
}
}
/*
* Substitute the 2 digit year for YY.
*/
pyy = strstr ( filnam, "YY" );
if ( pyy != NULL ) memcpy ( pyy, dattim, 2 );
/*
* Substitute the 3 character month for MMM.
*/
pmm = strstr ( filnam, "MMM" );
if ( pmm != NULL ) {
cst_ncpy ( tstr, dattim + 2, 2, &ier );
cst_numb ( tstr, &dtmonth, &ier );
if ( dtmonth >= 1 && dtmonth <= 12 )
memcpy ( pmm, moname[dtmonth-1], 3 );
}
/*
* Substitute the 3 character month for NNN.
*/
pmm = strstr ( filnam, "NNN" );
if ( pmm != NULL ) {
cst_ncpy ( tstr, dattim + 2, 2, &ier );
cst_numb ( tstr, &dtmonth, &ier );
if ( dtmonth >= 1 && dtmonth <= 12 )
memcpy ( pmm, noname[dtmonth-1], 3 );
}
/*
* Substitute the 2 digit month for MM.
*/
pmm = strstr ( filnam, "MM" );
if ( pmm != NULL ) memcpy ( pmm, dattim + 2, 2 );
/*
* Substitute the 2 digit day for DD.
*/
pdd = strstr ( filnam, "DD" );
if ( pdd != NULL ) memcpy ( pdd, dattim + 4, 2 );
/*
* Substitute the 2 digit hour for HH.
*/
phh = strstr ( filnam, "HH" );
if ( phh != NULL ) memcpy ( phh, dattim + 7, 2 );
/*
* Substitute the 2 digit minute for NN.
*/
pmn = strstr ( filnam, "NN" );
if ( pmn != NULL ) memcpy ( pmn, dattim + 9, 2 );
/*
* Substitute the 3 character day of the week for DWK.
*/
pdwk = strstr ( filnam, "DWK" );
if ( pdwk != NULL ) {
ti_ctoi ( dattim, idtarr, &ier, strlen (dattim) );
ti_dayw ( idtarr, &idaywk, &ier );
memcpy ( pdwk, dwname[idaywk-1], 3 );
}
/*
* Substitute the 3 character day of the week for DWU.
*/
pdwk = strstr ( filnam, "DWU" );
if ( pdwk != NULL ) {
ti_ctoi ( dattim, idtarr, &ier, strlen (dattim) );
ti_dayw ( idtarr, &idaywk, &ier );
memcpy ( pdwk, wdname[idaywk-1], 3 );
}
if (strlen(dattim) > (size_t)11) {
/*
* Add '0' if not 3 or 5 letters
*/
cst_ncpy(fcst, dattim + 12, strlen(dattim)-12, &ier);
lf = strlen(fcst);
if ((lf == 4) || (lf ==2)) {
strcpy(tfc, "0");
strncat(tfc, fcst, lf);
strcpy(fcst, tfc);
}
else if (lf ==1) {
strcpy(tfc, "00");
strncat(tfc, fcst, lf);
strcpy(fcst, tfc);
}
/*
* Substitute the 3-digit forecast hour for fFFF
*/
pfff = strstr ( filnam, "FFF" );
if ( pfff != NULL ) {
memcpy(pfff, fcst, 3);
}
/*
* Substitute the 2-digit forecast hour for fFF
*/
pfff = strstr ( filnam, "FF" );
if ( pfff != NULL ) {
memcpy ( pfff, fcst+1, 2 );
}
}
}