Description VX/SMG is a full implementation of DEC’s VMS/OpenVMS Screen Management Service (SMG$) for Linux and Windows . It provides a call-compatible interface for all 3GL languages , allowing applications that use SMG$ routines on VMS to function identically on modern platforms.
VX/SMG ensures that user programs remain independent of the physical display devices , offering virtual displays, pasteboards, viewports, and advanced terminal rendering features .
Key Features • Full SMG$ API Compatibility – Implements all VMS SMG$ calls without modification.
• Terminal Independence – Works with VT100, VT220, VTxxx ANSI, AT386, and DECterm .
• Advanced Window Management – Supports pasteboards, multiple windows, overlapping views .
• Extended Rendering Features – Includes double-wide characters, scrolling regions, and cursor control .
• Seamless Migration – Works without modifying original VMS SMG applications.
• Performance Optimized – Implements a native C-based terminal driver , bypassing curses, termcap, and terminfo for high-speed execution .
VX/SMG Features and Compatibility VX/SMG retains all core functionalities of VMS/OpenVMS SMG while enabling enhanced flexibility in modern environments.
Feature
Description
Virtual Displays Allows **independent screen areas** for applications.
Pasteboards Provides a **logical screen buffer** that manages multiple displays.
Viewports Enables **scrollable window views** into larger virtual displays.
Double-Wide Characters Supports **double-wide and double-high text rendering**.
Terminal Independence Compatible with **VT100, VT220, VTxxx, and DECterm**.
Cursor & Text Control Supports **positioning, deletion, insertion, and erasure of text**.
VX/SMG enables seamless execution of legacy VMS SMG applications while enhancing performance and portability .
VX/SMG Functionality & Terminal Support Multiple Screen Regions VX/SMG allows applications to create multiple independent windows using virtual displays , each of which can be dynamically moved, updated, or hidden.
• Pasteboards – Act as logical containers for multiple screen areas.
• Viewports – Provide zoomed-in windows into larger virtual displays.
• Occlusion Checking – Ensures correct layering of overlapping windows.
Direct Terminal Access VX/SMG does not rely on curses, termcap, or terminfo , instead using a native C-based driver for:
• Faster rendering
• Hardware scrolling support
• More efficient screen updates
Supported terminals include:
✅ VT100, VT220, VTxxx ANSI
✅ AT386 and DECterm
(TOLAS screen kindly donated by GSI Transcomm) Windows version of above screen. WINSMG is now obsolete and will only be resurrected under pain of torture, imminent death or cash.
Example: Using Virtual Displays in VX/SMG #include "vxsmg.h"
int main ( ) {
SMG$CREATE_VIRTUAL_DISPLAY( 24 , 80 , &display_id);
SMG$PASTE_VIRTUAL_DISPLAY(display_id, pasteboard_id, 1 , 1 , 0 );
SMG$PUT_LINE(display_id, "Welcome to VX/SMG!" );
SMG$DELETE_VIRTUAL_DISPLAY(display_id);
return 0 ;
}
VX/SMG API Reference (SMG$ Functions) VX/SMG fully implements the VMS SMG$ API , ensuring compatibility with existing applications.
SMG$ API
Function
SMG$ALLOW_ESCAPE Enables escape sequence handling in terminal input.
SMG$BEGIN_DISPLAY_UPDATE Locks the display for batch updates .
SMG$BEGIN_PASTEBOARD_UPDATE Begins an optimized pasteboard update session.
SMG$CANCEL_INPUT Cancels pending input requests .
SMG$CHANGE_PBD_CHARACTERISTICS Modifies pasteboard characteristics .
SMG$CHANGE_RENDITION Changes text appearance (e.g., bold, underline).
SMG$CHANGE_VIEWPORT Adjusts viewport dimensions .
SMG$CHANGE_VIRTUAL_DISPLAY Modifies properties of a virtual display .
SMG$CHANGE_VIRTUAL_KEYBOARD Alters keyboard settings .
SMG$CHECK_FOR_OCCLUSION Determines if a display is occluded .
SMG$CONTROL_MODE Configures display control modes .
SMG$COPY_VIRTUAL_DISPLAY Duplicates a virtual display .
SMG$CREATE_MENU Creates a menu interface .
SMG$CREATE_PASTEBOARD Creates a logical screen buffer .
SMG$CREATE_VIEWPORT Defines a viewport in the display.
SMG$CREATE_VIRTUAL_DISPLAY Allocates a new virtual screen region .
SMG$CREATE_VIRTUAL_KEYBOARD Creates a virtual keyboard .
SMG$CURSOR_COLUMN Gets or sets the cursor column .
SMG$CURSOR_ROW Gets or sets the cursor row .
SMG$DEFINE_KEY Assigns a function to a key .
SMG$DELETE_CHARS Removes characters from the display .
SMG$DELETE_LINE Deletes a line of text .
SMG$DELETE_MENU Removes a menu from memory .
SMG$DELETE_PASTEBOARD Deletes a pasteboard .
SMG$DELETE_VIEWPORT Removes a viewport from the display.
SMG$DELETE_VIRTUAL_DISPLAY Removes a virtual display from memory .
SMG$CREATE_VIRTUAL_KEYBOARD Creates a virtual keyboard .
SMG$CURSOR_COLUMN Gets or sets the cursor column .
SMG$CURSOR_ROW Gets or sets the cursor row .
SMG$DEFINE_KEY Assigns a function to a key .
SMG$DELETE_CHARS Removes characters from the display .
SMG$DELETE_LINE Deletes a line of text .
SMG$DELETE_MENU Removes a menu from memory .
SMG$DELETE_PASTEBOARD Deletes a pasteboard .
SMG$DELETE_VIEWPORT Removes a viewport from the display.
SMG$DELETE_VIRTUAL_DISPLAY Removes a virtual display from memory .
SMG$DELETE_VIRTUAL_KEYBOARD Removes a virtual keyboard .
SMG$DISABLE_BROADCAST_TRAPPING Disables broadcast message trapping .
SMG$DRAW_CHAR Draws a single character at the cursor position.
SMG$DRAW_CHARACTER Renders a character at a specified position .
SMG$DRAW_LINE Draws a line on the virtual display .
SMG$DRAW_RECTANGLE Creates a rectangular shape on the display.
SMG$END_DISPLAY_UPDATE Unlocks the display after batch updates .
SMG$END_PASTEBOARD_UPDATE Ends an optimized pasteboard update session.
SMG$ERASE_CHARS Erases specified characters from the display.
SMG$ERASE_COLUMN Clears a column of text on the display.
SMG$ERASE_DISPLAY Clears the entire display .
SMG$ERASE_LINE Erases the current line from the display.
SMG$ERASE_PASTEBOARD Clears all content from the pasteboard .
SMG$FIND_CURSOR_DISPLAY Identifies which display contains the cursor .
SMG$FLUSH_BUFFER Flushes output buffers to the terminal.
SMG$GET_BROADCAST_MESSAGE Retrieves system broadcast messages .
SMG$GET_CHAR_AT_PHYSICAL_CURSOR Gets the character at the cursor position.
SMG$GET_DISPLAY_ATTR Retrieves display attributes of a virtual screen.
SMG$GET_KEYBOATD_ATTRIBUTES Gets keyboard characteristics .
SMG$GET_PASTEBOARD_ATTRIBUTES Retrieves pasteboard properties .
SMG$GET_PASTING_INFO Fetches details on pasting order .
SMG$GET_TERM_DATA Retrieves terminal configuration data .
SMG$GET_VIEWPORT_CHAR Gets the character at viewport position .
SMG$HOME_CURSOR Moves the cursor to the home position .
SMG$INIT_TERM_TABLE Initializes the terminal information table .
SMG$INIT_TERM_TABLE_BY_TYPE Initializes a terminal table by type .
SMG$INSERT_CHARS Inserts characters at cursor position .
SMG$INSERT_LINE Inserts a new line at cursor .
SMG$INVALIDATE_DISPLAY Marks the display as needing refresh .
SMG$KEYCODE_TO_NAME Converts a keycode to a name .
SMG$KEYPAD_MODE Sets the keypad mode .
SMG$LABEL_BORDER Adds a border label to a display.
SMG$LIST_PASTING_ORDER Lists the pasting order of virtual displays .
SMG$LOAD_VIRTUAL_DISPLAY Loads a virtual display into memory .
SMG$MOVE_TEXT Moves text from one location to another .
SMG$MOVE_VIRTUAL_DISPLAY Moves a virtual display on the screen.
SMG$NAME_TO_KEYCODE Converts a key name to its keycode .
SMG$PASTE_VIRTUAL_DISPLAY Adds a virtual display to the pasteboard .
SMG$POP_VIRTUAL_DISPLAY Removes the topmost virtual display from the stack.
SMG$PRINT_PASTEBOARD Prints the contents of the pasteboard .
SMG$PUT_CHARS Writes characters to the virtual display .
SMG$PUT_CHARS_HIGHWIDE Writes double-height, double-wide characters .
SMG$PUT_CHARS_MULTI Writes multi-byte character strings .
SMG$PUT_CHARS_WIDE Writes wide characters to the display.
SMG$PUT_LINE Outputs a line of text to the display.
SMG$PUT_LINE_HIGHWIDE Outputs a high-wide formatted line .
SMG$PUT_LINE_WIDE Outputs a wide-character formatted line .
SMG$PUT_PASTEBOARD Writes a pasteboard to the screen .
SMG$PUT_WITH_SCROLL Outputs text with automatic scrolling .
SMG$READ_FROM_DISPLAY Reads data from a virtual display .
SMG$READ_KEYSTROKE Reads a keystroke from the input buffer .
SMG$READ_STRING Reads a string of input from the user .
SMG$REPAINT_LINE Repaints the specified line on the display.
SMG$REPAINT_SCREEN Repaints the entire screen .
SMG$REPASTE_VIRTUAL_DISPLAY Repastes a virtual display to the pasteboard .
SMG$RESTORE_PHYSICAL_SCREEN Restores a previously saved physical screen .
SMG$RETURN_CURSOR_POS Returns the current cursor position .
SMG$RING_BELL Sounds the terminal bell .
SMG$SAVE_PHYSICAL_SCREEN Saves the current physical screen state .
SMG$SAVE_VIRTUAL_DISPLAY Saves a virtual display to memory .
SMG$SCROLL_DISPLAY_AREA Scrolls a specified area of the display .
SMG$SCROLL_VIEWPORT Scrolls within a viewport .
SMG$SELECT_FROM_MENU Allows the user to select an item from a menu .
SMG$SET_BROADCAST_TRAPPING Enables or disables broadcast message trapping .
SMG$SET_CURSOR_ABS Sets the cursor position to absolute coordinates .
SMG$SET_CURSOR_MODE Sets the cursor visibility and blink mode .
SMG$SET_CURSOR_REL Moves the cursor relative to its current position .
SMG$SET_DISPLAY_SCROLL_REGION Defines a scroll region within the display.
SMG$SET_KEYPAD_MODE Sets the keypad operating mode .
SMG$SET_PHYSICAL_CURSOR Sets the physical cursor position .
SMG$SET_TERM_CHARACTERISTICS Modifies terminal characteristics .
SMG$UNPASTE_VIRTUAL_DISPLAY Removes a virtual display from the pasteboard .
VX/SMG retains all SMG$ APIs required for seamless execution of legacy VMS applications.
Conclusion ✅ 100% SMG$ API compatibility on Linux & Windows
✅ Full terminal control – pasteboards, virtual displays, viewports
✅ No changes needed – identical execution to OpenVMS SMG
✅ Seamless migration with Sector7’s VX/RT
✅ Supports VT-terminals, DECterm, and ANSI-emulation
✅ Optimized for performance – No reliance on termcap/curses
VX/SMG ensures that OpenVMS SMG-based applications function identically on Linux and Windows while enhancing performance and usability .