$ user_c_flags = ""
$ use_ieee_math = "y"
$ be_case_sensitive = "n"
+$ shorten_long_symbols = "y"
$ unlink_all_versions = "n"
$ builder = "MMK"
$ use_vmsdebug_perl = "n"
$ use_debugmalloc = "N"
$ ccflags = ""
$ static_ext = ""
+$ dynamic_ext = ""
$ nonxs_ext = ""
+$ nonxs_ext2 = ""
$ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
$ max_allowed_dir_depth = 3 ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
$! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
$Shut_up:
$ IF F$Mode() .eqs. "BATCH"
$ THEN
-$ STDOUT = F$PARSE(F$GETQUI("DISPLAY_ENTRY", "JOB_NAME"), -
- F$GETQUI("DISPLAY_ENTRY", "LOG_SPECIFICATION"), ".LOG")
-$ WRITE SYS$OUTPUT "Warning: Executing in batch mode. To avoid file locking conflicts,"
-$ WRITE SYS$OUTPUT "output intended for SYS$OUTPUT will be sent to a new version"
+$ x = F$GETQUI("CANCEL_OPERATION") ! clear the deck
+$ x = "THIS_JOB"
+$ bproc_queue = f$getqui("DISPLAY_QUEUE","QUEUE_NAME","*",x)
+$ bproc_entry = f$getqui("DISPLAY_JOB","ENTRY_NUMBER",,x)
+$ bproc_name = f$getqui("DISPLAY_JOB","JOB_NAME",,x)
+$ bproc_log_spec = f$getqui("DISPLAY_JOB","LOG_SPECIFICATION",,x)
+$ STDOUT = F$PARSE(bproc_name, bproc_log_spec, ".LOG")
+$ WRITE SYS$OUTPUT "Writing output of entry ''bproc_entry' in queue ''bproc_queue' to a new version of: "
$ WRITE SYS$OUTPUT STDOUT
+$ DELETE_/SYMBOL x
+$ DELETE_/SYMBOL bproc_queue
+$ DELETE_/SYMBOL bproc_entry
+$ DELETE_/SYMBOL bproc_name
+$ DELETE_/SYMBOL bproc_log_spec
$ ELSE
$ STDOUT = F$TRNLNM("SYS$OUTPUT")
$ ENDIF
$ THEN
$ CREATE/DIRECTORY [.UU]
$ ELSE
+$ IF ( F$SEARCH("[.UU.CXX_REPOSITORY]*.*").NES."" )
+$ THEN
+$ DELETE/NOLOG/NOCONFIRM [.UU.CXX_REPOSITORY]*.*;*
+$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) [.UU]CXX_REPOSITORY.DIR
+$ ENDIF
$ IF ( F$SEARCH("[.UU]*.*").NES."" ) THEN DELETE/NOLOG/NOCONFIRM [.UU]*.*;*
$ ENDIF
$!: Configure runs within the UU subdirectory
$ config_symbols2 ="|prefix|privlib|privlibexp|scriptdir|sitearch|sitearchexp|sitebin|sitelib|sitelib_stem|sitelibexp|try_cxx|use64bitall|use64bitint|"
$ config_symbols3 ="|usecasesensitive|usedefaulttypes|usedevel|useieee|useithreads|uselongdouble|usemultiplicity|usemymalloc|usedebugging_perl|"
$ config_symbols4 ="|useperlio|usesecurelog|usethreads|usevmsdebug|usefaststdio|usemallocwrap|unlink_all_versions|uselargefiles|usesitecustomize|"
-$ config_symbols5 ="|buildmake|builder|usethreadupcalls|usekernelthread"
+$ config_symbols5 ="|buildmake|builder|usethreadupcalls|usekernelthreads|useshortenedsymbols"
$!
$ open/read CONFIG 'config_sh'
$ rd_conf_loop:
$ delete/symbol dsym
$ if f$type(usedebugging_perl) .nes. ""
$ then
-$ useperldebug = usedebugging_perl
+$ DEBUGGING = usedebugging_perl
$ delete/symbol usedebugging_perl
$ endif
$!
$ echo "was mandatory on perl 5.005 and before on VMS, but is now"
$ echo "optional. If you do not generally use it you should probably"
$ echo "leave this off and gain a bit of extra speed."
-$ bool_dflt = "y"
-$ if f$type(useperldebug) .nes. ""
+$ bool_dflt = "n"
+$ if f$type(DEBUGGING) .nes. ""
$ then
-$ if f$extract(0,1,f$edit(useperldebug,"collapse,upcase")).eqs."N" .or. useperldebug .eqs. "undef" then bool_dflt="n"
+$ if f$extract(0,1,f$edit(DEBUGGING,"collapse,upcase")).eqs."Y" .or. DEBUGGING .eqs. "define" then bool_dflt="y"
$ endif
$ rp = "Build a DEBUGGING version of Perl? [''bool_dflt'] "
$ GOSUB myread
$ ENDIF
$ IF F$TYPE(usethreadupcalls) .EQS. "" THEN usethreadupcalls = "undef"
$ IF F$TYPE(usekernelthreads) .EQS. "" THEN usekernelthreads = "undef"
-$ IF archname .NES. "VMS_VAX"
-$ THEN
$! Case sensitive?
$ echo ""
$ echo "By default, perl (and pretty much everything else on VMS) uses"
$ rp = "Build with case-sensitive symbols? [''bool_dflt'] "
$ GOSUB myread
$ be_case_sensitive = ans
+$!
+$! Shortened symbols?
+$ echo ""
+$ echo "The VMS linker does not handle symbol names longer than 31 characters,"
+$ echo "but the compiler can shorten long symbols if requested."
+$ bool_dflt = shorten_long_symbols
+$ if f$type(useshortenedsymbols) .nes. ""
+$ then
+$ if useshortenedsymbols .or. useshortenedsymbols .eqs. "define" then bool_dflt = "y"
+$ if f$extract(0,1,f$edit(useshortenedsymbols,"collapse,upcase")) .eqs. "N" .or. useshortenedsymbols .eqs. "undef" then bool_dflt = "n"
+$ endif
+$ rp = "Build with long symbols shortened? [''bool_dflt'] "
+$ GOSUB myread
+$ shorten_long_symbols = ans
+$ IF archname .NES. "VMS_VAX"
+$ THEN
$! IEEE math?
$ echo ""
$ echo "Perl normally uses IEEE format (T_FLOAT) floating point numbers on"
$ GOSUB myread
$ use_ieee_math = ans
$ ELSE
-$ be_case_sensitive = "n"
$ use_ieee_math = "n"
$ ENDIF
$ useieee = "undef"
$ usecasesensitive = "undef"
+$ useshortenedsymbols = "undef"
$ if (use_ieee_math) then useieee = "define"
$ if (be_case_sensitive) then usecasesensitive = "define"
+$ if (shorten_long_symbols) then useshortenedsymbols = "define"
$! Unlink all versions?
$ echo ""
$ echo "By default, Perl's unlink() provides VMS-like behavior and only"
$ext_loop:
$ READ/END_OF_FILE=end_ext/ERROR=end_ext CONFIG line
$ IF F$EXTRACT(0,4,line) .NES. "ext/" .AND. -
- F$EXTRACT(0,8,line) .NES. "vms/ext/" THEN goto ext_loop
+ F$EXTRACT(0,5,line) .NES. "dist/".AND. -
+ F$EXTRACT(0,5,line) .NES. "cpan/" THEN goto ext_loop
$ line = F$EDIT(line,"COMPRESS")
$ line = F$ELEMENT(0," ",line)
$ IF F$EXTRACT(0,4,line) .EQS. "ext/"
$ xxx = F$ELEMENT(1,"/",line)
$ IF F$SEARCH("[-.ext]''xxx'.DIR;1") .EQS. "" THEN GOTO ext_loop
$ ENDIF
-$ IF F$EXTRACT(0,8,line) .EQS. "vms/ext/"
+$ IF F$EXTRACT(0,5,line) .EQS. "dist/"
$ THEN
-$ xxx = F$ELEMENT(2,"/",line)
-$ IF F$SEARCH("[-.vms.ext]''xxx'.DIR;1") .EQS. "" THEN GOTO ext_loop
-$ xxx = "VMS/" + xxx
+$ xxx = F$ELEMENT(1,"/",line)
+$ IF F$SEARCH("[-.dist]''xxx'.DIR;1") .EQS. "" THEN GOTO ext_loop
+$ ENDIF
+$ IF F$EXTRACT(0,5,line) .EQS. "cpan/"
+$ THEN
+$ xxx = F$ELEMENT(1,"/",line)
+$ IF F$SEARCH("[-.cpan]''xxx'.DIR;1") .EQS. "" THEN GOTO ext_loop
$ ENDIF
$ IF xxx .EQS. "DynaLoader" THEN goto ext_loop ! omit
$!
$! (extspec = xxx) =~ tr!-!/!
$ extspec = ""
$ idx = 0
+$ extension_dir_name = xxx
$ replace_dash_with_slash:
$ before = F$ELEMENT(idx, "-", xxx)
$ IF before .EQS. "-" THEN goto end_replace_dash_with_slash
$ end_replace_dash_with_slash:
$
$ xxx = known_extensions
+$ gosub may_already_have_extension
+$ IF $STATUS .EQ. 1
+$ THEN
+$ xxx = nonxs_ext
+$ gosub may_already_have_extension
+$ ENDIF
+$ IF $STATUS .EQ. 1
+$ THEN
+$ xxx = nonxs_ext2
+$ gosub may_already_have_extension
+$ ENDIF
+$ IF $STATUS .NE. 1 THEN goto ext_loop
+$ goto found_new_extension
+$!
$ may_already_have_extension:
$ idx = F$LOCATE(extspec, xxx)
$ extlen = F$LENGTH(xxx)
-$ IF idx .EQ. extlen THEN goto found_new_extension
-$! But "Flirble" may just be part of "Acme-Flirble"
+$ IF idx .EQ. extlen THEN return 1 ! didn't find it
+$! But "Flirble" may just be part of "Acme-Flirble". This is not
+$! bullet-proof because we may only be looking at one chunk of the
+$! existing extension list.
$ IF idx .GT. 0 .AND. F$EXTRACT(idx - 1, 1, xxx) .NES. " "
$ THEN
$ xxx = F$EXTRACT(idx + F$LENGTH(extspec) + 1, extlen, xxx)
$ xxx = F$EXTRACT(idx, extlen - idx, xxx)
$ IF F$ELEMENT(0, " ", xxx) .EQS. extspec
$ THEN
-$ GOTO ext_loop
+$ RETURN 3
$ ELSE
$ xxx = F$EXTRACT(F$LENGTH(extspec) + 1, extlen, xxx)
GOTO may_already_have_extension
$ ENDIF
$!
$ found_new_extension:
-$ known_extensions = known_extensions + " ''extspec'"
+$ IF F$SEARCH("[-.ext.''extension_dir_name']*.xs") .EQS. "" .AND. F$SEARCH("[-.dist.''extension_dir_name']*.xs") .EQS. "" .AND. F$SEARCH("[-.cpan.''extension_dir_name']*.xs") .EQS. ""
+$ THEN
+$! Bit if a hack to get around the 1K buffer on older systems.
+$ IF F$LENGTH(nonxs_ext) .GT. 950
+$ THEN
+$ nonxs_ext2 = nonxs_ext2 + " ''extspec'"
+$ ELSE
+$ nonxs_ext = nonxs_ext + " ''extspec'"
+$ ENDIF
+$ ELSE
+$ known_extensions = known_extensions + " ''extspec'"
+$ ENDIF
$ goto ext_loop
$end_ext:
$ close CONFIG
$ DELETE/SYMBOL idx
$ DELETE/SYMBOL extspec
$ DELETE/SYMBOL extlen
+$ DELETE/SYMBOL extension_dir_name
$ known_extensions = F$EDIT(known_extensions,"TRIM,COMPRESS")
$ dflt = known_extensions
$ IF ccname .NES. "DEC" .AND. ccname .NES. "CXX"
$ THEN
$ dflt = dflt - "Socket" ! optional on VMS
$ ENDIF
-$ ! Build this one only for threads without ithreads
-$ IF F$TYPE(useithreads) .EQS. "" .OR. .NOT. use_threads
-$ THEN
-$ dflt = dflt - "Thread"
-$ ELSE
-$ IF useithreads .OR. useithreads .EQS. "define" THEN dflt = dflt - "Thread"
-$ ENDIF
-$ dflt = dflt - "Win32API/File" - "Win32CORE" - "Win32" ! need Dave Cutler's other project
+$ dflt = dflt - "Win32API/File" - "Win32" ! need Dave Cutler's other project
+$ nonxs_ext = nonxs_ext - "Win32CORE"
+$ nonxs_ext2 = nonxs_ext2 - "Win32CORE"
$ dflt = F$EDIT(dflt,"TRIM,COMPRESS")
+$ nonxs_ext = F$EDIT(nonxs_ext,"TRIM,COMPRESS")
+$ nonxs_ext2 = F$EDIT(nonxs_ext2,"TRIM,COMPRESS")
$!
$! Ask for their default list of extensions to build
$ echo ""
$ echo "Which modules do you want to build into perl?"
$ rp = "[''dflt'] "
$ GOSUB myread
-$ extensions = F$EDIT(ans,"TRIM,COMPRESS")
+$ dynamic_ext = F$EDIT(ans,"TRIM,COMPRESS")
$!
$! %Config-I-VMS, determine build/make utility here (make gmake mmk mms)
$ echo ""
$ extra_flags = "''extra_flags'" + "/float=g_float"
$ ENDIF
$ ENDIF
+$ names_flags = ""
$ IF be_case_sensitive
$ THEN
-$ extra_flags = "''extra_flags'" + "/Names=As_Is"
+$ names_flags = "AS_IS"
+$ ENDIF
+$ IF shorten_long_symbols
+$ THEN
+$ IF be_case_sensitive
+$ THEN
+$ names_flags = "''names_flags',SHORTENED"
+$ ELSE
+$ names_flags = "SHORTENED"
+$ ENDIF
+$ ENDIF
+$ IF F$LENGTH(names_flags) .ne. 0
+$ THEN
+$ extra_flags = "''extra_flags'" + "/NAMES=(''names_flags')"
$ ENDIF
+$ DELETE/SYMBOLS names_flags
$ extra_flags = "''extra_flags'" + "''user_c_flags'"
$!
$ min_pgflquota = "100000"
$ bool_dflt = "y"
$ IF F$TYPE(useperlio) .NES. ""
$ then
-$ if f$extract(0,1,f$edit(useperlio,"collapse,upcase")) .eqs. "N" .or. useperlio .eqs. "undef" then bool_dflt = "n"
+$ if .not. useperlio .or. useperlio .eqs. "undef" then bool_dflt = "n"
$ endif
$ IF .NOT. silent
$ THEN
$ ELSE
$ d_vms_be_case_sensitive = "undef"
$ ENDIF
+$ IF shorten_long_symbols
+$ THEN
+$ d_vms_shorten_long_symbols = "define"
+$ ELSE
+$ d_vms_shorten_long_symbols = "undef"
+$ ENDIF
$! Some constant defaults.
$ hwname = f$getsyi("HW_NAME")
$ myname = myhostname
$ d_getsent="undef"
$ ENDIF
$!
+$!
+$! Check for sa_len
+$!
+$ echo4 "Checking the availability of sa_len in the sockaddr struct ..."
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$ OS
+$ WS "#if defined(__DECC) || defined(__DECCXX)"
+$ WS "#include <stdlib.h>"
+$ WS "#endif"
+$ WS "#define _SOCKADDR_LEN"
+$ WS "#include <types.h>"
+$ IF Has_Socketshr
+$ THEN
+$ WS "#include <socketshr.h>"
+$ ELSE
+$ WS "#include <socket.h>"
+$ ENDIF
+$ WS "int main() {"
+$ WS "struct sockaddr sa;"
+$ WS "return (sa.sa_len);"
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .EQ. good_compile
+$ THEN
+$ d_sockaddr_sa_len="define"
+$ echo "You have sa_len in the sockaddr struct."
+$ ELSE
+$ d_sockaddr_sa_len="undef"
+$ echo "You do not have sa_len in the sockaddr struct."
+$ ENDIF
+$ ELSE
+$ d_sockaddr_sa_len="undef"
+$ echo "You do not have sa_len in the sockaddr struct."
+$ ENDIF
+$!
$! Check for nanosleep
$!
$ OS
$ WC "cf_by='" + cf_by + "'"
$ WC "cf_email='" + cf_email + "'"
$ WC "cf_time='" + cf_time + "'"
+$ WC "charbits='8'"
$ WC "config_args='" + config_args + "'"
$ WC "config_sh='" + config_sh + "'"
$ WC "cpp_stuff='" + cpp_stuff + "'"
$ WC "d_attribute_pure='undef'"
$ WC "d_attribute_unused='undef'"
$ WC "d_attribute_warn_unused_result='undef'"
+$ WC "d_prctl='undef'"
+$ WC "d_prctl_set_name='undef'"
$ WC "d_printf_format_null='undef'"
$ WC "d_bcmp='" + d_bcmp + "'"
$ WC "d_bcopy='" + d_bcopy + "'"
$ WC "d_sigprocmask='" + d_sigprocmask + "'"
$ WC "d_sigsetjmp='" + d_sigsetjmp + "'"
$ WC "d_sitearch='define'"
+$ WC "d_sockaddr_sa_len='" + d_sockaddr_sa_len + "'"
$ WC "d_sockatmark='undef'"
$ WC "d_sockatmarkproto='undef'"
$ WC "d_socket='" + d_socket + "'"
$ WC "d_statfs_f_flags='undef'"
$ WC "d_statfs_s='undef'"
$ WC "d_statfsflags='undef'"
+$ WC "d_static_inline='define'"
$ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'"
$ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'"
$ WC "d_stdio_ptr_lval_nochange_cnt='" + d_stdio_ptr_lval_nochange_cnt + "'"
$ WC "d_vfork='define'"
$ WC "d_vms_case_sensitive_symbols='" + d_vms_be_case_sensitive + "'" ! VMS
$ WC "d_vms_do_sockets='" + d_vms_do_sockets + "'" ! VMS
+$ WC "d_vms_shorten_long_symbols='" + d_vms_shorten_long_symbols + "'" ! VMS
$ WC "d_void_closedir='define'"
$ WC "d_volatile='define'"
$ WC "d_vprintf='define'"
$ WC "drand01='" + drand01 + "'"
$ WC "dtrace='" + "'"
$!
-$! The extensions symbol may be quite long
+$! The dynamic_ext symbol may be quite long
$!
-$ tmp = "dynamic_ext='" + extensions + "'"
+$ tmp = "dynamic_ext='" + dynamic_ext + "'"
$ WC/symbol tmp
$ DELETE/SYMBOL tmp
$ WC "eagain=' '"
$ WC "eunicefix=':'"
$ WC "exe_ext='" + exe_ext + "'"
$!
-$! The extensions symbol may be quite long
+$! The extensions symbols may be quite long
$!
-$ tmp = "extensions='" + extensions + "'"
-$ WC/symbol tmp
-$ DELETE/SYMBOL tmp
+$ WC/symbol "extensions='", nonxs_ext, " ", nonxs_ext2, " ", dynamic_ext, "'"
$ WC "fflushNULL='define'"
$ WC "fflushall='undef'"
$ WC "fpostype='fpos_t'"
$ WC "netdb_host_type='" + netdb_host_type + "'"
$ WC "netdb_name_type='" + netdb_name_type + "'"
$ WC "netdb_net_type='" + netdb_net_type + "'"
-$ WC "nonxs_ext='" + nonxs_ext + "'"
+$ WC/symbol "nonxs_ext='", nonxs_ext, " ", nonxs_ext2, "'"
$ WC "nveformat='" + nveformat + "'"
$ WC "nvfformat='" + nvfformat + "'"
$ WC "nvgformat='" + nvgformat + "'"
$ WC "perladmin='" + perladmin + "'"
$ WC "perllibs='" + perllibs + "'"
$ WC "perlpath='" + "''vms_prefix':[000000]Perl''exe_ext'" + "'"
+$ WC "perl_static_inline='static inline'"
$ WC "perl_symbol='" + perl_symbol + "'" ! VMS specific
$ WC "perl_verb='" + perl_verb + "'" ! VMS specific
$ WC "pgflquota='" + pgflquota + "'"
$ WC "usereentrant='undef'"
$ WC "userelocatableinc='undef'"
$ WC "usesecurelog='" + usesecurelog + "'" ! VMS-specific
+$ WC "useshortenedsymbols='" + useshortenedsymbols + "'" ! VMS-specific
$ WC "useshrplib='true'"
$ WC "usesitecustomize='" + usesitecustomize + "'"
$ WC "usesocks='undef'"
$ WC "uvxformat='" + uvxformat + "'"
$ WC "uvXUformat='" + uvXUformat + "'"
$ WC "vendorarch='" + "'"
+$ WC "vaproto='define'"
$ WC "vendorarchexp='" + "'"
$ WC "vendorbin='" + "'"
$ WC "vendorbinexp='" + "'"
$ IF use64bitall .OR. use64bitall .EQS. "define" THEN -
WC "#define USE_64_BIT_ALL"
$ IF be_case_sensitive THEN WC "#define VMS_WE_ARE_CASE_SENSITIVE"
+$ IF shorten_long_symbols THEN WC "#define VMS_SHORTEN_LONG_SYMBOLS"
$ IF use_ieee_math THEN WC "#define USE_IEEE"
$ IF d_herrno .EQS. "undef" THEN WC "#define NEED_AN_H_ERRNO"
$ WC "#define HAS_ENVGETENV"
$ IF kill_by_sigprc .EQS. "define" then WC "#define KILL_BY_SIGPRC"
$ IF unlink_all_versions .OR. unlink_all_versions .EQS. "define" THEN -
WC "#define UNLINK_ALL_VERSIONS"
+$ IF d_sockaddr_sa_len .EQS. "define" then WC "#define _SOCKADDR_LEN 1"
$ CLOSE CONFIG
$!
$ echo4 "Doing variable substitutions on .SH files..."
$! FIXME: "-" is an operator and illegal in a symbol name -- cpanp-run-perl can't work
$!$ WRITE CONFIG "$ cpanp-run-perl == """ + perl_setup_perl + " ''vms_prefix':[utils]cpanp-run-perl.com"""
$ WRITE CONFIG "$ cpanp == """ + perl_setup_perl + " ''vms_prefix':[utils]cpanp.com"""
-$ IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
+$ IF F$LOCATE("Devel::DProf",dynamic_ext) .LT. F$LENGTH(dynamic_ext)
$ THEN
$ WRITE CONFIG "$ dprofpp == """ + perl_setup_perl + " ''vms_prefix':[utils]dprofpp.com"""
$ ENDIF
$ WRITE CONFIG "$ s2p == """ + perl_setup_perl + " ''vms_prefix':[utils]s2p.com"""
$ WRITE CONFIG "$ ptar == """ + perl_setup_perl + " ''vms_prefix':[utils]ptar.com"""
$ WRITE CONFIG "$ ptardiff == """ + perl_setup_perl + " ''vms_prefix':[utils]ptardiff.com"""
+$ WRITE CONFIG "$ ptargrep == """ + perl_setup_perl + " ''vms_prefix':[utils]ptargrep.com"""
$ WRITE CONFIG "$ shasum == """ + perl_setup_perl + " ''vms_prefix':[utils]shasum.com"""
$ WRITE CONFIG "$ splain == """ + perl_setup_perl + " ''vms_prefix':[utils]splain.com"""
$ WRITE CONFIG "$ xsubpp == """ + perl_setup_perl + " ''vms_prefix':[utils]xsubpp.com"""
$ dflt = F$ENVIRONMENT("DEFAULT")
$ IF F$LOCATE("UU]",dflt).EQS.(F$LENGTH(dflt)-3)
$ THEN
+$ IF ( F$SEARCH("[.CXX_REPOSITORY]*.*").NES."" )
+$ THEN
+$ DELETE/NOLOG/NOCONFIRM [.CXX_REPOSITORY]*.*;*
+$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) CXX_REPOSITORY.DIR
+$ ENDIF
$ IF ( F$SEARCH("[]*.*").NES."" ) THEN DELETE/NOLOG/NOCONFIRM []*.*;*
$ SET DEFAULT [-]
$ SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) UU.DIR