Changes for vile 4.5 (released Wed Apr 27, 1994)
(pgf)
	+ backed out change to "set all" which switched to Settings buffer.
	  it didn't work, and was confusing in any case.  (modes.c)

	+ redid the variables that identify os and vile variant.  now the
	  $progname variable says "vile" or "xvile", and the new $os variable
	  says "unix", "dos", "vms", or "os/2".  (modetbl, eval.c, version.c,
	  proto.h, main.c, edef.h, vile.hlp, macros.doc)

(kev)
	+ vile.hlp: Documented manual page stuff.

Changes for vile 4.4 (not released April 26, 1994)
(pgf)
	+ fix for ": & 1" in empty buffer.  (exec.c)

	+ ensure that problems opening a file are correctly reported
	  at startup, by giving swbuffer() a real return value.  nextbuffer()
	  returns this, which lets main() do the right thing.  i hope
	  letting swbuffer() return readin() errors doesn't have to large
	  a ripple effect.  we'll see.  the return from swbuffer() is ignored
	  in many cases anyway.  (buffer.c, main.c)

	+ on file open errors in readin, continue with the routine, so the
	  buffer gets set up correctly.  cmode was wrong before, for instance.
	  (file.c)

	+ added select operator (bound to ^S) to do selections.  it yanks
	  by default.  (region.c, opers.c, cmdtbl, select.c)

	+ implement support (via new arg to scwrite, not yet put into other
	  "screens" that provide this routine) for OPT_VIDEO_ATTRS under DOS.
	  (display,c, ibmpc.c, proto.h)

	+ removed KBD_LOWERC from the DOS KBD_OPTIONS, as an experiment, even
	  thought tom told me not to.  i've seen no ill effects so far. 
	  there must be something, though...  (could this be compiler
	  (well, libc) dependent?) (filec.c)

	+ added proper dependencies to makefile.wat

	+ recalc kregwidth on last call to kinsertlater, since we may
	  never get a newline to force it.  (line.c)

	+ added mode "view-on-readonly" which causes view mode to be set
	  if file is read-only on first open. (modetbl, file.c, vile.hlp)

	+ implemented sel_motion() routine, that allows referencing the
	  selected region from an operator.  fixed various off-by-one
	  nits in various places to mkae this work right.  (basic.c,
	  opers.c, region.c, select.c, proto.h, cmdtbl, x11.c)

	+ cleaned up beeping.  too many double beeps.  (file.c, fileio.c,
	  basic.c)

	+ now preserve DOT during yank operations, so yy and Y don't cause
	  motion. (opers.c)

	+ added "haveregion" backdoor to getregion() -- if the "haveregion"
	  pointer is set, getregion just returns it as the region. see
	  select.c for uses of this.  (region.c)

	+ added #error statement to little/dis-used screen drivers, to
	  find out which are really used. (at386.c, hp110.c, st520.c,
	  z100bios.asm, z_ibmpc.c, dg10.c, hp150.c, vt52.c, z309.c)

	+ function lookup is now first match, rather than exact, to match
	  documentation.  (eval.c)

	+ fix core dump from referencing empty line for macro label goto.
	  (exec.c)

	+ eliminated unimplemented "target" variable. (modetbl)

	+ created doc for programmed macros, based on uemacs 3.10 doc.
	  (macros.doc, makefile)

	+ check all getregion() return values. (word.c, select.c)

	+ moved operselect() to select.c from opers.c.

	+ reset haveregion after use in getregion().  (region.c)

	+ sel_motion and operselect, if now used together in a single
	  command, can be used to extend a keyboard selection. (select.c)

	+ giving any argument to "shell-command" or ":!" now suppresses
	  the press-return prompt. (spawn.c, proto.h)

	+ added calls to update() if screen is garbage in mlyesno and
	  mlquickask, in case they are called after a shell-escape from
	  a macro. (input.c)

	+ fixed cursor position after ^B command (should rest at bottom
	  of window) (basic.c)

	+ fix ordering of kdone/kinsertlater stuff (kcharpending was being
	  reset by kdone called from kinsert) to fix problem where a yank
	  containing an initial blankline would not record that blank line.
	  (line.c)

	+ changed kcod2str, fnc2str, string2prc to deal in "p-strings", i.e.
	  binary strings with length stored in first byte.  needed this so
	  bindings involving null character could pass through everywhere.
	  the :map code in map.c still has problems.  (bind.c, x11.c,
	  x11simp.c, input.c, map.c, proto.h)

	+ separate target for Sony NeWS -- for sys/ioctl.h problem (makefile,
	  termio.c)

	+ patch from Michael Finken, to allow keeping the buffer name in
	  the window and icon names (x11.c, display.c, proto.h, vile.hlp)

	+ tungetc() now pushes back 16 bit keycodes using kcod2escape_seq()
	  to translate them to a user-typable sequence, and maintaining a
	  stack of pushed back chars.  it should still only be used for
	  one key's worth of pushback.  (input.c, some others?)

	+ insert mode now encodes SPEC keys (when recording them) as poundc
	  followed by poundc+1 followed by c.  real poundc chars are stored
	  as poundc followed by poundc.  there is no more "altpoundc".
	  (insert.c)

	+ merged OS/2 patches from Charles Moschel (ccm@cais.com).  reworked
	  them somewhat to use better ifdefs in many cases.   This touched
	  a lot of files.

	+ introduced routine strncpy0() which jams a '\0' into the last
	  copyable byte.  changed several of the most bug possibilities
	  to use it.  (bind.c display.c eval.c finderr.c input.c isearch.c
	  main.c makefile proto.h tags.c)

	+ eliminated #elif from x11.c, for HP users.

	+ reworked Charles Moschel's os2 screen driver into a "borland"
	  console i/o driver.  i can't test it on OS/2, but i think it's
	  the equivalent of his.  now there are separate ifdefs to control
		which os we want		MSDOS or OS2
		the pc keyboard			IBM_KBD
	  	the physical screen driver	IBMPC
		the console i/o driver		BORLAND
	  the Borland compiler is still represented with "TURBO", since
	  that's still predefined in Borland C++.
	  (borland.c edef.h estruct.h ibmpc.c main.c makefile.tbc spawn.c
	  termio.c version.c)

	+ split routine execproc() in two, to make it internally callable,
	  given the name of the procedure to run. (exec.c, proto.h)

	+ added cdhook variable, which is the name of a procedure which
	  is run when changing current directory.  (edef.h eval.c
	  exec.c modetbl proto.h random.c)

	+ added variable $ocwd, the previous directory (modetbl, eval.c,
	  random.c, proto.h)

	+ backed out changes that implemented the "keep buffer name in window
	  and icon title" resources.  this is better done with hooks. (x11.c,
	  proto.h, display,c, vile.hlp)

	+ apply patch from richard hussong to fix scrolling problem on some
	  video bios'es (ati ultra pro) (ibmpc.c)

	+ added more hook variables: read-hook, write-hook, buffer-hook,
	  exit-hook.  modified help file to describe procedures, and hooks.

	+ added new variable, $abufname, which is the "alternate buffer",
	  i.e. what you'd get if you type '#'. (modetbl, eval.c, vile.hlp)

	+ apply fix to map_proc from lee johnson -- :map g G followed by
	  1g didn't work, since 1 was considered default. (map.c)

	+ change macros BAD and GOOD to BADEXIT and GOODEXIT to avoid
	  conflicts on AIX.  (display.c estruct.h file.c ibmpc.c main.c
	  mktbls.c spawn.c tcap.c termio.c version.c window.c x11.c
	  x11simp.c)

	+ it is now possible to use forward-char-scan et al from a macro.
	  (csrch.c)

	+ "response variables", the ones that ask questions (e.g. @foo)
	  now remember a default response.  (eval.c)

	+ added support for using the ansi.c screen driver under MSDOS.
	  (ansi.c, termio.c, estruct.h, makefile.wat)

	+ added w!  and x!  as synonyms for w and x, since they are the
	  same under vile.  (cmdtbl, vile.hlp)

	+ added support for new GNU libio stdio pkg, for isready_c() macro.
	  (fileio.c)

	+ fix globber() so :g/foo/p leaves you in the p-lines buffer, which
	  is probably where you want to be.  (globals.c)

	+ fix problem in main that caused us to skip first file if noautobuffer
	  was set.  (main.c)

	+ now that there are so many modes, it's desirable to switch
	  to the ":set all" ("show-modes") window when it pops up. (modes.c)

(tom)
	+ warning/lint cleanup (bind.c buffer.c display.c edef.h estruct.h
	  eval.c fences.c insert.c line.c proto.h random.c region.c select.c
	  tags.c x11.c)

(kev)
	+ select.c (EFFICIENCY_HACK, attribute_cntl_a_sequences):  New code
	  which makes attributing regions with large numbers of attributes
	  much more efficient.

	+ x11.c (CLEAR_THRESH): Changed value and added explanation.
	  (NONDIRTY_THRESH): New constant.
	  (x_getc): Added inner loop for getting as many X events as possible
	  prior to returning in order to let the typeahead check in update()
	  do its job.

	+ manfilt.c (fatal_error): New function.
	  (INITIALSIZE): New constant.  Got rid of old constants which
	  hardwired the buffer sizes.
	  (line_in_size, line_out_size): New variables for keeping track
	  of the buffer sizes.
	  (getline): Rewritten so that input lines may be of arbitrary
	  length.

	+ display.c (update): Keep track of original row and column in
	  case we're reading the message line.  If we are reading the
	  message line, update the hardware cursor to the original row
	  and column instead of the current window.  I think that this
	  problem was evident only when the OPT_PSCREEN feature was enabled.

	+ estruct.h (do_mark_iterate): Reassert ownership of selection if
	  appropriate.

	+ proto.h, select.c (sel_reassert_ownership): New function.
	  
	+ display.c (reframe):  Fixed an off-by-one error which was causing
	  the cursor to be placed on the mode line after a reframe in a
	  one line buffer.

	+ input.c (kbd_reply): Fixed off by one error which was causing core
	  dumps on the NeXT.

	+ x11.c (x_get_selection, copy_paste): Added caste for third argument
	  in calls to tb_bappend.
	 (alternate_font): Removed debugging printf.

	+ x11.c (x_configure_window): New code for unmanaging / managing
	  the children of a motif form which will hopefully prevent the
	  problems with huge scrollbars. 

	+ random.c (line_count): Added null buffer check.  This lack of
	  check was causing core dumps on start up in xvile when $font was
	  being set from the .vilerc file to a value which caused a resize.

	+ cmdtbl, proto.h, select.c (operattrital): New operator for italics.

	+ x11.c (x_setfont, query_font): Cleaned up memory leaks, one stemming
	  from the fact that the XFontStruct structure pointed at by
	  the pfont field was never getting freed, the other concerning
	  allocation of memory for font names.
	 (starting_fontname): New field in the TextWindow structure.  This
	  field points to the initially requested font name. The fontname
	  field is reserved for holding the name of the font once it has
	  been successfully loaded.
	 (query_font): Attempt to find the fully qualified font name (rather
	  than an alias or template).  Also, free storage associated with 
	  new fields in struct _text_win (see below).
	 (FSRCH_BOLD, FSRCH_ITAL, FSRCH_BOLDITAL): New flags.
	 (fsrch_flags, pfont_bold, pfont_ital, pfont_boldital, left_ink,
	  right_ink): New fields in struct _text_win.
	 (alternate_font): New function.
	 (flush_line): New code for handling bold and italics.  Old code for
	  doing bold retained as a fallback position in the event that a
	  bold font is unavailable.
	 (x_get_font_atom_property): New function.
	 (x_flush): New code for cleaning up the mess sometimes left when
	  using monospaced fonts. [Glyphs in monospaced fonts sometimes extend
	  outside the bounding box associated with the font.  Thus when
	  a dirty cell adjacent to a non-dirty cell is updated, the non-dirty
	  cell also needs to be updated in the event that the character
	  previously written to the dirty cell extended outside of its
	  bounding box and into the non-dirty cell.]

	+ window.c (delwp):  Always set WFHARD on the receiving window
	  (instead of just when the current window pointer is the same as
	  the one being deleted).  This corrects a problem with the mode
	  line attribute sometimes not getting reset. [Scenario: Edit a
	  file.  Split the window.  Type '*'.  Move to a different window
	  than the "*" window.  Type '*' again.  Both vile and xvile leave
	  the line that the message line used to be on bold.]

	+ macros.doc: Fixed some minor typos.

	+ select.c (extended_region): Added prototype.

	+ manfilt.pl: New file. Perl script for filtering backspace sequences.
	+ cmdtbl (operattrcaseq): Replaces operattrbsseq.
	+ proto.h, select.c  (attribute_cntl_a_sequences, operattrcaseq):
	  Replaces attribute_backspace_sequences and operattrbsseq.

	+ random.c (getcol): Now works for empty lines where offs > 0.  This
	  is probably one of many functions which will need to be fixed now
	  that it is possible to position the cursor on the newline character.
	  (See Paul's changes.)
	  
	+ file.c (getfile2): Don't prompt user if noninteractive.  This
	  change prevents an infinite loop when executing my manual page
	  macro (or any macro which needs needs a buffer where there is a
	  name conflict.  Paul and Tom should look at this to make sure that
	  it doesn't break keyboard macros.

	+ display.c (updattrs): Garbage collect attributes which should
	  display something (i.e., have nonzero ar_vattr field), but refer
	  to an empty region.

	+ display.c (updattrs): Added a parameter to this function and
	  changed call in update() to reflect this change.  Also moved
	  placment of call from within update.  The result of all of this is
	  that the attributes will only be updated only when WFHARD or
	  WFEDIT is set for the window.  WFEDIT is needed in order to
	  display changed boundaries of the attributed text in the event
	  that the marks denoting the ends are moved as the result of an
	  editing operation.

	+ estruct.h (do_mark_iterate): Rewritten to be faster.  This improved
	  performance a lot when there are a large number of attributes.
	  A terminfo man page took roughly 14 seconds to attribute prior to
	  this change.  Afterwards, it took about 8 seconds.  (The terminfo
	  man page is somewhat unusual in that it has a large number of
	  underline and bold sequences).

	+ cmdtbl (operattrbsseq): New command for attributing sequences of
	  backspaces.
	+ select.c, proto.h (attribute_backspace_sequences, operattrbsseq):
	  New functions.  Also moved together the prototype declarations of
	  functions defined in select.c to one place.

	+ display.c (modeline): if insertmode is defined (as a macro), display
	  the modeline for each modeline instead of just the current window.

	+ display.c (updattrs): Make sure that start_col is not less than
	  zero.

	+ exec.c (execute):  In test to see if we're not in insert mode...
	  Short circuit the test with a test to see if curwp is NULL since
	  we get in trouble when insertmode is not a global variable and
	  is defined in terms of a window trait (see estruct.h).  (We were
	  getting core dumps when starting up with xvile @man-bindings).

	+ cmdtbl, opers.c (operattrbold, operattrul): New commands for
	  attributing regions of text.
	+ edef.h (videoattribute): New variable for communicating with
	  attributeregion().
	+ select.c, proto.h (attributeregion): New function.
	+ select.c (selectregion): Took out checks to see if startbufp and
	  selbufp are NULL before calling detach_attrib as detach_attrib
	  already performs these checks.
	+ display.c (updattrs): Use logical or to set attributes other
	  than VAREV in order to allow overlapping attributes.  Use
	  exclusive or to set VAREV causing overlapping reversed regions
	  to reverse themselves (this is perhaps _too_ tricky; we might
	  consider just using logical or.  It would simplify the code
	  and it might actually be what the user wants.)  Previously, we
	  were just using assignment to set the attribute which cause
	  the attribute displayed to be the last attribute processed.
	+ x11.c (flush_line, x_flush): Modified to handle bold and underline
	  attributes in addition to reverse video.  Some work still needs
	  to be done on this to use a bold font for displaying bold if
	  it exists with the present code as a fallback if there is no
	  bold font available.
	+ man-bindings: New file containing vile macros for getting and
	  attributing manual pages.

	+ estruct.h (do_mark_iterate):  Fixed problem which was causing
	  r_orig for the first attribute to not get processed.  I think
	  that this was responsible for some core dumps.

	+ x11.c, proto.h (own_selection): New externally available function.
	  It used to be x_own_selection which was private to x11.c.  All
	  calls to x_own_selection in x11.c eliminated.
	+ estruct.h (OWN_SELECTION): Macro which will either call
	  own_selection() or do nothing depending on whether or not (x)vile
	  is compiled on a system which is prepared to share selections
	  with other clients or not.
	+ select.c (selectregion, sel_extend):  Call OWN_SELECTION().

	+ proto.h (sel_yank):  Name changed from sel_yankmaybe since there
	  is very little "maybe" left about its action.
	+ select.c (sel_yank, push_fake_win, pop_fake_win): sel_yankmaybe
	  rewritten to become sel_yank.  sel_yank now uses push_fake_win()
	  and pop_fake_win() to allocate a fake window so that the selection
	  in the selection buffer may be yanked no matter what (unless
	  there is no selection).
	+ x11.c (x_process_event, x_stash_selection): Call to sel_yankmaybe
	  eliminated from x_process_event.  Call to sel_yank added to
	  x_stash_selection.  This means that the selection will only be
	  yanked when needed thus permitting modification of the selection
	  prior to pasting.

	+ basic.c (setnmmark):  Nuked old keyboard selection code.
	+ select.c (WHICHEND, whichend): New type and variable for keeping
	  track of which end of the selection is fixed while sweeping
	  a selection.
	+ select.c (sel_begin): Set whichend.
	+ select.c (sel_extend):  Selection yanking code removed.  Usage
	  of parameter to sel_extend modified to indicate if wiping (sweeping)
	  with mouse.  Code added to check whichend and act accordingly.
	  Also do the "one-off" fixup here instead of in x11.c.
	+ select.c (output_selection_position_to_message_line): Fixed "one off"
	  error in reporting extent of selection.
	+ x11.c (x_preparse_args): Set foreground and background in 
	  scrollbar graphics context.
	+ x11.c (extend_selection): Changed call to sel_extend to reflect
	  new interpretation of its parameter.
	+ x11.c (multi_click): Put back decrement after end of word is
	  found.  (Paul had previously removed it.)
	+ x11.c (x_process_event):  Changed call to extend_selection
	  when button 3 is pressed to indicate that we are _not_ wiping.
	  (Wiping is permitted however and mouse motion will do the 
	  right thing).

	+ x11.c (pscreen): Added extern declaration.
	+ x11.c (IS_DIRTY_LINE, IS_DIRTY, IS_REVERSED, MARK_LINE_DIRTY,
	  MARK_CELL_DIRTY, CLEAR_LINE_DIRTY, CLEAR_CELL_DIRTY, CELL_TEXT,
	  CELL_ATTR): New macros comprising the interface to pscreen.
	  These could be moved to estruct.h or another header file for
	  use by other screen interfaces.
	+ x11.c (BLINK_TOGGLE): Added comment about this macro.
	+ x11.c (cur_row, cur_col, sc, cur_row, cur_col): Removed these
	  fields from the TextWindow structure.
	+ x11.c (x_putc, x_move, x_eeol, x_eeop, free_win_data,
	  x_resize_screen): Deleted these functions and changed all callers.
	+ x11.c (term): Substituted psc_putchar, psc_flush, psc_move,
	  psc_eeol, and psc_eeop for x_putc, x_flush, x_move, x_eeol,
	  and x_eeop.  Also added x_flush after x_scroll which will
	  initialize the t_pflush field in the TERM structure.
	+ x11.c (x_touch):  Call MARK_CELL_DIRTY and MARK_LINE_DIRTY instead
	  of using old mechanism.
	+ x11.c (wait_for_scroll):  Nuked XXX comment since it doesn't
	  seem to apply any longer.
	+ x11.c (CLEAR_LINE, SWAP_LINE): Nuked these macros which I recently
	  wrote for use in x_scroll.
	+ x11.c (x_scroll):  Nuked code for clearing and moving lines around.
	+ x11.c (flush_line): Minor reformatting.
	+ x11.c (clear_line): Eliminated this dead code.
	+ x11.c (x_flush): Rewritten.  It will now call flush_line for
	  any change in attribute instead of just reversed video.  flush_line
	  still needs to be rewritten to handle the other attributes.
	  Handling of cursor should be better too.
	+ x11.c (x_putline, x_fastpoutline, x_setrowcolors, x_cls): Removed
	  this "notyet" code.  The need for such functions has been replaced
	  by new attribute mechanism and interface to pscreen.
	+ x11.c (multi_click, display_cursor):  Use CELL_TEXT instead of old
	  data structures.
	+ x11.c (x_process_event): Call display_cursor() on ButtonRelease
	  event instead of in x_getc().

	+ display.c (updateline): Wrote new version for OPT_PSCREEN.  I
	  tried modifying the !MEMMAP version, but this version is difficult
	  enough to understand without adding to the rat's nest of #if,
	  #else, and #endif statements.
	+ display.c (updgar, scrolls): Preprocessor statements and a little
	  bit of code for OPT_PSCREEN.
	+ display.c, proto.h (psc_putchar, psc_flush, psc_move, psc_eeol,
	  psc_eeop, psc_rev): New functions and their prototypes.

	+ estruct.h (t_pflush): New field in the TERM structure used
	  by OPT_PSCREEN interface to flush the output.  TTpflush is
	  defined to allow easy access to this field via the variable term.
	+ estruct.h (OPT_PSCREEN): New feature test.  Used for determining
	  if the screen interface wishes to access the pscreen structure
	  directly.  Definitions of VADIRTY and VATTRIB in this file
	  depend on OPT_PSCREEN.

	+ x11.c (x_beep): Use GXxor instead of GXinvert as the logical
	  function in the graphics context for flashing the screen.  GXxor
	  will give better results on color displays.
	+ x11.c (x_getc): Removed if'd out call to display_cursor().
	+ x11.c (x_flush):  Add bounds check to make sure that it is ok to
	  write out the cursor.

	+ estruct.h (VIDEO):  Added new field v_attrs.
	+ estruct.h (VIDEO_ATTR):  Accommodations for color.  Also eliminated
	  VACOL mask.  Added VADIRTY, VAFGCOL, and VABGCOL.
	+ display.c ([pv]scrat):  Eliminated in favor of using the v_attrs
	  field in the VIDEO structure.  Also small modifications to ignore/set
	  dirty bit in updateline().

	+ x11.c (display_cursor):  Called from x_flush instead of x_getc to
	  avoid flicker.  Call of display_cursor from x_getc if'd out.

	+ display.c ([pv]scrat):  Replaced calls to memset with "for" loops
	  using explicit assignment in anticipation of making VIDEO_ATTR
	  a sixteen bit quantity when COLOR is enabled.  This code will
	  still need to be tinkered with somewhat in order to set the
	  foreground and background colors properly for the line whose
	  attributes are being reset.  (I have placed FIXME's in the code
	  to indicate where this needs to be done.)

	+ display.c (scrolls): New local variables longinplace and inplace
	  are used in determining whether or not a potential match of lines
	  to be shifted is really better than a previously computed match. 
	  The undesirable behavior that this corrects can be best observed
	  in vile (I used an xterm with 50+ lines).  Edit a file with
	  enough lines to be able to do a bit of scrolling.  Split the
	  window and make the upper window about half the size of the lower
	  window.  Then start scrolling through lines in the the upper
	  window which are duplicated in the lower one.  (Try it in both
	  directions.) You will notice that portions of the lower window
	  will be updated along with the upper.  The problem was that
	  longer matchs were being obtained by scrolling lines from the
	  lower window up to the upper with the cost of having to later
	  update a large segment of the lower window.  This new code will
	  count the number lines which are already properly placed (e.g.,
	  do not need to be moved at all) in a section to be potentially
	  moved.  It will then use this count to help decide if the new
	  potential match is better than the old one.

	+ modetbl (font):  Commented out dependency on X11.
	+ eval.c (SetVarValue, gtenv): Added code to ignore EVFONT when X11
	  is not defined.  The reason for all of this is so that a .vilerc
	  file which has a "set font" line in it may be shared between both
	  vile and xvile.

	+ edef.h, main.c (insert_mode_was): Eliminated.  This variable was
	  _only_ referenced (i.e, not set anywhere) and only referenced
	  in one place.

	+ estruct.h (insertmode, insmode): insmode is a new field in the
	  W_TRAITS structure.  Define macro insertmode in terms of the
	  insmode field in the W_TRAITS structure when OPT_MOUSE is
	  defined. 
	+ edef.h (insertmode): Don't declare insertmode as a variable when
	  it is already defined as a macro
	+ main.c (loop): Check to see if insertmode is set after getting a
	  character.  If it is, re-enter insert mode.  The reason for the
	  above three changes is to prevent insert mode from "moving" to a
	  new window when using the mouse to set focus to another vile
	  window.  These changes allow a window to "remember" which mode it
	  was in when the window was left so that that mode may be
	  reentered when we return to the window.

	+ select.c, proto.h (free_attrib): New function.
	+ line.c (lremove): Traverse attribute list and fix marks
	  indicating the beginning and ending of each attributed region. 
	  The attributed region is freed if both beginning and end both
	  refer to the line about to be removed.

	+ vile.hlp: Documented new resources.

	+ x11.c (blink_id, blink_status, blink_interval):  New fields in
	  TermInfo structure.  Also created new resource XtNblinkInterval
	  and XtCBlinkInterval for setting the blink_interval field.  Setting
	  this field to zero will disable blinking entirely.  Positive
	  values will enable blinking all the time with the blink rate
	  being the value in milliseconds.  Negative values will enable
	  blinking only when the cursor is positioned within a highlighted
	  region.  Again the blink interval is in milliseconds.

	+ x11.c (display_cursor):  New function called from x_getc() for
	  displaying the cursor.  Handles blinking cursors.

	+ x11.c (XtNpersistentSelections, XtCPersistentSelections): New
	  resource instance and class name for resource
	  persistentSelections.  This resource controls whether or not
	  highlighting of selection (and indeed the selection itself), is
	  released when clicking button one.  start_selection() modified to
	  check whether this resource is set or not and to take the
	  appropriate action.

	+ x11.c (invert_display, x_beep): Eliminated invert_display(). 
	  Rewrote OPT_FLASH stuff in x_beep() to reduce dependence on
	  structures in x11.c which know about the attributes.  (These
	  structures will eventually be eliminated.) The flash obtained from
	  the new code also looks better (it was kind of choppy before).

	+ x11.c (x_getc): Make sure that cur_win->show_cursor is TRUE before
	  displaying the cursor.

	+ x11.c (x_setfont): Call update_scroll_bar_sizes when a font change
	  will change the size of the window.

	+ x11.c (turnOnCursor, turnOffCursor, CELL_CURSOR): Nuked all code
	  referencing these.  This is yet another step toward integrating
	  use of [pv]screen and [pv]scrat into x11.c.

	+ x11.c (x_getc): Display the cursor here before calling
	  XtAppNextEvent.

	+ x11.c: Slowed down initial scrolling of selections (you don't want
	  the lines whizzing by if you only want a few more lines).  Sped up
	  scrolling of selections that have been scrolling for a while
	  already.

	+ x11.c: Added resources for scrollRepeatInterval and
	  scrollRepeatTimeout for xvile NO_WIDGETS version.

	+ display.c (vt_leaks): free pscrat and vscrat.
	+ display.c (updateline): consider virtual screen attributes when
	  noting nonblanks in right match.

	+ modetbl, main.c, select.c (WMDTERSELECT): New window mode for
	  controlling whether selections are terse or verbose.

	+ vile.hlp: Documentation for selections and other x11 stuff.

	+ makefile (select.{c,o}): Added to the SRC and OBJ file list.

	+ select.c: New file implementing selection/attribute stuff.

	+ proto.h (free_attribs, sel_begin, sel_extend, sel_release,
	  sel_yankmaybe, sel_attached, sel_buffer, sel_setshape):
	  New prototypes.

	+ estruct.h (OPT_VIDEO_ATTRS, OPT_SELECTIONS): New feature tests.
	+ estruct.h (NKREGS): Set to 37 (rather than 36) when OPT_SELECTIONS
	  enabled.
	+ estruct.h (SEL_KREG): Define the selection kill reg number.
	+ estruct.h (MAXROWS, MAXCOLS): Moved here from x11.c.
	+ estruct.h (REGIONSHAPE): New typedef.
	+ estruct.h (REGION): Position of typedef moved ahead of that of
	  BUFFER (so that AREGION can use REGION and BUFFER use AREGION).
	+ estruct.h (VIDEO_ATTR): New typedef.  New mask values for this
	  typedef also (VACOL, VAREV, VAUL, VAITAL, and VABOLD).
	+ estruct.h (AREGION): New typedef.
	+ estruct.h (b_attrib): New field in struct BUFFER.
	+ estruct.h (do_mark_iterate): New macro for iterating over named
	  marks and region marks for the current buffer.

	+ buffer.c (bfind): Initialize b_attribs field.
	+ buffer.c (bclear): Call free_attribs to free attributes associated
	  with buffer.

	+ line.c (linsert, lnewline, ldelete, ldelnewline): Use macro
	  do_mark_iterate to fix the marks.

	+ tmp.c (dumpBuffer, AdjustPtrs): Call do_mark_iterate for adjusting
	  marks.

	+ undo.c (lineundo, repointstuff): Call do_mark_iterate for mark
	  adjustment.

	+ display.c (vscrat, pscrat): New variables representing virtual
	  and physical screen attributes.
	+ display.c (updattrs): New function called from update().
	+ display.c (vtinit): Initialize vscrat and pscrat.
	+ display.c (update): Nuked assignment of the ruler line in
	  OPT_SCROLLBAR code (x11.c no longer needs this).
	+ display.c (updgar): update pscrat.
	+ display.c (hilite, modeline): use vscrat to do highlighting.
	+ display.c (scrolls): move attributes in pscrat to account for
	  scrolling.
	+ display.c (updateline): Use pscrat and vscrat in updating the line.

	+ edef.h (regionshape): Declare as REGIONSHAPE instead of short.

	+ basic.c (setnmmark): Added code if'd by OPT_SELECTIONS which
	  implements a mechanism for making selections from the keyboard.
	  "m." will mark the start of a selection. "m\" extends the selection
	  rectangularly. "m'" extends a selection by full lines. "m\" extends
	  a selection exactly.
	+ line.c (reg2index): Added code if'd by OPT_SELECTIONS which makes
	  the name "." the kill reg associated with the current selection.

	+ x11.c (PANE_WIDTH_DEFAULT): Changed to 15 for NO_WIDGETS.
	+ x11.c (MAXROWS, MAXCOLS): Moved to estruct.h.
	+ x11.c (scroll_repeat_id, wipe_permitted, sel_scroll_id): New
	  fields in struct _text_win.
	+ x11.c (sel_start_col, sel_start_row, sel_end_col, sel_end_row,
	  wipe_row, wipe_col, show_selection): These fields removed from
	  struct _text_win.
	+ x11.c (row2line, clear_row_selection, save_selection,
	  change_selection): These functions removed along with all references
	  to them.
	+ x11.c (scroll_selection, repeat_scroll): New functions.
	+ x11.c (do_scroll): Added code so that scroll will repeat when
	  button is held down.
	+ x11.c (x_preparse_args): Get button release events too for the
	  screen widget.
	+ x11.c (x_scroll): Rewritten to move attributes (found in
	  cur_win->attr) along with screen data.  Should be more efficient
	  as well.
	+ x11.c (x_flush): Changed way in which cursor is displayed in
	  selections.
	+ x11.c (in_selection): This macro deleted.
	+ x11.c (x_putline): Leave cursor one past last char in line section
	  just put unless at end of line.
	+ x11.c (x_eeol, x_eeop): Erase to end of line/page in reverse video
	  if in reverse video.
	+ x11.c (x_lose_selection, x_stash_selection, x_give_selection,
	  x_own_selection, extend_selection, multi_click, start_selection,
	  x_process_event): Modified/rewritten to use new selection stuff.
	  Other cosmetic improvements/modifications were made to the
	  above functions resulting in the following user visible changes:
	    + clicking button 1 on mode line will set focus on
	      corresponding window without scrolling the window by
	      one line.  Double clicking on mode line will clear the
	      current selection.
	    + selecting text by dragging will now scroll the window
	      up or down when the bottom or top is reached.  It is
	      now also possible to drag with the right mouse button.
	      Speed at which text is scrolled while being selected  will
	      increase with the passage of time.
	    + rectangular regions may be selected by using the control
	      key as a modifier.
	    + highlighting of selection is not lost unless another
	      selection is made either in xvile or somewhere else
	      or unless mode line is double clicked upon.
	    + it is now possible to start a selection in one window
	      and extend it in another window (provided the "other"
	      window is open to the same buffer).

Changes for vile 4.3 (released March 29, 1994)
(pgf)
	+ make all functions called by do_lines_in_region be prepared to
	  take empty lines. (region.c)

	+ added terse addition to the README

(tom)
	+ corrected test in 'eol_command()' to allow command-names with '-'
	  (bind.c)

	+ corrected last 'mlerror()' change (display.c).

	+ added 'tags' rule to override conflict with default rule (makefile).

	+ corrected 'readpattern()' so that '%' can be used as delimiter in
	  ":g" command (search.c)
  
(kev)	
	+ call update_scrollbar_sizes() when changing fonts. (x11.c)

Changes for vile 4.2 (briefly released March 25, 1994)
(pgf)
	+ fixed Register buffer animation, using static flag to limit
	  the work done for each call to relist_registers(). (line.c)

	+ use common update_scratch() routine to trigger animation of
	  modes and maps.  (mode.c, map.c)

	+ add lines to vile.hlp about ".vilerc" vs. "vile.rc"

	+ fixed several bugs in rectangular operations (region.c)

	+ disabled "memory" command under Watcom, since _memavl() doesn't
	  _really_ report how much memory there is left -- just how much
	  is left before it needs to grow the heap. (main.c)

	+ npopen() should be silent on errors. (npopen.c)

	+ gave mlerror() a default message if errno is out of range (display.c)

	+ rationalized use of mlerror() and FIOERR.  now, the function that
	  first generates FIOERR is guaranteed to have put out a message,
	  probably via mlerror. (file.c, fileio.c)

	+ systems without EISDIR now all generate EACCES for directory
	  errors.  (fileio.c)

(tom)
	+ cleanup for OPT_MAP_MEMORY compilation ( display.c fileio.c
	  insert.c line.c random.c region.c tags.c undo.c)

	+ cleanup of OPT_WORKING ifdef (estruct.h)

	+ changed "#elif" to old-style because HP/UX bundled compiler doesn't
	  treat these properly. (fileio.c, should also change x11.c).

	+ corrected logic for arrow-keys in xvile's history by new function
	  'kcod2escape_seq()' (input.c, x11.c, x11simp.c).

	+ corrected 'l_ptr()' function to ensure signed comparison (tmp.c).

Changes for vile 4.1 (not released March 11, 1994)
(pgf)

	+ add include of stddef.h if POSIX, to pick up offsetof, so we don't
	  get a warning when building xvile on linux (estruct.h)

	+ again, fix core from is_falsem/is_truem. (eval.c)

	+ fix compiler warning (bind.c)

	+ removed -rows and -columns from usage message and help. (version.c
	  vile.hlp)

	+ fixed for the Watcom compiler; dense line modes now work. (ibmpc.c)

	+ the 'J' (and :j) command no longer perturbs the yank/kill registers, so
	  the sequence 'dw<move somewhere>J<move somewhere>p' puts back the word
	  you deleted, not the newline that 'J' deleted.  (region.c, word.c, proto.h)

	+ DOS now uses pressreturn() after a shell escape.

	+ streamlined tb_sappend() (tbuff.c)

	+ changed x11 pasting to not trim leading whitespace, and to use
	  the xxx_no_aindent() functions for performing insertions.  this
	  means you now paste what you cut, with indentation preserved from
	  the original, rather than recreated (or lost) by autoindent or
	  cmode. (x11.c, x11simp.c)

	+ new routine, fnc2str(), to support above change, since the no-aindent
	  commands are multi-char sequences.  (bind.c, proto.h)

	+ implemented rectangular regions, using new "regionshape" global,
	  new commands ("goto-named-mark-rectangular",
	  "put-as-rectangle-after", "put-as-rectangle-before",
	  "open-rectangle", "blank-region"), and new behavior for
	  rectangles of the "shift-right-region" (opens up),
	  "shift-left-region" (deletes), the delete and yank operators. 
	  new rectangular (basic.c, cmdtbl, region.c, random.c, line.c, edef.h,
	  estruct.h, line.c, opers.c, proto.h)

	+ many changes in region.c, to make the region code rectangle-aware.
	  new routines do_lines_in_region()/do_chars_in_line() to support
	  simple cases of walking a region in two dimensions.  reimplemented
	  yankregion using these, so it is now rectangle aware.  new blankline
	  routine.  getregion() knows how to set up rectangular regions.
	  (region.c)

	+ changed getcol/getccol/gocol/gotocol to support rectangle code.
	  (random.c)

	+ changed the 'fulllineregions' boolean to a 'regionshape' descriptor.
	  (exec.c, edef.h ibmpc.c, fences.c, insert.c, basic.c, main.c, word.c,
	  x11.c, x11simp.c)

	+ moved a bunch of region-related code from random.c to region.c

	+ during undo, attempt to retain offset information for marks
	  pointing at a line being replaced.  this makes exact marks
	  last longer, and they're more important now with rectangles.
	  (undo.c)

	+ added extra column arguments to some of the line-processing
	  routines, like entab/detab/trimline.  (insert.c, word.c)

	+ fixed autoindent inconsistency, when breaking a brace-terminated
	  line in half. (insert.c)

	+ turned off the POISON #define.  this should have gone away a while
	  ago (it fills memory with a bad patter when we free it). (line.c)

	+ fixed old bug in the maintenance of MK.o when adjusting due
	  to character edits. (line.c)

	+ maintain record of longest line in a kill-register (line.c)

	+ the histbuffer (_) command now stutters with a call to tgetc
	  instead of kbd_seq, so that the pushback of an unused command
	  works okay. (buffer.c)

	+ anycb() now returns a pointer to the first modified buffer
	  it encounters, so callers can treat the single buffer case
	  specially.  changed callers as well: quit(), zzquit(), and
	  spawn().  (buffer.c, spawn.c, main.c)

	+ DOS video drivers are now selected more cleanly by name.  any
	  driver can be selected from the command line (as long as its
	  name starts with a digit).  drivers can have multiple entries
	  corresponding to multiple names.  the same name can refer to
	  two different entries, in cases where there are two resolutions
	  for the same screen geometry. (main.c, ibmpc.c)

	+ made backspacing be non-destructive in overwrite mode (insert.c)

	+ eliminated the full-buffer-loop in undo.c, by using a cookie to
	  identify the current undo operation, and using it to mark lines
	  that have already been copied.  should be a big performance win
	  for big files on slow machines.  (estruct.h, tmp.c, undo.c)

	+ added support for setting the IBM color palette. (ibmpc.c, vile.hlp)
	  
(kev)
	+ updated help text for X11 (version.c, vile.hlp)

	+ added command line arguments -row, -cols, -leftbar, and -rightbar.
	  (x11.c)

	+ fix for motif resizing (x11.c)

	+ updated help text for X11 (version.c, vile.hlp)

	+ added command line arguments -row, -cols, -leftbar, and -rightbar.
	  (x11.c)
	+ Set XmNresizePolicy to XmRESIZE_NONE in x_configure_window in
	  order to fix resize problems with the Motif widget set in
	  which the scrollbars were getting set very big or very small.

	+ Support for scrollbars on the left in motif added.  openlook
	  still needs to be done.

	+ Added an initialization of XtNgeometry to XtVaAppInitialize
	  setting this resource to NULL.  This overrides any user
	  specified geometry request for the top level shell.  The
	  geometry request is still available through the geometry
	  variable which Tom added to the TextWindow structure.  Tom's
	  code for parsing the geometry has been preserved, but
	  enhanced somewhat to set default values for the number of
	  rows or columns in case if the user specified only the
	  position.  Width and height specifications are considered to
	  be in character widths or heights instead of in pixels.  We
	  let the initialization of the screen and pane widgets
	  determine the size of the outer widgets.  (Much of this is
	  as it was before...the only thing really new here is one
	  line added in the call to XtVaAppInitialize).

	+ Added code to set XtNgeometry on the top level widget if the
	  user's geometry request specified the initial window
	  position.  Only the positional information is set; the width
	  and height are left out in order so that the sizes of the
	  children will correctly influence the initial size of the
	  top level shell widget.

	+ Added scrollbar support for NO_WIDGETS by using core widgets
	  for both the scrollbars and the resize grips.  Geometry
	  management is handled with a simple homebrew widget
	  subclassed from Composite.  I believe that the scrollbar
	  resize mechanism is superior to that found in xvile
	  implemented with the other widget sets (particularly
	  OpenLook).  We might consider either totally getting rid of
	  OpenLook support (how many people are going to use it?) or
	  at the very least reimplement scrollbar resize with the same
	  mechanisms used by the NO_WIDGETS version.  We might also
	  consider dropping the Athena widget set since it seems to be
	  buggy on some platforms.  The code will be easier to
	  maintain though and users will not be so confused by the
	  number of configuration options if we manage to drop a
	  couple of the widget sets.  (A middle ground might be to use
	  only the scrollbar widgets from various widget sets.  Much
	  of the complexity comes from the differences in the Form and
	  Pane widgets.  This way we could still use other widgets
	  from the other widgets sets in the future.  This won't make
	  the configuration any easier, but it might make the code
	  easier to maintain.)
	
	+ Modified manner in which the top of the scrollbar is set for
	  all widget sets.  Rather than forcing dot to be in the
	  middle of the screen, we attempt to leave dot where it is. 
	  The top of the scrollbar is set based upon the top line of
	  the window rather than dot.  This gives consistent scrolling
	  behavior.  Tom's concerns that the "thumb" or slider remain
	  visible even at the end of the buffer are also addressed
	  with this approach.  When at the very end of the buffer (so
	  that the screen has a large number of tildes on it),
	  xt-vile and xaw-vile will still display a sliver indicating
	  the portion of the buffer actually shown.  If this is
	  undesirable, ntildes should be set to something small (like
	  zero).  Once this is done, the thumb will maintain a uniform
	  size from the top of the buffer to the bottom.  I've tested
	  these versions with small buffers (buffers containing zero
	  thru 2*curwp->w_ntrows lines) and the appearance seems to be
	  consistent throughout.  Large buffers (> 4000 lines) seem to
	  still have a slight problem at the end of the buffer in
	  xaw-vile).

	+ Made the insertion bar the mouse cursor (for the xvile
	  screen only) in all versions.

	+ fixed x_working so that xvile may once again be interrupted.

	+ added missing assignment so that insertion bar is now really
	  used when the cursor enters window corresponding to the xvile
	  screen widget.

	+ implemented scrollbarOnLeft resource for NO_WIDGETS version.

	+ nuked ATHENA_WIDGETS code.  This code was eliminated because
	  it was observed that the NO_WIDGETS version functions as
	  well if not better than the ATHENA_WIDGETS version and it
	  runs on machines which have a buggy (Athena) widget library. 
	  On the down side, it will be somewhat harder to add new
	  widgets in the future if this is desired.

(tom)
	+ modified kevin's resources in x11.c to use "geometry" rather than
	  "rows" and "columns".  Adjusted logic so that geometry resource means
	  chars, not pixels.

Changes for vile 4.0 (not released Tue Feb 22, 1994)
(pgf)
	+ fix core from one-too-many chars to strncpy(). (eval.c)

	+ change #elif constructs in version.c to oldstyle #else/#if

	+ applied contributed patch for implementing 0^D in insert mode,
	  and expanded it to implement ^^D. (insert.c)

	+ insert mode now parses function key #c pairs returned from
	  kbd_key(), so arrow keys work.  (input.c insert.c)

	+ no longer turn off dot recording for non-redoable commands if
	  we're in insert mode. (exec.c)

	+ display high-bit keyboard input on message line in either octal
	  or hex, depending on global value of unprintable-as-octal. (bind.c)

	+ implemented "alt-function-prefix" to make function-key parsing
	  in insert mode less ambiguous.  (edef.h, insert.c, input.c, cmdtbl,
	  main.c)

	+ new help for arrow keys, and cd/pwd commands.  also some more
	  pcvile differences.  (vile.hlp)

	+ fixed djgpp implementation of get_vga_bios_info, by packing
	  the structs int 10/1b deals with.  this makes 43 and 50 line modes
	  work.  (still don't work with watcom, though) (ibmpc.c)

	+ made :memory work under DJGPP	(main.c)
	
	+ made catnap() work under DJGPP, so flash mode works now. (random.c)

	+ added more dependencies to makefile.djg

	+ apply patch for honoring the trailing $ in a tag lookup patterns.
	  (tags.c, eric krohn)

	+ make animation of buffer list take into account whether it contains
	  an apropos list or a full "decribe bindings" (bind.c)

	+ some makefile cleanup, for mips and NeXT, and compulsion's sake.

	+ modified heuristic for setting dos-mode on an ambiguous (usually
	  empty) buffer -- only set it if the global mode is set, and if
	  we're actually running on DOS. (main.c, random.c, file.c, estruct.h)


(tom)
	+ added new function 'parse_pathlist()' to encapsulate the logic used
	  in lookup of vile.hlp (PATHLOOK) and the CDPATH environment variable
	  (fixes buffer overflow in the latter).

	+ corrected treatment of arrow-keys (in history.c) broken in 3.65
	  using new function 'kbd_escape_seq()' (input.c, history.c).

	+ modified ifdef's in 'interrupted()' to test type-ahead only
	  for DJGPP configuration (main.c).

	+ restored code that translated CDSENSE to driver type, because it did
	  not set screen defaults to maximum size (ibmpc.c)

(kev)
	+ I have added scrollbars to xvile.  I made a copy of x11.c,
	modified it (heavily) and called it xt.c.  [ I've renamed it x11.c,
	and moved the old x11.c to x11simp.c.  We can merge later. ] Minor
	modifications were necessary to several other of the source files. 
	(display.c, estruct.h, main.c, makefile, and window.c.)
	xt.c uses the X toolkit and the Athena widget set to provide the
	following new functionality:

	    A scrollbar for each vile window.  The standard translations
	    provided by Athena scrollbars control movement of text in the
	    vile window.

	    Resize of vile windows by moving the border between
	    corresponding scrollbars (with the mouse).

	    Splitting and deleting of windows may now be done with the
	    mouse.  Ctrl<Btn1Down> on a scrollbar will cause the scrollbar
	    and the corresponding vile window to be split with the new
	    border at or near the mouse cursor.  Ctrl<Btn2Down> will delete
	    the window.  Ctrl<Btn3Down> will make the corresponding window
	    the only window.

	    Problems with getting the input focus set properly have been
	    fixed.

	    Quitting via the window manager works better.  It basically
	    works the same as if you had typed :q.  vile will display a
	    message if there are any unwritten buffers.  We may eventually
	    want to pop up an alert box when attempting to quit with
	    modified buffers from the window manager.

	+ added "ntildes" variable, which controls max number of tildes
	  displayed at the end of a buffer, expressed as a percentage of
	  window size.  [pgf made it a percentage] (edef.h eval.c display.c
	  modetbl vile.hlp)

	+ added support for the Motif and OpenLook widget sets.  

	+ fixed bug where focusFollowsMouse would take us out of the message
	  line when we should remain there.


This change log started on Tue Feb 22, 1994.
