VMS / OpenVMS Screen Management Service (SMG$) for Linux and Windows


VX/SMG is an implementation of DEC's VMS Screen Management Service for Linux and Windows. Written entirely in C, it provides VMS / OpenVMS SMG functionality for Linux-based platforms.

Learn More

INTRODUCTION to SMG on Intel Linux

VX/SMG is an implementation of DEC's VMS Screen Management Service for Linux and Windows. Written entirely in C, it provides VMS / OpenVMS SMG functionality for Linux-based platforms. All VMS / OpenVMS SMG functionality is provided in a call compatible interface that can be called from all 3GL languages.

Like SMG routines under VMS, VX/SMG provides user programs that are independent from the physical devices that actually perform the input and output functions. VX/SMG provides the Linux-based user with three essential services: support for existing run-time routines, preservation of terminal independence and retained ease of composition.

Supported features include, but are not limited to:

  • Pasteboards
  • Virtual displays
  • Viewports
  • Double-wide and double-high characters
  • Virtual keyboards
  • Terminal interface routines

VX/SMG has been ported to all the popular Linux computers. Implemented on top of a C-based Windows package that is universally portable, VX/SMG provides users with a complete set of utility functions for handling terminal I/O.

VX/SMG is designed to provide multiple windows or views on a terminal screen. A window is represented by a logical entity called a virtual display. A terminal screen is represented by a logical entity called a pasteboard. Operations to create, input, paste, view, etc. are all handled with full compatibility.


VMS / OpenVMS Call compatible SMG$ Libraries for x86 Intel Linux

Screens developed with SMG were intended to run only on VAX/ALPHA and ITANIUM COMPUTERS with the VMS / OpenVMS operating system. The complexity of SMG, VMS specific run-time dependencies and platform-specific programming language interface constructions, effectively prohibited (until now) the porting of SMG created screens.

In addition to being fully integrated with Sector7's VMS Support Libraries (VX/RT), VX/SMG includes a complete set of language interface utilities that facilitate the necessary changes to complete the linking process. VX/SMG interface utilities are available for all VMS-supported programming languages.

Utility procedures provide system-independent routines that complete (as required) "INCLUDE" statement changes, integration of VMS descriptors, call name changes and argument list completion

.

VMS / OpenVMS SMG Functionality on Linux

VX/SMG provides support for many of SMG's unique features. A virtual display can be removed from the pasteboard without being deleted. This allows the user additional flexibility for manipulating the terminal screen. Bordered windows can be pasted in such a way as to be partially off the screen. The same is true for viewports.

Users can directly access the terminal database. This feature permits a user to by-pass all the normal VX/SMG functions and perform direct terminal and keyboard I/O.

(TOLAS screen kindly donated by GSI Transcomm)

Telnet Image

 

Windows version of above screen. WINSMG is now obsolete and will only be resurrected under pain of torture, imminent death or cash.

 

SMG for Windows

VMS / OpenVMS SMG Viewports for Linux

An additional feature of VX/SMG is viewports. A viewport is a subset of the area defined by a virtual display. A virtual display may be larger than the physical terminal. Normally, this would require the virtual display to be re-pasted to see all of it. A viewport provides a window into the virtual display. Different areas of the display can then be viewed by using the scroll and move operations allowed for viewports.

VMS / OpenVMS SMG Terminal Support on Linux

VX/SMG does not use the facilities provided by Linux such as curses, termcap or terminfo. All terminal drivers are C-based routines that have been built into the VX/SMG system to provide for high speed and efficient portability.

VX/SMG uses the same internal structure as VAX/VMS SMG to store its terminal control strings. This allows programs that directly access the SMG terminal tables to function correctly under Linux. VX/SMG supports VT100, and upward compatible VTxxx ANSI, AT386 terminals, and will use advanced terminal features such as hardware-scrolling where available.

VMS / OpenVMS SMG Functionality on Linux

Screens using VX/SMG allow the programmer to use existing SMG features, including multiple window capability and independent terminal functionality. Pasteboards may be associated with a file instead of a terminal screen. Support for internal menu functions provides complete "create and make" selection capabilities.

VX/SMG provides extensive support for both output and input operations. Composition operations (output) are fully supported and behave as their VMS counterparts. Output operations that occur through virtual displays are also supported.

Screen management composition operations include:

  • Paste/unpaste/repaste
  • Move
  • Delete and pop
  • Occlusion check (overlap)

Output screen management operations through virtual displays include:

  • Cursor positioning
  • Deletion
  • Erasure
  • Insertion

Like SMG under VMS, VX/SMG provides a user with two routines capable of supporting the writing of text to a virtual display, character-oriented output and line-oriented output. With VX/SMG, a user is also able to change the rendition of a virtual display, draw and/or remove drawn lines and characters.

VX/SMG applications use the run-time system to display forms and their associated data fields and to control the I/O stream. The entire terminal I/O is passed through ASCII strings.


VMS / OpenVMS SMG$ Call Compatible Library 1
SMG$ALLOW_ESCAPE
SMG$BEGIN_DISPLAY_UPDATE
SMG$BEGIN_PASTEBOARD_UPDATE
SMG$CANCEL_INPUT
SMG$CHANGE_PBD_CHARACTERISTICS
SMG$CHANGE_RENDITION
SMG$CHANGE_VIEWPORT
SMG$CHANGE_VIRTUAL_DISPLAY
SMG$CHANGE_VIRTUAL_KEYBOARD
SMG$CHECK_FOR_OCCLUSION
SMG$CONTROL_MODE
SMG$COPY_VIRTUAL_DISPLAY
SMG$CREATE_MENU
VMS / OpenVMS SMG$ Call Compatible Library 2
SMG$CREATE_PASTEBOARD
SMG$CREATE_VIEWPORT
SMG$CREATE_VIRTUAL_DISPLAY
SMG$CREATE_VIRTUAL_KEYBOARD
SMG$CURSOR_COLUMN
SMG$CURSOR_ROW
SMG$DEFINE_KEY
SMG$DELETE_CHARS
SMG$DELETE_LINE
SMG$DELETE_MENU
SMG$DELETE_PASTEBOARD
SMG$DELETE_VIEWPORT
SMG$DELETE_VIRTUAL_DISPLAY
SMG$DELETE_VIRTUAL_KEYBOARD
VMS / OpenVMS SMG$ Call Compatible Library 3
SMG$DISABLE_BROADCAST_TRAPPING
SMG$DRAW_CHAR
SMG$DRAW_CHARACTER
SMG$DRAW_LINE
SMG$DRAW_RECTANGLE
SMG$END_DISPLAY_UPDATE
SMG$END_PASTEBOARD_UPDATE
SMG$ERASE_CHARS
SMG$ERASE_COLUMN
SMG$ERASE_DISPLAY
SMG$ERASE_LINE
SMG$ERASE_PASTEBOARD
SMG$FIND_CURSOR_DISPLAY
SMG$FLUSH_BUFFER

VMS / OpenVMS SMG$ Call Compatible Library 4
SMG$GET_BROADCAST_MESSAGE
SMG$GET_CHAR_AT_PHYSICAL_CURSOR
SMG$GET_DISPLAY_ATTR
SMG$GET_KEYBOATD_ATTRIBUTES
SMG$GET_PASTEBOARD_ATTRIBUTES
SMG$GET_PASTING_INFO
SMG$GET_TERM_DATA
SMG$GET_VIEWPORT_CHAR
SMG$HOME_CURSOR
SMG$INIT_TERM_TABLE
SMG$INIT_TERM_TABLE_BY_TYPE
SMG$INSERT_CHARS
SMG$INSERT_LINE
SMG$INVALIDATE_DISPLAY
SMG$KEYCODE_TO_NAME
SMG$KEYPAD_MODE
SMG$LABEL_BORDER
SMG$LIST_PASTING_ORDER
VMS / OpenVMS SMG$ Call Compatible Library 5
SMG$LOAD_VIRTUAL_DISPLAY
SMG$MOVE_TEXT
SMG$MOVE_VIRTUAL_DISPLAY
SMG$NAME_TO_KEYCODE
SMG$PASTE_VIRTUAL_DISPLAY
SMG$POP_VIRTUAL_DISPLAY
SMG$PRINT_PASTEBOARD
SMG$PUT_CHARS
SMG$PUT_CHARS_HIGHWIDE
SMG$PUT_CHARS_MULTI
SMG$PUT_CHARS_WIDE
SMG$PUT_LINE
SMG$PUT_LINE_HIGHWIDE
SMG$PUT_LINE_WIDE
SMG$PUT_PASTEBOARD
SMG$PUT_WITH_SCROLL
SMG$READ_FROM_DISPLAY
SMG$READ_KEYSTROKE
SMG$READ_STRING
VMS / OpenVMS SMG$ Call Compatible Library 6
SMG$REPAINT_LINE
SMG$REPAINT_SCREEN
SMG$REPASTE_VIRTUAL_DISPLAY
SMG$RESTORE_PHYSICAL_SCREEN
SMG$RETURN_CURSOR_POS
SMG$RING_BELL
SMG$SAVE_PHYSICAL_SCREEN
SMG$SAVE_VIRTUAL_DISPLAY
SMG$SCROLL_DISPLAY_AREA
SMG$SCROLL_VIEWPORT
SMG$SELECT_FROM_MENU
SMG$SET_BROADCAST_TRAPPING
SMG$SET_CURSOR_ABS
SMG$SET_CURSOR_MODE
SMG$SET_CURSOR_REL
SMG$SET_DISPLAY_SCROLL_REGION
SMG$SET_KEYPAD_MODE
SMG$SET_PHYSICAL_CURSOR
SMG$SET_TERM_CHARACTERISTICS
SMG$UNPASTE_VIRTUAL_DISPLAY