Converted readme.txt into Markdown.
This commit is contained in:
parent
cf6f8c741e
commit
dfc8a43ac8
481
readme.md
Normal file
481
readme.md
Normal file
@ -0,0 +1,481 @@
|
||||
# ANSICON [](https://github.com/adoxa/ansicon/releases)
|
||||
|
||||
ANSICON provides ANSI escape sequences for Windows console programs. It
|
||||
provides much the same functionality as `ANSI.SYS` does for MS-DOS.
|
||||
|
||||
## Requirements
|
||||
|
||||
* 32-bit: Windows 2000 Professional or later (it won't work with NT or 9X).
|
||||
* 64-bit: Vista or later (it won't work with XP64).
|
||||
|
||||
## Installation
|
||||
|
||||
Add `x86`(if your OS is 32-bit) or `x64` (if 64-bit) to your PATH, or copy the
|
||||
relevant files to a directory already in the PATH.
|
||||
|
||||
Alternatively, use option `-i` (or `-I`, if permitted) to install it
|
||||
permanently, by adding an entry to `CMD.EXE`'s AutoRun registry value (current
|
||||
user or local machine, respectively).
|
||||
|
||||
### Upgrading
|
||||
|
||||
- Delete `ANSI.dll`, it has been replaced with `ANSI32.dll`.
|
||||
- Delete `ANSI-LLA.exe` and `ANSI-LLW.exe`, they are no longer used.
|
||||
- Uninstall a pre-1.50 version and reinstall with this version.
|
||||
|
||||
### Uninstalling
|
||||
|
||||
Uninstall simply involves closing any programs that are currently using it;
|
||||
running with `-u` (and/or `-U`) to remove it from AutoRun, removing the
|
||||
directory from PATH, and deleting the files. No other changes are made
|
||||
(although you may have created custom environment variables).
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Running ANSICON with no arguments will start a new instance of the command
|
||||
processor (the program defined by the `ComSpec` environment variable, typically
|
||||
`CMD.EXE`), or display standard input if it is redirected. Any argument will be
|
||||
treated as a program and its arguments.
|
||||
|
||||
Options (case-sensitive):
|
||||
|
||||
-l Log to `%TEMP%\ansicon.log`.
|
||||
|
||||
-p Enable the parent process (i.e. the command shell used to run
|
||||
ANSICON) to recognise escapes.
|
||||
|
||||
-m Set the current (and default) attribute to grey on black
|
||||
(`monochrome`), or the attribute following the `m` (please
|
||||
use `COLOR /?` for attribute values).
|
||||
|
||||
-e Echo the command line - a space or tab after the `e` is
|
||||
ignored, the remainder is displayed verbatim.
|
||||
|
||||
-E Like `e`, but no newline is added.
|
||||
|
||||
-t Display ("type") each file (or standard input if none or the
|
||||
name is `-`) as though they are a single file.
|
||||
|
||||
-T Display `==> FILE NAME <==`, a blank line (or an error
|
||||
message), the file and another blank line.
|
||||
|
||||
For example, to display `file.ans` using black on cyan as the default color:
|
||||
|
||||
ansicon -m30 -t file.ans
|
||||
|
||||
The attribute may start with `-` to permanently reverse the foreground and
|
||||
background colors (but not when using `-p`).
|
||||
|
||||
For example, to use reversed black on white as the default (i.e. white on black,
|
||||
with foreground sequences changing the background):
|
||||
|
||||
ansicon -m-f0 -t file.log
|
||||
|
||||
If you experience trouble with certain programs, the log may help in finding the
|
||||
cause; it can be found at `%TEMP%\ansicon.log`. A number should follow the `l`:
|
||||
|
||||
0 No logging
|
||||
1 Log process start and end
|
||||
2 Above, plus log modules used by the process
|
||||
3 Above, plus log functions that are hooked
|
||||
4 Log console output (add to any of the above)
|
||||
8 Append to the existing file (add to any of the above)
|
||||
16 Log all imported modules (add to any of the above)
|
||||
|
||||
The log option will not work with `-p`; set the environment variable
|
||||
`ANSICON_LOG` instead. The variable is only read once when a new process is
|
||||
started; changing it won't affect running processes. If you identify a module
|
||||
that causes problems, add it to the `ANSICON_EXC` environment variable (see
|
||||
`ANSICON_API` below, but the extension is required).
|
||||
|
||||
E.g.: `ansicon -l5` will start a new command processor, logging every process it
|
||||
starts along with their output.
|
||||
|
||||
Once installed, the ANSICON environment variable will be created. This variable
|
||||
is of the form `WxH (wxh)`, where `W` & `H` are the width and height of the
|
||||
buffer and `w` & `h` are the width and height of the window. The variable is
|
||||
updated whenever a program reads it directly (i.e. as an individual request, not
|
||||
as part of the entire environment block). For example, `set an` will not update
|
||||
it, but `echo %ansicon%` will.
|
||||
|
||||
Also created is `ANSICON_VER`, which contains the version without the point
|
||||
(`1.50` becomes `150`). This variable does not exist as part of the environment
|
||||
block (`set an` will not show it).
|
||||
|
||||
If installed, GUI programs will not be hooked. Either start the program
|
||||
directly with `ansicon`, or add it to the `ANSICON_GUI` variable (see
|
||||
`ANSICON_API` below).
|
||||
|
||||
Using `ansicon` after install will always start with the default attributes,
|
||||
restoring the originals on exit; all other programs will use the current
|
||||
attributes. The shift state is always reset for a new process.
|
||||
|
||||
The Windows API `WriteFile` and `WriteConsoleA` functions will set the number of
|
||||
characters written, not the number of bytes. When using a multibyte character
|
||||
set, this results in a smaller number (since multiple bytes are used to
|
||||
represent a single character). Some programs recognise this as a reduced write
|
||||
and will inadvertently repeat previous characters. If you discover such a
|
||||
program, use the `ANSICON_API` environment variable to record it and override
|
||||
the API, returning the original byte count. Ruby (prior to 1.9.3) is an example
|
||||
of such a program, so use `set ANSICON_API=ruby` to avoid the repitition. The
|
||||
full syntax is:
|
||||
|
||||
ANSICON_API=[!]program;program;program...
|
||||
|
||||
PROGRAM is the name of the program, with no path and extension. The leading
|
||||
exclamation inverts the usage, meaning the API will always be overridden, unless
|
||||
the program is in the list. The variable can be made permanent by going to
|
||||
_System Properties_, selecting the _Advanced_ tab (with Vista onwards, this can
|
||||
be done by running _"SystemPropertiesAdvanced"_) and clicking _Environment
|
||||
Variables_.
|
||||
|
||||
|
||||
## Limitations
|
||||
|
||||
- The entire console buffer is used, not just the visible window.
|
||||
- There's a conflict with NVIDIA's drivers, requiring the setting of the
|
||||
Environment Variable:
|
||||
|
||||
ANSICON_EXC=nvd3d9wrap.dll;nvd3d9wrapx.dll
|
||||
|
||||
|
||||
## Sequences
|
||||
|
||||
### Recognized Sequences
|
||||
|
||||
The following escape sequences are recognised.
|
||||
|
||||
\e]0;titleBEL Set (xterm) window's title (and icon)
|
||||
\e[21t Report (xterm) window's title
|
||||
\e[s Save Cursor
|
||||
\e[u Restore Cursor
|
||||
\e[#G CHA Cursor Character Absolute
|
||||
\e[#E CNL Cursor Next Line
|
||||
\e[#F CPL Cursor Preceding Line
|
||||
\e[#D CUB Cursor Left
|
||||
\e[#B CUD Cursor Down
|
||||
\e[#C CUF Cursor Right
|
||||
\e[#;#H CUP Cursor Position
|
||||
\e[#A CUU Cursor Up
|
||||
\e[#P DCH Delete Character
|
||||
\e[?25h DECTCEM DEC Text Cursor Enable Mode (show cursor)
|
||||
\e[?25l DECTCEM DEC Text Cursor Enable Mode (hide cursor)
|
||||
\e[#M DL Delete Line
|
||||
\e[#n DSR Device Status Report
|
||||
\e[#X ECH Erase Character
|
||||
\e[#J ED Erase In Page
|
||||
\e[#K EL Erase In Line
|
||||
\e[#` HPA Character Position Absolute
|
||||
\e[#j HPB Character Position Backward
|
||||
\e[#a HPR Character Position Forward
|
||||
\e[#;#f HVP Character And Line Position
|
||||
\e[#@ ICH Insert Character
|
||||
\e[#L IL Insert Line
|
||||
SI LS0 Locking-shift Zero (see below)
|
||||
SO LS1 Locking-shift One
|
||||
\e[#;#;#m SGR Select Graphic Rendition
|
||||
\e[#d VPA Line Position Absolute
|
||||
\e[#k VPB Line Position Backward
|
||||
\e[#e VPR Line Position Forward
|
||||
|
||||
- `\e` represents the escape character (ASCII 27).
|
||||
- `#` represents a decimal number (optional, in most cases defaulting to 1).
|
||||
- BEL, SO, and SI are ASCII 7, 14 and 15.
|
||||
- Regarding SGR: bold will set the foreground intensity; blink and underline
|
||||
will set the background intensity; conceal uses background as foreground.
|
||||
See `sequences.txt` for a more complete description.
|
||||
|
||||
I make a distinction between `\e[m` and `\e[0;...m`. Both will restore the
|
||||
original foreground/background colors (so `0` should be the first parameter);
|
||||
the former will also restore the original bold and underline attributes, whilst
|
||||
the latter will explicitly reset them. The environment variable `ANSICON_DEF`
|
||||
can be used to change the default colors (same value as `-m`; setting the
|
||||
variable does not change the current colors).
|
||||
|
||||
|
||||
### Ignored Sequences
|
||||
|
||||
The following escape sequences are explicitly ignored.
|
||||
|
||||
\e(? Designate G0 character set ('?' is any character).
|
||||
\e)? Designate G1 character set ('?' is any character).
|
||||
\e[?... Private sequence
|
||||
\e[>... Private sequence
|
||||
|
||||
The G0 character set is always ASCII; the G1 character set is always the
|
||||
DEC Special Graphics Character Set.
|
||||
|
||||
|
||||
### DEC Special Graphics Character Set
|
||||
|
||||
This is my interpretation of the set, as shown by
|
||||
http://vt100.net/docs/vt220-rm/table2-4.html.
|
||||
|
||||
Char Unicode Code Point & Name
|
||||
---- -------------------------
|
||||
_ U+0020 Space (blank)
|
||||
` U+2666 Black Diamond Suit
|
||||
a U+2592 Medium Shade
|
||||
b U+2409 Symbol For Horizontal Tabulation
|
||||
c U+240C Symbol For Form Feed
|
||||
d U+240D Symbol For Carriage Return
|
||||
e U+240A Symbol For Line Feed
|
||||
f U+00B0 Degree Sign
|
||||
g U+00B1 Plus-Minus Sign
|
||||
h U+2424 Symbol For Newline
|
||||
i U+240B Symbol For Vertical Tabulation
|
||||
j U+2518 Box Drawings Light Up And Left
|
||||
k U+2510 Box Drawings Light Down And Left
|
||||
l U+250C Box Drawings Light Down And Right
|
||||
m U+2514 Box Drawings Light Up And Right
|
||||
n U+253C Box Drawings Light Vertical And Horizontal
|
||||
o U+00AF Macron (SCAN 1)
|
||||
p U+25AC Black Rectangle (SCAN 3)
|
||||
q U+2500 Box Drawings Light Horizontal (SCAN 5)
|
||||
r U+005F Low Line (SCAN 7)
|
||||
s U+005F Low Line (SCAN 9)
|
||||
t U+251C Box Drawings Light Vertical And Right
|
||||
u U+2524 Box Drawings Light Vertical And Left
|
||||
v U+2534 Box Drawings Light Up And Horizontal
|
||||
w U+252C Box Drawings Light Down And Horizontal
|
||||
x U+2502 Box Drawings Light Vertical
|
||||
y U+2264 Less-Than Or Equal To
|
||||
z U+2265 Greater-Than Or Equal To
|
||||
{ U+03C0 Greek Small Letter Pi
|
||||
| U+2260 Not Equal To
|
||||
} U+00A3 Pound Sign
|
||||
~ U+00B7 Middle Dot
|
||||
|
||||
`G1.txt` is a Unicode file to view the glyphs "externally". `G1.bat` is a batch
|
||||
file (using `x86\ansicon`) to show the glyphs in the console. The characters
|
||||
will appear as they should using Lucida (other than the Symbols), but code page
|
||||
will influence them when using a raster font (but of particular interest, 437
|
||||
and 850 both show the Box Drawings).
|
||||
|
||||
|
||||
## Version History
|
||||
|
||||
Legend: `+` added, `-` bug-fixed, `*` changed.
|
||||
|
||||
1.66 - 20 September, 2013:
|
||||
|
||||
- fix 32-bit process trying to detect 64-bit process.
|
||||
|
||||
1.65 - 4 September, 2013:
|
||||
|
||||
- fix finding 32-bit LoadLibraryW address from 64-bit;
|
||||
- fix \e[K (was using window, not buffer).
|
||||
|
||||
1.64 - 2 August, 2013:
|
||||
|
||||
- improved detection of console output.
|
||||
|
||||
1.63 - 25 July, 2013:
|
||||
|
||||
- don't write the reset sequence (when it's already installed) if output is
|
||||
redirected.
|
||||
|
||||
1.62 - 18 July, 2013:
|
||||
|
||||
- indicate if opening HKLM failed;
|
||||
* removed ANSI-LLW.exe again, properly this time;
|
||||
* add the architecture (32- or 64-bit) to the log.
|
||||
|
||||
1.61 - 14 February, 2013:
|
||||
|
||||
* revert back to using ANSI-LLW.exe, as the new method was unreliable.
|
||||
|
||||
1.60 - 24 November, 2012:
|
||||
|
||||
* new method to get the 32-bit LoadLibraryW address from 64-bit code.
|
||||
This removes the need for ANSI-LLW.exe, which caused lots of virus
|
||||
warnings, for some reason.
|
||||
- set the code page to display some file names properly;
|
||||
+ expand wildcards for -t (ignoring directories and hidden/binary files).
|
||||
|
||||
1.53 - 12 June, 2012:
|
||||
|
||||
- fix for multiple simultaneous process creation (e.g. "cl /MP ...").
|
||||
|
||||
1.52 - 2 June, 2012:
|
||||
|
||||
+ 32-bit processes can inject into 64-bit processes;
|
||||
+ implemented \e[39m & \e[49m (set default foreground/background color);
|
||||
+ added \e[#X, \e[#`, \e[#a, \e[#d, \e[#e, \[e#j and \e[#k;
|
||||
* changed sequence descriptions to those in ECMA-48, ordered by acronym.
|
||||
|
||||
1.51 - 24 February, 2012:
|
||||
|
||||
- fixed installing into a piped/redirected CMD.EXE;
|
||||
- fixed 32-bit process trying to identify a 64-bit process;
|
||||
- ignore version within core API DLL names (now Win8 works);
|
||||
+ hook _lwrite & _hwrite (now Silverfrost FTN95 v6.20 works).
|
||||
|
||||
1.50 - 14 December, 2011:
|
||||
|
||||
- -u does not imply -p;
|
||||
- return the program's exit code;
|
||||
- -p by itself will not restore original color;
|
||||
- output error messages to stderr;
|
||||
* logging is always available, with various levels; include the pid;
|
||||
* don't automatically hook GUI programs, use 'ansicon' or ANSICON_GUI;
|
||||
* always place first in AutoRun; don't run if already installed;
|
||||
+ global reverse video capability;
|
||||
+ added ANSICON_VER to provide version/install test;
|
||||
+ added ANSICON_EXC to exclude selected modules;
|
||||
+ added ANSICON_DEF to explicitly set the default SGM.
|
||||
|
||||
1.40 - 1 March, 2011:
|
||||
|
||||
- hook GetProcAddress (now PowerShell works);
|
||||
+ add SO/SI, using the DEC Special Graphics Character Set for G1;
|
||||
+ add DECTCEM to show/hide the cursor.
|
||||
|
||||
1.32 - 22 December, 2010:
|
||||
|
||||
- fixed crash due to NULL lpNumberOfBytesWritten/lpNumberOfCharsWritten;
|
||||
- -p will test the parent process for validity;
|
||||
* hook into GUI processes;
|
||||
+ recognise DSR and xterm window title sequences;
|
||||
- fixed MinGW32 binaries (LLW was wrong).
|
||||
|
||||
1.31 - 19 November, 2010:
|
||||
|
||||
- fixed multibyte support (no extra junk with UTF-8 files);
|
||||
* provide workaround for API byte/character differences;
|
||||
* fixed potential problem if install path uses Unicode.
|
||||
|
||||
1.30 - 7 September, 2010:
|
||||
|
||||
+ x64 version.
|
||||
|
||||
1.25 - 22 July, 2010:
|
||||
|
||||
- hook LoadLibraryEx (now CScript works);
|
||||
- fixed -i when AutoRun existed, but was empty;
|
||||
+ support for Windows 7;
|
||||
+ -I (and -U) use HKEY_LOCAL_MACHINE.
|
||||
|
||||
1.24 - 7 January, 2010:
|
||||
|
||||
- fix -t and -e when ANSICON was already running;
|
||||
+ read standard input if redirected with no arguments, if -t has no
|
||||
files, or if the name is "-" (which also serves as a workaround for
|
||||
programs that don't get hooked, such as CScript).
|
||||
|
||||
1.23 - 11 November, 2009:
|
||||
|
||||
- restore hooked functions when unloading;
|
||||
- reverse the "bold" and "underline" settings;
|
||||
* conceal characters by making foreground color same as background.
|
||||
|
||||
1.22 - 5 October, 2009:
|
||||
|
||||
- hook LoadLibrary to inject into applications started via association.
|
||||
|
||||
1.21 - 23 September, 2009:
|
||||
|
||||
+ -i (and -u) option to add (remove) entry to AutoRun value.
|
||||
|
||||
1.20 - 21 June, 2009:
|
||||
|
||||
* use another injection method;
|
||||
+ create ANSICON environment variable;
|
||||
+ -e (and -E) option to echo the command line (without newline);
|
||||
+ -t (and -T) option to type (display) files (with file name).
|
||||
|
||||
1.15 - 17 May, 2009:
|
||||
|
||||
- fix output corruption for long (over 8192 characters) ANSI strings.
|
||||
|
||||
1.14 - 3 April, 2009:
|
||||
|
||||
- fix the test for an empty import section (eg. XCOPY now works).
|
||||
|
||||
1.13 - 21 & 27 March, 2009:
|
||||
|
||||
* use a new injection method (to work with DEP);
|
||||
* use Unicode.
|
||||
|
||||
1.12 - 9 March, 2009:
|
||||
|
||||
- fix processing child programs (generate a relocatable DLL).
|
||||
|
||||
1.11 - 28 February, 2009:
|
||||
|
||||
- fix processing child programs (only use for console executables).
|
||||
|
||||
1.10 - 22 February, 2009:
|
||||
|
||||
- fix output corruption (buffer overflow in MyConsoleWriteW);
|
||||
- recognise current screen attributes as current ANSI atrributes;
|
||||
- ignore Ctrl+C and Ctrl+Break;
|
||||
+ process child programs.
|
||||
|
||||
1.01 - 12 March, 2006:
|
||||
|
||||
* \e[m will restore original color, not set grey on black;
|
||||
+ -m option to set default (and initial) color;
|
||||
- restore original color on exit;
|
||||
- disable escape processing when console has disabled processed output;
|
||||
+ \e[5m (blink) is the same as \e[4m (underline);
|
||||
- do not conceal control characters (0 to 31).
|
||||
|
||||
1.00 - 23 October, 2005:
|
||||
|
||||
+ initial release.
|
||||
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
- Jean-Louis Morel, for his Perl package `Win32::Console::ANSI`. It provided
|
||||
the basis of `ANSI.dll`.
|
||||
|
||||
- Sergey Oblomov (hoopoepg), for Console Manager. It provided the basis of
|
||||
`ansicon.exe`.
|
||||
|
||||
- Anton Bassov's article _"Process-wide API spying - an ultimate hack"_ in _"The
|
||||
Code Project"_.
|
||||
|
||||
- Richard Quadling - his persistence in finding bugs has made ANSICON what it is
|
||||
today.
|
||||
|
||||
- Dmitry Menshikov, Marko Bozikovic and Philippe Villiers, for their assistance
|
||||
in making the 64-bit version a reality.
|
||||
|
||||
- Luis Lavena and the Ruby people for additional improvements.
|
||||
|
||||
- Leigh Hebblethwaite for documentation tweaks.
|
||||
|
||||
- Vincent Fatica for pointing out `\e[K` was not right.
|
||||
|
||||
|
||||
## Contact
|
||||
|
||||
mailto:jadoxa@yahoo.com.au
|
||||
http://ansicon.adoxa.vze.com/
|
||||
https://github.com/adoxa/ansicon
|
||||
|
||||
Jason Hood
|
||||
11 Buckle Street
|
||||
North Rockhampton
|
||||
Qld 4701
|
||||
Australia
|
||||
|
||||
|
||||
## Distribution
|
||||
|
||||
The original zipfile can be freely distributed, by any means. However, I would
|
||||
like to be informed if it is placed on a CD-ROM (other than an archive
|
||||
compilation; permission is granted, I'd just like to know).
|
||||
|
||||
Modified versions may be distributed, provided it is indicated as such in the
|
||||
version text and a source diff is made available.
|
||||
|
||||
In particular, the supplied binaries are freely redistributable.
|
||||
|
||||
A formal license (zlib) is available in `LICENSE.txt`.
|
||||
|
||||
---
|
||||
Copyright 2005-2014 Jason Hood
|
465
readme.txt
465
readme.txt
@ -1,465 +0,0 @@
|
||||
|
||||
ANSICON
|
||||
|
||||
Copyright 2005-2013 Jason Hood
|
||||
|
||||
Version 1.66. Freeware
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
ANSICON provides ANSI escape sequences for Windows console programs. It
|
||||
provides much the same functionality as 'ANSI.SYS' does for MS-DOS.
|
||||
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
32-bit: Windows 2000 Professional and later (it won't work with NT or 9X).
|
||||
64-bit: Vista and later (it won't work with XP64).
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Add "x86" (if your OS is 32-bit) or "x64" (if 64-bit) to your PATH, or copy
|
||||
the relevant files to a directory already on the PATH. Alternatively, use
|
||||
option '-i' (or '-I', if permitted) to install it permanently, by adding an
|
||||
entry to CMD.EXE's AutoRun registry value (current user or local machine,
|
||||
respectively).
|
||||
|
||||
Uninstall simply involves closing any programs that are currently using it;
|
||||
running with '-u' (and/or '-U') to remove it from AutoRun; removing the
|
||||
directory from PATH; and deleting the files. No other changes are made
|
||||
(although you may have also created environment variables).
|
||||
|
||||
Upgrading
|
||||
---------
|
||||
|
||||
Delete ANSI.dll, it has been replaced with ANSI32.dll.
|
||||
Delete ANSI-LLA.exe and ANSI-LLW.exe, they are no longer used.
|
||||
Uninstall a pre-1.50 version and reinstall with this version.
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
Options (case sensitive):
|
||||
|
||||
-l Log to "%TEMP%\ansicon.log".
|
||||
|
||||
-p Enable the parent process (i.e. the command shell used to run
|
||||
ANSICON) to recognise escapes.
|
||||
|
||||
-m Set the current (and default) attribute to grey on black
|
||||
("monochrome"), or the attribute following the 'm' (please
|
||||
use 'COLOR /?' for attribute values).
|
||||
|
||||
-e Echo the command line - a space or tab after the 'e' is
|
||||
ignored, the remainder is displayed verbatim.
|
||||
|
||||
-E As above, but no newline is added.
|
||||
|
||||
-t Display ("type") each file (or standard input if none or the
|
||||
name is "-") as though they are a single file.
|
||||
|
||||
-T Display "==> FILE NAME <==", a blank line (or an error
|
||||
message), the file and another blank line.
|
||||
|
||||
Running ANSICON with no arguments will start a new instance of the command
|
||||
processor (the program defined by the 'ComSpec' environment variable, typ-
|
||||
ically 'CMD.EXE'), or display standard input if it is redirected. Any arg-
|
||||
ument will be treated as a program and its arguments.
|
||||
|
||||
E.g.: 'ansicon -m30 -t file.ans' will display "file.ans" using black on
|
||||
cyan as the default color.
|
||||
|
||||
The attribute may start with '-' to permanently reverse the foreground and
|
||||
background colors (but not when using '-p'). E.g.: 'ansicon -m-f0 -t
|
||||
file.log' will use reversed black on white as the default (i.e. white on
|
||||
black, with foreground sequences changing the background).
|
||||
|
||||
If you experience trouble with certain programs, the log may help in find-
|
||||
ing the cause; it can be found at "%TEMP%\ansicon.log". A number should
|
||||
follow the 'l':
|
||||
|
||||
0 No logging
|
||||
1 Log process start and end
|
||||
2 Above, plus log modules used by the process
|
||||
3 Above, plus log functions that are hooked
|
||||
4 Log console output (add to any of the above)
|
||||
8 Append to the existing file (add to any of the above)
|
||||
16 Log all imported modules (add to any of the above)
|
||||
|
||||
The log option will not work with '-p'; set the environment variable
|
||||
ANSICON_LOG instead. The variable is only read once when a new process is
|
||||
started; changing it won't affect running processes. If you identify a
|
||||
module that causes problems, add it to the ANSICON_EXC environment variable
|
||||
(see ANSICON_API below, but the extension is required).
|
||||
|
||||
E.g.: 'ansicon -l5' will start a new command processor, logging every pro-
|
||||
cess it starts along with their output.
|
||||
|
||||
Once installed, the ANSICON environment variable will be created. This
|
||||
variable is of the form "WxH (wxh)", where 'W' & 'H' are the width and
|
||||
height of the buffer and 'w' & 'h' are the width and height of the window.
|
||||
The variable is updated whenever a program reads it directly (i.e. as an
|
||||
individual request, not as part of the entire environment block). For
|
||||
example, 'set an' will not update it, but 'echo %ansicon%' will. Also
|
||||
created is ANSICON_VER, which contains the version without the point (1.50
|
||||
becomes "150"). This variable does not exist as part of the environment
|
||||
block ('set an' will not show it).
|
||||
|
||||
If installed, GUI programs will not be hooked. Either start the program
|
||||
directly with 'ansicon', or add it to the ANSICON_GUI variable (see
|
||||
ANSICON_API below).
|
||||
|
||||
Using 'ansicon' after install will always start with the default attrib-
|
||||
utes, restoring the originals on exit; all other programs will use the cur-
|
||||
rent attributes. The shift state is always reset for a new process.
|
||||
|
||||
The Windows API WriteFile and WriteConsoleA functions will set the number
|
||||
of characters written, not the number of bytes. When using a multibyte
|
||||
character set, this results in a smaller number (since multiple bytes are
|
||||
used to represent a single character). Some programs recognise this as a
|
||||
reduced write and will inadvertently repeat previous characters. If you
|
||||
discover such a program, use the ANSICON_API environment variable to record
|
||||
it and override the API, returning the original byte count. Ruby (prior to
|
||||
1.9.3) is an example of such a program, so use 'set ANSICON_API=ruby' to
|
||||
avoid the repitition. The full syntax is:
|
||||
|
||||
ANSICON_API=[!]program;program;program...
|
||||
|
||||
PROGRAM is the name of the program, with no path and extension. The lead-
|
||||
ing exclamation inverts the usage, meaning the API will always be over-
|
||||
ridden, unless the program is in the list. The variable can be made perm-
|
||||
anent by going to System Properties, selecting the Advanced tab (with Vista
|
||||
onwards, this can be done by running "SystemPropertiesAdvanced") and click-
|
||||
ing Environment Variables.
|
||||
|
||||
|
||||
Sequences Recognised
|
||||
====================
|
||||
|
||||
The following escape sequences are recognised.
|
||||
|
||||
\e]0;titleBEL Set (xterm) window's title (and icon)
|
||||
\e[21t Report (xterm) window's title
|
||||
\e[s Save Cursor
|
||||
\e[u Restore Cursor
|
||||
\e[#G CHA Cursor Character Absolute
|
||||
\e[#E CNL Cursor Next Line
|
||||
\e[#F CPL Cursor Preceding Line
|
||||
\e[#D CUB Cursor Left
|
||||
\e[#B CUD Cursor Down
|
||||
\e[#C CUF Cursor Right
|
||||
\e[#;#H CUP Cursor Position
|
||||
\e[#A CUU Cursor Up
|
||||
\e[#P DCH Delete Character
|
||||
\e[?25h DECTCEM DEC Text Cursor Enable Mode (show cursor)
|
||||
\e[?25l DECTCEM DEC Text Cursor Enable Mode (hide cursor)
|
||||
\e[#M DL Delete Line
|
||||
\e[#n DSR Device Status Report
|
||||
\e[#X ECH Erase Character
|
||||
\e[#J ED Erase In Page
|
||||
\e[#K EL Erase In Line
|
||||
\e[#` HPA Character Position Absolute
|
||||
\e[#j HPB Character Position Backward
|
||||
\e[#a HPR Character Position Forward
|
||||
\e[#;#f HVP Character And Line Position
|
||||
\e[#@ ICH Insert Character
|
||||
\e[#L IL Insert Line
|
||||
SI LS0 Locking-shift Zero (see below)
|
||||
SO LS1 Locking-shift One
|
||||
\e[#;#;#m SGR Select Graphic Rendition
|
||||
\e[#d VPA Line Position Absolute
|
||||
\e[#k VPB Line Position Backward
|
||||
\e[#e VPR Line Position Forward
|
||||
|
||||
'\e' represents the escape character (ASCII 27); '#' represents a decimal
|
||||
number (optional, in most cases defaulting to 1); BEL, SO and SI are ASCII
|
||||
7, 14 and 15. Regarding SGR: bold will set the foreground intensity; blink
|
||||
and underline will set the background intensity; conceal uses background as
|
||||
foreground. See "sequences.txt" for a more complete description.
|
||||
|
||||
I make a distinction between '\e[m' and '\e[0;...m'. Both will restore the
|
||||
original foreground/background colors (and so '0' should be the first para-
|
||||
meter); the former will also restore the original bold and underline attri-
|
||||
butes, whilst the latter will explicitly reset them. The environment var-
|
||||
iable ANSICON_DEF can be used to change the default colors (same value as
|
||||
'-m'; setting the variable does not change the current colors).
|
||||
|
||||
|
||||
Sequences Ignored
|
||||
=================
|
||||
|
||||
The following escape sequences are explicitly ignored.
|
||||
|
||||
\e(? Designate G0 character set ('?' is any character).
|
||||
\e)? Designate G1 character set ('?' is any character).
|
||||
\e[?... Private sequence
|
||||
\e[>... Private sequence
|
||||
|
||||
The G0 character set is always ASCII; the G1 character set is always the
|
||||
DEC Special Graphics Character Set.
|
||||
|
||||
|
||||
DEC Special Graphics Character Set
|
||||
==================================
|
||||
|
||||
This is my interpretation of the set, as shown by
|
||||
http://vt100.net/docs/vt220-rm/table2-4.html.
|
||||
|
||||
|
||||
Char Unicode Code Point & Name
|
||||
---- -------------------------
|
||||
_ U+0020 Space (blank)
|
||||
` U+2666 Black Diamond Suit
|
||||
a U+2592 Medium Shade
|
||||
b U+2409 Symbol For Horizontal Tabulation
|
||||
c U+240C Symbol For Form Feed
|
||||
d U+240D Symbol For Carriage Return
|
||||
e U+240A Symbol For Line Feed
|
||||
f U+00B0 Degree Sign
|
||||
g U+00B1 Plus-Minus Sign
|
||||
h U+2424 Symbol For Newline
|
||||
i U+240B Symbol For Vertical Tabulation
|
||||
j U+2518 Box Drawings Light Up And Left
|
||||
k U+2510 Box Drawings Light Down And Left
|
||||
l U+250C Box Drawings Light Down And Right
|
||||
m U+2514 Box Drawings Light Up And Right
|
||||
n U+253C Box Drawings Light Vertical And Horizontal
|
||||
o U+00AF Macron (SCAN 1)
|
||||
p U+25AC Black Rectangle (SCAN 3)
|
||||
q U+2500 Box Drawings Light Horizontal (SCAN 5)
|
||||
r U+005F Low Line (SCAN 7)
|
||||
s U+005F Low Line (SCAN 9)
|
||||
t U+251C Box Drawings Light Vertical And Right
|
||||
u U+2524 Box Drawings Light Vertical And Left
|
||||
v U+2534 Box Drawings Light Up And Horizontal
|
||||
w U+252C Box Drawings Light Down And Horizontal
|
||||
x U+2502 Box Drawings Light Vertical
|
||||
y U+2264 Less-Than Or Equal To
|
||||
z U+2265 Greater-Than Or Equal To
|
||||
{ U+03C0 Greek Small Letter Pi
|
||||
| U+2260 Not Equal To
|
||||
} U+00A3 Pound Sign
|
||||
~ U+00B7 Middle Dot
|
||||
|
||||
G1.txt is a Unicode file to view the glyphs "externally". G1.bat is a
|
||||
batch file (using 'x86\ansicon') to show the glyphs in the console. The
|
||||
characters will appear as they should using Lucida (other than the Sym-
|
||||
bols), but code page will influence them when using a raster font (but of
|
||||
particular interest, 437 and 850 both show the Box Drawings).
|
||||
|
||||
|
||||
Limitations
|
||||
===========
|
||||
|
||||
The entire console buffer is used, not just the visible window.
|
||||
|
||||
There's a conflict with NVIDIA's drivers, requiring the setting of the
|
||||
Environment Variable:
|
||||
|
||||
ANSICON_EXC=nvd3d9wrap.dll;nvd3d9wrapx.dll
|
||||
|
||||
|
||||
Version History
|
||||
===============
|
||||
|
||||
Legend: + added, - bug-fixed, * changed.
|
||||
|
||||
1.66 - 20 September, 2013:
|
||||
- fix 32-bit process trying to detect 64-bit process.
|
||||
|
||||
1.65 - 4 September, 2013:
|
||||
- fix finding 32-bit LoadLibraryW address from 64-bit;
|
||||
- fix \e[K (was using window, not buffer).
|
||||
|
||||
1.64 - 2 August, 2013:
|
||||
- improved detection of console output.
|
||||
|
||||
1.63 - 25 July, 2013:
|
||||
- don't write the reset sequence (when it's already installed) if output is
|
||||
redirected.
|
||||
|
||||
1.62 - 18 July, 2013:
|
||||
- indicate if opening HKLM failed;
|
||||
* removed ANSI-LLW.exe again, properly this time;
|
||||
* add the architecture (32- or 64-bit) to the log.
|
||||
|
||||
1.61 - 14 February, 2013:
|
||||
* revert back to using ANSI-LLW.exe, as the new method was unreliable.
|
||||
|
||||
1.60 - 24 November, 2012:
|
||||
* new method to get the 32-bit LoadLibraryW address from 64-bit code.
|
||||
This removes the need for ANSI-LLW.exe, which caused lots of virus
|
||||
warnings, for some reason.
|
||||
- set the code page to display some file names properly;
|
||||
+ expand wildcards for -t (ignoring directories and hidden/binary files).
|
||||
|
||||
1.53 - 12 June, 2012:
|
||||
- fix for multiple simultaneous process creation (e.g. "cl /MP ...").
|
||||
|
||||
1.52 - 2 June, 2012:
|
||||
+ 32-bit processes can inject into 64-bit processes;
|
||||
+ implemented \e[39m & \e[49m (set default foreground/background color);
|
||||
+ added \e[#X, \e[#`, \e[#a, \e[#d, \e[#e, \[e#j and \e[#k;
|
||||
* changed sequence descriptions to those in ECMA-48, ordered by acronym.
|
||||
|
||||
1.51 - 24 February, 2012:
|
||||
- fixed installing into a piped/redirected CMD.EXE;
|
||||
- fixed 32-bit process trying to identify a 64-bit process;
|
||||
- ignore version within core API DLL names (now Win8 works);
|
||||
+ hook _lwrite & _hwrite (now Silverfrost FTN95 v6.20 works).
|
||||
|
||||
1.50 - 14 December, 2011:
|
||||
- -u does not imply -p;
|
||||
- return the program's exit code;
|
||||
- -p by itself will not restore original color;
|
||||
- output error messages to stderr;
|
||||
* logging is always available, with various levels; include the pid;
|
||||
* don't automatically hook GUI programs, use 'ansicon' or ANSICON_GUI;
|
||||
* always place first in AutoRun; don't run if already installed;
|
||||
+ global reverse video capability;
|
||||
+ added ANSICON_VER to provide version/install test;
|
||||
+ added ANSICON_EXC to exclude selected modules;
|
||||
+ added ANSICON_DEF to explicitly set the default SGM.
|
||||
|
||||
1.40 - 1 March, 2011:
|
||||
- hook GetProcAddress (now PowerShell works);
|
||||
+ add SO/SI, using the DEC Special Graphics Character Set for G1;
|
||||
+ add DECTCEM to show/hide the cursor.
|
||||
|
||||
1.32 - 22 December, 2010:
|
||||
- fixed crash due to NULL lpNumberOfBytesWritten/lpNumberOfCharsWritten;
|
||||
- -p will test the parent process for validity;
|
||||
* hook into GUI processes;
|
||||
+ recognise DSR and xterm window title sequences;
|
||||
- fixed MinGW32 binaries (LLW was wrong).
|
||||
|
||||
1.31 - 19 November, 2010:
|
||||
- fixed multibyte support (no extra junk with UTF-8 files);
|
||||
* provide workaround for API byte/character differences;
|
||||
* fixed potential problem if install path uses Unicode.
|
||||
|
||||
1.30 - 7 September, 2010:
|
||||
+ x64 version.
|
||||
|
||||
1.25 - 22 July, 2010:
|
||||
- hook LoadLibraryEx (now CScript works);
|
||||
- fixed -i when AutoRun existed, but was empty;
|
||||
+ support for Windows 7;
|
||||
+ -I (and -U) use HKEY_LOCAL_MACHINE.
|
||||
|
||||
1.24 - 7 January, 2010:
|
||||
- fix -t and -e when ANSICON was already running;
|
||||
+ read standard input if redirected with no arguments, if -t has no
|
||||
files, or if the name is "-" (which also serves as a workaround for
|
||||
programs that don't get hooked, such as CScript).
|
||||
|
||||
1.23 - 11 November, 2009:
|
||||
- restore hooked functions when unloading;
|
||||
- reverse the "bold" and "underline" settings;
|
||||
* conceal characters by making foreground color same as background.
|
||||
|
||||
1.22 - 5 October, 2009:
|
||||
- hook LoadLibrary to inject into applications started via association.
|
||||
|
||||
1.21 - 23 September, 2009:
|
||||
+ -i (and -u) option to add (remove) entry to AutoRun value.
|
||||
|
||||
1.20 - 21 June, 2009:
|
||||
* use another injection method;
|
||||
+ create ANSICON environment variable;
|
||||
+ -e (and -E) option to echo the command line (without newline);
|
||||
+ -t (and -T) option to type (display) files (with file name).
|
||||
|
||||
1.15 - 17 May, 2009:
|
||||
- fix output corruption for long (over 8192 characters) ANSI strings.
|
||||
|
||||
1.14 - 3 April, 2009:
|
||||
- fix the test for an empty import section (eg. XCOPY now works).
|
||||
|
||||
1.13 - 21 & 27 March, 2009:
|
||||
* use a new injection method (to work with DEP);
|
||||
* use Unicode.
|
||||
|
||||
1.12 - 9 March, 2009:
|
||||
- fix processing child programs (generate a relocatable DLL).
|
||||
|
||||
1.11 - 28 February, 2009:
|
||||
- fix processing child programs (only use for console executables).
|
||||
|
||||
1.10 - 22 February, 2009:
|
||||
- fix output corruption (buffer overflow in MyConsoleWriteW);
|
||||
- recognise current screen attributes as current ANSI atrributes;
|
||||
- ignore Ctrl+C and Ctrl+Break;
|
||||
+ process child programs.
|
||||
|
||||
1.01 - 12 March, 2006:
|
||||
* \e[m will restore original color, not set grey on black;
|
||||
+ -m option to set default (and initial) color;
|
||||
- restore original color on exit;
|
||||
- disable escape processing when console has disabled processed output;
|
||||
+ \e[5m (blink) is the same as \e[4m (underline);
|
||||
- do not conceal control characters (0 to 31).
|
||||
|
||||
1.00 - 23 October, 2005:
|
||||
+ initial release.
|
||||
|
||||
|
||||
Acknowledgments
|
||||
===============
|
||||
|
||||
Jean-Louis Morel, for his Perl package Win32::Console::ANSI. It provided
|
||||
the basis of 'ANSI.dll'.
|
||||
|
||||
Sergey Oblomov (hoopoepg), for Console Manager. It provided the basis of
|
||||
'ansicon.exe'.
|
||||
|
||||
Anton Bassov's article "Process-wide API spying - an ultimate hack" in "The
|
||||
Code Project".
|
||||
|
||||
Richard Quadling - his persistence in finding bugs has made ANSICON what it
|
||||
is today.
|
||||
|
||||
Dmitry Menshikov, Marko Bozikovic and Philippe Villiers, for their assis-
|
||||
tance in making the 64-bit version a reality.
|
||||
|
||||
Luis Lavena and the Ruby people for additional improvements.
|
||||
|
||||
Leigh Hebblethwaite for documentation tweaks.
|
||||
|
||||
Vincent Fatica for pointing out \e[K was not right.
|
||||
|
||||
|
||||
Contact
|
||||
=======
|
||||
|
||||
mailto:jadoxa@yahoo.com.au
|
||||
http://ansicon.adoxa.vze.com/
|
||||
https://github.com/adoxa/ansicon
|
||||
|
||||
Jason Hood
|
||||
11 Buckle Street
|
||||
North Rockhampton
|
||||
Qld 4701
|
||||
Australia
|
||||
|
||||
|
||||
Distribution
|
||||
============
|
||||
|
||||
The original zipfile can be freely distributed, by any means. However, I
|
||||
would like to be informed if it is placed on a CD-ROM (other than an arch-
|
||||
ive compilation; permission is granted, I'd just like to know). Modified
|
||||
versions may be distributed, provided it is indicated as such in the ver-
|
||||
sion text and a source diff is made available. In particular, the supplied
|
||||
binaries are freely redistributable. A formal license (zlib) is available
|
||||
in LICENSE.txt.
|
||||
|
||||
|
||||
===============================
|
||||
Jason Hood, 20 September, 2013.
|
Loading…
x
Reference in New Issue
Block a user