98 Commits

Author SHA1 Message Date
Jason Hood
9242785570 Recognise wrap when moving backwards
BS/CUB/HPB will move back to previous line(s) if the line has wrapped.
2017-12-19 10:28:53 +10:00
Jason Hood
80d9e7da78 Add IRM
Setting IRM will cause characters to be inserted, discarding anything
that goes beyond the edge.

Turn off the wrap flag when the cursor moves.

SM/RM allow more than one parameter.
2017-12-17 11:13:12 +10:00
Jason Hood
66c527a624 Tweak colors
SGR parameters 90-97 are bright foreground (leaving bold unchanged) and
100-107 are bright background (leaving underline/blink unchanged);
`38;5;#` & `48;5;#` will work for the first 16 colors, setting both
foreground & bold or background & underline (0-7 bold/underline off,
8-15 bold/underline on).
2017-12-16 12:37:43 +10:00
Jason Hood
410fc067a7 Fix DECNCSM sequence in readme 2017-12-11 12:04:07 +10:00
Jason Hood
7c14985a5d Modify DECSC/DECRC
Save/restore the attributes and G0 character set (the ANSI version still
only does the cursor).

Add the comment I missed when adding SCS; remove `DEC` from the sequence
descriptions.
2017-12-11 11:34:32 +10:00
Jason Hood
d20ab7471f Add tab handling
Support setting (HTS & DECST8C) and clearing (TBC) tabs, overriding the
console's own tab processing.  I've extended TBC with `\e[8g` to restore
console processing and added an extra parameter to DECST8C to set a
particular tab size.
2017-12-10 22:52:38 +10:00
Jason Hood
645f57e59c Fix parameters
Explicit zero parameters should still default to one.  Limit parameters
to a maximum value of 32767.
2017-12-09 22:16:47 +10:00
Jason Hood
c11447fc8b Add partial SCS support
Allow G0 to be set to the DEC Special Graphics Character Set or ASCII.
2017-12-09 21:01:13 +10:00
Jason Hood
0e87a03761 Add DA, DECCOLM, DECNSCM, DECSC & DECRC
DECSC (Save Cursor) & DECRC (Restore Cursor) are the same as their
ANSI.sys equivalents (`\e[s` & `\e[u`).

DA (Device Attributes) will respond with `\e[?62;1c` - VT220 with 132
columns.

Setting DECCOLM will size the buffer & window to 132 columns; resetting
will restore the original values (NOT set 80 columns).	Setting DECNSCM
will prevent the display from being erased; however, the first time
DECCOLM is used will scroll in a new window, if appropriate.
2017-12-09 11:11:52 +10:00
Jason Hood
eb997019c1 Add IND, NEL and RI
These controls always operate on the buffer, in keeping with LF.
2017-12-03 12:50:13 +10:00
Jason Hood
0c2f9b314e Strip readme.md to just the intro & requirements 2017-11-30 21:22:10 +10:00
Jason Hood
1a4d6b488f Add option -pu to unload from the parent 2017-11-30 21:05:41 +10:00
Jason Hood
523c478d67 Fix some things
Prevent `ESC LF` from performing the newline.
Only recognise `, ~`, not `,` anything.
Document BEL and the ignored sequences.
2017-11-30 11:38:15 +10:00
Jason Hood
1754f68ac9 Redefine the graphics SCAN characters 2017-11-29 11:42:47 +10:00
Jason Hood
e2f9b4e417 Add palette sequences
Recognise the xterm ESC]4 & ESC]104 OSC commands to set/reset colors.
Three color specs are recognised: `#RGB`, `#RRGGBB` and `R,G,B`; in
addition, multiple specs can be given (separated by commas) to
automatically increase the index.  I also allow `*` to query this index
and all subsequent ones.  Reset will restore the colors from when the
DLL was first loaded, not from the Console Properties.
2017-11-29 11:06:57 +10:00
Jason Hood
9fbe42a583 Escape control characters; fix CRM issues
Since ESC is now preserved for unrecognised sequences, I feel able to
use it to escape control characters in order to display them (e.g.
"\e\e" will display a single escape).

Control mode would not display the recognised controls (i.e. BEL, SO and
SI) and would not work if it was turned off in the same string.
2017-11-24 11:10:42 +10:00
Jason Hood
e44cbb848f Add + to use the buffer
Normally the display uses the window height; adding an intermediate
character of `+` will use the buffer height.  Report cursor position
will also output `+R` when used with `+n`.
2017-11-23 12:06:33 +10:00
Jason Hood
a4125753a4 Fix compiling with MinGW and TDM
MinGW lacks some definitions; TDM wants WINVER defined.

Assume a default `CC=cc` should really be `CC=gcc`.
2017-11-21 11:46:58 +10:00
Jason Hood
826b0b66ba Add DECPS Play Sound
There are some differences from the VT520: volume is ignored (although
silence is honored); duration is in 1/32 of a second up to and including
48 (1.5 seconds), after which it is in milliseconds (but still a maximum
of 8 seconds); notes are 1..25, anything else is frequency.
2017-11-19 12:07:28 +10:00
Jason Hood
aa8b0c6a36 Use the system default sound for the bell
Windows 7 uses Beep for the bell, which means if you accidentally view
a binary file, the console freezes until all the bells have finished.
Windows 10 uses PlaySound, which avoids the freeze, but prevents the
sound being played at all if the program immediately exits (in its own
host).	This uses PlaySound in its own thread, ignoring additional bells
whilst one is currently playing and waiting for it to finish before
terminating.
2017-11-17 21:53:58 +10:00
Jason Hood
8eb06aad27 Preserve ESC not part of a sequence
There are some instances when ESC should just be a normal character
(e.g. TCC uses it in aliases to clear the current line), so if no
sequence is recognised, pass the ESC through.
2017-11-07 11:35:42 +10:00
Jason Hood
43b3653c8a Fix problem with reporting cursor position
Turns out that sending duplicate characters would only send one (e.g.
"11" would just be "1").  Sending the key up events fixed it.
2017-11-03 23:04:51 +10:00
Jason Hood
2f3fe57b60 Hook CreateFile and CreateConsoleScreenBuffer
If console handles are created as GENERIC_WRITE, add GENERIC_READ in
order to be able to retrieve console information.  This fixes #93
(redirecting to CON).
2017-10-30 10:50:11 +10:00
Jason Hood
97dcb13634 Fix ANSICON's output when redirected to CON
ANSICON switches the standard streams to Unicode, but uses its own
routine to write directly to the console when appropriate.  However, the
newlines written by -e/-E/-t/-T were still done by the CRT, so when
output was redirected to CON, "\r\0\n\0" was being written.
2017-10-28 16:43:45 +10:00
Jason Hood
df5596f65f Increase cache to five handles
The cache is used to speed up detection of console handles, but with the
original three handles I was only thinking of actual console handles,
not general file handles.  Five handles implies: stdout, stderr,
CONOUT$, log file and output file.
2017-10-28 12:31:35 +10:00
Jason Hood
67f1d48801 Revert back to saving buffer cursor position
In v1.70 I had saved the cursor position relative to the window, but
that means should the window scroll, the cursor would appear to be
restored to the wrong position.  It will still be wrong should the
*buffer* be scrolled, but that can't really be helped (well, possibly
it could, but it would be more effort than it's worth).
2017-10-28 11:19:06 +10:00
Jason Hood
b5e7a01f7f Mention you shouldn't install to System32 2017-10-27 21:28:52 +10:00
Jason Hood
3fb6b5aa65 Fix unloading 2017-10-26 21:46:53 +10:00
Jason Hood
bff5e90eda Add some comments 2017-10-26 12:58:17 +10:00
Jason Hood
40f59c543c Many changes, bad programmer!
Just copying the history from the source:

recognize the standard handle defines in WriteFile;
minor speed improvement by caching GetConsoleMode;
keep track of three handles (ostensibly stdout, stderr and a file);
test a DOS header exists before writing to e_oemid;
more flexible/robust handling of data directories;
files writing to the console will always succeed;
log: use API file functions and a custom printf;
     add a blank line between processes;
     set function name for MyWriteConsoleA;
scan imports from "kernel32" (without extension);
added dynamic environment variable CLICOLOR;
removed _hwrite (it's the same address as _lwrite);
join multibyte characters split across separate writes;
remove wcstok, avoiding potential interference with the host;
similarly, use a private heap instead of malloc.
2017-07-25 18:18:34 +10:00
darealshinji
2f18f10719 Support cross-compiling (#104)
* Support cross-compiling

* Don't fail to detect i686-w64-mingw32 targets
2017-07-07 10:59:25 +10:00
Jason Hood
6d2a75e0b5 Merge pull request #86 from amullins83/vs2015_crt_non
Add _CRT_NON_CONFORMING_WCSTOK define
2015-10-23 23:08:43 +10:00
Austin Mullins
690f8056bd Add _CRT_NON_CONFORMING_WCSTOK define 2015-10-23 07:49:33 -05:00
Jason Hood
3acc7a9f14 Remove version history & my postal address from readme.md. 2014-07-04 12:57:06 +10:00
Jason Hood
902df27762 Merge branch 'sun-readme' 2014-07-04 12:48:46 +10:00
Jason Hood
e7be303e84 Merge branch 'readme' of https://github.com/sun/ansicon into sun-readme
Add readme.md, but still keep readme.txt.
2014-07-04 12:47:12 +10:00
sun
dfc8a43ac8 Converted readme.txt into Markdown. 2014-07-01 22:56:13 +02:00
Jason Hood
1fe1d8f130 Recognise more sequences; ignore newline immediately after wrap.
Added support for CHT & CBT (move forward/backward by tabs), DECAWM (don't
wrap at EOL), CRM (display control characters, but still perform newline)
and REP (repeat last character, including BEL, BS, TAB, LF and CR).

It always bugged me that newline would add an unneeded blank line due to
wrap, but not enough to do anything about it.  For some reason, adding CRM
got me to thinking about it, so I finally did it.

Stopped \e[K from erasing the first character of the next line.
Restore cursor visibility on unload.
2014-02-26 21:18:45 +10:00
Jason Hood
7539473550 Use window height, not buffer.
Clear screen (\e[2J) will scroll in a new window the first time it's used,
or the window has scrolled, or the cursor is on the last line of the buffer.

Restore Cursor Position (\e[u) will recognise screen size changes and limit
itself to the new boundaries.
2014-02-20 18:06:28 +10:00
Jason Hood
9fa86512f3 Better parsing of escape & CSI sequences.
Recognise general Parameter & Intermediate Bytes, rather than testing
specific characters.  Explicitly ignore xterm 38 & 48 SGR values.
2014-02-18 21:34:39 +10:00
Jason Hood
bd696b55c8 Exclude entire programs; better hooking of dynamically-loaded libraries.
ANSICON_EXC can now be used to exclude an entire program (including children).
This is achieved by simply not specifying an extension: ANSICON_EXC=program.exe
will just ignore program.exe (its DLLs will still be hooked, as will its child-
ren), but ANSICON_EXC=program will not hook program at all (which also means
its children will not be hooked).

The various LoadLibrary hooks would only hook the DLL that was specified - any
DLLs it loaded would be missed.  That has now been rectified.  Similarly, a DLL
that is injected via CreateRemoteThread, using LoadLibraryA or LoadLibraryW as
its ThreadProc, will now be hooked.
2014-02-10 16:33:42 +10:00
Jason Hood
6da33b2af0 Attributes and saved position are local to each console window. 2014-02-08 18:30:53 +10:00
Jason Hood
453db81af5 Fixed restoring original attributes on detach. 2014-02-08 12:04:43 +10:00
Jason Hood
db36552c42 Work with 64-bit AnyCPU; copy original IDT to IAT; log improvements. 2014-02-08 01:10:51 +10:00
Jason Hood
dc7569dc26 Inject by adding to the Import Directory Table.
-p uses CreateRemoteThread, determining kernel32.dll & LLW dynamically.
Loading via LoadLibrary will remember the current attributes, restoring them on
unload.
Tweaked log output (remove quotes around CreateProcess command line; add an
underscore to 64-bit addresses).
ansicon.exe will really output (to the console) strings as Unicode.
Fixed ansicon.exe, if installed, restoring the default attributes, not current.
ansicon.exe will start with ANSICON_DEF (if defined and -m not used).
2014-02-05 00:21:42 +10:00
Jason Hood
bccf933c0a Always find the base address of kernel32.dll. 2014-01-27 14:03:53 +10:00
Jason Hood
b2c8a9ec12 LoadLibrary hooking improvements.
Don't hook ourself from LoadLibrary or LoadLibraryEx.
Test additional LoadLibraryEx flags before deciding to hook.
2014-01-25 23:43:41 +10:00
Jason Hood
cf6f8c741e Enable makefile.gcc V=0 to work with CMD.EXE. 2013-11-13 20:30:09 +10:00
Jason Hood
5e7590e3a9 Fixed the 32-bit detecting 64-bit improvement. 2013-09-21 01:11:53 +10:00
Jason Hood
0394977368 Improve 32-bit detecting 64-bit; release v1.66. 2013-09-20 03:15:05 +10:00