vd_ex4af.f



      PROGRAM vd_ex4af
 
      implicit none

C     Use vsfnpak and vsfcpak to pack field values into a buffer

      integer hopen, vsfatch, vsffdef, vsfsnam
      integer vsfscls, vsfsfld, vsfwrit, vsfdtch
      integer vsfsnat, vsfscat, vfstart, vfend
      integer hclose, vsfnpak, vsfcpak  
      integer*4 values(4)

C     Parameter definitions
      integer*4 DFACC_CREATE, DFNT_FLOAT32, DFNT_INT16, DFNT_CHAR8
      integer*4 DFNT_INT32, FULL_INTERLACE, HDF_VSPACK, HDF_VSUNPACK
      parameter (DFACC_CREATE = 4,
     +           DFNT_FLOAT32 = 5,
     +           DFNT_INT16 = 22,
     +           DFNT_CHAR8 = 4,
     +           DFNT_INT32 = 24,
     +           FULL_INTERLACE = 0,
     +           HDF_VSPACK = 0,
     +           HDF_VSUNPACK = 1)
C

C     Example parameters.
      integer NRECORDS
      parameter (NRECORDS = 10)

C     Vdata fields.
      real temp(10)
      integer*2 height(10)
      real speed(10)
      character*10 idents /"ABCDEFGHIJKLMNOPQRST"/
      DATA temp/1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9/
      DATA height/0, 1, 2, 3, 4, 5, 6, 7, 8, 9/
      DATA speed/6.0,6.1,6.2,6.3,6.4,6.5,6.6,6.7,6.8,6.9/ 

C     Packing buffer size bigger than (4+2+4+1)*NRECORDS = 110.
      integer buffer(100)

C     More local variables.
      integer retn
      integer*4 file_id, vdata_id

C     Create the file. 
      file_id = hopen('VD_Ex4f.hdf', DFACC_CREATE, 0)
      print *,'File ID: ',file_id

C     Initialize the interface. 
      retn = vfstart(file_id)

C     Create a new vdata. 
      vdata_id = vsfatch(file_id, -1, 'w')
      print *,'VDATA ID: ',vdata_id

C     Define the fields to write. 
      retn = vsffdef(vdata_id, 'Temp', DFNT_FLOAT32, 1) 
      print *,'vsffdef Temp return: ', retn
      retn = vsffdef(vdata_id, 'Height', DFNT_INT16, 1) 
      print *,'vsffdef Height return: ', retn
      retn = vsffdef(vdata_id, 'Speed', DFNT_FLOAT32, 1) 
      print *,'vsffdef Speed return: ', retn
      retn = vsffdef(vdata_id, 'Ident', DFNT_CHAR8, 1) 
      print *,'vsffdef Ident return: ', retn

C     Set the vdata name. 
      retn = vsfsnam(vdata_id, 'Example Vset Name')
      print *,'vsfsnam return: ', retn

C     Set the vdata class. 
      retn = vsfscls(vdata_id, 'Example Vset Class')
      print *,'vsfscls return: ', retn

C     Set the field names. 
      retn = vsfsfld(vdata_id, 'Temp,Height,Speed,Ident')
      print *,'vsfsfld return: ', retn

C     Pack NRECORDS of data into buffer.
      retn = vsfnpak(vdata_id, HDF_VSPACK,' ',buffer,
     +          110, NRECORDS, 'Temp', temp)
      print *,'vsfnpak Temp return: ', retn
      retn = vsfnpak(vdata_id, HDF_VSPACK,' ',buffer,
     +          110, NRECORDS, 'Height',height)
      print *,'vsfnpak Height return: ', retn
      retn = vsfnpak(vdata_id, HDF_VSPACK,' ',buffer,
     +          110, NRECORDS, 'Speed',speed)
      print *,'vsfnpak Speed return: ', retn
      retn = vsfcpak(vdata_id, HDF_VSPACK,' ',buffer,
     +          110, NRECORDS, 'Ident',idents)
      print *,'vsfnpak Ident return: ', retn

      retn = vsfwrit(vdata_id, buffer, NRECORDS, FULL_INTERLACE)
      print *,'vsfwrit return: ', retn

C     Set up array for Vdata attribute
      values(1) = 32
      values(2) = 16
      values(3) = 32
      values(4) = 8

C     Add Vdata attribute
      retn = vsfsnat(vdata_id, -1, 'Fixed_type', 
     +          DFNT_INT32, 4, values)
      print *,'vsfsnat return: ', retn

C     Add "speed" field attribute
      retn = vsfscat(vdata_id, 2, 'Symbol', 
     +          DFNT_CHAR8, 3, 'MAX')
      print *,'vsfscat return: ', retn

C     Terminate access to the vdata object, the interface 
C     and the file.
      retn = vsfdtch(vdata_id)
      print *,'vsfdtch return: ', retn
      retn = vfend(file_id)
      retn = hclose(file_id)
      print *,'hclose return: ', retn

      end