![]() |
Software > OpenVMS Systems > Ask the Wizard ![]() 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
|