XEDIT
XEDIT is a full-screen text editor integrated into IBM's z/VM operating system, specifically designed for the Conversational Monitor System (CMS), enabling users to create, modify, and manipulate files such as CMS disk files, Shared File System (SFS) files, and Byte File System (BFS) regular files.[1] Invoked via the CMS command XEDIT, it supports both display terminals and typewriter modes, providing a versatile interface for text processing and program development on IBM mainframes.[2]
Developed by IBM engineer Xavier de Lamberterie, XEDIT was first released in 1980 as part of VM System Product (VM/SP) Release 1, succeeding the line-mode EDIT SP editor and drawing influences from earlier tools like the 1970 Ned editor created at IBM's Cambridge Scientific Center.[3] Its design emphasized a compact core with extensive extensibility, allowing customization through macros written in EXEC, EXEC2, and later REXX programming languages, which facilitated automation of complex editing tasks and even its use as a dialog manager for applications.[4][3]
Key features include powerful subcommands for navigation and manipulation, such as INPUT for entering text, CHANGE for global or targeted replacements (supporting compound, repetitive, and recursive operations), and prefix commands like A (after), C (copy), D (delete), and M (move) for line-level operations.[2] It handles large files exceeding available virtual memory through efficient reentrant code running in a shared segment, and supports advanced options like automatic line wrapping, tab settings, double-byte character sets (DBCS), and multi-screen windowing for editing multiple files in a ring structure.[3][2]
XEDIT's enduring popularity stems from its productivity enhancements in the VM/CMS environment, where it revitalized user interfaces during the 1980s amid growing VM installations, and its adaptability has led to ports like uni-XEDIT for Unix systems, preserving its familiar command set for migrating mainframe users.[4][3][5] Evolving through z/VM releases up to version 7.4 (2025), with continued enhancements for modern mainframe environments, it remains a core tool for mainframe professionals, with built-in help, practice modes, and integration with CMS utilities like pipes and file lists.[2][6]
Overview
Description and Purpose
XEDIT is a full-screen visual editor primarily designed for use with 3270 block-mode display terminals, offering line-mode support for non-display or typewriter terminals to enable editing in varied terminal environments.[7][8] Its core functionality centers on providing efficient text processing and program development capabilities within IBM mainframe systems.[7]
The primary purpose of XEDIT is to facilitate the creation, editing, and management of files in z/VM environments, including traditional CMS files on minidisks, Shared File System (SFS) files in directories, and regular files in the Byte File System (BFS).[1][9] It serves as a robust tool for handling data files, distinguishing itself as a power-user alternative to simpler editors in mainframe workflows.[9] In z/VM setups that incorporate TSO/ISPF, XEDIT integrates as an underlying editor option for panels and libraries, enhancing compatibility across VM and z/OS-like interactive sessions.[10][11]
XEDIT supports double-byte character sets (DBCS), such as those used for languages like Japanese (KANJI), through dedicated modes that allow recognition and manipulation of such strings on compatible terminals.[12][13] Additionally, its typewriter mode enables disconnected operations on non-display terminals, ensuring accessibility without full-screen capabilities.[8] The editor is invoked via the CMS command XEDIT filename filetype, which creates a new file if none exists. It has been available in the VM/CMS environment since VM/SP Release 1 in 1980 and remains a core component of z/VM.[1][14][15]
Key Characteristics
XEDIT employs a line-oriented design, where editing operations focus on individual lines or ranges of lines, facilitating efficient text manipulation in a mainframe environment. This approach includes automatic line numbering, enabled via the SET NUM ON subcommand, which displays sequence numbers in the prefix area for easy reference and navigation. Block-based operations allow users to apply commands to specified ranges of lines, such as deleting or moving multiple lines at once using prefix notations like "d5" for five lines.[13][16]
For input efficiency, XEDIT features power typing mode, invoked by the POWERINP subcommand, which enables continuous typing across lines with automatic wrapping to the next line upon reaching the end of the current one. This mode is particularly useful for entering large blocks of text without manual line breaks. Additionally, typewriter mode, set via SET TERMINAL TYPEWRITER, supports non-display or line-mode terminals by simulating a typewriter interface, allowing sequential line input without full-screen rendering.[17][18]
XEDIT supports multiple logical screens through the SET SCREEN subcommand, enabling horizontal or vertical splits to view and edit different files or sections of the same file simultaneously. The number of screens is constrained by available virtual storage, ensuring performance on resource-limited mainframe systems.[19]
To prevent data loss, XEDIT includes autosave functionality via the SET AUTOSAVE n subcommand, which automatically issues a SAVE command after every n changes, creating files with the AUTOSAVE filetype for recovery if the session ends unexpectedly.[20]
Efficiency in command processing is enhanced by the pending list, which queues prefix subcommands and macros for batch execution upon screen refresh, allowing users to enter multiple operations before processing. Complementing this, the RECOVER n subcommand retrieves up to n recently deleted lines from a buffer, inserting them before the current line to facilitate error correction.[21][22]
Customization options include setting tab positions with the SET TABS subcommand, such as specifying columns 10, 20, and 30 for aligned text formatting. XEDIT also provides support for global and selective changes, as seen in commands like CHANGE for pattern replacement across the file, which can be bound to programmable function (PF) keys for quick access.[23][24]
User Interface
Screen Layout
The XEDIT screen layout on 3270 block-mode terminals consists of several standard components designed to facilitate efficient text editing in a mainframe environment. The file identification line, typically at the top (line 1), displays key file details including the filename, filetype, mode (such as A1 for read/write), record format (e.g., V for variable), record length, truncation column (Trunc), file size, current line number (Line=n), column position (Col=m), and alteration count (Alt=p).[25] Below this, the message line (lines 2-3) shows editor messages, errors, or status updates, such as "Creating new file," to communicate directly with the user.[25]
The primary file area occupies the central portion of the screen, displaying the editable content of the file, where the cursor can be positioned for modifications; changes are held in virtual storage until saved via the FILE subcommand.[25] To the left of the file area is the prefix area, a five-character field (defaulting to =====) in each line, used for entering line commands like deletion or copying.[25] A scale line, positioned near the middle of the screen (initially one line below center), provides column indicators (e.g., |...+....1....+....2....) with a column pointer marker to aid precise editing, especially for columnar data.[25] The command line at the bottom features an arrow (====>) followed by an input zone for entering subcommands like BOTTOM, which are case-insensitive and abbreviable.[25] In the lower right, the status area indicates the edit mode and number of files being edited (e.g., "X E D I T 1 File").[25]
Several elements of the layout are customizable using SET subcommands to adapt to user preferences or terminal constraints. The SET PREFIX command controls the prefix area's display and position, with options like ON LEFT (default, showing it on the left), RIGHT (on the right), OFF (hidden), or NULLS (blanks for insert mode compatibility).[26] SET CMDLINE adjusts the command line's location, such as ON (default, using the last two lines), BOTTOM (last line only), TOP (second line), or OFF (no display).[27] The SET SCALE command manages the scale line's visibility and placement, defaulting to ON M+1 (displayed one line below screen middle), with options like OFF, M (middle), or numeric offsets (e.g., +n from top or -n from bottom).[28] SET COLOR (or COLOUR) assigns colors and attributes (e.g., blue, red, high intensity, reverse video) to specific areas like the file area, prefix, scale, or message line, with defaults such as red for messages and high intensity for the current line.[29] Additionally, SET SCREEN enables size adjustments by dividing the virtual screen into multiple logical screens (up to 16), arranged horizontally (minimum 20 columns each) or vertically (minimum 5 lines each), allowing simultaneous views of the same or different files.[30]
Program function (PF) keys provide quick access to common operations, with defaults optimized for 3270 keyboards: PF1 invokes HELP or MENU, PF3 executes QUIT to end the session, PF4 sets TABKEY for tab navigation, PF5 and PF6 handle selective (SCHANGE) and global (ONLY) changes respectively, and PF11 performs SPLTJOIN for splitting or joining lines.[31] On 24-key terminals, PF13–PF24 duplicate PF1–PF12.[31] These defaults can be reassigned via macros or profiles.
XEDIT's layout fully utilizes block-mode 3270 terminals for interactive, buffered editing but adapts to line-mode terminals (e.g., typewriters) by operating as a line-oriented editor without the full-screen visual elements, prioritizing command-line interactions over graphical aids.[32] Visual enhancements include tab stops indicated on the scale line for alignment and color settings for distinguishing areas like shadows in selective editing or top-of-file/end-of-file notices, improving readability in text-heavy mainframe workflows.[29]
XEDIT operates in two primary modes: edit mode, where users enter subcommands for navigation and file manipulation, and input mode, dedicated to inserting text lines. Edit mode is the default upon invoking XEDIT and allows entry of subcommands on the dedicated command line, typically displayed at the bottom of the screen. To enter input mode, users issue the INPUT subcommand, which shifts focus to the input zone for typing new content; pressing Enter after each line adds it to the file, and a double Enter returns to edit mode. For continuous text insertion without line-by-line confirmation, the POWERINP subcommand enables power typing, allowing wrap-around input across multiple lines until explicitly ended.[25]
Navigation within the file relies on subcommands entered in edit mode, targeting specific lines or positions via formats such as absolute line numbers (e.g., 42), relative offsets (e.g., +5 for five lines forward), strings (e.g., /searchterm), or ranges (e.g., 10 20 for lines 10 through 20). The TOP subcommand repositions the display to the first line of the file, while BOTTOM moves to the last line. For searching, LOCATE scans forward for a specified string or line number, wrapping to the beginning if SET WRAP is ON (default). CLOCATE searches from the current column position and moves both line and column pointers to the match; case sensitivity is controlled by the SET CASE subcommand.[33]
Input and insertion can also occur via prefix commands typed in the prefix area adjacent to line numbers on the screen, enabling targeted actions without full subcommands. For instance, entering 'a' (for add) in the prefix of a line inserts blank lines below it for text entry, with the number of lines specified (e.g., a5 adds five); users then switch to input mode to fill them. Similarly, 'i' invokes input mode directly at the current line. These prefix commands support numeric targets for efficiency, such as d3 to delete three lines.[25]
Program function (PF) keys facilitate rapid navigation and mode transitions on 3270-compatible terminals. Standard assignments include PF7 for scrolling backward one screen (equivalent to UP or BACKWARD subcommands) and PF8 for forward scrolling (DOWN or FORWARD). Defaults include PF5 for SCHANGE, which uses locate functions for selective changes. Subcommands like TOP and BOTTOM are invoked directly; PF keys can be customized via the SET PFn subcommand (e.g., SET PF2 TOP, SET PF12 INPUT) for personalized workflows, such as assigning PF12 to INPUT. Pressing Enter after any subcommand or PF key action processes the input and updates the display accordingly.[31]
Core Functionality
Basic Editing Commands
XEDIT provides a set of fundamental commands for text manipulation at the line and character levels, enabling users to insert, delete, and replace content efficiently within files edited in the VM/CMS environment. These commands are entered either via the command line or the prefix area adjacent to line numbers on the screen, allowing precise control over individual lines or selected portions of text. Prefix commands, in particular, operate on the line where they are entered, with numeric modifiers to specify the number of lines affected.[34]
For insertion, the INPUT command enters a mode to add new lines after the current line, where users type text and press Enter to continue adding lines until two consecutive Enter keys are pressed to exit. The SI (shift-insert) prefix command adds indented blank lines continuously, useful for structured text entry, such as entering SI followed by positioning the cursor for indentation. At the character level, CINSERT inserts specified text at the current column pointer, shifting existing material to the right, as in CINSERT "new text" to place content at the cursor position.[34][35][9]
Deletion commands include the D prefix, which removes one or more lines, such as D to delete a single line or D5 to delete five consecutive lines starting from the current one. For character-level removal, CDELETE deletes a specified number of characters from the column pointer or up to a delimiter string, for example, CDELETE 5 to erase five characters or CDELETE /string/ to delete up to the occurrence of "string". These operations maintain the integrity of surrounding text without affecting the overall file structure.[34]
Replacement is handled by the CHANGE command for string substitution, which can target the current line, specific occurrences, or the entire file; syntax is CHANGE/old/new/ for the current line or CHANGE/old/new/* for global replacement across all lines. The OVERLAY method allows direct character replacement by positioning the cursor on a line and typing over existing text, ignoring blanks and overwriting only entered characters. For selective changes, users can combine CHANGE with PF5 to locate the next occurrence of the search string and PF6 to apply the replacement to that instance, enabling step-by-step verification rather than bulk operations. In contrast, the ALL or CURRENT qualifiers in CHANGE specify broad or limited scopes, such as CHANGE/old/new/ALL for file-wide updates.[34][9]
Line-level operations utilize prefix commands on numbered lines for reorganization: A adds blank lines after the current one (e.g., A3 for three lines), C copies lines to a destination marked with F (following) or P (preceding) in the target line's prefix (e.g., C2 F to copy two lines after the target), and M moves lines similarly (e.g., M to relocate one line before a P-marked target). These commands facilitate rearranging content without intermediate storage, directly manipulating the file's sequence. Navigation aids like LOCATE can assist in targeting these operations by searching for specific strings.[34]
XEDIT supports editing of Double-Byte Character Set (DBCS) strings, such as those used in East Asian languages, through the SET ETMODE ON command, which enables proper recognition and manipulation of DBCS data during insertions, deletions, and replacements to prevent corruption of multi-byte sequences. This ensures compatibility with international text without altering the core command syntax.[34]
Block and File Operations
XEDIT supports a range of prefix commands for block operations, enabling users to manipulate contiguous ranges of lines efficiently. The copy command, invoked as C for a single line or CC for a block, duplicates the specified lines to a target location, such as following (F) or preceding (P) the current line, or to absolute line numbers like nn mm. For instance, entering CC on the first and last lines of a block, followed by a target like F 5, copies the block after line 5. Similarly, the move command uses M for single lines or MM for blocks, relocating the content while removing it from the original position, with targets specified in the same manner to avoid overlap issues. Deletion employs D for individual lines or DD for blocks, marking the range with DD on the start and end lines before executing. These operations leverage line prefixes and multi-line targets to handle ranges without disrupting the file structure.[2]
File management in XEDIT facilitates loading, saving, and listing files through dedicated subcommands. The FILE subcommand saves the current file to disk and returns to the previous file in the ring or exits the editing session if it is the only file open. The GET subcommand inserts lines from another file or buffer into the current file after the current line, such as GET filename filetype 1 10 to insert lines 1 through 10 from that file. The PUT subcommand stores specified lines from the current file (or all lines if none specified) into a new or existing file on disk or a temporary buffer, optionally under a new name like PUT newfile data; if appending to an existing file, the lines are added at the end. The QUIT subcommand terminates the editing session, with options to save unsaved changes or exit without saving, ensuring controlled closure. These commands operate within the editor's virtual storage, preserving the working copy until explicitly committed.[2][36][13]
Multiple file editing is managed via a ring structure, where files are loaded into a circular buffer in virtual storage for seamless switching. Users invoke the XEDIT subcommand to add a new file to the ring, such as XEDIT sauces cookbook, shifting focus to it while retaining others; the ring cycles through files with repeated invocations, limited by available storage to prevent exhaustion. This setup supports concurrent edits across files, with the current file displayed in the editor screen. Additionally, XEDIT accommodates BFS path names for byte file system files by specifying NAMETYPE BFS, as in XEDIT /path/to/[file](/page/File) (NAMETYPE BFS), integrating hierarchical file access without altering the ring mechanism. Storage constraints may restrict the number of files in the ring, prompting users to save and close excess ones periodically.[2]
Recovery features provide safeguards against data loss during editing. The RECOVER n subcommand restores the most recently deleted n lines at the current cursor position, useful for reversing accidental block deletions with DD; for example, RECOVER 5 retrieves the last five deleted lines. This operates on a per-session basis, maintaining a buffer of deletions until the session ends. For broader protection, AUTOSAVE automatically commits changes to a temporary file after a user-defined number of edits, configurable via SET AUTOSAVE n, enabling recovery from system crashes by reloading the autosaved version upon restart. Integration with AUTOSAVE ensures minimal loss, though users must enable it explicitly for active sessions.[2]
Overlay operations, particularly with the COVERLAY subcommand, allow precise block replacements while respecting virtual storage limits. COVERLAY overlays a block of text starting from the current column pointer, substituting characters in the target range without shifting lines, as in COVERLAY text to replace from the cursor onward. When applied to blocks, it handles multi-line overlays by aligning with specified targets, but virtual storage boundaries may truncate large operations if the file exceeds allocated memory. This command is essential for in-place modifications in resource-constrained environments, ensuring overlays fit within the editor's storage footprint.[2][37]
Macro Facilities
REXX Language
REXX is the primary programming language used for macros in XEDIT, the full-screen editor for IBM's z/VM operating system and the Conversational Monitor System (CMS). Macros written in REXX are stored as CMS files with the XEDIT file type, distinguishing them from standard REXX executables that use the EXEC file type. This integration enables users to automate complex editing tasks by combining REXX's procedural capabilities with direct access to XEDIT's internal state and subcommands. While modern XEDIT macros primarily use REXX, earlier versions supported EXEC and EXEC2 languages.[38][39]
The syntax of REXX follows its standard structure, featuring variables assigned with the equals sign (e.g., var = value), conditional statements such as IF and SELECT, and looping constructs like DO loops with iterators or conditions. String manipulation, arithmetic operations, and parsing functions from standard REXX are retained, but XEDIT macros primarily interact with the editor through the ADDRESS XEDIT directive, which directs REXX instructions to execute XEDIT subcommands as quoted strings (e.g., ADDRESS XEDIT 'LOCATE string'). This allows macros to query or modify the editing environment, such as retrieving line content or adjusting the cursor position, without exiting the editor.[37][40]
Profile macros in REXX, such as the default PROFILE XEDIT, execute automatically at the start of an editing session to configure settings like tab stops, scale lines, or message modes. Prefix macros, invoked from the prefix area on specific lines, enable line-specific actions, such as inserting structured code templates or validating syntax, by processing the line under the cursor and issuing targeted subcommands. These macros enhance customization while maintaining the editor's interactive nature.[13][39][41]
XEDIT provides several built-in REXX macros for common operations, including HELP for displaying contextual assistance on subcommands, ALTER for substituting individual characters not available on the terminal keyboard, and GLOBCHG for performing global search-and-replace across the file or nested includes. These can be invoked directly from the command line, prefix area, or programmable function (PF) keys, streamlining repetitive tasks like formatting or debugging.[42][13][43]
Compared to standard REXX, XEDIT integration includes extensions for accessing editor state, such as functions and subcommands that manage line pointers (e.g., input and output pointers for block movements) and the pending list (a queue of unexecuted prefix commands). For instance, the QUERY INPUTPTR subcommand retrieves the current input line position, while macros can clear or inspect the pending list to handle deferred operations. These features make REXX tightly coupled with XEDIT's architecture, prioritizing editor control over general system-level interactions.[37][21]
Macro Usage and Customization
Macros in XEDIT are invoked through several methods to facilitate efficient editing workflows. A direct EXEC call can execute a macro by entering EXEC macroname on the command line, allowing integration with REXX scripts for broader automation.[32] Prefix integration enables macros to process line-specific commands in the prefix area, such as applying changes to selected blocks via commands like LPREFIX mm n2, which is particularly useful for typewriter terminals or targeted edits.[32] PF key assignment provides quick access by mapping macros to function keys using SET PF n macroname, where n ranges from 1 to 24, streamlining repetitive invocations during sessions.[37] Macros process commands via the pending list, managed by SET PENDING ON to queue operations indicated by "..... pending..." in the prefix area, which can then be executed with ENTER or RESET for batched handling.[32]
Customization of XEDIT macros occurs primarily through profile files and user-defined scripts to tailor behavior for specific tasks. The PROFILE XEDIT macro, executed automatically at session startup unless bypassed with NOPROFILE, allows users to set persistent options like SET AUTOSAVE n to automatically save changes after n alterations, preventing data loss during extended edits.[2] User macros extend this by encapsulating repetitive tasks, such as batch changes across files, into reusable scripts stored as files with the XEDIT file type.[2] These customizations enhance productivity by embedding settings directly into workflows, with options like LOAD in profiles to incorporate external files for dynamic configurations.[37]
Practical examples illustrate macro versatility. A simple macro for global search-and-replace might use a REXX loop to iteratively apply the CHANGE subcommand:
ADDRESS XEDIT
arg old new
'locate /'old'/'
do while rc = 0
'change /'old'/'new'/'
'locate /'old'/'
end
ADDRESS XEDIT
arg old new
'locate /'old'/'
do while rc = 0
'change /'old'/'new'/'
'locate /'old'/'
end
This script locates and replaces instances of old with new until none remain, ideal for bulk text updates.[32] For profile setup, a PROFILE XEDIT example could include:
SET TABS 1 5 10
SET COLOR FILEAREA GREEN
SET TABS 1 5 10
SET COLOR FILEAREA GREEN
This configures tab stops at columns 1, 5, and 10 while coloring the file area green for better visibility.[2] Error handling in macros employs return codes and messages, such as:
if rc > 0 then do
'msg Error occurred, RC='rc
exit rc
end
if rc > 0 then do
'msg Error occurred, RC='rc
exit rc
end
This displays an error with the return code and exits gracefully if a subcommand fails.[32]
Automation via macros streamlines block operations and file management, significantly reducing manual effort in z/VM environments. For block operations, macros can chain subcommands like COPY or MOVE with ranges (e.g., move :5 :10) to handle multi-line edits efficiently across selections.[2] File rings benefit from automated navigation using NEXT, PREV, or RING combined with GET and PUT to edit and transfer data between multiple open files seamlessly.[32] These features boost efficiency for tasks like data migration or report generation, though they are limited by available virtual storage, which may trigger errors like RC=104 for insufficient memory during complex operations.[2]
Advanced macros achieve interactivity by combining with subcommands like HELP and ALTER for user-guided processing. The HELP facility provides contextual assistance within macros (e.g., HELP CHANGE), prompting users for input during execution.[2] ALTER enables dynamic modifications, such as replacing characters file-wide (ALTER char1 char2 *), allowing macros to adapt based on real-time user responses via READ for enhanced dialog-like behavior.[32]
History
Origins in VM/CMS
XEDIT originated as a full-screen text editor developed by IBM for the Virtual Machine/System Product (VM/SP) environment, specifically designed to enhance editing capabilities within the Conversational Monitor System (CMS) of VM/CMS. Created by IBM engineer Xavier de Lamberterie—who is credited with the "X" in the editor's name—XEDIT was introduced to address the limitations of earlier line-mode editors like the original CMS EDIT, providing a more efficient tool for mainframe users interacting via IBM 3270 block-mode terminals. Its development in the late 1970s focused on interactive editing to improve productivity for users with varying levels of data processing expertise.[3][44]
The editor's design drew influences from several predecessors and contemporary tools, including the CP-67 editor, university-developed editors from Grenoble with macro capabilities, the Ned editor from around 1970, and elements from Edgar and the Interactive System Productivity Facility (ISPF) for full-screen interactions. Released in 1980 as part of VM/SP Release 1 (Program Number 5664-167), XEDIT marked a significant milestone by replacing rudimentary line editors and becoming a standard component of VM/CMS installations. This initial version, documented in IBM's System Product Editor User's Guide, supported both full-screen and line-mode operations on display and typewriter terminals, enabling interactive editing of CMS disk files.[45][3]
Key innovations in XEDIT's early implementation included block-mode support for efficient multi-line operations, such as deleting or moving blocks of text via simple prefix commands like "DD" for delete. Prefix commands—single-character entries in a dedicated prefix area (e.g., "A" for add lines, "C" for copy)—allowed precise, line-oriented manipulations without full subcommand entry, streamlining workflows for programmers and text processors. Additionally, foundational macro facilities were introduced, based on EXEC 2, enabling users to automate repetitive tasks and extend functionality; as de Lamberterie noted, the design kept the core "relatively small" to facilitate such customizations via EXECs or later REXX macros. These features positioned XEDIT as an essential tool in VM/CMS, copyrighted by IBM Corporation and rapidly adopted for its role in enhancing interactive computing efficiency.[45][3]
Evolution in z/VM Systems
XEDIT transitioned seamlessly into the z/VM operating system upon its initial release in October 2000, inheriting its core functionality from the preceding VM/ESA environment while adapting to the z/Architecture hardware platform. This evolution ensured continued support for full-screen editing in the CMS component of z/VM, with ongoing enhancements aligned to major releases. Significant updates appeared in z/VM 7.1 (August 2018); z/VM 7.2 (September 2020); z/VM 7.3 (September 2022), which changed the default case for non-special file types from uppercase to mixed case in XEDIT and related LOAD subcommands; and z/VM 7.4 (September 2024), continuing compatibility and service updates as of 2025.[15][46]
XEDIT has long supported editing regular files in the Byte File System (BFS, introduced in 1995), enabling users to create, modify, and manipulate BFS files directly through XEDIT while requiring appropriate access permissions via the OPENVM PERMIT command. Double-Byte Character Set (DBCS) handling allows subcommands like PRESERVE, SET MSGLINE, and STATUS to operate effectively in extended mode (ETMODE ON) for multilingual text processing. Autosave functionality is available through the SET AUTOSAVE subcommand, which can be invoked at any point in an editing session to automatically save changes at specified intervals, mitigating data loss in long sessions. Multiple screen expansions are facilitated by the SET SCREEN subcommand, permitting division of the virtual screen into multiple logical screens for simultaneous editing of files or views, enhancing productivity in complex workflows.[47][1][48]
IBM maintained copyright over XEDIT through at least 2024, reflecting continuous development and maintenance tailored for z/VM's role in enterprise mainframe virtualization. Compatibility remains a cornerstone, with z/VM ensuring backward support for legacy behaviors such as saving empty files without alterations, and adaptations for disconnected mode operations to preserve session state. Despite a gradual shift toward alternatives like ISPF in hybrid z/OS-z/VM environments for standardized interfaces, XEDIT's persistence in z/VM stems from its powerful macro facilities, including REXX integration, which enable extensive customization unmatched by many contemporaries.[34][49][50]
Adaptations
PC and Windows Ports
KEDIT, developed by Mansfield Software Group, Inc., emerged in the 1980s as a prominent adaptation of XEDIT for personal computers, initially targeting MS-DOS environments before expanding to Windows. First made available in 1983, it was designed to replicate the functionality of the mainframe-based XEDIT editor while adapting its capabilities to PC hardware and operating systems.[51] This port maintained high fidelity to XEDIT's core editing paradigm, making it accessible for users transitioning from mainframe systems to personal computing for development tasks.[52]
Central to KEDIT's design are retained features such as prefix commands for line-level operations, KEXX macros compatible with XEDIT's scripting needs, split-screen editing for multitasking, and line numbering for precise navigation. These elements preserve XEDIT's line-oriented workflow, enabling efficient text manipulation in a familiar format. Enhancements tailored to PC and Windows platforms include mouse support for intuitive selection and navigation, file filters for handling diverse text types like programs and data files, toolbars for quick access to functions, and drag-and-drop integration. Despite these additions, KEDIT upholds a text-centric core, avoiding full graphical restructuring.[52][53]
KEDIT gained traction among former mainframe professionals adapting to PC-based development. The Windows version, KEDIT for Windows, ensures compatibility with modern systems up to Windows 10 and 11, using a 32-bit architecture with multiple document interface (MDI) for file handling and seamless integration with Windows file systems, fonts, and print management. This allows one-file-per-window editing while retaining command-line efficiencies.[51][52]
As a commercial product, KEDIT is available through Mansfield Software Group with a fully featured demo version that permits editing of files up to 75 lines for evaluation, after which purchase is required for unlimited use; support extends through June 2026, with sales continuing until at least the end of 2025.[54][51]
Unix and Linux Implementations
One of the early adaptations of XEDIT for Unix systems is SEDIT, a programmer's editor developed by the Benaroya Company and patterned after IBM's XEDIT and ISPF/PDF editors to provide familiarity for mainframe users transitioning to Unix environments.[55] Released for Unix platforms, SEDIT supports a graphical user interface leveraging the MOTIF or OPENLOOK X Window managers, while also accommodating character-mode operation on dumb ASCII terminals through a curses-like interface for terminal-based editing.[56] It emulates key XEDIT commands, including block operations, rectangular selections, and multi-file editing, with enhancements such as unlimited undo/redo, full color support, mouse-driven cut-and-paste across windows, and integration with the S/REXX scripting language for macro automation similar to KEXX.[56]
A more modern implementation is uni-XEDIT, developed by The Workstation Group as a direct port of the VM/CMS XEDIT editor to Unix and Linux systems, targeting programmers and administrators migrating from mainframe environments.[5] Available for various Unix variants including Solaris, AIX, HP-UX, IRIX, and Linux distributions on Intel and S/390 architectures, uni-XEDIT preserves the original layout, command structure, and power typing features while adding a full X-based graphical interface with scroll bars, menus, mouse support, and dynamic window resizing.[57][5] It supports character-mode operation using curses for terminal environments, emulates 3270-style keyboard mappings via a utility for compatibility with ASCII terminals and telnet sessions, and includes uni-REXX for executing KEXX-compatible macros, enabling preserved automation from mainframe workflows with minimal modifications.[58] Additional enhancements focus on modern file handling and multi-file editing, contrasting with modal editors like vi or emacs by offering a non-modal, English-like command set for immediate productivity among mainframe migrants, though it remains a licensed product rather than open-source.[58]
Another Unix adaptation is xedit, a basic text editor included in the X Window System distribution, which provides simple full-screen editing but lacks faithful emulation of XEDIT's advanced block-mode commands, macros, or 3270 terminal features, making it more suitable for lightweight tasks than comprehensive mainframe-style editing.[59]