
NOTICE: This change log is officially (sez me) closed.
	All further changes documented (hopefully) in "CHANGES".  This
	file was renamed from "CHANGES" to "CHANGES.R3" on Tue Feb 22, 1994.

Changes for vile 3.65: (released Mon Feb 7, 1994)
(pgf)
    Big change this release is 8-bit cleanliness.  See the help file
    for 8-bit settings.  
    
    NOTE: If you had a FN-key binding which was bound to a "meta" (high
    bit) key, you must change your binding to be a M- binding.  FN- and M-
    are no longer synonymous.  In addition, we now preserve more of the
    termio settings, so you may have to explicitly use "stty" to get
    your meta-bit back.  (We used to clear istrip and the parity settings.)

    NOTE2: pc vile, if built with djgpp or watcom compilers, cannot change
    screens to 43 or 50 line mode.  i'm working on it.

	+ fix bug in charprocreg() that allowed a buffer to be marked
	  modified even if no changes were made and there is nothing to
	  undo.  (region.c)

	+ Brackets '[' and ']' are now treated like braces and parentheses
	  when inserting in c-mode. added new #defines for [LR]BRACK to assist
	  this. (insert.c, estruct.h, main.c)

    	+ A buffer's local "dos" mode is now set to the same as the global
	  "dos" mode when empty, fresh, or when dos-style lines equal unix-
	  style lines. (main.c, file.c, random.c)

	+ giving an argument to "set-dos-mode" causes it to turn dos-mode
	  off rather than on. (file.c)

	+ allow backspacing over autoindented whitespace, whether  or not
	  backspacelimit is set. (insert.c)

	+ new commands, ^A-i, ^A-o, and ^A-O, corresponding to i, o, and O,
	  but which do autoindent-override during an insert.  Most useful
	  when pasting into a buffer, since the pasted text often already
	  has leading whitespace, and autoindent just adds more.   this
	  is a different kind of override than used when pasting in xvile.
	  hmmm.  (insert.c, cmdtbl)

	+ fixed core dump resulting from calculating indentlen and checking
	  for '#' char at start of empty line.  (insert.c)

	+ add directory and host names to "vile died" message.  added ifdef
	  and prototype for usage of gethostname.  currently only used #if
	  BERK is true.  (greg mcfarlane) (file.c, proto.h, estruct.h)

	+ apply (greg mcfarlane's) fix for bug in unqname, when it's being
	  used at startup, and can't ask for input from user. (file.c)

	+ only reclaim or destroy empty unmodified buffers if they don't
	  correspond to existing files.  new routine ffexists() to support
	  this. (buffer.c, file.c, fileio,c, proto.h)

	+ changed calls to kbd_key() to tgetc(), since SPEC is now outside
	  the range that callers can handle.  (window.c spawn.c
	  insert.c history.c exec.c eval.c csrch.c bind.c)

	+ changed all references to last1key to refer to lastkey instead,
	  to accompany above change.  last1key is gone. (basic.c, opers.c,
	  edef.h)

	+ kbd_key() now translates system-specific function-key sequences
	  to canonical '#-c' sequences, which kbd_seq() now interprets.
	  (input.c)

	+ allow 8-bit input, by changing SPEC definition, and some table
	  sizes. (estruct.h, input.c, mktbls.c)

	+ translate X key-events to a default set of xvile FN-bindings,
	  without using the SPEC define, since it won't fit through the
	  8-bit wide pipe we've constructed. (x11.c)

	+ added new modes, printing-low and printing-high, which define
	  the range of 8-bit chars which should _not_ be displayed in
	  octal, but rather as themselves.  (modetbl, modes.c, main.c)

	+ change how we display 8-bit chars. (display.c)

	+ new mode, unprintable-as-octal, to control display of non-printing
	  chars in hex or octal. (display.c, modetbl)

	+ new mode, meta-insert-bindings, which allows meta-bindings (M-c)
	  to work while in insert mode.  when off, all characters, meta
	  or not, are simply inserted as themselves.  when on, meta keys
	  which are bound to functions execute those functions, all others
	  insert themselves. (insert.c, modetbl)

	+ tb_get now returns a true 8 bits, no sign-extension.  (tbuff.c)

	+ allow focusFollowsMouse to be disabled by XDefaults (x11.c)

	+ apply fix (kev) for infinite loop on extended lines with certain
	  kinds of tab values. (display.c)

	+ attempt at better video support, and raw i/o, for djgpp (ibmpc.c)

	+ new routines for ctrl-c/ctrl-break/critical-error handling in
	  djgpp environment. (main.c, proto.h, new file djhandl.c, makefile,
	  makefile.djg)

    	+ added DJGPP to the direct/dirent ifdef in dirstuff.h

	+ fix for sys5 tgetent behavior, when attempting to determine if
	  we're an xterm. (tcap.c)

	+ new targets for motorola delta machines (makefile)

 	+ fixes for core dumps on window resize (from kev) (x11.c)

	+ new define for min no. of lines per window. (estruct.h)

	+ change if_OPT_WORKING to simple ifdefs. (file.c fileio.c display.c
	  estruct.h)

	+ added vanillashar target to makefile, so i can produce shars
	  that the gnuish DOS unshar program will unpack.  (makefile)

	+ clarify help file regarding regions as used by the operator
	  commands (vile.hlp)

	+ applied contributed fix for null fontname (x11.c)

	+ changed logic of tags lookup, so i can understand it, and to
	  correct logic surrounding "taglength" (again).  if taglength is
	  0, matches must be exact (i.e.  all characters significant).  if
	  the user enters less than 'taglength' characters, this match must
	  also be exact.  if the user enters 'taglength' or more
	  characters, only that many characters will be significant in the
	  lookup. (tags.c)

	+ fixed bug with wrap-around reverse searching for a string occurring
	  on the last line of a buffer.  (search.c)

	+ fixed bug in search/replace operations where replacement string
	  was of the form 'text\1moretext'.  the length of the \1 replacement
	  pattern was being obtained incorrectly. (oneliner.c)

	+ changed GO32 ifdef to DJGPP, to avoid name conflict with
	  predefinition. (input.c, fileio.c, estruct.h, ibmpc.c, path.c,
	  random.c, termio.c)

	+ changed the 'interrupted' global to a routine, so we can poll for
	  a control-C character when real signals aren't available. (buffer.c,
	  edef.h, fences.c, main.c, search.c, word.c)

(tom)
	+ corrected EVCURCHAR case in 'gtenv()' that tried to return the
	  characters at the current position, even when the buffer was empty
	  (eval.c).

	+ added ifdef-controls OPT_SHOW_EVAL, OPT_SHOW_REGS, OPT_SHOW_TAGS
	  (cmdtbl, eval.c, estruct.h, line.c, proto.h, tags.c), and renamed
	  OPT_MAP_DISPLAY to OPT_SHOW_MAPS (map.c, estruct.h).

	+ use OPT_UPBUFF in 'killbuffer()' (buffer.c).

	+ added ifdef-control OPT_WIDE_CTYPES (estruct.h, input.c, main.c).

	+ use new macro 'chrBIT()' to fix long/short bitmasks in character
	  tests (estruct.h, line.c).

	+ changed 'set_bname()' to a procedure so that it can trim trailing
	  blanks from the buffer-name.  This is done so that a ^X-k command
	  applied to a buffer-name beginning with "!" will work.

	+ corrected length-computation in 'delins()' so that command
	  ":s/abc\[\(..\))/abc[\1]/" works properly (oneliner.c).

	+ corrected offset-computation in 'scanner()' so that wrapped search
	  finds text on the first line after wrapping (search.c).

	+ added call to 'update()' in 'ms_processing()' so that
	  "show-registers" display will be properly updated at the end of
	  mouse-selection (ibmpc.c).

	+ corrected logic in 'execute_named_command()' that prevented user from
	  typing ":0r foo" in an empty buffer (exec.c).

	+ corrected 'bclear()', so that the b_ulinep member is reset if it is
	  freed (buffer.c).

	+ lint (fileio.c, npopen.c, spawn.c)

	+ absorbed 'fnc2key()' into 'fnc2kcod()' (bind.c), to simplify
	  unbinding of prefix-keys in 'install_bind()'.

	+ corrected 'install_bind()' by new procedure 'reset_prefix()', so that
	  mapping characters that happen to be prefix-keys will override their
	  binding (bind.c).

	+ added definition LTRIMMED, to use in special cases (i.e., scratch
	  buffers) where we don't really want to show "^J" at the end of lines
	  when "list" mode is enabled (estruct.h, display.c, file.c, line.c,
	  map.c).

	+ animated [Mapped Characters] buffer (map.c).

	+ modified display of mappings so that using a repeat-count for the
	  ":map" command causes the actual characters to be shown, e.g.,
	  "#1" instead of "FN1", (map.c, modes.c).

	+ added alternate boolean "glob" mode (in contrast to the normal string
	  mode), for configurations in which vile cannot read filename
	  expansions via a pipe, e.g., VMS or UNIX (mktbls.c, modetbl, glob.c).

	+ moved "glob.h" definitions into estruct.h and proto.h because
	  the preceding change requires some definitions to precede inclusion
	  of "nemode.h" within estruct.h (descrip.mms, eval.c, filec.c, glob.c,
	  main.c, makefile, makefile.djg, makefile.tbc, makefile.wat, proto.h,
	  random.c, revlist, tags.c).

	+ corrected test in 'index2ukb()', which caused the unnamed-buffer
	  to be shown incorrectly when yanking text after lines had been
	  deleted (line.c).

	+ use 'DOT', 'mode_row()', 'buf_head()' and 'win_head()' macros (basic.c, buffer.c,
	  csrch.c, display.c, eval.c, exec.c,
	  file.c, filec.c, finderr.c, globals.c, line.c, random.c, tags.c,
	  tcap.c, tmp.c, undo.c, window.c, word.c) for consistency and readability.

	+ modified lines/cols initialization so that 24x80 is assumed if all
	  other lookups fail, needed for apollo sr10.2 dial-in (tcap.c).

	+ added macro 'KbSize()' (file.c, estruct.h, x11.c, spawn.c, line.c).

	+ corrected 'imdying()' to not save temporary buffers, and to suppress
	  "implybuffer" mode (file.c).

Changes for vile 3.64: (released Wed Dec 23, 1993)
(pgf)
	+ change arithmetic expression in mktbls.c, so we don't assume
	  boolean expression returns exactly 0 and 1.  this exercised
	  a bug in an HP compiler (mktbls,c, from chris sherman)

	+ added fallback definition of VDISABLE to termio.c, in case
	  system doesn'd define it. (termio.c)

	+ increased stack size for Watcom DOS builds to 16K.  probably
	  overkill, but the other DOS builds seems to use 16K as well.

	+ cleaned up some of the scanf nonsense, but not nearly enough.
	  (finderr.c)

	+ don't let display-page changes affect the user's chosen cursor.
	  (ibmpc.c)

	+ use _previous_ indentation level after a line beginning with '#'
	  in cmode.  (insert.c, proto.h)

	+ use COMSPEC environment variable when spawning a DOS shell (spawn.c)

	+ assume we're an xterm if the word "xterm" appears anywhere in the
	  first field of the tcbuf, rather than just in the user's TERM
	  variable. (tcap.c)

	+ increased size of tcbuf since SCO core dumps on overflow (tcap.c)

	+ initialized tb_last in tb_alloc(). (tbuff.c)

	+ couple of minor user suggestions for vile.hlp and the README.

	+ don't beep when motions fail due to being aborted. (main.c)

	+ check modification time on first change to buffer (file.c, exec.c,
	  proto.h)

	+ the filename found for a tags lookup is now passed through doglob(),
	  which means tagfiles can now refer to environment variables etc.
	  (tags.c, from S.Suresh)

	+ new X resource, "focusFollowsMouse", causes xvile's current window
	  to track with the mouse cursor. (x11.c, from S.Suresh)

	+ added '~' to the characters considered part of a pathname, so
	  ^X-e will pick up ~pgf/foo correctly (main.c).

(tom)
	+ corrected last change to allow pipe to vile, in case it is invoked
	  via 'rsh' and cannot open /dev/tty (main.c).

	+ added config flag OPT_TERMCHRS (estruct.h, bind.c).

	+ animated [Terminal] and [Binding List] buffers (bind.c, buffer.c).

	+ corrected call on 'slowreadf()' that resulted in wrong line numbers
	  when a file was piped to vile (main.c).

	+ modified TurboC makefile to merge duplicate strings, saving a little
	  memory (makefile.tbc).

	+ corrected logic that makes ".bak" file on MSDOS so that when
	  appending to a file (e.g., ":w >>foo") the file is copied after
	  renaming (fileio.c).

	+ consolidated some code that sets errno when user attempts to read or
	  write a directory-file (fileio.c).

	+ applied fix from eric krohn to fix uninitialized structure member
	  (tbuff.c).

	+ corrected "EGA" table entry (ibmpc.c)

	+ prevent 'flash' mode from being used until after 'TTopen()' (ibmpc.c)

	+ corrected a hole in 'swbuffer()' that tried to use a null value for
	  'curwp' (buffer.c).

	+ modified to allow "@" startup file to have errors w/o defaulting to
	  "vile.rc", by checking to see if a buffer was created (main.c)

	+ corrected logic of 'vtputc()' and 'vtset()' to make line-wrap display
	  properly when the line contains control characters (display.c).

	+ corrected limits of highlighting in 'change_selection()' (x11.c)

Changes for vile 3.63: (released  Wed Nov 10, 1993)
(tom)
	+ corrected 'pathcat()', to avoid using autoincrement in 'slashc()'
	  macro (path.c).

    	+ cleanup for gcc-2.4.5's -Wall warnings (estruct.h, display.c, exec.c,
	  finderr.c, glob.c, mktbls.c, modes.c, npopen.c, proto.h).

	+ compiled with CenterLine 'clcc' compiler (bind.c, buffer.c,
	  display.c, eval.c, file.c, filec.c, glob.c, globals.c, line.c,
	  tags.c).

	+ corrected 'backpage()' to update mode-line after "previous-page".

	+ modified ibmpc.c to make flash/mouse code more portable.

	+ corrected call on 'strncpy()' in 'kbd_reply()' where 'extbuf' may be
	  copied onto itself.  On HP/UX, this causes the destination to be
	  cleared (input.c).

	+ modified initialization of IBMPC to make "flash" mode work better on
	  MSDOS (ibmpc.c).

	+ modified so that on MSDOS and VMS vile properly handles files that
	  are redirected to it via the standard input (main.c).

	+ corrected bug that caused ":e#" command to ignore the '#' character
	  (exec.c).

	+ corrected handling of ":tag" command so that if a tag's length is
	  shorter than the taglength setting, the shorter value is used
	  (tags.c).

	+ modified 'writereg()' to prevent inadvertent file-write using a
	  read-pipe expression (file.c).
(pgf)
	+ fixed indenting bug in formatregion().  (word.c)

	+ added SHELL=/bin/sh to makefile

Changes for vile 3.62: (released  Mon Oct 11, 1993)
(pgf)
	+ enable DOS mouse processing for Turbo-C only, since some code
	  uses Turbo-isms to get at registers (_AX, etc)  (estruct.h)

	+ change references to x.ax, x.bx, x.di, etc to be x._AX_, x._BX_, etc.
	  to satisfy the Watcom 386 need for eax, ebx, edi, etc.

	+ improper automatic indent on brace insertion fixed (insert.c,
	  fmatch,c, proto.h)

	+ the ls -a output in imdying() was producing a line with a lone '.'
	  on it, which was terminating /bin/mail.  use sort -r to rearrange
	  it. (file.c)

	+ re-ifdefed getscreensize, for machines without SIGWINCH

	+ guard against zero values for tabstop and shiftwidth 	(buffer.c)

	+ added global control variable to make it easy to turn off the
	  "working..." message. (display.c)

	+ don't let hst_append() do anything if clexec is set (history.c)

	+ click the mouse (with xterm-mouse set) no longer calls showcpos().
	  if you want the mouse position, turn on "ruler-mode" (tcap.c)

	+ flash mode is now off by default.  beeps should be beeps until
	  requested otherwise. (main.c)

	+ applied vms path fix in pathcat() (path.c)

	+ don't insert tabs during reformat if notabinsert is set (word.c)

	+ applied patches for djgpp from Jim Crigler. (estruct.h, ibmpc.c)

(tom)
	+ TurboC compiler warnings (history.c, mktbls.c, oneliner.c, search.c).

	+ added TurboC compiler warning patterns (finderr.c).

	+ implemented mouse highlighting for MSDOS (display.c, ibmpc.c).

	+ made the table-driven combinations for $sres work properly (ibmpc.c).

	+ corrected 'repointstuff()', so that undo works properly for multiple
	  windows; other window's dot wasn't being updated (undo.c).

	+ modified 'execute_named_command()' to set dot-moved flag if the
	  range-computation moves it, fixes warning from 'updpos()' (exec.c).

	+ linted remaining size_t usage (basic.c bind.c display.c estruct.h
	  eval.c exec.c filec.c glob.c history.c isearch.c mktbls.c npopen.c
	  oneliner.c proto.h regexp.c search.c spawn.c vmsvt.c).

	+ guarded &left, &right, related functions against negative indices,
	  etc., (eval.c).

	+ changed sizes in regexp-struct to SIZE_T (from short, int) to support
	  lint (estruct.h).

	+ added command-line option "-wm" to set X11 window-manager title
	  (main.c, version.c, x11.c).

	+ modified prompts to make ^V echo until the character is followed by
	  what we want to see a la vi (input.c).

	+ modified treatment of '!' character (in shell prompts) to expand it
	  immediately, more like vi (main.c, history.c, input.c, spawn.c).

	+ corrected some ifdefs that broke !-commands when compiling small
	  configuration for testing (cmdtbl, bind.c, eval.c).

	+ whitespace spawn.c

	+ corrected redisplay logic in 'execute_named_command()' when repeated
	  backspace characters were received (exec.c).

	+ modified logic in 'imworking()' to be a little more conservative when
	  erasing leftover text in the message line, e.g., when it happens
	  during filename-completion on large directories (display.c).

	+ corrected a hole in 'hst_append()' that allowed non-interactive use
	  of the bind-key function to erroneously set the 'clexec' flag
	  breaking subsequent named-commands (history.c).

	+ trailing blank, e.g., "int<sp><nl>tgetc(quotec)<nl>" breaks apollo
	  ctags by making it generate a pattern only for the "int<sp>" (bind.c,
	  input.c, isearch.c, search.c).

	+ modified 'imply_buffer()' so that c-mode is set as in 'readin()'
	  (buffer.c).

	+ corrected 'getfile()' to treat names longer than NBUFN as filenames,
	  and 'unqname()' to assume its 'bname' argument can have a trailing
	  null (buffer.c, exec.c, file.c, main.c).  (This fixes a bug I
	  introduced in 3.60 that prevented using ":e %+" properly, where "%"
	  expands to a long buffer name, because the buffer names are compared
	  with 'strncmp()').

	+ modified 'getfile()' to suppress redundant prompt by using returned
	  state of 'unqname()' (file.c).

	+ modified 'mlreply_file()' to prompt if a wildcard expands to multiple
	  files (e.g., when reading a file) (filec.c).

	+ modified 'tokval()' to expand ~-paths so macros can refer to user's
	  home paths (eval.c).

	+ corrections to vms filename-completion (path.c).

	With Purify demo

	+ corrected memory leak in 'FreeBuffer()' (buffer.c).
	
	+ corrected uninit-memory reference in 'kbd_show_response()' (input.c,
	  history.c), in 'dfputsn()' (display.c).

	+ corrected reference to freed memory in 'listmodes()' and modified
	  logic to use 'animated' logic, and variables 'relisting_b_vals' and
	  'relisting_w_vals'.  As a side-effect, this allows local buffer and
	  window modes to be set in [Settings] (buffer.c, display.c, edef.h,
	  main.c, modes.c).

	+ corrected a null-pointer reference to 'fromline' when a ":0" command
	  was entered in an empty buffer (exec.c).

Changes for vile 3.61: (released  Thu Sep 16, 1993)
(pgf)
	+ when files are saved in /tmp, and mail is sent, the list is now
	  created with "ls -a" to make all files visible. (file.c)

	+ when trying to get back to the current buffer in globber(), use
	  set_curwp() instead of swbuffer(), since swbuffer() may not take
	  us back to the same window we started in, if the buffer is
	  multiply displayed. (globals.c)

	+ moving the cursor with the mouse (xterm-mouse) causes showcpos()
	  to be called, as if a ^G had been typed.  the message line needed
	  to be cleared in any case, to delete old ^G output, so i thought
	  i'd try updating it instead (should a similar change be made in
	  x11.c?). (tcap.c)

	+ in cmode, parentheses are treated like braces, in that if a line
	  ends with a left one, the next line is indented, and if it starts
	  with a right one, the line is aligned with the line containing the
	  match.  this may be useful for parentheses-heavy languages like

(tom)
	+ nits from 3.60 integration (file.c, mktbls.c, proto.h, glob.h)

	+ allow "number" mode to be set/unset in scratch buffers (modetbl,
	  display.c, random.c).

	+ use 'delay()' function in TurboC for 'catnap()' (random.c)

	+ ifdef'd "dirc" and "history" modes so that they don't appear in
	  [Settings] when not configured (modetbl, main.c).

	+ brought TurboC makefile up-to-date (makefile.tbc).

	+ corrected logic of 'makemodelist()' so that both buffer and window
	  local modes are shown (modes.c).

	+ corrected my last change to 'unqname()' to ensure that if the b_bname
	  field is short enough, it will have a null terminator (file.c).

	+ moved logic that reports lines-deleted from 'ldelete()' to common
	  logic of 'operdel()' and 'operlinedel()', so that using 'ldelete()'
	  internally won't generate spurious messages (line.c, opers.c).

	+ used 'doingopcmd' to modify return-status of motion commands (h,l) to
	  get rid of special-case handling so that when used internally they
	  don't fail; obsoleted 'forwchar_in_line()' (basic.c).

	+ use macro 'cmdBIT()' to clarify flags for CMDFUNC, added flag OPTREG
	  to simplify test in 'execute_named_command()', and make test for
	  optional register and/or line-count more explicit by allowing it only
	  when non-punctuation follows the command (fixes ":s/pattern")
	  (cmdtbl, estruct.h, exec.c, input.c).

	+ corrected my last change to make "2p work correctly, by using new
	  function 'index2ukb()' (line.c).

	+ modified 'mlreply_file()' so that filename completion works on the ^W
	  and ^R screen commands (filec.c).

	+ modified 'getregion()' to use line-number to simplify computation,
	  and to work with left-margin.  Also whitespaced (region.c).

	+ corrected test in 'loop()' that caused j/k commands to go awry in the
	  [Registers] buffer at blank lines (main.c).

	+ corrected test in 'kbd_reply()' to avoid name-completion when the
	  current-response is a shell-command, e.g., "!foo -?" (input.c).

	+ corrected logic in 'forwchar_to_eol()' and 'ins_anytime()' that lets
	  arrow-keys to go past the end of the line while in insert (or
	  replace) mode (basic.c, insert.c).

	+ corrected logic that allowed a user to begin an insertion in one
	  buffer, then click the mouse to reposition into a readonly buffer
	  and continue inserting -- in the readonly buffer (basic.c, insert.c).

	+ added mode 'flash' (ibmpc.c, main.c, tcap.c, x11.c)

	+ added logic to support msdos-mouse, using defines OPT_MS_MOUSE and
	  OPT_MOUSE.  This version only supports repositioning clicks (basic.c,
	  display.c, estruct.h, ibmpc.c, termio.c).

	+ use symbol ALLOC_T to clarify distinction between size_t/int/unsigned
	  (display.c, edef.h, estruct.h, eval.c, filec.c, fileio.c, finderr.c,
	  line.c, oneliner.c, proto.h, regexp.c, tbuff.c, undo.c, x11.c)

Changes for vile 3.60: (unreleased)
(pgf)
	+ added "stop" command (synonym for "suspend-vile", aka ^Z) (cmdtbl)

	+ ensure shiftwidth and tabstop are always set correctly after modes
	  are adjusted -- any of cmode, cts/ts, csw/sw can affect. (modes.c)

	+ added support to finderr() for OSF1 (DEC Alpha's, at least) compiler
	  errors, of the form:
		/usr/lib/cmplrs/cc/cfe: Error: test.c, line 8: Syntax Error

	+ took out leftover dbwrite() call from rangespec() -- may fix errant
	  behavior on ":.$d" (exec.c)

	+ fixed helpfile note about X11 -name option -- it sets the name
	  used for resource lookups, not the window name.  (vile.hlp)
	  how do we set the window name?

	+ under DOS, leave the cursor shape and the keyboard repeat rate
	  alone.  if we get complaints, perhaps we should mode-ify these,
	  but in general, settings like that are personal, and we shouldn't
	  muck with them.  (ibmpc.c)

	+ don't introduce extra path separators in pathcat() (path.c)

	+ protect against NULL returns from getcwd, in case the directory
	  we're in has been removed. (random.c)

	+ changed symbol "glob()" to "doglob()" to stop name conflict with
	  standard libraries (glob.c, eval.c, random.c, filec.c)

	+ added prototypes for glob.c to proto.h

	+ eliminated infinite loop when using goto-beginning-of-sentence from
	  end of buffer (basic.c)

	+ added mode "multibeep" to control the "one beep per failed motion"
	  logic -- if multibeep is on (default), then every failed motion
	  produces a beep.  if it's off, then only the first (of a set of
	  identical) causes a beep. (modetbl, main.c)

	+ corrected possible use of uninited locals in file.c (was really
	  only a warning suppression) and  display.c

	+ turned off beeping in search.c and csrch.c, now that all failed
	  motions cause beeps.

	+ change "Date" to "installed" in version.c, since modtime really
	  only reflects installation date.

	+ don't let vile use a screen dimension of less than 2 in either
	  direction (display.c, tcap.c)

	+ fixed bug that made all TERM types be thought of as xterms. (tcap.c)

	+ fixed documentation of the help commands.  it's been wrong
	  for over three years now, and it's in the first screen of
	  help! (^X-^H and ^A-^H should be ^X-h and ^A-h) (vile.hlp)

	+ added AIX to the machines that need sys/ioctl.h, to pick up
	  TIOCGWINSIZE (display.c)

	+ reset the "calledbefore" flag in docmd().  fixes chris sherman's
	  problem where a second substitute-til in a macro would appear to
	  do nothing.  (actually it was reusing its previous args, so there
	  was simply nothing to do)  (exec.c)

	+ added '>' to the characters known to the reformatting code, so
	  you can reformat most email replies. (word.c)

	+ added automatic patchfile generation to the makefile.  hopefully
	  i can generate patches for all future releases, in addition to
	  shar files. (makefile)

(tom)
	+ made ansi.c work with TurboC (ansi.c, main.c, display.c, termio.c),
	  to use as test-case for COLOR.

	+ corrected highlighting code for ":%s" command with ibmpc display
	  (display.c, ibmpc.c).

	+ modified 'bfind()' to always return a buffer (unless it cannot create
	  the buffer), use 'find_b_name()' for the no-create mode (bind.c,
	  buffer.c, eval.c, exec.c, file.c, filec.c, finderr.c, history.c,
	  main.c, map.c, modes.c, oneliner.c, random.c, spawn.c, tags.c).

	+ use macros 'set_bname()' and 'eql_bname()' and function 'get_bname()'
	  to encapsulate buffer name, which does not necessarily have a
	  trailing null (bind.c, buffer.c, display.c, estruct.h, eval.c,
	  exec.c, file.c, finderr.c, input.c, main.c, modes.c, oneliner.c,
	  spawn.c, tags.c, tmp.c).

	+ removed nonstandard 'strncpy()' (main.c).

	+ corrected 'kbd_show_response()' to work with expand-chars mode
	  (input.c).

	+ corrected 'kbd_reply()' to make the number of characters shown have
	  the same limit as the caller's buffer-length, and to make it always
	  return the data with a trailing null (input.c).

	+ made 'animated' mode work for [Registers] buffer (line.c), and
	  modified the logic so that numbered-buffers are displayed in a
	  vi-compatible manner.

	+ make shift-commands work more like vi, allowing repeated '<' or '>'
	  characters in a :-command to imply a repeat count (bind.c, exec.c,
	  opers.c).

	+ corrected logic of 'dofile()' so that if an error is found in the
	  startup file, vile properly sets curbp and curwp (exec.c).

	+ simplified/corrected command-history logic of to fix error that
	  prevented scrolling past ":e!" command, and to allow scrolling of
	  '<', '>' command even when repeated (bind.c, exec.c, history.c,
	  spawn.c).

	+ added flag KBD_EXPCMD to handle the case (from rewrite of history)
	  where %,#,: expansion must be done for shell commands (estruct.h,
	  bind.c, input.c).

	+ added OPT_HISTORY to allow ifdef'ing of history.c code (estruct.h,
	  history.c)

	+ cache home-directories looked up in 'home_path()' to make it run
	  faster (path.c)

	+ modified glob-expansion to allow "~" expansion.  This doesn't work
	  with wildcards in the user-portion (e.g., "~ab?"), but suffices for
	  most cases (glob.c).

	+ added a find-error case for apollo's C++ compiler (finderr.c).

	+ modified logic for 'displaying' vs 'imworking()' slightly, to get rid
	  of erroneous cursor movement (display.c).

	+ added function 'slowtime()' to force updates in 'slowreadf()' more
	  often (file.c).

	+ adjusted definitions for better lint checks on apollo sr10.2
	  (estruct.h, makefile).

	+ make piped-input also set error-buffer (main.c).

	+ revised logic that sets VAL-structs for modes to correct places where
	  buffer & window traits are saved without converting to local values.
	  Also removed code (e.g., copy_val) that checks reference counts,
	  since they aren't really necessary (buffer.c estruct.h main.c modes.c
	  proto.h)

	+ modified behavior of 'unsetl' command to delete local setting
	  (eval.c, modes.c).  It was only modifying (toggling) boolean modes.

	+ corrected 'reframe()' to handle linewrapping case submitted by
	  alistair (display.c).

	+ corrected cursor-update in 'x_scroll()' that left stray cursor images
	  remaining after ^D/^U commands (x11.c).

	+ corrected logic that caused selection-text to be lost when keypress
	  was received (x11.c).

	+ modified X-windows pasting to trim unneeded whitespace when inserting
	  into cmode or autoindent buffer (bind.c, x11.c).

	+ corrected kill-buffer flag KAPPEND, which had the same value as
	  KLINES (estruct.h, line.c).

	+ corrected error in 'doindent()' that caused a "<nl>}" insertion to
	  delete nonwhite characters (insert.c).

	+ corrected ":tags" command for exact (taglen=0) lookups (tags.c)

	+ make failed motion-commands sound an alarm like vi (main.c).

	+ modified logic for h,j,k,l,^D,^U,^F,^B commands to return false when
	  they fail, so failed-motion alarm works (basic.c).

	+ corrected logic for b,B,w,W,e,E commands to return false only when
	  backing/forwarding past the buffer ends (word.c).

	+ modified alternate-window motions 'scrnextup()', 'scrnextdw()',
	  'mvdnnxtwind()', 'mvupnxtwind()' to also return failed-motion status,
	  for consistency (window.c)

	+ made new function 'forwchar_in_line()' to do the vi "l" command,
	  dissociating it from the internal motion-command (basic.c, cmdtbl).

	+ made 'backhpage()', 'forwhpage()' motion-commands (cmdtbl).

	+ make failed quit-commands return false (main.c).

	+ make version-command show UNIX or VMS executable's date (main.c)

	+ corrected behavior of 'histbuff()' when user simply toggles with the
	  "_" command.  This did not handle the case in which the alternate
	  buffer was temporary, and thus had no number (buffer.c).

	+ introduced new buffer-attribute 'b_lim_left', macro
	  'w_left_margin()', ifdef'd with OPT_B_LIMITS, use this to control
	  cut/paste selection in [Registers] (basic.c, buffer.c, csrch.c,
	  display.c, random.c, region.c, window.c, x11.c).

	+ modified 'execute_named_command()' to recognize register name and
	  line-count for commands such as ":yank", making it handle cases such
	  as ":5>6", ":y a 6", ":10,20y b" (exec.c, input.c, line.c).

	+ modified ":put" command to report the number of lines added (line.c).

	+ split out 'version.c' because main.c got too large for apollo lint
	  (main.c, makefile*, vms_link.opt, link.msc).

Changes for vile 3.59: (released Wed Aug 18, 1993)
(pgf)
	+ added VIEWOK flag for functions that execute macros.  it says
	  it's okay to execute them in view mode, even though they have the
	  UNDO bit set.  this fixes not being able to run @, :map'ed, or
	  ^X-& macros in view-only buffers.

	+ made the xterm-mouse mode available in xvile as well as vile, to
	  make it easier to share .vilerc between the two versions.  the
	  alternative is to insist that people put ~force set xterm-mouse
	  in .vilerc, to override the error they'll get in xvile from the
	  mode not being present. (input.c, modes.c, estruct.h)

	+ changed default value of "xterm-mouse" to off, to make vile behave
	  like it used to, and like other character applications, by default.
	  (main.c)

	+ turned off support for the "working..." message for builds that
	  define USG, since they probably have non-restartable system calls.
	  (estruct.h)

	+ accept any TERM variable that ends in "xterm" to be an xterm.
	  (tcap.c, vile.hlp)

	+ fixed "uninitialized variable 'req'" when compiling without REVSTA
	  defined. (display.c)

	+ fixed missing closing double quote in "make all" help output.
	  (makefile)

	+ bumped the maximum row count from 100 to 200.  i personally can't
	  read more than about 70 lines on a 19" mono monitor, but maybe
	  i need glasses. (tcap.c, x11.c)

	+ took out extraneous trace.h include from x11.c

	+ corrected 'col2offs()' to make it easier to position the mouse on a
	  tab character (display.c).

Changes for vile 3.58: (released Fri Aug 13, 1993)
(pgf)
	+ added "sys$login:" to VMS file search path for vile.rc

(tom)
	+ refined 'imworking()' to get rid of leftover working-message
	  (display.c, file.c).  Make working-message show up only when 'terse'
	  mode is off (the default).

	+ added code to support xterm mouse-clicking (to move dot), with
	  additional code for later use with highlighted selections.  Made this
	  a mode (xterm-mouse) because it does not implement cut & paste yet
	  (basic.c, display.c, input.c, main.c, modes.c, tcap.c).

	+ added calls to 'TTkopen()' and 'TTkclose()' to termio.c so that (for
	  all systems) we call these within 'ttclean()' and 'ttunclean()'
	  (termio.c, tcap.c).

	+ optimized display of 'ruler' (display.c)

	+ use 'displaying' as a semaphore rather than true/false flag, as a
	  guard against interrupt by 'imworking()' which modifies ttcol and
	  ttrow (bind.c, display.c, main.c, tcap.c, x11.c).

	+ make ":=" command accept address (like vi) to show arbitrary address
	  value (cmdtbl, estruct.h, exec.c, random.c).

	+ don't let 'write-til' move dot (cmdtbl).

	+ modified 'doindent()' to trim leading whitespace (like vi) from the
	  portion of the line after dot (insert.c).

	+ modified insert-code to treat the combination of repeat-count and
	  newline like vi, causing the repeat count to apply only to the
	  insertion-string before a newline.  (edef.h, input.c, insert.c)

	+ corrected handling of '.' repeat-count for r,R commands (insert.c)

	+ modified user-variables to make them dynamically-allocated, and to
	  remove the restriction on the length of their names (mktbls.c,
	  estruct.h, eval.c, main.c).  Also corrected treatment of newline in
	  prompt for user-variable name.

	+ used 'strncpy()' to copy return-values from 'kbd_reply()', just in
	  case macro-tokens are too long (input.c).

	+ don't expand '%' or '#' in 'kbd_reply()' if it would be the name of
	  an invisible buffer (input.c).

	+ added universal-modes 'expand-chars' to list the characters to expand
	  in 'kbd_reply()', and 'expand-path' to control whether %/# are shown
	  as full, or shortened paths (modetbl, input.c, main.c).

	+ modified X-windows config to allow processing of events when the
	  working-message code is executed (display.c, x11.c).  This makes the
	  screen refresh and keyboard handling work better.

	+ added 'animated' buffer-mode to control whether vile updates
	  scratch buffers when their contents would change (e.g., the buffer
	  list), made this work for buffer-list (buffer.c, display.c,
	  estruct.h, modes.c, modetbl).

	+ revised the 'killbuffer()' code to work properly with the animated
	  mode (buffer.c).

	+ modified mktbls to check for illegal mode-names (mktbls.c).

	+ linted with SMALLER set (to get rid of unused functions), introduced
	  new ifdef with OPT_EVAL to simplify (basic.c bind.c buffer.c cmdtbl
	  estruct.h eval.c insert.c line.c lint.out modes.c npopen.c proto.h
	  window.c).

Changes for vile 3.57: (released Fri Aug 06, 1993)
(pgf)
	+ the bug check for b_ulinep pointing at a newly inserted line is
	  no longer valid, since we can now insert a line, make changes (which
	  will set b_ulinep), undo those changes, and then undo the insert.
	  we now just null out b_ulinep when we remove the line it references.
	  (undo.c)

	+ changed name of setmode() to avoid library conflict with djgpp, and
	  changed the other del/setg/delg versions as well.  (cmdtbl, modes.c,
	  proto.h)

	+ took out #define USG 0 since djgpp uses an #ifdef on this in a header
	  (estruct.h)
(tom)
	+ whitespace in basic.c

	+ corrected definition of ScratchName macro for apollo SR10.2
	  (estruct.h) and a compiler warning (in glob.c).

	+ corrected gcc warnings about 'signal()'-arguments for SunOs.

	+ use new macros ACTUAL_SIG_ARGS, etc., instead of ACTUAL_SIGNAL so
	  that the tag-file can find the signal-handling procedures (estruct.h,
	  display.c, file.c, main.c, proto.h, spawn.c, x11.c).

	+ customized the c-suffix default values for VMS, MSDOS and UNIX.

	+ VAX/VMS C does not allow continuation-lines in ifdefs (mktbls.c).

	+ VAX/VMS C may incorrectly set ferror() when feof() is true (fileio.c)

	+ VAX/VMS C 'rewind()' does not work correctly (fileio.c)

	+ added code to show "working..." message for time-consuming operations
	  (display.c, npopen.c, vmspipe.c), and to allow 'slowreadf()' to show
	  its progress (file.c, fileio.c).

	+ linted calls on 'signal()', (main.c, display.c, spawn.c, termio.c).

	+ linted calls on 'firstnonwhite()' (basic.c, exec.c, insert.c, line.c,
	  opers.c, region.c, spawn.c, word.c).

	+ use new functions 'end_named_cmd()', 'more_named_cmd()' for clarity
	  (exec.c, file.c, map.c, oneliner.c)

	+ added new mode 'ruler' (to display line+column in a window on the
	  modeline), and new window-flag WFSTAT to support it (by allowing
	  non-modal information to affect the modeline).  (display.c)

	+ corrected error I introduced into 'reframe()', and in 'row2window()'
	  while adding 'linewrap' mode (display.c).

	+ corrected code that frees buffer's fname-field for the special case
	  of out-of-memory (buffer.c, random.c).

	+ added new command 'tagstack' to show the contents of the tag-stack.
	  Modified 'tags()' to use module-level 'tagname[]' rather than local
	  copy of tag-string.  (tags.c)

	+ always update the modtime-at-warn buffer field when prompting
	  for the check-modtime mode (file.c).

	+ removed (obsolete) code for DEC Rainbow (estruct.h, display.c,
	  termio.c).

	+ modified 'line_no()' to return values in the range 1..MAX+1
	  instead of 0..MAX (random.c).

	+ corrections to make X11 version work with 'number', 'linewrap' modes,
	  to guard against selection extending outside a window, to highlight
	  only the actual text within a window, and to use 'yankregion()' to
	  save the paste-text.  (basic.c, display.c, window.c, x11.c)

	+ modified 'typahead()' to know when X-windows is pasting, and the
	  paste-init code to supply an escape to end insert-mode, and to use
	  TBUFF's so that nulls can be inserted (termio.c, x11.c).

	+ put the repeat-count in 'map_proc()' back the way Otto Lind had it
	  (map.c).

Changes for vile 3.56:	(released Tue Jul 27, 1993)
(pgf)
	+ after a confirm substitute operation, we now mlerase the confirm
	  prompt (oneliner.c)

	+ be sure the [vileinit] buffer is marked as scratch while doing the
	  bprintf into it, so undo record-keeping will be suppressed. (main.c)

	+ rearranged calls to chg_buff and ldelnewline in ldelete, so that
	  the buffer will still be marked clean on first toss/copy/tag to
	  undo.  unmodified state is now restored correctly after a :g/^$/d is
	  undone. (line.c)

	+ In regular expressions, \s and \S are now true atoms.  they both
	  must now be followed by * or + to match more than one.  also, \s
	  no longer matches BOL or EOL (thanks to alistair and eric for
	  pointing out and fixing) (regexp.c)  In practice this means that
	  one should use \s* or \s\+ where one used to use just \s.  also,
	  if a match against ^ or $ is necessary, it must be done explicitly,
	  e.g. /\(^\s*\|\s\+\)word/ instead of /\sword/

	+ adjusted paragraph/section/comment/sentence regexps, with help
	  from eric, to reflect change to \s and \S

	+ make the #ifdef USE_TERMIO version of ttclean() be a no-op under
	  X11, as it is in the other cases.  eric's right -- termio.c needs
	  a rewrite.  (termio.c)

	+ don't pass the (0) to getpgrp if we're POSIX and ANSI -- the
	  library is probably the right one, and there's a high probability
	  of a prototype conflict if we _do_ pass it.  (spawn.c)

	+ When looking up X defaults, the old code checked the class first,
	  then the specific program name.  This is backwards since if the
	  class value exists, there is no way to override it with the -name
	  option.  (x11.c)

	+ AIX and pyramid think we have non-constant case expressions (eval.c)

	+ There is no requirement in ANSI C for SCRTCH_LEFT and SCRTCH_RIGHT
	  to be expanded before the ##.  Some preprocessors do and some don't.
	  However, the other #define using just #s and string concatenation
	  seems to work everywhere.  (estruct.h)

	+ clarified usage of &sin function, which searches its first argument
	  for an occurrence of the second.  (vile.hlp)

(tom)
	+ renamed UCHARAT to UCHAR_AT; added defs for UCHAR USHORT, UINT and
	  ULONG for easier linting/reading (bind.c, dirstuff.h, estruct.h,
	  file.c, history.c, ibmpc.c, input.c, isearch.c, line.c, oneliner.c,
	  proto.h, tbuff.c, vmalloc.c, vmsvt.c, x11.c, z_ibmpc.c)

	+ make 'prc2kcod()' return an int again, some optimization of 'token()'
	  (bind.c, file.c).

	+ clean-compiled/tested X11 + DEBUGM + OPT_MAP_MEMORY with gcc
	  (basic.c, edef.h, exec.c).

	+ disable filename-completion when OPT_MAP_MEMORY is enabled.

	+ added mode 'newline', set to true when reading files that have a
	  trailing newline (the normal vi-convention), modified (file.c,
	  buffer.c, random.c).

	+ fixed place where ":ww" garbages the screen before reporting
	  "wrote 0 buffers" (buffer.c).

	+ simplified 'writereg()' and 'ffputline()' (fileio.c, file.c) to allow
	  'newline' mode to control whether a trailing newline is written to
	  output files.

	+ modified 'kifile()' so that it does not insert the trailing newline
	  if it wasn't present in the file.

	+ made 'ldelete()' return from one point (line.c) to simplify 'report'
	  mode.

	+ added mode 'report', to specify the number of changes before a
	  message is emitted:
		NN lines deleted		6dd
		NN more lines			u
		NN fewer lines			u
		NN fewer lines			:g/^$/d
		NN lines yanked			"a8yy
		NN substitutions on MM lines	:%s/x/XX/g
		NN substitutions		:%s/x/X/
	  (globals.c, line.c, undo.c, oneliner.c, random.c, region.c)

	+ corrected unnecessary screen-update in 'substline()' (oneliner.c)
	  introduced in confirm-changes.

	+ added 'linewrap' mode (basic.c, buffer.c, display.c, windows.c).

	+ corrected cursor movement for large repeat counts with 'H' command
	  (basic.c).

	+ ifdef'd 'screen_string()' to handle apollo compiler warning when
	  testing SMALLER configuration.

	+ added stubs for modes 'popup-msgs', 'popup-choices'.

Changes for vile 3.55: (released Mon Jul 19, 1993)
(pgf)
	+ new routine, mlquickask(), which prompts for and returns a single
	  key answer from a user.  use this when getting a confirm from a
	  user for a substitute command. (input.c, oneliner.c, proto.h)

	+ documented the 'c' for confirm (vile.hlp)

	+ the token() routine now expands numeric escape codes, like \nnn and
	  \xNNN where nnn are octal and NNN are hex digits.  this may affect
	  vilerc files that have \ sequences in them.  support for mapping
	  to key-sequences like 0xNN is gone -- use \xNN instead.  this will
	  make it easier to do multi-char maps in the future.

	  note that \000 will cause internal problems, since things are null-
	  terminated, and the sequences "<sp>", "<tab>", and "^C" are all
	  problematic when multi-char sequences come around.

(alistair)
	+ added highlighted confirm to ":s" command.  (oneliner.c, display.c)

(tom)
	+ modified 'makebindlist()' (in bind.c) to format using tabs rather
	  than spaces.

	+ many mods to map.c (and bind.c) to eliminate redundancy between it
	  and bind.c

	+ modified 'prc2kcod()' to look for only one prefix, but allow
	  hexadecimal code in form 0xff.

	+ corrected a recursion bug in 'install_map()' (file map.c)

	+ modified ":map" (file map.c) to show show mappings if no values are
	  given.

	+ fix strict gcc warnings in x11.c, consolidated some initialization
	  code and corrected font-ascent value (so 9x15 works properly).

	+ added "on" and "off" to literals in 'stol()' (file eval.c) to use
	  this in x11.c

	+ modified 'killbuffer()' in buffer.c to recognize a repeat-count
	  (e.g., allows ^X-k within the buffer list to remove a succession of
	  buffers).

	+ fix strict gcc warnings in ansi.c

	+ make command-history record properly for bind-key and map commands
	  (files bind.c and map.c).

	+ modified 'engl2fnc()' (in bind.c) to allow unique abbreviation (so
	  that scripts don't have to be spelled out), added "se" symbol to
	  cmdtbl for vi-compatibility.

	+ modified 'docmd()' (file exec.c) to allow leading ':' in scripts
	  for vi-compatibility.

	+ corrected logic in modes.c to (re)allow trailing whitespace on
	  the end of set-commands.

	+ merged files makmktbl.tbc and makvile.tbc into makefile.tbc

	+ eliminated 'VIDEO *' arguments from 'updateline()' in file display.c
	  because the 'row' argument already provides this information.

	+ added 'offs2col()' to correct position of highlighting when
	  confirming substitutions.

Changes for vile 3.54: (released Fri Jul 09, 1993)
(pgf)
	+ will now call setvbuf instead of setbuffer if USG defined in the
	  POSIX version of ttopen.  this to support SVR4 (well, solaris)
	  (termio.c)

	+ took out the more stringent prototype warnings (-Wstuff) from the
	  gcc OPTFLAGS, since we don't pass them yet (someday, alistair).
	  (makefile)

	+ mode and variable symbol names generated by mktbls are now of the
	  form "s_name__" instead of "s_name", to be more unique.  (there
	  was a conflict with a (naturally named) typedef of signed char to
	  "s_char".)  (mktbls.c)

	+ upped the max number of screen columns for x11.c.  was 150, now is
	  200.  reduced the max rows number from 200 to 100.  the screen
	  buffers should be made re-allocatable, so we wouldn't eat the space
	  unless necessary.  made the normal (tcap.c) maximums match these.
	  (tcap.c x11.c)

	+ applied Tuan Dang's fixes for my merging of his watcom and djgcc
	  patches.  Thanks Tuan!  (makefile.wat, ibmpc.c, estruct.h, path.c,
	  mktbls.c)

	+ turn DOS mode on by default for DOS versions of vile. (main.c,
	  vile.hlp)

Changes for vile 3.53: 	(released Thu Jul 07, 1993)
(pgf)
	+ stop core dump on file completion (":e fi<tab>") by making sure
	  BFSIZES bit is cleared when building MyBuff

	+ in rtfrmshell(), there was a "curwp->w_flag = WFHARD" statement,
	  with a comment asking if it was needed.  in fact, it's wrong, so
	  i took it out.  it was tromping other flags, like WFMODE, for that
	  window only (spawn.c).

	+ in update(), don't add nu_width to screencol if the buffer is empty,
	  since there is no line number in that case. (display.c)

	+ fixed bug when undoing the first insertion into an empty buffer.
	  the value of dot was being restored to the inserted (and now gone)
	  line.  (line.c)

Changes for vile 3.52:
(pgf)
	+ added a couple of tweaks to tom's check-modtime changes -- prompts
	  are not suppressed if you're writing the buffer out, and running
	  a shell only checks visible buffers for modtime changes, rather
	  than all buffers. (mostly file.c, estruct.h, random.c)

	+ changed name of "timeout-value" to "timeoutlen", to match some
	  versions of vi.  (modetbl, vile.hlp)

	+ applied patches from Tuan DANG (dang@cogit.ign.fr) to support
	  DJGCC v1.09 (display.c, estruct.h fileio.c ibmpc.c main.c mktbls.c
	  modes.c path.c random.c spawn.c termio.c)

	+ consolidated TURBO, WATCOM, MSC, ZTC, and GO32 under a new,
	  presumptuous #define, called NEWDOSCC. (mostly same files as djgpp
	  changes)

	+ fixed calloc macro (estruct.h) in RAMSIZE ifdef

	+ added map.c/map.obj source file for VMS (descrip.mms, vms_link.opt)

	+ removed bogus dbgwrite in exec.c, where linespec returns a value
	  for "toline" which can be null.

Changes for vile 3.51:
(pgf)
	+ added a couple of tweaks to tom's check-modtime changes -- prompts
	  are not suppressed if you're writing the buffer out, and running
	  a shell only checks visible buffers for modtime changes, rather
	  than all buffers.

	+ added regexp metacharacter "index" in margin of vile.hlp.

	+ renested some limit setting in scanner(), so I can understand it
	  again. (search.c)

	+ changed name of ABS macro to ABSM to avoid namespace conflict
	  on OSF/1. (cmdtbl, exec.c estruct.h)

	+ made :map to SPEC key-sequences work (map.c insert.c)

	+ undo now preserves current column as well as row (undo.c estruct.h)

	+ changed name of "naptime" to "timeout-value"  (main.c modetbl
	  vile.hlp input.c)

	+ added new variable $mode, which is the name of the user-mode we
	  e're in: "command", "insert", "overwrite".  the value is set
	  when we enter insertmode, and restored when we leave.  this lets
	  macros invoked from within insert mode find out if they should
	  enter insertmode.  (eval.c, modetbl, insert.c, proto.h, vile.hlp)

	+ prc2kcod will now accept literal control chars, and also will
	  accept hex specifications.  so now key-sequences can be specified
	  as follows:		(bind.c map.c vile.hlp)
	  	an optional prefix:
			^A	(one char)
			^A-	(three chars)
			^X	(one char)
			^X-	(three chars)

		followed by an optional "function" prefix:
			FN-	(three chars)
			M-	(two chars)
		    (these two are synonymous)

		followed by a character:
			C	(one char)
			^C	(one char)
			^C	(two chars)
			0xNN	(four chars)
			0XNN	(four chars)
			<tab>	(five chars)
			<sp>	(four chars)


	+ removed old BEFORE ifdefs (input.c insert.c)

	+ better error checking on parsing of key-sequences in exec'ed files.
	  (bind.c)

	+ if dobuf() encounters an error, it switches to that buffer.  but
	  until now, this error propagated back through nested dobuf()'s,
	  and we ended up looking at the 'source "filename"' line in the
	  outermost buffer.  now we only switch on the most deeply nested
	  dobuf().  also, we no longer set file buffers that we're executing
	  to view-mode.  (exec.c)

	+ if we get an error on startup, we skip right to the editing loop,
	  so the user gets confronted with the error right away.  (main.c)

	+ gave adjustmode a real return value -- used to always return TRUE.
	  (modes.c)

	+ when looping backwards backspacing, check if the input char was
	  killc or wkillc before checking isbackspace(c), since otherwise
	  if killc is DEL, we'll treat it as backspace first.  (this is
	  because ^H and DEL are both assumed to be backspacers initially)
	  (insert.c input.c)

	+ implemented new universal mode, "naptime", which is the number of
	  milliseconds to delay before accepting a lone ESC character,
	  rather than as the start of a function key sequence.  also added
	  boolean arg to catnap(), which controls whether detection of user
	  input will abort the catnap delay.  the default for this mode is
	  500 milliseconds.  the old value was 50, which was fine for fast
	  local displays, but didn't work well for serial terminals or
	  rlogin sessions.  (which surprises me somewhat -- 9600 baud
	  translates to roughly 1 character per millisecond -- why is a
	  delay of 50 ms not enough for the second character of a function
	  key generated by a terminal?) (proto.h fences.c input.c random.c
	  modetbl vile.hlp main.c)

	+ applied patches for Watcom C/386, from Tuan DANG (dang@cogit.ign.fr).
	  I haven't had a chance to try them yet. ( mktbls.c cmdtbl estruct.h
	  dirstuff.h ibmpc.c main.c fileio.c random.c termio.c display.c
	  glob.c npopen.c path.c proto.h spawn.c makefile)

	+ renamed turbo makefiles, to be more similar to the watcom makefiles.

	+ fixed insert-string to really insert instead of overwrite.

(tom (3.51))
	+ added buffer-mode 'check-modtime' to check if the disk-file is newer
	  than the buffer when reading, writing or popping a window (adapted
	  from a patch by Randy Winney, modifies (files file.c, fileio.c,
	  buffer.c, random.c, spawn.c).  Note that moving the cursor between
	  buffers does not perform this check.

	+ use macro 'for_each_line()' in some more places (files: buffer.c,
	  globals.c, random.c, spawn.c, vmalloc.c).

	+ use new function 'SetCurrentWindow()' in file window.c.

	+ added checking in 'SetVarValue()' (file eval.c) to guard readonly
	  buffers from modification.

	+ added checks in file mode.c to prevent major-mode changes to scratch
	  buffers (and corrected the settings of WFMODE in file modetbl).

	+ tested/augmented RAMSIZE configuration option (files main.c,
	  display.c), made a mode 'showram' to control it.

	+ merged field that shows major-modes in the modeline (e.g.,
	  "view-only"), and added "cmode" when it is active.

	+ added buffer-flag BFSIZES; use it in 'bsizes()' to compute byte/line
	  counts only when buffer has been changed.  Also, added function
	  'add_line_at()' to merge file-reading logic which initializes the
	  byte/line counts (files: buffer.c, file.c).

	+ if dos-mode is set on a buffer, trim carriage-returns from files that
	  are inserted into it (file file.c).

	+ renamed macros in file buffer.c that test BUFFER.b_flags, added
	  macros for setting/clearing these flags, moved the macros to
	  estruct.h to use in files bind.c, buffer.c, file.c, history.c,
	  modes.c, random.c, spawn.c, tags.c, undo.c.

	+ corrected size shown for buffer-list within the buffer-list display
	  (file buffer.c).

	+ use window-colors for modelines rather than global values (file
	  display.c).

	+ disable ":p" command from within buffer-list display (oneliner.c)

Changes for vile 3.50:
(pgf)
	+ finished (yeah, right) the changes for infinite undo. implemented
	  mode to control how many changes are stored (called "undolimit").
	  the modified bit (BFCHG) now gets reset if the right number of
	  undos is done.  (estruct.h main.c modetbl undo.c buffer.c vile.hlp)

	+ rearranged calls to copy_for/tag_for/toss_to_undo and chg_buff
	  so that the BFCHG flag is unmodified before the first call to
	  preundocleanup().  this gives undo the true state of BFCHG.
	  (line.c region.c)

Changes for vile 3.49:
(pgf)
	+ implemented infinite undo, on keys ^X-u (undo) and ^X-r (redo).
	  probably affected location of cursor after some undo operations --
	  don't if this will be significant or not -- i doubt we matched
	  vi before in this regard anyway.  (undo.c, cmdtbl, buffer.c, proto.h
	  estruct.h, vile.hlp)

	+ use an explicit %s when printing lone filename, to protect against
	  filenames with % in name. (display.c)  (eric krohn)

	+ don't allow kbd_putc to print to last column of display, since if
	  the terminal autowraps, this causes a scroll.  this should check
	  the :am: capability, but we're at the wrong layer to do that, and
	  it doesn't seem worth adding to the TERM struct to make that info
	  available (unix-pc behavior pointed out by eric krohn).

	+ added Otto Lind's initial :map implementation (map.c, main.c,
	  cmdtbl, makefile, proto.h)  This is a good start, but has the
	  following limitations:  1) no string to string maps.  only simple
	  keysequences are mappable.  2) not integrated with the keyboard
	  macro routines -- this would make sense, and allow for recursion
	  to be detected more properly.  but the keyboard macros are pretty
	  tied into the named registers, which are stored in KILLREGS,
	  which doesn't seem right for the :map'ed things.  perhaps we could
	  dispense with the KILLREGS, and replace them with tbufs.  then some
	  small changes the layering of start/finish_kbm and kbm_started
	  could allow the :map code to share those routines.

	+ added alistair crooks' lint stuff and change for the NeXT. (proto.h,
	  mktbls.c)

(tom)
	+ modified file undo.c so that changes to scratch buffers can be
	  undone.

	+ modified 'imply_alt()' in file buffer.c so that the top/current line
	  numbers are propagated into the alternate buffer.

	+ changed environment variable 'directory' to 'cwd' so that 'directory'
	  can be used for vi-compatible directory variable (used to control
	  where the temp-file is written).

	+ implemented environment variable 'directory' (files modetbl, eval.c)
	  and used it to control temp-file location (npopen.c, tmp.c).  This is
	  set by the environment variable TMP.

	+ changed logic that opens/closes temp-file in tmp.c to use 'tempnam()'
	  to derive the filename; added entrypoint 'tmp_cleanup()' to remove
	  the temp-file on exit, and 'exit_program()' to file main.c to make a
	  single exit-point from which to call 'tmp_cleanup()'.

	+ Use macro 'ExitProgram()' to hide whether we call 'exit_program()' or
	  'exit()' (files main.c, display.c, ibmpc.c, spawn.c, vmsvt.c, vt52.c,
	  termio.c, termcap.c, file.c, window.c, x11.c).

	+ modified 'mktbls.c' to generate definitions for 'nemode.h' in a
	  form that allows modes to be conditionally compiled.

	+ added a column to 'modetbl' to ifdef out modes that are not used.

	+ made 'crypt', 'fcolor' and 'bcolor' modes ifdef-able (files main.c,
	  modes.c, modetbl).

	+ simplified 'promptpattern()' and 'expandp()' in file isearch.c

	+ corrected USE_D_NAMLEN ifdef in 'expand_pattern()' (file glob.c)

	+ corrected behavior when user inserts a newline into an empty buffer
	  (file line.c).

	+ moved environment variable definitions from cmdtbl to modetbl to
	  ensure that name-completion table for modes+vars is updated in one
	  place.  Sorted the environment variable names in modetbl and vile.hlp

	+ include "nevars.h" within main.c to allow common name-completion
	  table (without introducing lots of extra string-pointer variables).

	+ modified mktbls.c to put the environment-variable names into the
	  'all_modes[]' array in nemode.h (to support common name-completion).

	+ modified 'listvars()' in file eval.c to optionally show all modes
	  and environment variables in one list (if the user supplies a numeric
	  argument before the "show-variables" command).

	+ modified 'gtenv()' in file eval.c to recognize mode-names as well as
	  environment names, and logic in file modes.c to recognize environment
	  names.  Thus, for example, the commands
	  	":setl dos" and
		":setv $dos=true".
	  are equivalent.

	+ changed use of 'sprintf()' to 'lsprintf()' (files buffer.c, modes.c)

	+ use macros 'FreeAndNull()' and 'FreeIfNeeded()' to simplify code
	  (buffer.c, eval.c, file.c, filec.c, main.c, modes.c,
	  npopen.c, oneliner.c, search.c, random.c, x11.c)

	+ changed case-statements for EV-variables to if-then-else-if in
	  file eval.c because VAX-C cannot handle constant-expression
	  OFFSETOF as case-values.

	+ added 'tempnam()' to file vms2unix.c (to support testing of
	  mapped-data configuration).

Changes for vile 3.48:
(pgf)
	+ added FILEC_PROMPT flag to mlreply_file call in writeregion, to
	  make ^W file-writing operator work.

	+ folded some long lines (opers.c filec.c file.c)
(tom)
	+ corrections to make undo work properly with mapped-memory option
	  (files buffer.c and tmp.c).

	+ use symbol 'null_ptr' to tidy up references to '(LINE *)0'
	  (files buffer.c fences.c line.c main.c undo.c)

	+ changed LINE.l_size to SIZE_T (to make it lintable)

	+ corrected "poison" code in 'lfree()' (file line.c)

	+ added logic to finderr.c to handle lint output on apollo.

	+ added logic to handle line truncation (files buffer.c, file.c,
	  line.c, tmp.c)

	+ added function 'l_region()' to file tmp.c; use this (with some
	  reorganization) in files file.c, oneliner.c, region.c, word.c to
	  track LINEPTR adjustments in REGION structs.  (Converted most of the
	  calling procedures to single-return to clarify this).

	+ moved options-logic in 'substreg1()' (file oneliner.c) down to make
	  this simpler (and avoid unnecessary goto).  (This procedure has too
	  much logic to convert to single-return).  Also fixed a place that
	  should have used 'end_string()'.

	+ used macro 'same_ptr()' to compare LINEPTR's directly (a bit more
	  efficient).

	+ implemented page-swapping logic in file tmp.c

	+ modified ifdefs in files bind.c, eval.c, finderr.c to get rid of
	  compiler warnings when SMALLER, REBIND and APROP ifdefs are turned
	  off.

	+ used 'memcpy()' and 'memset()' in files buffer.c, line.c to simplify
	  loops copying text into LINE's.

	+ modified interfaces of functions that may modify 'LINE *' pointers
	  (or, equivalently, cause swapping of a LINE to a different address)
	  to use LINEPTR arguments (for example, 'line_no()' can iterate over
	  all lines, causing swapping).  Also modified functions (especially in
	  files line.c and undo.c) to use LINEPTR variables where they call
	  lower-level functions that may page-swapping.  Affects files
	  buffer.c, display.c, exec.c, file.c, filec.c, input.c, line.c,
	  oneliner.c, random.c, region.c, search.c, vmalloc.c, word.c

	+ replaced call on 'lalloc()' in file exec.c with 'addline()' (only
	  difference is that the latter also sets b_dot).

	+ converted several functions in file undo.c to static (to simplify
	  tinkering with LINE/LINEPTR tradeoffs).

	+ modified calls on 'lalloc()' in file undo.c to use special codes for
	  l_used member directly.

	+ added options -Wconversion -Wstrict-prototypes -Wmissing-prototypes
	  to gcc flags in makefile; addressed these warnings (except for
	  'signal()' arguments, which cannot be fixed) on sunos.  Modified
	  files bind.c, file.c, filec.c, fileio.c, glob.c, insert.c, line.c,
	  path.c, random.c, region.c, spawn.c, tcap.c.

	+ corrected ifdef in 'string_has_wildcards()' (file glob.c) for VMS.

Changes for vile 3.47:
(tom)

    (part a)
	+ introduced 'l_ref()' and 'l_ptr()' functions, rippled-through changes
	  to support mapped data (files basic.c buffer.c csrch.c display.c
	  estruct.h eval.c exec.c fences.c file.c filec.c finderr.c globals.c
	  history.c insert.c line.c oneliner.c path.c proto.h random.c region.c
	  search.c spawn.c tags.c tmp.c undo.c window.c word.c)

	+ added logic to file tmp.c to allocate LINE structs from a pool of
	  pages (note that deallocation isn't done, nor is swapping to a
	  tmp-file as yet).

    (part b)
	+ added code to test return-value of 'glob()' in file eval.c

	+ corrected 'get_recorded_char()' (file input.c) to reset 'buffer'
	  variable after 'finish_kbm()' makes it obsolete.

	+ provided more useful defaults for TERMCAP, IBMPC and COLOR
	  definitions in file estruct.h

	+ corrected value of MK in 'FreeBuffer()' (file buffer.c), which caused
	  multiple frees of the same LINE struct.

	+ supplied initialization for wp->w_dot.l and wp->w_line.l in
	  'reframe()' (file display.c) to handle the case when vile is invoked
	  with no filename parameters.

Changes for vile 3.46:
(pgf)
	+ suppress attempts at reading a null file into the [vileinit]
	  buffer (main.c)

	+ don't require the d_namlen field in a DIRENT struct -- some systems
	  don't have it, and most of those that do null terminate the name
	  anyway.  (dirstuff.h, filec.c, glob.c, path.c)

	+ changed compile flags for uts, on user suggestion (makefile)

	+ in ffread(), after doing read(), do an fseek to sync up.  this
	  keeps some stdio implementations from not bothering to seek back
	  to the start in case we have to discard the read and resort to
	  slowreadf() due to long lines. (fileio.c)

	+ avoid realloc(ptr,0) when long lines are encountered in quickreadf()
	  (file.c)

	+ make M and L commands take account of too few lines in window (i.e.
	  do the right thing when end of file is on screen). (basic.c)

	+ even if the global dos-mode is on, empty (new) buffers should come
	  up as non-dos.  (file.c)

	+ fnc2engl() now tries to return a longer, meaningful name for a
	  function (i.e. "exit" rather than "Q"). (bind.c)

(tom)
	+ test-compiled VMALLOC, DEBUGM options on apollo.

	+ introduced 'set_lforw()' and 'set_lback()' macros to use in mapped
	  memory option.  Added stubs in new file 'tmp.c'.  Modified files
	  buffer.c exec.c file.c filec.c line.c undo.c, verified mechanically.

	+ added definition of LINEPTR and 'lsync()' to files estruct.h, proto.h

	+ fixed a memory leak in 'glob()', and changed interface to
	  'glob_free()' (files filec.c, glob.c, glob.h).

	+ revised logic in ibmpc.c that sets screen resolution ($sres) to
	  make it more table-driven.

	+ corrected 'forwline()' in file basic.c (repeated movement down
	  sometimes reset the cursor to column 1 unlike vi).

	+ added prototypes to 'mktbls.c'.

	+ modified file main.c so that if the standard input isn't a terminal
	  then vile reads it into a buffer and reopens /dev/tty (unix only).

	+ modified files main.c and epath.h to allow (for unix systems) vile
	  to find vile.hlp even if vile isn't in the path.

Changes for vile 3.45:
(pgf)
	+ got rid of LOOKTAGS mode, and all of its ifdefs (filec.c, main.c,
	  modetbl, proto.h, tags.c)

	+ got rid of NeWS ifdefs (basic.c, bind.c, buffer.c, edef.h,
	  estruct.h, exec.c, file.c, input.c, isearch.c, main.c, modes.c,
	  spawn.c, termio.c)

	+ resolved vile.hlp modes documentation and modetbl (vile.hlp)

	+ added missing mlreply call in goto-named-mark processing, to
	  allow "goto-named-mark a" to be used in a command file. (basic.c,
	  proto.h)

	+ added man page (don't get excited -- it's short), and turbo makefiles
	  vile.mak, mktbls.mak.  (makefile)

	+ fix to ins/inschar/istring to correct for bad backspace limiting
	  (insert.c)

	+ fixed off-by-one bug for column count under X. (x11.c)

	+ turned off typahead detection for X11.  updates were being held
	  off incorrectly. (termio.c)  related change, possibly unnecessary:
	  reordered initial mlforce() and initial update() in main, because
	  xvile was not starting up properly.

	+ no longer set _bspace bit in _chartypes[backspc], and isbackspace()
	  macro tests backspc directly.  will make rebinding of backspace
	  simpler. (estruct.h, termio.c)

	+ some changes to set-terminal stuff -- took out the keys that can
	  be rebound with bind-key, i.e. those that have effect only in
	  command mode.  added help.  (bind.c, vile.hlp)

	+ no longer strip the SPEC bit in ttgetc, so a meta key can be used
	  to generate "function keys"  (termio.c, vile.hlp)

	+ updated README

Changes for vile 3.45:
(tom)

	+ more fixes for long/int complaints from TurboC (files tags.c spawn.c
	  random.c main.c display.c bind.c).

	+ added logic to fileio.c so that (MSDOS only) overwriting a file
	  saves the old version renamed to ".bak" suffix.

	+ simplified argument processing in file main.c; reduced size a little.

	+ reorganized code that uses tungetc so that it isn't used as often.
	  This also makes 'tpeekc()' obsolete.  Moved extern-defs for 'tungotc'
	  to edef.h (files input.c, exec.c, globals.c, oneliner.c, termio.c).

	+ modified 'setvar()' in eval.c to show warning message if attempt is
	  made to modify a readonly variable, or if for some other
	  reason an environment variable cannot be set.

	+ modified 'ibmcres()' in ibmpc.c to allow user to reset using value of
	  CDSENSE as argument.

	+ corrected inequality-test in 'newscreensize()' (file display.c) that
	  prevented user from correctly setting $sres back to VGA in IBMPC
	  config.

	+ renamed entrypoints in file crypt.c to 'ue_setkey()' and 'ue_crypt()'
	  to avoid confusion with unix crypt(3) (files fileio.c, file.c
	  crypt.c, main.c, cmdtbl).

	+ corrected core dump when using encryption from command line by
	  splitting out 'ue_makekey()' from 'ue_setkey()'; used this from
	  'resetkey()' in file.c

	+ corrected handling of -k (crypt option); added a global 'cryptkey'
	  which is used to set the encryption key only in files listed as
	  command arguments (files edef.h, main.c, buffer.c).

	+ overwrite -k parameter value in main.c (for those systems where this
	  has an effect, it changes the value shown in a "ps" command).

	+ made 'quickreadf()' decrypt file.

	+ corrected 'resetkey()' so that it doesn't automatically use crypt key
	  for files that aren't the same as the buffer.

	+ The prompt added to 'resetkey()' also required moving some calls on
	  'ttclean()' (file.c).  Simplified some of the ttclean code using
	  CleanToPipe and CleanAfterPipe macros.

	+ corrected 'resetkey()' so that if no password is provided (at least
	  for pipes), the operation will proceed properly (i.e., read/write
	  without encryption).

	+ modified 'modeline()' in display.c to show if the current buffer is
	  encrypted.

	+ made NAMEC and TESTC define to variables name_cmpl and test_cmpl,
	  which can be modified at run-time (files estruct.h, edef.h).

	+ added commands "set-terminal" and "show-terminal" to set/show special
	  characters (including NAMEC/TESTC values!).  Put this into file
	  bind.c (reusing pieces of 'bindkey()').

	+ make '#' (special prefix-key) rebindable, like cntl_a-prefix.

	+ make display-routines in bind.c show the actual characters to which
	  CTLA and CTLX are bound (function 'kcod2str()').  Note that
	  'prc2kcod()' still assumes that CTLA and CTLX are bound to control
	  characters.

	+ changed argument type of TERM.t_cres to 'char *' to allow consistent
	  usage of variable 'sres[]' (files tcap.c, ibmpc.c, z_ibmpc.c).

	+ changed values recognized by ibmpc.c for "$sres" to be the names
	  that it returns (e.g., "VGA") and the number-of-lines (from main.c's
	  arguments).

	+ finished off 'npopen()' for MSDOS (allows write-pipes) and
	  implemented 'inout_popen()'; used in file spawn.c for filter-region
	  command.

Changes for vile 3.44: (pgf)
	+ fixed indentation if openup used in cmode, with a single word on
	  the current line -- indentation was coming from the _next_ line,
	  instead (insert.c).

	+ finderrbuf() now remembers its last argument (finderr.c)

Changes for vile 3.44:
(tom)
	+ corrected file descrip.mms; the vms_link.opt file no longer applies
	  to mktbls.exe; also fixed 'clobber' rule.

	+ corrected file glob.c (don't treat '$' as a wildcard on vms).

	+ correction: moved call on 'global_val_init()' before
	  'expand_wild_args()', to make wildcard globbing work on vms and
	  ms-dos (file main.c).

	+ corrected logic of 'kbd_reply()'; last_eolchar was not being set
	  properly when NAMEC wasn't space (file input.c).

	+ modified 'kbd_engl_stat()' in file bind.c so that if NAMEC is not
	  bound to space, then name-completion for :-commands is turned on.

	+ added option KBD_NULLOK to 'kbd_reply()' and used it in function
	  'kbd_engl_stat()' to re-allow commands to be empty (files bind.c,
	  input.c, estruct.h), needed after decoupling NAMEC and space.

	+ corrected 'slowreadf()' in file file.c so that dos-mode files are
	  read properly.  (The code stripped CR's even when dos-mode wasn't
	  set).

	+ implemented 'npopen()' and 'npclose()' for MSDOS; used this to make
	  MSDOS logic for ^X-!  the same as on UNIX (modified files fileio.c,
	  npopen.c, spawn.c).

	+ modified 'makename()' to yield essentially the same result for
	  MSDOS as for UNIX (in file.c), because 'npopen()' works similarly.

	+ added tests in 'ffropen()' and 'ffwopen()' to prevent accidentally
	  opening a directory-file.

	+ corrected handling of FIOFNF in 'readin()'; made this work on MSDOS
	  as well as UNIX (files file.c, fileio.c, display.c).  The value of
	  'errno' was not being saved to report in the error message.  Added
	  'mlerror()' to display.c to encapsulate the error reporting better.

	+ moved 'errno' declarations into 'estruct.h' (files display.c, file.c,
	  npopen.c, termio.c).

	+ added function 'set_febuff()' to encapsulate the 'febuff[]' and
	  'newfebuff' variables; moved these to finderr.c (files file.c,
	  finderr.c, spawn.c).

	+ corrected test in 'filename()' (file.c) for ":f" command.

	+ corrected test in filec.c for pre-existing file (don't prompt if it
	  is a pipe-command).

	+ corrected tests in filec.c for prompt for re-read (didn't look for
	  abort-status).

	+ test-compiled CRYPT, VMALLOC configuration flags on TurboC.  Modified
	  files crypt.c, estruct.h, vmalloc.c

	+ began addressing TurboC warnings for conversion between long/int.

	+ deleted obsolete defines in file estruct.h (CLRMSG, CTRLZ).

	+ added 'set_rdonly()' to encapsulate the places where an automatically
	  created buffer is made read-only.  This makes them more consistent.
	  Files: bind.c, exec.c, main.c, oneliner.c, random.c, spawn.c

	+ modified 'update()' in file display.c so that '.' commands don't
	  redisplay if VISMAC is configured (previously, only keyboard macro
	  redisplay was suppressed).

Changes for vile 3.43:
(pgf)
	+ changed NAMEC from SPACE to TAB (estruct.h).  changed eolchar arg
	  passed to kbd_reply in kbd_engl_stat from NAMEC to ' ', to
	  compensate.  added check against command term'ed with ' ' in
	  execute_named_cmd() (exec.c).

	+ added check for iswild() when scanning for wildcard chars in glob.c

	+ allow nulls as well as newlines to separate filenames in glob-pipe
	  output.

	+ added finderrbuf() routine (command is "error-buffer" or "find-next-
	  error-buffer-name"), to set the name of the buffer to scan for errors.
	  (finderr.c, proto.h, cmdtbl, vile.hlp)

	+ fixed pathname bug when scanning output that contains Entering/
	  Leaving pairs.  We no longer just keep a pointer to where we
	  found the directory name, but now malloc space for it.

	+ horizontal scrolling moves by half screens by default (window.c,
	  display.c)

	+ added AIX to machines that need sys/ioctl.h (termio.c, display.c)

	+ further fix to repeat counts and the '.' command, so that all cases
	  ( 6dw , 3d2w , etc.) work.

	+ support for letting a named register on a '.' command override
	  what was originally typed:  "adw"b.  will put one word in register
	  a and the nex in register b.  (input.c line.c exec.c)

(tom)
	+ corrected define in dirstuff.h to make TurboC compile again.

	+ corrected logic of 'makename()' in file.c for MS-DOS.

	+ added type CMASK to correct use of _chartypes[] array on MS-DOS
	  (e.g., in 'screen_string()' in input.c).

	+ deleted VMS-DCL file 'vile.com', since this causes conflict on
	  MS-DOS.

	+ lowercased color names in file modes.c

	+ modified ibmpc.c to get true white and yellow colors (had gray and
	  brown).

	+ modified files ibmpc.c and display.c to allow MS-DOS version to do
	  scrolling.

	+ removed unused assignments from file insert.c

	+ substituted all l_fp references to lforw macro, l_bp references to
	  lback macro, verified mechanically.

	+ make special case in 'dotcmdplay()' to allow (like vi) the repeat
	  count on '.' command to replace that on the replayed command.

	+ modified logic of 'writereg()' to allow its call on 'imply_alt()' to
	  correctly set the 'copy' parameter (only if a whole file is written).

	+ introduced new function 'same_fname()' to correct places where
	  matches between a filename and the buffer's filename broke (either
	  because it was not in canonical form, or because VMS version numbers
	  were not stripped).

	+ modified fileio.c to read/write binary files on MS-DOS to avoid
	  truncating files at ^Z.  This does not make ^M visible however.

	+ ifdefd out contents of 'dot_replays_macro()' in input.c to avoid
	  side-effects

	+ corrected logic of 'tungetc()' in file input.c; this had broken
	  replay of keyboard macro "iX<esc>/Y^MaZ<esc>".

	+ split out 'expand_wild_args()' from main.c into a new file glob.c,
	  which contains globbing code.  Moved 'glob()' from path.c to glob.c
	  also.

	+ moved function 'is_directory()' from filec.c to path.c; made it
	  public.

	+ added function 'no_memory()' to encapsulate the more common places
	  that vile/msdos runs out of memory; use this in several places to
	  simplify error reporting.

	+ added universal-mode "history", to allow turning that function off,
	  and instrumented history.c to automatically turn logging off if vile
	  runs out of memory.  (It is annoying to get out-of-memory errors on
	  _every_ command).

	+ modified display.c to fill in the long space before program & version
	  identifier for the scratch buffer (on the mode line).

	+ added option to 'mlreply_file()' to allow expansion of wildcard to
	  multiple files.  Use this in file.c (for ":e" and ":view" commands).

	+ modified files descrip.mms and vms_link.opt because (with new module
	  glob.c) the link-command line got too long.  Other mods to file
	  descrip.mms to make file vile.com generated (to avoid leaving it
	  around for ms-dos configuration), and the 'clean' and '.last' rules
	  (to make them less noisy).

	+ corrected 'ffronly()' in fileio.c; on VMS this caused some files to
	  be touched.

	+ implemented scrolling in file vmsvt.c

	+ implemented 'glob' mode to control how wildcards are expanded
	  (affects files main.c, modes.c, glob.c) and the corresponding piped
	  commands for glob-mode.

	+ added logic to 'makename()' to handle embedded blanks in filenames.

Changes for vile 3.42:
(pgf)
	+ added routine tb_stuff() (tbuff.c), which is roughly the
	  converse of tb_peek(), to allow simple replacement of a character
	  in a tbuff.

	+ used tb_stuff() to increment the buffer number when referencing
	  the numbered buffers -- i.e. "1p becomes "2p in a '.' command.
	  (input.c)

	+ backed out change to 'get_recorded_char()' (input.c) that caused
	  dd..."1P... to continue deleting lines after the P operation.

	+ added horizontal scrolling mode, to cause whole screen to shift
	  instead of just one line when cursor goes "off screen".  this
	  mode ("set hs", or "set horizscroll" is now the default. (display.c,
	  vile.hlp, main.c, modetbl, proto.h)

	+ allow cursor to rest in last column, if line is just that long, to
	  prevent extra horizontal scrolling. (display.c)

	+ split up the ins() function, to provide an inschar() function that
	  istring could use.  istring() now called by insstring() and
	  overwstring(), which are bound to "insert-string" and new
	  "overwrite-string" commands.  all this to allow "insert-string"
	  to take advantage of autoindent, cmode, wordwrap, etc.  will
	  need tweaks later when tty chars are rebindable (^U, ^W, etc.)

	+ compiled with "-Wmissing-prototypes", which turned up a bunch of 'em.
	  (proto.h)

	+ some linux gcc cleanup, mostly just including some more headers
	  (display.c file.c main.c)

	+ ifdefed out the onamedcmd() function, and it's binding (cmdtbl,
	  exec.c)

	+ took out the extern declarations of getpwnam and getpwuid that i
	  put in recently.  they seem to be causing more problems than they
	  were fixing.  in general, providing prototypes for system routines
	  is a real pain.  i wish there were an "ifnprototype" construct.

Changes for vile 3.41:
(tom)
	+ ifdef ioctl.h for APOLLO (note: you shouldn't use '"'-form for system
	  includes, since that could pick up files in the current directory,
	  and also because it does weird things to the include-path).

	+ moved code to support USE_LS_FOR_DIRS from filec.c to path.c, making
	  it look like unix-style directory routines.  Added ifdef for
	  OLD_STYLE_DIRS just in case...

	+ modified 'slowreadf()' in file.c so that piped input scrolls from the
	  bottom of the window, rather than the middle.

Changes for vile 3.40:
(pgf)

	+ the makefile no longer supplies any -I options.  this will cause some
	  machines to not find "ioctl.h" where it's in the sys subdirectory,
	  but I just spent a day tracking a bug caused by picking up the wrong
	  system headers (i needed the gcc "fixincludes", and they had moved).

	+ now honor LINES and COLUMNS in getscreensize (display.c)

	+ now handle searching multiple tags files specified in "set tags"

	+ bugfix to fences.c, which fixes indentation when inserting '}'

	+ added firstnonwhite() calls to godotplus, so we can publish it as
	  "whole-lines" (files basic.c, cmdtbl).

	+ added 'setjmp()' code to files main.c, input.c to handle ^C with
	  BSD-style signals.

	+ added define USE_LS_FOR_DIRS to files dirstuff.h and filec.c to
	  accommodate systems w/o a 'readdir()' function.

	+ corrected $pagewid (was returning length instead of width) in file
	  eval.c

	+ use lsprintf to form [Macro nn] names (file exec.c)

(tom)
	+ corrected 'ffwopen()' in fileio.c so that write of current buffer on
	  VMS works properly (forgot to strip version number).

	+ made 'flook()' work properly for vms (file bind.c)

	+ moved 'dname[]' table into file exec.c and 'cname[]' table into file
	  modes.c; did this to get rid of 'comma' macro, which does not work as
	  intended on Turbo-C (the comma got evaluated too soon).

	+ to prevent redefinition error in Turbo-C, removed redundant includes
	  for <stdio.h>, <string.h> and <signal.h> (already in file estruct.h)
	  from the ".c" files: ansi.c at386.c basic.c bind.c buffer.c crypt.c
	  dg10.c display.c eval.c exec.c file.c globals.c hp110.c hp150.c
	  ibmpc.c input.c isearch.c line.c main.c modes.c npopen.c oneliner.c
	  regexp.c region.c search.c spawn.c st520.c tcap.c termio.c tipc.c
	  vmsvt.c vt52.c window.c word.c wordmov.c x11.c z309.c z_ibmpc.c

	+ moved macro 'P' from file proto.h to estruct.h, adjusted definitions
	  in file 'estruct.h' to allow use of 'P' macro in CMDFUNC definition.
	  Added definition of type 'CmdFunc' for the actual pointer-type.

	+ use P-macro for TERM struct definitions (and added TTscroll),
	  modified files estruct.h and display.c

	+ corrected logic of 'dot_replays_macro()' in file input.c (for the
	  special case of macro "@w" followed by "dd" command, I noticed that
	  '.' replayed both commands).

	+ compiled with Turbo-C, turned on warning if function was called w/o a
	  prototype.  Added prototypes (including those for static procedures)
	  to get rid of these and other compiler warnings.  Doing this found an
	  error in eval.c and one in history.c (files modified: bind.c buffer.c
	  display.c eval.c exec.c fences.c file.c fileio.c history.c ibmpc.c
	  input.c insert.c main.c mktbls.c modes.c npopen.c opers.c path.c
	  random.c regexp.c region.c spawn.c tbuff.c window.c).

	+ corrected MSDOS-specific pathname translation in files path.c and
	  random.c

	+ corrected d_namlen value supplied in readdir function for VMS (file
	  vms2unix.c)

	+ implemented first version of filename completion for VMS.  (Directory
	  names are not completed; there are still some ambiguities between
	  scratch buffer names and VMS directory paths).

	+ added option KBD_UPPERC to input.c; use this to force prompts for VMS
	  filenames to uppercase.

	+ removed redundant declarations for 'getenv()'; it is already in file
	  estruct.h

	+ added new file 'vmspipe.c' which provides a piped-read facility
	  'vms_rpipe()'.

	+ modified file finderr.c to recognize lint output on SUNOS; also
	  corrected it to ensure that sscanf doesn't scan past the string
	  limits (no EOS was formerly on each line).

	+ added/used new functions 'pathleaf()' and 'pathcat()' to file path.c
	  to hide vms/unix pathname differences.

Changes for vile 3.39 (from Tom Dickey):

	+ corrected error in 'get_recorded_char()' (file input.c) that caused
	  command "ix^[j.j.j.j." to not repeat properly.

	+ corrected prompt-string in 'ShellPrompt()' (file spawn.c)

	+ corrected behavior of filename completion (file filec.c) so that
	  internal names and shell names can have blanks in them.

	+ provided a last-replay value for 'execfile()' in file exec.c (it was
	  defaulting to the current buffer, which is wrong).

	+ corrected pointer test in 'tb_sappend()', which was null in the
	  special case of a ":w" command before any ":e" or other read.

	+ simplified MSDOS-drive translation (untested) in file random.c to
	  accommodate changes made for VMS in other files.

	+ modified 'cd()' procedure in file random.c to chdir to home directory
	  on systems that have one.

	The following are changes to support VMS:

	+ added new files (shown in makefile and descrip.mms): dirstuff.h,
	  vms2unix.c, vile.com

	+ use new file 'dirstuff.h' for definitions in filec.c and path.c

	+ corrected some dependencies in descrip.mms

	+ corrected logic in 'imply_alt()' (file buffer.c) that lost the
	  original filename argument (replaced it with the lengthen-path).

	+ corrected logic in 'getfile()2' (file file.c) to account for the
	  distinction between buffer-names and file-names.  Simplified
	  'getfile()' and 'getfile2()' because of modifications to
	  'shorten_path()' and 'lengthen_path()'.

	+ corrected logic of 'ffread()' (file fileio.c); on VMS a single read
	  does not necessarily read an entire file.

	+ corrected definition of macro 'isready_c()' for VMS.

	+ modified 'shorten_path()' (file path.c) to provide the "./" prefix
	  that was added in files buffer.c and display.c; also absorbed the
	  test for MSDOS device prefix (e.g., "c:") there.  This was needed to
	  allow VMS port to show native pathnames.  The equivalent of "./" on
	  VMS is "[]".

	+ use VMS function 'fgetname()' and 'getname()' to determine the
	  fully-resolved path in 3 cases: after writing a file, after reading a
	  file, and in 'lengthen_path()' (files file.c and path.c).  This makes
	  it know the current version number of each file.

	+ modified 'makename()' (file file.c) to account for VMS pathnames.
	  Note that DecShell names (which the C runtime library accepts as
	  arguments to fopen, etc.) look much like unix filenames.

	+ added new function 'is_internalname()' to file path.c; this serves
	  the same purpose as the (now obsolete) macro isScratchName.  This
	  makes a better check (to keep VMS paths distinct from scratch buffer
	  names) than the macro.

	+ deleted macro isScratchName from file estruct.h; changed macro
	  isInternalName to use function 'is_internalname()'.  Adjusted other
	  macros in estruct.h and display.c to make VMS port work properly.

	+ added new function 'non_filename()' to file path.c; use this in files
	  bind.c and random.c to encapsulate the program+version string.  Use
	  'non_filename()' in 'is_internalname()'.

	+ corrected logic of 'screen_string()' (file input.c) to handle the
	  distinction between "[" and "]" used to delimit pathnames on VMS, and
	  to indicate scratch-buffer names.

	+ corrected wildcard, path and scratch-buffer characters for VMS (file
	  main.c).

	+ corrected/modified file path.c so that the functions therein support
	  VMS filenames.  Added several new functions to do this.

	+ corrected code for 'catnap()' (file random.c) for VMS.

	+ corrected several 'exit()' arguments (file termio.c)

	+ corrected VMS's ttgetc function (its interaction with 'typahead()'
	  was wrong; also 'typahead()' was not really implemented (file
	  termio.c).

	+ ifdef'd out a redundant 'ttclean()' call (which caused the output on
	  VMS to be closed more than once, which is really an error).

	+ guard 'vtinit()' (file vmsvt.c) against t_mcol or t_mrow too small

Changes for vile 3.38:
(pgf)
	+ cleaned up internal naming and help for alt-tabpos mode.
	  alt-tabpos on implies emacs-style, and it's off by default

(tom)
	+ corrected status-check in 'ffclose()' (in fileio.c) that generated
	  spurious 'Error on close' message, visible when nothing was read from
	  a pipe.  (Also eliminated redundant defs for 'npopen.c' in fileio.c
	  and proto.h).

	+ corrected place in 'globals.c' where (if the buffer was readonly),
	  the '/' delimiter after an s-command was not eaten.

	+ modified loop-limit in "show-registers" command to display the
	  numbered registers.

	+ corrected file fences.c, allowing C preprocessor lines to have
	  leading whitespace before '#'.  The cursor may be on any character
	  from the first column through the '#'.

	+ rewrote procedure 'cpp_fence()' in file fences.c, allowing it to
	  recognize "elif" keyword.  Added 'nextchar()' to file basic.c to
	  support this.

	+ modified procedure 'ShellPrompt()' in file spawn.c to eliminate the
	  ": " before prompts for ^X-!.

	+ corrected 'kbd_reply()' in file input.c to invoke 'tgetc()' directly
	  when ^V is used to escape a character.

	+ corrected 'kbd_kill_response()' in file input.c; ^W is not supposed
	  to trim blanks before a word.

	+ corrected 'update()' in file display.c; the VISMAC define does not
	  apply to "." command.  This fix allows showmatch to work with "."
	  command.  Also, in 'fmatch()' in file fences.c; test return-value of
	  'update()' to avoid catnap when update fails.

	+ corrected 'insert()' and 'insertbol()' in file insert.c; the cursor
	  was not being advanced after repeated insertions like vi.

	+ corrected file input.c so that it can handle a "." command within a
	  keyboard macro.  The macro was "iA^[l2." (for testing).

	+ modified file input.c (new procedure 'dot_replays_macro()' so that
	  the "." command after defining or executing a keyboard macro causes
	  the macro to be (re)invoked.

	+ split 'kcod2prc()' in file bind.c into 2 parts; the new one (i.e.,
	  'kcod2str()') is used to support 'dot_replays_macro()'.  Also use new
	  function 'fnc2kcod()'.

	+ added new function 'kbm_started()' to file input.c to get rid of then
	  non-recursive variable 'kbdplayreg'.

	+ save/restore "." repeat counts in 'start_kbm()' and 'finish_kbm()' so
	  that repeat works properly for keyboard macros.

Changes for vile 3.37:
(pgf)
	+ works on osf/1 alpha now, with hacks applied to termio.c and
	  display.c
(tom)
	+ added files 'descrip.mms' and 'vms_link.opt'; compiled on VAX/VMS
	  (but did not make it run) (tom dickey)

	+ pathname tracking fixes (calling shorten_path() correctly everywhere)

Changes for vile 3.36 (from Tom Dickey):

	+ supplied initial value for dirc-mode

	+ guarded 'mlreply_file()' against missing curbp->b_fname (for use in
	  .vilerc startup).

	+ corrected logic in 'kbd_reply()' (file input.c) that caused backspace
	  to be treated as a command-delimiter.

	+ corrected logic in 'kbd_reply()' (file input.c) that caused '/'
	  character in complex substitutions to be eaten, e.g.,
		:g/pattern/s//newpattern/g
	  broke after the 's'.

	+ corrected calls (broke in 3.35) on 'mlreply_file()' from 'insfile()'
	  and 'operwrite()' (mods to files estruct.h, filec.c, file.c and
	  opers.c).  The ^R and ^W commands always prompt for name, rather than
	  taking it from the screen.

	+ corrected end-of-line logic in 'do_a_mode()' (file modes.c).  This
	  had allowed history scrolling to display keywords that were separated
	  by blanks; fixed this by testing for both space and "=" characters.

	+ added calls to 'hst_glue()' in 'unqname()' and 'getfile2()' to add
	  blank in command history before the responses these functions solicit
	  from 'mlreply()'

	+ added macro 'char2int()' to file estruct.h, use this in fileio.c and
	  tbuff.c to hide byte-masking.

	+ changed data in TBUFF to 'char' (unsigned char does not buy that much
	  conciseness); absorbed macros 'tb_values()' and 'tb_length()' into
	  file tbuff.c as functions.

	+ corrected logic of 'tb_leaks()' (file tbuff.c); I had only exercised
	  this at the end of execution.

	+ removed unused define for TMPSTOP

	+ recoded handling of keyboard macros in file input.c to use TBUFF
	  structs (so there is no limit on length of keyboard macros).

	+ modified 'execkreg()' to remove length-limit on macros there as well
	  (file line.c)

	+ modified 'execkreg()' to allow invoking registers 0-9 (file line.c)

	+ modified files input.c and line.c so that "." and @-commands can be
	  invoked from within a keyboard-macro (i.e., ^X-&).

	+ modified files insert.c and input.c so that repeated "." command
	  works properly for i,I,R commands (the cursor must appear at the end
	  of the insertion).

	+ modified so that ^Z (job suspension) works properly on apollo sr10.3
	  (files termio.c and spawn.c).

	+ modified 'ttgetc()' in file termio.c so that (for apollo) it reads in
	  raw-mode.

	+ added flag to 'tgetc()', allowing it to suppress the conversion of
	  intrc to abortc (files basic.c csrch.c eval.c exec.c input.c
	  insert.c).  This change also lets users quote ESC characters.

	+ corrected unused args in 'globber()' (file globals.c)

	+ corrected special case in use of 'canonpath()' on apollo (user could
	  type in path beginning with "/", which was not getting "//" portion
	  of pathname prepended.

	+ renamed "vitabpos" mode to "alt-tabpos" mode, avoiding conflict with
	  "view" mode.

	+ added "implybuffer" (ib) mode to use in splitting out vi-style
	  buffer-implication from 'autobuffer' mode (files modetbl and main.c).

	+ added "samebangs" (sb) mode to allow the ^X-!!  and :!!  commands to
	  be optionally the same.

	+ Corrected logic of 'imply_alt()' so that it works with files read, as
	  well as written (files buffer.c and file.c).

	+ split out the pathname functions into file path.c

	+ added function 'is_appendname()' to path.c to better encapsulate the
	  isAppendToName macro's knowledge of the ">>" length (files path.c,
	  filec.c, fileio.c, random.c).  Used this to make functions
	  'canonpath()', 'lengthen_path()', 'shorten_path()' and
	  'is_pathname()' work properly with ">>" prefix.

	+ added code to 'path.c' to resolve "~" as user's home-directory.

	+ corrected code in 'makebufflist()' that caused b_bfname member to
	  be modified (file buffer.c).

	+ moved MSDOS drive-logic from 'ch_fname()' into 'lengthen_path()'
	  (files random.c and path.c)

	+ added procedure 'copy_val()' to modes.c to encapsulate the make-local
	  and make-global macros.  This fixes a case in which memory could be
	  freed more than once: if the user had done 'setl' commands for two
	  different buffers.

	+ made variables 'doslines' and 'unixlines' local to the procedures
	  'slowreadf()' 'readin()' in file.c; initialized these so that
	  successive reads of a set of files will treat the dos/unix line
	  counts separately.

	+ added command "set-dos-mode" to force the current buffer to be
	  in DOS-mode (trimming CR's).

Changes for vile 3.35 (from Tom Dickey):

	+ addressed compiler warnings from gcc 1.36 on apollo sr10.3.  (I know
	  it is old, but it gives useful warnings).  This required some minor
	  adjustments to defines/includes in files estruct.h, proto.h, main.c,
	  fileio.c, npopen.c, random.c to accommodate order-of-definition
	  problems in stdio.h and signal.h

	+ tested with gcc 1.40 on sunos 4.1.1

	+ tested compiling with SMALLER=1; fixes to files eval.c, input.c,
	  mktbls.c, npopen.c, proto.h, random.c (On my machine, this only cuts
	  about 10% from the binary).

	+ added EOS at mismatch-point in 'fill_partial()' in file bind.c, fixes
	  bug that caused incorrect display after repeated name completion and
	  query operations.

	+ guarded 'kbd_complete()' against embedded nulls in its buf-argument,
	  by testing for nulls before completion logic in file input.c

	+ added a flag 'kbd_expand' to make calls on 'kbd_putc()' via
	  'mlforce()' and related functions show tabs as a space.  This
	  modifies files bind.c, edef.h, display.c to fix a problem I
	  introduced in 3.32

	+ use 'kbd_expand' flag in file input.c to fix non-displaying ^M; other
	  fixes include quoting and backslash fixes, as well as correction to
	  wkillc handling.

	+ modified finderr.c to make the embedded tabs as "\t" digraphs, so
	  they are visible.  Added pattern to use with apollo C compiler.

	+ corrected logic in 'updpos()' (file display.c) so that vile displays
	  cursor location just-like-vi for tabs and control characters.

	+ made 'wordcount()' code (file word.c) work properly.

	+ corrected 'join()' (file word.c) so that blanks are not inserted when
	  joining after a space, or joining a blank line.  Also (like 'vi'), if
	  there is trailing whitespace on the first line, don't modify it.

	+ corrected flags for join-lines in file cmdtbl so that the region-
	  oriented code can work.

	+ made join-lines work with regions (files opers.c, word.c).

	+ restored GLOBOK flag for join-lines-til (regions work now).

	+ interchanged order of calls on 'toss_to_undo()' and 'lremove()' in
	  'ldelnewline()', since this was causing incorrect cursor placement
	  after an undo.  (The particular case arose in the rewritten
	  join-lines, when joining a blank line to a non-blank line).

	+ modified 'edithistory()' in file history.c to ifdef out the ESC code
	  (with new symbol KSH_HISTORY), merge the loops to use 'escaped' flag
	  to avoid redundant logic, and pick up control chars (e.g., ^N and ^P)
	  for scrolling.  This also modified files input.c and exec.c

	+ corrected logic in history.c (from 3.34) that uses the function
	  'WillExtend()' to modify/macroize !-commands.  The code did not
	  provide for the case in which the user would modify the text after
	  scrolling to it.

	+ corrected call on 'hst_flush()' in file pipecmd.c (it was not called
	  if the pipe-command failed).

	+ revised 'tgetc()' in file input.c to make it use a single return
	  point (simplifies testing and debugging).

	+ corrected file modes.c so that user can abort from a set command.

	+ deleted code for unused global 'lineinput' (files bind.c, input.c,
	  edef.h).

	+ renamed ifdef for LAZINESS to (global mode) TAGSLOOK, added an entry
	  to modetbl for "looktags" to test/update this code.  Note that this
	  is turned off by commenting out the "LookTags" line in modetbl.  This
	  affects also files main.c, file.c modes.c and tags.c

	+ added file 'filec.c' to perform filename completion.  Moved code that
	  was ifdef'd LAZINESS there, and recoded so that it stores paths
	  normally (not reversed!).

	+ created function 'mlreply_file()' in filec.c, used this to
	  consolidate prompting for filenames in file.c (Note that now all
	  filename prompts can get data from the screen).

	+ made most of the calls on 'mlreply_file()' default to the current
	  filename; this is simpler than the last name given to the command.

	+ moved check for writing view-only buffer from 'filewrite()' as new
	  local function 'writable()', before calls on 'writereg()' This
	  affects 'filewrite()', 'filesave()', 'imdying()' and 'writeregion()'
	  implicitly.

	+ use 'mlreply_file()' in 'execfile()' (file exec.c)

	+ use 'mlreply_file()' in 'operwrite()' (file opers.c)

	+ added 'no_such_file()' to file.c; use this in 'execfile()' so that
	  ":source" will report an error if the file is not found.

	+ created function 'mkreply_dir()' modeled after 'mlreply_file()' in
	  filec.c, used this to allow pathname completion in 'cd()' in random.c

	+ added mode "dirc" to file modetbl, to support directory name
	  completion.

	+ added l_number to LINE struct, b_bytecount to BUFFER struct (file
	  estruct.h) to use in caches for # of bytes and lines displays.

	+ added macro 'for_each_line' to file estruct.h

	+ added procedure 'bsizes()' to buffer.c to compute values for l_number
	  and b_numchars, b_numlines values.  Will later get this to cache
	  results to speed up 'line_no()' and related code.

	+ corrected column-splitting in file modes.c (error in 3.34 changes)
	  which caused dos-mode to not be shown.

	+ corrected flag in 'modetbl' for dos-mode: this makes dos-mode show in
	  the status-line.

	+ added new entrypoints to tbuff.c: tb_copy, tb_scopy, tb_bappend

	+ merged code in 'spawn1()' and 'pipecmd()' (file spawn.c) so that
	  !-commands and !!-commands work consistently.

Changes for vile 3.34 (from Tom Dickey):

	+ modified mktbls.c to use 3rd column of modetbl (window-flags).  Moved
	  window-flag defines in estruct.h to allow their use in nemode.h

	+ in modes.c, moved the code that updates window hints-flags from the
	  'adjustmode()' to 'adjvalueset()' procedure so that it can use the
	  new window-flags entry in nemode.h

	+ modified mktbls.c (and estruct.h, edef.h) to support global modes.

	+ added to modes.c: 'new_regexval()', 'free_regexval()', and
	  'free_val()'.  Use these in main.c and modes.c to simplify
	  leak-testing.

	+ added to estruct.h defines to use in testing memory leaks using both
	  dbmalloc as well as apollo-specific traces.

	+ added to main.c ifdef for NO_LEAKS; used this in testing for
	  permanent memory leaks (freeing data also finds specific types of
	  allocator corruption).  Added test-code for this purpose to:
	  buffer.c, display.c, line.c, regexp.c, tbuff.c, window.c

	+ plugged memory-leak in 'getfile()' in file.c by splitting it after
	  the temporary-buffer allocation, making tbp a static value, and
	  deleting the line that set the tbp.b_fname pointer to null.

	+ revised the value-checking in 'adjvalset()' (file modes.c) so that
	  unnecessary changes are ignored.

	+ further modified file modes.c so that typing ' ' (except after string
	  or pattern values) will continue the prompting for further set-modes,
	  as in noninteractive use.

	+ put the TTputc for '\r' back into 'kbd_putc()'; omitted this when
	  taking code for 'mlmsg()' from display.c

	+ added new function 'GetEnv()' to eval.c to guard against
	  null-return from 'getenv()'.

	+ added new command (to file line.c) "show-registers" to show the
	  contents of kill-buffers and registers.

	+ added new module 'history.c'.  This implements up/down scrolling in
	  an invisible buffer "[History]", which logs all :-commands.

	+ coded-around apollo sr10.3 optimizer-bug in 'execkreg()':
		kbdend = &kp->d_chunk[i];
	  resulted in kbdend == kp->d_chunk.

	+ moved autobuffer and c-suffixes modes to global-table.  Deleted 'cwd'
	  mode.

	+ modified mktbls.c so that each table will be sorted by name (not by
	  type&name).  Modified modes.c to take advantage of this and display
	  the modes sorted in columns (more like 'vi'), except for long strings
	  (which are deferred to the bottom of the display, still).

	+ make modes.c show the actual color name in addition to the index.

	+ rewrote 'kbd_string()' to interface it with 'edithistory()'.  Split
	  out entrypoint 'kbd_reply()' to support integration of history with
	  'namedcmd()'.

	+ redefined 'kcod2key()' in terms of N_chars; added macro 'isspecial()'
	  to estruct.h

	+ revised 'kbd_engl_stat()' and 'namedcmd()' to use the 'kbd_reply()'
	  entrypoint so that user can scroll through history of any portion of
	  commands.

	+ modified 'search.c' to log history for '/' and '?' commands.

	+ modified x11.c to use memcpy rather than bcopy (for consistency).

	+ made x11.c compile properly on apollo sr10.3 (there is a conflict
	  between prototypes in <string.h> and <strings.h>).

Changes for vile 3.33:

    	* many: cleanup for gcc-2.3's -Wall warnings

    	* bind.c: added new function, insertion_cmd(), which returns char
	that gives us simple insert mode.  used in x11.c and input.c, for
	pasting and for insert-mode arrow keys

    	* estruct.h: don't redefine "const" on linux

    	* makefile: added aix warnings, changed name of ENV to ENVIR, due
	to name conflict with linux make

    	* random.c: add include of sys/select.h for AIX

    	* x11.c: added code to support arrow keys and function keys from
	Phil Rubini

Changes for vile 3.32 (from Tom Dickey):

	* modified estruct.h, proto.h and display.c to compile vile on HP/Apollo
	  SR10.2 (CC 6.7).  Added new definitions ANSI_PROTOS and ANSI_VARARGS
	  to simplify this.

	* modified 'mktbls.c' to produce nemode.h; use these definitions
	  to replace buffer/window mode definitions in estruct.h and edef.h
	  (note that this obsoletes symbol MAX_STRING_W_VALUE, reordered
	  window int-modes).  Further modified 'mktbls.c' to only create
	  ".h" files for the cases where it has data (so that I can split
	  modetbl off from cmdtbl, avoiding unnecessary recompiles).

	* supplied an ifdef (at least for APOLLO!) in termio.c so that ^C
	  and ^U work properly.

	* added buffer-mode 'wrapmargin' to file insert.c (which overrides
	  wrapwords iff it is set to nonzero).

	* added new module 'tbuff.c' to manage dynamic buffers in places
	  where local static buffers exist now.

	* modified 'ins()' in insert.c so that it reallocates 'insbuff[]',
	  allowing arbitrarily-large re-inserts.

	* modified 'input.c' to dynamically allocate 'tmpcmd' and 'dotcmd'
	  buffers.  This allows arbitrarily-large commands to be repeated
	  with '.'.

	* guard 'lengthen_path()' in file.c against shell/pipe/internal names.

	* added variable "$shell" (files cmdtbl and eval.c) to override
	  environment-variable "SHELL" in pipe-commands.

	* made 'show-vars' (file eval.c) show leading '$' or '%' to be
	  consistent with the way the user must type them.

	* suppress 'show-vars' (file eval.c) ERROR values (these correspond to
	  unimplemented variables)

	* corrected error in nextbuffer/swbuffer (file buffer.c) that allowed
	  vile to crash if "set noautobuffer" was specified in .vilerc

	* corrected display in 'show-vars' (file eval.c) of "$kill" (reference
	  to volatile data).

	* made new function 'kbd_complete()' (file bind.c) to allow keyboard
	  completion in tables other than NTAB.

	* modified logic in new function 'kbd_complete()' to show permissible
	  completions in response to '?'.

	* consolidated logic in exec.c, display.c, bind.c, input.c with new
	  procedures 'kbd_putc()', 'kbd_puts()', 'kbd_erase()', 'kbd_alarm()'
	  These hide random use of 'ttcol'.

	* make 'kbd_engl_stat()' (file bind.c) recognize word-delete character.

	* eliminated redundant unget/get (files bind.c, exec.c) in the interface
	  of 'kbd_engl_stat()'; this caused an infinite loop in the call from
	  'namedcmd()'.

	* modified bug-test in 'updpos()' (file display.c); I had a process hang
	  in that loop for some reason.

	* collapsed expand/dobackslashes args of 'kbd_string' (file input.c)
	  into one mask.

	* modified 'mktbls.c' further to produce table 'all_modes[]', to use
	  this for name-completion of mode.

	* modified 'mktbls.c' to recognize color-types so I could get rid of
	  upper/lower case kludge in modes.c

	* modified 'modes.c' to use color-types.  The interactive behavior now
	  uses 'kbd_string()' to split the input at the '=' mark (if given).

	* added option-flag KBD_LOWERC to 'kbd_string()' (file input.c) so that
	  things that are forced to lowercase will be shown in that way on
	  input.

	* modified 'token()' (file exec.c) to handle the 'eolchar' for
	  non-interactive calls on 'kbd_string()'.

	- modified 'eval.c' to recognize '=' as a separator between
	  variable-name and value, as in 'modes.c'.

	- modified 'eval.c' to perform name-completion for environment
	  variables (i.e., those beginning with '$').

	- modified 'modes.c' to accept vi-style multiple assignments in a ":set"
	  command (this works non-interactively).

	- corrected 'imply_alt()' in buffer.c; ensure that the fname-argument is
	  non-null.  If called via 'filterregion()', it will be null.

Changes in 3.31:  (Tom Dickey)

	* corrected test in 'find_alt()', which caused the %/# toggle to work
	  incorrectly in noautobuffer mode.

	* updatelistbuffers after 'cd' command

	* added 'chg_buff()' & 'unchg_buff()' to encapsulate logic to update
	  buffer-list after buffers are modified.  The function 'lchange()'
	  is replaced by 'chg_buff()'.

	* modified 'histbuffer' to toggle according to 'find_alt()'

	* make the filename/buffer/number change for 'killbuffer' apply to
	  'usebuffer()'

	* corrected handling of repeat-count in 'C' command.

	* updated vile.hlp

	* revised 'mktbls.c':

		* filter out redundant ifdef's
		* tab-align data items for readability
		* modify 'nefunc.h' to use prototypes rather than K&R style
		  definition, also split the extern-definitions from the
		  data items for readability.
		* make procedures static, linted
		* modified so that 'evar.h' definitions are automatically
		  generated, so that "show-variables" can show a sorted
		  list of variables.  The new filename is "nevars.h".

	* corrected window refresh flag for 'U' (lineundo) command.

	* added an apollo-specific code in 'imdying()' to generate a walkback
	  for debugging.

	* corrected an error in 'zotwp()': reference to data that had been
	  deleted.

	* corrected an error in 'onlywind()': it did not delink window-pointer
	  after freeing it.

	* noticed that references to 'dfoutfn' weren't reentrant:  I did a
	  ":show-var" from the buffer-list and got only part of the heading.
	  Reorganized display.c to ensure that it is reentrant by using a
	  local copy of 'dfoutfn'.  Note that I didn't add 'dfoutfn' as an
	  argument to 'dofmt()' to avoid complications with varargs.

	* corrected 'dfputli()': it didn't do hexadecimal.

	* corrected 'updateline()': it sometimes failed to highlight the ends
	  of the mode-line.

	* corrected (my last change) to 'vtset()' so that "^J" is shown in
	  list-mode.

	* moved 'writeall()' from main.c to buffer.c; it belonged there, and
	  I used local macros for simplifying it.

	* remove SIGHUP handler before normal call on 'exit()' to avoid
	  vile-died messages when running it in an xterm.

	* corrected VMS definition of exit codes; added def of BAD-macro.
	  modified main.c, display.c, window.c accordingly.

Changes in 3.30, mostly from Tom Dickey:

This is lots of changes, mostly in buffer.c:

	* lint-clean: buffer.c

	* linted also: file.c, modes.c (though I left size_t alone for now).

	* added "list-vars" & "show-vars" to show the current variables

	* modified 'killbuffer' so I could add binding ^X-k to point to
	  a buffer-name in the buffer-list and kill it.

	* also modified 'killbuffer' to recognize filename if buffer-name is
	  not found, also buffer-number.

	* modify buffer.c so that the number shown by '_' and '*' is consistent

	* fixed ^X-o and ^X-O so they update buffer-list, as well as some
	  other places I missed before.

	* make some functions static (where they are really private), because
	  my per-module lint library got too large.  (I believe there are
	  too many externals).  In modes.c, this involved reordering, since
	  my practice is not to have forward-refs on static functions, to
	  make this work with some awful compilers.  This meant that I
	  deleted lines from 'proto.h'.

	* introduced new macro 'isreturn()', used this in correction in
	  'histbuff()'.  I used it in one bug fix & also where I could find
	  explicit compare for \r, \n.

	* added mode 'autobuffer':

		* the default is 'autobuffer' (the vile lru buffering)
		* curbp no longer is necessarily equal to bheadp
		* added members b_created, b_last_used, b_relink to support
		  the autobuffer/noautobuffer mode.
		* if "noautobuffer" is set, ":rewind" and ":n" apply only
		  to the original command-line files.

	* added macros SCRTCH_LEFT, SCRTCH_RIGHT, ScratchName, IsInternalName
	  to encapsulate use of '[' in names.

	* added macros SHPIPE_LEFT, isShellOrPipe to encapsulate use of '!' in
	  names.

	* added function is_pathname to encapsulate tests for pathnames
	  beginning with '.'.  This fixes the display of ".vilerc" from the current
	  directory as "./.vilerc".

	* added new char-types _scrtch and _shpipe to support killbuffer from
	  screen.  Use these types in new macro 'screen_to_bname()' which uses
	  modification of 'screen_string()'.  Used 'screen_to_bname()' to
	  make ^X-e and ^X-k "correctly" parse the bname, fname columns from
	  buffer-list.

	* fixed the error you mentioned in modeline (the position of col-80 mark
	  taking into account sideways and number modes).

	* supplied a missing TTflush in input.c

	* modified 'makebufflist()' to show only the flags actually used in the
	  footnote.

	* modified 'makebufflist()' to show '%' and '#' by the corresponding
	  buffer/filename.

	* added macros 'for_each_buffer()' and 'for_each_window()' to simplify
	  code as well as to keep visible references to bheadp & wheadp
	  confined to buffer.c and window.c respectively.

	* added/used macro SIZEOF

-------------------------------------------------------------------------------

Changes in 3.29:
-----------------

(fixes supplied by tom dickey, eric krohn, and willem kasdorp)

buffer.c: changes for keeping the buffer list more up to date when
	on screen
fences.c: allow match of fence that is first char. in buffer
file.c: avoid inf. loop when choosing unique name for buffers that have names
	containing "x" in the NBUFN-1 position and allow ":e!" with no file
	to default to current file
globals.c: implemented 'v' command
isearch.c, line.c, display.c: ifdef of some unused code
main.c: added .C, .i to cmode suffixes, for C++ and cpp output files
makefile, install target: test for presence of vile in destdir before
	trying to move it to ovile
oneliner.c: don't allow pregion to be used if the plines buffer is current,
	and set the WINDOW list mode, not the BUFFER list mode, so :l works
	again, and fix for s/.//g bug
regexp.c: fixes for interaction of BOL and \s etc.
spawn.c: lint cleanup  mostly casting strcXX() to void.
tcap.c: hack to supply CS or SR for scrolling region control, missing
	from some xterms
termio.c: added missing fflush in two of the ttclean() routines
word.c: fix for counts on 'J' command

------------------------------------------

The rest of the changes lister here are grouped only roughly, and represent
the delta of version 3.28 from vile version three.  -pgf Dec 30 1992

------------------------------------------------------

VI COMPLIANCE:
===============

- made ^N, ^P, and ^T do exactly what they do in vi.  (next line,
	previous-line, and tag-pop) Use ^X-o to switch windows, and ^X-2 to
	split them.

- ANSI style arrow keys now work from either command or insert mode.  Any
	ANSI function key of the form ESC [ c can be used as a command
	key -- the binding is FN-c

- the '#' key may now be used to force the following character to be treated
	as a function key.  Thus #1 is now equivalent to FN-1.

- some modes/values have changed names: aindent is now autoindent, swrap is
	now wrapscan, exact is now noignorecase, and they all have the vi
	shorthands (e.g.  tabstop is the same as ts, ic is the same as
	ignorecase).

- the "paragraphs" and "sections" values are now implemented, but as
	regular expressions -- they look pretty ugly, but I think they
	do what vi does.

- the sentence motions ')' and '(' now work.  they may not do exactly what
	vi does, but they're close.  they're controlled by regular
	expressions that find the ends of sentences -- then they move
	forward to the start of the next one.  The regular expressions are
	set in the new "sentences" value setting.

- "showmatch" mode now works, and momentarily shows the previous matching '('
	or '{'.

- "magic" mode, or rather "nomagic" mode, now works more like vi:  special
	characters are still available by escaping them in nomagic mode.

- there is a new mode, settable as "set terse" and "set noterse", which will
	suppress some of the extra messages that vile prints, reducing
	traffic for slow terminals.

- the '%' command now scans forward for a fence character if you're not on
	one to begin with (thanks to Dave Lemke).  I also added '^X-%', which
	scans backward instead.

- the ":&" command now works, and repeats the last ":s" or '^X-s'
	substitution.  it re-uses trailing p and l options, which vi does
	not.

- the '&' now works, and repeats the last ":s" or '^X-s' substitution.

- replacement sub-expressions work (\( and \), \1, etc.), as do \U \L \u \l

- there is a new operator, '^A-&', which is similar to '&' but acts on a
	region.  I expect that if you want it, you'll probably rebind it to
	something else (like '&') since typing it is awkward, to say the least.

- ^W and ^U are now both read from the tty settings, and they work in both
	insert mode and on the : line.  There is a "backspacelimit" setting
	that controls whether these (and regular backspacing (^H or DEL)
	will backspace past the insert point in insert mode.

- The '@' command can now be used to execute the contents of a named register,
	as if it were entered at the keyboard.  Thus @k executes register k.

- The "keyboard macro" obtained with ^X-( and ^X-) can be saved into a named
	register with the ^X-^ command.  This lets you record a keyboard
	macro and save it for use with the new '@' command.

- And, along to further complement the '@' command, it is possible to pre-load
	the named registers with the "load-register" command.  In a .vilerc
	you can say:
		use-register a load-register ihello^[
	(where ^[ is really an ESC entered with ^V-ESC), and then from
	within vile you can execute '@a', and the word "hello" will be
	inserted.

- the H, M, and L commands are now absolute motions

- insert mode now takes a repeat count, so '80i=ESC' inserts 80 '=' chars

- two new functions, to make normal motions more vi compliant --
	forward-character-to-eol and backward-character-to-bol, which won't
	move past the boundaries of the current line.

- you can no longer backspace from the beginning of a line to the end of
	the previous.  (rebind 'h' and '^h' from "backward-character-to-bol"
	to "backward-character"

- a motion caused by an undo is considered absolute, and the "last dot"
	mark is reset.

- added 'vi +/searchstring file.c' invocation syntax

- you can now specify a count to the ~ command.

- backslashes now have a protective effect on the : line -- they guard
	against expansion of #, %, :, and \.

- a lone ":f" without filename now gives same info as ^G

- 'x', 's', 'r' will no longer delete a line if used on an empty line.

- after a ":e!" command, the buffer name changes to match the filename, as
	if this were a new file read.  It used to just suck a new file into
	an old buffer, and the names didn't match.

- there is now a "taglength" setting, and the name of the tags file is in
	the "tags" setting.

- the "cd" and "pwd" commands now work

- shiftwidth has been implemented, so ^T, ^D, '<', and '>' all do pretty
	much what they do in vi

- there is a separate c-shiftwidth, used when in cmode, much as c-tabstop
	replaces tabstop when in cmode.

- ": args" is now similar in spirit to the vi command of that name


MISCELLANEOUS
===============

- reading files in general is _much_ faster, unless the file contains lines
	longer than 255 characters, in which case things slow down again.

- regular expressions are more powerful and much, much faster than they
	were.  vile now uses Henry Spencer's regexp code.  This has the
	side effect of making '\|' a new metacharacter, for alternation
	of expressions.  '\+' and '\?' are also new, and stand for "one
	or more" and "zero or one" occurrences.  they can be used from
	the I-search commands as well.

- in addition, \< and \> find beginnings and ends of words, and \w, \s,
	and \d find "word" characters, "space" characters, and digits.
	\W, \S, and \D find the converse

- related to the above change, replacement metacharacters now work, so you
	can use '&' and '\1' through '\9' in the replacement string, and
	you'll get the right thing.

- Dave Lemke contributed code to support vile under X windows -- including
	support for cutting/pasting, etc.  Thanks Dave!

- the '%' command will now find matching #if/#else/#endif sets.

- the '%' command will now find matching C comment sets.  Yes, it does
	the (non-)nesting correctly.

- tabstops can now be set to any value, and there is a separate value for
	tabstops in C mode.  (c-tabstop)

- there is now some support for horizontal scrolling, using ^X-^R and ^X-^L

- the ! filter command for running text through an external filter now
	works

- quite a bit of code cleanup, at least I think so -- it has ported pretty
	easily to a R6000, linux, 386bsd, Sony NeWS, NeXT, and the UNIXPC.
	it's close to lint-free, and Saber has very few problems with the
	code.  it'll now use prototypes if __STDC__ is defined, and it
	passes gcc -Wall -Wshadow with no warnings, if you ignore implicit
	declarations of system calls and lib routines.  the code should now
	be more portable, to various compilers and systems.  there are new
	targets in the makefile to make building on various platforms
	easier.  the makefile even supports microsoft C.

- the code now builds and runs under DOS, using (at least) Microsoft C 6.0.
	Peter Ruczynski has done a great job porting vile to DOS -- he
	calls that version "pcvile".  He has used the Zortech compiler in
	the past -- I didn't try to break that, but you never know.
	NOTE THAT THE DOS CODE IS KNOWN TO BE MUCH BUGGIER THAN THE UNIX CODE!

- quite a few bug fixes, including all (I think) of those reported by users

- the "last dot" mark, accessed with the names ' and ` doesn't get reset
	needlessly as often -- that is, if an absolute motion results in no
	move (e.g.  a failed search or tags operation, or an undo) then the
	"last dot" mark is unchanged.

- the "source" ("execfile") command now does globbing on the file being run
	-- be sure to put it in quotes, as in :source "$HOME/.vilestuff"

- entab, detab, and line-trim are now all operators (^A-tab, ^A-space, and
	^A-t)

- "make install" installs to /usr/local/bin or $HOME/bin, whichever is
	writable

- the english names of functions, particularly new ones, have been
	"rationalized", hopefully making it easier to remember their names.

- if you invoke a substitute command with ^X-s, it will always act globally
	across lines.  (i.e.  it behaves like "s/s1/s2/g", not like
	"s/s1/s2/")

- a QUIT signal will no longer cause core dump unless built with DEBUG on

- the display optimizes scrolling if possible when the window scroll
	commands ^E and ^Y are used.

- values/modes have been reworked.  Some are now attached to buffers, some
	to windows.  By default, all values use the global settings of
	those values, and will track changes to the global settings.  If a
	local setting is specified, it breaks the link between the local
	and global value, and the local value will no longer track the
	global value.  ":set all" is now more informative.

- the "set list" value is now attached to a window, not a buffer, so a
	single buffer can be displayed in two windows, "list"ed in one but
	not the other.

- reading from other processes into a buffer is now _much_ faster

- it is no longer legal to write out the contents of a buffer that has view
	mode set.

- the format region command (^A-f) now restarts with each fresh paragraph,
	so you can format an entire file at once, without collapsing it all
	into a single paragraph.  It also knows a little bit about C and
	shell comments, so you can now reformat blocks of commentary text.
	(There can't be any non-commentary stuff in front of the comments.)

- the position of the cursor within a window (the framing) is now preserved
	while the window if "off-screen" -- it no longer reframes when made
	visible again.

- there is now a mode indicator on the modeline: I for insert, O for
	overwrite, and R for replace-char.

- a line starting with '#' won't shift-right if the buffer is in C mode.

- :s/s1/s2/5 now works, to change the 5th occurrence on a line

- there are new commands to write all buffers: :ww is a synonym for
	"write-changed-buffers", and :wwq is now a synonym for
	"write-changed-buffers-and-quit"

- it is now legal to "kill-buffer" a displayed buffer

- there are new variables, $word, $pathname, and $identifier, which return
	the appropriate type of string from the cursor's location

- all of the variables, and the functions and directives of the extension
	language have been documented, and most have been tried, if not
	tested

- two new functions: &rd and &wr, return whether a file is readable or writable

- a new mode, "tabinsert", has been created to fill the needs of the
	"I hate tabs" camp.

- filenames are now put into canonical form -- this keeps "junk", "./junk",
	"./somedir/../junk" from appearing as different files to the editor.

- there is a new mode, "tagsrelative", which, when set, causes filenames
	looked up via tags to have the directory name of the tags file
	prepended to them before being accessed.  This allows one to cd into
	a build tree from within the editor, to facilitate a grep or a local
	build, and have tags lookups continue to work.

- the find-next-error code now honors the "Entering/Leaving directory"
	messages that GNU make (and others?) puts out.

- job control now works right

IMPLEMENTORS NOTES:
===================

- internally, most pointers into the buffer, consisting of a LINE * and an
	int offset are now represented with a MARK structure -- in the
	nineties, it's time to start using structure assignment.

- the set of values that are frequently handed about between buffers and
	windows, or windows and their "children" are now grouped into
	B_TRAITS and W_TRAITS structures, for easier bookkeeping.  There
	are lots of macros to hide the added data structure depth.

- if you add a new setting that should be inherited by and selectable
	on a per-buffer or per-window basis, add it to the W_VALUES or
	B_VALUES structs.  Otherwise, if its just a global value, like the
	X font, make it a variable.  I intend to merge the setting of
	variables in with the other values one of these days.

- there is now a generic printf facility built in, which is layered under
	mlwrite() for the message line, bprintf() to print into a buffer,
	and lsprintf() to print into a string

- LINE structures can now have NULL l_text pointers -- empty lines don't
	have memory associated with them (except for the LINE struct
	itself)

- line text is now "block malloc"ed -- now for most files there is are two
	mallocs and a single read, no copies.  previously there were two
	mallocs per line, and two copies (stdio's and ours).  This change
	implies that LINE structures and their text should not be moved
	between buffers -- the space they occupy may have come from the big
	chunks attached to the buffer structure, and not from the malloc
	pool directly.  So lfree() and lalloc() now take a buffer pointer
	argument.

- there is "line poisoning" code, in line.c, which trashes the contents of
	freed lines and LINE structs, to make it easier to find bad usage.

- do_fl_region() is a convenient wrapper for writing operator commands that
	work on full lines -- there isn't yet a similar wrapper for partial
	line operators.

- use mlwrite() for informative messages that terse mode will suppress,
	mlforce() for messages that _must_ be seen, and mlprompt() for
	messages that need a response from the user unless they're in a
	command file.

