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