The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
$!
$!  MAKESFX.COM:  command-procedure to create self-extracting ZIP archives
$!                usage:  @MAKESFX foo    (foo.zip -> foo.exe)
$!
$!  Change history:
$!
$!  Date      Who   What
$!  --------  ----  -----------------------------------------------------------
$!  19940804  MPJZ  Created
$!  19940810  GRR   Removed superflous creation of name symbol
$!  20000113  MPJZ  Better symbol check, fixed bug in zip "-A" check
$!
$!  MPJZ: Martin P.J. Zinser
$!
$!  For this to work a symbol unzipsfx has to be defined which contains the
$!  location of the unzip stub (e.g., unzipsfx:== device:[dir]unzipsfx.exe)
$!
$!  The zipfile given in p1 will be concatenated with unzipsfx and given a
$!  filename extension of .exe.  The default file extension for p1 is .zip
$!
$!  Use at your own risk, there is no guarantee here.  If it doesn't work,
$!  blame me (zinser@decus.de), not the people from Info-ZIP.
$!
$!-----------------------------------------------------------------------------
$!
$! First check stub related stuff
$!
$ if (f$type(unzipsfx).nes."STRING")
$ then
$   type sys$input
You need to define the symbol "unzipsfx" to point to the location of the
unzipsfx stub before invoking this procedure.
Exiting now...
$   exit 2
$ endif
$ usfx = f$parse(unzipsfx) - ";"
$ if (f$search(usfx).eqs."")
$ then
$   write sys$output "The unzipsfx stub can not be found on the location"
$   write sys$output "pointed to by the unzipsfx symbol -- ''usfx'"
$   write sys$output "Exiting now"
$   exit 2
$ endif
$!
$! Now check the input file
$!
$ if (p1.eqs."")
$ then
$   type sys$input
Required parameter input-file missing
Exiting now...
$   exit 2
$ endif
$ inf = p1
$ file = f$parse(inf,,,"DEVICE") + f$parse(inf,,,"DIRECTORY") + -
         f$parse(inf,,,"NAME")
$ finf = file + f$parse(inf,".ZIP",,"TYPE") + f$parse(inf,,,"VERSION")
$ if (f$search(finf).eqs."")
$ then
$   write sys$output "Input file ''finf' does not exist"
$   exit 2
$ endif
$!
$! Finally create the self-extracting archive
$!
$ copy 'usfx','finf' 'file'.exe
$!
$! Zip "-A" will make the resulting archive compatible with other
$! unzip programs, but is not essential for running the exe.
$!
$ if (f$type(zip).eqs."STRING") then zip "-A" 'file'.exe
$ exit