HP OpenVMS Systemsask the wizard |
The Question is: I have been looking for a sys$ lib$ function i can call from a Vax Basic program, that will give me the size of a specified file. Or even better would be a way to find out when a file has finished transfering to a nfs drive on our proxy server. hope you can help Dave The Answer is :
1
! This example show two distinct methods of obtaining file sizes.
! - How the get teh ALLOCATED size Through the built-in function FSP$
! - How to exploit the basic provided RMS XABFHC from a useropen
!
Common (File_Data) integer Used_Size
record fsp_data
variant
case
byte org ! these 2 are swapped
byte rat
word max_record_size
long file_size
word bucketsize_blocksize
word num_keys
long max_record_number
case
string ret_string=16 ! "string" missing
end variant ! this line is missing too
end record
declare fsp_data file_chars
open "test" for input as file #1, access read, allow modify, &
recordtype any, useropen Size_Finder
file_chars::ret_string=FSP$(1%)
print "xabfhc ebk = "; Used_size; ", fsp size = "; file_chars::file_size
end
2 Function Long Size_Finder (Fabdef Fab, Rabdef Rab, Long Channel)
Option Type = Explicit
%include "$FABDEF" %from %library "SYS$LIBRARY:BASIC$STARLET"
%include "$RABDEF" %from %library "SYS$LIBRARY:BASIC$STARLET"
External long constant xab$L_ebk ! offset into fhc block
External Long Function Sys$Open, Sys$Connect
Common (File_Data) integer Used_Size
Declare Long Stat
Stat = Sys$Open(fab)
Stat = Sys$Connect(Rab) If (Stat And 1%) = 1%
Size_Finder = Stat
! At this point we could/should really walk the XAB chain from the FAB
! Looking for XAB$B_COD = XAB$C_FHC. However, we _know_ this is the first
! XAB provided by Basic. Just copy the EBK field from it directly.
!
call lib$movc3( 4% ,fab::fab$l_xab + xab$L_ebk by value, Used_size)
End Function
|