home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / vile-src.zip / vile-8.1 / CHANGES.R3 < prev    next >
Text File  |  1994-12-06  |  126KB  |  3,179 lines

  1.  
  2. NOTICE: This change log is officially (sez me) closed.
  3.     All further changes documented (hopefully) in "CHANGES".  This
  4.     file was renamed from "CHANGES" to "CHANGES.R3" on Tue Feb 22, 1994.
  5.  
  6. Changes for vile 3.65: (released Mon Feb 7, 1994)
  7. (pgf)
  8.     Big change this release is 8-bit cleanliness.  See the help file
  9.     for 8-bit settings.  
  10.     
  11.     NOTE: If you had a FN-key binding which was bound to a "meta" (high
  12.     bit) key, you must change your binding to be a M- binding.  FN- and M-
  13.     are no longer synonymous.  In addition, we now preserve more of the
  14.     termio settings, so you may have to explicitly use "stty" to get
  15.     your meta-bit back.  (We used to clear istrip and the parity settings.)
  16.  
  17.     NOTE2: pc vile, if built with djgpp or watcom compilers, cannot change
  18.     screens to 43 or 50 line mode.  i'm working on it.
  19.  
  20.     + fix bug in charprocreg() that allowed a buffer to be marked
  21.       modified even if no changes were made and there is nothing to
  22.       undo.  (region.c)
  23.  
  24.     + Brackets '[' and ']' are now treated like braces and parentheses
  25.       when inserting in c-mode. added new #defines for [LR]BRACK to assist
  26.       this. (insert.c, estruct.h, main.c)
  27.  
  28.         + A buffer's local "dos" mode is now set to the same as the global
  29.       "dos" mode when empty, fresh, or when dos-style lines equal unix-
  30.       style lines. (main.c, file.c, random.c)
  31.  
  32.     + giving an argument to "set-dos-mode" causes it to turn dos-mode
  33.       off rather than on. (file.c)
  34.  
  35.     + allow backspacing over autoindented whitespace, whether  or not
  36.       backspacelimit is set. (insert.c)
  37.  
  38.     + new commands, ^A-i, ^A-o, and ^A-O, corresponding to i, o, and O,
  39.       but which do autoindent-override during an insert.  Most useful
  40.       when pasting into a buffer, since the pasted text often already
  41.       has leading whitespace, and autoindent just adds more.   this
  42.       is a different kind of override than used when pasting in xvile.
  43.       hmmm.  (insert.c, cmdtbl)
  44.  
  45.     + fixed core dump resulting from calculating indentlen and checking
  46.       for '#' char at start of empty line.  (insert.c)
  47.  
  48.     + add directory and host names to "vile died" message.  added ifdef
  49.       and prototype for usage of gethostname.  currently only used #if
  50.       BERK is true.  (greg mcfarlane) (file.c, proto.h, estruct.h)
  51.  
  52.     + apply (greg mcfarlane's) fix for bug in unqname, when it's being
  53.       used at startup, and can't ask for input from user. (file.c)
  54.  
  55.     + only reclaim or destroy empty unmodified buffers if they don't
  56.       correspond to existing files.  new routine ffexists() to support
  57.       this. (buffer.c, file.c, fileio,c, proto.h)
  58.  
  59.     + changed calls to kbd_key() to tgetc(), since SPEC is now outside
  60.       the range that callers can handle.  (window.c spawn.c
  61.       insert.c history.c exec.c eval.c csrch.c bind.c)
  62.  
  63.     + changed all references to last1key to refer to lastkey instead,
  64.       to accompany above change.  last1key is gone. (basic.c, opers.c,
  65.       edef.h)
  66.  
  67.     + kbd_key() now translates system-specific function-key sequences
  68.       to canonical '#-c' sequences, which kbd_seq() now interprets.
  69.       (input.c)
  70.  
  71.     + allow 8-bit input, by changing SPEC definition, and some table
  72.       sizes. (estruct.h, input.c, mktbls.c)
  73.  
  74.     + translate X key-events to a default set of xvile FN-bindings,
  75.       without using the SPEC define, since it won't fit through the
  76.       8-bit wide pipe we've constructed. (x11.c)
  77.  
  78.     + added new modes, printing-low and printing-high, which define
  79.       the range of 8-bit chars which should _not_ be displayed in
  80.       octal, but rather as themselves.  (modetbl, modes.c, main.c)
  81.  
  82.     + change how we display 8-bit chars. (display.c)
  83.  
  84.     + new mode, unprintable-as-octal, to control display of non-printing
  85.       chars in hex or octal. (display.c, modetbl)
  86.  
  87.     + new mode, meta-insert-bindings, which allows meta-bindings (M-c)
  88.       to work while in insert mode.  when off, all characters, meta
  89.       or not, are simply inserted as themselves.  when on, meta keys
  90.       which are bound to functions execute those functions, all others
  91.       insert themselves. (insert.c, modetbl)
  92.  
  93.     + tb_get now returns a true 8 bits, no sign-extension.  (tbuff.c)
  94.  
  95.     + allow focusFollowsMouse to be disabled by XDefaults (x11.c)
  96.  
  97.     + apply fix (kev) for infinite loop on extended lines with certain
  98.       kinds of tab values. (display.c)
  99.  
  100.     + attempt at better video support, and raw i/o, for djgpp (ibmpc.c)
  101.  
  102.     + new routines for ctrl-c/ctrl-break/critical-error handling in
  103.       djgpp environment. (main.c, proto.h, new file djhandl.c, makefile,
  104.       makefile.djg)
  105.  
  106.         + added DJGPP to the direct/dirent ifdef in dirstuff.h
  107.  
  108.     + fix for sys5 tgetent behavior, when attempting to determine if
  109.       we're an xterm. (tcap.c)
  110.  
  111.     + new targets for motorola delta machines (makefile)
  112.  
  113.      + fixes for core dumps on window resize (from kev) (x11.c)
  114.  
  115.     + new define for min no. of lines per window. (estruct.h)
  116.  
  117.     + change if_OPT_WORKING to simple ifdefs. (file.c fileio.c display.c
  118.       estruct.h)
  119.  
  120.     + added vanillashar target to makefile, so i can produce shars
  121.       that the gnuish DOS unshar program will unpack.  (makefile)
  122.  
  123.     + clarify help file regarding regions as used by the operator
  124.       commands (vile.hlp)
  125.  
  126.     + applied contributed fix for null fontname (x11.c)
  127.  
  128.     + changed logic of tags lookup, so i can understand it, and to
  129.       correct logic surrounding "taglength" (again).  if taglength is
  130.       0, matches must be exact (i.e.  all characters significant).  if
  131.       the user enters less than 'taglength' characters, this match must
  132.       also be exact.  if the user enters 'taglength' or more
  133.       characters, only that many characters will be significant in the
  134.       lookup. (tags.c)
  135.  
  136.     + fixed bug with wrap-around reverse searching for a string occurring
  137.       on the last line of a buffer.  (search.c)
  138.  
  139.     + fixed bug in search/replace operations where replacement string
  140.       was of the form 'text\1moretext'.  the length of the \1 replacement
  141.       pattern was being obtained incorrectly. (oneliner.c)
  142.  
  143.     + changed GO32 ifdef to DJGPP, to avoid name conflict with
  144.       predefinition. (input.c, fileio.c, estruct.h, ibmpc.c, path.c,
  145.       random.c, termio.c)
  146.  
  147.     + changed the 'interrupted' global to a routine, so we can poll for
  148.       a control-C character when real signals aren't available. (buffer.c,
  149.       edef.h, fences.c, main.c, search.c, word.c)
  150.  
  151. (tom)
  152.     + corrected EVCURCHAR case in 'gtenv()' that tried to return the
  153.       characters at the current position, even when the buffer was empty
  154.       (eval.c).
  155.  
  156.     + added ifdef-controls OPT_SHOW_EVAL, OPT_SHOW_REGS, OPT_SHOW_TAGS
  157.       (cmdtbl, eval.c, estruct.h, line.c, proto.h, tags.c), and renamed
  158.       OPT_MAP_DISPLAY to OPT_SHOW_MAPS (map.c, estruct.h).
  159.  
  160.     + use OPT_UPBUFF in 'killbuffer()' (buffer.c).
  161.  
  162.     + added ifdef-control OPT_WIDE_CTYPES (estruct.h, input.c, main.c).
  163.  
  164.     + use new macro 'chrBIT()' to fix long/short bitmasks in character
  165.       tests (estruct.h, line.c).
  166.  
  167.     + changed 'set_bname()' to a procedure so that it can trim trailing
  168.       blanks from the buffer-name.  This is done so that a ^X-k command
  169.       applied to a buffer-name beginning with "!" will work.
  170.  
  171.     + corrected length-computation in 'delins()' so that command
  172.       ":s/abc\[\(..\))/abc[\1]/" works properly (oneliner.c).
  173.  
  174.     + corrected offset-computation in 'scanner()' so that wrapped search
  175.       finds text on the first line after wrapping (search.c).
  176.  
  177.     + added call to 'update()' in 'ms_processing()' so that
  178.       "show-registers" display will be properly updated at the end of
  179.       mouse-selection (ibmpc.c).
  180.  
  181.     + corrected logic in 'execute_named_command()' that prevented user from
  182.       typing ":0r foo" in an empty buffer (exec.c).
  183.  
  184.     + corrected 'bclear()', so that the b_ulinep member is reset if it is
  185.       freed (buffer.c).
  186.  
  187.     + lint (fileio.c, npopen.c, spawn.c)
  188.  
  189.     + absorbed 'fnc2key()' into 'fnc2kcod()' (bind.c), to simplify
  190.       unbinding of prefix-keys in 'install_bind()'.
  191.  
  192.     + corrected 'install_bind()' by new procedure 'reset_prefix()', so that
  193.       mapping characters that happen to be prefix-keys will override their
  194.       binding (bind.c).
  195.  
  196.     + added definition LTRIMMED, to use in special cases (i.e., scratch
  197.       buffers) where we don't really want to show "^J" at the end of lines
  198.       when "list" mode is enabled (estruct.h, display.c, file.c, line.c,
  199.       map.c).
  200.  
  201.     + animated [Mapped Characters] buffer (map.c).
  202.  
  203.     + modified display of mappings so that using a repeat-count for the
  204.       ":map" command causes the actual characters to be shown, e.g.,
  205.       "#1" instead of "FN1", (map.c, modes.c).
  206.  
  207.     + added alternate boolean "glob" mode (in contrast to the normal string
  208.       mode), for configurations in which vile cannot read filename
  209.       expansions via a pipe, e.g., VMS or UNIX (mktbls.c, modetbl, glob.c).
  210.  
  211.     + moved "glob.h" definitions into estruct.h and proto.h because
  212.       the preceding change requires some definitions to precede inclusion
  213.       of "nemode.h" within estruct.h (descrip.mms, eval.c, filec.c, glob.c,
  214.       main.c, makefile, makefile.djg, makefile.tbc, makefile.wat, proto.h,
  215.       random.c, revlist, tags.c).
  216.  
  217.     + corrected test in 'index2ukb()', which caused the unnamed-buffer
  218.       to be shown incorrectly when yanking text after lines had been
  219.       deleted (line.c).
  220.  
  221.     + use 'DOT', 'mode_row()', 'buf_head()' and 'win_head()' macros (basic.c, buffer.c,
  222.       csrch.c, display.c, eval.c, exec.c,
  223.       file.c, filec.c, finderr.c, globals.c, line.c, random.c, tags.c,
  224.       tcap.c, tmp.c, undo.c, window.c, word.c) for consistency and readability.
  225.  
  226.     + modified lines/cols initialization so that 24x80 is assumed if all
  227.       other lookups fail, needed for apollo sr10.2 dial-in (tcap.c).
  228.  
  229.     + added macro 'KbSize()' (file.c, estruct.h, x11.c, spawn.c, line.c).
  230.  
  231.     + corrected 'imdying()' to not save temporary buffers, and to suppress
  232.       "implybuffer" mode (file.c).
  233.  
  234. Changes for vile 3.64: (released Wed Dec 23, 1993)
  235. (pgf)
  236.     + change arithmetic expression in mktbls.c, so we don't assume
  237.       boolean expression returns exactly 0 and 1.  this exercised
  238.       a bug in an HP compiler (mktbls,c, from chris sherman)
  239.  
  240.     + added fallback definition of VDISABLE to termio.c, in case
  241.       system doesn'd define it. (termio.c)
  242.  
  243.     + increased stack size for Watcom DOS builds to 16K.  probably
  244.       overkill, but the other DOS builds seems to use 16K as well.
  245.  
  246.     + cleaned up some of the scanf nonsense, but not nearly enough.
  247.       (finderr.c)
  248.  
  249.     + don't let display-page changes affect the user's chosen cursor.
  250.       (ibmpc.c)
  251.  
  252.     + use _previous_ indentation level after a line beginning with '#'
  253.       in cmode.  (insert.c, proto.h)
  254.  
  255.     + use COMSPEC environment variable when spawning a DOS shell (spawn.c)
  256.  
  257.     + assume we're an xterm if the word "xterm" appears anywhere in the
  258.       first field of the tcbuf, rather than just in the user's TERM
  259.       variable. (tcap.c)
  260.  
  261.     + increased size of tcbuf since SCO core dumps on overflow (tcap.c)
  262.  
  263.     + initialized tb_last in tb_alloc(). (tbuff.c)
  264.  
  265.     + couple of minor user suggestions for vile.hlp and the README.
  266.  
  267.     + don't beep when motions fail due to being aborted. (main.c)
  268.  
  269.     + check modification time on first change to buffer (file.c, exec.c,
  270.       proto.h)
  271.  
  272.     + the filename found for a tags lookup is now passed through doglob(),
  273.       which means tagfiles can now refer to environment variables etc.
  274.       (tags.c, from S.Suresh)
  275.  
  276.     + new X resource, "focusFollowsMouse", causes xvile's current window
  277.       to track with the mouse cursor. (x11.c, from S.Suresh)
  278.  
  279.     + added '~' to the characters considered part of a pathname, so
  280.       ^X-e will pick up ~pgf/foo correctly (main.c).
  281.  
  282. (tom)
  283.     + corrected last change to allow pipe to vile, in case it is invoked
  284.       via 'rsh' and cannot open /dev/tty (main.c).
  285.  
  286.     + added config flag OPT_TERMCHRS (estruct.h, bind.c).
  287.  
  288.     + animated [Terminal] and [Binding List] buffers (bind.c, buffer.c).
  289.  
  290.     + corrected call on 'slowreadf()' that resulted in wrong line numbers
  291.       when a file was piped to vile (main.c).
  292.  
  293.     + modified TurboC makefile to merge duplicate strings, saving a little
  294.       memory (makefile.tbc).
  295.  
  296.     + corrected logic that makes ".bak" file on MSDOS so that when
  297.       appending to a file (e.g., ":w >>foo") the file is copied after
  298.       renaming (fileio.c).
  299.  
  300.     + consolidated some code that sets errno when user attempts to read or
  301.       write a directory-file (fileio.c).
  302.  
  303.     + applied fix from eric krohn to fix uninitialized structure member
  304.       (tbuff.c).
  305.  
  306.     + corrected "EGA" table entry (ibmpc.c)
  307.  
  308.     + prevent 'flash' mode from being used until after 'TTopen()' (ibmpc.c)
  309.  
  310.     + corrected a hole in 'swbuffer()' that tried to use a null value for
  311.       'curwp' (buffer.c).
  312.  
  313.     + modified to allow "@" startup file to have errors w/o defaulting to
  314.       "vile.rc", by checking to see if a buffer was created (main.c)
  315.  
  316.     + corrected logic of 'vtputc()' and 'vtset()' to make line-wrap display
  317.       properly when the line contains control characters (display.c).
  318.  
  319.     + corrected limits of highlighting in 'change_selection()' (x11.c)
  320.  
  321. Changes for vile 3.63: (released  Wed Nov 10, 1993)
  322. (tom)
  323.     + corrected 'pathcat()', to avoid using autoincrement in 'slashc()'
  324.       macro (path.c).
  325.  
  326.         + cleanup for gcc-2.4.5's -Wall warnings (estruct.h, display.c, exec.c,
  327.       finderr.c, glob.c, mktbls.c, modes.c, npopen.c, proto.h).
  328.  
  329.     + compiled with CenterLine 'clcc' compiler (bind.c, buffer.c,
  330.       display.c, eval.c, file.c, filec.c, glob.c, globals.c, line.c,
  331.       tags.c).
  332.  
  333.     + corrected 'backpage()' to update mode-line after "previous-page".
  334.  
  335.     + modified ibmpc.c to make flash/mouse code more portable.
  336.  
  337.     + corrected call on 'strncpy()' in 'kbd_reply()' where 'extbuf' may be
  338.       copied onto itself.  On HP/UX, this causes the destination to be
  339.       cleared (input.c).
  340.  
  341.     + modified initialization of IBMPC to make "flash" mode work better on
  342.       MSDOS (ibmpc.c).
  343.  
  344.     + modified so that on MSDOS and VMS vile properly handles files that
  345.       are redirected to it via the standard input (main.c).
  346.  
  347.     + corrected bug that caused ":e#" command to ignore the '#' character
  348.       (exec.c).
  349.  
  350.     + corrected handling of ":tag" command so that if a tag's length is
  351.       shorter than the taglength setting, the shorter value is used
  352.       (tags.c).
  353.  
  354.     + modified 'writereg()' to prevent inadvertant file-write using a
  355.       read-pipe expression (file.c).
  356. (pgf)
  357.     + fixed indenting bug in formatregion().  (word.c)
  358.  
  359.     + added SHELL=/bin/sh to makefile
  360.  
  361. Changes for vile 3.62: (released  Mon Oct 11, 1993)
  362. (pgf)
  363.     + enable DOS mouse processing for Turbo-C only, since some code
  364.       uses Turbo-isms to get at registers (_AX, etc)  (estruct.h)
  365.  
  366.     + change references to x.ax, x.bx, x.di, etc to be x._AX_, x._BX_, etc.
  367.       to satisfy the Watcom 386 need for eax, ebx, edi, etc.
  368.  
  369.     + improper automatic indent on brace insertion fixed (insert.c,
  370.       fmatch,c, proto.h)
  371.  
  372.     + the ls -a output in imdying() was producing a line with a lone '.'
  373.       on it, which was terminating /bin/mail.  use sort -r to rearrange
  374.       it. (file.c)
  375.  
  376.     + re-ifdefed getscreensize, for machines without SIGWINCH
  377.  
  378.     + guard against zero values for tabstop and shiftwidth     (buffer.c)
  379.  
  380.     + added global control variable to make it easy to turn off the
  381.       "working..." message. (display.c)
  382.  
  383.     + don't let hst_append() do anything if clexec is set (history.c)
  384.  
  385.     + click the mouse (with xterm-mouse set) no longer calls showcpos().
  386.       if you want the mouse position, turn on "ruler-mode" (tcap.c)
  387.  
  388.     + flash mode is now off by default.  beeps should be beeps until
  389.       requested otherwise. (main.c)
  390.  
  391.     + applied vms path fix in pathcat() (path.c)
  392.  
  393.     + don't insert tabs during reformat if notabinsert is set (word.c)
  394.  
  395.     + applied patches for djgpp from Jim Crigler. (estruct.h, ibmpc.c)
  396.  
  397. (tom)
  398.     + TurboC compiler warnings (history.c, mktbls.c, oneliner.c, search.c).
  399.  
  400.     + added TurboC compiler warning patterns (finderr.c).
  401.  
  402.     + implemented mouse highlighting for MSDOS (display.c, ibmpc.c).
  403.  
  404.     + made the table-driven combinations for $sres work properly (ibmpc.c).
  405.  
  406.     + corrected 'repointstuff()', so that undo works properly for multiple
  407.       windows; other window's dot wasn't being updated (undo.c).
  408.  
  409.     + modified 'execute_named_command()' to set dot-moved flag if the
  410.       range-computation moves it, fixes warning from 'updpos()' (exec.c).
  411.  
  412.     + linted remaining size_t usage (basic.c bind.c display.c estruct.h
  413.       eval.c exec.c filec.c glob.c history.c isearch.c mktbls.c npopen.c
  414.       oneliner.c proto.h regexp.c search.c spawn.c vmsvt.c).
  415.  
  416.     + guarded &left, &right, related functions against negative indices,
  417.       etc., (eval.c).
  418.  
  419.     + changed sizes in regexp-struct to SIZE_T (from short, int) to support
  420.       lint (estruct.h).
  421.  
  422.     + added command-line option "-wm" to set X11 window-manager title
  423.       (main.c, version.c, x11.c).
  424.  
  425.     + modified prompts to make ^V echo until the character is followed by
  426.       what we want to see a la vi (input.c).
  427.  
  428.     + modified treatment of '!' character (in shell prompts) to expand it
  429.       immediately, more like vi (main.c, history.c, input.c, spawn.c).
  430.  
  431.     + corrected some ifdefs that broke !-commands when compiling small
  432.       configuration for testing (cmdtbl, bind.c, eval.c).
  433.  
  434.     + whitespace spawn.c
  435.  
  436.     + corrected redisplay logic in 'execute_named_command()' when repeated
  437.       backspace characters were received (exec.c).
  438.  
  439.     + modified logic in 'imworking()' to be a little more conservative when
  440.       erasing leftover text in the message line, e.g., when it happens
  441.       during filename-completion on large directories (display.c).
  442.  
  443.     + corrected a hole in 'hst_append()' that allowed non-interactive use
  444.       of the bind-key function to erroneously set the 'clexec' flag
  445.       breaking subsequent named-commands (history.c).
  446.  
  447.     + trailing blank, e.g., "int<sp><nl>tgetc(quotec)<nl>" breaks apollo
  448.       ctags by making it generate a pattern only for the "int<sp>" (bind.c,
  449.       input.c, isearch.c, search.c).
  450.  
  451.     + modified 'imply_buffer()' so that c-mode is set as in 'readin()'
  452.       (buffer.c).
  453.  
  454.     + corrected 'getfile()' to treat names longer than NBUFN as filenames,
  455.       and 'unqname()' to assume its 'bname' argument can have a trailing
  456.       null (buffer.c, exec.c, file.c, main.c).  (This fixes a bug I
  457.       introduced in 3.60 that prevented using ":e %+" properly, where "%"
  458.       expands to a long buffer name, because the buffer names are compared
  459.       with 'strncmp()').
  460.  
  461.     + modified 'getfile()' to suppress redundant prompt by using returned
  462.       state of 'unqname()' (file.c).
  463.  
  464.     + modified 'mlreply_file()' to prompt if a wildcard expands to multiple
  465.       files (e.g., when reading a file) (filec.c).
  466.  
  467.     + modified 'tokval()' to expand ~-paths so macros can refer to user's
  468.       home paths (eval.c).
  469.  
  470.     + corrections to vms filename-completion (path.c).
  471.  
  472.     With Purify demo
  473.  
  474.     + corrected memory leak in 'FreeBuffer()' (buffer.c).
  475.     
  476.     + corrected uninit-memory reference in 'kbd_show_response()' (input.c,
  477.       history.c), in 'dfputsn()' (display.c).
  478.  
  479.     + corrected reference to freed memory in 'listmodes()' and modified
  480.       logic to use 'animated' logic, and variables 'relisting_b_vals' and
  481.       'relisting_w_vals'.  As a side-effect, this allows local buffer and
  482.       window modes to be set in [Settings] (buffer.c, display.c, edef.h,
  483.       main.c, modes.c).
  484.  
  485.     + corrected a null-pointer reference to 'fromline' when a ":0" command
  486.       was entered in an empty buffer (exec.c).
  487.  
  488. Changes for vile 3.61: (released  Thu Sep 16, 1993)
  489. (pgf)
  490.     + when files are saved in /tmp, and mail is sent, the list is now
  491.       created with "ls -a" to make all files visible. (file.c)
  492.  
  493.     + when trying to get back to the current buffer in globber(), use
  494.       set_curwp() instead of swbuffer(), since swbuffer() may not take
  495.       us back to the same window we started in, if the buffer is
  496.       multiply displayed. (globals.c)
  497.  
  498.     + moving the cursor with the mouse (xterm-mouse) causes showcpos()
  499.       to be called, as if a ^G had been typed.  the message line needed
  500.       to be cleared in any case, to delete old ^G output, so i thought
  501.       i'd try updating it instead (should a similar change be made in
  502.       x11.c?). (tcap.c)
  503.  
  504.     + in cmode, parentheses are treated like braces, in that if a line
  505.       ends with a left one, the next line is indented, and if it starts
  506.       with a right one, the line is aligned with the line containing the
  507.       match.  this may be useful for parentheses-heavy languages like
  508.  
  509. (tom)
  510.     + nits from 3.60 integration (file.c, mktbls.c, proto.h, glob.h)
  511.  
  512.     + allow "number" mode to be set/unset in scratch buffers (modetbl,
  513.       display.c, random.c).
  514.  
  515.     + use 'delay()' function in TurboC for 'catnap()' (random.c)
  516.  
  517.     + ifdef'd "dirc" and "history" modes so that they don't appear in
  518.       [Settings] when not configured (modetbl, main.c).
  519.  
  520.     + brought TurboC makefile up-to-date (makefile.tbc).
  521.  
  522.     + corrected logic of 'makemodelist()' so that both buffer and window
  523.       local modes are shown (modes.c).
  524.  
  525.     + corrected my last change to 'unqname()' to ensure that if the b_bname
  526.       field is short enough, it will have a null terminator (file.c).
  527.  
  528.     + moved logic that reports lines-deleted from 'ldelete()' to common
  529.       logic of 'operdel()' and 'operlinedel()', so that using 'ldelete()'
  530.       internally won't generate spurious messages (line.c, opers.c).
  531.  
  532.     + used 'doingopcmd' to modify return-status of motion commands (h,l) to
  533.       get rid of special-case handling so that when used internally they
  534.       don't fail; obsoleted 'forwchar_in_line()' (basic.c).
  535.  
  536.     + use macro 'cmdBIT()' to clarify flags for CMDFUNC, added flag OPTREG
  537.       to simplify test in 'execute_named_command()', and make test for
  538.       optional register and/or line-count more explicit by allowing it only
  539.       when non-punctuation follows the command (fixes ":s/pattern")
  540.       (cmdtbl, estruct.h, exec.c, input.c).
  541.  
  542.     + corrected my last change to make "2p work correctly, by using new
  543.       function 'index2ukb()' (line.c).
  544.  
  545.     + modified 'mlreply_file()' so that filename completion works on the ^W
  546.       and ^R screen commands (filec.c).
  547.  
  548.     + modified 'getregion()' to use line-number to simplify computation,
  549.       and to work with left-margin.  Also whitespaced (region.c).
  550.  
  551.     + corrected test in 'loop()' that caused j/k commands to go awry in the
  552.       [Registers] buffer at blank lines (main.c).
  553.  
  554.     + corrected test in 'kbd_reply()' to avoid name-completion when the
  555.       current-response is a shell-command, e.g., "!foo -?" (input.c).
  556.  
  557.     + corrected logic in 'forwchar_to_eol()' and 'ins_anytime()' that lets
  558.       arrow-keys to go past the end of the line while in insert (or
  559.       replace) mode (basic.c, insert.c).
  560.  
  561.     + corrected logic that allowed a user to begin an insertion in one
  562.       buffer, then click the mouse to reposition into a readonly buffer
  563.       and continue inserting -- in the readonly buffer (basic.c, insert.c).
  564.  
  565.     + added mode 'flash' (ibmpc.c, main.c, tcap.c, x11.c)
  566.  
  567.     + added logic to support msdos-mouse, using defines OPT_MS_MOUSE and
  568.       OPT_MOUSE.  This version only supports repositioning clicks (basic.c,
  569.       display.c, estruct.h, ibmpc.c, termio.c).
  570.  
  571.     + use symbol ALLOC_T to clarify distinction between size_t/int/unsigned
  572.       (display.c, edef.h, estruct.h, eval.c, filec.c, fileio.c, finderr.c,
  573.       line.c, oneliner.c, proto.h, regexp.c, tbuff.c, undo.c, x11.c)
  574.  
  575. Changes for vile 3.60: (unreleased)
  576. (pgf)
  577.     + added "stop" command (synonym for "suspend-vile", aka ^Z) (cmdtbl)
  578.  
  579.     + ensure shiftwidth and tabstop are always set correctly after modes
  580.       are adjusted -- any of cmode, cts/ts, csw/sw can affect. (modes.c)
  581.  
  582.     + added support to finderr() for OSF1 (DEC Alpha's, at least) compiler
  583.       errors, of the form:
  584.         /usr/lib/cmplrs/cc/cfe: Error: test.c, line 8: Syntax Error
  585.  
  586.     + took out leftover dbwrite() call from rangespec() -- may fix errant
  587.       behavior on ":.$d" (exec.c)
  588.  
  589.     + fixed helpfile note about X11 -name option -- it sets the name
  590.       used for resource lookups, not the window name.  (vile.hlp)
  591.       how do we set the window name?
  592.  
  593.     + under DOS, leave the cursor shape and the keyboard repeat rate
  594.       alone.  if we get complaints, perhaps we should mode-ify these,
  595.       but in general, settings like that are personal, and we shouldn't
  596.       muck with them.  (ibmpc.c)
  597.  
  598.     + don't introduce extra path separators in pathcat() (path.c)
  599.  
  600.     + protect against NULL returns from getcwd, in case the directory
  601.       we're in has been removed. (random.c)
  602.  
  603.     + changed symbol "glob()" to "doglob()" to stop name conflict with
  604.       standard libraries (glob.c, eval.c, random.c, filec.c)
  605.  
  606.     + added prototypes for glob.c to proto.h
  607.  
  608.     + eliminated infinite loop when using goto-beginning-of-sentence from
  609.       end of buffer (basic.c)
  610.  
  611.     + added mode "multibeep" to control the "one beep per failed motion"
  612.       logic -- if multibeep is on (default), then every failed motion
  613.       produces a beep.  if it's off, then only the first (of a set of
  614.       identical) causes a beep. (modetbl, main.c)
  615.  
  616.     + corrected possible use of uninited locals in file.c (was really
  617.       only a warning suppression) and  display.c
  618.  
  619.     + turned off beeping in search.c and csrch.c, now that all failed
  620.       motions cause beeps.
  621.  
  622.     + change "Date" to "installed" in version.c, since modtime really
  623.       only reflects installation date.
  624.  
  625.     + don't let vile use a screen dimension of less than 2 in either
  626.       direction (display.c, tcap.c)
  627.  
  628.     + fixed bug that made all TERM types be thought of as xterms. (tcap.c)
  629.  
  630.     + fixed documentation of the help commands.  it's been wrong
  631.       for over three years now, and it's in the first screen of
  632.       help! (^X-^H and ^A-^H should be ^X-h and ^A-h) (vile.hlp)
  633.  
  634.     + added AIX to the machines that need sys/ioctl.h, to pick up
  635.       TIOCGWINSIZE (display.c)
  636.  
  637.     + reset the "calledbefore" flag in docmd().  fixes chris sherman's
  638.       problem where a second substitute-til in a macro would appear to
  639.       do nothing.  (actually it was reusing its previous args, so there
  640.       was simply nothing to do)  (exec.c)
  641.  
  642.     + added '>' to the characters known to the reformatting code, so
  643.       you can reformat most email replies. (word.c)
  644.  
  645.     + added automatic patchfile generation to the makefile.  hopefully
  646.       i can generate patches for all future releases, in addition to
  647.       shar files. (makefile)
  648.  
  649. (tom)
  650.     + made ansi.c work with TurboC (ansi.c, main.c, display.c, termio.c),
  651.       to use as test-case for COLOR.
  652.  
  653.     + corrected highlighting code for ":%s" command with ibmpc display
  654.       (display.c, ibmpc.c).
  655.  
  656.     + modified 'bfind()' to always return a buffer (unless it cannot create
  657.       the buffer), use 'find_b_name()' for the no-create mode (bind.c,
  658.       buffer.c, eval.c, exec.c, file.c, filec.c, finderr.c, history.c,
  659.       main.c, map.c, modes.c, oneliner.c, random.c, spawn.c, tags.c).
  660.  
  661.     + use macros 'set_bname()' and 'eql_bname()' and function 'get_bname()'
  662.       to encapsulate buffer name, which does not necessarily have a
  663.       trailing null (bind.c, buffer.c, display.c, estruct.h, eval.c,
  664.       exec.c, file.c, finderr.c, input.c, main.c, modes.c, oneliner.c,
  665.       spawn.c, tags.c, tmp.c).
  666.  
  667.     + removed nonstandard 'strncpy()' (main.c).
  668.  
  669.     + corrected 'kbd_show_response()' to work with expand-chars mode
  670.       (input.c).
  671.  
  672.     + corrected 'kbd_reply()' to make the number of characters shown have
  673.       the same limit as the caller's buffer-length, and to make it always
  674.       return the data with a trailing null (input.c).
  675.  
  676.     + made 'animated' mode work for [Registers] buffer (line.c), and
  677.       modified the logic so that numbered-buffers are displayed in a
  678.       vi-compatible manner.
  679.  
  680.     + make shift-commands work more like vi, allowing repeated '<' or '>'
  681.       characters in a :-command to imply a repeat count (bind.c, exec.c,
  682.       opers.c).
  683.  
  684.     + corrected logic of 'dofile()' so that if an error is found in the
  685.       startup file, vile properly sets curbp and curwp (exec.c).
  686.  
  687.     + simplified/corrected command-history logic of to fix error that
  688.       prevented scrolling past ":e!" command, and to allow scrolling of
  689.       '<', '>' command even when repeated (bind.c, exec.c, history.c,
  690.       spawn.c).
  691.  
  692.     + added flag KBD_EXPCMD to handle the case (from rewrite of history)
  693.       where %,#,: expansion must be done for shell commands (estruct.h,
  694.       bind.c, input.c).
  695.  
  696.     + added OPT_HISTORY to allow ifdef'ing of history.c code (estruct.h,
  697.       history.c)
  698.  
  699.     + cache home-directories looked up in 'home_path()' to make it run
  700.       faster (path.c)
  701.  
  702.     + modified glob-expansion to allow "~" expansion.  This doesn't work
  703.       with wildcards in the user-portion (e.g., "~ab?"), but suffices for
  704.       most cases (glob.c).
  705.  
  706.     + added a find-error case for apollo's C++ compiler (finderr.c).
  707.  
  708.     + modified logic for 'displaying' vs 'imworking()' slightly, to get rid
  709.       of erroneous cursor movement (display.c).
  710.  
  711.     + added function 'slowtime()' to force updates in 'slowreadf()' more
  712.       often (file.c).
  713.  
  714.     + adjusted definitions for better lint checks on apollo sr10.2
  715.       (estruct.h, makefile).
  716.  
  717.     + make piped-input also set error-buffer (main.c).
  718.  
  719.     + revised logic that sets VAL-structs for modes to correct places where
  720.       buffer & window traits are saved without converting to local values.
  721.       Also removed code (e.g., copy_val) that checks reference counts,
  722.       since they aren't really necessary (buffer.c estruct.h main.c modes.c
  723.       proto.h)
  724.  
  725.     + modified behavior of 'unsetl' command to delete local setting
  726.       (eval.c, modes.c).  It was only modifying (toggling) boolean modes.
  727.  
  728.     + corrected 'reframe()' to handle linewrapping case submitted by
  729.       alistair (display.c).
  730.  
  731.     + corrected cursor-update in 'x_scroll()' that left stray cursor images
  732.       remaining after ^D/^U commands (x11.c).
  733.  
  734.     + corrected logic that caused selection-text to be lost when keypress
  735.       was received (x11.c).
  736.  
  737.     + modified X-windows pasting to trim unneeded whitespace when inserting
  738.       into cmode or autoindent buffer (bind.c, x11.c).
  739.  
  740.     + corrected kill-buffer flag KAPPEND, which had the same value as
  741.       KLINES (estruct.h, line.c).
  742.  
  743.     + corrected error in 'doindent()' that caused a "<nl>}" insertion to
  744.       delete nonwhite characters (insert.c).
  745.  
  746.     + corrected ":tags" command for exact (taglen=0) lookups (tags.c)
  747.  
  748.     + make failed motion-commands sound an alarm like vi (main.c).
  749.  
  750.     + modified logic for h,j,k,l,^D,^U,^F,^B commands to return false when
  751.       they fail, so failed-motion alarm works (basic.c).
  752.  
  753.     + corrected logic for b,B,w,W,e,E commands to return false only when
  754.       backing/forwarding past the buffer ends (word.c).
  755.  
  756.     + modified alternate-window motions 'scrnextup()', 'scrnextdw()',
  757.       'mvdnnxtwind()', 'mvupnxtwind()' to also return failed-motion status,
  758.       for consistency (window.c)
  759.  
  760.     + made new function 'forwchar_in_line()' to do the vi "l" command,
  761.       dissociating it from the internal motion-command (basic.c, cmdtbl).
  762.  
  763.     + made 'backhpage()', 'forwhpage()' motion-commands (cmdtbl).
  764.  
  765.     + make failed quit-commands return false (main.c).
  766.  
  767.     + make version-command show UNIX or VMS executable's date (main.c)
  768.  
  769.     + corrected behavior of 'histbuff()' when user simply toggles with the
  770.       "_" command.  This did not handle the case in which the alternate
  771.       buffer was temporary, and thus had no number (buffer.c).
  772.  
  773.     + introduced new buffer-attribute 'b_lim_left', macro
  774.       'w_left_margin()', ifdef'd with OPT_B_LIMITS, use this to control
  775.       cut/paste selection in [Registers] (basic.c, buffer.c, csrch.c,
  776.       display.c, random.c, region.c, window.c, x11.c).
  777.  
  778.     + modified 'execute_named_command()' to recognize register name and
  779.       line-count for commands such as ":yank", making it handle cases such
  780.       as ":5>6", ":y a 6", ":10,20y b" (exec.c, input.c, line.c).
  781.  
  782.     + modified ":put" command to report the number of lines added (line.c).
  783.  
  784.     + split out 'version.c' because main.c got too large for apollo lint
  785.       (main.c, makefile*, vms_link.opt, link.msc).
  786.  
  787. Changes for vile 3.59: (released Wed Aug 18, 1993)
  788. (pgf)
  789.     + added VIEWOK flag for functions that execute macros.  it says
  790.       it's okay to execute them in view mode, even though they have the
  791.       UNDO bit set.  this fixes not being able to run @, :map'ed, or
  792.       ^X-& macros in view-only buffers.
  793.  
  794.     + made the xterm-mouse mode available in xvile as well as vile, to
  795.       make it easier to share .vilerc between the two versions.  the
  796.       alternative is to insist that people put ~force set xterm-mouse
  797.       in .vilerc, to override the error they'll get in xvile from the
  798.       mode not being present. (input.c, modes.c, estruct.h)
  799.  
  800.     + changed default value of "xterm-mouse" to off, to make vile behave
  801.       like it used to, and like other character applications, by default.
  802.       (main.c)
  803.  
  804.     + turned off support for the "working..." message for builds that
  805.       define USG, since they probably have non-restartable system calls.
  806.       (estruct.h)
  807.  
  808.     + accept any TERM variable that ends in "xterm" to be an xterm.
  809.       (tcap.c, vile.hlp)
  810.  
  811.     + fixed "uninitialized variable 'req'" when compiling without REVSTA
  812.       defined. (display.c)
  813.  
  814.     + fixed missing closing double quote in "make all" help output.
  815.       (makefile)
  816.  
  817.     + bumped the maximum row count from 100 to 200.  i personally can't
  818.       read more than about 70 lines on a 19" mono monitor, but maybe
  819.       i need glasses. (tcap.c, x11.c)
  820.  
  821.     + took out extraneous trace.h include from x11.c
  822.  
  823.     + corrected 'col2offs()' to make it easier to position the mouse on a
  824.       tab character (display.c).
  825.  
  826. Changes for vile 3.58: (released Fri Aug 13, 1993)
  827. (pgf)
  828.     + added "sys$login:" to VMS file search path for vile.rc
  829.  
  830. (tom)
  831.     + refined 'imworking()' to get rid of leftover working-message
  832.       (display.c, file.c).  Make working-message show up only when 'terse'
  833.       mode is off (the default).
  834.  
  835.     + added code to support xterm mouse-clicking (to move dot), with
  836.       additional code for later use with highlighted selections.  Made this
  837.       a mode (xterm-mouse) because it does not implement cut & paste yet
  838.       (basic.c, display.c, input.c, main.c, modes.c, tcap.c).
  839.  
  840.     + added calls to 'TTkopen()' and 'TTkclose()' to termio.c so that (for
  841.       all systems) we call these within 'ttclean()' and 'ttunclean()'
  842.       (termio.c, tcap.c).
  843.  
  844.     + optimized display of 'ruler' (display.c)
  845.  
  846.     + use 'displaying' as a semaphore rather than true/false flag, as a
  847.       guard against interrupt by 'imworking()' which modifies ttcol and
  848.       ttrow (bind.c, display.c, main.c, tcap.c, x11.c).
  849.  
  850.     + make ":=" command accept address (like vi) to show arbitrary address
  851.       value (cmdtbl, estruct.h, exec.c, random.c).
  852.  
  853.     + don't let 'write-til' move dot (cmdtbl).
  854.  
  855.     + modified 'doindent()' to trim leading whitespace (like vi) from the
  856.       portion of the line after dot (insert.c).
  857.  
  858.     + modified insert-code to treat the combination of repeat-count and
  859.       newline like vi, causing the repeat count to apply only to the
  860.       insertion-string before a newline.  (edef.h, input.c, insert.c)
  861.  
  862.     + corrected handling of '.' repeat-count for r,R commands (insert.c)
  863.  
  864.     + modified user-variables to make them dynamically-allocated, and to
  865.       remove the restriction on the length of their names (mktbls.c,
  866.       estruct.h, eval.c, main.c).  Also corrected treatment of newline in
  867.       prompt for user-variable name.
  868.  
  869.     + used 'strncpy()' to copy return-values from 'kbd_reply()', just in
  870.       case macro-tokens are too long (input.c).
  871.  
  872.     + don't expand '%' or '#' in 'kbd_reply()' if it would be the name of
  873.       an invisible buffer (input.c).
  874.  
  875.     + added universal-modes 'expand-chars' to list the characters to expand
  876.       in 'kbd_reply()', and 'expand-path' to control whether %/# are shown
  877.       as full, or shortened paths (modetbl, input.c, main.c).
  878.  
  879.     + modified X-windows config to allow processing of events when the
  880.       working-message code is executed (display.c, x11.c).  This makes the
  881.       screen refresh and keyboard handling work better.
  882.  
  883.     + added 'animated' buffer-mode to control whether vile updates
  884.       scratch buffers when their contents would change (e.g., the buffer
  885.       list), made this work for buffer-list (buffer.c, display.c,
  886.       estruct.h, modes.c, modetbl).
  887.  
  888.     + revised the 'killbuffer()' code to work properly with the animated
  889.       mode (buffer.c).
  890.  
  891.     + modified mktbls to check for illegal mode-names (mktbls.c).
  892.  
  893.     + linted with SMALLER set (to get rid of unused functions), introduced
  894.       new ifdef with OPT_EVAL to simplify (basic.c bind.c buffer.c cmdtbl
  895.       estruct.h eval.c insert.c line.c lint.out modes.c npopen.c proto.h
  896.       window.c).
  897.  
  898. Changes for vile 3.57: (released Fri Aug 06, 1993)
  899. (pgf)
  900.     + the bug check for b_ulinep pointing at a newly inserted line is
  901.       no longer valid, since we can now insert a line, make changes (which
  902.       will set b_ulinep), undo those changes, and then undo the insert.
  903.       we now just null out b_ulinep when we remove the line it references.
  904.       (undo.c)
  905.  
  906.     + changed name of setmode() to avoid library conflict with djgpp, and
  907.       changed the other del/setg/delg versions as well.  (cmdtbl, modes.c,
  908.       proto.h)
  909.  
  910.     + took out #define USG 0 since djgpp uses an #ifdef on this in a header
  911.       (estruct.h)
  912. (tom)
  913.     + whitespace in basic.c
  914.  
  915.     + corrected definition of ScratchName macro for apollo SR10.2
  916.       (estruct.h) and a compiler warning (in glob.c).
  917.  
  918.     + corrected gcc warnings about 'signal()'-arguments for SunOs.
  919.  
  920.     + use new macros ACTUAL_SIG_ARGS, etc., instead of ACTUAL_SIGNAL so
  921.       that the tag-file can find the signal-handling procedures (estruct.h,
  922.       display.c, file.c, main.c, proto.h, spawn.c, x11.c).
  923.  
  924.     + customized the c-suffix default values for VMS, MSDOS and UNIX.
  925.  
  926.     + VAX/VMS C does not allow continuation-lines in ifdefs (mktbls.c).
  927.  
  928.     + VAX/VMS C may incorrectly set ferror() when feof() is true (fileio.c)
  929.  
  930.     + VAX/VMS C 'rewind()' does not work correctly (fileio.c)
  931.  
  932.     + added code to show "working..." message for time-consuming operations
  933.       (display.c, npopen.c, vmspipe.c), and to allow 'slowreadf()' to show
  934.       its progress (file.c, fileio.c).
  935.  
  936.     + linted calls on 'signal()', (main.c, display.c, spawn.c, termio.c).
  937.  
  938.     + linted calls on 'firstnonwhite()' (basic.c, exec.c, insert.c, line.c,
  939.       opers.c, region.c, spawn.c, word.c).
  940.  
  941.     + use new functions 'end_named_cmd()', 'more_named_cmd()' for clarity
  942.       (exec.c, file.c, map.c, oneliner.c)
  943.  
  944.     + added new mode 'ruler' (to display line+column in a window on the
  945.       modeline), and new window-flag WFSTAT to support it (by allowing
  946.       non-modal information to affect the modeline).  (display.c)
  947.  
  948.     + corrected error I introduced into 'reframe()', and in 'row2window()'
  949.       while adding 'linewrap' mode (display.c).
  950.  
  951.     + corrected code that frees buffer's fname-field for the special case
  952.       of out-of-memory (buffer.c, random.c).
  953.  
  954.     + added new command 'tagstack' to show the contents of the tag-stack.
  955.       Modified 'tags()' to use module-level 'tagname[]' rather than local
  956.       copy of tag-string.  (tags.c)
  957.  
  958.     + always update the modtime-at-warn buffer field when prompting
  959.       for the check-modtime mode (file.c).
  960.  
  961.     + removed (obsolete) code for DEC Rainbow (estruct.h, display.c,
  962.       termio.c).
  963.  
  964.     + modified 'line_no()' to return values in the range 1..MAX+1
  965.       instead of 0..MAX (random.c).
  966.  
  967.     + corrections to make X11 version work with 'number', 'linewrap' modes,
  968.       to guard against selection extending outside a window, to highlight
  969.       only the actual text within a window, and to use 'yankregion()' to
  970.       save the paste-text.  (basic.c, display.c, window.c, x11.c)
  971.  
  972.     + modified 'typahead()' to know when X-windows is pasting, and the
  973.       paste-init code to supply an escape to end insert-mode, and to use
  974.       TBUFF's so that nulls can be inserted (termio.c, x11.c).
  975.  
  976.     + put the repeat-count in 'map_proc()' back the way Otto Lind had it
  977.       (map.c).
  978.  
  979. Changes for vile 3.56:    (released Tue Jul 27, 1993)
  980. (pgf)
  981.     + after a confirm substitute operation, we now mlerase the confirm
  982.       prompt (oneliner.c)
  983.  
  984.     + be sure the [vileinit] buffer is marked as scratch while doing the
  985.       bprintf into it, so undo record-keeping will be suppressed. (main.c)
  986.  
  987.     + rearranged calls to chg_buff and ldelnewline in ldelete, so that
  988.       the buffer will still be marked clean on first toss/copy/tag to
  989.       undo.  unmodified state is now restored correctly after a :g/^$/d is
  990.       undone. (line.c)
  991.  
  992.     + In regular expressions, \s and \S are now true atoms.  they both
  993.       must now be followed by * or + to match more than one.  also, \s
  994.       no longer matches BOL or EOL (thanks to alistair and eric for
  995.       pointing out and fixing) (regexp.c)  In practice this means that
  996.       one should use \s* or \s\+ where one used to use just \s.  also,
  997.       if a match against ^ or $ is necessary, it must be done explicitly,
  998.       e.g. /\(^\s*\|\s\+\)word/ instead of /\sword/
  999.  
  1000.     + adjusted paragraph/section/comment/sentence regexps, with help
  1001.       from eric, to reflect change to \s and \S
  1002.  
  1003.     + make the #ifdef USE_TERMIO version of ttclean() be a no-op under
  1004.       X11, as it is in the other cases.  eric's right -- termio.c needs
  1005.       a rewrite.  (termio.c)
  1006.  
  1007.     + don't pass the (0) to getpgrp if we're POSIX and ANSI -- the
  1008.       library is probably the right one, and there's a high probability
  1009.       of a prototype conflict if we _do_ pass it.  (spawn.c)
  1010.  
  1011.     + When looking up X defaults, the old code checked the class first,
  1012.       then the specific program name.  This is backwards since if the
  1013.       class value exists, there is no way to override it with the -name
  1014.       option.  (x11.c)
  1015.  
  1016.     + AIX and pyramid think we have non-constant case expressions (eval.c)
  1017.  
  1018.     + There is no requirement in ANSI C for SCRTCH_LEFT and SCRTCH_RIGHT
  1019.       to be expanded before the ##.  Some preprocessors do and some don't.
  1020.       However, the other #define using just #s and string concatenation
  1021.       seems to work everywhere.  (estruct.h)
  1022.  
  1023.     + clarified usage of &sin function, which searches its first argument
  1024.       for an occurrence of the second.  (vile.hlp)
  1025.  
  1026. (tom)
  1027.     + renamed UCHARAT to UCHAR_AT; added defs for UCHAR USHORT, UINT and
  1028.       ULONG for easier linting/reading (bind.c, dirstuff.h, estruct.h,
  1029.       file.c, history.c, ibmpc.c, input.c, isearch.c, line.c, oneliner.c,
  1030.       proto.h, tbuff.c, vmalloc.c, vmsvt.c, x11.c, z_ibmpc.c)
  1031.  
  1032.     + make 'prc2kcod()' return an int again, some optimization of 'token()'
  1033.       (bind.c, file.c).
  1034.  
  1035.     + clean-compiled/tested X11 + DEBUGM + OPT_MAP_MEMORY with gcc
  1036.       (basic.c, edef.h, exec.c).
  1037.  
  1038.     + disable filename-completion when OPT_MAP_MEMORY is enabled.
  1039.  
  1040.     + added mode 'newline', set to true when reading files that have a
  1041.       trailing newline (the normal vi-convention), modified (file.c,
  1042.       buffer.c, random.c).
  1043.  
  1044.     + fixed place where ":ww" garbages the screen before reporting
  1045.       "wrote 0 buffers" (buffer.c).
  1046.  
  1047.     + simplified 'writereg()' and 'ffputline()' (fileio.c, file.c) to allow
  1048.       'newline' mode to control whether a trailing newline is written to
  1049.       output files.
  1050.  
  1051.     + modified 'kifile()' so that it does not insert the trailing newline
  1052.       if it wasn't present in the file.
  1053.  
  1054.     + made 'ldelete()' return from one point (line.c) to simplify 'report'
  1055.       mode.
  1056.  
  1057.     + added mode 'report', to specify the number of changes before a
  1058.       message is emitted:
  1059.         NN lines deleted        6dd
  1060.         NN more lines            u
  1061.         NN fewer lines            u
  1062.         NN fewer lines            :g/^$/d
  1063.         NN lines yanked            "a8yy
  1064.         NN substitutions on MM lines    :%s/x/XX/g
  1065.         NN substitutions        :%s/x/X/
  1066.       (globals.c, line.c, undo.c, oneliner.c, random.c, region.c)
  1067.  
  1068.     + corrected unnecessary screen-update in 'substline()' (oneliner.c)
  1069.       introduced in confirm-changes.
  1070.  
  1071.     + added 'linewrap' mode (basic.c, buffer.c, display.c, windows.c).
  1072.  
  1073.     + corrected cursor movement for large repeat counts with 'H' command
  1074.       (basic.c).
  1075.  
  1076.     + ifdef'd 'screen_string()' to handle apollo compiler warning when
  1077.       testing SMALLER configuration.
  1078.  
  1079.     + added stubs for modes 'popup-msgs', 'popup-choices'.
  1080.  
  1081. Changes for vile 3.55: (released Mon Jul 19, 1993)
  1082. (pgf)
  1083.     + new routine, mlquickask(), which prompts for and returns a single
  1084.       key answer from a user.  use this when getting a confirm from a
  1085.       user for a substitute command. (input.c, oneliner.c, proto.h)
  1086.  
  1087.     + documented the 'c' for confirm (vile.hlp)
  1088.  
  1089.     + the token() routine now expands numeric escape codes, like \nnn and
  1090.       \xNNN where nnn are octal and NNN are hex digits.  this may affect
  1091.       vilerc files that have \ sequences in them.  support for mapping
  1092.       to key-sequences like 0xNN is gone -- use \xNN instead.  this will
  1093.       make it easier to do multi-char maps in the future.
  1094.  
  1095.       note that \000 will cause internal problems, since things are null-
  1096.       terminated, and the sequences "<sp>", "<tab>", and "^C" are all
  1097.       problematic when multi-char sequences come around.
  1098.  
  1099. (alistair)
  1100.     + added highlighted confirm to ":s" command.  (oneliner.c, display.c)
  1101.  
  1102. (tom)
  1103.     + modified 'makebindlist()' (in bind.c) to format using tabs rather
  1104.       than spaces.
  1105.  
  1106.     + many mods to map.c (and bind.c) to eliminate redundancy between it
  1107.       and bind.c
  1108.  
  1109.     + modified 'prc2kcod()' to look for only one prefix, but allow
  1110.       hexadecimal code in form 0xff.
  1111.  
  1112.     + corrected a recursion bug in 'install_map()' (file map.c)
  1113.  
  1114.     + modified ":map" (file map.c) to show show mappings if no values are
  1115.       given.
  1116.  
  1117.     + fix strict gcc warnings in x11.c, consolidated some initialization
  1118.       code and corrected font-ascent value (so 9x15 works properly).
  1119.  
  1120.     + added "on" and "off" to literals in 'stol()' (file eval.c) to use
  1121.       this in x11.c
  1122.  
  1123.     + modified 'killbuffer()' in buffer.c to recognize a repeat-count
  1124.       (e.g., allows ^X-k within the buffer list to remove a succession of
  1125.       buffers).
  1126.  
  1127.     + fix strict gcc warnings in ansi.c
  1128.  
  1129.     + make command-history record properly for bind-key and map commands
  1130.       (files bind.c and map.c).
  1131.  
  1132.     + modified 'engl2fnc()' (in bind.c) to allow unique abbreviation (so
  1133.       that scripts don't have to be spelled out), added "se" symbol to
  1134.       cmdtbl for vi-compatibility.
  1135.  
  1136.     + modified 'docmd()' (file exec.c) to allow leading ':' in scripts
  1137.       for vi-compatibility.
  1138.  
  1139.     + corrected logic in modes.c to (re)allow trailing whitespace on
  1140.       the end of set-commands.
  1141.  
  1142.     + merged files makmktbl.tbc and makvile.tbc into makefile.tbc
  1143.  
  1144.     + eliminated 'VIDEO *' arguments from 'updateline()' in file display.c
  1145.       because the 'row' argument already provides this information.
  1146.  
  1147.     + added 'offs2col()' to correct position of highlighting when
  1148.       confirming substitutions.
  1149.  
  1150. Changes for vile 3.54: (released Fri Jul 09, 1993)
  1151. (pgf)
  1152.     + will now call setvbuf instead of setbuffer if USG defined in the
  1153.       POSIX version of ttopen.  this to support SVR4 (well, solaris)
  1154.       (termio.c)
  1155.  
  1156.     + took out the more stringent prototype warnings (-Wstuff) from the
  1157.       gcc OPTFLAGS, since we don't pass them yet (someday, alistair).
  1158.       (makefile)
  1159.  
  1160.     + mode and variable symbol names generated by mktbls are now of the
  1161.       form "s_name__" instead of "s_name", to be more unique.  (there
  1162.       was a conflict with a (naturally named) typedef of signed char to
  1163.       "s_char".)  (mktbls.c)
  1164.  
  1165.     + upped the max number of screen columns for x11.c.  was 150, now is
  1166.       200.  reduced the max rows number from 200 to 100.  the screen
  1167.       buffers should be made re-allocatable, so we wouldn't eat the space
  1168.       unless necessary.  made the normal (tcap.c) maximums match these.
  1169.       (tcap.c x11.c)
  1170.  
  1171.     + applied Tuan Dang's fixes for my merging of his watcom and djgcc
  1172.       patches.  Thanks Tuan!  (makefile.wat, ibmpc.c, estruct.h, path.c,
  1173.       mktbls.c)
  1174.  
  1175.     + turn DOS mode on by default for DOS versions of vile. (main.c,
  1176.       vile.hlp)
  1177.  
  1178. Changes for vile 3.53:     (released Thu Jul 07, 1993)
  1179. (pgf)
  1180.     + stop core dump on file completion (":e fi<tab>") by making sure
  1181.       BFSIZES bit is cleared when building MyBuff
  1182.  
  1183.     + in rtfrmshell(), there was a "curwp->w_flag = WFHARD" statement,
  1184.       with a comment asking if it was needed.  in fact, it's wrong, so
  1185.       i took it out.  it was tromping other flags, like WFMODE, for that
  1186.       window only (spawn.c).
  1187.  
  1188.     + in update(), don't add nu_width to screencol if the buffer is empty,
  1189.       since there is no line number in that case. (display.c)
  1190.  
  1191.     + fixed bug when undoing the first insertion into an empty buffer.
  1192.       the value of dot was being restored to the inserted (and now gone)
  1193.       line.  (line.c)
  1194.  
  1195. Changes for vile 3.52:
  1196. (pgf)
  1197.     + added a couple of tweaks to tom's check-modtime changes -- prompts
  1198.       are not suppressed if you're writing the buffer out, and running
  1199.       a shell only checks visible buffers for modtime changes, rather
  1200.       than all buffers. (mostly file.c, estruct.h, random.c)
  1201.  
  1202.     + changed name of "timeout-value" to "timeoutlen", to match some
  1203.       versions of vi.  (modetbl, vile.hlp)
  1204.  
  1205.     + applied patches from Tuan DANG (dang@cogit.ign.fr) to support
  1206.       DJGCC v1.09 (display.c, estruct.h fileio.c ibmpc.c main.c mktbls.c
  1207.       modes.c path.c random.c spawn.c termio.c)
  1208.  
  1209.     + consolidated TURBO, WATCOM, MSC, ZTC, and GO32 under a new,
  1210.       presumptuous #define, called NEWDOSCC. (mostly same files as djgpp
  1211.       changes)
  1212.  
  1213.     + fixed calloc macro (estruct.h) in RAMSIZE ifdef
  1214.  
  1215.     + added map.c/map.obj source file for VMS (descrip.mms, vms_link.opt)
  1216.  
  1217.     + removed bogus dbgwrite in exec.c, where linespec returns a value
  1218.       for "toline" which can be null.
  1219.  
  1220. Changes for vile 3.51:
  1221. (pgf)
  1222.     + added a couple of tweaks to tom's check-modtime changes -- prompts
  1223.       are not suppressed if you're writing the buffer out, and running
  1224.       a shell only checks visible buffers for modtime changes, rather
  1225.       than all buffers.
  1226.  
  1227.     + added regexp metacharacter "index" in margin of vile.hlp.
  1228.  
  1229.     + renested some limit setting in scanner(), so I can understand it
  1230.       again. (search.c)
  1231.  
  1232.     + changed name of ABS macro to ABSM to avoid namespace conflict
  1233.       on OSF/1. (cmdtbl, exec.c estruct.h)
  1234.  
  1235.     + made :map to SPEC key-sequences work (map.c insert.c)
  1236.  
  1237.     + undo now preserves current column as well as row (undo.c estruct.h)
  1238.  
  1239.     + changed name of "naptime" to "timeout-value"  (main.c modetbl
  1240.       vile.hlp input.c)
  1241.  
  1242.     + added new variable $mode, which is the name of the user-mode we
  1243.       e're in: "command", "insert", "overwrite".  the value is set
  1244.       when we enter insertmode, and restored when we leave.  this lets
  1245.       macros invoked from within insert mode find out if they should
  1246.       enter insertmode.  (eval.c, modetbl, insert.c, proto.h, vile.hlp)
  1247.  
  1248.     + prc2kcod will now accept literal control chars, and also will
  1249.       accept hex specifications.  so now key-sequences can be specified
  1250.       as follows:        (bind.c map.c vile.hlp)
  1251.           an optional prefix:
  1252.             ^A    (one char)
  1253.             ^A-    (three chars)
  1254.             ^X    (one char)
  1255.             ^X-    (three chars)
  1256.  
  1257.         followed by an optional "function" prefix:
  1258.             FN-    (three chars)
  1259.             M-    (two chars)
  1260.             (these two are synonymous)
  1261.  
  1262.         followed by a character:
  1263.             C    (one char)
  1264.             ^C    (one char)
  1265.             ^C    (two chars)
  1266.             0xNN    (four chars)
  1267.             0XNN    (four chars)
  1268.             <tab>    (five chars)
  1269.             <sp>    (four chars)
  1270.  
  1271.  
  1272.     + removed old BEFORE ifdefs (input.c insert.c)
  1273.  
  1274.     + better error checking on parsing of key-sequences in exec'ed files.
  1275.       (bind.c)
  1276.  
  1277.     + if dobuf() encounters an error, it switches to that buffer.  but
  1278.       until now, this error propagated back through nested dobuf()'s,
  1279.       and we ended up looking at the 'source "filename"' line in the
  1280.       outermost buffer.  now we only switch on the most deeply nested
  1281.       dobuf().  also, we no longer set file buffers that we're executing
  1282.       to view-mode.  (exec.c)
  1283.  
  1284.     + if we get an error on startup, we skip right to the editing loop,
  1285.       so the user gets confronted with the error right away.  (main.c)
  1286.  
  1287.     + gave adjustmode a real return value -- used to always return TRUE.
  1288.       (modes.c)
  1289.  
  1290.     + when looping backwards backspacing, check if the input char was
  1291.       killc or wkillc before checking isbackspace(c), since otherwise
  1292.       if killc is DEL, we'll treat it as backspace first.  (this is
  1293.       because ^H and DEL are both assumed to be backspacers initially)
  1294.       (insert.c input.c)
  1295.  
  1296.     + implemented new universal mode, "naptime", which is the number of
  1297.       milliseconds to delay before accepting a lone ESC character,
  1298.       rather than as the start of a function key sequence.  also added
  1299.       boolean arg to catnap(), which controls whether detection of user
  1300.       input will abort the catnap delay.  the default for this mode is
  1301.       500 milliseconds.  the old value was 50, which was fine for fast
  1302.       local displays, but didn't work well for serial terminals or
  1303.       rlogin sessions.  (which surprises me somewhat -- 9600 baud
  1304.       translates to roughly 1 character per millisecond -- why is a
  1305.       delay of 50 ms not enough for the second character of a function
  1306.       key generated by a terminal?) (proto.h fences.c input.c random.c
  1307.       modetbl vile.hlp main.c)
  1308.  
  1309.     + applied patches for Watcom C/386, from Tuan DANG (dang@cogit.ign.fr).
  1310.       I haven't had a chance to try them yet. ( mktbls.c cmdtbl estruct.h
  1311.       dirstuff.h ibmpc.c main.c fileio.c random.c termio.c display.c
  1312.       glob.c npopen.c path.c proto.h spawn.c makefile)
  1313.  
  1314.     + renamed turbo makefiles, to be more similar to the watcom makefiles.
  1315.  
  1316.     + fixed insert-string to really insert instead of overwrite.
  1317.  
  1318. (tom (3.51))
  1319.     + added buffer-mode 'check-modtime' to check if the disk-file is newer
  1320.       than the buffer when reading, writing or popping a window (adapted
  1321.       from a patch by Randy Winney, modifies (files file.c, fileio.c,
  1322.       buffer.c, random.c, spawn.c).  Note that moving the cursor between
  1323.       buffers does not perform this check.
  1324.  
  1325.     + use macro 'for_each_line()' in some more places (files: buffer.c,
  1326.       globals.c, random.c, spawn.c, vmalloc.c).
  1327.  
  1328.     + use new function 'SetCurrentWindow()' in file window.c.
  1329.  
  1330.     + added checking in 'SetVarValue()' (file eval.c) to guard readonly
  1331.       buffers from modification.
  1332.  
  1333.     + added checks in file mode.c to prevent major-mode changes to scratch
  1334.       buffers (and corrected the settings of WFMODE in file modetbl).
  1335.  
  1336.     + tested/augmented RAMSIZE configuration option (files main.c,
  1337.       display.c), made a mode 'showram' to control it.
  1338.  
  1339.     + merged field that shows major-modes in the modeline (e.g.,
  1340.       "view-only"), and added "cmode" when it is active.
  1341.  
  1342.     + added buffer-flag BFSIZES; use it in 'bsizes()' to compute byte/line
  1343.       counts only when buffer has been changed.  Also, added function
  1344.       'add_line_at()' to merge file-reading logic which initializes the
  1345.       byte/line counts (files: buffer.c, file.c).
  1346.  
  1347.     + if dos-mode is set on a buffer, trim carriage-returns from files that
  1348.       are inserted into it (file file.c).
  1349.  
  1350.     + renamed macros in file buffer.c that test BUFFER.b_flags, added
  1351.       macros for setting/clearing these flags, moved the macros to
  1352.       estruct.h to use in files bind.c, buffer.c, file.c, history.c,
  1353.       modes.c, random.c, spawn.c, tags.c, undo.c.
  1354.  
  1355.     + corrected size shown for buffer-list within the buffer-list display
  1356.       (file buffer.c).
  1357.  
  1358.     + use window-colors for modelines rather than global values (file
  1359.       display.c).
  1360.  
  1361.     + disable ":p" command from within buffer-list display (oneliner.c)
  1362.  
  1363. Changes for vile 3.50:
  1364. (pgf)
  1365.     + finished (yeah, right) the changes for infinite undo. implemented
  1366.       mode to control how many changes are stored (called "undolimit").
  1367.       the modified bit (BFCHG) now gets reset if the right number of
  1368.       undos is done.  (estruct.h main.c modetbl undo.c buffer.c vile.hlp)
  1369.  
  1370.     + rearranged calls to copy_for/tag_for/toss_to_undo and chg_buff
  1371.       so that the BFCHG flag is unmodified before the first call to
  1372.       preundocleanup().  this gives undo the true state of BFCHG.
  1373.       (line.c region.c)
  1374.  
  1375. Changes for vile 3.49:
  1376. (pgf)
  1377.     + implemented infinite undo, on keys ^X-u (undo) and ^X-r (redo).
  1378.       probably affected location of cursor after some undo operations --
  1379.       don't if this will be significant or not -- i doubt we matched
  1380.       vi before in this regard anyway.  (undo.c, cmdtbl, buffer.c, proto.h
  1381.       estruct.h, vile.hlp)
  1382.  
  1383.     + use an explicit %s when printing lone filename, to protect against
  1384.       filenames with % in name. (display.c)  (eric krohn)
  1385.  
  1386.     + don't allow kbd_putc to print to last column of display, since if
  1387.       the terminal autowraps, this causes a scroll.  this should check
  1388.       the :am: capability, but we're at the wrong layer to do that, and
  1389.       it doesn't seem worth adding to the TERM struct to make that info
  1390.       available (unix-pc behavior pointed out by eric krohn).
  1391.  
  1392.     + added Otto Lind's initial :map implementation (map.c, main.c,
  1393.       cmdtbl, makefile, proto.h)  This is a good start, but has the
  1394.       following limitations:  1) no string to string maps.  only simple
  1395.       keysequences are mappable.  2) not integrated with the keyboard
  1396.       macro routines -- this would make sense, and allow for recursion
  1397.       to be detected more properly.  but the keyboard macros are pretty
  1398.       tied into the named registers, which are stored in KILLREGS,
  1399.       which doesn't seem right for the :map'ed things.  perhaps we could
  1400.       dispense with the KILLREGS, and replace them with tbufs.  then some
  1401.       small changes the layering of start/finish_kbm and kbm_started
  1402.       could allow the :map code to share those routines.
  1403.  
  1404.     + added alistair crooks' lint stuff and change for the NeXT. (proto.h,
  1405.       mktbls.c)
  1406.  
  1407. (tom)
  1408.     + modified file undo.c so that changes to scratch buffers can be
  1409.       undone.
  1410.  
  1411.     + modified 'imply_alt()' in file buffer.c so that the top/current line
  1412.       numbers are propagated into the alternate buffer.
  1413.  
  1414.     + changed environment variable 'directory' to 'cwd' so that 'directory'
  1415.       can be used for vi-compatible directory variable (used to control
  1416.       where the temp-file is written).
  1417.  
  1418.     + implemented environment variable 'directory' (files modetbl, eval.c)
  1419.       and used it to control temp-file location (npopen.c, tmp.c).  This is
  1420.       set by the environment variable TMP.
  1421.  
  1422.     + changed logic that opens/closes temp-file in tmp.c to use 'tempnam()'
  1423.       to derive the filename; added entrypoint 'tmp_cleanup()' to remove
  1424.       the temp-file on exit, and 'exit_program()' to file main.c to make a
  1425.       single exit-point from which to call 'tmp_cleanup()'.
  1426.  
  1427.     + Use macro 'ExitProgram()' to hide whether we call 'exit_program()' or
  1428.       'exit()' (files main.c, display.c, ibmpc.c, spawn.c, vmsvt.c, vt52.c,
  1429.       termio.c, termcap.c, file.c, window.c, x11.c).
  1430.  
  1431.     + modified 'mktbls.c' to generate definitions for 'nemode.h' in a
  1432.       form that allows modes to be conditionally compiled.
  1433.  
  1434.     + added a column to 'modetbl' to ifdef out modes that are not used.
  1435.  
  1436.     + made 'crypt', 'fcolor' and 'bcolor' modes ifdef-able (files main.c,
  1437.       modes.c, modetbl).
  1438.  
  1439.     + simplified 'promptpattern()' and 'expandp()' in file isearch.c
  1440.  
  1441.     + corrected USE_D_NAMLEN ifdef in 'expand_pattern()' (file glob.c)
  1442.  
  1443.     + corrected behavior when user inserts a newline into an empty buffer
  1444.       (file line.c).
  1445.  
  1446.     + moved environment variable definitions from cmdtbl to modetbl to
  1447.       ensure that name-completion table for modes+vars is updated in one
  1448.       place.  Sorted the environment variable names in modetbl and vile.hlp
  1449.  
  1450.     + include "nevars.h" within main.c to allow common name-completion
  1451.       table (without introducing lots of extra string-pointer variables).
  1452.  
  1453.     + modified mktbls.c to put the environment-variable names into the
  1454.       'all_modes[]' array in nemode.h (to support common name-completion).
  1455.  
  1456.     + modified 'listvars()' in file eval.c to optionally show all modes
  1457.       and environment variables in one list (if the user supplies a numeric
  1458.       argument before the "show-variables" command).
  1459.  
  1460.     + modified 'gtenv()' in file eval.c to recognize mode-names as well as
  1461.       environment names, and logic in file modes.c to recognize environment
  1462.       names.  Thus, for example, the commands
  1463.           ":setl dos" and
  1464.         ":setv $dos=true".
  1465.       are equivalent.
  1466.  
  1467.     + changed use of 'sprintf()' to 'lsprintf()' (files buffer.c, modes.c)
  1468.  
  1469.     + use macros 'FreeAndNull()' and 'FreeIfNeeded()' to simplify code
  1470.       (buffer.c, eval.c, file.c, filec.c, main.c, modes.c,
  1471.       npopen.c, oneliner.c, search.c, random.c, x11.c)
  1472.  
  1473.     + changed case-statements for EV-variables to if-then-else-if in
  1474.       file eval.c because VAX-C cannot handle constant-expression
  1475.       OFFSETOF as case-values.
  1476.  
  1477.     + added 'tempnam()' to file vms2unix.c (to support testing of
  1478.       mapped-data configuration).
  1479.  
  1480. Changes for vile 3.48:
  1481. (pgf)
  1482.     + added FILEC_PROMPT flag to mlreply_file call in writeregion, to
  1483.       make ^W file-writing operator work.
  1484.  
  1485.     + folded some long lines (opers.c filec.c file.c)
  1486. (tom)
  1487.     + corrections to make undo work properly with mapped-memory option
  1488.       (files buffer.c and tmp.c).
  1489.  
  1490.     + use symbol 'null_ptr' to tidy up references to '(LINE *)0'
  1491.       (files buffer.c fences.c line.c main.c undo.c)
  1492.  
  1493.     + changed LINE.l_size to SIZE_T (to make it lintable)
  1494.  
  1495.     + corrected "poison" code in 'lfree()' (file line.c)
  1496.  
  1497.     + added logic to finderr.c to handle lint output on apollo.
  1498.  
  1499.     + added logic to handle line truncation (files buffer.c, file.c,
  1500.       line.c, tmp.c)
  1501.  
  1502.     + added function 'l_region()' to file tmp.c; use this (with some
  1503.       reorganization) in files file.c, oneliner.c, region.c, word.c to
  1504.       track LINEPTR adjustments in REGION structs.  (Converted most of the
  1505.       calling procedures to single-return to clarify this).
  1506.  
  1507.     + moved options-logic in 'substreg1()' (file oneliner.c) down to make
  1508.       this simpler (and avoid unnecessary goto).  (This procedure has too
  1509.       much logic to convert to single-return).  Also fixed a place that
  1510.       should have used 'end_string()'.
  1511.  
  1512.     + used macro 'same_ptr()' to compare LINEPTR's directly (a bit more
  1513.       efficient).
  1514.  
  1515.     + implemented page-swapping logic in file tmp.c
  1516.  
  1517.     + modified ifdefs in files bind.c, eval.c, finderr.c to get rid of
  1518.       compiler warnings when SMALLER, REBIND and APROP ifdefs are turned
  1519.       off.
  1520.  
  1521.     + used 'memcpy()' and 'memset()' in files buffer.c, line.c to simplify
  1522.       loops copying text into LINE's.
  1523.  
  1524.     + modified interfaces of functions that may modify 'LINE *' pointers
  1525.       (or, equivalently, cause swapping of a LINE to a different address)
  1526.       to use LINEPTR arguments (for example, 'line_no()' can iterate over
  1527.       all lines, causing swapping).  Also modified functions (especially in
  1528.       files line.c and undo.c) to use LINEPTR variables where they call
  1529.       lower-level functions that may page-swapping.  Affects files
  1530.       buffer.c, display.c, exec.c, file.c, filec.c, input.c, line.c,
  1531.       oneliner.c, random.c, region.c, search.c, vmalloc.c, word.c
  1532.  
  1533.     + replaced call on 'lalloc()' in file exec.c with 'addline()' (only
  1534.       difference is that the latter also sets b_dot).
  1535.  
  1536.     + converted several functions in file undo.c to static (to simplify
  1537.       tinkering with LINE/LINEPTR tradeoffs).
  1538.  
  1539.     + modified calls on 'lalloc()' in file undo.c to use special codes for
  1540.       l_used member directly.
  1541.  
  1542.     + added options -Wconversion -Wstrict-prototypes -Wmissing-prototypes
  1543.       to gcc flags in makefile; addressed these warnings (except for
  1544.       'signal()' arguments, which cannot be fixed) on sunos.  Modified
  1545.       files bind.c, file.c, filec.c, fileio.c, glob.c, insert.c, line.c,
  1546.       path.c, random.c, region.c, spawn.c, tcap.c.
  1547.  
  1548.     + corrected ifdef in 'string_has_wildcards()' (file glob.c) for VMS.
  1549.  
  1550. Changes for vile 3.47:
  1551. (tom)
  1552.  
  1553.     (part a)
  1554.     + introduced 'l_ref()' and 'l_ptr()' functions, rippled-through changes
  1555.       to support mapped data (files basic.c buffer.c csrch.c display.c
  1556.       estruct.h eval.c exec.c fences.c file.c filec.c finderr.c globals.c
  1557.       history.c insert.c line.c oneliner.c path.c proto.h random.c region.c
  1558.       search.c spawn.c tags.c tmp.c undo.c window.c word.c)
  1559.  
  1560.     + added logic to file tmp.c to allocate LINE structs from a pool of
  1561.       pages (note that deallocation isn't done, nor is swapping to a
  1562.       tmp-file as yet).
  1563.  
  1564.     (part b)
  1565.     + added code to test return-value of 'glob()' in file eval.c
  1566.  
  1567.     + corrected 'get_recorded_char()' (file input.c) to reset 'buffer'
  1568.       variable after 'finish_kbm()' makes it obsolete.
  1569.  
  1570.     + provided more useful defaults for TERMCAP, IBMPC and COLOR
  1571.       definitions in file estruct.h
  1572.  
  1573.     + corrected value of MK in 'FreeBuffer()' (file buffer.c), which caused
  1574.       multiple frees of the same LINE struct.
  1575.  
  1576.     + supplied initialization for wp->w_dot.l and wp->w_line.l in
  1577.       'reframe()' (file display.c) to handle the case when vile is invoked
  1578.       with no filename parameters.
  1579.  
  1580. Changes for vile 3.46:
  1581. (pgf)
  1582.     + suppress attempts at reading a null file into the [vileinit]
  1583.       buffer (main.c)
  1584.  
  1585.     + don't require the d_namlen field in a DIRENT struct -- some systems
  1586.       don't have it, and most of those that do null terminate the name
  1587.       anyway.  (dirstuff.h, filec.c, glob.c, path.c)
  1588.  
  1589.     + changed compile flags for uts, on user suggestion (makefile)
  1590.  
  1591.     + in ffread(), after doing read(), do an fseek to sync up.  this
  1592.       keeps some stdio implementations from not bothering to seek back
  1593.       to the start in case we have to discard the read and resort to
  1594.       slowreadf() due to long lines. (fileio.c)
  1595.  
  1596.     + avoid realloc(ptr,0) when long lines are encountered in quickreadf()
  1597.       (file.c)
  1598.  
  1599.     + make M and L commands take account of too few lines in window (i.e.
  1600.       do the right thing when end of file is on screen). (basic.c)
  1601.  
  1602.     + even if the global dos-mode is on, empty (new) buffers should come
  1603.       up as non-dos.  (file.c)
  1604.  
  1605.     + fnc2engl() now tries to return a longer, meaningful name for a
  1606.       function (i.e. "exit" rather than "Q"). (bind.c)
  1607.  
  1608. (tom)
  1609.     + test-compiled VMALLOC, DEBUGM options on apollo.
  1610.  
  1611.     + introduced 'set_lforw()' and 'set_lback()' macros to use in mapped
  1612.       memory option.  Added stubs in new file 'tmp.c'.  Modified files
  1613.       buffer.c exec.c file.c filec.c line.c undo.c, verified mechanically.
  1614.  
  1615.     + added definition of LINEPTR and 'lsync()' to files estruct.h, proto.h
  1616.  
  1617.     + fixed a memory leak in 'glob()', and changed interface to
  1618.       'glob_free()' (files filec.c, glob.c, glob.h).
  1619.  
  1620.     + revised logic in ibmpc.c that sets screen resolution ($sres) to
  1621.       make it more table-driven.
  1622.  
  1623.     + corrected 'forwline()' in file basic.c (repeated movement down
  1624.       sometimes reset the cursor to column 1 unlike vi).
  1625.  
  1626.     + added prototypes to 'mktbls.c'.
  1627.  
  1628.     + modified file main.c so that if the standard input isn't a terminal
  1629.       then vile reads it into a buffer and reopens /dev/tty (unix only).
  1630.  
  1631.     + modified files main.c and epath.h to allow (for unix systems) vile
  1632.       to find vile.hlp even if vile isn't in the path.
  1633.  
  1634. Changes for vile 3.45:
  1635. (pgf)
  1636.     + got rid of LOOKTAGS mode, and all of its ifdefs (filec.c, main.c,
  1637.       modetbl, proto.h, tags.c)
  1638.  
  1639.     + got rid of NeWS ifdefs (basic.c, bind.c, buffer.c, edef.h,
  1640.       estruct.h, exec.c, file.c, input.c, isearch.c, main.c, modes.c,
  1641.       spawn.c, termio.c)
  1642.  
  1643.     + resolved vile.hlp modes documentation and modetbl (vile.hlp)
  1644.  
  1645.     + added missing mlreply call in goto-named-mark processing, to
  1646.       allow "goto-named-mark a" to be used in a command file. (basic.c,
  1647.       proto.h)
  1648.  
  1649.     + added man page (don't get excited -- it's short), and turbo makefiles
  1650.       vile.mak, mktbls.mak.  (makefile)
  1651.  
  1652.     + fix to ins/inschar/istring to correct for bad backspace limiting
  1653.       (insert.c)
  1654.  
  1655.     + fixed off-by-one bug for column count under X. (x11.c)
  1656.  
  1657.     + turned off typahead detection for X11.  updates were being held
  1658.       off incorrectly. (termio.c)  related change, possibly unnecessary:
  1659.       reordered initial mlforce() and initial update() in main, because
  1660.       xvile was not starting up properly.
  1661.  
  1662.     + no longer set _bspace bit in _chartypes[backspc], and isbackspace()
  1663.       macro tests backspc directly.  will make rebinding of backspace
  1664.       simpler. (estruct.h, termio.c)
  1665.  
  1666.     + some changes to set-terminal stuff -- took out the keys that can
  1667.       be rebound with bind-key, i.e. those that have effect only in
  1668.       command mode.  added help.  (bind.c, vile.hlp)
  1669.  
  1670.     + no longer strip the SPEC bit in ttgetc, so a meta key can be used
  1671.       to generate "function keys"  (termio.c, vile.hlp)
  1672.  
  1673.     + updated README
  1674.  
  1675. Changes for vile 3.45:
  1676. (tom)
  1677.  
  1678.     + more fixes for long/int complaints from TurboC (files tags.c spawn.c
  1679.       random.c main.c display.c bind.c).
  1680.  
  1681.     + added logic to fileio.c so that (MSDOS only) overwriting a file
  1682.       saves the old version renamed to ".bak" suffix.
  1683.  
  1684.     + simplified argument processing in file main.c; reduced size a little.
  1685.  
  1686.     + reorganized code that uses tungetc so that it isn't used as often.
  1687.       This also makes 'tpeekc()' obsolete.  Moved extern-defs for 'tungotc'
  1688.       to edef.h (files input.c, exec.c, globals.c, oneliner.c, termio.c).
  1689.  
  1690.     + modified 'setvar()' in eval.c to show warning message if attempt is
  1691.       made to modify a readonly variable, or if for some other
  1692.       reason an environment variable cannot be set.
  1693.  
  1694.     + modified 'ibmcres()' in ibmpc.c to allow user to reset using value of
  1695.       CDSENSE as argument.
  1696.  
  1697.     + corrected inequality-test in 'newscreensize()' (file display.c) that
  1698.       prevented user from correctly setting $sres back to VGA in IBMPC
  1699.       config.
  1700.  
  1701.     + renamed entrypoints in file crypt.c to 'ue_setkey()' and 'ue_crypt()'
  1702.       to avoid confusion with unix crypt(3) (files fileio.c, file.c
  1703.       crypt.c, main.c, cmdtbl).
  1704.  
  1705.     + corrected core dump when using encryption from command line by
  1706.       splitting out 'ue_makekey()' from 'ue_setkey()'; used this from
  1707.       'resetkey()' in file.c
  1708.  
  1709.     + corrected handling of -k (crypt option); added a global 'cryptkey'
  1710.       which is used to set the encryption key only in files listed as
  1711.       command arguments (files edef.h, main.c, buffer.c).
  1712.  
  1713.     + overwrite -k parameter value in main.c (for those systems where this
  1714.       has an effect, it changes the value shown in a "ps" command).
  1715.  
  1716.     + made 'quickreadf()' decrypt file.
  1717.  
  1718.     + corrected 'resetkey()' so that it doesn't automatically use crypt key
  1719.       for files that aren't the same as the buffer.
  1720.  
  1721.     + The prompt added to 'resetkey()' also required moving some calls on
  1722.       'ttclean()' (file.c).  Simplified some of the ttclean code using
  1723.       CleanToPipe and CleanAfterPipe macros.
  1724.  
  1725.     + corrected 'resetkey()' so that if no password is provided (at least
  1726.       for pipes), the operation will proceed properly (i.e., read/write
  1727.       without encryption).
  1728.  
  1729.     + modified 'modeline()' in display.c to show if the current buffer is
  1730.       encrypted.
  1731.  
  1732.     + made NAMEC and TESTC define to variables name_cmpl and test_cmpl,
  1733.       which can be modified at run-time (files estruct.h, edef.h).
  1734.  
  1735.     + added commands "set-terminal" and "show-terminal" to set/show special
  1736.       characters (including NAMEC/TESTC values!).  Put this into file
  1737.       bind.c (reusing pieces of 'bindkey()').
  1738.  
  1739.     + make '#' (special prefix-key) rebindable, like cntl_a-prefix.
  1740.  
  1741.     + make display-routines in bind.c show the actual characters to which
  1742.       CTLA and CTLX are bound (function 'kcod2str()').  Note that
  1743.       'prc2kcod()' still assumes that CTLA and CTLX are bound to control
  1744.       characters.
  1745.  
  1746.     + changed argument type of TERM.t_cres to 'char *' to allow consistent
  1747.       usage of variable 'sres[]' (files tcap.c, ibmpc.c, z_ibmpc.c).
  1748.  
  1749.     + changed values recognized by ibmpc.c for "$sres" to be the names
  1750.       that it returns (e.g., "VGA") and the number-of-lines (from main.c's
  1751.       arguments).
  1752.  
  1753.     + finished off 'npopen()' for MSDOS (allows write-pipes) and
  1754.       implemented 'inout_popen()'; used in file spawn.c for filter-region
  1755.       command.
  1756.  
  1757. Changes for vile 3.44: (pgf)
  1758.     + fixed indentation if openup used in cmode, with a single word on
  1759.       the current line -- indentation was coming from the _next_ line,
  1760.       instead (insert.c).
  1761.  
  1762.     + finderrbuf() now remembers its last argument (finderr.c)
  1763.  
  1764. Changes for vile 3.44:
  1765. (tom)
  1766.     + corrected file descrip.mms; the vms_link.opt file no longer applies
  1767.       to mktbls.exe; also fixed 'clobber' rule.
  1768.  
  1769.     + corrected file glob.c (don't treat '$' as a wildcard on vms).
  1770.  
  1771.     + correction: moved call on 'global_val_init()' before
  1772.       'expand_wild_args()', to make wildcard globbing work on vms and
  1773.       ms-dos (file main.c).
  1774.  
  1775.     + corrected logic of 'kbd_reply()'; last_eolchar was not being set
  1776.       properly when NAMEC wasn't space (file input.c).
  1777.  
  1778.     + modified 'kbd_engl_stat()' in file bind.c so that if NAMEC is not
  1779.       bound to space, then name-completion for :-commands is turned on.
  1780.  
  1781.     + added option KBD_NULLOK to 'kbd_reply()' and used it in function
  1782.       'kbd_engl_stat()' to re-allow commands to be empty (files bind.c,
  1783.       input.c, estruct.h), needed after decoupling NAMEC and space.
  1784.  
  1785.     + corrected 'slowreadf()' in file file.c so that dos-mode files are
  1786.       read properly.  (The code stripped CR's even when dos-mode wasn't
  1787.       set).
  1788.  
  1789.     + implemented 'npopen()' and 'npclose()' for MSDOS; used this to make
  1790.       MSDOS logic for ^X-!  the same as on UNIX (modified files fileio.c,
  1791.       npopen.c, spawn.c).
  1792.  
  1793.     + modified 'makename()' to yield essentially the same result for
  1794.       MSDOS as for UNIX (in file.c), because 'npopen()' works similarly.
  1795.  
  1796.     + added tests in 'ffropen()' and 'ffwopen()' to prevent accidentally
  1797.       opening a directory-file.
  1798.  
  1799.     + corrected handling of FIOFNF in 'readin()'; made this work on MSDOS
  1800.       as well as UNIX (files file.c, fileio.c, display.c).  The value of
  1801.       'errno' was not being saved to report in the error message.  Added
  1802.       'mlerror()' to display.c to encapsulate the error reporting better.
  1803.  
  1804.     + moved 'errno' declarations into 'estruct.h' (files display.c, file.c,
  1805.       npopen.c, termio.c).
  1806.  
  1807.     + added function 'set_febuff()' to encapsulate the 'febuff[]' and
  1808.       'newfebuff' variables; moved these to finderr.c (files file.c,
  1809.       finderr.c, spawn.c).
  1810.  
  1811.     + corrected test in 'filename()' (file.c) for ":f" command.
  1812.  
  1813.     + corrected test in filec.c for pre-existing file (don't prompt if it
  1814.       is a pipe-command).
  1815.  
  1816.     + corrected tests in filec.c for prompt for re-read (didn't look for
  1817.       abort-status).
  1818.  
  1819.     + test-compiled CRYPT, VMALLOC configuration flags on TurboC.  Modified
  1820.       files crypt.c, estruct.h, vmalloc.c
  1821.  
  1822.     + began addressing TurboC warnings for conversion between long/int.
  1823.  
  1824.     + deleted obsolete defines in file estruct.h (CLRMSG, CTRLZ).
  1825.  
  1826.     + added 'set_rdonly()' to encapsulate the places where an automatically
  1827.       created buffer is made read-only.  This makes them more consistent.
  1828.       Files: bind.c, exec.c, main.c, oneliner.c, random.c, spawn.c
  1829.  
  1830.     + modified 'update()' in file display.c so that '.' commands don't
  1831.       redisplay if VISMAC is configured (previously, only keyboard macro
  1832.       redisplay was suppressed).
  1833.  
  1834. Changes for vile 3.43:
  1835. (pgf)
  1836.     + changed NAMEC from SPACE to TAB (estruct.h).  changed eolchar arg
  1837.       passed to kbd_reply in kbd_engl_stat from NAMEC to ' ', to
  1838.       compensate.  added check against command term'ed with ' ' in
  1839.       execute_named_cmd() (exec.c).
  1840.  
  1841.     + added check for iswild() when scanning for wildcard chars in glob.c
  1842.  
  1843.     + allow nulls as well as newlines to separate filenames in glob-pipe
  1844.       output.
  1845.  
  1846.     + added finderrbuf() routine (command is "error-buffer" or "find-next-
  1847.       error-buffer-name"), to set the name of the buffer to scan for errors.
  1848.       (finderr.c, proto.h, cmdtbl, vile.hlp)
  1849.  
  1850.     + fixed pathname bug when scanning output that contains Entering/
  1851.       Leaving pairs.  We no longer just keep a pointer to where we
  1852.       found the directory name, but now malloc space for it.
  1853.  
  1854.     + horizontal scrolling moves by half screens by default (window.c,
  1855.       display.c)
  1856.  
  1857.     + added AIX to machines that need sys/ioctl.h (termio.c, display.c)
  1858.  
  1859.     + further fix to repeat counts and the '.' command, so that all cases
  1860.       ( 6dw , 3d2w , etc.) work.
  1861.  
  1862.     + support for letting a named register on a '.' command override
  1863.       what was originally typed:  "adw"b.  will put one word in register
  1864.       a and the nex in register b.  (input.c line.c exec.c)
  1865.  
  1866. (tom)
  1867.     + corrected define in dirstuff.h to make TurboC compile again.
  1868.  
  1869.     + corrected logic of 'makename()' in file.c for MS-DOS.
  1870.  
  1871.     + added type CMASK to correct use of _chartypes[] array on MS-DOS
  1872.       (e.g., in 'screen_string()' in input.c).
  1873.  
  1874.     + deleted VMS-DCL file 'vile.com', since this causes conflict on
  1875.       MS-DOS.
  1876.  
  1877.     + lowercased color names in file modes.c
  1878.  
  1879.     + modified ibmpc.c to get true white and yellow colors (had gray and
  1880.       brown).
  1881.  
  1882.     + modified files ibmpc.c and display.c to allow MS-DOS version to do
  1883.       scrolling.
  1884.  
  1885.     + removed unused assignments from file insert.c
  1886.  
  1887.     + substituted all l_fp references to lforw macro, l_bp references to
  1888.       lback macro, verified mechanically.
  1889.  
  1890.     + make special case in 'dotcmdplay()' to allow (like vi) the repeat
  1891.       count on '.' command to replace that on the replayed command.
  1892.  
  1893.     + modified logic of 'writereg()' to allow its call on 'imply_alt()' to
  1894.       correctly set the 'copy' parameter (only if a whole file is written).
  1895.  
  1896.     + introduced new function 'same_fname()' to correct places where
  1897.       matches between a filename and the buffer's filename broke (either
  1898.       because it was not in canonical form, or because VMS version numbers
  1899.       were not stripped).
  1900.  
  1901.     + modified fileio.c to read/write binary files on MS-DOS to avoid
  1902.       truncating files at ^Z.  This does not make ^M visible however.
  1903.  
  1904.     + ifdefd out contents of 'dot_replays_macro()' in input.c to avoid
  1905.       side-effects
  1906.  
  1907.     + corrected logic of 'tungetc()' in file input.c; this had broken
  1908.       replay of keyboard macro "iX<esc>/Y^MaZ<esc>".
  1909.  
  1910.     + split out 'expand_wild_args()' from main.c into a new file glob.c,
  1911.       which contains globbing code.  Moved 'glob()' from path.c to glob.c
  1912.       also.
  1913.  
  1914.     + moved function 'is_directory()' from filec.c to path.c; made it
  1915.       public.
  1916.  
  1917.     + added function 'no_memory()' to encapsulate the more common places
  1918.       that vile/msdos runs out of memory; use this in several places to
  1919.       simplify error reporting.
  1920.  
  1921.     + added universal-mode "history", to allow turning that function off,
  1922.       and instrumented history.c to automatically turn logging off if vile
  1923.       runs out of memory.  (It is annoying to get out-of-memory errors on
  1924.       _every_ command).
  1925.  
  1926.     + modified display.c to fill in the long space before program & version
  1927.       identifier for the scratch buffer (on the mode line).
  1928.  
  1929.     + added option to 'mlreply_file()' to allow expansion of wildcard to
  1930.       multiple files.  Use this in file.c (for ":e" and ":view" commands).
  1931.  
  1932.     + modified files descrip.mms and vms_link.opt because (with new module
  1933.       glob.c) the link-command line got too long.  Other mods to file
  1934.       descrip.mms to make file vile.com generated (to avoid leaving it
  1935.       around for ms-dos configuration), and the 'clean' and '.last' rules
  1936.       (to make them less noisy).
  1937.  
  1938.     + corrected 'ffronly()' in fileio.c; on VMS this caused some files to
  1939.       be touched.
  1940.  
  1941.     + implemented scrolling in file vmsvt.c
  1942.  
  1943.     + implemented 'glob' mode to control how wildcards are expanded
  1944.       (affects files main.c, modes.c, glob.c) and the corresponding piped
  1945.       commands for glob-mode.
  1946.  
  1947.     + added logic to 'makename()' to handle embedded blanks in filenames.
  1948.  
  1949. Changes for vile 3.42:
  1950. (pgf)
  1951.     + added routine tb_stuff() (tbuff.c), which is roughly the
  1952.       converse of tb_peek(), to allow simple replacement of a character
  1953.       in a tbuff.
  1954.  
  1955.     + used tb_stuff() to increment the buffer number when referencing
  1956.       the numbered buffers -- i.e. "1p becomes "2p in a '.' command.
  1957.       (input.c)
  1958.  
  1959.     + backed out change to 'get_recorded_char()' (input.c) that caused
  1960.       dd..."1P... to continue deleting lines after the P operation.
  1961.  
  1962.     + added horizontal scrolling mode, to cause whole screen to shift
  1963.       instead of just one line when cursor goes "off screen".  this
  1964.       mode ("set hs", or "set horizscroll" is now the default. (display.c,
  1965.       vile.hlp, main.c, modetbl, proto.h)
  1966.  
  1967.     + allow cursor to rest in last column, if line is just that long, to
  1968.       prevent extra horizontal scrolling. (display.c)
  1969.  
  1970.     + split up the ins() function, to provide an inschar() function that
  1971.       istring could use.  istring() now called by insstring() and
  1972.       overwstring(), which are bound to "insert-string" and new
  1973.       "overwrite-string" commands.  all this to allow "insert-string"
  1974.       to take advantage of autoindent, cmode, wordwrap, etc.  will
  1975.       need tweaks later when tty chars are rebindable (^U, ^W, etc.)
  1976.  
  1977.     + compiled with "-Wmissing-prototypes", which turned up a bunch of 'em.
  1978.       (proto.h)
  1979.  
  1980.     + some linux gcc cleanup, mostly just including some more headers
  1981.       (display.c file.c main.c)
  1982.  
  1983.     + ifdefed out the onamedcmd() function, and it's binding (cmdtbl,
  1984.       exec.c)
  1985.  
  1986.     + took out the extern declarations of getpwnam and getpwuid that i
  1987.       put in recently.  they seem to be causing more problems than they
  1988.       were fixing.  in general, providing prototypes for system routines
  1989.       is a real pain.  i wish there were an "ifnprototype" construct.
  1990.  
  1991. Changes for vile 3.41:
  1992. (tom)
  1993.     + ifdef ioctl.h for APOLLO (note: you shouldn't use '"'-form for system
  1994.       includes, since that could pick up files in the current directory,
  1995.       and also because it does weird things to the include-path).
  1996.  
  1997.     + moved code to support USE_LS_FOR_DIRS from filec.c to path.c, making
  1998.       it look like unix-style directory routines.  Added ifdef for
  1999.       OLD_STYLE_DIRS just in case...
  2000.  
  2001.     + modified 'slowreadf()' in file.c so that piped input scrolls from the
  2002.       bottom of the window, rather than the middle.
  2003.  
  2004. Changes for vile 3.40:
  2005. (pgf)
  2006.  
  2007.     + the makefile no longer supplies any -I options.  this will cause some
  2008.       machines to not find "ioctl.h" where it's in the sys subdirectory,
  2009.       but I just spent a day tracking a bug caused by picking up the wrong
  2010.       system headers (i needed the gcc "fixincludes", and they had moved).
  2011.  
  2012.     + now honor LINES and COLUMNS in getscreensize (display.c)
  2013.  
  2014.     + now handle searching multiple tags files specified in "set tags"
  2015.  
  2016.     + bugfix to fences.c, which fixes indentation when inserting '}'
  2017.  
  2018.     + added firstnonwhite() calls to godotplus, so we can publish it as
  2019.       "whole-lines" (files basic.c, cmdtbl).
  2020.  
  2021.     + added 'setjmp()' code to files main.c, input.c to handle ^C with
  2022.       BSD-style signals.
  2023.  
  2024.     + added define USE_LS_FOR_DIRS to files dirstuff.h and filec.c to
  2025.       accommodate systems w/o a 'readdir()' function.
  2026.  
  2027.     + corrected $pagewid (was returning length instead of width) in file
  2028.       eval.c
  2029.  
  2030.     + use lsprintf to form [Macro nn] names (file exec.c)
  2031.  
  2032. (tom)
  2033.     + corrected 'ffwopen()' in fileio.c so that write of current buffer on
  2034.       VMS works properly (forgot to strip version number).
  2035.  
  2036.     + made 'flook()' work properly for vms (file bind.c)
  2037.  
  2038.     + moved 'dname[]' table into file exec.c and 'cname[]' table into file
  2039.       modes.c; did this to get rid of 'comma' macro, which does not work as
  2040.       intended on Turbo-C (the comma got evaluated too soon).
  2041.  
  2042.     + to prevent redefinition error in Turbo-C, removed redundant includes
  2043.       for <stdio.h>, <string.h> and <signal.h> (already in file estruct.h)
  2044.       from the ".c" files: ansi.c at386.c basic.c bind.c buffer.c crypt.c
  2045.       dg10.c display.c eval.c exec.c file.c globals.c hp110.c hp150.c
  2046.       ibmpc.c input.c isearch.c line.c main.c modes.c npopen.c oneliner.c
  2047.       regexp.c region.c search.c spawn.c st520.c tcap.c termio.c tipc.c
  2048.       vmsvt.c vt52.c window.c word.c wordmov.c x11.c z309.c z_ibmpc.c
  2049.  
  2050.     + moved macro 'P' from file proto.h to estruct.h, adjusted definitions
  2051.       in file 'estruct.h' to allow use of 'P' macro in CMDFUNC definition.
  2052.       Added definition of type 'CmdFunc' for the actual pointer-type.
  2053.  
  2054.     + use P-macro for TERM struct definitions (and added TTscroll),
  2055.       modified files estruct.h and display.c
  2056.  
  2057.     + corrected logic of 'dot_replays_macro()' in file input.c (for the
  2058.       special case of macro "@w" followed by "dd" command, I noticed that
  2059.       '.' replayed both commands).
  2060.  
  2061.     + compiled with Turbo-C, turned on warning if function was called w/o a
  2062.       prototype.  Added prototypes (including those for static procedures)
  2063.       to get rid of these and other compiler warnings.  Doing this found an
  2064.       error in eval.c and one in history.c (files modified: bind.c buffer.c
  2065.       display.c eval.c exec.c fences.c file.c fileio.c history.c ibmpc.c
  2066.       input.c insert.c main.c mktbls.c modes.c npopen.c opers.c path.c
  2067.       random.c regexp.c region.c spawn.c tbuff.c window.c).
  2068.  
  2069.     + corrected MSDOS-specific pathname translation in files path.c and
  2070.       random.c
  2071.  
  2072.     + corrected d_namlen value supplied in readdir function for VMS (file
  2073.       vms2unix.c)
  2074.  
  2075.     + implemented first version of filename completion for VMS.  (Directory
  2076.       names are not completed; there are still some ambiguities between
  2077.       scratch buffer names and VMS directory paths).
  2078.  
  2079.     + added option KBD_UPPERC to input.c; use this to force prompts for VMS
  2080.       filenames to uppercase.
  2081.  
  2082.     + removed redundant declarations for 'getenv()'; it is already in file
  2083.       estruct.h
  2084.  
  2085.     + added new file 'vmspipe.c' which provides a piped-read facility
  2086.       'vms_rpipe()'.
  2087.  
  2088.     + modified file finderr.c to recognize lint output on SUNOS; also
  2089.       corrected it to ensure that sscanf doesn't scan past the string
  2090.       limits (no EOS was formerly on each line).
  2091.  
  2092.     + added/used new functions 'pathleaf()' and 'pathcat()' to file path.c
  2093.       to hide vms/unix pathname differences.
  2094.  
  2095. Changes for vile 3.39 (from Tom Dickey):
  2096.  
  2097.     + corrected error in 'get_recorded_char()' (file input.c) that caused
  2098.       command "ix^[j.j.j.j." to not repeat properly.
  2099.  
  2100.     + corrected prompt-string in 'ShellPrompt()' (file spawn.c)
  2101.  
  2102.     + corrected behavior of filename completion (file filec.c) so that
  2103.       internal names and shell names can have blanks in them.
  2104.  
  2105.     + provided a last-replay value for 'execfile()' in file exec.c (it was
  2106.       defaulting to the current buffer, which is wrong).
  2107.  
  2108.     + corrected pointer test in 'tb_sappend()', which was null in the
  2109.       special case of a ":w" command before any ":e" or other read.
  2110.  
  2111.     + simplified MSDOS-drive translation (untested) in file random.c to
  2112.       accommodate changes made for VMS in other files.
  2113.  
  2114.     + modified 'cd()' procedure in file random.c to chdir to home directory
  2115.       on systems that have one.
  2116.  
  2117.     The following are changes to support VMS:
  2118.  
  2119.     + added new files (shown in makefile and descrip.mms): dirstuff.h,
  2120.       vms2unix.c, vile.com
  2121.  
  2122.     + use new file 'dirstuff.h' for definitions in filec.c and path.c
  2123.  
  2124.     + corrected some dependencies in descrip.mms
  2125.  
  2126.     + corrected logic in 'imply_alt()' (file buffer.c) that lost the
  2127.       original filename argument (replaced it with the lengthen-path).
  2128.  
  2129.     + corrected logic in 'getfile()2' (file file.c) to account for the
  2130.       distinction between buffer-names and file-names.  Simplified
  2131.       'getfile()' and 'getfile2()' because of modifications to
  2132.       'shorten_path()' and 'lengthen_path()'.
  2133.  
  2134.     + corrected logic of 'ffread()' (file fileio.c); on VMS a single read
  2135.       does not necessarily read an entire file.
  2136.  
  2137.     + corrected definition of macro 'isready_c()' for VMS.
  2138.  
  2139.     + modified 'shorten_path()' (file path.c) to provide the "./" prefix
  2140.       that was added in files buffer.c and display.c; also absorbed the
  2141.       test for MSDOS device prefix (e.g., "c:") there.  This was needed to
  2142.       allow VMS port to show native pathnames.  The equivalent of "./" on
  2143.       VMS is "[]".
  2144.  
  2145.     + use VMS function 'fgetname()' and 'getname()' to determine the
  2146.       fully-resolved path in 3 cases: after writing a file, after reading a
  2147.       file, and in 'lengthen_path()' (files file.c and path.c).  This makes
  2148.       it know the current version number of each file.
  2149.  
  2150.     + modified 'makename()' (file file.c) to account for VMS pathnames.
  2151.       Note that DecShell names (which the C runtime library accepts as
  2152.       arguments to fopen, etc.) look much like unix filenames.
  2153.  
  2154.     + added new function 'is_internalname()' to file path.c; this serves
  2155.       the same purpose as the (now obsolete) macro isScratchName.  This
  2156.       makes a better check (to keep VMS paths distinct from scratch buffer
  2157.       names) than the macro.
  2158.  
  2159.     + deleted macro isScratchName from file estruct.h; changed macro
  2160.       isInternalName to use function 'is_internalname()'.  Adjusted other
  2161.       macros in estruct.h and display.c to make VMS port work properly.
  2162.  
  2163.     + added new function 'non_filename()' to file path.c; use this in files
  2164.       bind.c and random.c to encapsulate the program+version string.  Use
  2165.       'non_filename()' in 'is_internalname()'.
  2166.  
  2167.     + corrected logic of 'screen_string()' (file input.c) to handle the
  2168.       distinction between "[" and "]" used to delimit pathnames on VMS, and
  2169.       to indicate scratch-buffer names.
  2170.  
  2171.     + corrected wildcard, path and scratch-buffer characters for VMS (file
  2172.       main.c).
  2173.  
  2174.     + corrected/modified file path.c so that the functions therein support
  2175.       VMS filenames.  Added several new functions to do this.
  2176.  
  2177.     + corrected code for 'catnap()' (file random.c) for VMS.
  2178.  
  2179.     + corrected several 'exit()' arguments (file termio.c)
  2180.  
  2181.     + corrected VMS's ttgetc function (its interaction with 'typahead()'
  2182.       was wrong; also 'typahead()' was not really implemented (file
  2183.       termio.c).
  2184.  
  2185.     + ifdef'd out a redundant 'ttclean()' call (which caused the output on
  2186.       VMS to be closed more than once, which is really an error).
  2187.  
  2188.     + guard 'vtinit()' (file vmsvt.c) against t_mcol or t_mrow too small
  2189.  
  2190. Changes for vile 3.38:
  2191. (pgf)
  2192.     + cleaned up internal naming and help for alt-tabpos mode.
  2193.       alt-tabpos on implies emacs-style, and it's off by default
  2194.  
  2195. (tom)
  2196.     + corrected status-check in 'ffclose()' (in fileio.c) that generated
  2197.       spurious 'Error on close' message, visible when nothing was read from
  2198.       a pipe.  (Also eliminated redundant defs for 'npopen.c' in fileio.c
  2199.       and proto.h).
  2200.  
  2201.     + corrected place in 'globals.c' where (if the buffer was readonly),
  2202.       the '/' delimiter after an s-command was not eaten.
  2203.  
  2204.     + modified loop-limit in "show-registers" command to display the
  2205.       numbered registers.
  2206.  
  2207.     + corrected file fences.c, allowing C preprocessor lines to have
  2208.       leading whitespace before '#'.  The cursor may be on any character
  2209.       from the first column through the '#'.
  2210.  
  2211.     + rewrote procedure 'cpp_fence()' in file fences.c, allowing it to
  2212.       recognize "elif" keyword.  Added 'nextchar()' to file basic.c to
  2213.       support this.
  2214.  
  2215.     + modified procedure 'ShellPrompt()' in file spawn.c to eliminate the
  2216.       ": " before prompts for ^X-!.
  2217.  
  2218.     + corrected 'kbd_reply()' in file input.c to invoke 'tgetc()' directly
  2219.       when ^V is used to escape a character.
  2220.  
  2221.     + corrected 'kbd_kill_response()' in file input.c; ^W is not supposed
  2222.       to trim blanks before a word.
  2223.  
  2224.     + corrected 'update()' in file display.c; the VISMAC define does not
  2225.       apply to "." command.  This fix allows showmatch to work with "."
  2226.       command.  Also, in 'fmatch()' in file fences.c; test return-value of
  2227.       'update()' to avoid catnap when update fails.
  2228.  
  2229.     + corrected 'insert()' and 'insertbol()' in file insert.c; the cursor
  2230.       was not being advanced after repeated insertions like vi.
  2231.  
  2232.     + corrected file input.c so that it can handle a "." command within a
  2233.       keyboard macro.  The macro was "iA^[l2." (for testing).
  2234.  
  2235.     + modified file input.c (new procedure 'dot_replays_macro()' so that
  2236.       the "." command after defining or executing a keyboard macro causes
  2237.       the macro to be (re)invoked.
  2238.  
  2239.     + split 'kcod2prc()' in file bind.c into 2 parts; the new one (i.e.,
  2240.       'kcod2str()') is used to support 'dot_replays_macro()'.  Also use new
  2241.       function 'fnc2kcod()'.
  2242.  
  2243.     + added new function 'kbm_started()' to file input.c to get rid of then
  2244.       non-recursive variable 'kbdplayreg'.
  2245.  
  2246.     + save/restore "." repeat counts in 'start_kbm()' and 'finish_kbm()' so
  2247.       that repeat works properly for keyboard macros.
  2248.  
  2249. Changes for vile 3.37:
  2250. (pgf)
  2251.     + works on osf/1 alpha now, with hacks applied to termio.c and
  2252.       display.c
  2253. (tom)
  2254.     + added files 'descrip.mms' and 'vms_link.opt'; compiled on VAX/VMS
  2255.       (but did not make it run) (tom dickey)
  2256.  
  2257.     + pathname tracking fixes (calling shorten_path() correctly everywhere)
  2258.  
  2259. Changes for vile 3.36 (from Tom Dickey):
  2260.  
  2261.     + supplied initial value for dirc-mode
  2262.  
  2263.     + guarded 'mlreply_file()' against missing curbp->b_fname (for use in
  2264.       .vilerc startup).
  2265.  
  2266.     + corrected logic in 'kbd_reply()' (file input.c) that caused backspace
  2267.       to be treated as a command-delimiter.
  2268.  
  2269.     + corrected logic in 'kbd_reply()' (file input.c) that caused '/'
  2270.       character in complex substitutions to be eaten, e.g.,
  2271.         :g/pattern/s//newpattern/g
  2272.       broke after the 's'.
  2273.  
  2274.     + corrected calls (broke in 3.35) on 'mlreply_file()' from 'insfile()'
  2275.       and 'operwrite()' (mods to files estruct.h, filec.c, file.c and
  2276.       opers.c).  The ^R and ^W commands always prompt for name, rather than
  2277.       taking it from the screen.
  2278.  
  2279.     + corrected end-of-line logic in 'do_a_mode()' (file modes.c).  This
  2280.       had allowed history scrolling to display keywords that were separated
  2281.       by blanks; fixed this by testing for both space and "=" characters.
  2282.  
  2283.     + added calls to 'hst_glue()' in 'unqname()' and 'getfile2()' to add
  2284.       blank in command history before the responses these functions solicit
  2285.       from 'mlreply()'
  2286.  
  2287.     + added macro 'char2int()' to file estruct.h, use this in fileio.c and
  2288.       tbuff.c to hide byte-masking.
  2289.  
  2290.     + changed data in TBUFF to 'char' (unsigned char does not buy that much
  2291.       conciseness); absorbed macros 'tb_values()' and 'tb_length()' into
  2292.       file tbuff.c as functions.
  2293.  
  2294.     + corrected logic of 'tb_leaks()' (file tbuff.c); I had only exercised
  2295.       this at the end of execution.
  2296.  
  2297.     + removed unused define for TMPSTOP
  2298.  
  2299.     + recoded handling of keyboard macros in file input.c to use TBUFF
  2300.       structs (so there is no limit on length of keyboard macros).
  2301.  
  2302.     + modified 'execkreg()' to remove length-limit on macros there as well
  2303.       (file line.c)
  2304.  
  2305.     + modified 'execkreg()' to allow invoking registers 0-9 (file line.c)
  2306.  
  2307.     + modified files input.c and line.c so that "." and @-commands can be
  2308.       invoked from within a keyboard-macro (i.e., ^X-&).
  2309.  
  2310.     + modified files insert.c and input.c so that repeated "." command
  2311.       works properly for i,I,R commands (the cursor must appear at the end
  2312.       of the insertion).
  2313.  
  2314.     + modified so that ^Z (job suspension) works properly on apollo sr10.3
  2315.       (files termio.c and spawn.c).
  2316.  
  2317.     + modified 'ttgetc()' in file termio.c so that (for apollo) it reads in
  2318.       raw-mode.
  2319.  
  2320.     + added flag to 'tgetc()', allowing it to suppress the conversion of
  2321.       intrc to abortc (files basic.c csrch.c eval.c exec.c input.c
  2322.       insert.c).  This change also lets users quote ESC characters.
  2323.  
  2324.     + corrected unused args in 'globber()' (file globals.c)
  2325.  
  2326.     + corrected special case in use of 'canonpath()' on apollo (user could
  2327.       type in path beginning with "/", which was not getting "//" portion
  2328.       of pathname prepended.
  2329.  
  2330.     + renamed "vitabpos" mode to "alt-tabpos" mode, avoiding conflict with
  2331.       "view" mode.
  2332.  
  2333.     + added "implybuffer" (ib) mode to use in splitting out vi-style
  2334.       buffer-implication from 'autobuffer' mode (files modetbl and main.c).
  2335.  
  2336.     + added "samebangs" (sb) mode to allow the ^X-!!  and :!!  commands to
  2337.       be optionally the same.
  2338.  
  2339.     + Corrected logic of 'imply_alt()' so that it works with files read, as
  2340.       well as written (files buffer.c and file.c).
  2341.  
  2342.     + split out the pathname functions into file path.c
  2343.  
  2344.     + added function 'is_appendname()' to path.c to better encapsulate the
  2345.       isAppendToName macro's knowlege of the ">>" length (files path.c,
  2346.       filec.c, fileio.c, random.c).  Used this to make functions
  2347.       'canonpath()', 'lengthen_path()', 'shorten_path()' and
  2348.       'is_pathname()' work properly with ">>" prefix.
  2349.  
  2350.     + added code to 'path.c' to resolve "~" as user's home-directory.
  2351.  
  2352.     + corrected code in 'makebufflist()' that caused b_bfname member to
  2353.       be modified (file buffer.c).
  2354.  
  2355.     + moved MSDOS drive-logic from 'ch_fname()' into 'lengthen_path()'
  2356.       (files random.c and path.c)
  2357.  
  2358.     + added procedure 'copy_val()' to modes.c to encapsulate the make-local
  2359.       and make-global macros.  This fixes a case in which memory could be
  2360.       freed more than once: if the user had done 'setl' commands for two
  2361.       different buffers.
  2362.  
  2363.     + made variables 'doslines' and 'unixlines' local to the procedures
  2364.       'slowreadf()' 'readin()' in file.c; initialized these so that
  2365.       successive reads of a set of files will treat the dos/unix line
  2366.       counts separately.
  2367.  
  2368.     + added command "set-dos-mode" to force the current buffer to be
  2369.       in DOS-mode (trimming CR's).
  2370.  
  2371. Changes for vile 3.35 (from Tom Dickey):
  2372.  
  2373.     + addressed compiler warnings from gcc 1.36 on apollo sr10.3.  (I know
  2374.       it is old, but it gives useful warnings).  This required some minor
  2375.       adjustments to defines/includes in files estruct.h, proto.h, main.c,
  2376.       fileio.c, npopen.c, random.c to accommodate order-of-definition
  2377.       problems in stdio.h and signal.h
  2378.  
  2379.     + tested with gcc 1.40 on sunos 4.1.1
  2380.  
  2381.     + tested compiling with SMALLER=1; fixes to files eval.c, input.c,
  2382.       mktbls.c, npopen.c, proto.h, random.c (On my machine, this only cuts
  2383.       about 10% from the binary).
  2384.  
  2385.     + added EOS at mismatch-point in 'fill_partial()' in file bind.c, fixes
  2386.       bug that caused incorrect display after repeated name completion and
  2387.       query operations.
  2388.  
  2389.     + guarded 'kbd_complete()' against embedded nulls in its buf-argument,
  2390.       by testing for nulls before completion logic in file input.c
  2391.  
  2392.     + added a flag 'kbd_expand' to make calls on 'kbd_putc()' via
  2393.       'mlforce()' and related functions show tabs as a space.  This
  2394.       modifies files bind.c, edef.h, display.c to fix a problem I
  2395.       introduced in 3.32
  2396.  
  2397.     + use 'kbd_expand' flag in file input.c to fix non-displaying ^M; other
  2398.       fixes include quoting and backslash fixes, as well as correction to
  2399.       wkillc handling.
  2400.  
  2401.     + modified finderr.c to make the embedded tabs as "\t" digraphs, so
  2402.       they are visible.  Added pattern to use with apollo C compiler.
  2403.  
  2404.     + corrected logic in 'updpos()' (file display.c) so that vile displays
  2405.       cursor location just-like-vi for tabs and control characters.
  2406.  
  2407.     + made 'wordcount()' code (file word.c) work properly.
  2408.  
  2409.     + corrected 'join()' (file word.c) so that blanks are not inserted when
  2410.       joining after a space, or joining a blank line.  Also (like 'vi'), if
  2411.       there is trailing whitespace on the first line, don't modify it.
  2412.  
  2413.     + corrected flags for join-lines in file cmdtbl so that the region-
  2414.       oriented code can work.
  2415.  
  2416.     + made join-lines work with regions (files opers.c, word.c).
  2417.  
  2418.     + restored GLOBOK flag for join-lines-til (regions work now).
  2419.  
  2420.     + interchanged order of calls on 'toss_to_undo()' and 'lremove()' in
  2421.       'ldelnewline()', since this was causing incorrect cursor placement
  2422.       after an undo.  (The particular case arose in the rewritten
  2423.       join-lines, when joining a blank line to a non-blank line).
  2424.  
  2425.     + modified 'edithistory()' in file history.c to ifdef out the ESC code
  2426.       (with new symbol KSH_HISTORY), merge the loops to use 'escaped' flag
  2427.       to avoid redundant logic, and pick up control chars (e.g., ^N and ^P)
  2428.       for scrolling.  This also modified files input.c and exec.c
  2429.  
  2430.     + corrected logic in history.c (from 3.34) that uses the function
  2431.       'WillExtend()' to modify/macroize !-commands.  The code did not
  2432.       provide for the case in which the user would modify the text after
  2433.       scrolling to it.
  2434.  
  2435.     + corrected call on 'hst_flush()' in file pipecmd.c (it was not called
  2436.       if the pipe-command failed).
  2437.  
  2438.     + revised 'tgetc()' in file input.c to make it use a single return
  2439.       point (simplifies testing and debugging).
  2440.  
  2441.     + corrected file modes.c so that user can abort from a set command.
  2442.  
  2443.     + deleted code for unused global 'lineinput' (files bind.c, input.c,
  2444.       edef.h).
  2445.  
  2446.     + renamed ifdef for LAZINESS to (global mode) TAGSLOOK, added an entry
  2447.       to modetbl for "looktags" to test/update this code.  Note that this
  2448.       is turned off by commenting out the "LookTags" line in modetbl.  This
  2449.       affects also files main.c, file.c modes.c and tags.c
  2450.  
  2451.     + added file 'filec.c' to perform filename completion.  Moved code that
  2452.       was ifdef'd LAZINESS there, and recoded so that it stores paths
  2453.       normally (not reversed!).
  2454.  
  2455.     + created function 'mlreply_file()' in filec.c, used this to
  2456.       consolidate prompting for filenames in file.c (Note that now all
  2457.       filename prompts can get data from the screen).
  2458.  
  2459.     + made most of the calls on 'mlreply_file()' default to the current
  2460.       filename; this is simpler than the last name given to the command.
  2461.  
  2462.     + moved check for writing view-only buffer from 'filewrite()' as new
  2463.       local function 'writable()', before calls on 'writereg()' This
  2464.       affects 'filewrite()', 'filesave()', 'imdying()' and 'writeregion()'
  2465.       implicitly.
  2466.  
  2467.     + use 'mlreply_file()' in 'execfile()' (file exec.c)
  2468.  
  2469.     + use 'mlreply_file()' in 'operwrite()' (file opers.c)
  2470.  
  2471.     + added 'no_such_file()' to file.c; use this in 'execfile()' so that
  2472.       ":source" will report an error if the file is not found.
  2473.  
  2474.     + created function 'mkreply_dir()' modeled after 'mlreply_file()' in
  2475.       filec.c, used this to allow pathname completion in 'cd()' in random.c
  2476.  
  2477.     + added mode "dirc" to file modetbl, to support directory name
  2478.       completion.
  2479.  
  2480.     + added l_number to LINE struct, b_bytecount to BUFFER struct (file
  2481.       estruct.h) to use in caches for # of bytes and lines displays.
  2482.  
  2483.     + added macro 'for_each_line' to file estruct.h
  2484.  
  2485.     + added procedure 'bsizes()' to buffer.c to compute values for l_number
  2486.       and b_numchars, b_numlines values.  Will later get this to cache
  2487.       results to speed up 'line_no()' and related code.
  2488.  
  2489.     + corrected column-splitting in file modes.c (error in 3.34 changes)
  2490.       which caused dos-mode to not be shown.
  2491.  
  2492.     + corrected flag in 'modetbl' for dos-mode: this makes dos-mode show in
  2493.       the status-line.
  2494.  
  2495.     + added new entrypoints to tbuff.c: tb_copy, tb_scopy, tb_bappend
  2496.  
  2497.     + merged code in 'spawn1()' and 'pipecmd()' (file spawn.c) so that
  2498.       !-commands and !!-commands work consistently.
  2499.  
  2500. Changes for vile 3.34 (from Tom Dickey):
  2501.  
  2502.     + modified mktbls.c to use 3rd column of modetbl (window-flags).  Moved
  2503.       window-flag defines in estruct.h to allow their use in nemode.h
  2504.  
  2505.     + in modes.c, moved the code that updates window hints-flags from the
  2506.       'adjustmode()' to 'adjvalueset()' procedure so that it can use the
  2507.       new window-flags entry in nemode.h
  2508.  
  2509.     + modified mktbls.c (and estruct.h, edef.h) to support global modes.
  2510.  
  2511.     + added to modes.c: 'new_regexval()', 'free_regexval()', and
  2512.       'free_val()'.  Use these in main.c and modes.c to simplify
  2513.       leak-testing.
  2514.  
  2515.     + added to estruct.h defines to use in testing memory leaks using both
  2516.       dbmalloc as well as apollo-specific traces.
  2517.  
  2518.     + added to main.c ifdef for NO_LEAKS; used this in testing for
  2519.       permanent memory leaks (freeing data also finds specific types of
  2520.       allocator corruption).  Added test-code for this purpose to:
  2521.       buffer.c, display.c, line.c, regexp.c, tbuff.c, window.c
  2522.  
  2523.     + plugged memory-leak in 'getfile()' in file.c by splitting it after
  2524.       the temporary-buffer allocation, making tbp a static value, and
  2525.       deleting the line that set the tbp.b_fname pointer to null.
  2526.  
  2527.     + revised the value-checking in 'adjvalset()' (file modes.c) so that
  2528.       unnecessary changes are ignored.
  2529.  
  2530.     + further modified file modes.c so that typing ' ' (except after string
  2531.       or pattern values) will continue the prompting for further set-modes,
  2532.       as in noninteractive use.
  2533.  
  2534.     + put the TTputc for '\r' back into 'kbd_putc()'; omitted this when
  2535.       taking code for 'mlmsg()' from display.c
  2536.  
  2537.     + added new function 'GetEnv()' to eval.c to guard against
  2538.       null-return from 'getenv()'.
  2539.  
  2540.     + added new command (to file line.c) "show-registers" to show the
  2541.       contents of kill-buffers and registers.
  2542.  
  2543.     + added new module 'history.c'.  This implements up/down scrolling in
  2544.       an invisible buffer "[History]", which logs all :-commands.
  2545.  
  2546.     + coded-around apollo sr10.3 optimizer-bug in 'execkreg()':
  2547.         kbdend = &kp->d_chunk[i];
  2548.       resulted in kbdend == kp->d_chunk.
  2549.  
  2550.     + moved autobuffer and c-suffixes modes to global-table.  Deleted 'cwd'
  2551.       mode.
  2552.  
  2553.     + modified mktbls.c so that each table will be sorted by name (not by
  2554.       type&name).  Modified modes.c to take advantage of this and display
  2555.       the modes sorted in columns (more like 'vi'), except for long strings
  2556.       (which are deferred to the bottom of the display, still).
  2557.  
  2558.     + make modes.c show the actual color name in addition to the index.
  2559.  
  2560.     + rewrote 'kbd_string()' to interface it with 'edithistory()'.  Split
  2561.       out entrypoint 'kbd_reply()' to support integration of history with
  2562.       'namedcmd()'.
  2563.  
  2564.     + redefined 'kcod2key()' in terms of N_chars; added macro 'isspecial()'
  2565.       to estruct.h
  2566.  
  2567.     + revised 'kbd_engl_stat()' and 'namedcmd()' to use the 'kbd_reply()'
  2568.       entrypoint so that user can scroll through history of any portion of
  2569.       commands.
  2570.  
  2571.     + modified 'search.c' to log history for '/' and '?' commands.
  2572.  
  2573.     + modified x11.c to use memcpy rather than bcopy (for consistency).
  2574.  
  2575.     + made x11.c compile properly on apollo sr10.3 (there is a conflict
  2576.       between prototypes in <string.h> and <strings.h>).
  2577.  
  2578. Changes for vile 3.33:
  2579.  
  2580.         * many: cleanup for gcc-2.3's -Wall warnings
  2581.  
  2582.         * bind.c: added new function, insertion_cmd(), which returns char
  2583.     that gives us simple insert mode.  used in x11.c and input.c, for
  2584.     pasting and for insert-mode arrow keys
  2585.  
  2586.         * estruct.h: don't redefine "const" on linux
  2587.  
  2588.         * makefile: added aix warnings, changed name of ENV to ENVIR, due
  2589.     to name conflict with linux make
  2590.  
  2591.         * random.c: add include of sys/select.h for AIX
  2592.  
  2593.         * x11.c: added code to support arrow keys and function keys from
  2594.     Phil Rubini
  2595.  
  2596. Changes for vile 3.32 (from Tom Dickey):
  2597.  
  2598.     * modified estruct.h, proto.h and display.c to compile vile on HP/Apollo
  2599.       SR10.2 (CC 6.7).  Added new definitions ANSI_PROTOS and ANSI_VARARGS
  2600.       to simplify this.
  2601.  
  2602.     * modified 'mktbls.c' to produce nemode.h; use these definitions
  2603.       to replace buffer/window mode definitions in estruct.h and edef.h
  2604.       (note that this obsoletes symbol MAX_STRING_W_VALUE, reordered
  2605.       window int-modes).  Further modified 'mktbls.c' to only create
  2606.       ".h" files for the cases where it has data (so that I can split
  2607.       modetbl off from cmdtbl, avoiding unnecessary recompiles).
  2608.  
  2609.     * supplied an ifdef (at least for APOLLO!) in termio.c so that ^C
  2610.       and ^U work properly.
  2611.  
  2612.     * added buffer-mode 'wrapmargin' to file insert.c (which overrides
  2613.       wrapwords iff it is set to nonzero).
  2614.  
  2615.     * added new module 'tbuff.c' to manage dynamic buffers in places
  2616.       where local static buffers exist now.
  2617.  
  2618.     * modified 'ins()' in insert.c so that it reallocates 'insbuff[]',
  2619.       allowing arbitrarily-large re-inserts.
  2620.  
  2621.     * modified 'input.c' to dynamically allocate 'tmpcmd' and 'dotcmd'
  2622.       buffers.  This allows arbitrarily-large commands to be repeated
  2623.       with '.'.
  2624.  
  2625.     * guard 'lengthen_path()' in file.c against shell/pipe/internal names.
  2626.  
  2627.     * added variable "$shell" (files cmdtbl and eval.c) to override
  2628.       environment-variable "SHELL" in pipe-commands.
  2629.  
  2630.     * made 'show-vars' (file eval.c) show leading '$' or '%' to be
  2631.       consistent with the way the user must type them.
  2632.  
  2633.     * suppress 'show-vars' (file eval.c) ERROR values (these correspond to
  2634.       unimplemented variables)
  2635.  
  2636.     * corrected error in nextbuffer/swbuffer (file buffer.c) that allowed
  2637.       vile to crash if "set noautobuffer" was specified in .vilerc
  2638.  
  2639.     * corrected display in 'show-vars' (file eval.c) of "$kill" (reference
  2640.       to volatile data).
  2641.  
  2642.     * made new function 'kbd_complete()' (file bind.c) to allow keyboard
  2643.       completion in tables other than NTAB.
  2644.  
  2645.     * modified logic in new function 'kbd_complete()' to show permissible
  2646.       completions in response to '?'.
  2647.  
  2648.     * consolidated logic in exec.c, display.c, bind.c, input.c with new
  2649.       procedures 'kbd_putc()', 'kbd_puts()', 'kbd_erase()', 'kbd_alarm()'
  2650.       These hide random use of 'ttcol'.
  2651.  
  2652.     * make 'kbd_engl_stat()' (file bind.c) recognize word-delete character.
  2653.  
  2654.     * eliminated redundant unget/get (files bind.c, exec.c) in the interface
  2655.       of 'kbd_engl_stat()'; this caused an infinite loop in the call from
  2656.       'namedcmd()'.
  2657.  
  2658.     * modified bug-test in 'updpos()' (file display.c); I had a process hang
  2659.       in that loop for some reason.
  2660.  
  2661.     * collapsed expand/dobackslashes args of 'kbd_string' (file input.c)
  2662.       into one mask.
  2663.  
  2664.     * modified 'mktbls.c' further to produce table 'all_modes[]', to use
  2665.       this for name-completion of mode.
  2666.  
  2667.     * modified 'mktbls.c' to recognize color-types so I could get rid of
  2668.       upper/lower case kludge in modes.c
  2669.  
  2670.     * modified 'modes.c' to use color-types.  The interactive behavior now
  2671.       uses 'kbd_string()' to split the input at the '=' mark (if given).
  2672.  
  2673.     * added option-flag KBD_LOWERC to 'kbd_string()' (file input.c) so that
  2674.       things that are forced to lowercase will be shown in that way on
  2675.       input.
  2676.  
  2677.     * modified 'token()' (file exec.c) to handle the 'eolchar' for
  2678.       non-interactive calls on 'kbd_string()'.
  2679.  
  2680.     - modified 'eval.c' to recognize '=' as a separator between
  2681.       variable-name and value, as in 'modes.c'.
  2682.  
  2683.     - modified 'eval.c' to perform name-completion for environment
  2684.       variables (i.e., those beginning with '$').
  2685.  
  2686.     - modified 'modes.c' to accept vi-style multiple assignments in a ":set"
  2687.       command (this works non-interactively).
  2688.  
  2689.     - corrected 'imply_alt()' in buffer.c; ensure that the fname-argument is
  2690.       non-null.  If called via 'filterregion()', it will be null.
  2691.  
  2692. Changes in 3.31:  (Tom Dickey)
  2693.  
  2694.     * corrected test in 'find_alt()', which caused the %/# toggle to work
  2695.       incorrectly in noautobuffer mode.
  2696.  
  2697.     * updatelistbuffers after 'cd' command
  2698.  
  2699.     * added 'chg_buff()' & 'unchg_buff()' to encapsulate logic to update
  2700.       buffer-list after buffers are modified.  The function 'lchange()'
  2701.       is replaced by 'chg_buff()'.
  2702.  
  2703.     * modified 'histbuffer' to toggle according to 'find_alt()'
  2704.  
  2705.     * make the filename/buffer/number change for 'killbuffer' apply to
  2706.       'usebuffer()'
  2707.  
  2708.     * corrected handling of repeat-count in 'C' command.
  2709.  
  2710.     * updated vile.hlp
  2711.  
  2712.     * revised 'mktbls.c':
  2713.  
  2714.         * filter out redundant ifdef's
  2715.         * tab-align data items for readability
  2716.         * modify 'nefunc.h' to use prototypes rather than K&R style
  2717.           definition, also split the extern-definitions from the
  2718.           data items for readability.
  2719.         * make procedures static, linted
  2720.         * modified so that 'evar.h' definitions are automatically
  2721.           generated, so that "show-variables" can show a sorted
  2722.           list of variables.  The new filename is "nevars.h".
  2723.  
  2724.     * corrected window refresh flag for 'U' (lineundo) command.
  2725.  
  2726.     * added an apollo-specific code in 'imdying()' to generate a walkback
  2727.       for debugging.
  2728.  
  2729.     * corrected an error in 'zotwp()': reference to data that had been
  2730.       deleted.
  2731.  
  2732.     * corrected an error in 'onlywind()': it did not delink window-pointer
  2733.       after freeing it.
  2734.  
  2735.     * noticed that references to 'dfoutfn' weren't reentrant:  I did a
  2736.       ":show-var" from the buffer-list and got only part of the heading.
  2737.       Reorganized display.c to ensure that it is reentrant by using a
  2738.       local copy of 'dfoutfn'.  Note that I didn't add 'dfoutfn' as an
  2739.       argument to 'dofmt()' to avoid complications with varargs.
  2740.  
  2741.     * corrected 'dfputli()': it didn't do hexadecimal.
  2742.  
  2743.     * corrected 'updateline()': it sometimes failed to highlight the ends
  2744.       of the mode-line.
  2745.  
  2746.     * corrected (my last change) to 'vtset()' so that "^J" is shown in
  2747.       list-mode.
  2748.  
  2749.     * moved 'writeall()' from main.c to buffer.c; it belonged there, and
  2750.       I used local macros for simplifying it.
  2751.  
  2752.     * remove SIGHUP handler before normal call on 'exit()' to avoid
  2753.       vile-died messages when running it in an xterm.
  2754.  
  2755.     * corrected VMS definition of exit codes; added def of BAD-macro.
  2756.       modified main.c, display.c, window.c accordingly.
  2757.  
  2758. Changes in 3.30, mostly from Tom Dickey:
  2759.  
  2760. This is lots of changes, mostly in buffer.c:
  2761.  
  2762.     * lint-clean: buffer.c
  2763.  
  2764.     * linted also: file.c, modes.c (though I left size_t alone for now).
  2765.  
  2766.     * added "list-vars" & "show-vars" to show the current variables
  2767.  
  2768.     * modified 'killbuffer' so I could add binding ^X-k to point to
  2769.       a buffer-name in the buffer-list and kill it.
  2770.  
  2771.     * also modified 'killbuffer' to recognize filename if buffer-name is
  2772.       not found, also buffer-number.
  2773.  
  2774.     * modify buffer.c so that the number shown by '_' and '*' is consistent
  2775.  
  2776.     * fixed ^X-o and ^X-O so they update buffer-list, as well as some
  2777.       other places I missed before.
  2778.  
  2779.     * make some functions static (where they are really private), because
  2780.       my per-module lint library got too large.  (I believe there are
  2781.       too many externals).  In modes.c, this involved reordering, since
  2782.       my practice is not to have forward-refs on static functions, to
  2783.       make this work with some awful compilers.  This meant that I
  2784.       deleted lines from 'proto.h'.
  2785.  
  2786.     * introduced new macro 'isreturn()', used this in correction in
  2787.       'histbuff()'.  I used it in one bug fix & also where I could find
  2788.       explicit compare for \r, \n.
  2789.  
  2790.     * added mode 'autobuffer':
  2791.  
  2792.         * the default is 'autobuffer' (the vile lru buffering)
  2793.         * curbp no longer is necessarily equal to bheadp
  2794.         * added members b_created, b_last_used, b_relink to support
  2795.           the autobuffer/noautobuffer mode.
  2796.         * if "noautobuffer" is set, ":rewind" and ":n" apply only
  2797.           to the original command-line files.
  2798.  
  2799.     * added macros SCRTCH_LEFT, SCRTCH_RIGHT, ScratchName, IsInternalName
  2800.       to encapsulate use of '[' in names.
  2801.  
  2802.     * added macros SHPIPE_LEFT, isShellOrPipe to encapsulate use of '!' in
  2803.       names.
  2804.  
  2805.     * added function is_pathname to encapsulate tests for pathnames
  2806.       beginning with '.'.  This fixes the display of ".vilerc" from the current
  2807.       directory as "./.vilerc".
  2808.  
  2809.     * added new char-types _scrtch and _shpipe to support killbuffer from
  2810.       screen.  Use these types in new macro 'screen_to_bname()' which uses
  2811.       modification of 'screen_string()'.  Used 'screen_to_bname()' to
  2812.       make ^X-e and ^X-k "correctly" parse the bname, fname columns from
  2813.       buffer-list.
  2814.  
  2815.     * fixed the error you mentioned in modeline (the position of col-80 mark
  2816.       taking into account sideways and number modes).
  2817.  
  2818.     * supplied a missing TTflush in input.c
  2819.  
  2820.     * modified 'makebufflist()' to show only the flags actually used in the
  2821.       footnote.
  2822.  
  2823.     * modified 'makebufflist()' to show '%' and '#' by the corresponding
  2824.       buffer/filename.
  2825.  
  2826.     * added macros 'for_each_buffer()' and 'for_each_window()' to simplify
  2827.       code as well as to keep visible references to bheadp & wheadp
  2828.       confined to buffer.c and window.c respectively.
  2829.  
  2830.     * added/used macro SIZEOF
  2831.  
  2832. -------------------------------------------------------------------------------
  2833.  
  2834. Changes in 3.29:
  2835. -----------------
  2836.  
  2837. (fixes supplied by tom dickey, eric krohn, and willem kasdorp)
  2838.  
  2839. buffer.c: changes for keeping the buffer list more up to date when
  2840.     on screen
  2841. fences.c: allow match of fence that is first char. in buffer
  2842. file.c: avoid inf. loop when choosing unique name for buffers that have names
  2843.     containing "x" in the NBUFN-1 position and allow ":e!" with no file
  2844.     to default to current file
  2845. globals.c: implemented 'v' command
  2846. isearch.c, line.c, display.c: ifdef of some unused code
  2847. main.c: added .C, .i to cmode suffixes, for C++ and cpp output files
  2848. makefile, install target: test for presence of vile in destdir before
  2849.     trying to move it to ovile
  2850. oneliner.c: don't allow pregion to be used if the plines buffer is current,
  2851.     and set the WINDOW list mode, not the BUFFER list mode, so :l works
  2852.     again, and fix for s/.//g bug
  2853. regexp.c: fixes for interaction of BOL and \s etc.
  2854. spawn.c: lint cleanup  mostly casting strcXX() to void.
  2855. tcap.c: hack to supply CS or SR for scrolling region control, missing
  2856.     from some xterms
  2857. termio.c: added missing fflush in two of the ttclean() routines
  2858. word.c: fix for counts on 'J' command
  2859.  
  2860. ------------------------------------------
  2861.  
  2862. The rest of the changes lister here are grouped only roughly, and represent
  2863. the delta of version 3.28 from vile version three.  -pgf Dec 30 1992
  2864.  
  2865. ------------------------------------------------------
  2866.  
  2867. VI COMPLIANCE:
  2868. ===============
  2869.  
  2870. - made ^N, ^P, and ^T do exactly what they do in vi.  (next line,
  2871.     previous-line, and tag-pop) Use ^X-o to switch windows, and ^X-2 to
  2872.     split them.
  2873.  
  2874. - ANSI style arrow keys now work from either command or insert mode.  Any
  2875.     ANSI function key of the form ESC [ c can be used as a command
  2876.     key -- the binding is FN-c
  2877.  
  2878. - the '#' key may now be used to force the following character to be treated
  2879.     as a function key.  Thus #1 is now equivalent to FN-1.
  2880.  
  2881. - some modes/values have changed names: aindent is now autoindent, swrap is
  2882.     now wrapscan, exact is now noignorecase, and they all have the vi
  2883.     shorthands (e.g.  tabstop is the same as ts, ic is the same as
  2884.     ignorecase).
  2885.  
  2886. - the "paragraphs" and "sections" values are now implemented, but as
  2887.     regular expressions -- they look pretty ugly, but I think they
  2888.     do what vi does.
  2889.  
  2890. - the sentence motions ')' and '(' now work.  they may not do exactly what
  2891.     vi does, but they're close.  they're controlled by regular
  2892.     expressions that find the ends of sentences -- then they move
  2893.     forward to the start of the next one.  The regular expressions are
  2894.     set in the new "sentences" value setting.
  2895.  
  2896. - "showmatch" mode now works, and momentarily shows the previous matching '('
  2897.     or '{'.
  2898.  
  2899. - "magic" mode, or rather "nomagic" mode, now works more like vi:  special
  2900.     characters are still available by escaping them in nomagic mode.
  2901.  
  2902. - there is a new mode, settable as "set terse" and "set noterse", which will
  2903.     suppress some of the extra messages that vile prints, reducing
  2904.     traffic for slow terminals.
  2905.  
  2906. - the '%' command now scans forward for a fence character if you're not on
  2907.     one to begin with (thanks to Dave Lemke).  I also added '^X-%', which
  2908.     scans backward instead.
  2909.  
  2910. - the ":&" command now works, and repeats the last ":s" or '^X-s'
  2911.     substitution.  it re-uses trailing p and l options, which vi does
  2912.     not.
  2913.  
  2914. - the '&' now works, and repeats the last ":s" or '^X-s' substitution.
  2915.  
  2916. - replacement sub-expressions work (\( and \), \1, etc.), as do \U \L \u \l
  2917.  
  2918. - there is a new operator, '^A-&', which is similar to '&' but acts on a
  2919.     region.  I expect that if you want it, you'll probably rebind it to
  2920.     something else (like '&') since typing it is awkward, to say the least.
  2921.  
  2922. - ^W and ^U are now both read from the tty settings, and they work in both
  2923.     insert mode and on the : line.  There is a "backspacelimit" setting
  2924.     that controls whether these (and regular backspacing (^H or DEL)
  2925.     will backspace past the insert point in insert mode.
  2926.  
  2927. - The '@' command can now be used to execute the contents of a named register,
  2928.     as if it were entered at the keyboard.  Thus @k executes register k.
  2929.  
  2930. - The "keyboard macro" obtained with ^X-( and ^X-) can be saved into a named
  2931.     register with the ^X-^ command.  This lets you record a keyboard
  2932.     macro and save it for use with the new '@' command.
  2933.  
  2934. - And, along to further complement the '@' command, it is possible to pre-load
  2935.     the named registers with the "load-register" command.  In a .vilerc
  2936.     you can say:
  2937.         use-register a load-register ihello^[
  2938.     (where ^[ is really an ESC entered with ^V-ESC), and then from
  2939.     within vile you can execute '@a', and the word "hello" will be
  2940.     inserted.
  2941.  
  2942. - the H, M, and L commands are now absolute motions
  2943.  
  2944. - insert mode now takes a repeat count, so '80i=ESC' inserts 80 '=' chars
  2945.  
  2946. - two new functions, to make normal motions more vi compliant --
  2947.     forward-character-to-eol and backward-character-to-bol, which won't
  2948.     move past the boundaries of the current line.
  2949.  
  2950. - you can no longer backspace from the beginning of a line to the end of
  2951.     the previous.  (rebind 'h' and '^h' from "backward-character-to-bol"
  2952.     to "backward-character"
  2953.  
  2954. - a motion caused by an undo is considered absolute, and the "last dot"
  2955.     mark is reset.
  2956.  
  2957. - added 'vi +/searchstring file.c' invocation syntax
  2958.  
  2959. - you can now specify a count to the ~ command.
  2960.  
  2961. - backslashes now have a protective effect on the : line -- they guard
  2962.     against expansion of #, %, :, and \.
  2963.  
  2964. - a lone ":f" without filename now gives same info as ^G
  2965.  
  2966. - 'x', 's', 'r' will no longer delete a line if used on an empty line.
  2967.  
  2968. - after a ":e!" command, the buffer name changes to match the filename, as
  2969.     if this were a new file read.  It used to just suck a new file into
  2970.     an old buffer, and the names didn't match.
  2971.  
  2972. - there is now a "taglength" setting, and the name of the tags file is in
  2973.     the "tags" setting.
  2974.  
  2975. - the "cd" and "pwd" commands now work
  2976.  
  2977. - shiftwidth has been implemented, so ^T, ^D, '<', and '>' all do pretty
  2978.     much what they do in vi
  2979.  
  2980. - there is a separate c-shiftwidth, used when in cmode, much as c-tabstop
  2981.     replaces tabstop when in cmode.
  2982.  
  2983. - ": args" is now similar in spirit to the vi command of that name
  2984.  
  2985.  
  2986. MISCELLANEOUS
  2987. ===============
  2988.  
  2989. - reading files in general is _much_ faster, unless the file contains lines
  2990.     longer than 255 characters, in which case things slow down again.
  2991.  
  2992. - regular expressions are more powerful and much, much faster than they
  2993.     were.  vile now uses Henry Spencer's regexp code.  This has the
  2994.     side effect of making '\|' a new metacharacter, for alternation
  2995.     of expressions.  '\+' and '\?' are also new, and stand for "one
  2996.     or more" and "zero or one" occurrences.  they can be used from
  2997.     the I-search commands as well.
  2998.  
  2999. - in addition, \< and \> find beginnings and ends of words, and \w, \s,
  3000.     and \d find "word" characters, "space" characters, and digits.
  3001.     \W, \S, and \D find the converse
  3002.  
  3003. - related to the above change, replacement metacharacters now work, so you
  3004.     can use '&' and '\1' through '\9' in the replacement string, and
  3005.     you'll get the right thing.
  3006.  
  3007. - Dave Lemke contributed code to support vile under X windows -- including
  3008.     support for cutting/pasting, etc.  Thanks Dave!
  3009.  
  3010. - the '%' command will now find matching #if/#else/#endif sets.
  3011.  
  3012. - the '%' command will now find matching C comment sets.  Yes, it does
  3013.     the (non-)nesting correctly.
  3014.  
  3015. - tabstops can now be set to any value, and there is a separate value for
  3016.     tabstops in C mode.  (c-tabstop)
  3017.  
  3018. - there is now some support for horizontal scrolling, using ^X-^R and ^X-^L
  3019.  
  3020. - the ! filter command for running text through an external filter now
  3021.     works
  3022.  
  3023. - quite a bit of code cleanup, at least I think so -- it has ported pretty
  3024.     easily to a R6000, linux, 386bsd, Sony NeWS, NeXT, and the UNIXPC.
  3025.     it's close to lint-free, and Saber has very few problems with the
  3026.     code.  it'll now use prototypes if __STDC__ is defined, and it
  3027.     passes gcc -Wall -Wshadow with no warnings, if you ignore implicit
  3028.     declarations of system calls and lib routines.  the code should now
  3029.     be more portable, to various compilers and systems.  there are new
  3030.     targets in the makefile to make building on various platforms
  3031.     easier.  the makefile even supports microsoft C.
  3032.  
  3033. - the code now builds and runs under DOS, using (at least) Microsoft C 6.0.
  3034.     Peter Ruczynski has done a great job porting vile to DOS -- he
  3035.     calls that version "pcvile".  He has used the Zortech compiler in
  3036.     the past -- I didn't try to break that, but you never know.
  3037.     NOTE THAT THE DOS CODE IS KNOWN TO BE MUCH BUGGIER THAN THE UNIX CODE!
  3038.  
  3039. - quite a few bug fixes, including all (I think) of those reported by users
  3040.  
  3041. - the "last dot" mark, accessed with the names ' and ` doesn't get reset
  3042.     needlessly as often -- that is, if an absolute motion results in no
  3043.     move (e.g.  a failed search or tags operation, or an undo) then the
  3044.     "last dot" mark is unchanged.
  3045.  
  3046. - the "source" ("execfile") command now does globbing on the file being run
  3047.     -- be sure to put it in quotes, as in :source "$HOME/.vilestuff"
  3048.  
  3049. - entab, detab, and line-trim are now all operators (^A-tab, ^A-space, and
  3050.     ^A-t)
  3051.  
  3052. - "make install" installs to /usr/local/bin or $HOME/bin, whichever is
  3053.     writable
  3054.  
  3055. - the english names of functions, particularly new ones, have been
  3056.     "rationalized", hopefully making it easier to remember their names.
  3057.  
  3058. - if you invoke a substitute command with ^X-s, it will always act globally
  3059.     across lines.  (i.e.  it behaves like "s/s1/s2/g", not like
  3060.     "s/s1/s2/")
  3061.  
  3062. - a QUIT signal will no longer cause core dump unless built with DEBUG on
  3063.  
  3064. - the display optimizes scrolling if possible when the window scroll
  3065.     commands ^E and ^Y are used.
  3066.  
  3067. - values/modes have been reworked.  Some are now attached to buffers, some
  3068.     to windows.  By default, all values use the global settings of
  3069.     those values, and will track changes to the global settings.  If a
  3070.     local setting is specified, it breaks the link between the local
  3071.     and global value, and the local value will no longer track the
  3072.     global value.  ":set all" is now more informative.
  3073.  
  3074. - the "set list" value is now attached to a window, not a buffer, so a
  3075.     single buffer can be displayed in two windows, "list"ed in one but
  3076.     not the other.
  3077.  
  3078. - reading from other processes into a buffer is now _much_ faster
  3079.  
  3080. - it is no longer legal to write out the contents of a buffer that has view
  3081.     mode set.
  3082.  
  3083. - the format region command (^A-f) now restarts with each fresh paragraph,
  3084.     so you can format an entire file at once, without collapsing it all
  3085.     into a single paragraph.  It also knows a little bit about C and
  3086.     shell comments, so you can now reformat blocks of commentary text.
  3087.     (There can't be any non-commentary stuff in front of the comments.)
  3088.  
  3089. - the position of the cursor within a window (the framing) is now preserved
  3090.     while the window if "off-screen" -- it no longer reframes when made
  3091.     visible again.
  3092.  
  3093. - there is now a mode indicator on the modeline: I for insert, O for
  3094.     overwrite, and R for replace-char.
  3095.  
  3096. - a line starting with '#' won't shift-right if the buffer is in C mode.
  3097.  
  3098. - :s/s1/s2/5 now works, to change the 5th occurrence on a line
  3099.  
  3100. - there are new commands to write all buffers: :ww is a synonym for
  3101.     "write-changed-buffers", and :wwq is now a synonym for
  3102.     "write-changed-buffers-and-quit"
  3103.  
  3104. - it is now legal to "kill-buffer" a displayed buffer
  3105.  
  3106. - there are new variables, $word, $pathname, and $identifier, which return
  3107.     the appropriate type of string from the cursor's location
  3108.  
  3109. - all of the variables, and the functions and directives of the extension
  3110.     language have been documented, and most have been tried, if not
  3111.     tested
  3112.  
  3113. - two new functions: &rd and &wr, return whether a file is readable or writable
  3114.  
  3115. - a new mode, "tabinsert", has been created to fill the needs of the
  3116.     "I hate tabs" camp.
  3117.  
  3118. - filenames are now put into canonical form -- this keeps "junk", "./junk",
  3119.     "./somedir/../junk" from appearing as different files to the editor.
  3120.  
  3121. - there is a new mode, "tagsrelative", which, when set, causes filenames
  3122.     looked up via tags to have the directory name of the tags file
  3123.     prepended to them before being accessed.  This allows one to cd into
  3124.     a build tree from within the editor, to facilitate a grep or a local
  3125.     build, and have tags lookups continue to work.
  3126.  
  3127. - the find-next-error code now honors the "Entering/Leaving directory"
  3128.     messages that GNU make (and others?) puts out.
  3129.  
  3130. - job control now works right
  3131.  
  3132. IMPLEMENTORS NOTES:
  3133. ===================
  3134.  
  3135. - internally, most pointers into the buffer, consisting of a LINE * and an
  3136.     int offset are now represented with a MARK structure -- in the
  3137.     nineties, it's time to start using structure assignment.
  3138.  
  3139. - the set of values that are frequently handed about between buffers and
  3140.     windows, or windows and their "children" are now grouped into
  3141.     B_TRAITS and W_TRAITS structures, for easier bookkeeping.  There
  3142.     are lots of macros to hide the added data structure depth.
  3143.  
  3144. - if you add a new setting that should be inherited by and selectable
  3145.     on a per-buffer or per-window basis, add it to the W_VALUES or
  3146.     B_VALUES structs.  Otherwise, if its just a global value, like the
  3147.     X font, make it a variable.  I intend to merge the setting of
  3148.     variables in with the other values one of these days.
  3149.  
  3150. - there is now a generic printf facility built in, which is layered under
  3151.     mlwrite() for the message line, bprintf() to print into a buffer,
  3152.     and lsprintf() to print into a string
  3153.  
  3154. - LINE structures can now have NULL l_text pointers -- empty lines don't
  3155.     have memory associated with them (except for the LINE struct
  3156.     itself)
  3157.  
  3158. - line text is now "block malloc"ed -- now for most files there is are two
  3159.     mallocs and a single read, no copies.  previously there were two
  3160.     mallocs per line, and two copies (stdio's and ours).  This change
  3161.     implies that LINE structures and their text should not be moved
  3162.     between buffers -- the space they occupy may have come from the big
  3163.     chunks attached to the buffer structure, and not from the malloc
  3164.     pool directly.  So lfree() and lalloc() now take a buffer pointer
  3165.     argument.
  3166.  
  3167. - there is "line poisoning" code, in line.c, which trashes the contents of
  3168.     freed lines and LINE structs, to make it easier to find bad usage.
  3169.  
  3170. - do_fl_region() is a convenient wrapper for writing operator commands that
  3171.     work on full lines -- there isn't yet a similar wrapper for partial
  3172.     line operators.
  3173.  
  3174. - use mlwrite() for informative messages that terse mode will suppress,
  3175.     mlforce() for messages that _must_ be seen, and mlprompt() for
  3176.     messages that need a response from the user unless they're in a
  3177.     command file.
  3178.  
  3179.