PROGRAM test_grib1_routines
  IMPLICIT NONE

  CHARACTER, DIMENSION(:), POINTER :: fileindex
  REAL     , DIMENSION(:), POINTER :: data
  INTEGER :: fid
  INTEGER :: err
  INTEGER :: ret
  INTEGER :: size
  INTEGER :: index
  INTEGER :: istat

  INTEGER :: parmid
  CHARACTER(40) :: datestr
  INTEGER :: leveltype 
  INTEGER :: level1
  INTEGER :: level2
  INTEGER :: fcsttime1
  INTEGER :: fcsttime2
  character(200) :: value
  character(20) :: strval
  integer :: test
  character(50) :: form
  integer :: NumberTimes
  character (19) :: Time
  character (19), pointer  :: Times(:)
  integer :: ierr
  integer :: numcols, numrows
  integer :: center, subcenter, parmtbl
  

  parmid=33
  datestr = '2005041412'
  leveltype = 119
  level1 = 9965
  level2 = -HUGE(1)
  fcsttime1 = 0
  fcsttime2 = -HUGE(1)
  center = 250
  subcenter = 2
  parmtbl = 200

  print *,'about to call GET_FILEINDEX_SIZE'
  CALL GET_FILEINDEX_SIZE(size)
  ALLOCATE(fileindex(1:size), STAT=istat)

  print *,'about to call ALLOC_INDEX_FILE'
  CALL ALLOC_INDEX_FILE(fileindex)
  print *,'about to call OPEN_FILE'
  CALL OPEN_FILE('test.grb','r',fid,err)
  print *,'about to call INDEX_FILE'
  CALL INDEX_FILE(fid,fileindex)

  print *,'about to call GET_GRIB_INDEX'
  CALL GET_GRIB_INDEX(fileindex, center, subcenter, parmtbl, &
       parmid,trim(datestr),leveltype,level1,level2, &
       fcsttime1,fcsttime2,index)
  print *,'got grib index: ',index

  print *,'about to call GET_METADATA_VALUE'
  CALL GET_METADATA_VALUE(fileindex, 'GRIB_GRID_ID', "none", "none", &
       Value, istat)

  print *,'about to call GET_NUM_TIMES'
  CALL GET_NUM_TIMES(fileindex, NumberTimes)
  print *,'found ',NumberTimes,' times'

  ALLOCATE(Times(1:NumberTimes), STAT=ierr)
  print *,'about to call GET_TIME'
  CALL GET_TIME(fileindex,1,Time)
  print *,'Time: ',Time

  print *,'about to call GET_SIZEOF_GRID'
  CALL GET_SIZEOF_GRID(fileindex,index,numcols,numrows)
  allocate(data(1:numcols*numrows))

  print *,'about to call READ_GRIB'
  CALL READ_GRIB(fileindex,fid,index,data)
  print *,'data(20): ',data(20)

  deallocate(data)

  print *,'about to call FREE_INDEX_FILE'
  CALL FREE_INDEX_FILE(fileindex)

  print *,'program completed'

END PROGRAM