Please enable JavaScript to view this site.

Navigation: What's New in Version 36

What's New in Version 34

Scroll Prev Top Next More

TCC-RT:

 

Many performance and security optimizations.

 

TCC-RT now supports wide Unicode characters (including surrogate pairs) everywhere.

 

TCC-RT now maps executables that it finds in the PATH, to speed up finding them on subsequent execution. The map contains the .exe filename and the full path+name retrieved from the PATH search. The map is specific to each shell, and is not saved / restored when a shell exits and restarts. If you have a short PATH, a fast SSD, no PATHEXT or executable extensions, and you aren't loading small executables repeatedly (i.e., in a loop) you probably won't perceive a significant performance difference.

 

If a filename begins with $ and ends with $, TCC-RT will first look to see if the file exists. If not, TCC-RT will remove the enclosing $'s and see if the file exists. If it does, TCC-RT will convert it to a WSL path (like the @WSLPATH variable function, but easier to type). For example, if your current directory is d:\foo:

 

grep $myfile.dat$

 

will be translated to:

 

grep //mnt/d/foo/myfile.dat

 

You can enable / disable the filename translation with the WSLPath=YES|no directive in TCMD.INI.

 

All of the TCC-RT file handling commands that support ranges (for example, DIR, PDIR, TREE, COPY, MOVE, etc.) now support fuzzy filename matching using Levenshtein Distances if the filename begins with two asterisks (**filename). The Levenshtein Distance between two words is the minimum number of single-character edits (insertions, deletions or substitutions) required to change one word into the other.

 

The default Levenshtein Distance is 3; you can change the default with the LVSDistance .INI directive (see below). You can specify the maximum distance to use with an individual command with a new command option:

 

/LVS=n

 

where n is the maximum distance to match. If you do not use the /LVS option, the maximum distance will default to 3. For example, if you have three files:

 

bubbles

babble

bobble

 

Then:

 

dir **babble

 

will return all three (babble has a distance of  0, bobble a distance of 1, and bubbles a distance of 2). But:

 

dir /lvs=1 **babble

 

will only return:

 

babble

bobble

 

You cannot combine fuzzy name matching with regular expressions or the * ? [...] wildcards.

 

The Oniguruma regular expression library has been updated to version 6.9.10. This includes support for Unicode 16.0, and the *SKIP control verb.

 

 

IDE / Batch Debugger:

 

Many performance and security optimizations.

 

The IDE is using a new version of the GUI framework.

 

The Scintilla edit control has been updated to version 5.5.4.

 

The Lexilla syntax coloring control has been updated to version 5.4.2.

 

The "Save to HTML" option now saves the font name, point size, and foreground + background colors (including the syntax coloring).

 

 

Help:

 

The help system is using a new theme and a new (much faster) HTML / CSS rendering engine.

 

 

New TCMD.INI Directives:

 

LVSDistance=n - Set the maximum Levenshtein Difference (aka edit distance) for fuzzy filename matching. The default value is 3.

 

 

New Internal Variables:

 

_bttime - Date/time of last BTMONITOR event

 

_eventtime - Date/time of last EVENTMONITOR event

 

_firewiretime - Date/time of last FIREWIREMONITOR event

 

_nettime - Date/time of last NETMONITOR event

 

_outputdebugtime - Date/time of last DEBUGMONITOR event

 

_powertime - Date/time of last POWERMONITOR event

 

_processtime - Date/time of last PROCESSMONITOR event

 

_servicetime - Date/time of the last SERVICEMONITOR event

 

_sqlite - The version of SQLite included in TCC (for example, 3.47.1).

 

_usbtime - Date/time of the last USBMONITOR event

 

 

Updated Variable Functions:

 

@BPEEK - added an optional fourth parameter +, which indicates that the value to read is a signed number.

 

@BPOKE - added an optional fourth parameter +, which indicates that value is a signed number.

 

@EMAIL - added support for upper case & mixed case.

 

@PID[name,+] - Is much faster if you aren't using wildcards or paths in the file name.

 

 

New Variable Functions:

 

@DLLTYPE[dllname] - like @EXETYPE, but returns the type of a DLL.

 

Code

DLL type

0

Unknown

6

Win32 GUI

7

Win32 console

9

Windows x64 GUI

10

Windows x64 console

 

@LVS[string1,string2] - return the Levenshtein Distance for the two strings.

 

@WCWIDTH[string] - return the width of the string in columns. @WCWIDTH supports double-width Unicode characters, including surrogate pairs. It also supports zero-width characters.

 

 

Updated Commands:

 

ASSOC

 

/Pn - the /P(ause) option has an optional argument n that specifies the number of seconds to wait for a keystroke before continuing.

 

CLS

 

Added support for the COLOR / CMD.EXE hex color specification:

 

CLS bf

 

In this syntax, b is a hexadecimal digit that specifies the background color and f is a hexadecimal digit that specifies the foreground color.

 

COLOR

 

/A - change the text color of the entire console buffer

 

DIR

 

/32 - show a » before 32-bit module names (EXE's and DLL's). Only supported with the default single column & full info display (i.e., no /B, /W, /2, etc.).

 

DIRENV

 

Changed to more closely follow the Linux behavior. When you change directories, TCC will start at the root of the new directory and scan to the subdirectory looking for .envtc files. So if you have .envtc files in one or more of the parent directories, they will be processed as well as any .envtc in the new directory. (The priority is top-down, so you can specify variables to be removed that were defined in a parent directory.)

 

FSEARCH

 

FSEARCH will read from STDIN (i.e., usually a pipe) if you don't specify path / filename. For example:

 

dir /s | fsearch /t"file47"

 

GOSUB

 

The optional subroutine filename now supports home directories, directory aliases, shell folders, extended parent directories ("..."), URLs, and UNCs.

 

HEAD

 

/E"regex" - only display lines that match the regular expression. /E"..." has been added to the HEAD command dialog.

 

/L - number the lines.

 

/L0 - number the lines, but don't number blank lines.

 

INKEY

 

/C can now be combined with other arguments.

 

INPUT

 

/C can now be combined with other arguments.

 

PEE

 

/E"regex" - only output lines that match the regular expression.

 

/Unicode=[UTF-16LE | UTF-8 | ASCII] - specify the input encoding. The default is the current TCC output encoding.

 

PIPEVIEW

 

/E"regex" - only output lines that match the regular expression. /E"..." has been added to the PIPEVIEW command dialog.

 

/Unicode=[UTF-16LE | UTF-8 | ASCII] - specify the input encoding. The default is the current TCC output encoding.

 

START

 

/Env - Starts the new process with the default startup environment for the current user.

 

/P - Starts the new process suspended. Use %_startpid and PRIORITY to resume the process.

 

TAIL

 

/E"regex" - only display lines that match the regular expression. /E"..." has been added to the TAIL command dialog.

 

/L - number the lines.

 

/L0 - number the lines, but don't number blank lines.

 

TASKLIST

 

The /D (display modules) option will now show a » before 32-bit module names (EXE's and DLL's).

 

TEE

 

/E"regex" - only output lines that match the regular expression. /E"..." has been added to the TEE command dialog.

 

/Unicode=[UTF-16LE | UTF-8 | ASCII] - specify the input encoding. The default is the current TCC output encoding.

 

TREE

 

/32 - show a » before 32-bit module names (EXE's and DLL's). Must be used with the /F option.

 

TS

 

/E"regex" - only output lines that match the regular expression.

 

/Unicode=[UTF-16LE | UTF-8 | ASCII] - specify the input encoding. The default is the current TCC output encoding.

 

TYPE

 

/E"regex" - only display lines that match the regular expression. /E"..." has been added to the TYPE command dialog.

 

/Q - Do not display a header for each file. This is the default behavior, but an explicit /Q may be needed to override an alias that forces /V.

 

/V - Display a header for each file.

 

WATCH

 

/Qn - timeout WATCH after n seconds. The timeout is checked before each run; it will not interrupt the app while it is executing.

 

Y

 

/E"regex" - only output lines that match the regular expression.

 

/Unicode=[UTF-16LE | UTF-8 | ASCII] - specify the input encoding. The default is the current TCC output encoding.