$! DELTREE.COM -- Delete a Directory Tree Command Procedure $ say = "write sys$output" $ fac = "%DELTREE-" $ exit_status = 1 $ on control_y then $ goto fatal_exit $ on warning then $ goto fatal_exit $ if f$type (deltree) .eqs. "" $ then $ deltree = "@" + f$environment ("procedure") $ endif $ req_privs = "tmpmbx,netmbx,bypass" $ old_privs = f$setprv (req_privs) $ if .not. f$privilege (req_privs) then $ goto no_priv $ exit_status = 1 $ saved_dir = f$environment ("default") $ root_dir = f$edit (p1,"trim,upcase") $ if root_dir .eqs. "" then $ inquire root_dir "Root directory" $ if root_dir .eqs. "" then $ goto final_exit $ delete_option = f$edit (p2,"trim,upcase") $ if delete_option .eqs. "" then - $ inquire delete_option - "Delete command option (C - Confirm, L - Log, N - Nolog) [C]" $ if delete_option .eqs. "" then $ delete_option = "C" $ delete_qual = "" $ if delete_option .eqs. "C" then $ delete_qual = "/confirm" $ if delete_option .eqs. "L" then $ delete_qual = "/log" $ if delete_option .eqs. "N" then $ delete_qual = "/nolog" $ if delete_qual .eqs. "" then $ goto invalid_option $end_get_qual: $ if f$parse (root_dir) .eqs. "" then $ goto bogus_root $ set default 'root_dir' $ this_dir = (f$directory () - "]" - ">") - (f$parse ("[-]",,,"directory") - - "]" - ">") - "." - "[" $! $directory_loop: $ file_spec = f$search ("*.DIR;1") $ if file_spec .eqs. "" then $ goto end_directory_loop $ dir_name = f$parse (file_spec,,,"name") $ if f$search ("[.''dir_name']*.*") .nes. "" then $ goto down_tree $ set file 'dir_name'.dir;1 /nodirectory/prot=(s:rwed,o:rwed) $ delete_'delete_qual' 'dir_name'.dir;1 $ goto directory_loop $down_tree: $ deltree [.'f$parse (file_spec,,,"name")'] 'delete_option' $ goto directory_loop $end_directory_loop: $! $ if f$search ("*.*") .eqs. "" then $ goto no_files $ set prot=(s:rwed,o:rwed) *.*;* $ delete_'delete_qual' *.*;* $no_files: $ set file [-]'this_dir'.dir;1 /nodirectory/prot=(s:rwed,o:rwed) $ delete_'delete_qual' [-]'this_dir'.dir;1 $final_exit: $ if f$type (old_privs) .nes. "" then $ old_privs = f$setprv (old_privs) $ set default 'saved_dir' $ exit exit_status $! $! Errors: $! $fatal_exit: $ say fac,"F-FATAL, unexpected error detected" $ exit_status = %X10000004 $ goto final_exit $invalid_option: $ say fac,"E-INVOPT, invalid delete command option - use C, L, or N" $ exit_status = %X10000002 $ goto final_exit $bogus_root: $ say fac,"E-NOSUCHDIR, no such directory ''root_dir'" $ exit_status = %X10000002 $ goto final_exit $no_priv: $ say fac, "E-NOPRIV, insufficient privilege (need ''req_privs')" $ exit_status = %X10000002 $ goto final_exit $!++ $! DELTREE.COM -- Delete a Directory Tree Command Procedure $! $! This command procedure is invoked as follows to delete a directory $! tree: $! $! @site_tools:deltree root delete-option $! $! where 'root' is the root directory of the tree to be deleted and $! 'delete-option' determines what command qualifiers are appended to $! the DELETE command as it is executed, C (for confirm), L (for log) $! or N (for nolog). C (/CONFIRM) is the default. $! $! For example, type $! $! @site_tools:deltree disk4c:[smitty] n $! $! to delete the directory tree beginning at [SMITTY] on disk DISK4C $! with no logging. The command procedure deletes all files in the tree, $! including directories, starting at the bottom of the tree and working $! upwards. $!-- $! Revision history: $! $! V1.0 07-JUL-1983 David M. Smith - plagiarized from VMS System $! Management Guide. $! $! V1.1 25-JUL-1983 David M. Smith - revised for standard definition of $! MGR_LIBRARY. $! $! V2.0 13-DEC-1984 David M. Smith - handle .DIR files which are not $! directories; add NOLOG option. $! $! V2.1 21-JUN-1985 David M. Smith - remove message if can't get SYSPRV; $! turn on SYSPRV before starting to prevent spurious $! errors for non-existent directories. $! $! 13-APR-1987 David M. Smith - revise for SITE changes; change $! check for empty directory; fix to handle bad, real $! directories; change P2 to work similar to RSS' DELTREE; $! require BYPASS so protections need not be changed. $!