home *** CD-ROM | disk | FTP | other *** search
- 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 EGA 43-line mode and ATT 6300 50-line mode.
- 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<CR> 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[0J or ESC[J Clear to end of screen.
- | ESC[1J Clear to start of screen.
- 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 (no effect in graphics modes)
-
- Screen Modes
- The Set Mode and Reset Mode sequences both accept one parameter,
- with the following values:
- Mode Code Value (same for Set and for Reset)
- 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
- | 13 EGA graphics 320x200 4 bits/pixel
- | 14 EGA graphics 640x200 4 bits/pixel
- | 15 EGA [ IBM Monochrome display 640x350 2 bits/pixel?]
- | 16 EGA graphics 640x350 4 bits/pixel [with full 256K]
-
- Mode Code Set Reset
- 7 *Wrap at end of line No wrap at EOL
- | 43 43 Lines on EGA *25 Lines
- | 44 Wait for retrace *No wait
- | 45 *Graphics Cursor No simulated graphics cursor
- | 50 50 Lines on ATT 6300 *25 Lines
-
- [ * = default ]
-
- Screen Snow
- If your screen flares up with annoying little white bars ("snow"),
- you probably should tell Nansi to wait for retrace before writing
- to the screen, by sending the string
- ESC [ = 44 h
- This doesn't clear up the snow under all conditions, but it helps
- quite a bit. Unfortunately, it also slows down output somewhat.
-
- Little Dead Blobs
- If you are using a graphics mode, and the cursor leaves little
- dead blobs behind when it moves, you are probably using a program
- which bypasses DOS (naughty, naughty). It might help to tell
- Nansi to turn off its graphics cursor by sending the string
- ESC [ = 45 l
- (The last character in that string is a lowercase "L".)
-
- Faster Output
- Any program that
- 1) uses Nansi.sys,
- 2) sets the console to RAW mode (with IOCTL), and
- 3) buffers its output (C programmers: use setbuf),
- can achieve EXTREMELY high screen update speeds in return
- for giving up the special functions of the keys ^C, ^S, and ^P
- (which many programs, editors for example, don't want anyway).
- See IOCTL in the MS-DOS 3.x Technical Reference for more info.
-
- Portability to Microsoft Windows
- According to Microsoft, any program that uses ANSI.SYS escape
- sequences will work under Microsoft Windows without changes.
- It appears that the speed advantages of Nansi may be preserved
- by MS-Windows when better graphics boards become available.
- This is one of the best reasons for using Nansi instead of
- directly accessing the memory mapped video text buffer.
-
- [ Caveat: I have found that Cursor Position Report simply
- does not work under MS-Windows. This is a shame, because
- CPR makes it possible for text editors to automatically sense
- the size of the screen. ]
-
- EXAMPLES
- See the files setraw.* for Macro Assembler, Lattice C,
- and Microsoft C routines for entering and leaving raw mode.
-
- The files mode*.txt included with nansi.sys in the library
- new_ansi.lbr contain the Set Mode sequences to set various
- screen modes; for instance, to try out 43 line mode, type
- C:> type MODE43.TXT
- [ To get back to normality, type the file "mode3.txt"; don't use
- the mode command, as that doesn't let nansi know what happened...]
-
- The programs view.com and more.com are demos of this driver's
- blinding screen update speed; refer to view.doc and more.doc for
- details. Briefly, typing
- C:> more foo.txt
- shows you the file foo.txt, pausing every 24 lines for you to hit
- the spacebar. Typing
- C:> view foo.txt
- shows you the first page of the file foo.txt; typing PgUp or PgDn moves
- you backwards or forwards in the file; typing 'q' exits to DOS.
-
-
- BUGS
- The Set Mode and Reset Mode codes 43, 44, 45, and 50 were chosen
- without even looking to see if there are established codes
- for those functions.
-
- Insert and delete character do not work in graphics modes
- because BIOS does not include a scroll left/right function.
-
- Graphics mode writing is slow because it uses BIOS.
-
- It is difficult to add new screen access methods to nansi.asm;
- nansi should be rewritten so parsing text into printable
- blocks is separate from writing those blocks onto the screen.
-
- Does not support some other useful functions.
-
- Cursor Position Report has a carriage return in it, which is what
- ansi.sys does, but is nonstandard.
-
- When using 43 line mode, typing MODE CO80 will get you back
- to 25 line mode- but NANSI will still scroll as if there were 43
- lines! You have to use the SET MODE escape sequence instead of MODE.
- Should either intercept BIOS calls or sense the extended AT/EGA bios
- variable for # of lines.
-
- Version
- This is a modification of NANSI 2.4, incorporating changes made
- by Ron Henderson <crh@hpcvmcrh.cv.hp.com> to version 2.2. These
- changes (non-destructive tab, ignore NULLs instead of outputing
- as spaces, send "nansi" in response to ESC[c query, clear with
- ESC [ J, ESC [ 0 J, ESC [ 1 J) were merged into NANSI 2.4 by
- Howard Chu <hyc@admin.lsa.umich.edu>, Oct. 30, 1990. This doc
- file has been updated to represent the current state.
- (The version number can be found by typing TYPE NANSI.SYS.)
- This version, 2.4, created August 1986.
- It fixes several nasty bugs in the last release (2.2), so please
- pass this version on to anyone who had the old version.
-
- NOTE
- I intend to upgrade this program from time to time, and will
- post new versions to Usenet.
- Problems or suggestions should be sent to the author, Daniel Kegel:
- Post: 17 Mulberry Street
- Rochester, NY 14620 USA
- Usenet: ...rochester!srs!dan
-
- My thanks to Ed Nather, Pete Galvin, Bill Dudley, and others
- who have helped fix bugs or who have contributed features.
-
- This program and all files associated with it are hereby placed
- in the public domain, and thus may be freely copied and distributed.
-
- If you really like this program, either
- (a) improve it, and place your improvements in the public domain,
- (b) write a neat program which uses Nansi's unique speed, and
- place your program in the public domain,
- (c) tip the author (Tip; contraction for "To Inspire Programmer";
- traditionally, a contribution of $5 per copy), or
- (d) resolve to become a better human being in the future.
-
- However, I suggest that any modifications be clearly marked, and
- (if reasonable) surrounded by IF/ ELSE/ ENDIF statements.
- The programmer doing the modification should append his/her initials
- to the version number string (near the device driver header).
-
- FILES
- makefile
- nansi*.asm - console driver source files
- nansi.sys - console driver executable file
- nansi.doc - console driver documentation (this file)
- view.* - a fast VI-like file viewer, documentation
- more.* - a fast page-at-a-time TYPE command, documentation
- unsetraw.* - program to set/unset RAW mode from DOS command line
- mode*.set - example Set Mode escape sequences
- mode*.rst - example Reset Mode escape sequences
-