
More documentation is planned for a subsequent version.  Meanwhile, these documentation links may be helpful:

http://www.ucalc.com/documentation.html
http://www.ucalc.com/docs/Patterns.htm
http://www.ucalc.com/docs/StringLib.htm
http://www.ucalc.com/fmphlp

Details for batch mode are found in BatchHelp.Txt or by typing T.Exe /? at the command line.
Please also see the \Examples directory that comes with uCalc Transform.

What's new in v4.0
 {@xml} can be included in patterns.  It's a shortcut for {@Define:: Include: XML.uc}
 {@nl:skip} can be in a pattern.  It skips the new line character (treats it like whitespace).
 Fixed: The /SD option works in ucFind.Bat
 Fixed: Line number for matches with ucFind.Bat is correct (starts with 1 instead of 0)
Parsing related improvements:
 - [[...]] can be used instead of [...] to make optional syntax parameters be considered after instead of before
   This can be useful in XML patterns
 - Fix: SyntaxArg can have ~~ in it without problem
 - Fix: The parser is more stable; certain scenarios that would a crash no longer do

What's new in v2.99
Various bug fixes:
Fixed: {@End} gets tallied properly
Fixed: {@If ...} can now be immediately preceded by a pattern variable
Fixed: Results are no longer limited to 1 MB when the /SD option is used with ucFind.Bat
Fixed: Checkmark On/Off option from the right-click menu now works (previously just had the word "test")
Fixed: Entering a non-numeric value in the Pass box no longer confuses the program
Fixed: Moving from one Pass or Comment edit box to another no longer causes strange box placement
Fixed: Modifying a Pass or Comment marks the transform as changed (the same way editing the search box does)
Fixed: Inserting a comment with right-click no longer messes up the highlighting sequence

What's new in v2.98

Despite the small version number increment (designed to keep in step with other product releases the same day), this is a very major update.  As I (Daniel Corbier) rely very heavily on uCalc Transform for various tasks, I have tweaked things up to make it much easier for me to use, and more powerful as well.  A couple of enhancements might be noticed more quickly, while many others are more subtle, but just as beneficial.  Here a few enhancements worth noting:

* Multiple Transform tabs (as well as Search and Filter tabs) are supported.
* You can right-click multiple transform files to be loaded simultaneously or use wildcards or multiple files at the command line.
* Multiple criteria can be selected by holding down Ctrl allowing you to modify or delete selected items by group.
* Various context-sensitive right-click menus simplify certain tasks.
* Comments and passes are easier to insert and modify.
* The Cancel button is more immediately responsive.
* The interface is faster and smoother; this is noticeable especially with large transform files.
* FileWrite() lets you programmatically write to a file.
* The IsBatch variable indicates whether the transformation is happening at the command line or interactively.
* /I (for Interactive) specifies that the interactive form should be loaded.
* Command line parameters can be negated with a - (minus sign).  For instance "-S" prevents stats from being saved.
* /VAR: lets you send your own variables to the transform from the command line.
* NewFilter, NewFind, NewTransform can open new tabs programmatically
* There are various fixes

What's new in v.296
- New: Command prompt operations can work with multiple groups of input or output files
  Ex: uCalcTransform "Test*.uc|Modify*.uc" "*.bas|*.cpp|*.txt"
- New: /In: /Out: For explicitly specifying input or output files in batch operations
- New: Support for limited command prompt redirection with T.Exe
- New: InputBox supports more args
- New: Get("Path") and Set("Path", Path$) accessible from {@Eval}
- Fix: Some examples which no longer worked were fixed
- Fix: The use of uCalc constants in text no longer interferes with search
- Fix: Search/Replace boxes were made slightly taller so that underscores (_) are visible
- Fix: /TF: option works more correctly
- Fix: /SD: No longer crashes when there are files with no matches
- Fix: Range() with {@Eval} and {@Evaluate} can access previously defined variables
- Fix: The Recent Files list persists in subsequent sessions; you can also configure the file list max
- Fix: Better handling of end of line with different combinations of CR and LF


What's new in v2.95
NEW: Command line transforms can contain multiple /REPLACE or /FILTER patterns
FIX: Certain advanced features that were broken in v2.8 are restored.

What's new in v2.8

NEW: Filter Tally property
NEW: The following command prompt parameters:
     /Replace: ... /With: ...
     /Filter:  ... /With: ...
     /SD - For including subdirectories in multi-file operations
NEW: A transform can be saved with the name of an input file that is opened whenever the transform is opened
Fix: Memory corruption issue involving String Lib routines

uCalc patterns:
---------------
(Accessible by all uCalc Transform)

NEW: {@If: ...} - Conditional pattern match
NEW: {@Skip: ...} - can be used in same pattern; No longer requires separate def
NEW: {Self} does not automatically set the PassOnce property to True
NEW: {@Execute: ... } which is similar to {@Exec: ...} but faster


uCalc String Lib
----------------
(Accessible by all uCalc Transform)
NEW: ucReplace() can now perform multiple search/replace operations with the same pattern
Fix: Memory corruption problem when used with uCalc Transform


uCalc Fast Math Parser
----------------------
(Accessible by all uCalc Transform)
NEW: The "Not" operator
Fix: Ambiguity between ++ and -- increment/decrement ops and successive + and - ops
Fix: Include files for VC++ w/ MFC and Delphi

Note: The 64-bit provisional DLL did not make it in this round.  Please use FMP 3.8's DLL for until next time if you need 64 bit.


uCalc Console Calculator
------------------------
NEW: Not operator


uCalc Transform
---------------



What's new in v2.5
------------------

NEW: {@Evaluate}.  This is similar to {@Eval} but significantly faster.  With {@Evaluate} the
     sub-pattern is parsed just once, and only evaluated thereafter with each match.  {@Eval},
     which always parses sub-expressions before evaluating them for each occurrence is still
     useful in situations where a sub-pattern cannot be parsed ahead of time (such as when
     the sub-pattern to be evaluated is constructed dynamically with each match).

NEW: {arg.Len}, {arg.Loc}, {arg.Index}, {arg.Tally}, where {arg} is a pattern variable,
     {@Length}, {@Location}, {@ArgCount}, {@Tally}, {@TallyAll}, {@DocLength}, {@Document}.
     These provide direct fast access to properties related to ongoing pattern matches.

IMPROVED: Parsing is faster and more memory efficient.

IMPROVED: Transform files that have lines that end with a LF instead of CRLF can also be loaded.

IMPROVED: When a transform file is opened, highlighting is turned on or off based on the settings
     saved for the file.  Likewise, either the Transform button or the Filter button turns green
     when a transform file is opened, indicating the setting saved with the file.  This makes it
     easier for a user to know whether to click on the Transform button or the Filter button.

IMPROVED: A few additional examples were added (spell checkers).

IMPROVED: Patterns are no longer limited to 32 arguments.  A pattern can now have unlimited arguments.

IMPROVED: More versatile quote handling.  {q} (lower case) matches quotes in the Find pattern with
     quotes in the Replace pattern, whereas {Q} (upper case) represents a special quote character
     that can enclose text containing standard quote characters.

IMPROVED: Memory leaks were significantly reduced (noticeable when transforming tens of thousands of
     files per session).

IMPROVED: uCalc Transform is better integrated with other uCalc tools (such as uCalc Fast Math Parser
     and uCalc String Library).

FIXED: Bug related to {@Start} used on an empty document was fixed.

FIXED: Memory corruption issues were resolved.

FIXED: More consistent parsing logic (for whitespace management, the % directive for immediately
     expanding argument matches prior to expanding the whole match, etc.).

CHANGED: The definition grid was removed.  Definitions can be inserted directly into pattern boxes
     more flexibly.

CHANGED: Additional row/column info was removed from the editor tool tip.

CHANGED: If a document contains no text at all, CrLf is inserted before parsing.


What's new in v2.0
------------------
- Many practical examples were added
- Transforms can be pasted directly into uCalc without first having to save to a file and loading
- Transforms can be merged into the current one (either from a file or the clipboard)
- uCalc Transform can now access routines associated with Table, Stack, and SortedList data types
- The sort order for filtering can be based on a formula
- Significant speed improvements in certain areas when parsing large files
- There's a status property that shows elapsed time for the last operation
- A progress bar shows how far along the transformation is, including which pass it is currently in; there's also a stop button.  This is useful for complex transforms on very large files.  It's included in both interactive mode, and batch mode.
- Significant parser-related enhancements
- Various other general enhancements and bug fixes


What's new in v1.8
-----------------
- uCalc Transform is much more stable; a memory corruption issue that caused crashes was resolved
- uCalc String Library routines can be called from uCalc Transform; see Examples\Real\*.uc
- There is no longer a file size limit of 32Mb; (note: parsing large files is more effective in batch mode)
- T.EXE vs T.Bat offers more flexibility
- Various small bugs were corrected
- There are many small interface improvements that make this version much more usable for real tasks

Below is a rundown of some functions/variables/constants you can use, which are specific to uCalc Transform.  By the way, this very list was composed by using a transform to extract the list of functions/variables/constants from the source  code.  After that, descriptions where manually added.  Great time-saver.  If you're curious, the transform was simply:  {Q}[Native:]{Token:1}[{etc}]{Q}      And {Token} is the item of interest that was filtered out.  Basically it searched for an item within quotes ({Q} and {Q}) which optionally might start with the keyword "Native:" (for certain function definitions), followed by one token, and optionally followed by other thing (represented by {etc})

InputFile - String variable containing name of the input file

SelectedFile - Synonymous with InputFile

TransformFile - String variable containing name of current transform

OutputFile - String variable containing name of current output file

SEND - String variable containing name batch mode data from the /SEND parameter

StatsComment - String variable through which you can store text to send to stats

x - Numeric variable you can use without declaring

Count - Numeric variable you can use without declaring

text - Text variable you can use without declaring

Highlight - Use this constant as the 3rd argument of Transform() to indicate that highlighting should take place

AppName - Name and version of uCalc Transform application

Path([Option [, FileName])
or Path(FileName [, Option]) - Returns the path.  FileName is a string, and Option is numeric.  If no arguments are passed, the path of the current input file is returned.  Here are the possible values for Option:
  -1 - Returns a temporary path
   0 - Returns the path for uCalc Transform
   1 - Returns directory name of the selected file
   2 - Returns file name of the selected file
   3 - Returns full path of selected file
   4 - Returns only the file extension
   5 - Returns only the file name, without the extension
   6 - Returns a random file name

Ext([FileName]) - Shorcut for Path(4) or Path(FileName, 4)

ShortName([FileName]) - Shortcut for Path(2) or Path(FileName, 2)

FileText([FileName]) - Returns the content of a text file as a string

UnpackFile(ZipFile, TextFile) - Extracts a zip file and returns the content of the selected file

UnpackFiles(ZipFile, FileList) - Extracts a zip file and returns the concatentated contents of multiple files

TimeStamp([Format]) - Returns the current time stamp

Transform(Text, FileHandle [, Highlight]) - Performs a transformation Text, using a file handle returned by Transformation().  By default highlighting when calling one transform from another is off.  The Highlight constant can be passed as the 3rd argument to turn it on.

Transformation - Processes a transformation file and assigns a file handle for use with Transformation.

Set(Item [[, Boolean] [, StringValue]]]) - Item cna be any number of properties that can configure uCalc Transform.  Items that you can perform with the click of a mouse or by entering text in the application can be automated with the Set() command.  Some items may return data as a string.

Do(Item [, StringValue]) - Synonymous with Set, except it cannot set a True/False value as the second argument.