awips2/nativeLib/rary.cots.g2clib/drstemplates.c
2017-04-21 18:33:55 -06:00

157 lines
4.6 KiB
C
Executable file

#include <stdlib.h>
#include "grib2.h"
#include "drstemplates.h"
g2int getdrsindex(g2int number)
/*!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . . .
! SUBPROGRAM: getdrsindex
! PRGMMR: Gilbert ORG: W/NP11 DATE: 2001-06-28
!
! ABSTRACT: This function returns the index of specified Data
! Representation Template 5.NN (NN=number) in array templates.
!
! PROGRAM HISTORY LOG:
! 2001-06-28 Gilbert
! 2009-01-14 Vuong Changed structure name template to gtemplate
!
! USAGE: index=getdrsindex(number)
! INPUT ARGUMENT LIST:
! number - NN, indicating the number of the Data Representation
! Template 5.NN that is being requested.
!
! RETURNS: Index of DRT 5.NN in array gtemplates, if gtemplate exists.
! = -1, otherwise.
!
! REMARKS: None
!
! ATTRIBUTES:
! LANGUAGE: C
! MACHINE: IBM SP
!
!$$$*/
{
g2int j,getdrsindex=-1;
for (j=0;j<MAXDRSTEMP;j++) {
if (number == templatesdrs[j].template_num) {
getdrsindex=j;
return(getdrsindex);
}
}
return(getdrsindex);
}
gtemplate *getdrstemplate(g2int number)
/*!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . . .
! SUBPROGRAM: getdrstemplate
! PRGMMR: Gilbert ORG: W/NP11 DATE: 2000-05-11
!
! ABSTRACT: This subroutine returns DRS template information for a
! specified Data Representation Template 5.NN.
! The number of entries in the template is returned along with a map
! of the number of octets occupied by each entry. Also, a flag is
! returned to indicate whether the template would need to be extended.
!
! PROGRAM HISTORY LOG:
! 2000-05-11 Gilbert
! 2009-01-14 Vuong Changed structure name template to gtemplate
!
! USAGE: new=getdrstemplate(number);
! INPUT ARGUMENT LIST:
! number - NN, indicating the number of the Data Representation
! Template 5.NN that is being requested.
!
! RETURN VALUE:
! - Pointer to the returned template struct.
! Returns NULL pointer, if template not found.
!
! REMARKS: None
!
! ATTRIBUTES:
! LANGUAGE: C
! MACHINE: IBM SP
!
!$$$*/
{
g2int index;
gtemplate *new;
index=getdrsindex(number);
if (index != -1) {
new=(gtemplate *)malloc(sizeof(gtemplate));
new->type=5;
new->num=templatesdrs[index].template_num;
new->maplen=templatesdrs[index].mapdrslen;
new->needext=templatesdrs[index].needext;
new->map=(g2int *)templatesdrs[index].mapdrs;
new->extlen=0;
new->ext=0; //NULL
return(new);
}
else {
printf("getdrstemplate: DRS Template 5.%d not defined.\n",(int)number);
return(0); //NULL
}
return(0); //NULL
}
gtemplate *extdrstemplate(g2int number,g2int *list)
/*!$$$ SUBPROGRAM DOCUMENTATION BLOCK
! . . . .
! SUBPROGRAM: extdrstemplate
! PRGMMR: Gilbert ORG: W/NP11 DATE: 2000-05-11
!
! ABSTRACT: This subroutine generates the remaining octet map for a
! given Data Representation Template, if required. Some Templates can
! vary depending on data values given in an earlier part of the
! Template, and it is necessary to know some of the earlier entry
! values to generate the full octet map of the Template.
!
! PROGRAM HISTORY LOG:
! 2000-05-11 Gilbert
! 2009-01-14 Vuong Changed structure name template to gtemplate
!
! USAGE: new=extdrstemplate(number,list);
! INPUT ARGUMENT LIST:
! number - NN, indicating the number of the Data Representation
! Template 5.NN that is being requested.
! list() - The list of values for each entry in the
! the Data Representation Template 5.NN.
!
! RETURN VALUE:
! - Pointer to the returned template struct.
! Returns NULL pointer, if template not found.
!
! ATTRIBUTES:
! LANGUAGE: C
! MACHINE: IBM SP
!
!$$$*/
{
gtemplate *new;
g2int index,i;
index=getdrsindex(number);
if (index == -1) return(0);
new=getdrstemplate(number);
if ( ! new->needext ) return(new);
if ( number == 1 ) {
new->extlen=list[10]+list[12];
new->ext=(g2int *)malloc(sizeof(g2int)*new->extlen);
for (i=0;i<new->extlen;i++) {
new->ext[i]=4;
}
}
return(new);
}