Technical Capabilities
Having trouble finding what you need?
Get in touch with us, so we can answer your specific questions directly.
Get In Touch

LIB$ – General Routines

Overview

VX/LIB$ is a call-compatible implementation of the OpenVMS LIB$ general-purpose run-time library for x86 and ARM Linux. Applications that call LIB$ routines for string handling, integer and extended arithmetic, date and time, virtual-memory management, queues, balanced trees, and system services link against the VX runtime and run unchanged, keeping the same calling conventions, string descriptors, and condition-code behavior they relied on under OpenVMS.

VX/LIB$ is a library, not a server or daemon. Its routines are compiled into the VX runtime library and linked directly into the migrated program. Over 150 LIB$ entry points are implemented and exposed under their VMS dollar-sign names as well as portable C and Fortran-callable aliases, so existing object references resolve and existing source compiles without rewriting the calling logic. VX/LIB$ integrates with VX/RT to deliver full OpenVMS utility functionality across x86 and ARM Linux.

Architecture and linkage

VX/LIB$ is a library, not a running service. Its routines are compiled from C++ (with a small number of C modules) into object modules and archived into the VX runtime static library, libvxrt.a. A migrated application links that archive and calls the LIB$ entry points directly, exactly as it linked the OpenVMS run-time library before. There is no LIB$ server process, no daemon, and no inter-process substrate to configure.

PropertyVX/LIB$
DeliveryObject modules archived into libvxrt.a, linked into the application.
Implementation languageC++ with extern "C" bodies, plus a small number of C modules.
Public entry pointsOver 150 distinct LIB$ routines.
Calling modelDirect in-process function calls; no runtime server, no IPC.
Target platformsx86 and ARM Linux, through the VX/RT runtime.
PrototypesShared VX headers (string descriptors, aliases, lib$routines.h).

Naming, linkage and calling conventions

Every routine is exposed under several equivalent names, so existing object references and source in any supported language resolve without change. The VMS dollar-sign form (LIB$INDEX) and its lowercase spelling (lib$index) are aliases for a canonical C symbol; Fortran callers reach the same body through a thunk that unpacks the hidden trailing length arguments the Fortran ABI passes.

Name formExampleUsed by
VMS dollar-sign nameLIB$INDEXRecompiled OpenVMS object code and assembler references.
Lowercase aliaslib$indexCase-sensitive toolchains and mixed-case source.
Canonical C symbolLIB_D_INDEXPortable C and C++ callers.
Fortran-callable thunkLIB$CRC (with length args)Fortran callers that pass hidden string lengths.

Condition-code convention

Routines that report status return a 32-bit VMS condition value by value: odd means success, even means failure. Callers test the low bit (status & 1, or ODD(status) in the original languages) rather than comparing against a single success constant, because success can be reported as either SS$_NORMAL or LIB$_NORMAL. A small number of routines report results by raising a VMS-style signal instead of returning: LIB$SIGNAL, LIB$STOP and LIB$SIG_TO_STOP, caught through LIB$ESTABLISH or an equivalent handler.

SymbolValueMeaning
SS$_NORMAL1Generic success.
LIB$_NORMAL0x158009LIB$ success (distinct from SS$_NORMAL).
LIB$_STRTRU0x158040Output string truncated (qualified success).
LIB$_INTOVF0x150854Integer overflow.
LIB$_INVARG0x158094Invalid argument.
LIB$_INSVIRMEM0x15800CInsufficient virtual memory.
LIB$_ONEDELTIM0x158434At least one delta time required.
LIB$_KEYNOTFOU0x158184Key not found (tree lookup).
LIB$_QUEWASEMP0x15816CQueue was empty.

A routine body

Routine bodies are plain extern "C" functions that unpack their string descriptors and return a condition value or result. LIB$INDEX, which returns the 1-based position of a substring, is representative:

extern "C" U32 LIB_D_INDEX( VMS_DESCR *sourcestring, VMS_DESCR *substring )
{
    /* unpack both descriptors to pointer + length */
    subp = vxrt_strptr16(substring,   &subl);
    srcp = vxrt_strptr16(sourcestring, &srcl);
    if (subl > srcl) return 0;
    for (i = 0; i < srcl && (i + subl) <= srcl; i++)
        if (!memcmp(srcp + i, subp, subl)) return i + 1;
    return 0;
}

Calling a routine

A migrated program links against libvxrt.a and calls the LIB$ entry points directly. The example below allocates a buffer, locates a field within a statement line, and formats an operator message, testing the low bit of each status:

/* allocate a working buffer from LIB$ virtual memory */
status = LIB$GET_VM(&buf_size, &buffer_addr);
if (!(status & 1)) return status;         /* odd = success */

/* 1-based position of the account reference in a statement line */
position = LIB$INDEX(&statement_line, &acct_ref);

/* format an operator message with FAO directives */
status = LIB$SYS_FAO(&fao_control, &out_len, &message,
                     transfer_id, transfer_amount);

/* release the buffer back to the VM zone */
status = LIB$FREE_VM(&buf_size, &buffer_addr);

Data model

Two OpenVMS data conventions matter to almost every caller: the string descriptor and the quadword. VX/LIB$ accepts both the 32-bit and 64-bit VMS descriptor layouts and infers which one is in use from the descriptor's first word, so mixed 32-bit and 64-bit code links together without change.

String descriptors

String arguments are passed by descriptor rather than as bare pointers. The descriptor records the storage class, data type, length, and address of the string. The storage class determines how the buffer is managed:

ClassValueStorage
DSC$K_CLASS_S1Static: a fixed caller-supplied buffer.
DSC$K_CLASS_D2Dynamic: runtime-allocated and resizable through LIB$SGET1_DD.
DSC$K_CLASS_VS11Varying: a 16-bit current-length prefix plus a fixed buffer.
DSC$K_CLASS_SD9Scaled decimal, used by LIB$CVT_DX_DX.

Quadwords and VMS time

Time values are 64-bit quadwords, a pair of 32-bit fields (a low and a high longword). VMS time is counted in 100-nanosecond ticks from the standard 1858-11-17 epoch. A delta (relative) time is distinguished from an absolute time by the top bit of the high longword, which the time routines test before choosing how to add, subtract, or scale two values. This is why routines such as LIB$ADD_TIMES and LIB$SUB_TIMES return LIB$_ONEDELTIM when neither operand is a delta time: the operation is only defined when at least one operand is relative.

Routine groups

The LIB$ library spans a wide range of general-purpose services. The table below groups the implemented routines by function and names a representative sample from each group; the full list follows in the next section.

GroupWhat it coversRepresentative routines
Integer and bit arithmeticExtended-precision add, subtract, multiply and divide, and bit-field operations.LIB$ADDX, LIB$SUBX, LIB$EDIV, LIB$EMUL, LIB$INSV, LIB$FFS
String and characterSearch, compare, move, translate and copy operations over descriptor strings.LIB$INDEX, LIB$LEN, LIB$MATCHC, LIB$SCANC, LIB$MOVC3, LIB$MOVTC
Date and timeCurrent time, time arithmetic, and conversion to and from the system internal time format.LIB$DATE_TIME, LIB$ADD_TIMES, LIB$SUB_TIMES, LIB$DAY_OF_WEEK, LIB$FORMAT_DATE_TIME
Data conversionRadix conversion, numeric formatting, and character-set translation.LIB$CVT_HTB, LIB$CVT_OTB, LIB$CURRENCY, LIB$TRA_ASC_EBC, LIB$TRA_EBC_ASC
Virtual memory (32 and 64 bit)General allocation, page allocation, and zone management in both addressing modes.LIB$GET_VM, LIB$FREE_VM, LIB$CREATE_VM_ZONE, LIB$GET_VM_64
Queues and treesSelf-relative interlocked queues and balanced binary trees.LIB$INSQHI, LIB$REMQTI, LIB$INSERT_TREE, LIB$LOOKUP_TREE
Symbols, logicals and commonDCL symbol and logical-name access and the inter-image common block.LIB$GET_SYMBOL, LIB$SET_LOGICAL, LIB$SYS_TRNLOG, LIB$GET_COMMON
Process and system informationDevice, process, queue and system inquiry, and subprocess control.LIB$GETDVI, LIB$GETJPI, LIB$GETSYI, LIB$SPAWN, LIB$RUN_PROGRAM
Screen and terminalCursor placement, screen and line erase, scrolling and buffered output.LIB$SET_CURSOR, LIB$ERASE_LINE, LIB$PUT_SCREEN, LIB$SCREEN_INFO
Condition handling and signalsEstablishing and reverting handlers and signalling conditions.LIB$SIGNAL, LIB$STOP, LIB$ESTABLISH, LIB$REVERT, LIB$SIG_TO_RET
FilesFile search, scan, rename, delete and directory creation.LIB$FIND_FILE, LIB$FILE_SCAN, LIB$DELETE_FILE, LIB$CREATE_DIR
Event flags, LUNs and timersAllocation of event flags and logical unit numbers, and timing statistics.LIB$GET_EF, LIB$GET_LUN, LIB$INIT_TIMER, LIB$STAT_TIMER
Messages and formattingFAO output formatting, system message retrieval, and input and output helpers.LIB$SYS_FAO, LIB$SYS_FAOL, LIB$SYS_GETMSG, LIB$PUT_OUTPUT
ChecksumsCRC checksum generation over a descriptor byte stream.LIB$CRC, LIB$CRC_TABLE

VX/LIB$ callable routines

The full set of callable routines, over 150 in total, spanning string handling, arithmetic, date and time, virtual memory, queues, trees, screen control, files, and system services. Each is available under its VMS dollar-sign name as well as the portable C and Fortran-callable aliases described above.

LIB$ APIFunction
LIB$ADAWIAdds a word-integer value
LIB$ADD_TIMESAdd two time values
LIB$ADDXAdd two numbers
LIB$ANALYZE_SDESCAnalyze string descriptor
LIB$ASN_WTH_MBXAssigns a mailbox for communication
LIB$AST_IN_PROGChecks if an AST (Asynchronous System Trap) is in progress
LIB$ATTACHAttach to process
LIB$BBCCIPerforms bitwise operations on bit fields
LIB$CALLGGeneral call function
LIB$CALLG_64Calls a function with arguments in 64-bit addressing
LIB$CONVERT_DATE_STRINGConvert date string
LIB$CRCCompute CRC checksum
LIB$CRC_TABLEGenerate CRC table
LIB$CREATE_DIRCreate a directory
LIB$CREATE_VM_ZONECreate VM zone
LIB$CREATE_VM_ZONE_64Creates a 64-bit virtual memory zone
LIB$CURRENCYFormats numbers as currency values
LIB$CVT_DTBConvert date to binary
LIB$CVT_DTB_64Converts a 64-bit date-time value to binary
LIB$CVT_DX_DXConvert descriptor to descriptor
LIB$CVT_FROM_INTERNAL_TIMEConverts system internal time to standard format
LIB$CVT_HTBConvert hex to binary
LIB$CVT_OTBConvert octal to binary
LIB$CVT_TO_INTERNAL_TIMEConvert to internal time
LIB$CVT_VECTIMConverts vector time format to system time
LIB$CVTF_FROM_INTERNAL_TIMEConverts floating-point internal time to standard format
LIB$CVTF_TO_INTERNAL_TIMEConverts standard time to floating-point internal time
LIB$CVTS_FROM_INTERNAL_TIMEConverts string-formatted internal time to standard
LIB$CVTS_TO_INTERNAL_TIMEConverts standard time to string-formatted internal time
LIB$DATE_TIMEGet current date and time
LIB$DAYGet day value
LIB$DAY_OF_WEEKGet day of the week
LIB$DELETE_FILEDelete a file
LIB$DELETE_LOGICALDelete logical name
LIB$DELETE_SYMBOLDelete a symbol
LIB$DELETE_VM_ZONEDelete VM zone
LIB$DELETE_VM_ZONE_64Deletes a 64-bit virtual memory zone
LIB$DIGIT_SEPFormat digit separators
LIB$DISABLE_CTRLDisable control characters
LIB$DO_COMMANDExecute a command
LIB$DOWN_SCROLLScrolls the display downwards
LIB$EDIVPerforms extended division on large integers
LIB$EMULPerforms extended multiplication
LIB$ENABLE_CTRLEnable control characters
LIB$ERASE_LINEErase line on display
LIB$ERASE_PAGEErase page on display
LIB$ESTABLISHSet up error handler
LIB$EXTVExtend vector operation
LIB$EXTZVExtend zero vector
LIB$FFCFind first character
LIB$FFSFind first set bit
LIB$FILE_SCANScans files for specified patterns
LIB$FILE_SCAN_ENDEnds a file scanning operation
LIB$FIND_FILEFind file in directory
LIB$FIND_FILE_ENDEnd file search
LIB$FIND_IMAGE_SYMBOLFind symbol in image
LIB$FIND_VM_ZONELocates a virtual memory zone
LIB$FIND_VM_ZONE_64Locates a 64-bit virtual memory zone
LIB$FORMAT_DATE_TIMEFormat date and time
LIB$FREE_DATE_TIME_CONTEXTReleases memory allocated for date-time processing
LIB$FREE_EFFree event flag
LIB$FREE_LUNFree logical unit number
LIB$FREE_TIMERFree timer resource
LIB$FREE_VMFree virtual memory
LIB$FREE_VM_64Releases 64-bit virtual memory
LIB$FREE_VM_PAGEFrees a virtual memory page
LIB$FREE_VM_PAGE_64Frees a 64-bit virtual memory page
LIB$GET_COMMANDRetrieves the current command input
LIB$GET_COMMONGet common block data
LIB$GET_EFGet event flag
LIB$GET_FOREIGNGet foreign command
LIB$GET_HOSTNAMERetrieves the system's hostname
LIB$GET_INPUTGet input from user
LIB$GET_LOGICALGet logical name
LIB$GET_LUNGet logical unit number
LIB$GET_SYMBOLGet symbol value
LIB$GET_VMGet virtual memory
LIB$GET_VM_64Allocates 64-bit virtual memory
LIB$GET_VM_PAGEAllocates a virtual memory page
LIB$GET_VM_PAGE_64Allocates a 64-bit virtual memory page
LIB$GETDVIGet device information
LIB$GETJPIGet job process info
LIB$GETQUIRetrieves queue information synchronously
LIB$GETSYIGet system info
LIB$INDEXFind index in string
LIB$INIT_DATE_TIME_CONTEXTInitialize date-time context
LIB$INIT_TIMERInitialize timer
LIB$INSERT_TREEInsert item in tree
LIB$INSQHIInsert queue head
LIB$INSQTIInsert queue tail
LIB$INSVInsert bit field
LIB$LENGet string length
LIB$LOCCFinds the first occurrence of a character in a string
LIB$LOOKUP_TREELookup in tree structure
LIB$MATCH_CONDMatch condition
LIB$MATCHCMatch characters
LIB$MOVC3Move characters
LIB$MOVC5Move characters with fill
LIB$MOVTCMove and transform characters
LIB$MULT_DELTA_TIMEMultiplies delta time values
LIB$MULTS_DELTA_TIMEMultiplies scaled delta time values
LIB$PUT_BUFFERWrite to buffer
LIB$PUT_COMMONWrite to common block
LIB$PUT_LINEOutputs a formatted line of text
LIB$PUT_OUTPUTWrite output
LIB$PUT_SCREENWrite to screen
LIB$RADIX_POINTGet radix point
LIB$REMOVE_TREERemoves an entry from a balanced tree structure
LIB$REMQHIRemove queue head
LIB$REMQTIRemove queue tail
LIB$RENAME_FILERename a file
LIB$RESET_VM_ZONEResets a virtual memory zone
LIB$RESET_VM_ZONE_64Resets a 64-bit virtual memory zone
LIB$REVERTRevert to previous state
LIB$RUN_PROGRAMRun a program
LIB$SCANCScan for characters
LIB$SCOPY_DXDXCopy descriptor data
LIB$SCOPY_R_DXCopies a descriptor-based string with right justification
LIB$SCREEN_INFOGet screen info
LIB$SET_BUFFERSet buffer contents
LIB$SET_CURSORSet cursor position
LIB$SET_LOGICALSet logical name
LIB$SET_SCROLLConfigures display scrolling settings
LIB$SET_SYMBOLSet symbol value
LIB$SFREE1_DDFrees a dynamically allocated descriptor
LIB$SGET1_DDRetrieves a dynamically allocated descriptor
LIB$SHOW_TIMERDisplays system timer settings
LIB$SHOW_TIMER_Displays system timer settings (alternative version)
LIB$SHOW_VMDisplays virtual memory details
LIB$SHOW_VM_ZONEDisplays information about a virtual memory zone
LIB$SHOW_VM_ZONE_64Displays information about a 64-bit virtual memory zone
LIB$SIG_TO_RETConverts a signal code to a return status
LIB$SIG_TO_STOPConverts a signal to a process stop action
LIB$SIGNALSend signal
LIB$SKPCSkip characters
LIB$SPANCSpan characters
LIB$SPAWNSpawn subprocess
LIB$STAT_TIMERRetrieves statistics for system timers
LIB$STAT_VMRetrieves virtual memory statistics
LIB$STOPStop execution
LIB$SUB_TIMESSubtract time values
LIB$SUBXSubtract values
LIB$SYS_ASCTIMConvert time to ASCII
LIB$SYS_FAOFormat output message
LIB$SYS_FAOLFormat output
LIB$SYS_GETMSGGet system message
LIB$SYS_TRNLOGTranslate logical name
LIB$TRA_ASC_EBCTranslate ASCII to EBCDIC
LIB$TRA_EBC_ASCTranslate EBCDIC to ASCII
LIB$TRIM_FILESPECTrims a file specification string
LIB$WAITWait for event

Implementation status

The overwhelming majority of LIB$ routines are fully implemented and exercised. A small number of advanced virtual-memory options are partially covered, and a set of rarely used routines is not yet implemented. The table summarises the state of each area so a migration can be scoped accurately.

Capability areaStatusNotes
Core string, arithmetic, tree, queue, time, symbol, file and screen routinesliveFull implementations, built into the VX runtime library.
CRC checksums and character translationliveLIB$CRC, LIB$CRC_TABLE, and the ASCII and EBCDIC translation routines.
Basic virtual-memory allocation and zonesliveLIB$GET_VM, LIB$FREE_VM, and standard zone create, delete, find and reset.
Advanced VM-zone options and 64-bit high-address handlingpartialCustom zone algorithms, alignment, page limits, user get and free-page callbacks, and full 64-bit quadword address handling are being completed.
Signal-handler dispatch for LIB$STOP and LIB$SIG_TO_RETpartialSignalling works; some handler-unwind paths are being finalised.
Rarely used routines (for example LIB$VERIFY_VM_ZONE, LIB$CREATE_USER_VM_ZONE)not yet implementedA set of low-usage entry points is declared but not yet implemented. Sector7 prioritises these on demand as migrations require them.
Migration sizing. When scoping a port, check your application's actual LIB$ call inventory against this matrix. Anything in the "not yet implemented" set that your code depends on can be prioritised as part of the engagement.

Quick reference

Key facts

ItemValue
Public entry pointsOver 150 LIB$ routines
DeliveryLinked into the application via libvxrt.a
Platformsx86 and ARM Linux, through VX/RT
Success testOdd condition code (status & 1), not equality
String passingBy descriptor; 32-bit and 64-bit layouts both accepted
Descriptor classesStatic (1), Dynamic (2), Varying (11), Scaled decimal (9)
Time base64-bit quadword, 100-ns ticks from the 1858-11-17 epoch

Name forms

LIB$INDEX
lib$index
LIB_D_INDEX
Fortran thunk

String and character routines

LIB$INDEX
LIB$LEN
LIB$LOCC
LIB$MATCHC
LIB$SCANC
LIB$SKPC
LIB$SPANC
LIB$MOVC3
LIB$MOVC5
LIB$MOVTC
LIB$SCOPY_DXDX
LIB$ANALYZE_SDESC

Date and time routines

LIB$DATE_TIME
LIB$DAY
LIB$DAY_OF_WEEK
LIB$ADD_TIMES
LIB$SUB_TIMES
LIB$MULT_DELTA_TIME
LIB$CVT_DTB
LIB$FORMAT_DATE_TIME

Virtual-memory routines

LIB$GET_VM
LIB$FREE_VM
LIB$GET_VM_PAGE
LIB$CREATE_VM_ZONE
LIB$DELETE_VM_ZONE
LIB$FIND_VM_ZONE
LIB$RESET_VM_ZONE
LIB$STAT_VM

System and process routines

LIB$GETDVI
LIB$GETJPI
LIB$GETSYI
LIB$SPAWN
LIB$RUN_PROGRAM
LIB$DO_COMMAND
LIB$GET_SYMBOL
LIB$SYS_FAO

Frequently Asked Questions

Curious about how Sector7 can facilitate your application migration? Explore our FAQs for expert insights.

What is VX/LIB$ and how does it help with OpenVMS migration?

VX/LIB$ provides a call-compatible implementation of OpenVMS general-purpose utility APIs for x86 and ARM Linux. It enables seamless migration of OpenVMS applications by preserving essential string manipulation, mathematical operations, and system functions while maintaining compatibility with existing logic and execution behavior.

This comprehensive API library ensures that OpenVMS applications requiring LIB$ services can be migrated without major modifications, preserving productivity and minimizing development costs. To explore how VX/LIB$ can streamline your migration project, contact our migration experts.

Which OpenVMS LIB$ functions does VX/LIB$ support?

VX/LIB$ supports over 150 OpenVMS LIB$ callable routines including string operations, mathematical calculations, time management, memory operations, and system utilities.

Does VX/LIB$ maintain OpenVMS compatibility on Linux?

Yes, VX/LIB$ is fully compatible with OpenVMS LIB$ APIs and preserves OpenVMS system utility behaviors for direct application porting.

How does VX/LIB$ handle memory management operations?

VX/LIB$ provides comprehensive virtual memory management through functions like LIB$GET_VM, LIB$FREE_VM, and zone-based operations including LIB$CREATE_VM_ZONE and LIB$DELETE_VM_ZONE.

What string and character processing capabilities does VX/LIB$ offer?

VX/LIB$ provides extensive string manipulation functions including LIB$INDEX for finding substrings, LIB$LEN for length calculations, and character operations like LIB$MOVC3 and LIB$SCANC. It also supports string descriptor analysis through LIB$ANALYZE_SDESC and advanced pattern matching capabilities.

Organizations like Telstra have successfully utilized similar string processing functions during their OpenVMS to Linux migrations, maintaining application functionality while modernizing their infrastructure.

Can VX/LIB$ integrate with other VX tools?

VX/LIB$ seamlessly integrates into the VX/RT ecosystem to provide full OpenVMS utility functionality on x86 and ARM Linux platforms.

What time and date functions are available in VX/LIB$?

VX/LIB$ includes comprehensive time management functions such as LIB$DATE_TIME for current timestamps, LIB$CVT_DTB for date-to-binary conversion, and LIB$ADD_TIMES for time arithmetic. Additional capabilities include LIB$DAY_OF_WEEK calculations and LIB$FORMAT_DATE_TIME for custom formatting requirements.

What are the key advantages of using VX/LIB$ for OpenVMS migration?

VX/LIB$ delivers significant migration benefits by preserving OpenVMS system utility behaviors and enabling direct application porting without major code modifications. This approach dramatically reduces development time and costs while maintaining operational compatibility.

The library supports essential OpenVMS operations including time management, checksum calculations, and memory management, ensuring applications function identically on Linux. Companies like BNY Mellon have successfully leveraged similar utility preservation strategies during their critical system migrations.

By providing full compatibility with OpenVMS LIB$ functions, VX/LIB$ enables organizations to modernize their infrastructure while protecting existing software investments. Contact us to learn how VX/LIB$ can accelerate your migration timeline.

What is VX/LIB$?

VX/LIB$ is a call-compatible implementation of the OpenVMS LIB$ general-purpose utility routines for x86 and ARM Linux. It lets OpenVMS applications keep using LIB$ string, math, time, and system routines while running on Linux, preserving existing logic and execution behavior.

How many LIB$ routines does VX/LIB$ implement?

VX/LIB$ implements over 150 callable LIB$ routines, spanning string handling, integer and extended arithmetic, date and time conversion, virtual-memory management, descriptor operations, screen and terminal control, queues, balanced trees, and system utilities.

Which CPU architectures and operating systems does VX/LIB$ run on?

VX/LIB$ targets x86 and ARM Linux. It integrates with VX/RT to provide the full OpenVMS LIB$ utility functionality on those platforms.

Do I have to modify my application code to use VX/LIB$?

No major modifications are required. VX/LIB$ maintains OpenVMS application logic and is call-compatible with the LIB$ APIs, so applications that rely on LIB$ routines can be migrated without rewriting their calling logic.

Does VX/LIB$ handle OpenVMS virtual-memory zone management?

Yes. The routine set includes virtual-memory zone management, including creating, deleting, finding, resetting, and reporting zones, in both 32-bit and 64-bit forms, for example LIB$CREATE_VM_ZONE and LIB$CREATE_VM_ZONE_64, LIB$GET_VM and LIB$GET_VM_64, and LIB$FREE_VM and LIB$FREE_VM_64.

What date and time capabilities are included?

VX/LIB$ covers current date and time (LIB$DATE_TIME), time arithmetic (LIB$ADD_TIMES, LIB$SUB_TIMES, LIB$MULT_DELTA_TIME), conversions to and from the system internal time format, day-of-week calculation (LIB$DAY_OF_WEEK), and formatting (LIB$FORMAT_DATE_TIME).

Can VX/LIB$ perform checksums and character translation?

Yes. It includes CRC checksum routines (LIB$CRC, LIB$CRC_TABLE) and character-translation utilities, including ASCII and EBCDIC conversion (LIB$TRA_ASC_EBC, LIB$TRA_EBC_ASC), alongside the broader string routines such as LIB$INDEX, LIB$LEN, LIB$MATCHC, and LIB$SCANC.

How does VX/LIB$ fit into the wider VX toolset?

VX/LIB$ integrates with VX/RT, the VX runtime, to deliver OpenVMS LIB$ utility services as part of a broader OpenVMS-compatibility environment on x86 and ARM Linux, so LIB$-dependent applications migrate alongside the rest of a VX-based port.

Transform Your Legacy Software Today!

Get In Touch
Unlock the potential of your legacy software with our expert migration services.