init
This commit is contained in:
commit
19991bee2a
44 changed files with 4799 additions and 0 deletions
BIN
nansi/NANSI.SYS
Normal file
BIN
nansi/NANSI.SYS
Normal file
Binary file not shown.
291
nansi/license.txt
Normal file
291
nansi/license.txt
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
http://www.gnu.org/copyleft/gpl.html
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom
|
||||
to share and change it. By contrast, the GNU General Public License is
|
||||
intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This General
|
||||
Public License applies to most of the Free Software Foundation's
|
||||
software and to any other program whose authors commit to using it.
|
||||
(Some other Free Software Foundation software is covered by the
|
||||
GNU Library General Public License instead.) You can apply it to your
|
||||
programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new free
|
||||
programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone
|
||||
to deny you these rights or to ask you to surrender the rights. These
|
||||
restrictions translate to certain responsibilities for you if you distribute
|
||||
copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that you have. You
|
||||
must make sure that they, too, receive or can get the source code. And
|
||||
you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on,
|
||||
we want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents.
|
||||
We wish to avoid the danger that redistributors of a free program will
|
||||
individually obtain patent licenses, in effect making the program
|
||||
proprietary. To prevent this, we have made it clear that any patent must
|
||||
be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR
|
||||
COPYING, DISTRIBUTION AND
|
||||
MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a
|
||||
notice placed by the copyright holder saying it may be distributed under
|
||||
the terms of this General Public License. The "Program", below, refers
|
||||
to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it, either
|
||||
verbatim or with modifications and/or translated into another language.
|
||||
(Hereinafter, translation is included without limitation in the term
|
||||
"modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of running
|
||||
the Program is not restricted, and the output from the Program is
|
||||
covered only if its contents constitute a work based on the Program
|
||||
(independent of having been made by running the Program). Whether
|
||||
that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the notices
|
||||
that refer to this License and to the absence of any warranty; and give
|
||||
any other recipients of the Program a copy of this License along with the
|
||||
Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide a
|
||||
warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but does
|
||||
not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program, and
|
||||
can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based on
|
||||
the Program, the distribution of the whole must be on the terms of this
|
||||
License, whose permissions for other licensees extend to the entire
|
||||
whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise the
|
||||
right to control the distribution of derivative or collective works based
|
||||
on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the
|
||||
Program with the Program (or with a work based on the Program) on a
|
||||
volume of a storage or distribution medium does not bring the other
|
||||
work under the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding
|
||||
machine-readable source code, which must be distributed under
|
||||
the terms of Sections 1 and 2 above on a medium customarily
|
||||
used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your cost
|
||||
of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with
|
||||
such an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to control
|
||||
compilation and installation of the executable. However, as a special
|
||||
exception, the source code distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies the
|
||||
executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to
|
||||
copy from a designated place, then offering equivalent access to copy
|
||||
the source code from the same place counts as distribution of the source
|
||||
code, even though third parties are not compelled to copy the source
|
||||
along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt otherwise
|
||||
to copy, modify, sublicense or distribute the Program is void, and will
|
||||
automatically terminate your rights under this License. However, parties
|
||||
who have received copies, or rights, from you under this License will not
|
||||
have their licenses terminated so long as such parties remain in full
|
||||
compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and all
|
||||
its terms and conditions for copying, distributing or modifying the
|
||||
Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the original
|
||||
licensor to copy, distribute or modify the Program subject to these terms
|
||||
and conditions. You may not impose any further restrictions on the
|
||||
recipients' exercise of the rights granted herein. You are not responsible
|
||||
for enforcing compliance by third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot distribute
|
||||
so as to satisfy simultaneously your obligations under this License and
|
||||
any other pertinent obligations, then as a consequence you may not
|
||||
distribute the Program at all. For example, if a patent license would not
|
||||
permit royalty-free redistribution of the Program by all those who
|
||||
receive copies directly or indirectly through you, then the only way you
|
||||
could satisfy both it and this License would be to refrain entirely from
|
||||
distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents
|
||||
or other property right claims or to contest validity of any such claims;
|
||||
this section has the sole purpose of protecting the integrity of the free
|
||||
software distribution system, which is implemented by public license
|
||||
practices. Many people have made generous contributions to the wide
|
||||
range of software distributed through that system in reliance on
|
||||
consistent application of that system; it is up to the author/donor to
|
||||
decide if he or she is willing to distribute software through any other
|
||||
system and a licensee cannot impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be
|
||||
a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original
|
||||
copyright holder who places the Program under this License may add an
|
||||
explicit geographical distribution limitation excluding those countries, so
|
||||
that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new
|
||||
versions of the General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may differ in
|
||||
detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number
|
||||
of this License, you may choose any version ever published by the Free
|
||||
Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we
|
||||
sometimes make exceptions for this. Our decision will be guided by the
|
||||
two goals of preserving the free status of all derivatives of our free
|
||||
software and of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF
|
||||
CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM,
|
||||
TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
|
||||
WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE
|
||||
PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
|
||||
EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
|
||||
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
|
||||
THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
|
||||
COST OF ALL NECESSARY SERVICING, REPAIR OR
|
||||
CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW
|
||||
OR AGREED TO IN WRITING WILL ANY COPYRIGHT
|
||||
HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
|
||||
ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
|
||||
ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
|
||||
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
|
||||
LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
||||
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
|
||||
WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
|
||||
OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
988
nansi/readme.txt
Normal file
988
nansi/readme.txt
Normal file
|
|
@ -0,0 +1,988 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
NANSI.SYS
|
||||
An Enhanced MS-DOS Console Driver
|
||||
Version 3.4 November 1991
|
||||
Documentation updated February 1999
|
||||
http://alumni.caltech.edu/~dank/nansi/
|
||||
|
||||
|
||||
1. Introduction - Who should use NANSI.SYS
|
||||
|
||||
NANSI.SYS is a console device driver for MS-DOS computers. It exe-
|
||||
cutes the same ANSI cursor control sequences as does the standard con-
|
||||
sole driver ANSI.SYS, but significantly faster. It also offers
|
||||
several extra features, while still being simple, small, and cheap.
|
||||
|
||||
You can benefit from using NANSI.SYS if:
|
||||
1. you use programs (such as DIR, MORE, or NETHACK) which display text
|
||||
on the screen via DOS, or
|
||||
2. you have an EGA or VGA, and want to use the 43- or 50-line mode of
|
||||
your display, or
|
||||
3. you run out of space when redefining keys with ANSI.SYS, or
|
||||
4. you are a programmer who uses ANSI escape sequences, and are frus-
|
||||
trated with slow display updates, or
|
||||
5. you are porting display-intensive Unix programs to run under MS-
|
||||
DOS.
|
||||
|
||||
You will not benefit from using NANSI.SYS if:
|
||||
1. you never wish commands like TYPE or DIR were faster, and
|
||||
2. you only use programs like Microsoft Word or Word Perfect, which
|
||||
bypass DOS when displaying text, and
|
||||
3. you aren't interested in displaying 43 lines of text on your EGA or
|
||||
VGA, and
|
||||
4. you have never heard of ANSI.SYS anyway.
|
||||
|
||||
The display speed improvement you get by installing NANSI.SYS depends
|
||||
on the kind of programs you run. Installing NANSI.SYS will bring no
|
||||
improvement in display speed for programs that bypass DOS (e.g. Micro-
|
||||
soft Word), a 30% improvement in display speed with most programs that
|
||||
don't bypass DOS, a 50% improvement with "optimized" programs (see
|
||||
chapter 9 below), and a 95% improvement with "optimized" programs that
|
||||
avoid scrolling.
|
||||
|
||||
One "optimized" program, COPY /b, comes with DOS. To test the speed
|
||||
improvement yourself, create a long text file named foo.txt, and
|
||||
display it with COPY /b foo.txt con: with NANSI.SYS installed- it will
|
||||
go by very quickly. This speed increase occurs even when running in a
|
||||
window in Microsoft Windows 3.0.
|
||||
|
||||
2. Compatibility
|
||||
|
||||
NANSI.SYS has been tested on IBM PC/XT, /AT, and PS/2 systems. It
|
||||
should run on any CGA, MDA, EGA, or VGA compatible video card. It is
|
||||
compatible with Microsoft Windows 3.0. Unlike many display speedup
|
||||
progams, it does not use wierd hardware scrolling tricks, and there-
|
||||
fore remains completely compatible with programs that write directly
|
||||
to the screen.
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 2 -
|
||||
|
||||
|
||||
3. Copyright status
|
||||
|
||||
This program and documentation is Copyright 1986, 1991 Daniel Kegel.
|
||||
The executable program and its documentation may be freely distri-
|
||||
buted.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
or look on the web at http://www.gnu.org/copyleft/gpl.html.
|
||||
|
||||
Correspondence (in English, German, or French) should be
|
||||
directed to the author at dank@alumni.caltech.edu
|
||||
|
||||
|
||||
4. Version
|
||||
|
||||
The version number can be found with the DOS command TYPE NANSI.SYS.
|
||||
This documentation is for version 3.3, created November 1991.
|
||||
|
||||
5. Installation and System Requirements
|
||||
|
||||
NANSI.SYS version 3.3 is distributed as the archive NANSI33.ZIP, with
|
||||
the following contents:
|
||||
|
||||
NANSI.SYS - the device driver
|
||||
NANSI.DOC - this documentation file
|
||||
RAW.C - how to set and clear RAW mode for faster screen output
|
||||
RAW.H - definitions for users of RAW.C
|
||||
GC.ON - text file which, when TYPEd, turns on the graphics cursor
|
||||
|
||||
|
||||
NANSI.SYS requires MS-DOS version 2.0 or higher, and uses about 3
|
||||
kilobytes of system RAM.
|
||||
|
||||
To install NANSI.SYS on your computer, copy the file NANSI.SYS to your
|
||||
boot disk (usually C:), and include one of the following statements in
|
||||
the configuration file CONFIG.SYS on your boot disk:
|
||||
For IBM VGA and Vega VGA cards, or if you don't know (or care) what
|
||||
kind of card you have:
|
||||
|
||||
DEVICE=NANSI.SYS
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 3 -
|
||||
|
||||
|
||||
For Paradise VGA Plus cards:
|
||||
|
||||
DEVICE=NANSI.SYS /t54 /t55 /t56 /t57
|
||||
|
||||
For VGA cards using the Oak Technology OTI-067:
|
||||
|
||||
DEVICE=NANSI.SYS /t4F /t50 /t51
|
||||
|
||||
For VGA cards using the Trident Microsystems TVGA 8900:
|
||||
|
||||
DEVICE=NANSI.SYS /t50 /t51 /t52 /t53 /t54 /t55 /t56 /t57 /t58 /t59 /t5A
|
||||
|
||||
|
||||
6. COMMAND-LINE OPTIONS
|
||||
|
||||
|
||||
6.1. /K : force Nansi to use extended keyboard BIOS calls which
|
||||
sense F11 and F12
|
||||
|
||||
When IBM introduced the extended keyboard with F11 and F12 keys, and
|
||||
separated the numeric keypad from the arrow keys, it also introduced
|
||||
an extended way of reading the keyboard with BIOS. The old way still
|
||||
works, but doesn't recognize the extended keys.
|
||||
|
||||
Normally, Nansi tries to detect whether the extended keyboard BIOS
|
||||
calls are available, and if so, uses them. However, by giving the /k
|
||||
option you can force Nansi to use these calls even if Nansi doesn't
|
||||
think they are there. This option is included for compatibility with
|
||||
ANSI.SYS.
|
||||
|
||||
6.2. /X : tell Nansi to let you redefine the extended keys indepen-
|
||||
dantly
|
||||
|
||||
IBM's extended keyboard BIOS calls added something new: they return
|
||||
different scan codes for different keys with the same meaning. For
|
||||
instance, they return 71 for the numeric keypad HOME key, but 224;71
|
||||
for the gray HOME key. Nansi returns 71 when either of these keys are
|
||||
pressed. However, the /X option causes these keys to be treated dif-
|
||||
ferently during keyboard redefinition. For example, if you start
|
||||
Nansi with the /X option, you can define just the gray HOME key to say
|
||||
"dir/w" by sending the string ESC [224;71;"dir/w";13p
|
||||
|
||||
6.3. /S : tell Nansi to be secure, and disable keyboard redefini-
|
||||
tion
|
||||
|
||||
Although it is nice to be able to redefine the keyboard with escape
|
||||
sequences, it is a gaping security hole. To prevent trojan horse
|
||||
attacks from messages in text files, archives, and programs downloaded
|
||||
from the outside world, disable this feature by invoking Nansi with
|
||||
the /s option in config.sys. For example,
|
||||
|
||||
DEVICE=NANSI.SYS /s /t54 /t55 /t56 /t57
|
||||
|
||||
This saves a few bytes of memory, too.
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 4 -
|
||||
|
||||
|
||||
6.4. /Tnn : tell Nansi that video mode nn is a text mode
|
||||
|
||||
No two VGA cards seem to have the same set of video mode codes. The
|
||||
same mode number can indicate a graphics mode on one card, and a text
|
||||
mode on another card. Worse yet, BIOS can't tell you what kind of
|
||||
mode it's in. This is a problem because Nansi gets its speed by
|
||||
bypassing BIOS, which it can only do in text modes.
|
||||
|
||||
Nansi solves this dilemma by maintaining a 256-entry table, one entry
|
||||
per possible video mode. By default, the table says that only modes
|
||||
0, 1, 2, 3, and 7 are text modes. You can add new text modes with the
|
||||
/t option. For instance, if modes D hex and 50 hex are text modes,
|
||||
you would invoke Nansi as follows:
|
||||
|
||||
DEVICE=NANSI.SYS /t0D /t50
|
||||
|
||||
|
||||
How to tell whether you need /t:
|
||||
If your board is in a non-IBM text video mode (for instance, mode 50
|
||||
hex), and you haven't added /t50 after NANSI.SYS in CONFIG.SYS, the
|
||||
cursor will disappear after a CLS command, and the text output will be
|
||||
sluggish; furthermore, if you turn on the graphics cursor (by TYPEing
|
||||
the file GC.ON which came with NANSI), the beginning and end of every
|
||||
text line will be garbled.
|
||||
|
||||
How to tell whether you don't need /t:
|
||||
If you mistakenly specify a graphics mode with the /t option, the
|
||||
display will be garbled while in that mode. Get back to normal by
|
||||
typing MODE CO80 or rebooting, and remove the offending /t option from
|
||||
config.sys.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 5 -
|
||||
|
||||
|
||||
7. ANSI Control Sequences
|
||||
|
||||
While putting text up on the screen, NANSI.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 fol-
|
||||
low 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) 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 posi-
|
||||
tion (1,1), which is the upper left.
|
||||
|
||||
In general, if you ask the cursor to go beyond the edge of the screen,
|
||||
it goes to the appropriate edge. (ANSI.SYS was not always so nice.)
|
||||
|
||||
The following C macro illustrates how one could print a string at a
|
||||
given location on the screen:
|
||||
#define printXY(x,y,s) printf("%c[%d;%dH%s", 27, y, x, s);
|
||||
|
||||
Either single or double quotes may be used to quote a string. Each
|
||||
character inside a quoted string is equivalent to one numeric parame-
|
||||
ter. Quoted strings are normally used only for the Keyboard Key Reas-
|
||||
signment command.
|
||||
|
||||
Each ANSI control sequence supported by NANSI.SYS is described below.
|
||||
The descriptions follow the format
|
||||
|
||||
7.0.1. ABBREVIATED_NAME: what_to_send LONG NAME
|
||||
|
||||
where ABBREVIATED_NAME is a short name for the sequence, what_to_send
|
||||
tells you what characters make up the sequence, and LONG NAME is a
|
||||
long name for the sequence.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 6 -
|
||||
|
||||
|
||||
7.1. Sequences dealing with Cursor Positioning
|
||||
|
||||
7.1.1. CUP: ESC[#;#H Cursor Position
|
||||
|
||||
Moves the cursor to the position specified by the parameters. The
|
||||
first parameter, y, specifies the row number; the second parameter, x,
|
||||
specifies the column number. If no parameters are given, the cursor
|
||||
is moved to (1,1), the upper left corner of the screen.
|
||||
|
||||
|
||||
7.1.2. HVP: ESC[#;#f Horizontal and Vertical Position
|
||||
|
||||
This is identical to Cursor Position. Don't ask me why it exists.
|
||||
|
||||
|
||||
7.1.3. CUU: ESC[#A Cursor Up
|
||||
|
||||
Moves the cursor up the given number of rows without changing its hor-
|
||||
izontal position.
|
||||
|
||||
|
||||
7.1.4. CUD: ESC[#B Cursor Down
|
||||
|
||||
Moves the cursor down the given number of rows without changing its
|
||||
horizontal position.
|
||||
|
||||
|
||||
7.1.5. CUF: ESC[#C Cursor Forward
|
||||
|
||||
Moves the cursor right the given number of columns without changing
|
||||
its vertical position.
|
||||
|
||||
|
||||
7.1.6. CUB: ESC[#D Cursor Backward
|
||||
|
||||
Moves the cursor left the given number of columns without changing its
|
||||
vertical position.
|
||||
|
||||
|
||||
7.1.7. DSR: ESC[#n Device Status, Report!
|
||||
|
||||
# must be 6. The sequence ESC[6n causes the console driver to output
|
||||
a CPR (Cursor Position Report) sequence.
|
||||
|
||||
Note: This sequence is not supported by the ANSI.SYS emulator built
|
||||
into Microsoft Windows 1.x or 2.x.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 7 -
|
||||
|
||||
|
||||
7.1.8. CPR: ESC[#;#R Cursor Position Report
|
||||
|
||||
The console driver outputs this sequence upon reciept of a DSR
|
||||
sequence. The first parameter is the cursor's vertical position; the
|
||||
second parameter is the cursor's horizontal position.
|
||||
|
||||
Note: Contrary to the MS-DOS manual, ANSI.SYS outputs a carriage
|
||||
return after this sequence. NANSI.SYS faithfully reproduces this
|
||||
quirk.
|
||||
|
||||
The resulting string can have up to eleven characters. For example,
|
||||
if you have a 100-line display (wow), and the cursor is at
|
||||
(x=132,y=100), the string will be ESC[132;100R followed by a carriage
|
||||
return.
|
||||
|
||||
This should never be sent to the console driver.
|
||||
|
||||
Also note: This sequence is not supported by the ANSI.SYS emulator
|
||||
built into Microsoft Windows 1.x or 2.x.
|
||||
|
||||
Here is an example of how to use DSR/CPR to find the current cursor
|
||||
position with the C language:
|
||||
|
||||
/* Code fragment to get current cursor X and Y from console */
|
||||
/* Be sure to disable line-buffering on stdin before calling */
|
||||
int x, y, c;
|
||||
printf("\033[6n");
|
||||
fflush(stdout);
|
||||
if (getchar() != '\033' || getchar() != '[')
|
||||
abort("Console not responding to DSR?");
|
||||
for (y=0; isdigit(c=getchar()); y=y*10+(c-'0'));
|
||||
if (c != ';')
|
||||
abort("Console CPR faulty?");
|
||||
for (x=0; isdigit(c=getchar()); x=x*10+(c-'0'));
|
||||
if (c != 'R')
|
||||
abort("Console CPR faulty?");
|
||||
#ifndef VT100
|
||||
getchar(); /* ignore trailing CR */
|
||||
#endif
|
||||
|
||||
|
||||
This can also be useful for sensing screen size.
|
||||
|
||||
|
||||
7.1.9. SCP: ESC[s Save Cursor Position
|
||||
|
||||
Saves the cursor's X and Y locations in an internal variable. See
|
||||
RCP.
|
||||
|
||||
|
||||
7.1.10. RCP: ESC[u Restore Cursor Position
|
||||
|
||||
Moves cursor to the position it held when the last SCP sequence was
|
||||
received.
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 8 -
|
||||
|
||||
|
||||
7.2. Sequences that Edit the Display
|
||||
|
||||
7.2.1. ED: ESC[#J Erase in Display
|
||||
|
||||
# must be 2. Clears the entire screen.
|
||||
|
||||
Note: Contrary to the MS-DOS manual, ANSI.SYS also moves the cursor to
|
||||
the upper left corner of the screen. Contrary to the ANSI standard,
|
||||
ANSI.SYS does not insist on # being 2. NANSI.SYS faithfully repro-
|
||||
duces these quirks. (Version 2.2 of NANSI.SYS insisted on # being 2,
|
||||
and it caused compatibility problems with programs that ignored the
|
||||
MS-DOS manual. Sigh.)
|
||||
|
||||
|
||||
7.2.2. EL: ESC[K Erase in Line
|
||||
|
||||
Deletes from the cursor to the end of the line.
|
||||
|
||||
|
||||
7.2.3. IL: ESC[#L Insert Lines
|
||||
|
||||
The cursor line and all lines below it move down # lines, leaving
|
||||
blank space. The cursor position is unchanged. The bottommost #
|
||||
lines are lost.
|
||||
|
||||
Note: This is not supported in ANSI.SYS.
|
||||
|
||||
|
||||
7.2.4. DL: ESC[#M Delete Lines
|
||||
|
||||
The block of # lines at and below the cursor are deleted; all lines
|
||||
below them move up # lines to fill in the gap, leaving # blank lines
|
||||
at the bottom of the screen. The cursor position is unchanged.
|
||||
|
||||
Note: This is not supported in ANSI.SYS.
|
||||
|
||||
|
||||
7.2.5. ICH: ESC[#@ Insert Characters
|
||||
|
||||
The cursor character and all characters to the right of it move right
|
||||
# columns, leaving behind blank space. The cursor position is
|
||||
unchanged. The rightmost # characters on the line are lost.
|
||||
|
||||
Note: This is not supported in ANSI.SYS.
|
||||
|
||||
|
||||
7.2.6. DCH: ESC[#P Delete Characters
|
||||
|
||||
The block of # characters at and to the right of the cursor are
|
||||
deleted; all characters to the right of it move left # columns, leav-
|
||||
ing behind blank space. The cursor position is unchanged.
|
||||
|
||||
Note: This is not supported in ANSI.SYS.
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 9 -
|
||||
|
||||
|
||||
7.3. Sequences that Set Modes
|
||||
|
||||
7.3.1. KKR: ESC["string"p Keyboard Key Reassignment
|
||||
|
||||
The first char (or, for function keys, two chars) 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 starting with zero. For instance, ESC[0;59;"dir a:";13p rede-
|
||||
fines function key 1 to have the value "dir a:" followed by the ENTER
|
||||
key.
|
||||
|
||||
There are about 500 bytes available to hold redefinition strings.
|
||||
Once this space fills up, new strings are ignored.
|
||||
|
||||
To clear all definitions, send the string ESC[p. (There was no way to
|
||||
do this in ANSI.SYS.)
|
||||
|
||||
This feature is a security risk, and can be disabled with the /s
|
||||
option when loading Nansi in config.sys. See Command-line Options
|
||||
above.
|
||||
|
||||
Here's a table of the ASCII values of the common function keys; for
|
||||
others, see the IBM Basic manual or the "IBM PS/2 and PC BIOS Inter-
|
||||
face Technical Reference," a steal at $80 from IBM (1-800-IBM-PCTB).
|
||||
|
||||
F1 0;59 F2 0;60 F3 0;61 F4 0;62
|
||||
F5 0;63 F6 0;64 F7 0;65 F8 0;66
|
||||
F9 0;67 F10 0;68 F11 0;133 F12 0;134
|
||||
HOME 0;71 END 0;79 PGUP 0;73 PGDN 0;81
|
||||
INS 0;82 DEL 0;83 LEFT 0;75 RIGHT 0;77
|
||||
UP 0;72 DOWN 0;80
|
||||
|
||||
When /X is given, the gray Insert, Delete, Home, End, PageUp, PageDn,
|
||||
and arrow keys on an Extended keyboard can be redefined separately by
|
||||
using 224 rather than 0 as the initial byte.
|
||||
|
||||
|
||||
7.3.2. SGR: ESC[#;#;...#m Set Graphics Rendition
|
||||
|
||||
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 Value
|
||||
0 All attributes off (normal white on black)
|
||||
1 Bold
|
||||
4 Underline
|
||||
5 Blink
|
||||
7 Reverse Video
|
||||
30-37 foreground black/red/green/yellow/blue/magenta/cyan/white
|
||||
40-47 background black/red/green/yellow/blue/magenta/cyan/white
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 10 -
|
||||
|
||||
|
||||
7.3.3. SM: ESC[=nh Set Video Mode
|
||||
|
||||
This sequence selects one of the available video modes. The IBM BIOS
|
||||
supports several video modes; the codes given in the BIOS documenta-
|
||||
tion 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
|
||||
13 bitmap 320x200 4 bits/pixel
|
||||
14 bitmap 640x200 4 bits/pixel
|
||||
15 bitmap 640x350 1 bit/pixel
|
||||
16 bitmap 640x350 4 bits/pixel
|
||||
17 bitmap 640x480 1 bit/pixel
|
||||
18 bitmap 640x480 4 bits/pixel
|
||||
19 bitmap 320x200 8 bits/pixel
|
||||
|
||||
|
||||
Modes 0, 1, and 4-19 require a CGA, EGA or VGA.
|
||||
Modes 13-16 require an EGA or VGA.
|
||||
Modes 17-19 require a VGA.
|
||||
Other graphics cards may support other video modes.
|
||||
|
||||
The EGA and VGA let you use a shorter character cell in text modes in
|
||||
order to squeeze more lines of text out of the 25-line text modes. To
|
||||
enter short line mode, set the desired 25-line text mode (0 to 3),
|
||||
then Set Mode 43. For instance: ESC[=3h ESC[=43h. To exit short line
|
||||
mode, set the desired 25-line text mode again. On IBM VGA cards, this
|
||||
sequence gives you a 50 line screen. NANSI.SYS ignores mode 43 unless
|
||||
there is an EGA or VGA on your computer.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 11 -
|
||||
|
||||
|
||||
7.3.4. SM: ESC[?nh Set Nonvideo Mode
|
||||
|
||||
This sequence is used to set non-video modes. The only value sup-
|
||||
ported is
|
||||
|
||||
Mode Code Value when set
|
||||
7 Cursor wraps at end of line
|
||||
|
||||
|
||||
Setting mode 7 tells the cursor to wrap around to the next line when
|
||||
it passes the end of a line.
|
||||
|
||||
7.3.5. RM: ESC[?nl Reset Nonvideo Mode
|
||||
|
||||
This sequence is used to reset non-video modes. The only value sup-
|
||||
ported is
|
||||
|
||||
Mode Code Value when reset
|
||||
7 Cursor stops at end of line
|
||||
|
||||
|
||||
Resetting mode 7 tells the cursor to 'stick' at the end of the line
|
||||
instead of wrapping to the next line.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 12 -
|
||||
|
||||
|
||||
8. Background - What does a console driver do, and how?
|
||||
|
||||
A console driver consists of subroutines which are called by MS-DOS.
|
||||
MS-DOS itself is mostly just subroutines which can be called by appli-
|
||||
cation programs.
|
||||
|
||||
Programs that want to display text on the screen can call the "Write"
|
||||
subroutine provided by MS-DOS. This subroutine in turn calls the
|
||||
"Write" subroutine of the console driver.
|
||||
|
||||
When you, for example, type
|
||||
C> type foo.txt
|
||||
COMMAND.COM uses the "Read" subroutine of MS-DOS to read the file
|
||||
"foo.txt" from the disk; it then uses the "Write" subroutine of MS-DOS
|
||||
with the file's contents. MS-DOS then calls the console driver's
|
||||
"Write" subroutine, which finally puts the data up on the screen.
|
||||
|
||||
Both ANSI.SYS and NANSI.SYS use IBM Video BIOS to control the screen.
|
||||
However, NANSI.SYS writes directly to the screen in text modes; this
|
||||
allows much faster operation.
|
||||
|
||||
|
||||
9. How to Display Text Quickly
|
||||
|
||||
Output to the screen via DOS is usually slow because characters are
|
||||
sent one-at-a-time through several layers of software. Application
|
||||
programs often call a DOS function for each character or line.
|
||||
|
||||
To avoid this overhead, application programs should write as many
|
||||
characters per DOS call as possible (in C programs, this means using
|
||||
setbuf(), fflush(), and buffered output).
|
||||
|
||||
Another problem is that application programs sometimes send line after
|
||||
line of text, letting the cursor stay at the bottom of the screen.
|
||||
This forces the console driver to scroll the entire screen up once for
|
||||
each line displayed, which is rather expensive.
|
||||
|
||||
This can be fixed by having the application program clear the screen
|
||||
and home the cursor after each page of output.
|
||||
|
||||
Finally, the biggest problem is that DOS calls the device driver once
|
||||
or twice for each character written.
|
||||
|
||||
Fortunately, DOS can be told to pass the entire write request directly
|
||||
to the device driver; this is called "raw" mode. The files RAW.C and
|
||||
RAW.H, included in this package, provide an easy way to set and clear
|
||||
"raw" mode, to turn break checking on and off, and to check for keys-
|
||||
trokes when in raw mode.
|
||||
|
||||
Even if you follow all these rules, output with ANSI.SYS will still be
|
||||
very slow, simply because IBM did a bad job designing BIOS, and
|
||||
because ANSI.SYS was written with total disregard for performance.
|
||||
NANSI.SYS, on the other hand, was written by a performance fanatic.
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 13 -
|
||||
|
||||
|
||||
10. NANSI and Microsoft Windows
|
||||
|
||||
Microsoft Windows 1.x and 2.x allowed you to run command.com in a win-
|
||||
dow, but did not give you access to NANSI.SYS. Windows 3.0 gives you
|
||||
full access to NANSI.SYS, even when running command.com in a window
|
||||
(wow!). However, you can only do this if you have a 386-based com-
|
||||
puter (boo, hiss); on other computers, Windows runs command.com only
|
||||
in full screen mode.
|
||||
|
||||
Under Microsoft Windows 3.0, if you write text to stdout in RAW mode,
|
||||
the display is not refreshed until the end of the write; no intermedi-
|
||||
ate scrolling is shown. I suspect this is because Windows doesn't
|
||||
refresh the display until display memory hasn't been touched for a few
|
||||
milliseconds.
|
||||
|
||||
11. New in version 3.3 of NANSI.SYS
|
||||
|
||||
Fixed bug that caused erratic behavior after ESC[p. Bug was present
|
||||
in all prior versions of NANSI.
|
||||
|
||||
Fixed a few typos in documentation.
|
||||
|
||||
12. New in version 3.2 of NANSI.SYS
|
||||
|
||||
Can finally read F11 and F12!
|
||||
|
||||
New /K command-line option forces Nansi to use Extended Keyboard BIOS
|
||||
calls if for some reason Nansi doesn't recognize the extended key-
|
||||
board.
|
||||
|
||||
New /X command-line option lets user redefine "new" cursor motion keys
|
||||
independently of "old" cursor motion keys.
|
||||
|
||||
Both of these switches are compatible with the switches of the same
|
||||
name in ANSI.SYS.
|
||||
|
||||
13. New in version 3.1 of NANSI.SYS
|
||||
|
||||
A new escape sequence has been added to enable and disable the simu-
|
||||
lated cursor in graphics mode (see SET MODE 99). The graphics cursor
|
||||
is disabled by default.
|
||||
|
||||
Nansi can now sense options given on the DEVICE=NANSI.SYS line in
|
||||
config.sys.
|
||||
|
||||
/S command-line option has been added to disable the keyboard redefin-
|
||||
ition escape sequence. This closes up a big security loophole.
|
||||
|
||||
/T command-line option has been added to allow the user to tell Nansi
|
||||
about nonstandard text video modes (see COMMAND-LINE OPTIONS). This
|
||||
is important if you want to use non-IBM text modes properly, as Nansi
|
||||
treats nonstandard modes as graphics by default, which results in
|
||||
slower display.
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 14 -
|
||||
|
||||
|
||||
14. New in version 3.0 of NANSI.SYS
|
||||
|
||||
Now obeys BIOS's idea of number of screen lines, when supported.
|
||||
|
||||
Works properly when on video pages greater than zero, too.
|
||||
|
||||
Supports 132-column displays.
|
||||
|
||||
Deleted Output Character Translation feature. It took up 260 bytes,
|
||||
and nobody ever used it.
|
||||
|
||||
Fixed bug related to setting background color while in graphics mode.
|
||||
|
||||
No longer assumes AH is zero upon entry to driver.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 15 -
|
||||
|
||||
|
||||
15. Limitations in the current version of NANSI.SYS
|
||||
|
||||
Video modes are specified in hexadecimal on the command line, and in
|
||||
decimal in escape sequences. This is a needless inconsistancy, but
|
||||
since users' manuals usually specify the mode numbers in hex, it
|
||||
shouldn't be too big a bother. You can convert a hexadecimal number
|
||||
to decimal in BASIC with the print command. For example, from the DOS
|
||||
prompt, typing
|
||||
|
||||
C:>basic
|
||||
print &h7f
|
||||
system
|
||||
|
||||
displays "127".
|
||||
|
||||
All parameter values must be between 0 and 255.
|
||||
|
||||
The maximum number of characters available for keyboard redefinition
|
||||
is 500. Any single keyboard redefinition escape sequence must be
|
||||
shorter than (500 - (total keyboard redefinition space already used))
|
||||
bytes.
|
||||
|
||||
Insert and delete character do not work in graphics modes.
|
||||
|
||||
Graphics mode writing is slow. If this bothers you, try NNANSI, which
|
||||
is someone else's modification of NANSI v2.2 to attack just this prob-
|
||||
lem.
|
||||
|
||||
Does not support erase-to-end-of-screen and other useful functions.
|
||||
|
||||
Nansi determines whether the BIOS number-of-screen-lines variable is
|
||||
supported by checking for an EGA card. There might be a better way.
|
||||
|
||||
Nansi only checks for an EGA or VGA card at startup time. If you have
|
||||
two video cards installed, and one shows more text lines per screen
|
||||
than the other, AND you switch between the cards without rebooting,
|
||||
Nansi could conceivably become confused about the number of text lines
|
||||
on the screen.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
November 29, 1991
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue