awips2/ncep/gov.noaa.nws.ncep.viz.rsc.ncgrid/dgdriv_c/dgcfixa.c

172 lines
5.1 KiB
C
Raw Normal View History

#include "dg.h"
void dgc_fixa ( const char *area, const char *proj, char *areout,
char *prjout, int *iret )
/************************************************************************
* dgc_fixa *
* *
* This subroutine takes AREA and replaces GRID or DSET with the grid *
* area, EXTEND with the extend area, and DATA with the data area. *
* GRID or DSET is obtained from the navigation block; EXTEND and *
* DATA are obtained from the analysis block. *
* *
* dgc_fixa ( area, proj, areout, prjout, iret ) *
* *
* Input parameters: *
* *area const char Area *
* *proj const char Projection *
* *
* Output parameters: *
* *areout char New area *
* *prjout char New projection *
* *iret int Return code *
* 0 = normal return *
* -54 = grid file open failed *
** *
* Log: *
* K. Brill/HPC 01/04 Created from GR_FIXA for use with new *
* DG subroutines--do not pass in file nmbr*
* R. Tian/SAIC 3/04 Modified to use new GD file management *
* R. Tian/SIC 2/06 Recoded from Fortran *
************************************************************************/
{
char str1[29], str2[29], str3[29], str4[29], aaa[73];
char str6[29], str7[29], str8[29], prj[21];
float adum1, adum2, dn, dx, dy, gbnds[4], ebnds[4], dbnds[4],
rnav[LLNNAV], ranl[LLNANL];
int igdfln, mxgd, navlen, ianlsz, iex[4], nc, zero, ier;
/*----------------------------------------------------------------------*/
*iret = 0;
zero = 0;
gd_open ( _nfile.crtfnm[_nfile.irefnv], &_nfile.outflg[_nfile.irefnv],
&zero, &zero, &igdfln, &adum1, &adum2, &mxgd, &ier,
strlen(_nfile.crtfnm[_nfile.irefnv]) );
if ( ier != 0 ) {
*iret = -54;
return;
}
/*
* Convert to upper case.
*/
cst_lcuc ( (char *)area, areout, &ier );
cst_lcuc ( (char *)proj, prjout, &ier );
/*
* Check for word GRID.
*/
if ( strstr ( areout, "GRID" ) || strstr ( areout, "DSET" ) ) {
/*
* Read in navigation block.
*/
gd_gnav ( &igdfln, rnav, &navlen, &ier );
if ( navlen >= 13 ) {
cst_rlch ( rnav[6], 2, str1, &ier );
cst_rlch ( rnav[7], 2, str2, &ier );
cst_rlch ( rnav[8], 2, str3, &ier );
cst_rlch ( rnav[9], 2, str4, &ier );
cst_ldsp ( str1, str1, &nc, &ier );
cst_ldsp ( str2, str2, &nc, &ier );
cst_ldsp ( str3, str3, &nc, &ier );
cst_ldsp ( str4, str4, &nc, &ier );
strcpy ( aaa, str1 );
strcat ( aaa, ";" );
strcat ( aaa, str2 );
strcat ( aaa, ";" );
strcat ( aaa, str3 );
strcat ( aaa, ";" );
strcat ( aaa, str4 );
if ( strstr ( areout, "GRID" ) ) {
cst_rpst ( areout, "GRID", aaa, areout, &ier );
} else {
cst_rpst ( areout, "DSET", aaa, areout, &ier );
}
/*
* Set projection if PROJ is blank.
*/
if ( strlen ( prjout ) == 0 ) {
cst_itos ( (int *)(&rnav[1]), 1, &nc, prj, &ier );
cst_rmbl ( prj, prj, &nc, &ier );
cst_rlch ( rnav[10], 2, str6, &ier );
cst_rlch ( rnav[11], 2, str7, &ier );
cst_rlch ( rnav[12], 2, str8, &ier );
cst_ldsp ( str6, str6, &nc, &ier );
cst_ldsp ( str7, str7, &nc, &ier );
cst_ldsp ( str8, str8, &nc, &ier );
strcpy ( prjout, prj );
strcat ( prjout, "/" );
strcat ( prjout, str6 );
strcat ( prjout, ";" );
strcat ( prjout, str7 );
strcat ( prjout, ";" );
strcat ( prjout, str8 );
}
}
}
/*
* Check for EXTEND.
*/
if ( strstr ( areout, "EXTEND" ) ) {
/*
* Read in analysis block.
*/
gd_ganl ( &igdfln, ranl, &ianlsz, &ier );
grc_rban ( ranl, &dn, &dx, &dy, gbnds, ebnds, dbnds, iex, &ier );
if ( ier == 0 ) {
cst_rlch ( ebnds[0], 2, str1, &ier );
cst_rlch ( ebnds[1], 2, str2, &ier );
cst_rlch ( ebnds[2], 2, str3, &ier );
cst_rlch ( ebnds[3], 2, str4, &ier );
cst_ldsp ( str1, str1, &nc, &ier );
cst_ldsp ( str2, str2, &nc, &ier );
cst_ldsp ( str3, str3, &nc, &ier );
cst_ldsp ( str4, str4, &nc, &ier );
strcpy ( aaa, str1 );
strcat ( aaa, ";" );
strcat ( aaa, str2 );
strcat ( aaa, ";" );
strcat ( aaa, str3 );
strcat ( aaa, ";" );
strcat ( aaa, str4 );
cst_rpst ( areout, "EXTEND", aaa, areout, &ier );
}
}
/*
* Check for DATA.
*/
if ( strstr ( areout, "DATA" ) ) {
/*
* Read in analysis block.
*/
gd_ganl ( &igdfln, ranl, &ianlsz, &ier );
grc_rban ( ranl, &dn, &dx, &dy, gbnds, ebnds, dbnds, iex, &ier );
if ( ier == 0 ) {
cst_rlch ( dbnds[0], 2, str1, &ier );
cst_rlch ( dbnds[1], 2, str2, &ier );
cst_rlch ( dbnds[2], 2, str3, &ier );
cst_rlch ( dbnds[3], 2, str4, &ier );
cst_ldsp ( str1, str1, &nc, &ier );
cst_ldsp ( str2, str2, &nc, &ier );
cst_ldsp ( str3, str3, &nc, &ier );
cst_ldsp ( str4, str4, &nc, &ier );
strcpy ( aaa, str1 );
strcat ( aaa, ";" );
strcat ( aaa, str2 );
strcat ( aaa, ";" );
strcat ( aaa, str3 );
strcat ( aaa, ";" );
strcat ( aaa, str4 );
cst_rpst ( areout, "DATA", aaa, areout, &ier );
}
}
return;
}