CMDebug 26.0:

 

Windows 7 support has been dropped from all products (Take Command, TCC, CMDebug, and TCC-RT).

 

Except for TCC-RT, 32-bit Windows support is deprecated in v26. The v26 CMDebug installer is  64-bit only. 32-bit installers will be available on request for multisystem licenses.

 

The CMDebug and TCC-RT installers are built with a new version of Advanced Installer.

 

The GUI framework library has been updated.

 

The IDE will now scale properly when moving between monitors with different DPI values.

 

The Scintilla edit control has been updated to version 4.3.2.

 

Many performance & size improvements.

 

Expanded the help for the IDE / Debugger.

 

The IDE will monitor the filesystem for any changes to the file(s) being edited. If another application modifies a file, the IDE will display a message notifying you of the change and asking if you want to reload the updated file.

 

Changed all of the IDE icons to a modern "Fluent" design.

 

Most of the IDE menu entries have icons, giving you more options to customize the toolbar.

 

Improved the font display slightly.

 

There is a new startup option following the file name to goto a line number:

 

/gotoline:nn

 

For example:

 

bdebugger mytest.cmd /gotoline:24 [batch file arguments...]

 

There is a new option "Syntax Colors" in the Options menu that allows you to select the colors used in the syntax colorization from a 16 million color palette. When you click on one of the foreground or background color buttons, the IDE will display a color picker dialog to let you choose colors.

 

The Error Lookup dialog (Debug / Error Lookup) now supports NTSTATUS error codes.

 

The IDE has additional tabs for Local Aliases, Global Aliases, Local Functions, and Global Functions. They will only be displayed if the appropriate local / global list exists.

 

There is a new option in the File menu to reload the file in the current tab from the disk.

 

There is a new option in the File menu to delete the file in the current tab to the recycle bin.

 

There are two new options in the File menu to save & load sessions. You create a session with the "Save Session" menu option, which creates a file with the names of the files in the tab windows. "Load Session" will open the files in the *.session file you specify.

 

There is a new option in the Options menu to set the caret color for the tab edit windows.

 

There is a new option in the Options menu to change the working directory for the IDE.

 

There is a new submenu in the Options menu to select the window tab location (top, bottom, left, or right).

 

The context menu on the tab labels has a new entry "Copy Full Path" that copies the full pathname of the file in that tab to the clipboard.

 

The context menu on the tab labels has a new entry "Close All" that closes all of the tab windows.

 

The "Tabs..." menu entry has been moved from Options to Edit.

 

The IDE dialogs have been tweaked to be cleaner and more readable.

 

The tooltip for the transparency slider (lower right corner) now displays the current transparency setting (20 - 255; higher values are more opaque).

 

The Batch Arguments combo box on the IDE toolbar now displays hint text if you don't supply arguments at startup.

 

Dragging text in the a edit window will now automatically scroll the window when you reach the edges.

 

The Unicode value on the statusbar for the character at the cursor location now supports UTF8 multibyte characters.

 

 

TCC-RT:

 

The language dll's are substantially smaller and load faster.

 

Many performance & size improvements.

 

The embedded Lua interpreter has been updated to version 5.4.

 

Python support has been rebuilt with the new 3.8.2 release.

 

Added support for Windows Server 2019.

 

Most of the remaining string size limits have been removed (except for those where the Windows APIs have limits).

 

 

Help:

 

The help is built with a new version of Help & Manual 8.

 

 

New TCC-RT Internal Variables:

 

_osbuildex - Returns the Windows build number + the sub-build number (for example, "19041.84").

 

 

New TCC-RT Variable Functions:

 

@DATEFMT - Formats a date/time in a custom format. The syntax is:

 

@DATEFMT[date,format]

 

date - The date to format (in yyyy-mm-dd hh:mm:ss format). If date is *, @DATEFMT defaults to the current date/time. Valid dates are January 1, 1970 (1970-1-1) to December 31, 3000 (3000-12-31). The time must be in 24-hour format.

 

format - The custom format to use. (Note that the %'s will normally need to be doubled or escaped to prevent TCC from expanding them before @DATEFMT sees them.) The formatting options are:

 

Code

Replacement string

%a

Abbreviated weekday name in the locale

%A

Full weekday name in the locale

%b

Abbreviated month name in the locale

%B

Full month name in the locale

%c

Date and time representation in the locale

%C

The year divided by 100 and truncated to an integer, as a decimal number (00−99)

%d

Day of month as a decimal number (01 - 31)

%D

Equivalent to %m/%d/%y

%e

Day of month as a decimal number (1 - 31), where single digits are preceded by a space

%F

Equivalent to %Y-%m-%d

%g

The last 2 digits of the ISO 8601 week-based year (00 - 99)

%G

The ISO 8601 week-based year as a decimal number

%h

Abbreviated month name (equivalent to %b)

%H

Hour in 24-hour format (00 - 23)

%I

Hour in 12-hour format (01 - 12)

%j

Day of the year as a decimal number (001 - 366)

%m

Month as a decimal number (01 - 12)

%M

Minute as a decimal number (00 - 59)

%n

A newline character (\n)

%p

The locale's A.M./P.M. indicator for 12-hour clock

%r

The locale's 12-hour clock time

%R

Equivalent to %H:%M

%S

Second as a decimal number (00 - 59)

%t

A horizontal tab character (\t)

%T

Equivalent to %H:%M:%S, the ISO 8601 time format

%u

ISO 8601 weekday as a decimal number (1 - 7; Monday is 1)

%U

Week number of the year as a decimal number (00 - 53), where the first Sunday is the first day of week 1

%V

ISO 8601 week number as a decimal number (00 - 53)

%w

Weekday as a decimal number (0 - 6; Sunday is 0)

%W

Week number of the year as a decimal number (00 - 53), where the first Monday is the first day of week 1

%x

Date representation for the locale

%X

Time representation for the locale

%y

Year without century, as decimal number (00 - 99)

%Y

Year with century, as decimal number

%z

The offset from UTC in ISO 8601 format; no characters if time zone is unknown

%Z

Either the locale's time-zone name or time zone abbreviation, depending on registry settings; no characters if time zone is unknown

%%

Percent sign

 

Characters that do not begin with a % are displayed unchanged.

 

The # flag may prefix any formatting code. In that case, the meaning of the format code is changed as follows:

 

Format code

Meaning

%#a, %#A, %#b, %#B, %#g, %#G, %#h, %#n, %#p, %#t, %#u, %#w, %#X, %#z, %#Z, %#%

# flag is ignored.

%#c

Long date and time representation, appropriate for the locale. For example: "Wednesday, March 25, 2020, 12:41:29".

%#x

Long date representation, appropriate to the locale. For example: "Wednesday, March 25, 2020".

%#d, %#D, %#e, %#F, %#H, %#I, %#j, %#m, %#M, %#r, %#R, %#S, %#T, %#U, %#V, %#W, %#y, %#Y

Remove leading zeros or spaces (if any).

 

The ISO 8601 week and week-based year produced by %V, %g, and %G, uses a week that begins on Monday, where week 1 is the week that contains January 4th, which is the first week that includes at least four days of the year. If the first Monday of the year is the 2nd, 3rd, or 4th, the preceding days are part of the last week of the preceding year. For those days, %V is replaced by 53, and both %g and %G are replaced by the digits of the preceding year.

 

@FILETYPE - returns the encoding type of the file. The syntax is:

 

@FILETYPE[filename]

 

You must enable UTF8 input for TCC to recognize UTF8 files; see OPTION / Setup. The possible return values are:

 

ASCII

UTF8

UTF16

 

 

Updated TCC-RT Internal Variables:

 

_DOS - Added support for Windows Server 2019.

 

 

Updated TCC-RT Variable Functions:

 

@CRC32 - if the first argument is "sa", treat the second argument as an ASCII string. If the first argument is "s8", treat the argument as a UTF8 string.

 

@EVAL - has an optional + argument at the end of the precision string (i.e., %@eval[nnn=x.y+] to specify that positive reaults should be prefixed by a +.

 

@HISTORY - has an optional third argument specifying whether you want the local history list or the global history list. (If you want to specify the history list to use, but not the (optional second argument) word to return, set word to -1.)

 

@HISTORY[entry[, word, [L | G]]]

 

@MD5- if the first argument is "sa", treat the second argument as an ASCII string. If the first argument is "s8", treat the argument as a UTF8 string.

 

@SHA1- if the first argument is "sa", treat the second argument as an ASCII string. If the first argument is "s8", treat the argument as a UTF8 string.

 

@SHA256- if the first argument is "sa", treat the second argument as an ASCII string. If the first argument is "s8", treat the argument as a UTF8 string.

 

@SHA384- if the first argument is "sa", treat the second argument as an ASCII string. If the first argument is "s8", treat the argument as a UTF8 string.

 

@SHA512- if the first argument is "sa", treat the second argument as an ASCII string. If the first argument is "s8", treat the argument as a UTF8 string.

 

 

Updated TCC-RT Commands:

 

ALIAS

 

ALIAS now supports both local and global lists simultaneously. If you have both local and global lists defined, when displaying, creating or deleting aliases, you can specify which list you want ALIAS to use.

 

/GL - use the global alias list

 

/LL - use the local alias list

 

If you have both local and global lists defined and do not specify /GL, ALIAS will default to using the local list.

 

TCC will first look for aliases in the local list; if not found TCC will search the global list.

 

If you use the /G option to convert a local alias list to a global alias list, ALIAS will not do the conversion if a global alias list already exists (for example, in another TCC session or in SHRALIAS).

 

COLOR

 

Added new options for setting the foreground and background color in a TCC console window (not a TCMD tab window) to 16 million or 256 colors. You must be running Windows 10 and have ANSI enabled.

 

/FG r,g,b - sets the foreground color to the 16 million color RGB value specified. Valid ranges for r, g, and b are 0-255.

 

/BG r,g,b - sets the background color to the 16 million color RGB value specified. Valid ranges for r, g, and b are 0-255.

 

/FG color - sets the foreground color to the 256 color (xterm) value specified. Valid range for color is 0 - 255.

 

/BG color - sets the background color to the 256 color (xterm) value specified. Valid range for color is 0 - 255.

 

/P [color] - displays a color picker dialog to select a color. Must be used with /FG or /BG, and cannot be combined with /F.

 

COPY

 

COPY /S will now display the number of directories copied (if any).

 

/CDA - copy the attributes from each of the source subdirectories to the target subdirectories.

 

DATE

 

DATE has a new option "datefmt" that displays the current date/time in a custom format. The formatting characters are the same as used by the @DATEFMT function (see above). The DATE syntax is:

 

DATE [/Fn /T /U "format"] [mm-dd-yy]] [AM | PM]

 

DEL

 

DEL /S /X will now display the number of directories removed (if any).

 

DELAY

 

DELAY hh:mm:ss or DELAY mm:ss will wait for the specified amount of time.

 

DIR

 

/CD:"colordir" - define a customized directory colorization string to use instead of the COLORDIR environment variable or the ColorDir option in TCMD.INI.

 

DO

 

DO will delete any temporary files created by using CLIP: in a DO statement.

 

ENDLOCAL

 

If you only have global aliases defined, ENDLOCAL will restore the global list saved by SETLOCAL (as in previous versions). If you have both local aliases and global aliases defined, ENDLOCAL will only restore the local list that was saved by SETLOCAL. See also SETLOCAL.

 

ESET

 

/LL (or /LL) - use the global alias or function list. ESET will default to using the local list if it exists; if it doesn't ESET will look for a global list.

 

/G (or /GL) - use the local alias or function list.

 

EXCEPT

 

/NM - if no match is found for the argument(s) in the exception list, EXCEPT will not execute the command.

 

FUNCTION

 

FUNCTION now supports both local and global lists simultaneously. If you have both local and global lists defined, when displaying, creating or deleting functions, you can specify which list you want FUNCTION to use.

 

/GL - use the global function list

 

/LL - use the local function list

 

If you have both local and global lists defined and do not specify /GL, FUNCTION will default to using the local list.

 

TCC will first look for a user-defined function in the local list; if not found TCC will search the global list.

 

If you use the /G option to convert a local function list to a global function list, FUNCTION will not do the conversion if a global function list already exists (for example, in another TCC session or in SHRALIAS).

 

LIST

 

LIST now supports paging backwards through piped input.

 

MEMORY

 

MEMORY now shows the local and global alias and function sizes.

 

MOVE

 

MOVE /S will now display the number of directories moved (if any).

 

/MDA - copy the attributes from each of the source subdirectories to the target subdirectories. (Only valid if moving to another drive; otherwise MOVE does a rename of the top-level directory and all of the subdirectory attributes are retained.)

 

MSGBOX

 

If TCC is running in a Take Command tab window, the message box will be centered on the tab window.

 

/PC - center the message box on the desktop.

 

/X - the message box cannot be moved.

 

PDIR

 

/CD:"colordir" - define a customized directory colorization string to use instead of the COLORDIR environment variable or the ColorDir option in TCMD.INI.

 

QUERYBOX

 

Removed the maximum length limit (previously 255 characters) for the input string.

 

Removed the maximum length limit (previously 127 characters) for the /CUE string.

 

REGDIR

 

/Nb - Don't display the contents of REG_BINARY values.

 

/TS - include seconds in the last write time display.

 

REGDIR will now display all the strings in a REG_MULTI_SZ.

 

REN

 

REN /S will now display the number of directories renamed.

 

SETLOCAL

 

If you only have global aliases defined, SETLOCAL will behave as in previous versions and temporarily copy the global list to a local list, and restore the global list on an ENDLOCAL. If you have both local aliases and global aliases defined, SETLOCAL will only save the local list, which will be restored by ENDLOCAL.

 

SHORTCUT

 

SHORTCUT will not try to fully qualify the command, startup directory, or link file name if they contain %'s. This allows you to embed variables in those arguments that will be expanded by Windows.

 

TEE

 

/F"datefmt" - prefix each line with a timestamp using a custom format. The formatting characters are the same as used by the @DATEFMT function (see above).

 

TIME

 

TIME has a new option "datefmt" that displays the current date/time in a custom format. The formatting characters are the same as used by the @DATEFMT function (see above). The TIME syntax is:

 

TIME [/S [server] /T /U "format"] [hh[:mm:ss]]] [AM | PM]

 

TPIPE

 

Updated the TextPipe Engine version from 9.9.4 to 11.6.

 

The TextPipeEngine dll is now 64-bit (for the x64 version of TCC). (The initial load is a bit slower, but everything runs faster.)

 

Updated Unicode compose/decompose functions for NFC, NFD, NFKC, NFKD.

 

Updated PDF libraries.

 

Updated code page converted library.

 

Upgraded regular expression library.

 

Unicode support upgraded to Unicode 12.1.

 

New option for Add Line Numbers –(to reset at the start of a new file).

 

The Line Number filter has a new option:

 

/line=StartNumber,Increment,SkipBlank,DontNumberBlank,NumberFormat[,DontReset[,ResetNewFile]]

 

ResetNewFile - if 1, reset the count at the start of a new file. The default is 0.

 

Added a new selection filter:

 

/selection2=type, columnSpec, moveTo, processIndividually, excludeDelimiter, excludeQuotes, delimiter, customDelimiter, hasHeader

Type - the type of filter to add

0 Delete column

1 Restrict lines

2 Restrict columns

3 Restrict to bytes

4 Restrict to delimited fields (CSV, Tab, Pipe etc)

5 - unused

6 Remove lines

7 Remove delimited fields (CSV, Tab, Pipe etc)

9 Move columns

10 Move delimited fields (CSV, Tab, Pipe etc)

12 Copy columns

13 Copy delimited fields (CSV, Tab, Pipe etc)

17 Remove Byte Range

18 Extract fields

columnSpec - the double-quoted list of items to remove e.g. "1..10, 16, 20"

moveTo : integer - where to move or copy the columns or fields to. Default 1.

processIndividually - whether or not to apply sub filters to each CSV or Tab field individually, or to the fields as one string value. Default false.

excludeDelimiter - whether or not to include the comma or Tab field delimiter when passing the field to the sub filter. Default true.

excludeQuotes - whether or not to include the CSV quotes that may surround the field when passing the field to the sub filter. Default true.

delimiter - (optional) the index of the standard delimiter to use, or 6 for custom, default 0 for CSV

customDelimiter - (optional) the double quoted custom delimiter to use, default blank

hasHeader - (optional) true if the file's first row is a header row, default false.

 

The End of Line filter has two new options:

 

/eol=Input,Output,Length,LFString,Remove

 

LFString - the new line feed string on output when option 4 is chosen for Input

Remove - whether to remove bad EOLs (default 1)

 

Column specifications for Delimited field delete, extract and restrict can now specify multiple columns in one filter e.g. 6, 9, 61..63.

 

Added JSON output format to database filter.

 

/database=Mode,...

 

Mode = 4 - JSON

 

Added Convert Tab to JSON and Convert JSON to Tab filters.

 

/simple=type

 

type = 86 - Convert JSON to Tab

type = 87 - Convert Tab to JSON

 

Added Convert Word documents to RTF filter.

 

/Simple=type

 

type = 88 - Convert Word documents to RTF

 

New Sort by UTF-8 (case sensitive and insensitive).

 

/sort=Type,...

 

Type = 9 - UTF8 sort (case insensitive)

Type = 10 - UTF8 sort (case sensitive)

 

/InputClipboardUnicode=[0|1] - In clipboard mode, controls whether the input is handled as ANSI or Unicode. The default is 0 (ANSI).

 

Added options to the /Split= filter:

 

/split=type,SplitSize,SplitChar,SplitCharPos,SplitCharCount,SplitLines,SplitFilename[,FirstFileNumber[,PreventOverload]]

 

FirstFileNumber - (optional) the number of the first file, default 0

PreventOverload - (optional) true to prevent more than 10,000 files in one folder, default false

 

Defaults to UTF8 encoding instead of ANSI when loading/saving files.

 

Enhanced perl regex filter to allow Unicode characters to delimit Whole Words.

 

Updated case changing filters to work with UTF-8 encoded text.

 

Changed Convert Word/Excel/PDF to text filters to output UTF-8 text.

 

Remove BOM filter now detects if it has changed the file or not, and handles UTF-16 LE properly.

 

Search/replace list filters now support Unicode.

 

Improved Line Numbering filter to correctly tell the difference between start of file and start of restriction.

 

Improved error handling for specification filters that do not support multiple ranges.

 

Improved error handling for script filters and loading settings and Languages.

 

Field specification filters now support field names with embedded hyphens (-), and field names with spaces can be used by surrounding them with quotes.

 

A warning is now output when a field specification does not match the field names found in a file.

 

Improved the speed of "exact match" search/replace.

 

Text to Word List now recognises English possessives (or other abbreviations) ending with '’s.

 

Updated Remove Blanks from Start of Line/End of Line to handle UTF-8 e3 80 80 IDEOGRAPHIC SPACE (common in Chinese text).

 

Split file filters will now remove the last file if it has zero bytes.

 

Split filter now processes macros after the file numbering has taken place.

 

Database filters now change the output extension to match the format.

 

The "Extract URL" filter now copes with any scheme, from the previously supported mailto:, http:, https:, nntp:, gopher:, ftp:, ftps:, and newer ones such as call: and skype:

 

Enhanced log output to provide information for every filter type (very useful for filter debugging).

 

TPIPE now checks for 'zombie' filters that follow a T-filters' secondary output filter –(these filters do nothing).

 

New filter to convert Word documents to RTF.

 

HTML entities are now case sensitive.

 

The log now includes filter icons for easier identification.

 

Conversion from CSV to Tab now eliminates unnecessary quotes.

 

OpenOffice support for ODT, ODS, and ODP.

 

TREE

 

Added support for colorizing the output of TREE. The colorizing options and format are the same as DIR, and can include:

 

Extension

File attribute

File size

File date/time

Executable type

Ranges

 

VER

 

/C - displays the version information in the same format as CMD (i.e., "Microsoft Windows [Version 10.0.19559.1000]").

 

Y

 

There are two new options for timestamping the STDIN lines that Y writes to STDOUT:

 

/D - Prefix each line with the current date (in yyyy-mm-dd format).

 

/F"format" - a custom time/date format string. See @DATEFMT (above) for details on the format arguments.

 

/T - Prefix each line with the current time (in hh:mm:ss.ms format).

 

WMIQUERY

 

/Q - prevents the display of the property name when displaying properties.

 

 

New Commands:

 

CHRONIC

 

CHRONIC runs a command and hides its STDOUT and STDERR output unless the command fails. If the command succeeds, no output is displayed. The syntax is:

 

CHRONIC [/R] command ...

 

/R - Display the output if the command writes to STDERR. If /R is not specified, CHRONIC will only display the output if the command returns a non-zero exit code.

 

CHRONIC will display the STDOUT and STDERR output separately. For example:

 

c:\> CHRONIC testcommand

Exit code: 2

STDOUT:

stdout output here ...

STDERR:

stderr output here ...

 

PEE

 

PEE is similar to TEE, but instead of redirecting STDOUT to multiple files, it redirects it to multiple secondary commands via pipes. The syntax is:

 

PEE /D /F"format" /R /T app ...

 

/D - prefix each line with the current date

 

/F"format" - a custom time/date format string. See @DATEFMT (above) for details on the format arguments.

 

/R - redirect STDERR too

 

/T - prefix each line with the current time

 

SPONGE

 

SPONGE reads standard input and writes it to the specified file. Unlike output redirection, SPONGE reads all its input before opening the output file. This allows constructing pipes that read from and write to the same file. SPONGE reads standard input into a memory buffer, so piping extremely large amounts of data (i.e., multiple gigabyte) is not recommended.

 

The syntax is:

 

SPONGE [/A] outputfilename

 

/A - append output to outputfilename. The default is to overwrite outputfilename.

 

TS

 

TS reads lines from STDIN, prefixes a date/time stamp, and writes the line to STDOUT. TS is intended to be used in pipes, when you need to know when each line was received. The syntax is:

 

TS [/D /T "format"]

 

/D - Prefix each line with the current date (in yyyy-mm-dd format).

 

/T - Prefix each line with the current time (in hh:mm:ss.ms format).

 

"..." - The optional format string. See @DATEFMT (above) for details on the format arguments.

 

If you don't specify any options, TS defaults to /D /T.