2024-08-28. SMS. RARLAB UnRAR 7.0.9a for VMS =========================== ------------------------------------------------------------------------ This note accompanies a quick VMS port of RARLAB UnRAR version 7.0.9, 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 this environment: x86_64 objects and executables built on VMS X86_64 V9.2-2 with VSI C x86-64 V7.5-009 (GEM 50XBR) and VSI C++ A10.1-2.240805 (clang version 10.0.1, Build date: 08-05-2024). Earlier C++ compilers may cause build failures (multiple warnings, "%ILINK-W-USEUNDEF, undefined symbol ERRHANDLER referenced". VAX is not supported, due to 64-bit arithmetic. Alpha and IA64 are not supported, due to lack of compiler support for C++11 features in this version of the UnRAR code. References to architectures before x86_64 in the VMS builders and in this document have not yet been removed. Note that an UnRAR program built from the 7.0.9 kit identifies itself as "UNRAR 7.01". ------------------------------------------------------------------------ Home Source URLs ---------------- https://www.rarlab.com/ https://www.rarlab.com/rar_add.htm https://www.rarlab.com/rar/unrarsrc-7.0.9.tar.gz ------------------------------------------------------------------------ News ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Version 7.0.9a 2024-08-28 --------------------------- General update to version 7.0.9. The UnRAR author has kindly incorporated source changes for VMS into the mainstream sources, so only differences in this VMS kit are the VMS builders. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Version 7.0.7a 2024-04-04 --------------------------- General update to version 7.0.7. Support restricted to x86_64. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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. ------------------------------------------------------------------------ Building UnRAR -------------- Extract the files from the distribution kit. For example, starting with a zip archive named "unrar-7_0_9a_src.zip": unzip unrar-7_0_9a_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-7_0_9a] ! Required. MMS /DESCRIP = [.VMS] CLEAN ! Delete all product files ! for the current ! architecture (large-file, ! except on VAX). MMS /DESCRIP = [.VMS] - ! Delete all product files /MACRO = NOLARGE=1 CLEAN ! for the current ! architecture (small-file). MMS /DESCRIP = [.VMS] CLEAN_ALL ! Delete all product files ! for all known architectures. MMS /DESCRIP = [.VMS] ! Standard build. (Large-file, ! except on VAX.) MMS /DESCRIP = [.VMS] - ! Small-file build. /MACRO = (NOLARGE=1) 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.