174 lines
5.1 KiB
C
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 );
|
|
}
|
|
|
|
}
|
|
|
|
}
|