home *** CD-ROM | disk | FTP | other *** search
- DgAnsi.Com
- Copyright By:
- Don E. Groves, Jr.
- 2915 West Ox Rd.
- Herndon, VA 22071
-
- CIS Number [71310,3702]
-
- I. Background
-
- When I first got DESQview, I noticed that none of my ANSI
- drivers would work properly with it, and the supplied DVANSI.COM
- required more memory than I was willing to sacrifice.
-
- DgAnsi is the result. It requires less than 3.8 kilobytes
- of memory to load, and requires as little as 1 kilobyte in a
- DESQview window. DgAnsi is a superset of the IBM PC
- implementation of the ANSI X3.64-1979 specification, implementing
- several extensions and enhancements to that specification.
-
- DgAnsi can be safely loaded in an Upper Memory Block, will
- not double load, and will not load if any other ANSI driver is
- loaded. After loading it can be reconfigured, disabled, or
- uninstalled. DgAnsi can be invoked with different parameters in
- different DESQview windows.
-
- A note of thanks should be given to:
-
- PC Magazine and Michael J. Mefford. Providing and
- documenting the source code of ANSI.COM gave me a big
- "jump-start" in writing this program.
-
- Borland Turbo Assembler 2.50 and TLink. DgAnsi is written
- in TASM ideal mode.
-
- Mike Bessy and Edward Phillips for putting up with some of
- my earlier versions. Their willingness to try the next ones was
- a great encouragement to keep trying.
-
- DgAnsi.Com, DgAnsi18.Com, DgAnsi.Shp, and DgAnsi.Doc were written
- by and are Copyright (c) 1990-91 by Don E. Groves, Jr. All
- rights reserved.
-
-
- II. Files Included In This Distribution Archive
-
- DgAnsi.Com -- the basic DgAnsi program. This version
- will run on any computer using PC- or
- MS-DOS 3.1 or above.
-
- DgAnsi18.Com -- optimized version of DgAnsi.Com using the
- 80186 instruction set. This version will
- run on any computer equipped with a
- V20/V30,, 80286 or higher cpu, and using
- PC- or MS-DOS 3.1 or above. DgAnsi18.Com
- is slightly smaller and slightly faster
- than DgAnsi.Com.
-
- In this document we shall refer only to the
- command "DgAnsi;" if you are using the
- 186-optimized version make the appropriate
- substitution. You may prefer to delete
- DgAnsi.Com and rename DgAnsi18.Com to
- DgAnsi.Com.
-
- DgAnsi.Shp -- "DESQview-aware" shared program module for
- use in DESQview windows. To use DgAnsi.Shp
- you must load DgAnsi.Com before DESQview.
- This enables DgAnsi.Shp to use the code of
- DgAnsi.Com, while maintaining its own data
- space in the DESQview window.
-
- DgAnsi.Doc -- This documentation.
-
-
- III. Running DgAnsi.Com
-
- The syntax for loading or configuring DgAnsi is as follows:
-
- DgAnsi [commands] [/switches]
-
- Entering "DgAnsi" without commands or switches will load
- DgAnsi in its default configuration.
-
- The commands are:
-
- ? | /? Displays the DgAnsi help screen.
-
- ON By default, DgAnsi is loaded with all functions
- enabled. Use this command to reenable DgAnsi
- after turning it off.
-
- OFF | OF Temporarily disables DgAnsi functions. DgAnsi OFF
- leaves DgAnsi loaded in memory, and it may be
- reenabled by issuing DgAnsi ON.
-
- FAST | FAS | FA | F+ Direct screen writing mode. This is
- the default.
-
- SLOW | SLO | SL | F- Screen writes via the BIOS. If you
- are experiencing display problems, DgAnsi SLOW
- should cure them. This mode is noticeably slower
- than the default screen writing method.
-
- K+ Enable keyboard reassignments. This is the
- default.
-
- K- Disable keyboard reassignments. Disabling
- keyboard reassignments disables any key
- reassignments previously made.
-
- P+ Enable new key reassignments. This is the
- default.
-
- P- Disable new key reassignments. Disabling further
- key reassignments retains any key reassignments
- previously made, while disabling additional
- reassignments.
-
- Q+ Enable Extended Unique Keys on. This is the
- default. On enhanced keyboards, using DOS 4.0 or
- above, the gray keys generate different scan codes
- than their white key equivalents.
-
- Q- Disable Extended Unique Keys on enhanced
- keyboards. Disabling unique keys will make the
- gray keys on enhanced keyboards behave exactly as
- their white key equivalents.
-
- The switches are:
-
- /@filename Issue ANSI commands, at initial load or after,
- contained in a file. The entire command sequence
- must be entered in the file, including the leading
- ESCape [.
-
- The contents of the configuration file are typed
- to standard output, and have the same effect as
-
- TYPE filename
-
- Very little checking for a valid filename is done.
- If the file is not found, the switch is ignored.
-
- /Bnnnn Buffer size in bytes for key reassignments. The
- value for nnnn is from 0 to approximately 61000
- bytes; the default is 200 bytes. Specifying /b0
- will save 192 bytes in the resident load size.
-
- This switch may be specified only when loading
- DgAnsi; once a buffer size has been set it may not
- be changed.
-
- Since DgAnsi.Shp establishes it own data area, you
- may set different buffer sizes, using DgAnsi.Shp,
- in each DESQview window.
-
- The buffer size may also be independently set for
- any secondary shell copy of DgAnsi (/w).
-
- /C Clear Reassignment Buffer. This clears all key
- reassignments.
-
- /D<color>m Set display colors from command line. The color
- specification is a standard ANSI sequence (see
- below). For example,
-
- dgansi /d0;1;33;40m
-
- will load or reconfigure DgAnsi to display bright
- yellow on black. This overcomes the command.com
- limitation of not allowing the entry of the Escape
- character from this command line. If you are
- using 4DOS, this is equivalent to entering
-
- echo e[0;1;33;40m
-
- from the command line.
-
- /T Tests whether DgAnsi is installed. In addition to
- displaying this information on the screen, DgAnsi
- returns the following errorlevels:
-
- 0 DgAnsi is loaded; will not install.
- 1 DgAnsi is not loaded; safe to install.
- 255 DgAnsi is not loaded in the current
- DESQview window but is loaded prior to
- DESQview.
-
- /U Uninstall DgAnsi. If DgAnsi is not the last
- loaded memory-resident program ("TSR") it cannot
- be uninstalled; instead, it will be turned off but
- will remain in memory.
-
- /W Create a secondary resident copy. This switch is
- positional and should be specified before any of
- the above options. Its purpose is to allow the
- creation of a "shell copy" in any environment.
- This can be useful if you wish to create a
- specially defined set of ANSI sequences for a
- limited purpose, and then return easily and
- quickly to the original configuration.
-
- Creating a secondary copy of DgAnsi turns the
- parent copy off. Uninstalling the shell copy does
- not automatically turn the parent copy back on; it
- must be specifically reenabled by DgAnsi ON.
-
- Note: DgAnsi directly supplies the KSTACK.COM functions for
- the KEYSTACK command in 4DOS version 4.0. It is therefore not
- nessecary (and will waste memory) to load both KSTACK.COM and DGANSI.COM.
-
-
- IV. DgAnsi.Shp
-
- DgAnsi.Shp is a "Shared Program" for DESQview. It can be
- used in place of loading DgAnsi.Com a second time in a DESQview
- window.
-
- There are three advantages to using DgAnsi.Shp with
- DESQview. First, it loads faster. Second, DgAnsi and a program
- can be started together directly from DESQview, instead of via a
- batch file which first loads DgAnsi and then loads the
- application. This avoids the overhead of loading another
- instance of the command processor and occupies less memory.
-
- Third, DgAnsi.Shp works by utilizing the code of DgAnsi.Com,
- while maintaining its own data space in the DESQview window.
- This means that each DESQview window can set DgAnsi's buffer size
- independently of the DgAnsi.Com's initial buffer size, or of the
- buffer size in any other DESQview window.
-
- DgAnsi.Com must be loaded before starting DESQview if you
- plan to use DgAnsi.Shp. If DgAnsi has not been installed,
- DESQview will refuse to open any window in which DgAnsi.Shp is
- specified and an error message will advise you that DgAnsi.Com
- must be loaded.
-
- Valid commands and switches for DgAnsi.Shp are the same as
- for DgAnsi.Com.
-
- Upon shelling out of the program or upon reaching the DOS
- prompt in the DESQview window, DgAnsi.Com can be used to change
- the default settings in the same manner as outside DESQview.
-
- To specify DgAnsi.Shp in a DESQview window, open the "Change
- a Program" window. In the "Advanced Options" screen (F1 from the
- opening "Change a Program" screen), specify at least 2 kilobyte
- in the "System Memory" field.
-
- Use the tab key to advance to the "Shared Program" section
- of the screen. In the "Pathname" field, specify the full name of
- DgAnsi.Shp, including the path. Commands and switches may be
- entered in the "Data" field.
-
- Two kilobyte of system memory is adequate for the DgAnsi.Com
- default configuration. If you install DgAnsi with a larger
- keyboard reassignment buffer, you may need to specify more system
- memory. Excessively large "System Memory" values will produce
- unpredictable results.
-
-
- V. Compatibility
-
- DgAnsi has been tested on a wide variety of computers, under
- many configurations. It should be compatible with any IBM
- compatible running DOS 3.1 or above.
-
- DgAnsi hooks Interrupts 16h, 21h, 29h, and 2Fh. You may
- experience conflicts if other TSRs loaded on your computer hook
- any of these interrupts.
-
- In particular, many keyboard enhancers also hook Int 16h.
- In most cases this and other conflicts can be resolved simply by
- assuring that DgAnsi is loaded after the conflicting program.
-
- 4DOS, the replacement command processor, includes a KEYSTACK
- command for feeding keystrokes to other applications. Its use
- requires that KSTACK.COM, a TSR which is part of the 4DOS
- distribution package, be loaded in order to enable the KEYSTACK
- command. KSTACK.COM also hooks Interrupt 16h.
-
- DgAnsi.Com has been extensively tested with 4DOS Version
- 4.0, and we have found no incompatibilities. Some systems
- require that DgAnsi.Com be loaded after KSTACK.COM in order for
- the key redefinitions to work properly.
-
-
- VI. DgAnsi Command Sequences
-
- DgAnsi includes a number of command sequences which are
- neither part of the ANSI X3.64-1979 specification nor of the IBM
- ANSI implementation. In the command listing which follows the
- ANSI X3.64-1979 mnemonic, if it exists, is provided in
- parentheses (e.g., CUP).
-
- Cursor Functions
-
- Esc[l;cH Cursor Position (CUP)
- Esc[l;cV Horizontal and Vertical Position (HVP)
- HVP and CUP move the cursor to the position
- specified. The first parameter (l) specifies the line
- number; the second (c) specifies the column number.
- When no parameters are specified the cursor moves to
- the home position (the upper left-hand corner of the
- screen).
-
- Esc[nA Cursor Up (CUU)
- This sequence moves the cursor up without changing
- columns. The value of n sets the number of lines
- moved. When no parameter is specified the cursor
- moves up one line. It the cursor is already on the
- top line, the CUU sequence is ignored.
-
- Esc[nB Cursor Down (CUD)
- This sequence moves the cursor down without changing
- columns. The value of n sets the number of lines
- moved. When no parameter is specified the cursor
- moves down one line. It the cursor is already on the
- bottom line, the CUD sequence is ignored.
-
- Esc[nC Cursor Forward (CUF)
- This sequence moves the cursor forward without
- changing lines. The value of n sets the number of
- columns moved. When no parameter is specified the
- cursor moves forward one column. It the cursor is
- already on the far right column, the CUF sequence is
- ignored.
-
- Esc[nD Cursor Backward (CUB)
- This sequence moves the cursor backward without
- changing lines. The value of n sets the number of
- columns moved. When no parameter is specified the
- cursor moves backward one column. It the cursor is
- already on the far left column, the CUB sequence is
- ignored.
-
- Esc[6n Device Status Report (DSR)
- The console driver outputs a Cursor Position Report
- sequence when it receives a DSR sequence.
- ANSI X3.64-1979 defines this sequence as containing
- any decimal number in the range 0 to 9, or a
- semi-colon (ASCII code 48 to 57, or 59 decimal); most
- versions of DOS specify the integer 6. Using DgAnsi,
- any number in the range 1 to 254 will return a Cursor
- Position Report.
-
- Esc[255n Device Status Report (maximum)
- Parameter 255 in a DSR sequence reports the maximum
- screen size, in line and columns, of the current
- screen mode. The output is in the same format as the
- Cursor Position Report, except that maximum values
- instead of current values are reported.
-
- Esc[s Save Cursor Position (SCP)
- The console driver saves the current cursor position.
- This position can be restored by the Restore Cursor
- Position sequence.
-
- Esc[u Restore Cursor Position (RCP)
- This sequence restores the cursor position to the
- value it had when the console driver received the
- Save Cursor Position sequence. If no SCP sequence
- was received, RCP is ignored.
-
- Esc[l;cR Cursor Position Report (CPR)
- The console driver outputs a CPR sequence when it
- receives a Device Status Report sequence.
-
- Erase Functions
-
- Esc[2J Erase Display (ED)
- This sequence erases the entire screen and returns
- the cursor to the home position.
-
- Esc[K Erase Line (EL)
- This sequence erases everything from the current
- cursor position to the end of the line, including the
- current cursor position.
-
- Esc[0J Erase Display from Cursor Forward
- This sequence erases everything from the current
- cursor position to the bottom of screen, including
- the current cursor position. The cursor position is
- not updated.
-
- Esc[1J Erase Display from Cursor Backward
- This sequence erases everything from the current
- cursor position to the top of screen, including the
- current cursor position. The cursor position is not
- updated.
-
- Esc[] Erase next Carriage Return and Line Feed
- This sequence erases the next carriage return / line
- feed pair without repositioning the cursor. This
- makes it possible to issue an ECHO without generating
- a carriage return / line feed.
-
- Modes of Operation
-
- Esc[sm Set Graphics Rendition (SGR)
- This sequence invokes graphic rendition specified by
- the parameters in the following list. These
- functions are cumulative and remain in effect until
- the next SGR sequence; multiple parameters are
- delimited by semi-colons.
-
- Graphics Functions
-
- 0 All attributes off (normal, white on black)
- 1 Bold on (high intensity)
- 4 Underscore On (monochrome displays only)
- 5 Blink on
- 7 Reverse Video on
- 8 Concealed on (invisible)
- 30 Black foreground
- 31 Red foreground
- 32 Green foreground
- 33 Yellow foreground
- 34 Blue foreground
- 35 Magenta foreground
- 36 Cyan foreground
- 37 White foreground
- 40 Black background
- 41 Red background
- 42 Green background
- 43 Yellow background
- 44 Blue background
- 45 Magenta background
- 46 Cyan background
- 47 White background
-
- Esc[sh Select Mode (SM)
- This sequence selects the screen width or type
- specified.
-
- Graphics Modes
-
- 0 40 x 25 monochrome text
- 1 40 x 25 color text
- 2 80 x 25 monochrome text
- 3 80 x 25 color text
- 4 320 x 200 graphics 4-color
- 5 320 x 200 graphics 2-color
- 6 640 x 200 graphics 2-color
- 7 wrap at end of line (word wrap)
-
- The following parameters were added to the IBM subset
- with DOS 4.0. DgAnsi supports them with earlier
- versions of DOS, but they are hardware dependent:
-
- 13 320 x 200 graphics 16-color
- 14 640 x 200 graphics 16-color
- 15 640 x 350 graphics 2-color
- 16 640 x 350 graphics 16-color
- 17 640 x 480 graphics 2-color
- 18 640 x 480 graphics 16-color
- 19 320 x 200 graphics 256-color
-
- All numbers except 7 are passed to the BIOS, Int 10h.
- Depending on your hardware and other software,
- specifying higher numbers may produce interesting
- results. For this reason, DgAnsi makes no attempt to
- trap invalid numbers; if your hardware does not trap
- unsupported Int 10h functions, proceed at your own
- risk.
-
-
- Esc[sl Reset Mode (RM)
- This sequence resets the screen width or type
- specified; the parameters are the same as for SM.
- Setting mode 7 with an "h" command (SM) tells DgAnsi
- to wrap text to the next line when it passes the end
- of a line; setting mode 7 with an "l" (RM) command
- tells ANSI not to wrap text; the line is truncated.
- For all other modes the SM and RM commands are
- equivalent.
-
- IBM PC Keyboard Reassignment
-
- Keyboard reassignment uses an undefined ANSI X3.64-1979 code
- sequence to define a character or set of characters sent by the
- console whenever a given key is pressed on an IBM PC compatible.
- The sequence is:
-
- Esc[#;#p
- or Esc["string";"string"p
- or Esc[#;"string"p
- or Esc["string";#p
-
- The first # is the ASCII character code for the key to be
- reassigned. It is followed by a single key code or string of
- codes that are to replace it. If the first parameter is 0 or
- 224, then the first and second parameters make up an extended
- ASCII code and the third parameter becomes the reassignment
- character.
-
- Enclosing a string in single or double quotes permits the
- entry of standard keys. For example:
-
- Esc[0;32;"dir"13p
-
- assigns the key Alt-D (0;32) to the string "dir" followed by a
- carriage return (13).
-
- For a complete listing of ASCII key codes, see the Appendix.
-
- To control keyboard reassignments using DgAnsi sequences:
-
- Esc[=1P Turn Keyboard Reassignments On
- Any digit other than 1 will turn keyboard
- reassignments off.
-
- Esc[?1P Enable Keyboard Reassignments
- Any digit other than 1 will disable keyboard
- reassignments.
-
- Esc[=1q Enable Extended Keyboard support
- Any digit other than 1 will disable extended
- keyboard support.
-
-
- VII. License and Disclaimer
- DgAnsi.Com
- Copyright By:
- Don E. Groves, Jr.
- 2915 West Ox Rd.
- Herndon, VA 22071
-
- CIS Number [71310,3702]
-
- DgAnsi and all files contained in this distribution archive
- are copyright 1990-1992 by Don E. Groves, Jr. Support is
- available from the author via CompuServe Information Service
- [71310,3702].
-
- If you find DgAnsi useful, your gift of $15, or any amount,
- would be greatly appreciated.
-
- You may distribute copies of DgAnsi to friends, computer
- clubs or users' groups, and to computer bulletin boards, so long
- as (1) no fee is charged (other than a nominal media fee), and
- (2) all files are included without modification. You may not
- sell or charge any fee for providing DgAnsi other than a nominal
- media fee not exceeding $5.00, or $10.00 if other programs are
- supplied on the same distribution diskette.
-
- The author has taken extensive precautions to use standard,
- documented programming calls and DOS functions, and to test the
- software with a wide variety of hardware and software
- combinations. If you discover any bugs in the program, please
- notify the author via CompuServe Mail.
-
- If you feel that bugs in the program have caused you any
- damages, I'll sympathize with you and attempt to correct any
- programming errors. It won't do you any good to sue me, though,
- because I'm just a struggling computer programmer and consultant
- who doesn't have enough money to make it worth your time and
- legal costs.
-
- The lawyers tell me I'm supposed to say it this way:
-
- THIS PROGRAM IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY
- KIND.
-
- THE AUTHOR DISCLAIMS ANY AND ALL OTHER WARRANTIES, EXPRESS OR
- IMPLIED, ORAL OR WRITTEN, INCLUDING ANY IMPLIED WARRANTIES OF
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY INCIDENTAL,
- CONSEQUENTIAL, OR PUNITIVE DAMAGES WHATSOEVER ARISING OUT OF USE
- OF THE PROGRAM OR YOUR RELATIONSHIP WITH THE AUTHOR, INCLUDING
- WITHOUT LIMITATION ANY OR ALL DAMAGES FOR LOSS OF PROFITS,
- BUSINESS INTERRUPTION, LOSS OF INFORMATION OR ANY PECUNIARY LOSS,
- EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES.
-
-
- Appendix - ASCII Key Codes
-
- Standard Keys (All keyboards). Codes included in parentheses
- require DOS 4.0 or above.
-
- Key Code Shift Ctrl Alt
-
- A 97 65 1 0;30
- B 98 66 2 0;48
- C 99 67 3 0;46
- D 100 68 4 0;32
- E 101 69 5 0;18
- F 102 70 6 0;33
- G 103 71 7 0;34
- H 104 72 8 0;35
- I 105 73 9 0;23
- J 106 74 10 0;36
- K 107 75 11 0;37
- L 108 76 12 0;38
- M 109 77 13 0;50
- N 110 78 14 0;49
- O 111 79 15 0;24
- P 112 80 16 0;25
- Q 113 81 17 0;16
- R 114 82 18 0;19
- S 115 83 19 0;31
- T 116 84 20 0;20
- U 117 85 21 0;22
- V 118 86 22 0;47
- W 119 87 23 0;17
- X 120 88 24 0;45
- Y 121 89 25 0;21
- Z 122 90 26 0;44
- 1 49 33 -- 0;120
- 2 50 64 0 0;121
- 3 51 35 -- 0;122
- 4 52 36 -- 0;123
- 5 53 37 -- 0;124
- 6 54 94 30 0;125
- 7 55 38 -- 0;126
- 8 56 42 -- 0;127
- 9 57 40 -- 0;128
- 0 48 41 -- 0;129
- - 45 95 -- 0;130
- = 61 43 31 0;131
- [ 91 123 27 0;26
- ] 93 125 29 0;27
- \ 92 124 28 0;43
- : 59 58 -- 0;39
- ' 39 34 -- 0;40
- , 44 60 -- 0;51
- . 46 62 -- 0;52
- / 47 63 -- 0;53
- ` 96 126 -- (0;41)
-
- Enter (keypad) 13 -- 10 (0;166)
- / (keypad) 47 47 (0;142) (0;74)
- * (keypad) 42 (0;144) (0;78) --
- - (keypad) 45 45 (0;149) (0;164)
- + (keypad) 43 43 (0;150) (0;55)
- 5 (keypad) (0;76) 53 (0;143) --
-
- F1 0;59 0;84 0;94 0;104
- F2 0;60 0;85 0;95 0;105
- F3 0;61 0;86 0;96 0;106
- F4 0;62 0;87 0;97 0;107
- F5 0;63 0;88 0;98 0;108
- F6 0;64 0;89 0;99 0;109
- F7 0;65 0;90 0;100 0;110
- F8 0;66 0;91 0;101 0;111
- F9 0;67 0;92 0;102 0;112
- F10 0;68 0;93 0;103 0;113
- F11 0;133 0;135 0;137 0;139
- F12 0;134 0;136 0;138 0;140
-
- Home 0;71 55 0;119 --
- Up 0;72 56 (0;141) --
- PgUp 0;73 57 0;132 --
- Left 0;75 52 0;115 --
- Right 0;77 54 0;116 --
- End 0;79 49 0;117 --
- Down 0;80 50 (0;145) --
- PgDn 0;81 51 0;118 --
- Ins 0;82 48 (0;146) --
- Del 0;83 46 (0;147) --
-
- Extended Keys (Enhanced keyboards only).
-
- Home (gray key) (224;71) (224;71) (224;119) (224;151)
- Up (gray key) (224;72) (224;72) (224;141) (224;152)
- PgUp (gray key) (224;73) (224;73) (224;132) (224;153)
- Left (gray key) (224;75) (224;75) (224;115) (224;155)
- Right (gray key) (224;77) (224;77) (224;116) (224;157)
- End (gray key) (224;79) (224;79) (224;117) (224;159)
- Down (gray key) (224;80) (224;80) (224;145) (224;154)
- PgDn (gray key) (224;81) (224;81) (224;118) (224;161)
- Ins (gray key) (224;82) (224;82) (224;146) (224;162)
- Del (gray key) (224;83) (224;83) (224;147) (224;163)
- PrScr (gray key) -- -- 0;114 --
- Pause (gray key) -- -- 0;0 --
- Bksp (gray key) 8 8 127 (0)
- Enter (gray key) 13 -- 10 --
- Tab (gray key) 9 0;15 (0;148) (0;165)
- Null (gray key) 0;3 -- -- --
-