summaryrefslogtreecommitdiff
path: root/3rdparty/plibsys/platforms/vms-general
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2022-08-27 23:52:56 -0500
committersanine <sanine.not@pm.me>2022-08-27 23:52:56 -0500
commita4dd0ad63c00f4dee3b86dfd3075d1d61b2b3180 (patch)
tree13bd5bfa15e6fea2a12f176bae79adf9c6fd0933 /3rdparty/plibsys/platforms/vms-general
parentbde3e4f1bb7b8f8abca0884a7d994ee1c17a66b1 (diff)
add plibsys
Diffstat (limited to '3rdparty/plibsys/platforms/vms-general')
-rw-r--r--3rdparty/plibsys/platforms/vms-general/README.md49
-rw-r--r--3rdparty/plibsys/platforms/vms-general/build_vms.com616
-rw-r--r--3rdparty/plibsys/platforms/vms-general/plibsys.opt540
-rw-r--r--3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c238
4 files changed, 1443 insertions, 0 deletions
diff --git a/3rdparty/plibsys/platforms/vms-general/README.md b/3rdparty/plibsys/platforms/vms-general/README.md
new file mode 100644
index 0000000..9bbfc85
--- /dev/null
+++ b/3rdparty/plibsys/platforms/vms-general/README.md
@@ -0,0 +1,49 @@
+## OpenVMS
+
+This directory contains mainly a build script for OpenVMS.
+
+## Requirements
+
+* OpenVMS 8.4 or later (Alpha or IA64), VAX is not supported
+* DEC CC 6.5 or later
+* DEC CXX 7.1 or later (for tests only)
+
+## Building
+
+Library can be built with 32-bit or 64-bit pointers. By default 64-bit
+pointers are used. Use `32` parameter to switch behaviour.
+
+Test suit is optional and is not built by default. Use `TESTS` parameter to
+enable tests.
+
+There are other build parametes available, plese look inside the
+`build_vms.com` (a DCL-based script) to see the detailed description for
+all of them.
+
+Object library (.OLB) and shareable image (.EXE) are built. An object
+library acts like a widely-known static library, and a shareable image
+acts like a shared library. All libraries and tests are placed inside the
+`[.ALPHA]` or `[.IA64]` directory depending on a host architecture.
+
+Do not forget to define a logical name for a shareable image of the library
+before running programs which use it:
+
+`DEFINE PLIBSYS SYS$SYSROOT:[BUILD_DIR]PLIBSYS.EXE`
+
+You can also place an image into the `SYS$SHARE` directory instead of
+defining a logical name.
+
+Here are some examples of the build commands:
+
+* `@build_vms.com` builds only the libraries (64-bit pointers).
+* `@build_vms.com 32 TESTS` builds libraries (32-bit pointers) and all
+the tests.
+* `@build_vms.com NOLIB RUN_TESTS` only runs already built tests.
+* `@build_vms.com CLEAN` cleans all the files produced during a build.
+
+## More
+
+OpenVMS can mangle long (> 31 characters) symbol names in a compiled object
+to fit the limit. Sometimes it is useful to know the mangled name of a
+symbol. Use the `vms_shorten_symbol.c` program to get a mangled name. See
+details inside.
diff --git a/3rdparty/plibsys/platforms/vms-general/build_vms.com b/3rdparty/plibsys/platforms/vms-general/build_vms.com
new file mode 100644
index 0000000..ce5e95c
--- /dev/null
+++ b/3rdparty/plibsys/platforms/vms-general/build_vms.com
@@ -0,0 +1,616 @@
+$!
+$! Copyright 2011, Richard Levitte <richard@levitte.org>
+$! Copyright 2014, John Malmberg <wb8tyw@qsl.net>
+$! Copyright 2016-2018, Alexander Saprykin <saprykin.spb@gmail.com>
+$!
+$! Permission to use, copy, modify, and/or distribute this software for any
+$! purpose with or without fee is hereby granted, provided that the above
+$! copyright notice and this permission notice appear in all copies.
+$!
+$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+$!
+$!===========================================================================
+$! Command-line options:
+$!
+$! 32 Compile with 32-bit pointers.
+$! BIGENDIAN Compile for a big endian host.
+$! CCQUAL=x Add "x" to the C compiler qualifiers.
+$! DEBUG Build in debug mode.
+$! CLEAN Only perform clean after the previous build.
+$! TESTS=(x) Build library tests. Comma separated test names or leave
+$! empty to build all the tests.
+$! Example 1 (curtain tests): TESTS=(pmem,puthread)
+$! Example 2 (all tests): TESTS
+$! RUN_TESTS Runs all tests.
+$! NOLIB Skip library buidling. Useful when you want to rebuild
+$! particular tests.
+$!===========================================================================
+$!
+$!
+$! Save the original default dev:[dir], and arrange for its restoration
+$! at exit.
+$!---------------------------------------------------------------------
+$ orig_def = f$environment("DEFAULT")
+$ on error then goto common_exit
+$ on severe_error then goto common_exit
+$ on control_y then goto common_exit
+$!
+$ ctrl_y = 1556
+$ proc = f$environment("PROCEDURE")
+$ proc_fid = f$file_attributes(proc, "FID")
+$ proc_dev = f$parse(proc, , , "DEVICE")
+$ proc_dir = f$parse(proc, , , "DIRECTORY")
+$ proc_name = f$parse(proc, , , "NAME")
+$ proc_type = f$parse(proc, , , "TYPE")
+$ proc_dev_dir = proc_dev + proc_dir
+$!
+$! Have to manually parse the device for a search list.
+$! Can not use the f$parse() as it will return the first name
+$! in the search list.
+$!
+$ orig_def_dev = f$element(0, ":", orig_def) + ":"
+$ if orig_def_dev .eqs. "::" then orig_def_dev = "sys$disk:"
+$ test_proc = orig_def_dev + proc_dir + proc_name + proc_type
+$!
+$! If we can find this file using the default directory
+$! then we know that we should use the original device from the
+$! default directory which could be a search list.
+$!
+$ test_proc_fid = f$file_attributes(test_proc, "FID")
+$!
+$ if (test_proc_fid .eq. proc_fid)
+$ then
+$ proc_dev_dir = orig_def_dev + proc_dir
+$ endif
+$!
+$! Verbose output message stuff. Define symbol to "write sys$output".
+$! vo_c - verbose output for compile
+$!
+$ vo_c := "write sys$output"
+$!
+$! Determine the main distribution directory ("[--]") in an
+$! ODS5-tolerant (case-insensitive) way. (We do assume that the only
+$! "]" or ">" is the one at the end.)
+$!
+$! Some non-US VMS installations report ">" for the directory delimiter
+$! so do not assume that it is "]".
+$!
+$ orig_def_len = f$length(orig_def)
+$ delim = f$extract(orig_def_len - 1, 1, orig_def)
+$!
+$ set default 'proc_dev_dir'
+$ set default [--.src]
+$ base_src_dir = f$environment("default")
+$ set default 'proc_dev_dir'
+$!
+$! Define the architecture-specific destination directory name
+$! -----------------------------------------------------------
+$!
+$ if (f$getsyi("HW_MODEL") .lt. 1024)
+$ then
+$ 'vo_c' "%PLIBSYS-F-NOTSUP, VAX platform is not supported, sorry :("
+$ goto common_exit
+$ else
+$ arch_name = ""
+$ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE")
+$!
+$ if (arch_name .eqs. "") then arch_name = "UNK"
+$!
+$ node_swvers = f$getsyi("node_swvers")
+$ version_patch = f$extract(1, f$length(node_swvers), node_swvers)
+$ maj_ver = f$element(0, ".", version_patch)
+$ min_ver_patch = f$element(1, ".", version_patch)
+$ min_ver = f$element(0, "-", min_ver_patch)
+$ patch = f$element(1, "-", min_ver_patch)
+$!
+$ if maj_ver .lts. "8" .or. min_ver .lts. "4"
+$ then
+$ 'vo_c' "%PLIBSYS-F-NOTSUP, only OpenVMS 8.4 and above are supported, sorry :("
+$ goto common_exit
+$ endif
+$ endif
+$!
+$ objdir = proc_dev_dir - delim + ".''arch_name'" + delim
+$!
+$! Parse input arguments
+$! ---------------------
+$! Allow arguments to be grouped together with comma or separated by spaces
+$! Do no know if we will need more than 8.
+$ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + ","
+$ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + ","
+$!
+$! Provide lower case version to simplify parsing.
+$ args_lower = f$edit(args, "LOWERCASE,COLLAPSE")
+$!
+$ args_len = f$length(args)
+$ args_lower_len = f$length(args_lower)
+$!
+$ if f$locate(",clean,", args_lower) .lt. args_lower_len
+$ then
+$ 'vo_c' "Cleaning up previous build..."
+$ set default 'proc_dev_dir'
+$!
+$ if f$search("''arch_name'.DIR") .nes. ""
+$ then
+$ set prot=w:d []'arch_name'.DIR;*
+$ delete/tree [.'arch_name'...]*.*;*
+$ delete []'arch_name'.DIR;*
+$ endif
+$!
+$ goto common_exit
+$ endif
+$!
+$ build_64 = 1
+$ if f$locate(",32,", args_lower) .lt. args_lower_len
+$ then
+$ build_64 = 0
+$ endif
+$!
+$ big_endian = 0
+$ if f$locate(",bigendian,", args_lower) .lt. args_lower_len
+$ then
+$ big_endian = 1
+$ endif
+$!
+$ cc_extra = ""
+$ args_loc = f$locate(",ccqual=", args_lower)
+$ if args_loc .lt. args_lower_len
+$ then
+$ arg = f$extract(args_loc + 1, args_lower_len, args_lower)
+$ arg_val = f$element(0, ",", arg)
+$ cc_extra = f$element(1, "=", arg_val)
+$ endif
+$!
+$ is_debug = 0
+$ if f$locate(",debug,", args_lower) .lt. args_lower_len
+$ then
+$ is_debug = 1
+$ endif
+$!
+$ is_tests = 0
+$ test_list = ""
+$ if f$locate(",tests,", args_lower) .lt. args_lower_len
+$ then
+$ is_tests = 1
+$ else
+$ args_loc = f$locate(",tests=(", args_lower)
+$ if args_loc .lt. args_lower_len
+$ then
+$ is_tests = 1
+$ arg = f$extract(args_loc + 1, args_lower_len, args_lower)
+$ arg_val = f$element(0, ")", arg)
+$ test_list_val = f$element(1, "=", arg_val) - "(" - ")"
+$ test_list_val = f$edit(test_list_val, "COLLAPSE")
+$ test_list_counter = 0
+$
+$ test_list_loop:
+$ next_test_val = f$element (test_list_counter, ",", test_list_val)
+$ if next_test_val .nes. "" .and. next_test_val .nes. ","
+$ then
+$ test_list = test_list + next_test_val + " "
+$ test_list_counter = test_list_counter + 1
+$ goto test_list_loop
+$ endif
+$ endif
+$ endif
+$!
+$ run_tests = 0
+$ if f$locate(",run_tests,", args_lower) .lt. args_lower_len
+$ then
+$ run_tests = 1
+$ endif
+$!
+$! Prepare build directory
+$! -----------------------
+$!
+$! When building on a search list, need to do a create to make sure that
+$! the output directory exists, since the clean procedure tries to delete
+$! it.
+$!
+$ if f$search("''proc_dev_dir'''arch_name'.DIR") .eqs. ""
+$ then
+$ create/dir 'objdir'/prot=o:rwed
+$ endif
+$!
+$ set default 'objdir'
+$ if f$search("CXX_REPOSITORY.DIR") .nes. ""
+$ then
+$ set prot=w:d []CXX_REPOSITORY.DIR;*
+$ delete/tree [.CXX_REPOSITORY...]*.*;*
+$ delete []CXX_REPOSITORY.DIR;*
+$ endif
+$!
+$ if f$locate(",nolib,", args_lower) .lt. args_lower_len
+$ then
+$ goto build_tests
+$ endif
+$!
+$! Generate platform-specific config file
+$! --------------------------------------
+$!
+$ if f$search("plibsysconfig.h") .nes. "" then delete plibsysconfig.h;*
+$!
+$! Get the version number
+$! ----------------------
+$!
+$ i = 0
+$ open/read/error=version_loop_end vhf [---]CMakeLists.txt
+$ version_loop:
+$ read/end=version_loop_end vhf line_in
+$!
+$ if line_in .eqs. "" then goto version_loop
+$!
+$ if f$locate("set (PLIBSYS_VERSION_MAJOR ", line_in) .eq. 0
+$ then
+$ plibsys_vmajor = f$element(2, " ", line_in) - ")"
+$ i = i + 1
+$ endif
+$!
+$ if f$locate("set (PLIBSYS_VERSION_MINOR ", line_in) .eq. 0
+$ then
+$ plibsys_vminor = f$element(2, " ", line_in) - ")"
+$ i = i + 1
+$ endif
+$!
+$ if f$locate("set (PLIBSYS_VERSION_PATCH ", line_in) .eq. 0
+$ then
+$ plibsys_vpatch = f$element(2, " ", line_in) - ")"
+$ i = i + 1
+$ endif
+$!
+$ if f$locate("set (PLIBSYS_VERSION_NUM ", line_in) .eq. 0
+$ then
+$ plibsys_vnum = f$element(2, " ", line_in) - ")"
+$ i = i + 1
+$ endif
+$!
+$ if i .lt 4 then goto version_loop
+$ version_loop_end:
+$ close vhf
+$!
+$! Write config file
+$! -----------------
+$!
+$ open/write/error=config_write_end chf plibsysconfig.h
+$ write chf "#ifndef PLIBSYS_HEADER_PLIBSYSCONFIG_H"
+$ write chf "#define PLIBSYS_HEADER_PLIBSYSCONFIG_H"
+$ write chf ""
+$ write chf "#define PLIBSYS_VERSION_MAJOR ''plibsys_vmajor'"
+$ write chf "#define PLIBSYS_VERSION_MINOR ''plibsys_vminor'"
+$ write chf "#define PLIBSYS_VERSION_PATCH ''plibsys_vpatch'"
+$ write chf "#define PLIBSYS_VERSION_STR ""''plibsys_vmajor'.''plibsys_vminor'.''plibsys_vpatch'"""
+$ write chf "#define PLIBSYS_VERSION ''plibsys_vnum'"
+$ write chf ""
+$ write chf "#define PLIBSYS_SIZEOF_SAFAMILY_T 1"
+$ write chf ""
+$ write chf "#include <pmacros.h>"
+$ write chf ""
+$ write chf "#include <float.h>"
+$ write chf "#include <limits.h>"
+$ write chf ""
+$ write chf "P_BEGIN_DECLS"
+$ write chf ""
+$ write chf "#define P_MINFLOAT FLT_MIN"
+$ write chf "#define P_MAXFLOAT FLT_MAX"
+$ write chf "#define P_MINDOUBLE DBL_MIN"
+$ write chf "#define P_MAXDOUBLE DBL_MAX"
+$ write chf "#define P_MINSHORT SHRT_MIN"
+$ write chf "#define P_MAXSHORT SHRT_MAX"
+$ write chf "#define P_MAXUSHORT USHRT_MAX"
+$ write chf "#define P_MININT INT_MIN"
+$ write chf "#define P_MAXINT INT_MAX"
+$ write chf "#define P_MAXUINT UINT_MAX"
+$ write chf "#define P_MINLONG LONG_MIN"
+$ write chf "#define P_MAXLONG LONG_MAX"
+$ write chf "#define P_MAXULONG ULONG_MAX"
+$ write chf ""
+$ write chf "#define PLIBSYS_MMAP_HAS_MAP_ANONYMOUS"
+$ write chf "#define PLIBSYS_HAS_NANOSLEEP"
+$ write chf "#define PLIBSYS_HAS_GETADDRINFO"
+$ write chf "#define PLIBSYS_HAS_POSIX_SCHEDULING"
+$ write chf "#define PLIBSYS_HAS_POSIX_STACKSIZE"
+$ write chf "#define PLIBSYS_HAS_SOCKADDR_STORAGE"
+$ write chf "#define PLIBSYS_SOCKADDR_HAS_SA_LEN"
+$ write chf "#define PLIBSYS_SOCKADDR_IN6_HAS_SCOPEID"
+$ write chf "#define PLIBSYS_SOCKADDR_IN6_HAS_FLOWINFO"
+$ write chf ""
+$!
+$ if build_64 .eqs. "1"
+$ then
+$ write chf "#define PLIBSYS_SIZEOF_VOID_P 8"
+$ write chf "#define PLIBSYS_SIZEOF_SIZE_T 8"
+$ else
+$ write chf "#define PLIBSYS_SIZEOF_VOID_P 4"
+$ write chf "#define PLIBSYS_SIZEOF_SIZE_T 4"
+$ endif
+$!
+$ write chf "#define PLIBSYS_SIZEOF_LONG 4"
+$ write chf ""
+$!
+$ if big_endian .eqs. "1"
+$ then
+$ write chf "#define P_BYTE_ORDER P_BIG_ENDIAN"
+$ else
+$ write chf "#define P_BYTE_ORDER P_LITTLE_ENDIAN"
+$ endif
+$!
+$ write chf ""
+$ write chf "P_END_DECLS"
+$ write chf ""
+$ write chf "#endif /* PLIBSYS_HEADER_PLIBSYSCONFIG_H */"
+$ config_write_end:
+$ close chf
+$!
+$! Prepare sources for compilation
+$! -------------------------------
+$!
+$ cc_link_params = ""
+$ cc_params = "/NAMES=(AS_IS,SHORTENED)"
+$ cc_params = cc_params + "/DEFINE=(PLIBSYS_COMPILATION,_REENTRANT,_POSIX_EXIT)"
+$ cc_params = cc_params + "/INCLUDE_DIRECTORY=(''objdir',''base_src_dir')"
+$ cc_params = cc_params + "/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS"
+$!
+$ if build_64 .eqs. "1"
+$ then
+$ cc_params = cc_params + "/POINTER_SIZE=64"
+$ else
+$ cc_params = cc_params + "/POINTER_SIZE=32"
+$ endif
+$!
+$ if cc_extra .nes. ""
+$ then
+$ cc_params = cc_params + " " + cc_extra
+$ endif
+$!
+$ if is_debug .eqs. "1"
+$ then
+$ cc_params = cc_params + "/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL"
+$ cc_link_params = "/DEBUG/TRACEBACK"
+$ else
+$ cc_link_params = "/NODEBUG/NOTRACEBACK"
+$ endif
+$!
+$ plibsys_src = "patomic-decc.c pcondvariable-posix.c pcryptohash-gost3411.c pcryptohash-md5.c"
+$ plibsys_src = plibsys_src + " pcryptohash-sha1.c pcryptohash-sha2-256.c pcryptohash-sha2-512.c"
+$ plibsys_src = plibsys_src + " pcryptohash-sha3.c pcryptohash.c pdir-posix.c pdir.c"
+$ plibsys_src = plibsys_src + " perror.c pfile.c phashtable.c pinifile.c pipc.c plibraryloader-posix.c"
+$ plibsys_src = plibsys_src + " plist.c pmain.c pmem.c pmutex-posix.c pprocess.c prwlock-posix.c"
+$ plibsys_src = plibsys_src + " psemaphore-posix.c pshm-posix.c pshmbuffer.c psocket.c"
+$ plibsys_src = plibsys_src + " psocketaddress.c pspinlock-decc.c pstring.c psysclose-unix.c"
+$ plibsys_src = plibsys_src + " ptimeprofiler-posix.c ptimeprofiler.c ptree-avl.c ptree-bst.c"
+$ plibsys_src = plibsys_src + " ptree-rb.c ptree.c puthread-posix.c puthread.c"
+$!
+$! Inform about building
+$! ---------------------
+$!
+$ if build_64 .eqs. "1"
+$ then
+$ 'vo_c' "Building for ''arch_name' (64-bit)"
+$ else
+$ 'vo_c' "Building for ''arch_name' (32-bit)"
+$ endif
+$!
+$! Compile library modules
+$! -----------------------
+$!
+$ 'vo_c' "Compiling object modules..."
+$ src_counter = 0
+$ plibsys_src = f$edit(plibsys_src, "COMPRESS")
+$ plibsys_objs = ""
+$!
+$ src_loop:
+$ next_src = f$element (src_counter, " ", plibsys_src)
+$ if next_src .nes. "" .and. next_src .nes. " "
+$ then
+$ 'vo_c' "[CC] ''next_src'"
+$ cc [---.src]'next_src' 'cc_params'
+$!
+$ src_counter = src_counter + 1
+$!
+$ obj_file = f$extract (0, f$length (next_src) - 1, next_src) + "obj"
+$ plibsys_objs = plibsys_objs + "''obj_file',"
+$ purge 'obj_file'
+$!
+$ goto src_loop
+$ endif
+$!
+$ plibsys_objs = f$extract (0, f$length (plibsys_objs) - 1, plibsys_objs)
+$!
+$! Create library
+$! --------------
+$!
+$ 'vo_c' "Creating object library..."
+$ library/CREATE/INSERT/REPLACE /LIST=PLIBSYS.LIS PLIBSYS.OLB 'plibsys_objs'
+$ library/COMPRESS PLIBSYS.OLB
+$ purge PLIBSYS.OLB
+$ purge PLIBSYS.LIS
+$!
+$ 'vo_c' "Creating shared library..."
+$ link/SHAREABLE=PLIBSYS.EXE /MAP=PLIBSYS.MAP 'cc_link_params' 'plibsys_objs', [-]plibsys.opt/OPTION
+$ purge PLIBSYS.EXE
+$ purge PLIBSYS.MAP
+$!
+$! Testing area
+$! ------------
+$!
+$ build_tests:
+$ test_list_full = "patomic pcondvariable pcryptohash pdir"
+$ test_list_full = test_list_full + " perror pfile phashtable pinifile plibraryloader plist"
+$ test_list_full = test_list_full + " pmacros pmain pmem pmutex pprocess prwlock psemaphore"
+$ test_list_full = test_list_full + " pshm pshmbuffer psocket psocketaddress pspinlock pstdarg"
+$ test_list_full = test_list_full + " pstring ptimeprofiler ptree ptypes puthread"
+$!
+$ if is_tests .eqs. "0"
+$ then
+$ goto build_done
+$ endif
+$!
+$! Write link options file
+$! -----------------------
+$!
+$ if f$search("plibsys_link.opt") .nes. "" then delete plibsys_link.opt;*
+$!
+$ open/write/error=link_write_end lhf plibsys_link.opt
+$ write lhf "''objdir'PLIBSYS.EXE/SHARE"
+$ write lhf ""
+$ link_write_end:
+$ close lhf
+$!
+$! Compile tests
+$! -------------------------
+$!
+$ if test_list .nes. ""
+$ then
+$ plibsys_tests = f$edit(test_list, "TRIM")
+$ else
+$ plibsys_tests = test_list_full
+$ endif
+$!
+$ 'vo_c' "Compiling test executables..."
+$ test_counter = 0
+$ plibsys_tests = f$edit(plibsys_tests, "COMPRESS")
+$!
+$ cxx_params = "/INCLUDE=(''objdir',''base_src_dir')"
+$ cxx_params = cxx_params + "/DEFINE=(__USE_STD_IOSTREAM)/NAMES=(AS_IS, SHORTENED)"
+$ cxx_params = cxx_params + "/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS"
+$!
+$ if build_64 .eqs. "1"
+$ then
+$ set noon
+$ define/user/nolog sys$output NL:
+$ define/user/nolog sys$error NL:
+$ cxx/POINTER_SIZE=64=ARGV NL:
+$!
+$ if ($STATUS .and. %X0FFF0000) .eq. %X00030000
+$ then
+$!
+$! If we got here, it means DCL complained like this:
+$! %DCL-W-NOVALU, value not allowed - remove value specification
+$! \64=\
+$!
+$! If the compiler was run, logicals defined in /USER would
+$! have been deassigned automatically. However, when DCL
+$! complains, they aren't, so we do it here (it might be
+$! unnecessary, but just in case there will be another error
+$! message further on that we don't want to miss).
+$!
+$ deassign/user/nolog sys$error
+$ deassign/user/nolog sys$output
+$ cxx_params = cxx_params + "/POINTER_SIZE=64"
+$ else
+$ cxx_params = cxx_params + "/POINTER_SIZE=64=ARGV"
+$ endif
+$ else
+$ cxx_params = cxx_params + "/POINTER_SIZE=32"
+$ endif
+$!
+$ if is_debug .eqs. "1"
+$ then
+$ cxx_params = cxx_params + "/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL"
+$ endif
+$!
+$ test_loop:
+$ next_test = f$element (test_counter, " ", plibsys_tests)
+$ if next_test .nes. "" .and. next_test .nes. " "
+$ then
+$ next_test = next_test + "_test"
+$ 'vo_c' "[CXX ] ''next_test'.cpp"
+$ cxx [---.tests]'next_test'.cpp 'cxx_params'
+$!
+$ 'vo_c' "[CXXLINK] ''next_test'.obj"
+$ cxxlink 'next_test'.obj,'objdir'plibsys_link.opt/OPTION /THREADS_ENABLE
+$!
+$ if f$search("CXX_REPOSITORY.DIR") .nes. ""
+$ then
+$ set prot=w:d []CXX_REPOSITORY.DIR;*
+$ delete/tree [.CXX_REPOSITORY...]*.*;*
+$ delete []CXX_REPOSITORY.DIR;*
+$ endif
+$!
+$ purge 'next_test'.obj
+$ purge 'next_test'.exe
+$!
+$ test_counter = test_counter + 1
+$ goto test_loop
+$ endif
+$!
+$ build_done:
+$ 'vo_c' "Build done."
+$!
+$! Run unit tests
+$! --------------
+$!
+$ if run_tests .eqs. "0"
+$ then
+$ if is_tests .eqs. "1"
+$ then
+$ 'vo_c' "To run tests invoke: @build_vms.com NOLIB RUN_TESTS"
+$ endif
+$ goto common_exit
+$ endif
+$!
+$ 'vo_c' "Running tests..."
+$ test_counter = 0
+$ tests_passed = 0
+$!
+$ run_loop:
+$ next_test = f$element (test_counter, " ", test_list_full)
+$ if next_test .nes. "" .and. next_test .nes. " "
+$ then
+$ if f$search("''next_test'_test.exe") .eqs. ""
+$ then
+$ 'vo_c' "[SKIP] Test not found: ''next_test'"
+$ goto run_loop_next
+$ endif
+$!
+$ 'vo_c' "[RUN ] ''next_test'"
+$!
+$ define/user/nolog sys$error NL:
+$ define/user/nolog sys$output NL:
+$ define/user/nolog plibsys 'objdir'PLIBSYS.EXE
+$ define/user/nolog test_imgdir 'objdir'
+$!
+$! Disable error cheking for the test binary
+$!
+$ set noon
+$!
+$ xrun := $test_imgdir:'next_test'_test.exe
+$ if next_test .eqs. "plibraryloader"
+$ then
+$ xrun 'objdir'PLIBSYS.EXE
+$ else
+$ xrun
+$ endif
+$!
+$ if $STATUS .eqs. "%X00000001"
+$ then
+$ 'vo_c' "[PASS] Test passed: ''next_test'"
+$ tests_passed = tests_passed + 1
+$ else
+$ 'vo_c' "[FAIL] *** Test failed: ''next_test'"
+$ endif
+$!
+$ set on
+$!
+$ run_loop_next:
+$ test_counter = test_counter + 1
+$ goto run_loop
+$ endif
+$!
+$ 'vo_c' "Tests passed: ''tests_passed'/''test_counter'"
+$!
+$! In case of error during the last test
+$ deassign/user/nolog sys$error
+$ deassign/user/nolog sys$output
+$ deassign/user/nolog plibsys
+$ deassign/user/nolog test_imgdir
+$!
+$ common_exit:
+$ set default 'orig_def'
+$ exit
diff --git a/3rdparty/plibsys/platforms/vms-general/plibsys.opt b/3rdparty/plibsys/platforms/vms-general/plibsys.opt
new file mode 100644
index 0000000..408b884
--- /dev/null
+++ b/3rdparty/plibsys/platforms/vms-general/plibsys.opt
@@ -0,0 +1,540 @@
+GSMATCH=LEQUAL,3,0
+IDENTIFICATION="plibsys"
+CASE_SENSITIVE=YES
+!
+! patomic.h
+!
+SYMBOL_VECTOR=(p_atomic_int_get=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_GET/p_atomic_int_get=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_set=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_SET/p_atomic_int_set=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_inc=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_INC/p_atomic_int_inc=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_dec_and_test=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_DEC_AND_TEST/p_atomic_int_dec_and_test=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_compare_an2fhrots$=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_COMPARE_AN2UA3PBG$/p_atomic_int_compare_an2fhrots$=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_add=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_ADD/p_atomic_int_add=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_and=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_AND/p_atomic_int_and=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_or=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_OR/p_atomic_int_or=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_int_xor=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_INT_XOR/p_atomic_int_xor=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_get=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_GET/p_atomic_pointer_get=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_set=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_SET/p_atomic_pointer_set=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_compar0usq95l$=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_COMPAR19ERBSM$/p_atomic_pointer_compar0usq95l$=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_add=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_ADD/p_atomic_pointer_add=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_and=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_AND/p_atomic_pointer_and=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_or=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_OR/p_atomic_pointer_or=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_pointer_xor=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_POINTER_XOR/p_atomic_pointer_xor=PROCEDURE)
+SYMBOL_VECTOR=(p_atomic_is_lock_free=PROCEDURE)
+SYMBOL_VECTOR=(P_ATOMIC_IS_LOCK_FREE/p_atomic_is_lock_free=PROCEDURE)
+!
+! pcondvariable.h
+!
+SYMBOL_VECTOR=(p_cond_variable_new=PROCEDURE)
+SYMBOL_VECTOR=(P_COND_VARIABLE_NEW/p_cond_variable_new=PROCEDURE)
+SYMBOL_VECTOR=(p_cond_variable_free=PROCEDURE)
+SYMBOL_VECTOR=(P_COND_VARIABLE_FREE/p_cond_variable_free=PROCEDURE)
+SYMBOL_VECTOR=(p_cond_variable_wait=PROCEDURE)
+SYMBOL_VECTOR=(P_COND_VARIABLE_WAIT/p_cond_variable_wait=PROCEDURE)
+SYMBOL_VECTOR=(p_cond_variable_signal=PROCEDURE)
+SYMBOL_VECTOR=(P_COND_VARIABLE_SIGNAL/p_cond_variable_signal=PROCEDURE)
+SYMBOL_VECTOR=(p_cond_variable_broadcast=PROCEDURE)
+SYMBOL_VECTOR=(P_COND_VARIABLE_BROADCAST/p_cond_variable_broadcast=PROCEDURE)
+!
+! pcryptohash.h
+!
+SYMBOL_VECTOR=(p_crypto_hash_new=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_NEW/p_crypto_hash_new=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_update=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_UPDATE/p_crypto_hash_update=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_reset=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_RESET/p_crypto_hash_reset=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_get_string=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_STRING/p_crypto_hash_get_string=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_get_digest=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_DIGEST/p_crypto_hash_get_digest=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_get_length=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_LENGTH/p_crypto_hash_get_length=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_get_type=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_GET_TYPE/p_crypto_hash_get_type=PROCEDURE)
+SYMBOL_VECTOR=(p_crypto_hash_free=PROCEDURE)
+SYMBOL_VECTOR=(P_CRYPTO_HASH_FREE/p_crypto_hash_free=PROCEDURE)
+!
+! pdir.h
+!
+SYMBOL_VECTOR=(p_dir_new=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_NEW/p_dir_new=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_create=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_CREATE/p_dir_create=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_remove=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_REMOVE/p_dir_remove=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_is_exists=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_IS_EXISTS/p_dir_is_exists=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_get_path=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_GET_PATH/p_dir_get_path=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_get_next_entry=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_GET_NEXT_ENTRY/p_dir_get_next_entry=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_rewind=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_REWIND/p_dir_rewind=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_entry_free=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_ENTRY_FREE/p_dir_entry_free=PROCEDURE)
+SYMBOL_VECTOR=(p_dir_free=PROCEDURE)
+SYMBOL_VECTOR=(P_DIR_FREE/p_dir_free=PROCEDURE)
+!
+! perror.h
+!
+SYMBOL_VECTOR=(p_error_new=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_NEW/p_error_new=PROCEDURE)
+SYMBOL_VECTOR=(p_error_new_literal=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_NEW_LITERAL/p_error_new_literal=PROCEDURE)
+SYMBOL_VECTOR=(p_error_get_message=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_GET_MESSAGE/p_error_get_message=PROCEDURE)
+SYMBOL_VECTOR=(p_error_get_code=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_GET_CODE/p_error_get_code=PROCEDURE)
+SYMBOL_VECTOR=(p_error_get_native_code=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_GET_NATIVE_CODE/p_error_get_native_code=PROCEDURE)
+SYMBOL_VECTOR=(p_error_get_domain=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_GET_DOMAIN/p_error_get_domain=PROCEDURE)
+SYMBOL_VECTOR=(p_error_get_last_system=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_GET_LAST_SYSTEM/p_error_get_last_system=PROCEDURE)
+SYMBOL_VECTOR=(p_error_get_last_net=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_GET_LAST_NET/p_error_get_last_net=PROCEDURE)
+SYMBOL_VECTOR=(p_error_copy=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_COPY/p_error_copy=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_error=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_ERROR/p_error_set_error=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_error_p=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_ERROR_P/p_error_set_error_p=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_code=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_CODE/p_error_set_code=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_native_code=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_NATIVE_CODE/p_error_set_native_code=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_message=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_MESSAGE/p_error_set_message=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_last_system=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_LAST_SYSTEM/p_error_set_last_system=PROCEDURE)
+SYMBOL_VECTOR=(p_error_set_last_net=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_SET_LAST_NET/p_error_set_last_net=PROCEDURE)
+SYMBOL_VECTOR=(p_error_clear=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_CLEAR/p_error_clear=PROCEDURE)
+SYMBOL_VECTOR=(p_error_free=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_FREE/p_error_free=PROCEDURE)
+!
+! pfile.h
+!
+SYMBOL_VECTOR=(p_file_is_exists=PROCEDURE)
+SYMBOL_VECTOR=(P_ERROR_IS_EXISTS/p_file_is_exists=PROCEDURE)
+SYMBOL_VECTOR=(p_file_remove=PROCEDURE)
+SYMBOL_VECTOR=(P_FILE_REMOVE/p_file_remove=PROCEDURE)
+!
+! phashtable.h
+!
+SYMBOL_VECTOR=(p_hash_table_new=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_NEW/p_hash_table_new=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_insert=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_INSERT/p_hash_table_insert=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_lookup=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_LOOKUP/p_hash_table_lookup=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_keys=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_KEYS/p_hash_table_keys=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_values=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_VALUES/p_hash_table_values=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_free=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_FREE/p_hash_table_free=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_remove=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_REMOVE/p_hash_table_remove=PROCEDURE)
+SYMBOL_VECTOR=(p_hash_table_lookup_by_value=PROCEDURE)
+SYMBOL_VECTOR=(P_HASH_TABLE_LOOKUP_BY_VALUE/p_hash_table_lookup_by_value=PROCEDURE)
+!
+! pinifile.h
+!
+SYMBOL_VECTOR=(p_ini_file_new=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_NEW/p_ini_file_new=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_free=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_FREE/p_ini_file_free=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_parse=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_PARSE/p_ini_file_parse=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_is_parsed=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_IS_PARSED/p_ini_file_is_parsed=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_sections=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_SECTIONS/p_ini_file_sections=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_keys=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_KEYS/p_ini_file_keys=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_is_key_exists=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_IS_KEY_EXISTS/p_ini_file_is_key_exists=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_parameter_string=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_STRING/p_ini_file_parameter_string=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_parameter_int=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_INT/p_ini_file_parameter_int=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_parameter_double=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_DOUBLE/p_ini_file_parameter_double=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_parameter_boolean=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_BOOLEAN/p_ini_file_parameter_boolean=PROCEDURE)
+SYMBOL_VECTOR=(p_ini_file_parameter_list=PROCEDURE)
+SYMBOL_VECTOR=(P_INI_FILE_PARAMETER_LIST/p_ini_file_parameter_list=PROCEDURE)
+!
+! plibraryloader.h
+!
+SYMBOL_VECTOR=(p_library_loader_new=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBRARY_LOADER_NEW/p_library_loader_new=PROCEDURE)
+SYMBOL_VECTOR=(p_library_loader_get_symbol=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBRARY_LOADER_GET_SYMBOL/p_library_loader_get_symbol=PROCEDURE)
+SYMBOL_VECTOR=(p_library_loader_free=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBRARY_LOADER_FREE/p_library_loader_free=PROCEDURE)
+SYMBOL_VECTOR=(p_library_loader_get_last_error=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBRARY_LOADER_GET_LAST_ERROR/p_library_loader_get_last_error=PROCEDURE)
+SYMBOL_VECTOR=(p_library_loader_is_ref_counted=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBRARY_LOADER_IS_REF_COUNTED/p_library_loader_is_ref_counted=PROCEDURE)
+!
+! plist.h
+!
+SYMBOL_VECTOR=(p_list_append=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_APPEND/p_list_append=PROCEDURE)
+SYMBOL_VECTOR=(p_list_remove=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_REMOVE/p_list_remove=PROCEDURE)
+SYMBOL_VECTOR=(p_list_foreach=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_FOREACH/p_list_foreach=PROCEDURE)
+SYMBOL_VECTOR=(p_list_free=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_FREE/p_list_free=PROCEDURE)
+SYMBOL_VECTOR=(p_list_last=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_LAST/p_list_last=PROCEDURE)
+SYMBOL_VECTOR=(p_list_length=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_LENGTH/p_list_length=PROCEDURE)
+SYMBOL_VECTOR=(p_list_prepend=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_PREPEND/p_list_prepend=PROCEDURE)
+SYMBOL_VECTOR=(p_list_reverse=PROCEDURE)
+SYMBOL_VECTOR=(P_LIST_REVERSE/p_list_reverse=PROCEDURE)
+!
+! pmain.h
+!
+SYMBOL_VECTOR=(p_libsys_init=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBSYS_INIT/p_libsys_init=PROCEDURE)
+SYMBOL_VECTOR=(p_libsys_init_full=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBSYS_INIT_FULL/p_libsys_init_full=PROCEDURE)
+SYMBOL_VECTOR=(p_libsys_shutdown=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBSYS_SHUTDOWN/p_libsys_shutdown=PROCEDURE)
+SYMBOL_VECTOR=(p_libsys_version=PROCEDURE)
+SYMBOL_VECTOR=(P_LIBSYS_VERSION/p_libsys_version=PROCEDURE)
+!
+! pmem.h
+!
+SYMBOL_VECTOR=(p_malloc=PROCEDURE)
+SYMBOL_VECTOR=(P_MALLOC/p_malloc=PROCEDURE)
+SYMBOL_VECTOR=(p_malloc0=PROCEDURE)
+SYMBOL_VECTOR=(P_MALLOC0/p_malloc0=PROCEDURE)
+SYMBOL_VECTOR=(p_realloc=PROCEDURE)
+SYMBOL_VECTOR=(P_REALLOC/p_realloc=PROCEDURE)
+SYMBOL_VECTOR=(p_free=PROCEDURE)
+SYMBOL_VECTOR=(P_FREE/p_free=PROCEDURE)
+SYMBOL_VECTOR=(p_mem_set_vtable=PROCEDURE)
+SYMBOL_VECTOR=(P_MEM_SET_VTABLE/p_mem_set_vtable=PROCEDURE)
+SYMBOL_VECTOR=(p_mem_restore_vtable=PROCEDURE)
+SYMBOL_VECTOR=(P_MEM_RESTORE_VTABLE/p_mem_restore_vtable=PROCEDURE)
+SYMBOL_VECTOR=(p_mem_mmap=PROCEDURE)
+SYMBOL_VECTOR=(P_MEM_MMAP/p_mem_mmap=PROCEDURE)
+SYMBOL_VECTOR=(p_mem_munmap=PROCEDURE)
+SYMBOL_VECTOR=(P_MEM_MUNMAP/p_mem_munmap=PROCEDURE)
+!
+! pmutex.h
+!
+SYMBOL_VECTOR=(p_mutex_new=PROCEDURE)
+SYMBOL_VECTOR=(P_MUTEX_NEW/p_mutex_new=PROCEDURE)
+SYMBOL_VECTOR=(p_mutex_lock=PROCEDURE)
+SYMBOL_VECTOR=(P_MUTEX_LOCK/p_mutex_lock=PROCEDURE)
+SYMBOL_VECTOR=(p_mutex_trylock=PROCEDURE)
+SYMBOL_VECTOR=(P_MUTEX_TRYLOCK/p_mutex_trylock=PROCEDURE)
+SYMBOL_VECTOR=(p_mutex_unlock=PROCEDURE)
+SYMBOL_VECTOR=(P_MUTEX_UNLOCK/p_mutex_unlock=PROCEDURE)
+SYMBOL_VECTOR=(p_mutex_free=PROCEDURE)
+SYMBOL_VECTOR=(P_MUTEX_FREE/p_mutex_free=PROCEDURE)
+!
+! pprocess.h
+!
+SYMBOL_VECTOR=(p_process_get_current_pid=PROCEDURE)
+SYMBOL_VECTOR=(P_PROCESS_GET_CURRENT_PID/p_process_get_current_pid=PROCEDURE)
+SYMBOL_VECTOR=(p_process_is_running=PROCEDURE)
+SYMBOL_VECTOR=(P_PROCESS_IS_RUNNING/p_process_is_running=PROCEDURE)
+!
+! prwlock.h
+!
+SYMBOL_VECTOR=(p_rwlock_new=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_NEW/p_rwlock_new=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_reader_lock=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_READER_LOCK/p_rwlock_reader_lock=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_reader_trylock=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_READER_TRYLOCK/p_rwlock_reader_trylock=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_reader_unlock=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_READER_UNLOCK/p_rwlock_reader_unlock=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_writer_lock=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_WRITER_LOCK/p_rwlock_writer_lock=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_writer_trylock=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_WRITER_TRYLOCK/p_rwlock_writer_trylock=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_writer_unlock=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_WRITER_UNLOCK/p_rwlock_writer_unlock=PROCEDURE)
+SYMBOL_VECTOR=(p_rwlock_free=PROCEDURE)
+SYMBOL_VECTOR=(P_RWLOCK_FREE/p_rwlock_free=PROCEDURE)
+!
+! psemaphore.h
+!
+SYMBOL_VECTOR=(p_semaphore_new=PROCEDURE)
+SYMBOL_VECTOR=(P_SEMAPHORE_NEW/p_semaphore_new=PROCEDURE)
+SYMBOL_VECTOR=(p_semaphore_take_ownership=PROCEDURE)
+SYMBOL_VECTOR=(P_SEMAPHORE_TAKE_OWNERSHIP/p_semaphore_take_ownership=PROCEDURE)
+SYMBOL_VECTOR=(p_semaphore_acquire=PROCEDURE)
+SYMBOL_VECTOR=(P_SEMAPHORE_ACQUIRE/p_semaphore_acquire=PROCEDURE)
+SYMBOL_VECTOR=(p_semaphore_release=PROCEDURE)
+SYMBOL_VECTOR=(P_SEMAPHORE_RELEASE/p_semaphore_release=PROCEDURE)
+SYMBOL_VECTOR=(p_semaphore_free=PROCEDURE)
+SYMBOL_VECTOR=(P_SEMAPHORE_FREE/p_semaphore_free=PROCEDURE)
+!
+! pshm.h
+!
+SYMBOL_VECTOR=(p_shm_new=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_NEW/p_shm_new=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_take_ownership=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_TAKE_OWNERSHIP/p_shm_take_ownership=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_free=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_FREE/p_shm_free=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_lock=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_LOCK/p_shm_lock=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_unlock=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_UNLOCK/p_shm_unlock=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_get_address=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_GET_ADDRESS/p_shm_get_address=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_get_size=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_GET_SIZE/p_shm_get_size=PROCEDURE)
+!
+! pshmbuffer.h
+!
+SYMBOL_VECTOR=(p_shm_buffer_new=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_NEW/p_shm_buffer_new=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_free=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_FREE/p_shm_buffer_free=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_take_ownership=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_TAKE_OWNERSHIP/p_shm_buffer_take_ownership=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_read=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_READ/p_shm_buffer_read=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_write=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_WRITE/p_shm_buffer_write=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_get_free_space=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_GET_FREE_SPACE/p_shm_buffer_get_free_space=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_get_used_space=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_GET_USED_SPACE/p_shm_buffer_get_used_space=PROCEDURE)
+SYMBOL_VECTOR=(p_shm_buffer_clear=PROCEDURE)
+SYMBOL_VECTOR=(P_SHM_BUFFER_CLEAR/p_shm_buffer_clear=PROCEDURE)
+!
+! psocket.h
+!
+SYMBOL_VECTOR=(p_socket_new_from_fd=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_NEW_FROM_FD/p_socket_new_from_fd=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_new=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_NEW/p_socket_new=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_fd=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_FD/p_socket_get_fd=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_family=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_FAMILY/p_socket_get_family=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_type=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_TYPE/p_socket_get_type=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_protocol=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_PROTOCOL/p_socket_get_protocol=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_keepalive=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_KEEPALIVE/p_socket_get_keepalive=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_blocking=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_BLOCKING/p_socket_get_blocking=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_listen_backlog=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_LISTEN_BACKLOG/p_socket_get_listen_backlog=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_timeout=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_TIMEOUT/p_socket_get_timeout=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_local_address=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_LOCAL_ADDRESS/p_socket_get_local_address=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_get_remote_address=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_GET_REMOTE_ADDRESS/p_socket_get_remote_address=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_is_connected=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_IS_CONNECTED/p_socket_is_connected=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_is_closed=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_IS_CLOSED/p_socket_is_closed=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_check_connect_result=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_CHECK_CONNECT_RESULT/p_socket_check_connect_result=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_set_keepalive=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SET_KEEPALIVE/p_socket_set_keepalive=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_set_blocking=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SET_BLOCKING/p_socket_set_blocking=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_set_listen_backlog=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SET_LISTEN_BACKLOG/p_socket_set_listen_backlog=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_set_timeout=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SET_TIMEOUT/p_socket_set_timeout=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_bind=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_BIND/p_socket_bind=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_connect=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_CONNECT/p_socket_connect=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_listen=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_LISTEN/p_socket_listen=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_accept=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ACCEPT/p_socket_accept=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_receive=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_RECEIVE/p_socket_receive=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_receive_from=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_RECEIVE_FROM/p_socket_receive_from=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_send=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SEND/p_socket_send=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_send_to=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SEND_TO/p_socket_send_to=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_close=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_CLOSE/p_socket_close=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_shutdown=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SHUTDOWN/p_socket_shutdown=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_free=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_FREE/p_socket_free=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_set_buffer_size=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_SET_BUFFER_SIZE/p_socket_set_buffer_size=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_io_condition_wait=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_IO_CONDITION_WAIT/p_socket_io_condition_wait=PROCEDURE)
+!
+! psocketaddress.h
+!
+SYMBOL_VECTOR=(p_socket_address_new_fr1g0bamc$=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW_FR0V6PAD7$/p_socket_address_new_fr1g0bamc$=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_new=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW/p_socket_address_new=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_new_any=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW_ANY/p_socket_address_new_any=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_new_loopback=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_NEW_LOOPBACK/p_socket_address_new_loopback=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_to_native=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_TO_NATIVE/p_socket_address_to_native=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_get_na1kai9ab$=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_NA0SBOC5O$/p_socket_address_get_na1kai9ab$=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_get_family=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_FAMILY/p_socket_address_get_family=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_get_address=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_ADDRESS/p_socket_address_get_address=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_get_port=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_PORT/p_socket_address_get_port=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_get_flow_info=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_FLOW_INFO/p_socket_address_get_flow_info=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_get_scope_id=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_GET_SCOPE_ID/p_socket_address_get_scope_id=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_set_flow_info=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_SET_FLOW_INFO/p_socket_address_set_flow_info=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_set_scope_id=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_SET_SCOPE_ID/p_socket_address_set_scope_id=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_is_flo3bgg0hi$=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_FLO1N1P65T$/p_socket_address_is_flo3bgg0hi$=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_is_sco2c7455c$=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_SCO1COK854$/p_socket_address_is_sco2c7455c$=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_is_ipv3s9t3vi$=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_IPV13UAVM5$/p_socket_address_is_ipv3s9t3vi$=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_is_any=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_ANY/p_socket_address_is_any=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_is_loopback=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_IS_LOOPBACK/p_socket_address_is_loopback=PROCEDURE)
+SYMBOL_VECTOR=(p_socket_address_free=PROCEDURE)
+SYMBOL_VECTOR=(P_SOCKET_ADDRESS_FREE/p_socket_address_free=PROCEDURE)
+!
+! pspinlock.h
+!
+SYMBOL_VECTOR=(p_spinlock_new=PROCEDURE)
+SYMBOL_VECTOR=(P_SPINLOCK_NEW/p_spinlock_new=PROCEDURE)
+SYMBOL_VECTOR=(p_spinlock_lock=PROCEDURE)
+SYMBOL_VECTOR=(P_SPINLOCK_LOCK/p_spinlock_lock=PROCEDURE)
+SYMBOL_VECTOR=(p_spinlock_trylock=PROCEDURE)
+SYMBOL_VECTOR=(P_SPINLOCK_TRYLOCK/p_spinlock_trylock=PROCEDURE)
+SYMBOL_VECTOR=(p_spinlock_unlock=PROCEDURE)
+SYMBOL_VECTOR=(P_SPINLOCK_UNLOCK/p_spinlock_unlock=PROCEDURE)
+SYMBOL_VECTOR=(p_spinlock_free=PROCEDURE)
+SYMBOL_VECTOR=(P_SPINLOCK_FREE/p_spinlock_free=PROCEDURE)
+!
+! pstring.h
+!
+SYMBOL_VECTOR=(p_strdup=PROCEDURE)
+SYMBOL_VECTOR=(P_STRDUP/p_strdup=PROCEDURE)
+SYMBOL_VECTOR=(p_strchomp=PROCEDURE)
+SYMBOL_VECTOR=(P_STRCHOMP/p_strchomp=PROCEDURE)
+SYMBOL_VECTOR=(p_strtok=PROCEDURE)
+SYMBOL_VECTOR=(P_STRTOK/p_strtok=PROCEDURE)
+SYMBOL_VECTOR=(p_strtod=PROCEDURE)
+SYMBOL_VECTOR=(P_STRTOD/p_strtod=PROCEDURE)
+!
+! ptimeprofiler.h
+!
+SYMBOL_VECTOR=(p_time_profiler_new=PROCEDURE)
+SYMBOL_VECTOR=(P_TIME_PROFILER_NEW/p_time_profiler_new=PROCEDURE)
+SYMBOL_VECTOR=(p_time_profiler_reset=PROCEDURE)
+SYMBOL_VECTOR=(P_TIME_PROFILER_RESET/p_time_profiler_reset=PROCEDURE)
+SYMBOL_VECTOR=(p_time_profiler_elapsed_usecs=PROCEDURE)
+SYMBOL_VECTOR=(P_TIME_PROFILER_ELAPSED_USECS/p_time_profiler_elapsed_usecs=PROCEDURE)
+SYMBOL_VECTOR=(p_time_profiler_free=PROCEDURE)
+SYMBOL_VECTOR=(P_TIME_PROFILER_FREE/p_time_profiler_free=PROCEDURE)
+!
+! ptree.h
+!
+SYMBOL_VECTOR=(p_tree_new=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_NEW/p_tree_new=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_new_with_data=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_NEW_WITH_DATA/p_tree_new_with_data=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_new_full=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_NEW_FULL/p_tree_new_full=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_insert=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_INSERT/p_tree_insert=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_remove=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_REMOVE/p_tree_remove=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_lookup=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_LOOKUP/p_tree_lookup=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_foreach=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_FOREACH/p_tree_foreach=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_clear=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_CLEAR/p_tree_clear=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_get_type=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_GET_TYPE/p_tree_get_type=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_get_nnodes=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_GET_NNODES/p_tree_get_nnodes=PROCEDURE)
+SYMBOL_VECTOR=(p_tree_free=PROCEDURE)
+SYMBOL_VECTOR=(P_TREE_FREE/p_tree_free=PROCEDURE)
+!
+! puthread.h
+!
+SYMBOL_VECTOR=(p_uthread_create_full=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_CREATE_FULL/p_uthread_create_full=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_create=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_CREATE/p_uthread_create=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_exit=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_EXIT/p_uthread_exit=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_join=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_JOIN/p_uthread_join=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_sleep=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_SLEEP/p_uthread_sleep=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_set_priority=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_SET_PRIORITY/p_uthread_set_priority=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_yield=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_YIELD/p_uthread_yield=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_current_id=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_CURRENT_ID/p_uthread_current_id=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_current=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_CURRENT/p_uthread_current=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_ideal_count=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_IDEAL_COUNT/p_uthread_ideal_count=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_ref=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_REF/p_uthread_ref=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_unref=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_UNREF/p_uthread_unref=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_local_new=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_LOCAL_NEW/p_uthread_local_new=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_local_free=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_LOCAL_FREE/p_uthread_local_free=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_get_local=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_GET_LOCAL/p_uthread_get_local=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_set_local=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_SET_LOCAL/p_uthread_set_local=PROCEDURE)
+SYMBOL_VECTOR=(p_uthread_replace_local=PROCEDURE)
+SYMBOL_VECTOR=(P_UTHREAD_REPLACE_LOCAL/p_uthread_replace_local=PROCEDURE)
diff --git a/3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c b/3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c
new file mode 100644
index 0000000..fbb6c5a
--- /dev/null
+++ b/3rdparty/plibsys/platforms/vms-general/vms_shorten_symbol.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2010 Craig A. Berry
+ * Copyright (c) 2016 Alexander Saprykin
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/* vms_shorten_symbol
+ *
+ * This program provides shortening of long symbols (> 31 characters) using the
+ * same mechanism as the OpenVMS C compiler. The basic procedure is to compute
+ * an AUTODIN II checksum of the entire symbol, encode the checksum in base32,
+ * and glue together a shortened symbol from the first 23 characters of the
+ * original symbol plus the encoded checksum appended. The output format is
+ * the same as that of the name mangler database, stored by default in
+ * [.CXX_REPOSITORY]CXX$DEMANGLER_DB.
+ *
+ * To obtain the same result as CC/NAMES=SHORTENED, run like so:
+ *
+ * $ mcr []vms_shorten_symbol "Please_forgive_this_absurdly_long_symbol_name"
+ * PLEASE_FORGIVE_THIS_ABS1ARO4QU$Please_forgive_this_absurdly_long_symbol_name
+ *
+ * To obtain the same result as CC/NAMES=(SHORTENED,AS_IS), pass a non-zero
+ * value as the second argument, like so:
+ *
+ * $ mcr []vms_shorten_symbol "Please_forgive_this_absurdly_long_symbol_name" 1
+ * Please_forgive_this_abs3rv8rnn$Please_forgive_this_absurdly_long_symbol_name
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __VMS
+# define UINT32 unsigned int
+#else
+# include <inttypes.h>
+# define UINT32 uint32_t
+#endif
+
+static UINT32 crc32 (const char *input_string);
+static UINT32 u32_to_base32 (UINT32 input, char *output);
+static UINT32 vms_shorten_symbol (const char *symbol, char *shortened, char as_is_flag);
+
+/*
+ * This routine implements the AUTODIN II polynomial.
+ */
+UINT32
+crc32 (const char *input_string)
+{
+
+ /*
+ * CRC code and data based partly on FreeBSD implementation, which
+ * notes:
+ *
+ * The crc32 functions and data was originally written by Spencer
+ * Garrett >s...@quick.com> and was cleaned from the PostgreSQL source
+ * tree via the files contrib/ltree/crc32.[ch]. No license was
+ * included, therefore it is assumed that this code is public
+ * domain. Attribution still noted.
+ *
+ * (I think they mean "gleaned" not "cleaned".)
+ */
+ static const UINT32 autodin_ii_table[256] = {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+ 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+ 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+ 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+ 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+ 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+ 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+ 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+ 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+ 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+ 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+ 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+ 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+ 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+ 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+ 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+ 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+ 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+ 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+ 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+ 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+ 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+ 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+ 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+ 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+ 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+ 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
+ };
+
+ UINT32 crc = ~0UL;
+ char * c;
+
+ for (c = (char *) input_string; *c; ++c)
+ crc = (crc >> 8) ^ autodin_ii_table[(crc ^ *c) & 0xff];
+
+ return ~crc;
+}
+
+/*
+ * This is the RFC2938 variant of base32, not RFC3548, Crockford's, or
+ * other newer variant. It produces an 8-byte encoded character string
+ * (plus trailing null) from a 32-bit integer input.
+ */
+static UINT32
+u32_to_base32 (UINT32 input, char *output)
+{
+ static const char base32hex_table[32] = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
+ 'u', 'v'
+ };
+
+ int i;
+
+ /*
+ * Grab lowest 5 bits and look up conversion in table. Lather, rinse,
+ * repeat for 6, 5-bit chunks to accommodate 32 bits of input.
+ */
+ for (i = 0; i < 7; i++) {
+ output[6 - i] = base32hex_table[input & 0x1f];
+
+ /* Position to look at next 5. */
+ input >>= 5;
+ }
+
+ /* It's DEC, so use '$' not '=' to pad. */
+ output[7] = '$';
+ output[8] = '\0';
+
+ return 0;
+}
+
+static UINT32
+vms_shorten_symbol (const char *symbol, char *shortened, char as_is_flag)
+{
+ char b32str[9];
+ UINT32 crc;
+ char * c;
+
+ crc = crc32 (symbol);
+
+ /*
+ * The compiler does not use the inverted checksum, so we invert it
+ * back before encoding.
+ */
+ (void) u32_to_base32 (~crc, (char *) &b32str);
+
+ if (!as_is_flag) {
+ for (c = (char *) &b32str; *c; c++)
+ *c = toupper (*c);
+ }
+
+ sprintf (shortened, "%.23s%.8s\n", symbol, b32str);
+ shortened[31] = '\0';
+
+ return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ char short_symbol[32];
+ char as_is_flag = 0;
+ char * c;
+ char * input_symbol;
+ int symlen;
+
+ if (argc < 2) {
+ fprintf (stderr, "Usage: %s <symbol name> [<AS_IS flag>]\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ if (argc > 2)
+ as_is_flag = 1;
+
+ symlen = strlen (argv[1]);
+
+ if (symlen <= 31) {
+ printf ("No need for shorten symbol\n");
+ return EXIT_SUCCESS;
+ }
+
+ input_symbol = malloc (symlen + 1);
+
+ if (input_symbol == NULL)
+ return EXIT_FAILURE;
+
+ strncpy (input_symbol, argv[1], symlen);
+ input_symbol[symlen] = '\0';
+
+ if (!as_is_flag) {
+ for (c = input_symbol; *c; c++)
+ *c = toupper (*c);
+ }
+
+ vms_shorten_symbol (input_symbol, (char *) &short_symbol, as_is_flag);
+ printf ("%s%s\n", &short_symbol, argv[1]);
+ free (input_symbol);
+
+ return EXIT_SUCCESS;
+}