ANSI.SYS

ANSI.SYS is a device driver in the DOS family of operating systems that provides extra console functions through ANSI escape sequences. It is partially based upon a subset of the text terminal control standard proposed by the ANSI X3L2 Technical Committee on Codes and Character Sets (the "X3 Committee").

As it was not installed by default, and was notoriously slow, little software took advantage of it and instead resorted to directly manipulating the IBM PC hardware. A number of third-party alternatives that ran at reasonable speed were created, such as ANSI.COM, NANSI.SYS and ANSIPLUS.EXE to attempt to change this.

Usage
To use ANSI.SYS under DOS, a line is added to the CONFIG.SYS (or CONFIG.NT under Windows NT based versions of Windows) file that reads:


 * DEVICE=drive:\path\ANSI.SYS options

where drive: and path are the drive letter and path to the directory in which the file ANSI.SYS is found, and options can be a number of optional switches to control the behaviour. ANSI.SYS may also be loaded into upper memory via DEVICEHIGH/HIDEVICE.


 * /K use extended keyboard BIOS functions (INT 16h) rather than standard ones This made the F11 and F12 keys work.
 * /L force number of lines
 * /R adjust line scrolling to support screen readers
 * /S or /SCREENSIZE set screensize
 * /X support redefinition of extended key codes independent of standard codes

Functionality
Using this driver, programs that write to the standard output can make use of the 16 text foreground colors and 8 background colors available in VGA-compatible text mode, make text blink, change the location of the cursor on the screen, and blank the screen. It also allows for the changing of the video mode from standard 80×25 text mode to a number of different graphics modes (for example, 320×200 graphics mode with text drawn as pixels, though ANSI.SYS is not able to turn individual pixels on and off).

The standard ANSI.SYS is relatively slow as it maps escape sequences to BIOS calls (which managed to be designed so that two calls were needed to put a character on the screen and move the cursor right). Several companies made third-party replacements that interface directly with the video memory, in a similar way to most DOS programs that have a full-screen user interface.

By default, the internal DOS command CLS works by directly calling the corresponding BIOS function to clear the screen, thereby prominently violating the hardware abstraction model.

Keyboard remapping
An interesting feature of ANSI.SYS is the ability to remap any key on the keyboard in order to perform shortcuts or macros for complex instructions. Using special escape sequences, the user can define any keystroke that has a character-code mapping to simulate an arbitrary sequence of such keystrokes. This feature was also used to create simple trojans out of text files laced with nefarious keyboard remaps, known as "ANSI bombs". A number of products were released to protect users against this:
 * Some versions of ANSI.SYS support a command line switch to disable the key remapping feature, f.e. the option /S (Secure) in ANSI.SYS of Datalight ROM-DOS or NANSI.SYS of FreeDOS. Other ANSI drivers like ANSIPLUS can be configured to disable the redefinition of keys as well.
 * Setting CONFIG.SYS SCREEN=ANSI in PTS-DOS provides a built-in ANSI driver not supporting the keyboard remapping functions.
 * Some of the third-party ANSI.SYS replacements were deliberately designed never to support the keyboard remapping functions.
 * PKWARE produced a terminate-and-stay-resident program, PKSFANSI (PK Safe ANSI), which filters out keyboard remapping escape codes as they are written to the standard output. This has the advantage that the user can load some useful remappings from a text file and then run PKSFANSI to prevent further, possibly malicious remappings.

Occurrence
ANSI.SYS appeared in MS-DOS 2.0, the first version of the operating system supporting device drivers. It was supported by all following versions of MS-DOS. It is also present in many non-Microsoft DOS systems, e.g. IBM PC DOS and DR-DOS.

ANSI.SYS was required to run some software that used its cursor and color control functions. It could also be used to enable elaborate color codes in the COMMAND.COM prompt. These uses were overshadowed by the use of ANSI.SYS in BBSes; ANSI escape sequences were used to enable BBSes to send text graphics more elaborate than ASCII art, and to control the cursor in ways that were used in a number of online games and similar features.

Most versions of Windows did not support ANSI escape codes in any useful way (it could be used by MSDOS emulation in some versions). In Windows 10 support for similar escape sequences was built into the Win32 console (the text terminal window), but must be activated using the Windows API function SetConsoleMode by setting the ENABLE_VIRTUAL_TERMINAL_PROCESSING flag.

Features
CSI (Control Sequence Introducer) is a placeholder for the common two-byte escape lead-in sequence "ESC [" (that is, 0x1B 0x5B). The ANSI standard also defines an alternative single-byte CSI code 0x9B, which is not supported by ANSI.SYS (this code instead drew a cent sign $⟨¢⟩$ from CP437).

Standard DOS ANSI.SYS drivers support only the following sub-set of ANSI escape sequences:

There are also some escape sequences specific to the implementation of ANSI.SYS. They are not generally supported by ANSI consoles in other operating systems.

In some DOS implementations, video modes above 7 are not documented. Under Multiuser DOS, the only valid argument in conjunction with PCTERM is 7.