2023-08-22. SMS. RARLAB UnRAR 5.9.4a for VMS =========================== ------------------------------------------------------------------------ This note accompanies a quick VMS port of RARLAB UnRAR version 5.9.4, a freeware program from RARLAB to extract files from a RAR archive. Some of the most obvious features ("e" and "t", for example) seem to work, but many have not been tested. As with many programs developed on UNIX(-like) systems, any features which manipulate file paths might depend on UNIX-like paths. Built and tested (slightly) in these environments: Alpha objects and executables built on VMS V8.4-2L1 with DEC C V7.4-002 and VSI C++ V7.4-008. IA64 objects and executables built on VMS V8.4-2L3 with VSI C V7.4-001 and VSI C++ V7.4-006. x86_64 objects and executables built on VMS X86_64 V9.2-1 with VSI C X7.4-785 (GEM 50X65) and VSI CXX clang version 10.0.1 (Build date: 07-31-2023). VAX is not supported, due to 64-bit arithmetic, but the VAX-specific code in the builders has not yet been removed. No testing has been done on pre-VSI VMS versions. Note that an UnRAR program built from the 5.9.4 kit identifies itself as "UNRAR 5.91". ------------------------------------------------------------------------ Home Source URLs ---------------- https://www.rarlab.com/ https://www.rarlab.com/rar_add.htm https://www.rarlab.com/rar/unrarsrc-5.9.4.tar.gz ------------------------------------------------------------------------ News ---- Version 5.9.4a 2023-08-22 --------------------------- - New. Almost completely untested. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Version 5.5.8a 2023-08-21 --------------------------- - New. Almost completely untested. ------------------------------------------------------------------------ Changes to Source Files ----------------------- Files new for VMS, in [.vms]: check_large.com Check large-file support (on Alpha). collect_deps.com Dependency collector for descrip_mkdeps.mms. decc_init.c C/C++ run-time feature initialization (LIB$INITIALIZE). decc_ver.c C compiler version info for dec_ver program. dec_ver.cpp Diagnostic program to provide build environment information. descrip.mms Main MMK or MMS description ("make") file. descrip_deps.mms Source dependency description file. descrip_mkdeps.mms Source dependency generator description file. descrip_src.mms Source list description file. stream_lf.fdl FDL definition file for a Stream_LF file. vms_notes.txt These notes. Files modified for VMS, in []: cmdmix.cpp In the version ID line in a usage report: - Added an alpha suffix (RARVER_SUFFIX) to the formerly all-numeric version number. - Added "(mt)" to indicate a multi-thread build. For example: UNRAR 5.91a (mt) freeware [...] Suffix ---^ ^^^^--- Multi-thread filefn.cpp Added a "#else" clause to clear a %CXX-I-CODEUNREACHABLE complaint. options.hpp Removed a surplus trailing comma from an enum declaration. os.hpp Changed to enable UNIX code on VMS. Changed to #define LITTLE_ENDIAN on VMS. Changed " #" to "# " in preprocessor directives to accommodate old compilers. version.hpp Added the definition of the version number alpha suffix (RARVER_SUFFIX). ------------------------------------------------------------------------ Building UnRAR -------------- Extract the files from the distribution kit. For example, starting with a zip archive named "unrar-5_9_4a_src.zip": unzip unrar-5_4_4a_src.zip The MMS/MMK builders may need some help from the user to enable the desired optional features, and/or to deal with differences between MMK and MMS features. The builder options (MMS/MMK macros) are described in the main builder file, "[.vms]descrip.mms". By default, large-file support will be enabled on all (non-VAX) systems. On Alpha, the builder will initially assume that large-file support is available, but will test large-file support before continuing. If large-file support is not available, the build will fail, and a message will advise the user to add "NOLARGE" to the build command. An old version of MMK or MMS may need a definition of "MMSDESCRIPTION_FILE". An error message should explain this, if needed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Example build commands ...................... SET DEFAULT [.unrar-5_9_4a] ! Required. MMS CLEAN ! Delete all product files ! for the current ! architecture (large-file, ! except on VAX). MMS /MACRO = NOLARGE=1 CLEAN ! Delete all product files ! for the current ! architecture (small-file). MMS CLEAN_ALL ! Delete all product files ! for all known architectures. MMS ! Standard build. (Large-file, ! except on VAX.) MMS /MACRO = (NOLARGE=1) ! Small-file build. To enable an UNRAR command: 1. Set the DCL symbol for the foreign command: UNRAR :== $ actual_device:[actual.directory]UNRAR.EXE 2. Define a logical name for the UnRAR shareable image: define UNRAR_SHR actual_device:[actual.directory]UNRAR_SHR.EXE Code in this shareable image is used to set some C RTL features, including DECC$ARGV_PARSE_STYLE, which needs some special handling. DECC$ARGV_PARSE_STYLE causes the command-line case to be preserved if the user has SET PROCESS /PARSE_STYLE = EXTENDED. To be effective, it must be set before the main program begins execution, which, for a C++ program, seems to require using LIB$INITIALIZE in a shareable image like this. A privileged user could remove the requirement to define this logical name by putting the appropriate UNRAR_SHR.EXE into SYS$SHARE, but this could cause trouble if some future UnRAR version requires an incompatible shareable image. Defining the logical name when defining the foreign-command symbol is a more reliable method. Try to read the original documentation to learn how to use UnRAR.