dpz@topaz.RUTGERS.EDU (David P. Zimmerman) (05/11/86)
nansi - enhanced MS-DOS ansi console driver SYNOPSIS Include in \config.sys the line device=nansi.sys DESCRIPTION Nansi.sys is a console driver which understands ANSI control sequences. It has several advantages over ANSI.SYS (the driver supplied with DOS): 1. It supports new escape sequences (see below). 2. It provides MUCH faster output under certain conditions. 3. It supports the 43-line mode of the EGA. 4. The darned bell is now 1/4 second instead of 1/2 second long. What a console driver does: When you, for example, type C:> type foo.txt COMMAND.COM opens the file foo.txt, reads it, and writes it to the console driver, which puts it up on the screen. Both ansi.sys and nansi.sys use IBM Video BIOS to control the screen. However, nansi.sys bypasses BIOS if the screen is in a text mode; this allows much faster operation under certain conditions. While putting text up on the screen, (n)ansi.sys keeps a lookout for the escape character (chr(27), known as ESC); this character signals the start of a terminal control sequence. Terminal control sequences follow the format ESC [ param; param; ...; param cmd where ESC is the escape character chr$(27). [ is the left bracket character. param is an ASCII decimal number, or a string in quotes. cmd is a case-specific letter identifying the command. Usually, zero, one, or two parameters are given. If parameters are omitted, they usually default to 1; however, some commands (KKR and DKOCT) treat the no-parameter case specially. Spaces are not allowed between parameters. For example, both ESC[1;1H and ESC[H send the cursor to the home position (1,1), which is the upper left. Either single or double quotes may be used to quote a string. Each character inside a quoted string is equivalent to one numeric parameter. Quoted strings are normally used only for the Keyboard Key Reassignment command. Control Sequences The following table lists the sequences understood by nansi.sys. Differences between nansi.sys and the standard ansi.sys are marked with a vertical bar (|). Cursor Positioning Short Long name Format Notes CUP cursor position ESC[y;xH Sets cursor position. HVP cursor position ESC[y;xf Same as CUP; not recommended. CUU cursor up ESC[nA n = # of lines to move CUD cursor down ESC[nB CUF cursor forward ESC[nC n = # of columns to move CUB cursor backward ESC[nD DSR Device Status, Report! ESC[6n Find out cursor position. CPR Cursor Position report ESC[y;xR Response to DSR, as if typed. SCP Save Cursor Position ESC[s Not nestable. RCP Restore Cursor Position ESC[u Editing ED Erase in Display ESC[2J Clears screen. EL Erase in Line ESC[K Clears to end of line. IL | Insert Lines ESC[nL Inserts n blank lines at cursor line. DL | Delete Lines ESC[nM Deletes n lines including cursor line. ICH | Insert Characters ESC[n@ Inserts n blank chars at cursor. DCH | Delete Characters ESC[nP Deletes n chars including cursor char. Mode-Setting SGR Set Graphics Rendition ESC[n;n;...nm See character attribute table. SM Set Mode ESC[=nh See screen mode table. RM Reset Mode ESC[=nl See screen mode table. IBMKKR Keyboard Key Reass. ESC["string"p The first char of the string gives the key to redefine; the rest of the string is the key's new value. To specify unprintable chars, give the ASCII value of the char outside of quotes, as a normal parameter. IBM function keys are two byte strings; see the IBM Basic manual. For instance, ESC[0;";dir a:";13;p redefines function key 1 to have the value "dir a:" followed by the ENTER key. | If no parameters given, all keys are reset to their default values. DKOCT | Output char translate ESC[n;ny | When first char is encountered in output request, it is replaced with | the second char. This might be useful for previewing text before | sending it to a printer with a funny print wheel. | If no parameters are given, all chars are reset to normal. Character Attributes The Set Graphics Rendition command is used to select foreground and background colors or attributes. When you use multiple parameters, they are executed in sequence, and the effects are cumulative. Attrib code Value 0 All attributes off (normal white on black) 1 Bold 4 Underline 5 Blink 7 Reverse Video 8 Invisible (but why?) 30-37 foregnd blk/red/grn/yel/blu/magenta/cyan/white 40-47 background Screen Modes The IBM BIOS supports several video modes; the codes given in the BIOS documentation are used as parameters to the Set Mode command. | (In bitmap modes, the cursor is simulated with a small blob (^V).) Mode Code Value 0 text 40x25 Black & White 1 text 40x25 Color 2 text 80x25 Black & White 3 text 80x25 Color 4 bitmap 320x200 4 bits/pixel 5 bitmap 320x200 1 bit/pixel 6 bitmap 640x200 1 bit/pixel 7 (cursor wrap kludge) 13 (EGA) bitmap 320x200 4 bits/pixel ? 14 (EGA) bitmap 640x200 4 bits/pixel 16 (EGA) bitmap 640x350 4 bits/pixel Mode 7 is an unfortunate kludge; Setting mode 7 tells the cursor to wrap around to the next line when it passes the end of a line; Resetting mode 7 tells the cursor to not wrap, but rather stay put. | If your computer has the Enhanced Graphics Adaptor, modes between | 8 and 15 are also supported; see the EGA BIOS for info. | The EGA also lets you use a shorter character cell in text modes | in order to squeeze 43 lines of text out of the 25-line text modes. | To enter 43 line mode, set the desired 25-line text mode (0 to 3), | then Set Mode 43. For instance: ESC[=3h ESC[=43h. | To exit 43 line mode, set the desired 25-line text mode again. | Nansi.sys ignores mode 43 unless there is an EGA on your computer. Faster Output | Any program that sets the console to RAW mode, and buffers its | output properly, can achieve extremely high screen update speeds in | return for giving up the special functions of the keys ^C, ^S, and ^P. | See IOCTL in the MS-DOS 3.x Technical Reference for more info. Also, a small improvement in speed may be noticed with some programs that use the DOS console in normal mode, as this driver efficiently implements the (standard but undocumented) INT 29h most-favored-device putchar used by DOS. EXAMPLES See the file setraw.doc for Macro Assembler, Lattice C, and Microsoft C routines for entering and leaving raw mode. BUGS Insert and delete character do not work in graphics modes. Graphics mode writing is slow. The simulated cursor in graphics mode slows down single-char writes by a factor of 3; it should be disable-able. Does not support erase-to-end-of-screen and other useful functions. Version This version, 2.2, created February 1986. Problems should be reported to Daniel Kegel, 1-60 CIT, Pasadena, CA 91126 (or, after June 1986, 2648 169th Ave SE, Bellevue, Wa. 98008). Your suggestions for improvement would be most welcome. NOTE This program may be distributed for educational and personal use only. Commercial use is verboten; get in touch with the author. FILES nansi.doc - this file nansi.hex - compiled version <Not supported by INFO-IBMPC> Convert nansi.hex into nansi.sys with the following commands (you'll end up with 256 extra bytes at end, but who cares?): debug # Run DOS debugger N nansi.hex # Load the hex file L N nansi.sys # Write it out W Q # Quit- back to DOS. nansi.cat - concatenated sources nansi - makefile- shows how to assemble & link nansi.asm - device driver guts nansi_d.asm - definitions nansi_p.asm - ANSI parameter grabber nansi_f.asm - ANSI function handlers nansi_i.asm - device driver init routine setraw.cat - concatenated examples setraw.asm - for assembly programs setraw.msc - for Microsoft C programs setraw.lc - for Lattice C programs rawtest.lc - example for Lattice C only -- Name: David P. Zimmerman Nickname: "Davidann" (don't ask) Cute quote: " (well, *I* think it's cute!) Arpa: dzimmerman@blue.rutgers.edu Uucp: ...{harvard, allegra, seismo}!topaz!dpz