1Only the most recent version will have detailed changes described.
2Some fixes are followed by the version in which the problem first appeared.
3
45.0
5---
6If you have not yet read all changes since 4.0 stable 1, please do now.
7  (read the CHANGES file directly, or type "/changes 5.0" in tf.)
8If you have custom code to do any of the following in older versions,
9  you'll probably want to get rid of it or redesign it, since it is now
10  superceded by standard features: key bindings; text redraw (after world
11  switch, or resuming from sh or suspend); scrollback; status line
12  customizations; ...
13
145.0 beta 8 (2007-01-14)
15----------
16Added %max_hook to prevent infinite hook loops.
17Added gethostname().
18Added missing documentation for new "E" and "W" attributes. (50b7)
19Added "inline" flag to decode_attr().
20Added -a<attr> and -p options to /prompt.
21Output of "/load testcolor.tf" now includes labels with r,g,b values.
22May create a debugging log if tf crashes.
23When invoked as a login shell, suspend is ignored, instead of hanging parent
24    (workaround for sshd, which does not correctly set TSTP signal handler).
25Fixed: after a resize with visual=off, the screen was not redrawn. (50b7)
26Fixed: after a resize with visual=off, an immediate backspace or other input
27    deletion would crash tf: "Internal error: output.c, line 2501". (50b7)
28Fixed: server display attributes could be lost if they had wrapped from a
29    previous line and were followed by more attributes.
30Fixed: /filter changed the idea of the virtual bottom line, so a subsequent
31    /unfilter redrew from the new incorrect bottom, and a subsequent
32    /filter used the new incorrect bottom as a starting point for applying
33    a new filter (resulting in a spurious "no lines match criteria" if the
34    only matching lines are between the correct and incorrect bottoms).
35Fixed potential crashes in calling functions with invalid arguments:
36    strrep(), status_fields().
37Fixed: on servers with terminated (GOAHEAD or EOR) prompts, tf could lose
38    the first part of a server line in the rare condition of tf sending a
39    line between receiving the first and second parts of the server line.
40Fixed: non-time decimal values greater than 60 were sometimes formatted as
41    time values. (50b7)
42Fixed fatal bug in moresize() on a world that has never been /connect'ed.
43Fixed infinite loop when replace() is called with empty first argument.
44Fixed: with visual=off, /dokey flush (^[j) did not clear the more prompt.
45Fixed: /recordline ignored -a option if -p was not also given.
46Fixed fatal bug on some systems in /listsockets when there are connectionless
47    sockets open.
48Fixed: various bad things could happen if a trigger attempted to apply a
49    partial hilite to a line longer than 32767 characters.
50Fixed bugs on 64-bit platforms: /fg -c (Debian bug #327448), some variable
51    assignments
52Fixed: some cases of hostname resolution failure could cause a crash
53More robust TELNET protocol handling reduces problems on noncompliant servers:
54    Ignores option subnegotiation if option has not been agreed on.
55    If IAC SB (0xff 0xfa) is received before any other telnet command, the
56	server is treated as a non-telnet server.
57Upgraded configure.in to autoconf 2.59 (should affect developers only)
58
59
605.0 beta 7 (2005-04-17)
61----------
62Colors:
63    Added 16-color names: "gray", "brightred"..."brightwhite".
64    Added 256-color names: "rgb000"..."rgb555" and "gray0"..."gray23".
65    Added predefined codes for xterm 256-color extension.
66    Functions decode_ansi() and encode_ansi() work with xterm 256-color
67	extension codes.
68    Added "/feature 256colors".
69    Added "/load testcolor.tf" to test color functionality and appearance.
70Added "E" and "W" attributes, with corresponding defintions in %error_attr
71    and %warning_attr.
72Added encode_ansi() to generate a string with attribute control codes.
73Added test() for backward compatiblity with version 4.0.
74Added strcmpattr(), like strcmp() but also compares display attributes.
75In commands that match macros (/list, /purge, /save), a color attribute will
76    match only the same color attribute, not just any color attribute.
77/list, /listvar, /listworlds, and /listsockets can sort their results.
78Added -n option to /listsockets to print host and port in numeric form.
79%Pn, %L, and %R subs are now case sensitive, to reduce collisions with regular
80    variables.
81/prompt preserves embedded display attributes in its argument.
82CONNECT hook includes SSL cipher name.
83Added -f (foreground) and -b (background) options to /world; documented -x
84    (SSL) option.
85Uses system's copy of libpcre if possible.
86Redefinition of macros or keybindings does not invoke the REDEF hook if the
87    new and old defintions are identical (so file reloading is less noisy).
88    If you used to gag REDEF to reduce noise, you may want to ungag it now
89    that it is less noisy and more informative.
90Status bar changes:
91    Status bar can be multiple rows, determined by %status_height.
92    /status_{add,edit,rm} commands take an -r option to specify which row.
93    Added status_fields(<row>) to get fields of <row>.
94    Added /status_defaults to restore default status bar fields; use of
95	%status_field_defaults is deprecated.
96    Added "/status_save <name>" and "/status_restore <name>" to save and
97	restore a named set of status fields.
98    The variable width field may be right-justified by giving it width "-0".
99    Fixed: /status_edit did not work on a variable-width field.
100    Fixed: "/status_add -x name:width:attr" failed to detect existing field
101	with name if its width or attr were different.
102    Fixed: status_attr_{int,var}_* variables sometimes had no effect. (50b5)
103    Fixed: any attempt to set %status_pad in .tfrc failed if %visual had not
104	yet been explicitly set (also, in a RESIZE hook caused by a terminal
105	resize while in /suspend or /sh, but that's much less common). (50a13)
106Other screen display changes:
107    Changing %wrappunct immediately rewraps everything on screen.
108    Eliminated extra screen redraw when the terminal is resized.
109    Fixed: under some conditions, rewrapping screen could cause entire
110	scrollback buffer to be redrawn, instead of just a screenful.  (If
111	%more was on, this acted like a jump to the beginning of the buffer.)
112    Fixed: did not send new terminal size to server after resizing the terminal
113	in nonvisual mode.
114    Workaround for a window resize bug in Konsole.
115Keyboard changes:
116    Workaround for incomplete linux console terminfo entry which was preventing
117	%keypad from working.
118    Added friendlier message for using undefined named keys.
119    Improved documentation for numeric keypad, including instructions for
120	using it with some specific terminal emulators. (See "/help keypad".)
121    Added missing names for numeric keypad keys:  key_nkpTab key_nkpEnt
122	key_nkp* key_nkp+ key_nkp, key_nkp- key_nkp. key_nkp/ key_nkp=
123    Added default keybindings for shift-tab, sun function keys, and
124	vt220 function keys F13 - F20.
125    Fixed incorrect keybindings for bottom two rows of numeric keypad in some
126	environments.
127Installation changes:
128    ./configure now honors options --exec-prefix, --bindir, --datadir,
129	--program-prefix, --program-suffix, and --program-transform-name.
130    ./configure --enable-version does not automatically --enable-symlink.
131    Installation directory for tf-lib now defaults to PREFIX/share instead of
132	PREFIX/lib (configurable with --datadir).
133    Fixed ./configure --enable-mailcheck=DIR.
134ftime() now returns an empty string instead of an incorrect string if the time
135    is out of range (in addition to printing an error message).
136Time period values of 60s or larger are printed in h:mm[:ss.u] format.  This
137    applies to %alert_time, %maildelay, %prompt_wait, %ptime, idle(), sidle(),
138    and values derived from them (but not time() and mktime(), which are
139    absolute time values).
140The CONFAIL and CONNETFAIL hooks did not previously behave as documented.  The
141    CONNETFAIL hook has been removed; the new ICONFAIL hook is called for a
142    connection failure if there are more possible addresses to try, and the
143    CONFAIL hook is called for a connection failure on the last address.  (If
144    you had worked around the buggy behavior by duplicating CONFAIL and
145    CONNETFAIL hooks, you will probably want to go back to using the CONFAIL
146    hook only.)
147Improved error checking for /repeat arguments.
148Fixed inappropriate expansion of command lines (outside of macros) starting
149    with /let, /set, /setenv, /test, /result, /return.
150Fixed spurious error for "/break" without arguments at end of macro body.
151Fixed: a macro with no other statements outside of an "/if (expr)" statement
152    was incorrectly treated as an error, causing any macro that called it
153    to abort.
154Fixed: "/set var " (with trailing space) was setting var to blank instead
155    of printing its value.
156/listworlds and /listsockets ignore trailing space.
157Fixed: /runtime incorrectly evaluated its return value.
158Fixed: new -= operator added instead of subtracted.
159Fixed crash if left side of new += -= *= /= operators was not assignable.
160Fixed crash in strip_attr(). (50b5)
161Fixed crash in /list -P.
162Fixed class of crashes involving certain generated empty strings in macros:
163    - attribute strings in echo(), substitute(), and decode_attr()
164    - macro names
165    - expression operands
166    - etc.
167Fixed bug in binding local address on some systems.
168Will not crash if a bug in tf or library code supplies an invalid string in
169    an error message.
170Strengthened check for TERMCAP corruption by broken *csh.
171Fixed moresize() and morepaused() with virtscreen=off (undocumented).
172
1735.0 beta 6 (2004-08-04)
174----------
175Fixed: lines with "A" attribute were not ignored as they should have been by
176    activity_status.tf and world-q.tf. (50b5)
177Fixed crashes and other problems caused by prompts in expnonvis mode. (50b5)
178Fixed crash on SSL error. (50b5)
179Fixed spurious error message when an SSL server closes its connection.
180
1815.0 beta 5 (2004-07-26)
182----------
183Added an experimental side-scrolling variant of non-visual mode; see
184    "/help expnonvis".
185/quit prompts for confirmation only if there are sockets with unseen text.
186savehist.tf (undocumented) preserves attributes when saving and loading
187    histories.
188Added %secho to echo lines sent to server.
189Added %{k,m,q,s}echo_attr to set attributes for {k,m,q,s}echo.
190Attributes in %{k,m,q,s}prefix are echoed by {k,m,q,s}echo.
191Added encode_attr().
192Added -p and -a<attrs> options to /recordline.
193Added "A" (noactivity) attribute - lines with this attribute will not cause
194    an ACTIVITY hook or an activity counter on the status bar.
195Added "L" (nolog) attribute.
196Removed "d" (dim) and "f" (flash) attributes.
197Added new arithmetic assignment operators:  += -= *= /=
198The invalid macro body substitution "% " is left alone instead of being
199    replaced with " ", for backwards compatibility.
200Attributes generated by the status line system override any attributes
201    originally present in the text being printed in a status field.
202If a /retry connection attempt (other than the first) succeeds, the socket is
203    not automatically foregrounded.
204Spaces in TFPATH and TFMAILPATH may be escaped with backslash.
205Eliminated %auto_fg, which didn't work in 5.0 anyway.
206Mecho prints hook and trigger arguments.
207Supports MCCPv1 in addition to v2.
208cputime() returns -1 if not supported by system.
209Fixed rounding error in times reported by /runtime.
210Fixed visual=off display (redraw and "More" paging).
211Fixed: when the connection to a background socket with no activity was lost,
212    the socket's virtual window was closed, losing the disconnect message.
213Fixed: under certain conditions, a /connect in a DISCONNECT hook would
214    fail with "socket to <world> already exists".
215Fixed: /quote -decho lost attributes.
216Fixed: /dokey recall{b,f,beg,end} and search{b,f} did not honor %kbnum.
217Fixed: when logging with wraplog=on, blank lines were not logged.
218Fixed initial setting of %interactive and %visual. (50b4)
219Fixed initialization of %status_attr from environment.
220Fixed bug in handling more than 8192 bytes sent by server with MCCP enabled.
221Fixed: when server disabled MCCP, tf discarded pending text.
222Fixed a timing bug that may have caused many seemingly unrelated problems,
223    including processes not running on time, status bar not updating, and
224    keyboard or background worlds being ignored. (50a13)
225Fixed handling of case where server sends ANSI display code followed by
226    backspace (not known to ever happen in practice, but fixed nontheless).
227Fixed: in some cases, if TF already had a prompt from the server, it would
228    ignore a new prompt from the server.
229Improved some error messages.
230Improved detection of SSL libraries and handling of incomplete SSL setup.
231Detects when csh or tcsh has corrupted the TERMCAP environment variable.
232
2335.0 beta 4 (2004-02-17)
234----------
235Added /key_{shift,ctrl,meta}_{F1..F12} (for recent xterms).
236All command options that require numeric arguments (including getopts() "#"
237    options) can take a numeric expression as an argument.  (Actually added
238    in 50a13, documented now.)
239/set, /setenv, and /let are reserved words (may not be redefined).
240Added %interactive.
241/quit prompts "Really quit?" if interactive.  "/quit -y" forces quit.
242Improved generated macro code.
243Redraw (^L) recovers from garbled scroll region.
244Workaround for yet another kind of bad getaddrinfo() implementation.
245Warns about "%;" after "/if (...)", "/while (...)", or "/else".
246Fixed crash in handling of invalid "@{...}" inline attribute specifications.
247Fixed possible crash on trying to connect to bad host address.
248Fixed: "/@name" was calling macro instead of builtin. (50b3)
249Fixed "/let" with no args.
250Fixed "{0}" in expressions. (5.0)
251Fixed crash when sending to closed connectionless socket.
252Fixed /replace to work on strings containing spaces (i.e., arguments 3..N,
253    not just 3).
254
2555.0 beta 3 (2003-12-22)
256----------
257Draws dividing line between old text and new text when you bring a world
258    window to the foreground.  Configurable with %textdiv and %textdiv_str.
259    Includes option to clear old text before drawing new text.
260    (Replaces separator.tf from 50a13).
261Once a screen is cleared, it stays clear:  hiding and unhiding it does not
262    redraw the cleared lines.  You must scroll back to redraw them.
263"ESC w" switches to next active world (i.e. world-q.tf is loaded by default).
264activity_status.tf just replaces "@active" with "activity" field, it does not
265    redefine the entire status bar.  activity_status2.tf moves and shrinks
266    other fields to make more room for the activity field.
267    Length of abbreviations can be limited by setting %status_abbr_max.
268Fixed handling of commands disabled by --disable-process or --disable-history.
269Increased default value of %max_trig.
270Decreased default value of %refreshtime.
271In recent versions of xterm, Meta-<NamedKey> acts like ESC <NamedKey>.
272Added /key_shift_{insert,delete,home,end,pgup,pgdn} (for recent xterms).
273Improved glob diagnostics.
274Improved/fixed handling of small terminals.
275moresize() returns number of lines scrolled.
276Fixed: bodyless triggers sometimes didn't apply attributes if borg=0. (40g3)
277Fixed: %max_trig could sometimes produce multiple warnings.
278Fixed L and R partial hilites on zero-width regexp matches.
279Some documentation improvements.
280
2815.0 beta 2 (2003-12-12)
282----------
283Fixed: prompts were not displaying, and were making tf eat CPU time. (50b1)
284Increased default value of %max_instr.
285Fixed harmless configure error that appeared on some systems.
286
2875.0 beta 1 (2003-12-10)
288----------
289Added documentation for PCRE regexp syntax under "/help pcre".
290New named key system separates character sequence generated by key from
291    the function performed by the key.  To change the meaning of named keys,
292    you should now redefine the key_<name> macro instead of redefining the
293    binding for the key.  See "/help keys".
294Up/down keys now default to moving up/down within a long line, unless cursor
295    is at the beginning/end of the line; then they do recallp/recallb.
296Worlds defined with "/addworld -e" echo back any text sent to them.
297    This is useful on normal sockets to see what you're sending, or on
298    connectionless sockets for testing triggers or other advanced uses.
299    Connectionless sockets no longer echo back by default.
300/at is defined by default, and can take a date in addition to time-of-day.
301If %defcompile is on, macros are compiled (and thus syntax-checked) when
302    defined, instead of when first run.
303Added %max_trig to prevent infinite trigger loops.
304Replaced %max_iter with %max_instr.
305/def gives error immediately if regexp is bad or -P value exceeds number of
306    subexpressions in regexp.
307Keyboard movement commands beep only when they produce no movement at all,
308    not when they just don't move as far as intended.
309/dc message appears in the world being disconnected as well as the fg window
310    (if they're different)
311Literal time values may include microseconds (e.g. 12:30:01.145)
312Added "how to sleep" example under "/help /repeat".
313Added %expand_tabs.
314Added decode_ansi().
315Renamed BACKGROUND hook to BGTRIG (but old name still works).
316Added BGTEXT hook.
317Fixed activity_status.tf to update for lines generated by /echo -w.
318Fixed: ACTIVITY and PREACTIVITY hooks didn't run in the world in which the
319    activity occurred when caused by /echo -w.
320Fixed order of /dc message relative to text already queued on socket.
321Fixed: under certain conditions, a dead socket would not go away and could
322    not be foregrounded.
323Fixed handling of IPv6 server address on system with getaddrinfo() but no
324    IPv6 kernel support.
325Fixed bug in printing long IPv6 addresses (more than 27 characters).
326Fixed "Invalid value for ai_flags" error during /connect on some broken
327    systems (FreeBSD 4.2).
328Fixed spurious "Not connected" messages from certain library macros.
329Fixed: tabs were not expanded upon receipt from server, so lines with tabs
330    weren't matched by triggers (regexp or glob) that matched in 4.0.
331Fixed trailing ^@ on macro body when defined in loaded file with (incorrect)
332    trailing "%; \".
333Fixed fatal bug in /expr, /test, /result, /return with an empty argument that
334    was generated by expansion. (50a13)
335Fixed fatal bug in /ps when printing very large times.
336Fixed handling of bad options of the form "--x".
337Fixed compile error in output.c ("called object is not a function") when
338    configured to build without termcap. (50a3)
339Workaround for compilation error "krb5.h: No such file or directory" on some
340    systems (Red Hat and Yellow Dog Linux) that keep ssl in standard location
341    but depend on kerberos which isn't in a standard location.
342
3435.0 alpha 14 (2003-11-06)
344------------
345/paste -h invokes send hooks; plain /paste does not.
346Fixed sometimes fatal bug in /def -P with multiple arguments.
347Fixed compile error for systems with getaddrinfo() but without AI_ADDRCONFIG.
348Fixed: executable was stripped even if configured with --enable-core.
349
3505.0 alpha 13 (2003-10-30)
351------------
352If called from foreground, /connect foregrounds the new socket immediately,
353    before it is actually connected; if called from the background, it never
354    foregrounds the socket, even when the connection eventually succeeds.
355    New -f and -b options can change this behavior.
356If a hostname corresponds to multiple IP addresses, /connect tries them all
357    until it finds one that works.  Each one that fails invokes a CONSUBFAIL
358    hook; if they all fail, the CONFAIL hook is invoked.
359Hook messages are now displayed _before_ executing any hooked macros.
360An alert related to a background world is cleared if that world is brought
361    to the foreground.
362If a status field is partially obscured by an alert, the visible part of
363    the field is still updated.
364In world-q.tf, worlds with scrolled-back text are counted as active.
365Added eval().
366Renamed inline_attr() (50a10) to decode_attr(); added strip_attr().
367Input completion does not print the list of possible matches until the
368    second time the completion key is pressed.
369/def -P can take multiple subexpression/attribute pairs, separated by ';'.
370/def -P recognizes L and R as subexpression identifiers.
371/load and /lcd ignore trailing spaces in argument.
372By default, up/down keys do recallb/recallf instead of cursor up/down.
373"@" is accepted in front of keywords (e.g. "/@if").
374Made it illegal to use "/return" or "/result" generated by substitution (e.g.
375    "/let cmd=return%; /%cmd 1").
376Added %mccp flag to disable MCCP.
377If TF crashes, it will dump a corefile only if configured with --enable-core.
378After you /dokey selfush (^[J), reach the end of the text, and attempt to
379    scroll forward one more time, the screen is redrawn unfiltered (this is
380    necessary to avoid a mixture of filtered and unfiltered lines on screen).
381During /limit, scrolling to any point, including the bottom, results in a
382    More prompt that shows the number of lines (possibly 0) below the status
383    line.  In this state, /unlimit will leave the bottom visible line where it
384    is, and redraw the unlimited lines above it.  But if you attempt to scroll
385    PAST the bottom during /limit, the More prompt changes to "LIMIT ON"; in
386    this state, /unlimit will redraw with the previously invisible last line
387    at the bottom of the screen.
388Added morepaused().
389Added PREACTIVITY hook.
390Added activity_status.tf to display, on status line, number of lines in
391    active worlds.
392Added separator.tf to draw a dividing line between old and new text in
393    background worlds.
394Added status_width() to get width of a status field.
395Fixed redraw after SIGINT (^C) or SIGQUIT (^\).
396Fixed ordering of prompt processing relative to normal lines, including
397    prompt hooks and attributes embedded in prompts. (50a9)
398Fixed: an alert caused by an event in a background world caused the status
399    line to be incorrectly updated with information from that world. (50a12)
400Fixed /limit -a.
401Fixed line count during /dokey selflush (^[J).
402Fixed /dokey pause (^S).
403Fixed: /echo -p lost original attributes of argument
404Fixed possible crash after disconnecting from a world with a prompt.
405Fixed: when wrappunct applied, space was ignored. (50a12)
406Fixed bug in reverse scrolling after clear. (50a12)
407Fixed use of kbnum in ^[c ^[u ^[l (capitalize, upcase, downcase) keybindings
408Fixed: receipt of a character 251-254 was sometimes incorrectly interpreted
409    as a telnet option negotiation
410Fixed handling of /break in complex nesting situations.
411Fixed: float values (0.0 < abs(x) < 1.0) in /if and /while conditions were
412    interpreted as false instead of true.
413Fixed: assigning a variable to itself in an expression (foo:=foo) could
414    incorrectly set variable to 0.
415Fixed fatal error when "kbnum" is in environment and first keypress is a
416    digit.
417Fixed IPv6 support (using RFC 3493 API) (50a10).
418Fixed: speedwalk incorrectly matched lines containing only digits.
419-
4205.0 alpha 12 (2003-06-11; not released to public)
421------------
422moresize() takes an optional world argument, and defaults to operating on
423    current world (instead of foreground world).
424Page Up and Page Down scroll a full screenful, not a half.
425Added ^] keybinding for /bg.
426Can wrap at punctuation other than space; %wrappunct controls it.
427Can reverse scroll until first line is at bottom of window (useful with
428    /limit and /unlimit).
429Documented new input completion keys.  See /help complete.
430Added %TFLIBDIR/teraterm.keyboard.cnf.  TeraTerm users should copy this to
431    their TeraTerm directory to fix the editor keypad (insert/delete/home/
432    end/pgup/pgdn); this will help any application you use through TeraTerm,
433    not just TF.
434Documented textencode() and textdecode().
435Added warning about some new keybindings the first time they're used (unless
436    warn_5keys=off).
437/relimit warns if there was no previous limit.
438/clock with no argument resets clock_format to %H:%M.
439Fixed:  Gag was not correctly suppressing alert messages (e.g.,
440    /def -ag -hactivity gag_activity).
441Fixed handling of invalid attribute specifications.
442Fixed: long alert wasn't cleared when shorter alert was printed on top of it.
443Fixed: /status_{rm,edit} could not find right-justified fields
444Fixed: /status_add -B put spacer on wrong side of new field
445Fixed: @world field in status bar sometimes displayed incorrect name during
446    a trigger or hook in a background world.
447Fixed screen corruption and lockup in /dokey selflush (ESC J).
448Fixed use of nameser.h when inet6 is enabled.
449Fixed compilation problem on some systems with HAVE_LIBZ and HAVE_GETPWNAM.
450Added --disable-ssl option to unix configure.
451Fixed "make clean" etc.
452Fixed garbage in "/help limit".
453Fixed several bugs in use of {var} (with curly brackets) in expression. (5.0)
454Optimized {var} expression values and %{var} macro substitutions.
455More informative debugging output.
456
4575.0 alpha 11 (2003-05-27)
458------------
459If you have not yet read changes since 4.0 stable 1, please do now.
460Fixed fatal bug in /hook with no pattern.
461Fixed compilation problems on MacOS X.
462Fixed: More prompt area (8 dashes) sometimes scrolled into output window
463  when switching worlds. (50a10)
464Fixed missing "/help /limit".
465Disabled IPv6 support by default, since it is broken on some systems, and
466  there really aren't any servers that require it anyway.  (To be fixed in
467  a future release).
468Installation process creates PREFIX/bin and PREFIX/lib if needed.
469
4705.0 alpha 10 (2003-05-26) - changes since 4.0 stable 1
471------------
472New screen handling.  See "/help windows".
473  Per-world virtual windows, including More prompt.
474  True scrollback:
475    Half page backward (PgUp, ^X[) or forward (PgDn, ^X]),
476    full page backward (^X{) or forward (^X}),
477    line backward (^[^P) or forward line (^[^N).
478    /dokey_flush means jump to end, showing last screenful
479    /dokey_selflush shows last screenful of lines with attrs
480  Redraw after /suspend, /sh, and changing window size, %visual, or %isize.
481  Doesn't automatically leave a dead socket if the text hadn't been seen.
482  WORLD hook is silent.
483  A disconnected socket does not disappear automatically after displaying its
484    buffered text.  It will dissappear if you /dc it again, or /fg another.
485  /dokey redraw (^L) actually redraws screen.
486  Added /dokey clear (^[^L) to clear screen.
487  %shpause defaults to on.
488  Eliminated all "Resuming TinyFugue" messages and RESUME hook.
489  Default status_int_world prepends "!" if foreground socket is a zombie.
490  Changing a status_{int,var}_* will cause the status line to update.
491  Added /dokey pause (^S)
492  @more status field counts physical lines (not logical lines); it shows
493    both old lines and new lines; when a /limit is in effect, only limited
494    lines are counted.
495  moresize() takes flags to request only limited, only new, or only new
496    limited lines.
497  bg_output and /fg -q mean jump-to-end when foregrounding
498  Some messages (activity/background/mail hooks, /limit error) appear as
499    temporary "alerts" on the status bar.  %alert_time controls duration of
500    alert.  %alert_attr controls attrs of alert.  echo() to the "a" stream,
501    or /echo -A, displays arbitrary text as alert.
502  status field attrs are modified by variable "status_attr_{int,var}_<name>".
503By default, wrapped lines are indented 4 spaces (%wrapspace=4).
504Changed default keybindings to be more consistent with those in emacs, bash,
505  and other gnu readline applications.  The old bindings can be restored with
506  "/load kb-old.tf" (not recommended).  See "/help keys".
507  The most important changed keys are:
508      Old          New                       Meaning
509      left right   ^B ^F left right          move cursor back/fwd
510      ^B ^F        ^[b ^[f                   move cursor one word back/fwd
511      ^[b ^[f      ^[{ ^[} ^[left ^[right    prev/next socket
512      ^L           ^[L                       clear screen
513      (none)       ^L                        redraw screen (with contents)
514added /status_add, /status_rm, /status_edit, /clock {on|off}, %clock_format,
515    %status_field_defaults.  You should not set %status_fields directly.
516Variables used in status_fields do not need to exist.
517Various keys are bound to /dokey_pg{up,dn} which in turn calls
518    /dokey_hpage{back,}.  To make keys move a whole screenful, user should
519    not rebind the keys, but redefine /dokey_pg{up,dn} to call
520    /dokey_page{back,}.
521Note: some emulators (NiftyTelnet, TeraTerm) incorrectly send ^[[3~ for
522    PgUp; the correct meaning of ^[[3~ is Delete (in vt220 emulation).
523    The PgUp key in these emulators will not work correctly in tf unless you
524    (preferred) fix your emulator, or (easier) "/bind ^[[3~ = /dokey_pgup"
525    (warning: may break your Delete key)
526Replaced Henry Spencer's regexp pacage with PCRE (Perl Comaptible Regular
527  Expressions).  It is backwards compatible, with one exception:  the
528  character '{' introduces a quantifier, so you must use '\{' to match a
529  literal '{'.  Also, regexps containing no uppercase letters default to
530  caseless matching.  All regexps (including static strings in macros and
531  expressions, and regexps stored in variables) are now stored internally
532  in compiled form, making them much faster.
533regmatch() returns any positive integer for success, not necessarily 1
534  (so you should write (regmatch(...)), not (regmatch(...) == 1)
535Time is measured and printed with microsecond resolution:
536  %prompt_sec and %prompt_usec replaced with %prompt_wait
537  /recall:  h:m[:s[.f]] is interpeted as time-of-day, s.f as absolute time.
538  ftime():  "%@" includes microseconds; added "%.", "%s", "%F", "%T" formats.
539  /ps, time(), idle(), sidle() print or return values to the microsecond.
540  Time values for /repeat, /quote, /at, %ptime, %maildelay can be specified
541    to the microsecond.
542Display attributes in string values are preserved by just about every string
543  operation, including commands, variables, expression operators, functions,
544  regexp substitutions, $() command substitution, and status bar field
545  expressions.
546/limit [-a] [-v] [-m<style>] <pattern>:  redraws window, showing only lines
547    that match <pattern> and/or have attributes (-a).  With no args, returns
548    1 if limit is in effect, 0 if not.  Screen-specific.  Default @more
549    status counts only limited lines.
550/relimit repeats last limit
551^[L (meta-shift-l) toggles last limit off and on.
552Macros and expressions are stored internally in compiled form, making
553  them faster.
554Expression variables are stored internally as natural types instead of
555  strings for greater efficiency and to avoid loss of floating point
556  precision.
557Renamed log() to ln() to avoid confusion with /log.
558Non-ANSI C compilers are no longer supported.
559Lines beginning with '#' in /loaded files are comments (';' still works).
560Supports IPv6 (RFC 2553 and 2133).
561Supports Mud Client Compression Protocol (MCCP) v2.
562New /paste options: -x (execute); -n (no prefix); -q (quiet); -s (strip
563    trailing space); -e<end> -a<abort> (set end/abort cookies).
564/paste accepts "." to end.
565%meta_esc=on always converts a typed meta bit to ESC; %meta_esc=nonprint
566  converts only if character is not printable.  The LNEXT key (^V) overrides
567  %meta_esc.
568Tabs are no longer confused by ANSI display codes from server.
569Added -P option to /quote and /repeat to run on prompts, like %lpquote.
570Prompted (-P or %lpquote) processes with a -w option are only run by prompts
571  from the specified world.
572Added /runtime.
573If an additive operation on integers would overflow, it is converted to real.
574TF will not terminate on SIGHUP if SIGHUP was ignored when TF was started.
575/ps lists processes in ascending order of pid.
576Added -A, -B, -C options to /recall to print lines of context around each
577  matching line.
578"/restrict file" disables /lcd.
579Added %keepalive to prevent network timeouts and detect dead connections.
580Added %keypad to control application keypad mode.
581getopts() options can take time arguments.
582Optional offset argument to strchr(), strstr().
583Optional length argument to tolower(), toupper().
584Simplified proxy customization (but an old proxy_command that worked in 4.0
585  will still work).
586Clock defaults to 24 hour format (see /help clock).
587Added %sigfigs.
588Improved telnet protocol handling, and detection of telnet vs. non-telnet
589  servers.  Apparent telnet commands commands are not stripped from data
590  stream if server doesn't use telnet protocol.  /localecho may be delayed.
591Added /purgealias to alias.tf.
592Added /randline to textutil.tf.
593Added is_connected().
594bg_output is tested when socket is foregrounded (like /fg -q), instead of
595  when text is received.
596Arguments to ftime() are optional.
597ftime() supports %E and %O if system library does.
598Added mktime().
599Added "i" argument to /repeat for infinite count.
600Optional <pid> argument to /ps.
601Improved workaround for solaris terminal driver bug that could disable
602  keyboard after typing LNEXT (^V), FLUSH (^O), STOP (^S), or START (^Q);
603  also, in the extremely unlikely case that it does happen, it can be fixed
604  with any signal (e.g., ^Z or ^C) without quitting tf.
605Fixed handling of bold-off display attribute code from server.
606An error within a tfrc file does not cause tf to try to load an alternate
607  file.
608When server requests window size (TELNET NAWS), tf sends %wrapsize instead of
609  the actual screen width.
610Fixed: "/addworld" with no args clears the name of the first defined world.
611Fixed: "/unset MAIL" crashed tf.
612Added "substr" matching type.
613Added %tfhost and "/addworld -s<srchost>" to define client address of
614  connections.
615TF closes all open sockets, pipes, and files before the 'Press any key'
616  prompt when dumping core, so servers and other processes don't have to wait
617  for the keypress.
618/trigger -n or -l lists matching macros without running them.
619world names may not contain space.
620"connectionless" (unconnected-but-open) world sockets (see /help connect).
621    Sending to connectionless socket echoes line (with \n) back.
622Added is_open([world]).
623new /listsocket flags:  P=proxy, O=open-connectionless, C=connected,
624    X=connected-ssl
625/fg -cN: repeat count
626ESC and digits set %kbnum, which is used as a repeat count for many other
627    keybindings (/dokey {recall,search}{b,f}, recall{beg,end}, and macros
628    in kbfunc.tf; also, stack number for kbstack.tf).
629    Use ^G to abort kbnum.  %max_kbnum sets upper limit on %kbnum (warning:
630    large kbnum may cause tf to exhaust all memory or do other bad things).
631Added winlines().
632Disables tty STOP/START to avoid problems and make ^S/^Q available to tf.
633Synchronous processes can be interrupted.
634Fixed: if a loaded file did not end with newline, the last line was executed
635  twice.
636SSL:  /addworld -x, addworld(..., "x"), /connect -x, /listsockets
637getopts() numeric args can be signed
638Added inline_attr() to interpret "@{attr}" display attribute codes in a
639  string.
640-
641added "/clock <format>"
642strrchr() has optional offset argument.
643added /features
644world_info([<world>,] "cipher")
645send() "h" flag and /send -h flag DO invoke send hooks.
646/edit does not renumber the macro being edited.
647more compact /ps format leaves more room for long commands.
648If a multiply operation on integers would overflow, it is converted to real.
649replace() is an internal function.
650/listsockets shows number of old and new lines on each socket (total, not
651    just limited).
652Fixed 'illegal macro name ""' in '/edit #<N>'.
653Fixed: glob comparison of end of string against pattern "*{..." could give
654    incorrect results. (35a16)
655-
656UNDOCUMENTED
657Fixed expansion of line pushed by kbpush (50a9).
658Prints overflow error when converting too-large real to integer or time.
659fake_recv(string, [world, [flags]]); fakes receiving a line from world.
660    flags="r" means raw (no implicit newline, before prompt processing)
661vercmp() (in stdlib.tf)
662/pfxgen and pfcmd() (in pcmd.tf)
663Changed how attributes combine:  colors always override, not OR; inline x
664  causes replacing of line attrs.
665macro usage counts with /list -su.
666Network/host unreachable does not cause disconnect, only loss of sent text.
667%virtscreen (do not change while at a More prompt).
668Added textencode.tf.
669
6705.0 alpha 9 (2002-03-12; not released to public)
671-----------
672see above
673
6744.0 stable 1 (1999-03-06)
675------------
676Workaround for solaris terminal driver bug that could disable keyboard after
677  typing LNEXT (^V) or FLUSH (^O).
678
6794.0 gamma 3 (1999-01-31)
680-----------
681The prefix for /paste can be a tf command.
682Recognizes '?' and '%' fields when copying MAILPATH to TFMAILPATH.
683Minimized performance impact of triggers when borg==off or defined with -c0.
684Fixed beginning cutoff of time range in /recall -g. (40b1)
685Fixed spurious warning for readable password when redefining a world.
686Fixed crash caused by beep on unsupported terminals.
687Fixed crash caused by closing unconnected socket with buffered output.
688Fixed problems related to failed nonblocking hostname resolution.
689Will not busy loop if tty closes without killing tf.
690Eliminiated warnings in /color_on.
691
6924.0 gamma 2 (1998-11-15)
693-----------
694Worlds without type or mfile now use corresponding field of "default" world.
695Improved prompt detection heuristics for typeless worlds.
696/addworld can reset fields other than host and port for "(unnamedN)" worlds.
697Clarified scope rules in "/help /for".
698Fixed fatal error when reconnecting in a DISCONNECT hook. (40g1)
699
7004.0 gamma 1 (1998-11-10)
701-----------
702Supports SOCKS5 in addition to SOCKS4.
703/edit can delete a macro's body.
704Improved prompt detection heuristics for typeless worlds.
705/relog (in relog.tf) preserves leading/trailing space, and is more efficient.
706Improved error messages for failed connection under SOCKS.
707Improved error messages for disconnected sockets on some systems.
708Avoids rounding error in displaying floating point numbers.
709Refuses telnet SUPPRESS-GO-AHEAD option.
710Fixed bug in using /connect in a world file; PROXY, CONNECT, or LOGIN hook;
711  or %status_int_world.
712Fixed fatal bug in redefining the "default" world.
713Fixed fatal bug in "/recall -t" when %time_format is unset. (40a9)
714Fixed: floating point exception caused crash on some systems.
715Fixed zombie processes left by failed nonblocking gethostbyname on unix.
716Fixed possible "Bad file number" and "crossed connections" when reconnecting
717  in a DISCONNECT hook.
718Fixed memory leak in expression stack overflow.
719
7204.0 beta 3 (1998-10-05)
721----------
722Clarified documentation of function arguments (see "/help functions").
723Restored old behavior of "/recall -t" when %time_format == "@". (40a9)
724Fixed: nactive() returned old value in %status_int_world, %status_int_active,
725  and WORLD hook.
726Fixed /revert in map.tf.
727Fixed error in using %Pn subs after matching a blank regexp.
728Fixed /nth to return an empty string when n <= 0.
729Fixed handling of blank world name in addworld().
730Eliminated spurious message from /qmud.
731Workaround for nonblocking socket bugs in some operating systems (SunOS 5.x).
732Fixed handling of /set visual=on when visual mode isn't supported.
733Fixed /list'ing of macros with -p0.
734Fixed compile error involving localtime() in output.c on AIX. (40a11)
735
7364.0 beta 2 (1998-08-06)
737------------
738Documented new "telnet" login handling.  See /help addworld.
739Fixed tfclose() of tfin/tfout; closing tfout prevents output in a macro body.
740Fixed compilation on systems (SunOS 4.1.4) without a putchar function. (40b1)
741Fixed compile error in expand.c under non-ansi compilers. (40a5)
742Fixed build problem in some versions of make. (40a11)
743
7444.0 beta 1 (1998-07-27)
745------------
746"telnet" worlds require "login:" and "password:" prompts.  See /help addworld.
747Optional arguments for kbwordleft(), kbwordright(), kbmatch().
748Optimized /recall by time on large world, local, or input history.
749Improved login handling on "telnet" worlds.
750Disabled useless and often confusing dsusp key (^Y).
751Fixed: "/recall <time>" ignored <time>. (40a9)
752Fixed /replace. (40a11)
753
7544.0 alpha 11 (1998-07-22)
755------------
756Added "%@" conversion to and removed length restriction from ftime().
757Added -i option to /fgrep and /egrep.
758Improved precision of process timing.
759/def -E interprets enumerated special variables as integers, not strings.
760Skips signal handling confirmation prompts when input is not a terminal.
761Disabled OS/2 hostname resolution error messages, which apparently do not
762  work on all versions of OS/2. (40a9)
763Added codes for named keys when using HARDCODE terminal codes.
764Numeric keypad keys now generate unique character sequences on more terminals
765  (this may break some existing keypad usage).
766Repeated errors in mail files do not repeat error messages.
767Fixed codes for named arrow keys on some terminals (vt100 in particular).
768Fixed "color bleeding", where mid-line server attributes were sometimes
769  applied to the beginning of a line if lp=on.
770Fixed handling of interrupted server attribute code with lp=on.
771Fixed bugs involving unset {k,m,q}prefix.
772Fixed autologin and localecho problems on some telnet worlds.
773Fixed overflow in floating point significant figures.
774Fixed potentially fatal error in failed nonblocking hostname resolution.
775Fixed /tee in textutil.tf.
776
7774.0 alpha 10 (1998-06-29)
778------------
779world_info() arguments are optional.
780Fixed: unevaluated /if clobbered return value ("/return val%; /if..."). (40a9)
781Fixed options for some compilers (like SunOS 4.1). (40a9)
782
7834.0 alpha 9 (1998-06-24)
784-----------
785Added %TFMAILPATH, to check multiple mail files.
786/recall -t<format> does not insert brackets.
787Enabled floating point features and improved hostname resolution error
788  messages in OS/2 version.
789Reduced spurious style warnings during /load. (40a7)
790Invalid or "-?" command option produces an option summary.
791/at interprets current time as that time tomorrow, not today.
792Fixed reversed meanings of sidle(world) and idle(world). (40a8)
793Fixed: -P trigger destroyed -ag attribute set by an earlier trigger. (40a5?)
794Fixed listing of partial hilites with /listhilite, /listpartial, /savepartial.
795Fix for unix systems without waitpid(). (40a8)
796Fix for systems without standard case conversion. (35a)
797Fixed return value of invalid /recall and /def.
798Fixed memory leaks.
799
8004.0 alpha 8 (1998-06-18)
801-----------
802Added textutil.tf library, containing /fgrep, /grep, /egrep, /copyio,
803  /readfile, /writefile, /head, /wc, /tee, /fmt, and /uniq.
804Added /def -E<expression> for conditional trigger/hook matching.
805Added substitute(), and -a -p options to /substitute.
806Added %TFPATH.
807Added /listvar -v to list values only.
808Added /paste -p (paragraph mode).
809Added sidle() to return time since last send on a socket.
810Added /color_on and /color_off.
811Added /_echo.
812Added standard /loaded, so any file can be made to work with /require.
813Added -q (quiet) option and -t<format> argument to /recall.
814Added /replace to standard library.
815/recall can be interrupted (^C).
816Restored pre-40a5 meaning of /list -an; now, the "x" pseudo-attribute turns
817  off pre-existing attributes (see: /help attributes).
818%TZ and locale variables are automatically exported, so they work as expected
819  even when not explicitly exported.
820Fixed unreadable handles created by tfopen() with mode "p".
821Fixed update of status field when there is no variable width field.
822Fixed /echo -w (with no world name).  If you used the replacement /echo
823  posted on the mailing list, you should get rid of it now.  (40a5)
824Fixed zombie processes left by /dc during nonblocking gethostbyname on unix.
825Fixed loss of trailing spaces in escape().
826
8274.0 alpha 7 (1998-04-14)
828-----------
829/listworlds displays in table format by default.
830Many error and warning hook messages now include filename and line number.
831Fixed bugs in calling addworld() with fewer than 6 arguments. (40a5)
832Fixed /echo -w<name>. (40a5)
833Fixed word concatenation bug in /unique (lisp.tf) and command line completion
834  (complete.tf). (40a5)
835Fixed: on some systems (linux), changing %TZ did not affect the time zone.
836Fixed counting of comments in error message line numbers. (40a5)
837
8384.0 alpha 6 (1998-04-09)
839-----------
840Fixed fatal error for triggers and hooks in worlds without a type. (40a5)
841Fixed value of idle() before first keypress.
842
8434.0 alpha 5 (1998-04-09)
844-----------
845Added /result, which behaves like /return or /echo depending on context.
846Added -c"command" startup option.  See /help tf.
847The "n" attribute turns off pre-existing attributes.  See: /help attributes.
848Added addworld() function (which can accept arguments containing spaces).
849Replaced builtin /echo with echo().
850Tiny* LOGIN hooks put quotes around a character or password containing spaces.
851Added %binary_eol to determine end of line marker in TELNET BINARY mode.
852Added "proxy" and "login" world fields (for use as world_info(<field>) or
853  $world_<field>).
854Added tfflush(); tfwrite() flushes automatically by default.
855Added morescroll().
856Command line option -n is overridden by <world> or <host> <port>.
857Added -s option to /quote ` to control the substitution level.
858Added -rqw options to /ps.
859Duplicate input lines are not suppressed by /log -i.
860Filename completion (complete.tf) handles names starting with "~/".
861The names of bodyless triggers are mecho'd.
862Error messages during /load report the range of line numbers, not just the
863  misleading last line number, of the multiline command containing the error.
864Workaround for broken compilers that failed initialization at variable.c:86.
865Fixed evaluation of command in /qtf (in quoter.tf).
866Fixed /restrict security hole in tfopen(). (40a1)
867Fixed loss of -q flag with /edit.
868Fixed return value of /eval (and /not). (40a1)
869Fixed bug in parsing a comma after a non-color in attribute lists.
870Fixed bug in strlen(substr()).
871Fixed tfopen() with 0 arguments.
872Fixed ambiguous error message for nonblocking connect on some systems (linux).
873Fixed standard /proxy_command to honor /connect -l.
874Fixed: on some systems, 8-bit characters were not accepted as input even
875  when the locale settings were correct.
876Fixed spurious %pedantic warning in /elseif. (40a3)
877Fixed spurious %pedantic warning in /wrap [on|off].
878Fixed: executed code after /return, /while, /done inside /if or /while. (40a1)
879Fixed evaluation of variables used as function parameters. (40a1)
880Fixed /session in tintin.tf.
881Fixed incorrect "more" count after /fg -q. (35a20)
882
8834.0 alpha 4 (1997-12-28)
884-----------
885Added /exit to abort a /load.
886Added %auto_fg, so automatic foreground after disconnect is optional.
887Function forms of tr(), replace(), and grab() preserve spaces in arguments.
888read() is obsolete.  Use tfread() instead.
889Reconnecting to a world with a "dead" Socket will re-use that Socket.
890Variables used in %status_fields can not be unset.
891ESC-w in world-q.tf does something useful after disconnect and /bg.
892Restored old undocumented behavior of | and & returning value of last operand.
893Eliminated spurious pedantic warning for string in integer context, for
894  special variables with value 0. (40a3)
895Workaround for limitation in some versions (HP-UX) of "make".
896Fixed "restrict" error under new gcc due to conflict with "C9X" draft.
897Fixed handling of mod() by zero.
898Fixed redraw bug for changing isize while visual=off (e.g., in .tfrc).
899Fixed use of %? after error in /return or /test.
900Fixed "/return variable" and "/test variable" returning an empty value.
901Fixed %status_fields: right justification, strings containing ":". (40a3)
902Fixed: interrupt during a tfread() from the keyboard disconnected sockets.
903Fixed handling of world_info() with illegal field name. (40a1)
904Fixed /list for macros with -Fp0.
905
9064.0 alpha 3 (1997-11-20)
907-----------
908Blank space is not inserted automatically between fields of %status_fields.
909%status_fields may contain string literals.
910Added %pedantic to generate warnings about some potential problems in macros.
911Attribute lists can now contain multiple colors, using a comma separator.
912Eliminated misleading warning for "/more on". (40a2)
913Fixed use of %0 in trigger, hook, or keybinding. (40a1)
914Fixed bug in regexp triggers causing segfault at macro.c:1249, problems
915  with /dokey selfush (^[J), et al.
916Fixed /unset status_fields. (40a1)
917Fixed setting of executable name in unix/tfconfig. (40a1)
918
9194.0 alpha 2 (1997-11-06)
920-----------
921Fixed parameter subs for macro-as-command called by macro-as-function
922  (including ismacro() and /more). (40a1)
923Fixed use of color in %status_fields. (40a1)
924Eliminated unneeded 1s updates of visual more status. (40a1)
925Added warnings for new 4.0 semantics of old code.
926
9274.0 alpha 1 (1997-11-05)
928-----------
929Ported to Win32 (requires Cygwin Development Kit).
930%clock is no longer used.  See "/help %clock".
931%0 is the name of the executing macro.  This will break all existing code
932  that uses %0 like %*.
933Macros called as functions map function arguments to positional parameters.
934  This will break existing code that expects a single function argument
935  to be split into parameters by words.
936Added /return (the old /return in map.tf is now called /revert).
937Added the ability to format the visual status line ("/help %status_fields").
938Added %| pipes ("/help evaluation").
939Added floating point arithmetic.
940Added sin(), cos(), tan(), asin(), acos(), atan().
941Added abs(), exp(), log(), log10(), pow(), sqrt(), trunc().
942Added tfopen(), tfclose(), tfread(), tfwrite() ("/help tfio").
943Added inread(), nactive(), nlog(), nmail(), world_info(), fg_world().
944Added /listvar.
945Added %meta_esc.
946Added /echo -p.
947/listsockets -T<type> <name>.
948/listworlds -u -m<style> -T<type>.
949/purgeworld -T<type>.
950/send -T<type>.
951/load -q.
952/unworld and /undef take multiple <name> arguments.
953Added /edmac, /edvar, and /edworld in tools.tf.
954Added NOMACRO hook.
955getopts() supports numeric option arguments.
956Improved mecho detail.
957Macros can be called by number with "/#" syntax ("/help evaluation").
958Counter in visual More prompt is better updated.
959Partial attributes are always preserved by /recall.
960Clearing input buffer resets index for /dokey SEARCH[BF] functions.
961Optimized macro processing.
962Improved interactive response when sockets are very active.
963/list -s option may be mixed with other options.
964Fixed /substitute within /trigger.
965Fixed support for 8-bit locales, including support for LC_CTYPE, LC_TIME,
966  and LC_ALL variables.  See "/help locale".
967Fixed "tcsetattr: Bad file number" and disabled keyboard. (35b4)
968Fixed rare sometimes fatal bug in handling server attributes with lp=on
969  and a slow connection.
970Fixed duplicate command when /speedwalk and /mark (map.tf) are used together.
971Fixed compilation error involving conditional and hstrerror under some
972  lame compilers (socket.c:788).
973Fixed output misdirection during a read() inside a command sub.
974Fixed rare bug causing command line to execute in wrong world when a
975  simultaneous background trigger occurred.
976Fixed /world with no arguments.
977Fixed fatal input bug after /histsize -i. (35a21)
978Fixed bug which disabled history recording after /recall on an empty history.
979Fixed memory leaks in synchronous processes, etc.
980Fixed "/lp off" while at a prompt.
981Fixed opening of new descriptors after standard input redirection.
982Fixed bug in handling trailing '-' in a glob [] character class.
983
9843.5 beta 4 (1997-04-04)
985----------
986Fixed keyboard lockup or "Bad file number" during fast input. (35b3)
987Added ./.tfrc and ./tfrc to the list of files searched for at startup.
988
9893.5 beta 3 (1997-03-24)
990----------
991Can run without a terminal (e.g., with input redirected from a file).
992Fixed /paste. (35b2)
993Fixed sometimes fatal bug in hiliting server text. (35b2)
994Fixed "handle_keyboard_input: read: Bad file number" during fast input. (35b2)
995
9963.5 beta 2 (1997-03-21)
997----------
998The LOGIN hook no longer has <character> and <password> arguments; use
999  ${world_character} and ${world_password} instead of %2 and %3.
1000Added /trigger -h, to call hooks.
1001Added /addworld -p, to make local connections ignore %proxy_host.
1002Added %connect.  Try "/set connect=blocking" if you have new problems when
1003  trying to connect.
1004Added ++ and -- prefix operators.
1005Fixed possible corruption when redefining world with "/addworld -Ttype name".
1006Output generated before a synchronous process starts is displayed before the
1007  process starts.
1008/dokey SELFLUSH (^[J) does not consider lines with only -aG "interesting".
1009/dokey SEARCHB and SEARCHF (^[p and ^[n) match only proper prefixes, not
1010  an exact match.
1011Improved screen appearance after resizing window, changing %isize, or
1012  receiving SIGINT or SIGQUIT.
1013Fixed "/edit -an" and "/edit -P<n>n".
1014Fixed %hilite.
1015Fixed connect loop under SOCKS, possibly others.
1016Fixed bug in handling illegal combination of /def -P and -h.
1017Improved error messages for syntax errors.
1018Minor portability improvements for other operating systems.
1019
10203.5 beta 1 (1996-12-08)
1021----------
1022Added fwrite() function to write text to a file.
1023Added pad() function for string formatting.
1024Fixed handling of quickly received keybindings. (35a21)
1025Fixed compiling errors under HP-UX ANSI compiler.
1026Fixed /list'ing of macros with names beginning with "-".
1027
10283.5 alpha 21 (1996-10-12)
1029------------
1030Added /def -B to bind symbolic key names.  (Note: TERM=vt100 should not
1031  be used on xterms).
1032Added keycode(), lines(), columns(), and send() functions.
1033Added "init" argument to getopts().
1034Added "-s" option to /listworlds.
1035Added /fgrep, /grep, and /egrep.
1036Repeated lines are not saved in input history.
1037Documented /finger, mapping, /psh, /spell_line, /tick, /tr.
1038/finger and /rwho do not interfere with world-q.tf or other WORLD hooks.
1039Changed default value of %end_color (see /help color).
1040Improved error checking of /def, /quote, /recall.
1041Improved handling of return value of failed /sh.
1042Fixed bug in error checking /def name. (35a20)
1043Fixed multiple beeps when one beep was combined with multiple attributes.
1044Fixed bug in calling /localecho while not connected.
1045Fixed nonblocking connect on AIX.
1046Fixed fatal bug occurring when !visual & refreshtime >= 1000000.
1047Fixed fatal bug in visual mode with a terminal width between 56 and 58. (35a17)
1048Fixed rare fatal bug occurring after deleting keybindings.
1049Fixed '\0' being sent as '\0200'.
1050Fixed flow control and spurious "SQ" on some slow terminals.
1051Fixed blocking during /quote ! with a delayed process. (35a18)
1052Fixed /edit options -t, -h, -T.
1053Fixed bug in glob matching under nonstandard compilers. (35a17)
1054Fixed possible busy wait.
1055Workaround for bug in BSD/386 make.
1056
10573.5 alpha 20 (1996-06-16)
1058------------
1059Added -w and -g options to /trigger.
1060Added -q option to /fg to ignore queued text.
1061/push, /pop, /enqueue, /dequeue (in stack-q.tf) can work on local variables.
1062Improved error checking of /def arguments.
1063%redef defaults to "on".
1064REDEF hook comes after, not before, keybinding redefinition.
1065Fixed /ps -s displaying dead processes. (35a19)
1066Fixed /qdef in quoter.tf.
1067Fixed compile problem in port.h under nonstandard compilers. (35a19)
1068Fixed fatal bug in /recordline -i at multiple of histsize.
1069Fixed /beep argument bug.
1070Fixed deferring of "/dokey newline" in a macro. (35a17)
1071Eliminated obsolete arguments to /def -1.
1072
10733.5 alpha 19 (1996-05-27)
1074------------
1075/echo -e writes text to tferr.
1076Hook messages are written to tferr.
1077Improved example under "/help def".
1078Added -s option to /eval to control the substitution level.
1079/xtitle works even behind a more prompt.
1080Added -s "short form" option to /listsockets and /ps.
1081Added moresize() to get number of lines queued at more prompt.
1082Fixed bugs in /cat: error message, and extra evaluation.
1083Fixed bug in getopts() handling of options followed by no arguments. (35a11)
1084Fixed bug in executing other macros during read() (and /paste).
1085Fixed bug in handling TELNET protocol combined with 8-bit character sets.
1086Fixed documentation of DISCONNECT hook.
1087
10883.5 alpha 18 (1996-04-19)
1089------------
1090Fixed (sometimes fatal) bug trying to send text in unconnected mode. (35a17)
1091Fixed bug in getting telnet options from wrong connection. (35a17)
1092Fixed telnet NAWS sending only to current connection. (35a10)
1093Fixed telnet NAWS not working at initial connect. (35a17)
1094Workaround for NextStep namespace violation. (35a17)
1095
10963.5 alpha 17 (1996-04-13)
1097------------
1098Added read() function to read lines of keyboard input.
1099Added echo() function.
1100substr() arguments can count from end of string; right() is obsolete.
1101Added %PL and %PR subs to get left and right ends of regexp match.
1102Expression and command subs ($[] and $()) work in variable sub defaults.
1103/paste handles lines beginning with '/', and does not record input history.
1104Visual mode defaults to "on" unless explicitly set "off" in .tfrc.
1105Warns when memory is low.
1106RFC 854/1123 compliance: transmits CR NL at end of line in NVT mode; escapes
1107  IAC; supports BINARY and WILL SGA requests.
1108Redefining worlds that are in use is allowed.
1109Drastically increased speed of pipes ("/quote !").
1110Fixed toupper() and tolower() handling of international characters? (35a16)
1111Fixed compiling problem in prototype under nonstandard compilers. (35a16)
1112Fixed fatal bug in accepting NUL character as input on some systems. (35a16)
1113Fixed rare bug in using /quote -S inside another /quote.
1114Fixed <sys/select.h> problem on some systems (BSD). (35a16)
1115Created tinyfugue mailing list (see "/help mailing list").
1116
11173.5 alpha 16 (1996-03-10)
1118------------
1119Honors LANG locale and supports international character sets.
1120Added right() function.
1121/localecho replaces %always_echo; improved echo handling on telnet servers.
1122Added -q option to /def to avoid "Trigger in world <name>" messages.
1123Hilites and gags of hooks are applied even if %{hook}=off.
1124Return and backspace keys works even if keybindings are undefined.
1125Changed default value of %wordpunct.
1126Improved format of automatically generated helpfile.
1127Fixed problem installing in paths containing "~" on some systems. (35a14)
1128Fixed %sub=on and %sub=full. (35a11)
1129Fixed /cat. (35a15)
1130Fixed -m option of gags defined by /watchname.
1131Fixed /help addworld and addtelnet. (35a15)
1132Fixed bug in using input recall immediately after /histsize -i.
1133
11343.5 alpha 15 (1996-02-11)
1135------------
1136Fixed <sys/stat.h> compiling problem on some systems (FreeBSD, OS/2). (35a14)
1137Fixed subsection headers in automatically generated help file. (35a14)
1138Fixed input insert display on terminals with insert_char (eg, xterm). (35a14)
1139Fixed problem installing in paths containing "~" on some systems. (35a14)
1140Fixed fatal problem in displaying error messages during startup.
1141Fixed loss of %Pn variables in a trigger with a partial hilite.
1142Improved efficiency of triggers and other pattern matching.
1143
11443.5 alpha 14 (1996-01-21)
1145------------
1146/addworld warns when passwords are found in world-readable files.
1147"/recall -v" recalls lines that don't match pattern.
1148"/recordline -t" allows setting of line's timestamp.
1149Changing %TZ refreshes clock on status bar.
1150MAIL hook will not recurse (allowing "/hook MAIL = /sh mail" to work).
1151Improved efficiency of glob patterns ending in "*".
1152Decreased annoying delay in cursor refresh in visual mode.
1153Helpfile is generated automatically from html source.
1154Fixed fatal bug in displaying long prompts (now only last line is displayed).
1155Fixed bug in displaying very long input lines in visual mode.
1156Fixed declaration error in search.h under nonstandard compilers.
1157Fixed handling of uppercase keywords (/IF, /WHILE, etc.). (35a12)
1158Fixed listing and saving of macros defined with /def -PC. (35a9)
1159Fixed declaration problem under HP-UX compiler.
1160Fixed output handling when %emulation is changed (including /xtitle).
1161Internal changes.
1162
11633.5 alpha 13 (1995-10-08)
1164------------
1165Options parsed by getopts() can take numeric arguments.
1166Fixed fatal bug in handling background prompt with ansi attributes. (35a11)
1167
11683.5 alpha 12 (1995-09-24)
1169------------
1170Fixed fatal macro bug occuring during startup on some systems (including
1171  OS/2, Linux, and IRIX). (35a11)
1172Fixed minor bug in telnet NAWS when a window dimension is 255. (35a10)
1173
11743.5 alpha 11 (1995-09-17)
1175------------
1176Added getopts() function to parse macro options.
1177Displays attributes in server prompts with emulation=ansi_attr.
1178The SEND hook (and therefore aliases) can be called recursively.  Use
1179  "/send <text>" instead of "<text>" to avoid the SEND hook.
1180Macros and file loading (and therefore startup) are faster.
1181Fixed default %end_color for background colors. (35a9)
1182Fixed bug in telnet NAWS on little-endian machines (Intel). (35a10)
1183
11843.5 alpha 10 (1995-08-31)
1185------------
1186Hidden keyboard input (e.g. passwords) are gagged in history and not visible
1187  with keyboard recall functions.
1188Added telnet NAWS option to send window size to server.
1189Added time() and ftime() functions.
1190Fixed use of combined background and foreground color. (35a9)
1191Fixed bugs in emulation=ansi_attr handling of codes at start and end of line.
1192Fixed /help index alignment bugs. (35a)
1193Fixed strip of leading space in /def (also affects filenames $LOGFILE and
1194    $WORLDFILE) (35a9)
1195Fixed handling of bell (^G) under emulation=ansi_attr.
1196Removed unnecessary stuff from output of /qdef in quoter.tf.
1197Removed %emulation=canon.
1198
11993.5 alpha 9 (1995-08-12)
1200-----------
1201Added ascii() and char() functions.
1202Supports ANSI background color attributes from server if %emulation=ansi_attr.
1203Supports ANSI background color attributes in -aC options.
1204Function idle("world") gives idle time of world's socket.
1205/ps displays times in hh:mm:ss format.
1206Nonprintable characters are displayed as printable bold-reverse (but
1207  %emulation still determines how characters from a socket are interpreted).
1208Nonprintable characters may be input literally from the keyboard.
1209Nonprintable characters in prompts do not cause wrapping problems anymore
1210  (but are still not treated as attributes).
1211Added -d option to /quote to determine how generated text is used.
1212Added ESC-space keybinding to collapse spaces.
1213Echoes new command during ^old^new style history substitution.
1214Removed %emulation=canon functionality.
1215Fixed bug in getting a few special variables from environment. (35a8)
1216Fixed fatal bug in ?: in unevaluated branch (includes a bug in complete.tf).
1217Fixed need to escape '\' in an unquoted command part of a /quote (e.g.,
1218  in an OS/2 filename).
1219
12203.5 alpha 8 (1995-07-16)
1221-----------
1222Added convenient "/if (expr)" and "/while (expr)" syntax.
1223Added ability to connect via proxy server (firewall).  See: /help proxy.
1224Added "/!command" syntax for negating return values.
1225Added spell.tf library, to do spelling checking by typing ESC-s.
1226Allows /connect to closing world in DISCONNECT hook.
1227Fixed prompt update after socket disconnect.
1228Fixed installation problem on systems without getpwnam().
1229
12303.5 alpha 7 (1995-07-01)
1231-----------
1232Command and macro substitutions are allowed inside expressions.
1233Gags are applied when text arrives instead of when it is displayed, making
1234  the "More" line counter more intuitive.
1235Improved error and warning messages.
1236Added %{gethostbyname} variable, set to "blocking" by default under unix.
1237Fixed /histsize: empty history bug, and downsizing memory leak.
1238Fixed fatal bug in /send -w to a nonexistant world.
1239Fixed regexp scope bugs (including a bug in the ^W keybinding). (35a4)
1240Fixed bug in handling bad environment values for special variables (it would
1241  usually just say "Killed" and exit).
1242Fixed bug in assigning variable to itself.
1243Fixed problem on OS/2 with full tcp/ip. (35a5)
1244
12453.5 alpha 6 (1995-05-29)
1246-----------
1247Second operand of ?: operator is optional.
1248Increased range of "more" counter.
1249Fixed error in /listsockets under nonstandard C libraries (in particular,
1250  those on SunOS 4.x and ULTRIX). (35a5)
1251Fixed problem on OS/2 with resolved host addresses containing 0x0d. (35a5)
1252
12533.5 alpha 5 (1995-05-21)
1254-----------
1255New /listsockets format, includes idle time and world type.
1256With emulation=ansi_attr, server attributes now continue across lines.
1257Supports nonblocking hostname lookup on OS/2 as well as UNIX.
1258Fixed /dc. (35a4)
1259Fixed bug in using /histsize on a non-existant or unused world. (34a3)
1260Fixed select on closed pipe (35a4).
1261Fixed compile-time rand()/random() problem on OS/2 (35a4).
1262Fixed hostname resolution on IRIX 5 (without breaking socket stuff on other
1263  systems, I hope).
1264
12653.5 alpha 4 (1995-05-07)
1266-----------
1267/eval inherits positional parameters (%1, etc) from calling macro.
1268New "{...}" expression operands for variable and parameter substitution,
1269  eliminates need for many temporary variables, messy multiple '%', and
1270  $[...] in /test.
1271Nonblocking hostname lookup for UNIX, and better error messages.
1272Third argument to substr() is optional, defaults to full length of string.
1273Improved prompting-world detection heuristics in stdlib.tf.
1274Fixed problems with leading "-" in /changes, /complete, and /replace.
1275Fixed bug that could make a dead socket impossible to bring into foreground.
1276Fixed unexpected loss of regexp substitution values (e.g., %P1).
1277Fixed bug in hooks under nonstandard compilers.
1278Workarounds for several instances of ULTRIX brain damage.
1279
12803.5 alpha 3 (1995-04-08)
1281-----------
1282Ported to OS/2 by Andreas Sahlbach (asa@stardiv.de).
1283Text generated by /quote without a prefix is transmitted directly, not
1284  interpreted, so leading '/' and spaces remain intact.
1285The character ^@ is allowed in keybindings.
1286Added systype() expression function.
1287Added /finger in finger.tf.
1288%{emulation} now defaults to "ansi_attr"; display control codes received
1289  from the server (which were never officially accepted) are now explicitly
1290  stripped.  See:  /help emulation.
1291Added kbmatch(), /kb_goto_match, and ^[- keybinding to match parentheses.
1292New default filenames for /load* and /save*.
1293Reorganized installation to work with multiple architectures.
1294Workaround for ULTRIX sh bug causing installation failure if missing 'strip'.
1295Fix for DG/UX version of inet_addr() (not fixed in 34a9).
1296Renamed files to fit within 8.3 FAT filesystem restrictions.
1297Fixed interpretation of ~ in TFLIBDIR in /changes.
1298Fixed rare bug involving /quote ! processes that pause between lines.
1299
13003.4 alpha 16 (1995-01-08)
1301------------
1302Fixed bug in glob patterns containing '*' followed by an escaped special
1303  character (e.g., "*\*").
1304Fixed "sh: illegal i/o" problem during installation on ULTRIX. (34a)
1305
13063.4 alpha 15 (1995-01-02)
1307------------
1308Fixed (often fatal) bug in substr() with large 3rd argument (as in /escape
1309  and /tr). (34a13)
1310Fixed minor display quirks when entering visual mode on some systems. (34a11)
1311Changed parsing of ambiguous special substitutions like "%Lx" to be "%{Lx}"
1312  instead of "%{L}x", but "%L1x" is still parsed as "%{L1}x". (34a12)
1313
13143.4 alpha 14 (1994-12-30)
1315------------
1316Fixed instalation problem on SunOS 4.1.3 (possibly others). (34a13)
1317
13183.4 alpha 13 (1994-12-28)
1319------------
1320Faster and theoretically more reliable function testing in autoconfig.
1321Fixed portability to systems without strchr() and strcspn().
1322Internal changes to facilitate future ports to other operating systems.
1323
13243.4 alpha 12 (1994-12-17)
1325------------
1326Fixed bug in parsing undelimited parameter subs (e.g., "%1x"). (34a)
1327Fixed fatal bug in failed bamf, and minor bug in successful bamf.
1328Fixed fatal bug occurring when one process /kills another (as in /tick).
1329Fixed installation bug occurring in some shells.
1330
13313.4 alpha 11 (1994-12-04)
1332------------
1333%{clock} can be set to "12-hour" or "24-hour" format.
1334Can automatically detect the need for lp=on for some typeless worlds.
1335Optimized output.
1336/mapcar and /maplist (in lisp.tf) no longer evaluate their arguments.
1337More useful return value for /listworlds.
1338Improved mail check.
1339Fixed compilation error on HP-UX (34a3).
1340Fixed fatal bug in handling small terminal resizes.
1341Fixed fatal bug in /trigger (34a3).
1342Fixed handling of '\', '%%', '$$' in variable substitution defaults (34a3).
1343autoconfig works with stupid linkers that return a useless exit status.
1344
13453.4 alpha 10 (1994-10-09)
1346------------
1347Fixed fatal bug occuring when history becomes full (34a9).
1348
13493.4 alpha 9 (1994-10-09)
1350-----------
1351Added /dokey RECALLBEG and RECALLEND (ESC < and ESC >) to jump to ends of
1352  input history.
1353If not set in the environment, default values for %{TFLIBRARY} and %{TFHELP}
1354  are derived at runtime from %{TFLIBDIR}.
1355Added "~user" home directory filename expansion, as in modern shells.
1356Added filename() function to do filename expansion in expressions.
1357File commands behave better when operating on a directory.
1358Fixed fatal bug in watchdog and watchname when connecting to a world (34a8).
1359Fixed bug in /dokey RECALLB (^P) causing it to stop early (34a8).
1360Support for the DGUX version of inet_addr() (not really fixed until 35a3).
1361Fixed handling of plain '%' during newline expansion.
1362
13633.4 alpha 8 (1994-09-25)
1364-----------
1365/histsize now works at any point, not just when history is small.
1366Fixed infinite loop in SIGQUIT (^\) handler on systems with BSD-like signals.
1367Fixed fatal bug in backward-wrapping delete in visual mode on some terminals.
1368Installation no longer gives the option of removing old files; it caused too
1369  many problems with users who answered 'y' without reading the list first.
1370Porting fix: elimiated 'signed' type (34a).
1371Better preprocessor and library testing in autoconfig.
1372Improved make output and core dump messages.
1373
13743.4 alpha 7 (1994-08-28)
1375-----------
1376Improved messages for expression syntax errors.
1377Fixed bug on systems without strcasecmp(), causing many startup errors (33b).
1378Fixed bug causing all evaluation to stop after a user syntax error in an
1379  &, |, or ?: expression (34a3).
1380Workaround for fatal error due to overly large termcap entries/continuations.
1381Porting improvements in autoconfig for stupid systems.
1382In quoter.tf, /qmud takes an optional -w<world> argument.
1383
13843.4 alpha 6 (1994-08-17)
1385-----------
1386Standardized /sys.
1387Fixed %{oldslash} (34a).
1388Fixed bugs in prompt refresh in nonvisual mode (34a).
1389
13903.4 alpha 5 (1994-08-16)
1391-----------
1392Added to file-xfer.tf library: /putfile_MUCK, /putfile_LP, /putfile_UNIX,
1393  /getfile_MUCK, /getfile_LP, /getfile_UNIX.
1394Fixed: glob pattern "{}" matches empty string (34a).
1395Elminated beep in /grab (34a).
1396
13973.4 alpha 4 (1994-08-16)
1398-----------
1399Added the ?: conditional operator, as in C.
1400Documented some previously undocumented library commands.
1401Fixed handling of whitespace in /recall between range and pattern.
1402Fixed compile-time header problems involving time_t and errno. (34a3)
1403In file-xfer.tf, fixed /putfile's handling of lines beginning with "/".
1404
14053.4 alpha 3 (1994-08-14)
1406-----------
1407In visual mode, uses terminal's insert/delete if available (e.g., vt220
1408  and ANSI, but not vt100).  Very nice at low baud rates.
1409Can interpret ansi attribute codes from server: /set emulation=ansi_attr.
1410Can work with almost any display codes from server: /set emulation=raw.
1411Added variables %{tabsize} and %{emulation}, removed %{catch_ctrls}.
1412Default values for variable substitutions may now contain nested variable
1413  and macro substitutions (e.g., %{USER-%{LOGNAME-nobody}}).
1414Added more default keybindings (see "/help keys").
1415Expression operators '&' and '|' now stop evaluating as soon as value is
1416  known ("short-circuit").
1417Added strncmp() to compare first n characters of strings.
1418Added idle() to get time since last keypress.
1419Added /histsize and %{histsize} to control history sizes.
1420Added macro name completion to completion.tf library.
1421Added /paste and /endpaste to quote pasting.
1422Added hooks SIGUSR1 and SIGUSR2.
1423Added /signal to send a signal to tf.
1424Added getpid() to get tf's process id.
1425More useful return values for synchronous /repeats and command /quotes.
1426A set high bit on an input character is converted to ESC.  See /help %istrip.
1427Increased speed of macro processing, startup, etc.
1428Supports nonblocking connect if used with SOCKS 4.2beta.
1429/BREAK takes an optional argument specifing the number of levels to break.
1430Under linux, nonblocking connect failure now hooks CONFAIL, not DISCONNECT.
1431Removed improper evaluation of $[...] in unexecuted /if and /while branches.
1432Fixed bug in /BREAK followed by a nested /WHILE.
1433Fixed bug in detecting new mail in a previously nonexistant mail file.
1434Fixed bug: lines from background world were reversed in global history/log.
1435Fixed refreshing of input in noecho mode (password entry) with visual=off.
1436Fixed bug causing writing into variable argument of toupper(), tolower(),
1437  or builtin command called as a function.
1438Fixed bugs in idea of current socket in CONFAIL hook and immediately after
1439  /fg and (successful or failed) /connect.
1440Fixed bug in /purgeworld'ing a nonexistant "default" world.
1441Reverted to pre-33b16 parsing of '\' in option arguments (not a bug, but
1442  caused unexpected behavior of incorrectly written user macros).
1443Improved debugging information for potential internal errors.
1444Internal changes.
1445
14463.3 beta 16 (1994-06-10)
1447-----------
1448Fixed bug in trying to redefine a connected world (33b12).
1449Porting fix for old versions of gcc (33b15).
1450Minor change in parsing '\' in option arguments.
1451
14523.3 beta 15 (1994-06-04)
1453-----------
1454Sped up macro processing, socket input, etc.
1455Workaround for systems that have strcasecmp() but don't declare it (33b14).
1456
14573.3 beta 14 (1994-06-03)
1458-----------
1459Fixed bug in using "/log off" when no logs were open (33b10).
1460Miscellaneous minor improvements, mostly internal.
1461
14623.3 beta 13 (1994-05-28)
1463-----------
1464Fixed fatal bug in opening unnamed worlds (33b12).
1465
14663.3 beta 12 (1994-05-27)
1467-----------
1468More meaningful return values for /recall and /time.
1469Fixed bug in using /edit without -m on a macro defined with -m.
1470Fixed bugs in input display when local echo is off.
1471Fixed bugs in redefining worlds and undefining "default" world.
1472Fixed use of "on" with /watchname and /watchdog, and bug in /watchname.
1473
14743.3 beta 11 (1994-05-25)
1475-----------
1476Fixed bug in using /connect not followed by (automatic) /fg.
1477Fixed fatal bug in nonvisual --More-- prompt with lp==on.
1478Fixed minor bug in /quitdone.
1479Added attributes to --More-- prompt in nonvisual mode.
1480
14813.3 beta 10 (1994-05-22)
1482-----------
1483Added line counter to more prompt in visual mode.
1484Added synchronous /quote and /repeat for immediate, inline processing.
1485"/log off" turns off all logs; use "/log -g off" to turn off global log only.
1486Improved handling of very large amounts of text from server.
1487Fixed bug in error handling in /undefn.
1488Porting fix for sys_errlist[] declaration (NetBSD).
1489Ported to nonstandard systems with bcopy & bzero but not memcpy & memset.
1490Fixed bug in using /recall with wraplog==on (33b7?).
1491Fixed minor bug in using "nw" or "se" in map.tf.
1492Improved /qmac in quoter.tf.
1493
14943.3 beta 9
1495----------
1496Added help topics for some library utilities.
1497In alias.tf, arguments to aliases now make more sense.
1498Added /dokey selflush ("selective flush") bound to ^[J.
1499Gracefully handles wrapping when text contains ansi display attribute codes.
1500Fixed obscure bug in using current socket right after disconnecting from it.
1501
15023.3 beta 8 (1994-05-10)
1503----------
1504Fixed bug in wrapped input lines in nonvisual mode (33b7).
1505Fixed minor quirks with input/output display in nonvisual mode (33b7).
1506
15073.3 beta 7 (1994-05-09)
1508----------
1509Added support for SOCKS firewall proxy connections (ala rtelnet).
1510Improved error messages.
1511Improved handling of printing large amounts of text.
1512Removed restriction that world be connected for /echo -w<world>.
1513Fixed bug in handling invalid variable values.
1514Fixed obscure bug in fall-thru triggers/hooks which define another matching
1515  trigger/hook of lower priority.
1516Fixed obscure bug in a PROCESS hook that kills its own process.
1517Fixed obscure bug in typing ^@ at startup.
1518Fixed bug in /savehilite (33b6).
1519Plugged memory leak in macro specification commands.
1520Internal changes.
1521
15223.3 beta 6 (1994-04-28)
1523----------
1524Added SIGHUP and SIGTERM hooks.
1525/savehilite and /listhilite include partial hilites.
1526Added /listpartial and /listfullhilite.
1527Fixed porting problems (33b5).
1528
15293.3 beta 5 (1994-04-26)
1530----------
1531Added %{max_iter} to control runaway /while loops.
1532Improved /listsockets format.
1533Added options to /fg.
1534Workaround for Solaris brain damage.
1535Eliminated spurious error message when reading compressed file.
1536Fixed bug in wrapping input with insert=off.
1537Fixed small omissions in tf.help.
1538Internal changes.
1539
15403.3 beta 4
1541----------
1542Minor fix in idea of current world after /fg in fall-thru triggers/hooks.
1543Minor fix for recall messages while logging.
1544Fix for empty /cat text.
1545Internal changes.
1546
15473.3 beta 3
1548----------
1549In completion.tf, added /complete_input_history (ESC i).
1550In lisp.tf, added /unique.
1551Fixed error checking in rand().
1552Fixed bug in failed keybinding redef (caused core on Linux) (33a).
1553Fixed potentially fatal bug in oneshots.
1554
15553.3 beta 2 (1994-03-09)
1556----------
1557Fixed "OOPS" problem with simulated scrolling on deficient terminals (33a).
1558Fixed error on old systems without FD_SET() and friends, e.g. AIX (33a).
1559Fixed a few other minor problems with porting to strange systems.
1560
15613.3 beta 1 (1994-03-03)
1562----------
1563Changes since 3.2 beta 4:
1564Added /substitute, /connect, /fg, /dokey dword, /prompt, PROMPT hook, mod(),
1565  kblen(), kbwordleft(), kbwordright(), %{wordpunct}, %{telopt}.
1566Partial hilites enhanced to work on multiple matches on the same line.
1567Regexp subexpressions can be accessed as Pn variables as well as %Pn subs.
1568"/recall /n pattern" recalls the last <n> lines that match <pattern>,
1569  instead of searching for <pattern> in the last <n> lines.
1570Improved "randomness" of random numbers.
1571Made word editing functions more like those in emacs, bash, tcsh.
1572Added support for up to 16 colors.
1573The SEND hook can be activated by any text command, not just command line.
1574The SEND hook always prevents sending of the original text (previous versions
1575  of TF required a gag to do so).  Use "/send %*" in the hook body if you
1576  really want it to be sent.
1577/def -w is equivalent to /def -w${world_name}.
1578/kill can take mutiple arguments.
1579Several improvements in display of major editing operations (visual and
1580  nonvisual).
1581/dokey redraw (^L) now does something useful in non-visual mode.
1582Increased speed of macro execution by about 15%.
1583Improved visual input scroll for terminals without scroll regions.
1584Improved appearace of external messages (e.g. "write") in visual mode.
1585Fixes for bugs and portability.
1586Removed %{quoted_args}.
1587
1588
15893.2 beta 4
1590----------
1591Fixed a bug that prevented %P subs from working after a regexp trigger.
1592
15933.2 beta 3
1594----------
1595Fixed bug in /hook causing macros to be defined with -t"" -aCred.
1596
15973.2 beta 2
1598----------
1599Fixed fatal bug in /hook.
1600
16013.2 beta 1 (1993-12-19)
1602---------------------
1603Added rand(), kbdel(), %{scroll}, %{clock}.
1604Added REGULAR EXPRESSIONS, and ability to extract arbitrary pieces of
1605  of matched text using %Pn.  See: patterns, matching, regmatch, %Pn.
1606Added "Partial hilites" - hilite part of a line.  (see /partial, /def -P).
1607Installed utilities directory, includes:  many advanced keybindings;
1608  /alias; /at; /putfile; speedwalk; mapping; shell utilities; quoting
1609  utilities; logging utilities; /rwho; Diku tick counter; etc.
1610More useful return values for macro creation, /quote, /repeat, and /dokey.
1611Symbolic values and type checking for special variables.
1612In expressions, "=" does comparison, not assignment.  ("==" still compares).
1613In expressions, ":=" does assignment.
1614Assignment expressions can create a new global (not local) variable.
1615Mecho nests, and doesn't echo invisible macros.
1616/send can send a blank line.
1617Added ability to avoid automatic switch when pending connect completes.
1618Control constructs (/if and /while) can be used from command line.
1619Detects and warns about some common user macro mistakes.
1620Better handling of toggling %{lp} (e.g., when switching worlds).
1621Better error messages for files.
1622Internal redesign of screen handling, cursor and write() optimization.
1623Other internal changes.
1624Fixed \] bug in [...] patterns.
1625Improved installation portability.
1626Increased speed of macro execution by about 15%.
1627
1628
16293.1 beta 5
1630----------
1631Fixed divide-by-zero in user expressions.
1632Improved error handling for some other expression errors.
1633Renamed "signal.h" for stupid compilers.
1634
16353.1 beta 4
1636----------
1637Fixed bug in "[^...]" patterns.
1638
16393.1 beta 3
1640----------
1641Fixed ULTRIX time_t bug (really).
1642
16433.1 beta 1
1644----------
1645New inline nonblocking connect.  Should work automagically on all platforms.
1646Added many useful and educational macros in utilities directory.
1647Added -T<worldtype> option to /def for triggers and hooks.
1648Added expression functions.
1649New expression functions: strcmp, strstr, strchr, strrchr, strlen, substr,
1650  strrep, toupper, tolower, kbhead, kbtail, kbpoint, kbgoto.
1651Added = (assignment) and , (comma) operators to expressions.
1652Macros and builtin commands can be called from expressions as functions.
1653Added /escape, %{ignore_sigquit}, %{quoted_args}, removed -DQUOTED_ARGS.
1654Recognizes "*^H" as LP editor prompt (useful with /lpquote).
1655Handles ^H from server.
1656Error checking for patterns in /hilite, /gag, /trig*.
1657For backward compatibility with pre-3.0, default world type does not change
1658  any flags (lp, always_echo).
1659Autoconfig is even smarter.
1660Bug fixes for lp prompts (background worlds, etc).
1661Bug fix for negative numbers stored as strings.
1662Bug fix for redefining worlds with -T.
1663Fixed signal (TSTP, ^Z) delay on SVR4.
1664Fixed mysterious and rare "2" hilite bug (3.0)
1665Fixed world leak in /dc on pending socket.
1666Other portability stuff.
1667
16683.0 beta 2
1669----------
1670Added time arithmetic in expressions.
1671Bug fix: identifers in expressions can contain '_' chracters.
1672Bug fix: added -T option to /addworld to support extended /add* commands.
1673Added <type> argument to WORLD and LOGIN hooks.  May break a few old macros.
1674PROCESS and KILL hooks are silent by default.
1675Portability improvements in installation.
1676
16773.0 beta 1 (1993-09-11)
1678--------------------
1679NEW COMMANDS:
1680/addlp, /addlpp, /addtelnet, /addtiny, /eval, /export, /expr, /for,
1681/if, /let, /not, /rand, /recordline, /restrict, /set, /setenv, /shift,
1682/suspend, /telnet, /test, /time, /toggle, /unset, /while.
1683
1684NEW FEATURES:
1685Installation is completely automated and configurable.
1686Examples directory.
1687Variables (local, global, and environment)
1688Conditional programming constructs: /if, /then, /elseif, /else, /endif.
1689Loop programming constructs: /while /do /done, /for, and /break.
1690Evaluation programming constructs:  /eval, /not.
1691Math operations with $[...] and /test (see "expressions").
1692Command substitution with $(...) (see "expansion").
1693Official support for user-defined hiliting (color).
1694Timestamps in history /recall.
1695Fall-thru triggers and hooks (/def -F), for multiple priority matches.
1696LNEXT (^V), SEARCHB (^[p) and SEARCHF (^[n) key functions.
1697Added CONFLICT and SHADOW hooks.
1698Supports telnet GOAHEAD and EOR end-of-prompt markers (/lp on not required).
1699Added -n option to /send.
1700Added -a (append) option to /save and /saveworld.
1701Secure public installation with /restrict.
1702Allows macros to override builtin commands.  Use "/@name" to call builtin.
1703
1704NEW RUNTIME OPTIONS:
1705Variable-controlled features:  MAIL, TERM, TFCONNECT, TFHELP, TFLIBRARY,
1706  always_echo, backslash, barattr, bg_output, catch_ctrls, hiliteattr,
1707  maildelay, max_recur, oldslash, prompt_sec, prompt_usec, refreshtime,
1708  snarf, sockmload, time_format, wraplog.
1709
1710FIXES/IMPROVEMENTS:
1711Much improved handling of LP/Diku prompts (see "prompts").
1712Using RECALLB and RECALLF (^P and ^N) will not destroy current line.
1713Multiple '/'s in macro expansion are no longer required.
1714Added '\' escape character to macro expansion.
1715Option arguments may use ' and ` as well as " for delimiters.
1716Hexadecimal and octal ascii backslash substitutions and keybindings.
1717Removed flaky +|- args from /list -t -b -h.  Use "", "{}", or "0" instead.
1718Optimized [] in patterns.
1719Uses termcap definitions for arrow keys.
1720Supports standout (bold) and underline on more terminals.
1721Better /visual support on wimpy terminals (no "cs" or "ce" termcap entry).
1722Supports nonblocking connect on BSD 4.3 Reno and later systems.
1723Expands tabs from mud and in /quote and /load input.
1724Handles changes in window size during /sh and suspension.
1725Correctly handles shell i/o redirection in "/quote !".
1726Better handling of spaces with wrapping and /wrapspace.
1727Disabled /quiet when autologin is disabled.
1728Fixed substitution of "normal" macros of the form "world_*".
1729Fixed bug in using /world or other commands in CONFAIL hook.
1730Fixed bug in using /world in configuration file.
1731Fixed handling of suspend during /sh.
1732Fixed bug in nonvisual mode when gagged line is (not) printed.
1733Improved efficiency.
1734Many portability fixes.
1735Many other bug fixes.
1736
1737
17382.1 beta 2
1739----------
1740Bug fixes
1741
17422.1 beta 1 (1992-09-22)
1743--------------------
1744Added BAMF, SHELL, LOGIN hooks; /retry; file compression; multi-shots.
1745Added logging by world (/log -ligw).
1746Hooks are more like triggers:  multiple hooks, argument patterns, priority.
1747Keybindings are now macros (/def -b).
1748Fixed nonblocking connect.
1749Added redirected output for /quote and /repeat with -w option.
1750Added "/world <host> <port>" semantics.
1751Added local command quoting (/quote `).
1752Improved argument substitution:  %{} syntax, orthogonal default values.
1753Added -f<file> command line option.
1754/repeat and keybinding bodies go through macro expansion.
1755Bug fixes.
1756Removed /stty.
1757
17582.0 beta 2 - 7
1759--------------
1760Bug fixes
1761
17622.0 beta 1 (1992-07-08)
1763-------------------
1764Made installation easier and automated
1765New command line syntax:  removed '-', added '-fln' options
1766Added standard macro library, replacing many builtin commands.
1767Added hooks; /hook; /unhook; /background; /def -w; /def -i; /input; /list;
1768  /load; /save; /purge; /send; /echo -a; /echo -w; attributes underline,
1769  reverse, flash, dim, bell, norecord.
1770Added world histories, local history, global history, and /recall -lig
1771Nonblocking /more
1772Nonblocking world connections
1773Filenames defined with BINDFILE, HELPFILE, LOGFILE, and WORLDFILE macros
1774Added command menu at ^C (exit, borg off, kill processes)
1775Removed /tinytalk, /intr, /intrborg, /refill, /core, and /activity
1776/bamf on assumes UnterMUD portals; use /bamf old for old-style bamfing.
1777/listworlds doesn't display passwords unless given -c option
1778Bug fixes and optimizations
1779
17801.5.5 beta3
1781-----------
1782Bug fix
1783
17841.5.5 beta2
1785-----------
1786Bug fixes for time.h, killing /repeats, etc.
1787Fixed /ps output
1788
17891.5.5 beta1
1790-----------
1791Autologin support for untermud cyberportals, with '/bamf unter' command
1792Removed /listbind, /act, /reply, /nointr, /nowrap, /nostty, /nolog,
1793 /nologme, /nologin, /noquiet, and /qctries
1794Flags /stty, /log, /logme, /login and /quiet do not turn on when called
1795 with no arguments.
1796Expanded /ps and /listsocket output
1797Imporoved effeciency of keyboard processing and macro expansion
1798Eliminated busy-wait in /more, /shpause, and Yes/No queries
1799Command quotes use pipes instead of temp files, and capture standard error
1800Removed -DIRIX and -DMANUAL_SWITCH compile flags
1801
18021.5.4 beta1 (1991-08-20, by Ken Keys)
1803-----------
1804Added activity notice for background worlds, /activity to enable/disable it.
1805Improved /more paging
1806Increased sizes of command and socket recall buffers
1807Fixed bug in matching (illegal) patterns of the form "x{y}"
1808With /intrborg on (default), ^C will query to turn off /borg.
1809Removed extra iteration from /repeat loop (thanks to David Moore (OliverJones))
1810Improved mail check
1811Ascii code subs of form "\nnn" are done where ever newline subs are done
1812Replaced SUPPRESS_REDEFS compile-time option with "quiet" option to /redef
1813Added TINYPREFIX and TINYHELP environment variables
1814Default priority for hilites and gags is 0, other triggers 1.
1815Added logging flag to status line
1816
18171.5.3 beta1 (1991-05-04)
1818-----------
1819Added in Madwand's TF status patch, -DLOUD_WORLDS option.
1820Fixed portals, -DOLD_LPPROMPTS option
1821
18221.5.2 beta5 (1991-03-09)
1823-----------
1824Fixed a bug with macros deleting themselves
1825Fixed a bug with triggers doing /dc
1826
18271.5.2 beta4 (1991-03-05)
1828-----------
1829Recursion maximum in expand.c
1830Added support for AT&T WINS; -DREFRESH_TIME option
1831/stty on is default
1832
18331.5.2 beta3 (1991-02-28)
1834-----------
1835Process handling changed
1836
18371.5.2 beta2 (1991-02-24)
1838-----------
1839Bug fix
1840
18411.5.2 beta (1991-02-23)
1842----------
1843World macro files changed
1844Removed /purgewload, added /sockmload
1845Compile-time options: -DSUPPRESS_REDEFS and -DSNARF_BLANKS
1846Off-by-one bugs in ^N and /watchdog
1847Setting off a bound key resets the count for the pager
1848Descriptor leak in /kill
1849
18501.5.1 beta4 (1991-02-15)
1851-----------
1852Bug fixes
1853
18541.5.1 beta3 (1991-02-13)
1855-----------
1856Bug fix
1857
18581.5.1 beta2 (1991-02-12)
1859-----------
1860Bug fixes
1861/more paging is slightly different in visual mode
1862
18631.5.1 beta (1991-02-08)
1864----------
1865Bug fixes
1866
18671.5.0 beta2 (1991-02-02)
1868----------
1869Bug fixes
1870
18711.5.0 beta (1991-02-02)
1872----------
1873Removed /dbs, /packet, /clunused, /bs, /cursopt, /hn, /techo
1874Added /mecho, /bind, /unbind, /listbind, /savebind, /loadbind,
1875  /dokey, /grab, /cat, /trigger, /sub full
1876Expanded /recall format
1877No string maximum lengths
1878Added %L, %-L, %R, %E argument subs, and default args; [] and {} pattern
1879  matching; mail checking; quoting from history.
1880
18811.4.17 beta (1990-12-10)
1882-----------
1883Bug fixes
1884
18851.4.16 beta (1990-12-10)
1886-----------
1887Internal
1888
18891.4.15 beta (1990-12-09)
1890-----------
1891Bug fixes
1892Macro arguments no longer undergo reentrance substitution.
1893Added one-shot triggers; argument grouping by single and double quotes
1894Changed default editing keys
1895
18961.4.14 beta (1990-12-08)
1897-----------
1898Bug fixes
1899Added multiple character key sequences
1900"/world -<name>" will do a /world without logging in.
1901Disconnecting will move to the top world.
1902Added time options for /quote and /repeat
1903
19041.4.13 beta (1990-12-04)
1905-----------
1906Bug fixes
1907Removed /sendtries, /fastquote
1908/world_* substitutions expanded to work everywhere macros do
1909/ptime now works in milliseconds and is a definite value
1910
19111.4.12 beta (1990-12-01)
1912-----------
1913Bug fixes
1914
19151.4.11 beta (1990-11-30)
1916-----------
1917Bug fixes
1918Added default arguments
1919Expanded %n lastname substitution to macros from triggers.
1920/tinytalk flag expanded to work with /nogag and /nohilite.
1921Rewrote output drivers.
1922
19231.4.10 beta (1990-11-26)
1924-----------
1925Bug fixes
1926Expanded default world fields to include macro file
1927Allowed worlds to leave out char and password even if there's no default.
1928
19291.4.9 beta (1990-11-24)
1930----------
1931SIGSEGV, SIGBUS, SIGQUIT handlers
1932Added /world_* subs
1933
19341.4.8 beta (1990-11-24)
1935----------
1936Bug fixes
1937
19381.4.7 beta (1990-11-24)
1939----------
1940Bug fixes
1941
19421.4.6 beta (1990-11-23)
1943----------
1944Bug fixes
1945
19461.4.5 beta (1990-11-23)
1947----------
1948Bug fixes
1949Added /qecho (echo /quote text before sending)
1950
19511.4.4 beta (1990-11-23)
1952----------
1953Bug fixes
1954Added /quitdone.
1955
19561.4.3 beta (1990-11-22)
1957----------
1958Bug fixes
1959Added /purgeworld
1960
19611.4.2 beta (1990-11-22)
1962----------
1963Bug fixes
1964
19651.4.1 beta (1990-11-22)
1966----------
1967Bug fixes
1968/tinytalk flag expanded
1969Added /lp, /lpquote, /more
1970Added recall and socket keys to /keys.
1971Changed /keys syntax.
1972Removed /crypt.
1973
19741.4.0 beta (1990-11-18)
1975----------
1976Bug fixes
1977Changed /world to work more intelligently with multimudding
1978
1979This is the last time a version was released with code changes without
1980 updating the version number.
1981
19821.4.0 beta (1990-11-17)
1983----------
1984Added /cleardone; /keys; /dc; /listsockets; arrow keys; /addworld file field.
1985Removed /pf.
1986Changed ^P and ^N keys to [ESC]P and [ESC]N
1987Added multi-mudding, with [ESC]B and [ESC]F
1988Allowed running Fugue without connecting
1989Represented tabs as '@' to make tab handling work
1990
19911.3.0 beta
1992----------
1993Added /shpause, /addworld, /noworld, /saveworld, /loadworld, /clunused,
1994  /ptime, /qctries
1995Allowed config file to begin with commands
1996Changed /savedef to save only macros without triggers
1997Changed /quote to work without alarm()
1998
19991.2.6 beta
2000----------
2001Bug fixes
2002Trigger functions work on basis of hilites first, then gags, then nothing
2003Expanded /stty to check window size
2004Added /packet (waits for 512 chars of output before sending packets).
2005Expanded /tinytalk to cause /stty, /log, /logme, /login and /quiet flags
2006  to turn on when called with no arguments.
2007
20081.2.5 beta
2009----------
2010Bug fixes
2011/edit allows specifying macros by name, number, or trigger.
2012Added -DHARDCODE and non-termcap compile modes
2013
20141.2.4 beta
2015----------
2016Changed /echo to do local echo
2017Added /kecho (echoes keyboard input), /techo (echoes trigger input)
2018
20191.2.2 beta
2020----------
2021Added /tinytalk (some tinytalk compatibility), /no<flag> commands
2022
20231.2.1 beta
2024----------
2025Bug fixes
2026Added /visual, /gpri, /hpri.
2027
20281.2.0 beta
2029----------
2030Changed code organization
2031Added -f switch on /def for function
2032Added /trig, /trigp, /trigpc, /trigc, /act from TF 1.1.2 and tinywar
2033Changed /listdef command to use switches.
2034Allowed unnamed macros
2035Added /untrigt; /undeft; /purgedeft; /hn (removes blank line between output
2036  and divider by holding newlines)
2037
20381.1.5 beta
2039----------
2040Bug fixes
2041Removed /nointr, /nolog, /nostty, etc.
2042Added /sh back in; /sub; /refill; /edit
2043
2044----------
2045
2046The differences section only applies to things that need to be changed
2047or are not implemented in TinyFugue.  Tf offers a lot more functionality
2048in many areas than the clients below, of course.
2049
2050-------------
2051Differences from TinyTalk (Tarrant's client)
2052-------------
2053Compatibility is almost complete.  All .tinytalk files should work
2054with Fugue.  The /tinytalk flag (defaults to on) makes the necessary
2055changes to convert between tinytalk command formats to tinyfugue
2056command formats.
2057
2058-------------
2059Differences from TinyWar (Grod's client)
2060-------------
2061Use /sub on to substitute %; and %\ for newlines in regular text
2062%n works only in macros and triggers, and in /sub full mode
2063/crypt and /random removed
2064"%2*" argument sub should be replaced by "%-1"
2065
2066