CONTENTS | INDEX | PREV | NEXT

The text of the link just activated indicates in which version a particular
feature was first introduced.

Release 6.3 was the last release to be issued with complete documentation,
and all changes in subsequent releases were only detailed in the release-
note. All those changes have these introduction-markers on them in the
new documentation. This makes it relatively straightforward to determine
whether the version you're working with has a feature or not.

For an overview of bugfixes introduced in each release, see here.

Releases with significant updates (other than bug-fixes, start-up changes
and documentation issues) were:

7.1
7.0
6.3i
6.3f
6.3e
6.3c
6.3b

New in release 7.1 * The M-command called with argument 0 now reacts identically to a call with a negative argument (i.e.: do the macro once under the assumption that @M is going to be in there). Older programs that use 0 as a valid iteration-counter will now malfunction! This was unavoidable, as the implementation so far made it impossible to trap that argument 0 was passed into a macro. * The Ctrl_X-command is extended with reaction to arguments 62 and 63. With value 63, all files opened for read are treated as what under Windows is known as 'binary' (i.e. what Unix always does). With value 62, all files opened for read are treated as 'text'. This means that cariage-return/line-feed combinations are stripped to just line-feed when reading. Character 26 (or CTRL_Z) acts as end-of-file marker. This functionality exists on the Windows platform only. * The Ctrl_X-command is extended with reaction to arguments 64 and 65. With value 65, all files opened for write are treated as what under Windows is known as 'binary' (i.e. what Unix always does). With value 64, all files opened for write are treated as 'text'. This means that carriage-return/line-feed combinations are enforced while writing. This functionality exists on the Windows platform only. * The Ctrl_X-command is extended with reaction to arguments 66 and 67. With value 67, all file-names will be shown in Unix-convention. With value 66, the files will be displayed in PC convention. Note that this also affects the ':f' command. * The Ctrl_X-command is extended with reaction to argument 99. It causes TV to return a value depending on the environment. This means that platform-specific macros can now be made. (1=AMIGA, 2=UNIX, 3=PC) * On PC only, files can be specified in either PC or Unix syntax. * On PC only, stack-overflow is detected and reported if 32Mb is exceeded. The stack-size cannot be changed. * On PC only, the ':f'-command inserts the filename in the notation preset by the Ctrl_X setting. * A new start-up option is introduced: -pf<file>. File <file> is read, and each line in it is inserted as a separate parameter to tv. This makes it fast and handy to preset a list of files created by output-redirection, but in fact any option or parameter can be present in the file. Multiple option-files are allowed. Option- files within option-files, however, are not. * A new start-up option is introduced: -wd<dir>. It changes the working-directory to the directory specified. * In all TV processing (including macro files), the carriage-return character is now considered a valid blank (think ';j', but also the content of macros). This is done not just for Windows versions, but for all. That means older macro-files will be more likely to function correctly when used between different platforms. Occasionally, in very tricky/interesting macros, it may cause malfunctions that are difficult to trace. This, however, is the lesser of two evils. * It is now possible to undo key-redefinitions (created via the 2-parameter ;i-command) by using negative values for the mode (first parameter). The command does not read an extra character after ;i for negative modes.
New in release 7.0 * The Ctrl_X-command is extended with reaction to arguments 70 and 71. With value 70, debugging is turned on. This causes TV to dump debug-output to a file named and located similar to TVback, but with '_dbg' appended. With value 71, debugging is turned off. The content of debugging is: - command lists encountered by the parser - individual commands, with their parameters, to be executed - evaluation of expressions - messages to be displayed. - iteration identification - iteration counter So, all parser internal decisions and flow are printed to the debug output-file. This can become a huge amount of data, so it should not be left on all the time. It also makes TV a bit slower in execution. The advantages are that it is now possible to follow the exact path of the parser through a macro. The debug-information is usually more helpful in solving issues in macros than the content of a backup-file. * It is now possible to pass arguments into macros. The existing syntax remains : 3Mx will execute register 'x' three times. However, within an executing register (in this case 'x'), it is now possible to obtain the argument, range or list with which M was invoked. The '@m' command is created for this purpose. This has the following consequences: - calling 'M' with a range, list or negative argument is now allowed, but it will always result in just one iteration. - calling '@M' (returning the argument, range or list with which 'M' was invoked), reverts 'M' to an iteration-count of 1. The call can only be done when the active command is a register execution (or 'M') command. - If 'M' were to be invoked with the single argument 0, a conflict with the previous versions of TV exists. As of this release, argument 0 is no longer allowed. This incompatibility with existing command- files is one of the reasons why this release is created as a major release. - If '@M' is called with argument 1, 2, or 3, then two values are returned. The first value of this range is 1 if the argument is available, 0 if it is not. If it is available, the second value will contain the value of the corresponding argument. So, if register 'a' were to contain the string '2@m=', the calling it as 10,20,30ma will show the range 1, 20 (1 because the 2nd argument is available, and 20 as the value). Just 'ma' shows 0, 0. * The 'stack' concept has been expanded, which allows stacks to be used as arrays. A register for which a stack is available (because the 'v' command was called on it at least once) can be used to address all its elements without the need for popping them. If a register has a stack of n items, then most commands that act on registers now allow a subscript. So, to access numeric element 3 of register A, the command 'qa[3]' can be used. An array is just a different way of loooking at stack elements, so use of arrays and stacks can interchanged at will. Beware of using large arrays; the amount of memory they use is not negligible. Disposing of stacked registers when they are no longer needed is more important than ever. The 'top' register can be accessed, if you like, with subscript 0. * The 'v' and '^' commands (push and pop) now support an argument defining how many elements to push or pop in one go. This effectively allows arrays to be created and disposed of with one call. Multiple calls produce the same result as one call with the sum of the arguments to the individual calls. Or, in other words, 10va<ESC>10va<ESC> does the same as 20va<ESC>. * The 'l' command now also exists in modified form (@l). It works like the cursor-up and cursor-down keys, which means that it retains its position in the line. Contrary to the cursor-keys, there is no memory involved. With the cursor-keys, walking down at the end of a long line will follow the (right) indentation. After a shorter line, the cursor will appear at the remembered position at the next longer line. With the @l-command, the behaviour is always limited to the position immediately before the command was invoked. Any more memory would probably be useful interactively, but highly confusing when writing macros. The fact that an argument is supported should be bypass enough. * The 'M' command now returns the argument, range or list left by the last command in the macro. So, if macro 'X' ends with command "H", then "mx" will yield the range 0,z. This change may cause existing macros to malfunction, which is one of the reasons why this release is created as a major release. * The changes to the 'M' command made a change to the 'ESC' command necessary. It is now possible to cancel not only an argument, but also a range or a list with a single ESC. The command "1,2,3<ESC>" does nothing, but is now legal syntax. * The length of the search-string is now always available as 'q_'. * The current line-number can be retrieved with ';l'. * The command-line option '-v' (on its own) will print the version of TV in an all-numeric format. A newer version is guaranteed to yield a higher number. Version 6.4m would be reported as 60413 (m being character 13). Version 9 will, one day, be 9000000. Or possibly not, as development is probably not going beyond version 7. * For the unix-versions, a script 'cleanTVback' has been added, which controls the number of days backup-files are retained in the $TVback directory. This script will need to be called in the .profile (or as a 'cron' job) to have the desired effect. * A function 'p' was added to help with positioning within a line. - -[1]p : preset the offset of the buffer pointer with respect to the start of the current line as argument for the following command. - 1p : preset the offset of the buffer pointer with respect to the end of the current line as argument for the following command. - [0]p : preset the positions of begin of the current line, buffer pointer and end of the current line as the three arguments (list) for the following command. * The ';t'-function is extended. In addition to the call-interface that already existed, the following calls can now be made: - with argument -2, a range is returned containing (as argument one) the number of seconds since invocation, and (as argument two) the additional number of microseconds. The resolution of the second value (this is the microsecond value and not the second value but rather the 2nd value!) depends on the underlying OS. - with argument -3, the current time is returned as a list. Argument one contains the hours, argument 2 the minutes and argument 3 the seconds. * The ';d'-function is extended. In addition to the call-interface that already existed, the following call can now be made: - with argument -3, the current date is returned as a list. Argument one contains the year, argument 2 the month and argument 3 the day of the month. * The ':m'-function now supports an optional argument of -1 or +1. An argument of -1 displays the message as informational, a (default) of +1 displays it as error. Not all platforms make the distinction (monochrome Unix doesn't), in which case the argument is still allowed but has no effect. On a terminal which does support it, informational messages will be shown yellow on green, and error-messages yellow on red. The Amiga is black on white for informational, and red on white for error-messages. * The ';h' command now supports arguments (-1 was already supported). The argument tells TV which file to skip to. The function of ARG ;h is comparable to ARG<h> with the advantage that skipped files are not read. The method with the ':n' command (presetting the next number to be read) also still works.
New in release 6.3i * The 'u' command now accepts not only one argument, but also a range and a list. If a range is specified, the first argument is transferred to the register named immediately after the 'u' in the command-line, and the second to the register named after the first register. Similarly, when a list is specified, the third argument is transferred to the register named after the second register. As an example, executing 'hu12' would put 0 in register 1 and z in register 2.
New in release 6.3f * TV now supports redefinition of keys. Most keys can be defined differently in command- insert or overstrike-mode, via a 2-parameter call to ';i'. The defined string is echoed instead of the character in command-mode, and executed in overstrike- or insert-mode. The first parameter to ';i' is the mode (in Ctrl_X terms, so: 31, 32, 33) and the second is the ascii-value of the character. Note: * the backup-file is closed as soon as redefinitions like this are performed for insert- or overstrike mode. * control-keys and function-keys cannot be redefined. * only one level of translation is done (if 'A' is defined to yield 'C' and 'B' is defined to yield 'A', pressing 'B' will return an 'A' and not a 'C').
New in release 6.3e * Option '-t' added (specify terminal for tv; e.g.: vt220). By default, the TERM-environment variable is read. * Option '-d' added (delay 2 seconds on exit). If errors occur, this keeps the window open for a small time. Now that TV has its own window, which is closed on exit, this flag is sometimes necessary. The start-up script (start.tv, to which tv is aliased) contains '-d' when starting in its own xterm.
New in release 6.3c * The ':L<reg>'-command returns the number of levels the stack of register <reg> is currently deep. * The '=' command now also diplays ranges and lists.
New in release 6.3b * The register-list can now be terminated by a RETURN as well as by an ESCAPE.