CMDebug:

 

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

 

The installer will not display the "Thank You" page when installation is complete if a silent install was requested (requires an elevated session).

 

Many security, performance & size improvements.

 

The GUI framework library has been updated.

 

The Scintilla edit control has been updated to version 5.3.4.

 

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

 

Add 6 new themes:

 

VS2019

VS2019 Dark

VS2019 Blue

VS2022

VS2022 Dark

VS2022 Blue

 

/Wrap:n - Startup option to set the default line wrapping mode. n is a value from 0 - 3.

 

0None
1Word
2Character
3Whitespace

 

There is a new submenu in the View menu to set the line wrapping mode. Line wrapping mode is unique to each tab window, so you can have some tabs wrapping and others not.

 

Wrap

None

Word

Character

Whitespace

 

There is a new entry in the Edit menu - "Duplicate" will copy the existing line and insert it above the current line.

 

The Tools menu has a new option to invoke the new search & replace command (see SREPLACE below).

 

 

TCC-RT:

 

Many security, performance & size improvements.

 

Added Python 3.12 support.

 

The Lua interpreter has been updated to version 5.4.6.

 

There is a new piping option - |&| means "only pipe STDERR".

 

TCC now supports - (hyphen) as a shorter version of CON:.

 

 

Help:

 

The help is built with a new version (9.0.3) of Help & Manual.

 

The eWriter file viewer has been updated to version 3.4.0, and the skin for the CMDebug help has been rewritten.

 

 

New Internal Variables:

 

_IPV6 - Returns the IPv6 address of the local computer. If the computer has more than one NIC, _IPv6 returns a space-delimited list of all IPv6 addresses.

 

 

New Variable Functions:

 

@JSONNODENAMES["filename",]xpath] - Returns a space delimited list of the element names for the specified xpath.

 

@PINGR[host[,timeout[,packetsize[,ttl[,type]]]]] - Returns the address of the host responding to the PING (ICMP ECHO) request. This may or may not be the host specified in the first argument.

 

@XMLNODENAMES["filename",]xpath] - Returns a space delimited list of the element names for the specified xpath.

 

 

Updated Variable Functions:

 

@EVAL - Added support for octal numbers. Prefix them with a "0o" (zero + lower case 'o'):

 

@eval[0o10+0o11]

 

You can also specify the output as octal:

 

@eval[123+456=o]

 

@SERVICE[service,info]  - There are two new options for info:

 

6 - Return the process ID for the service

 

7 - Return the service flag. The flag can be one of the following values:

 

0 - The service is running in a process that is not a system process, or is not running.

 

1 - The service is running in a system process that must always be running

 

@WINAPI - added a new argument type "PINT64=n" for 64-bit integers.

 

 

Updated Commands:

 

IFTP

 

/O=0|1 - Specifies whether or not IFTP should overwrite downloaded files. If /O=1, an error will be thrown whenever the local file exists before a download operation.

 

/SSL=0|1 - Specifies whether TLS/SSL is enabled in IFTP. When 0 (the default) the class operates in plaintext mode. When 1, TLS/SSL is enabled.

 

SENDMAIL

 

SENDHTML has some new options:

 

/Command="command" - Send additional commands directly to the server. You can specify multiple /Command="..." arguments.

 

/Date="date" - Create a Date SMTP header and attach it to the message. (If this option is not set, the default SENDHTML behavior is to create a Date SMTP header reflecting the current date and time when the message is sent.) RFC 822 contains detailed date format specifications. An example of a valid date is "Mon, 1 May 20:15:00 EST".

 

SENDHTML

 

SENDHTML has some new options:

 

/Command="command" - Send additional commands directly to the server. You can specify multiple /Command="..." arguments.

 

/Date="date" - Create a Date SMTP header and attach it to the message. (If this option is not set, the default SENDHTML behavior is to create a Date SMTP header reflecting the current date and time when the message is sent.) RFC 822 contains detailed date format specifications. An example of a valid date is "Mon, 1 May 20:15:00 EST".

 

/Image="imagefile" - Embed an image in the HTML message. You can specify multiple /Image="..." arguments.

 

SETARRAY

 

You can now combine the /R and /F options.

 

SMPP

 

/Priority=n - This option tells the server what type of priority to assign to the message. The possible values are:

 

0 - Low

1 - Normal

2 - High

3 - Urgent

 

The effect of the message priority setting is dependent upon the Message Center manufacturer and the network on which the target recipient lies. For example, some MCs may immediately forward "urgent" messages, some networks may use the priority setting as a visual indicator of the message's urgency (e.g. blinking icons, etc.), and some networks may entirely ignore the priority setting.

 

/SMPPVersion=n - The SMPP version to be used throughout the connection.

 

0 - 5.0

1 - 3.4

2 - 3.3

 

The default value is version 3.4 as it is the most widely used version. If version 5.0 is supported it is recommended.

 

/SSLMode=n - TheDetermines how SMPP starts SSL negotiation

 

0 - Automatic

1 - Implicit. The SSL negotiation will start immediately after the connection is established.

2 - Explicit. SMPP wil first connect in plaintext, and then explicitly start SSL negoatiation through a protocol command such as STARTTLS.

3 - None. No SSL negotiation, no SSL security. All communication will be in plaintext mode.

 

The default value is 3.

 

START

 

/Env="filename" - Creates a new environment for the process using the contents of filename. The format of filename is:

 

var1=value1

var2=value2

...

 

Because some Windows API calls will fail if there is no "SystemRoot" variable in the environment, TCC will add the existing SystemRoot value to the new environment if wasn't specified in filename.

 

/Idle=n - Waits until the started process to finish processing its initial input and is waiting for user input, or until the timeout period has elapsed. n specifies the timeout period in milliseconds.

 

TASKEND

 

TASKEND now supports terminating processes on remote systems. The syntax is:

 

TASKEND /Remote="remotename" /User="username" /Password="password" PID

 

You must have have debug privileges on the remote system.

 

WHICH

 

If the command is a symbolic link and you used the /A option, WHICH will display the symbolic link for the executable.

 

 

New Commands:

 

DIRENV

 

Configures the environment on a per-directory basis.

 

The syntax is:

 

DIRENV [ON | OFF]

 

When DIRENV is on, TCC will look for a file called ".envtc" when it changes directories. The format of .envtc is:

 

var1=value1

var2=value2

...

 

When TCC enters a directory, it will look in .envtc for environment variables to set while in that directory. When TCC leaves a directory, it will unset the variables in .envtc.

 

EXPR

 

A greatly enhanced version of the Linux expression evaluator. The syntax is:

 

EXPR expression

 

Expression can be:

 

string : regexReturns position of regular expression regex in string
match string regexSame as string : regex
substr string pos lenSubstring of string, pos starts at 1
index string charsIndex in string (first character is 1) where anything in chars is found, or 0 if nothing matches
length stringLength of string

 

arg1 [operator] arg2...This can be any arithmetic expression supported by @EVAL, or any conditional expression supported by IF  /IFF.

 

If you have special characters (i.e., < > & |) on the line you must either enclose the entire expression in double quotes (EXPR will remove them before evaluating the expression) or escape them.

 

The regular expression match is always anchored (there is an implied leading ^). If the regular expression contains (), and it matches at least part of stringEXPR returns that part of string; if there is no match, EXPR results in 0. If the regular expression doesn't contain (..), the result is the number of characters matched. MATCH performs the same operation as the colon operator.

 

Comparisons are arithmetic if both ARGs are numbers, otherwise the comparisons are string-based.        

 

WAITFOR

 

Waits for an app to exit, or optionally for the app to finish processing its initial input and wait for user input.

 

The syntax is:

 

WAITFOR [/Exit=n /Idle=n] [PID | title | exename]

 

/Exit - Wait for a maximum of n milliseconds for the process to exit. n will default to 10000ms (10 seconds).

 

/Idle - Wait for a maximum of n milliseconds for the process to enter the idle state. n will default to 10000ms (10 seconds).

 

PID - The process ID. This can be either hex or decimal; if it is hex you must prefix it with a "0x".

 

title - The Window title. The title must be enclosed in double quotes; wildcards are supported.

 

exename - The name of the executable file.

 

WEBSOCKET

 

Establish a WebSocket connection to a server and send a string. The syntax is:

 

WEBSOCKET [/V /Origin=server /User=user /Password=password]] "ws:servername" string

 

/V(erbose) - Display status messages

 

/Origin - If specified, WEBSOCKET will include an Origin HTTP header in the connection request with the value provided. Servers may use this value to validate requests. Servers may reject requests depending on the value provided. A typical value that would be set is of the form "http://example.com".

 

/User - The user name if authentication is used

 

/Password - The password if authentication is used

 

servername - The WebSocket server to connect to. For example: "ws://echo.websocket.org"

 

string - The text to send to the server

 

The options are position dependent; they can only appear at the beginning of the command line in the order specified above.