Change-Log-8 for VILE
Changes for vile 9.0 (released Thu Nov 15, 1999)

 (tom) 991115 (c)
        + various changes to comments (patch by Ryan Murray).

 (tom) 991111 (b)
        + revert 8.3s change that modified inout_popen() to convert pathname
          to backslashes on DOS, etc., since it too easily confuses commands
          that have genuine slashes (reported by Ed Henderson).
        + modify check for curses/termcap library to try linking tgetstr(),
          to work around broken linker on FreeBSD, but still detect properly
          HPUX curses library that has termcap functions.
        + remove pointers to defunct mirrors (reported by Clark Morgan).
        + remove duplicate description in vile.hlp of vile-crypt; the manpage
          covers this topic.
        + use new configure macro CF_ADD_CFLAGS to make configure check for
          headers (which uses only $CPPFLAGS) work with X_CFLAGS computed by
          autoconf's AC_PATH_XTRA.
        + correct ifdef's for sys/select.h to use USE_SYS_SELECT_H, which takes
          into account the configure check for fd_set from 8.3n (reported by
          Jens Schleusener).
        + use newer CF_TYPE_FD_SET configure test, from xterm which checks for
          Xpoll.h which may conflict with sys/select.h
        + use newer CF_X_ATHENA configure test, from xterm which checks for
          nonstandard locations of that library on HPUX.
        + add configure test to see if -lcrypt is needed in $LIBS to link
          crypt() function (reported by Paul Fox).

 (tom) 991109 (a)
        + correct special case of 'n' command on an empty line at the end of
          a buffer for a pattern that matches zero characters, e.g., ".*",
          "^" or "$" (reported by Kevin Buettner).
        + modify internal regular expression data for ranges that include the
          backslash character so the backslash is escaped, compensating for
          a change in 6.2a to handle "\\>" pattern.
        + use function XDisplayString() to obtain the actual display name,
          needed to make xvile's "New" menu entry direct new sessions to the
          proper display.
        + correct a divide-by-zero when computing percentage for ^G command,
          from 8.3l changes for $position-format (reported by Clark Morgan).
        + ensure that symbols for EXIT_SUCCESS and EXIT_FAILURE are used where
          they apply in the filter programs.
        + add fflush and fclose at the end of filter programs to ensure that
          the filtered file is written, even on systems whose exit() function
          does not do this properly (for Dr Luis Mandel <>).
        + correct documentation of $line variable (reported by George Eccles).
        + add grep commands for dos and win32 to vileinit.rc
        + add RPM spec to release_warnings in
        + combine calls for getenv("HOME") into new function home_dir(), to use
          in logic for -I option, making that work properly for Cygwin
          environment, where $HOME normally is not the same as the "~"

Changes for vile 8.4 (released Sun Nov 7, 1999)

 (tom) 991107 (z)
        + change copyright notice to distribute vile using GPL.
        + update RPM spec based on package by Tim Powers <>,
          add xvile.wmconfig, vile.wmconfig and use xpm icons.
        + workaround for problem introduced in 8.3r, resetting 'vile_is_busy'
          flag after each command in main loop().  Otherwise, perl scripts
          that set this flag via working(0) without restoring it would disable
        + add -I option, which directs vile to source vileinit.rc, and if the
          user has no startup file, to make a simple startup file which sources
          vileinit.rc (request by Peter Williams).
        + install a default menu file for xvile (.vilemenu) in the data
        + add vileinit.rc, which adds various useful macros and key bindings
          to the other initialization files, as an example.
        + minor fixes for vilefilt.l and makefile.l
        + correct value computed for $pathlist-separator, supply trailing null.
        + add $bflags variable, to simplify checks for scratch buffers.
        + add to install rules for xvile.
        + reinstate/complete $xshell logic, making it detach the subprocess if
          waitpid() is available (reported by J.  Chris Coppick - see 971015).
        + implement showmatch for winvile (patch by Clark Morgan).
        + more fixes for OPT_CACHE_VCOL, to handle two special cases: showmatch,
          which temporarily moves the cursor without necessarily updating
          the sideways value, and a control character split across the right
        + minor fixes to make vile build/work with --disable-extensions
        + correct redundant unget when parsing ":%&g" command that would leave
          'g' repeated in prompt (reported by Mark Crosland

 (tom) 991030 (y)
        + correct logic for OPT_CACHE_VCOL which accounts for the starting
          point when it may be a nonprinting character, i.e., rendered as
          multiple columns.
        + fix an error in BeOS version of catnap, exposed by change for SCO;
          the code did not handle a zero delay time while watching for input.
        > patches by Clark Morgan:
        + modify ntwinio.c so popup menu's check-marks match those in the
          system menu.
        + modify the label of the popup menu "Menu" selection, remove trailing
          "..." because this cmd does not invoke a dialog box.
        + update doc/w32modes.doc to cover Windows 98

 (tom) 991019 (x)
        + minor fixes for OPT_CACHE_VCOL, to take into account list and number
        + fix a typo in manpage.rc that let empty responses pass by.
        + save/restore token's column when processing tags (patch by Ed
        + change tttypahead() to use catnap() in preference to ioctl(FIONREAD),
          since SCO OpenServer's FIONREAD can be used only for sockets (says
          Bela Lubkin), while select and poll are a little more flexible.  This
          makes cursor keys work with the terminfo version.
        + make entering/leaving check in finderr.c faster by checking only the
          regular expressions that contain the %V (verb) token.
        + minor fixes to no-leak code in modes.c
        + fix memory leak from not freeing macro parameters (bind.c)
        > patch by Clark Morgan, for winvile cursor/selection code:
        + a left mouse button click in the editor's text window clears the
          current selection (a la notepad and word).
        + don't start a selection until the cursor actually moves at least 1
          char.  This change helps prevent a window selection with left mouse
          button from also being interpreted as "start new selection", thus
          wiping out the current contents of the unnamed register.
        + turn off cursor prior to copying to clipboard via right mouse button.
        + turn off cursor prior to pasting with middle mouse button.
        + these changes appear to now prevent the editor from dropping stray
          cursor glyphs in the text windows (although the editor will still
          occasionally leave cursor glyphs in the message window due, perhaps,
          to race conditions between the GDI and the editor's event loop).
        + a couple of minor fixes for shrinking/enlarging a window via a left
          mouse button drag of the mode line.

 (tom) 991010 (w)
        + add syntax filter for Python scripts, and associated pymode.
        + correct bug in ^X-^, which did not copy special characters such as
          arrow keys.
        + correct bug introduced in rewrite of ^X-( and ^X-) command for 8.3,
          which left ^X-) on the end of the recorded text (reported by George
          Eccles, analysis by Paul Fox).
        + add $kbd-macro variable to show the contents of the keyboard macro.
        + install perl modules as data, not scripts (patch by Ryan Murray).
        + minor fixes with EXTERN_CONST definition to allow building xvile and
          vile with g++ on Linux.
        + remove unused/obsolete code for dot-replays-macro in input.c
        + modify write_message() in perl.xs to erase the message line if the
          message is empty, e.g., in the end of
        + correct handling of leading blanks for '#' comments in xs-filt.c
        + add VAREV to special case handling of terminfo/termcap no_color_video.
        + disallow execution of '<' register, i.e., by "@<".
        > patches by Clark Morgan:
        + $cfgopts now shows whether a Unix-hosted editor uses TERMCAP or
          TERMINFO screen DB.
        + directory lookup via CDPATH enabled on all hosts (previously only
          supported on UNIX), but only tested on VMS, Unix, and Win32 (don't
          have access to DOS, OS/2, BEOS).
        + documented win32 double/triple click feature.
        + added $cdpath, which is the editor's copy of the external CDPATH
          environment variable.  This state variable is read/write.
        + The components of $CDPATH are glob'd before use, which means that
          specifying things like:
                export CDPATH="~/srcdir:~/blddir" # quotes prevent tilde expn
              Win32 (using a unix clone of the Bourne shell):
                export CDPATH=c:/pro*/dev*/vc;e:/cm/projects
          will work.

 (tom) 991004 (v)
        + remove the VT52-style fallback_arrows[] entry, from 8.3u, since it is
          too easy to confuse it with type-ahead (reported by Clark Morgan).
        + change testing order in configure script for 'const', to build on
          HP-UX (reported by Michael Finken <>).
        + make functions attributeregion() attribute_cntl_a_sequences() and
          attribute_from_filter() interruptible.
        + correct limits of ^X-Q using goto-char function; it was not clearing
          the last line since the region-shape is set to EXACT unless
        + merge clear-attributes-til with attribute-normal-til.
        + fix (partly) the lack of syntax highlighting when editing filters.rc
          or other initialization file by reevaluating the majormode of the
          current buffer after all buffers are loaded during initialization.
        + change a typealloc(CMDFUNC) to use typecalloc, so the c_args pointer
          is initialized.
        + change ifdef in tgetc() which relates to older Linux kernels (up to
          early 2.0) to BUG_LINUX_2_0_INTR, so it is disabled.  This does not
          appear to malfunction with 2.0.36, so we can enter quoted ^C's.
        + remove ABORTED() check from read_quoted(), since that prevents us
          from entered an escape or similar character (such as intr) when
          quoted (see 8.3k).
        + change sysmapped_c() to return early if term.getch() returns a -1,
          since we don't want to try to map that: an indefinite stream of
          EOF's can come out of ttgetc in at least one instance on Linux.
        + eliminate use of yytext in local functions of filters, since that does
          not work with SCO's lex (fdl-filt.l, xs-filt.l).
        + add vile-txt-filt, vile-xs-filt to makefile.wnt
        + modify makefile.wnt to set related $(cdebug) and $(ldebug) when
          DBG symbol is set.
        + modify expansion of tilde by winvile to take into account $HOMEDRIVE,
          used on WinNT to denote the drive on which a user's desktop is
        + add mode 'cd-on-open', to set working directory to a given file when
          reading it into a buffer.  Use related logic to make winvile cd to
          the directory of the last-specified file when invoked, so it is
          consistent with drag/drop behavior.
        > patches by Clark Morgan:
        + sever vile/winvile's dependence on $COMSPEC and additionally permit
          launching apps that are neither blocked by the editor nor launched by
          a shell.
        + add command to swap the Ctrl+Insert and Alt+Insert bindings.  Patch
          triggered by Alex Wetmore's comments (many months ago) that he felt
          the current clipboard bindings were not optimal for use:
          a) with the left mouse button (which always copies text to the
             unnamed buffer), and
          b) by experienced Windows users who will expect Ctrl+Insert (a
             Windows Standard key binding) to copy data to the clipboard
             without being prompted for a region.
        + include rms.h from estruct.h to make nefsms.h compile properly on
          VMS (fixes a problem introduced by restructuring of modetbl in 8.3o).

 (tom) 990926 (u)
        + allow adjustment of window size in win32 versions (vile, winvile) by
          dragging the modeline.  Clicking on a modeline clears the selection.
        + modify drag/drop logic in winvile to set the current working
          directory to the last dropped file.
        + add alarm on attempt to paste selection into a readonly buffer
          (reported by Clark Morgan).
        + correct logic in glob_match_leaf(), which did not allow a pattern
          to end with '*', e.g,. ":e make*in*" would not match
          (reported by Clark Morgan).
        + add fallback definitions for cursor keys in tcap.c.  When running
          'screen' 3.7.6 on Redhat 6.0, which is linked with ncurses, screen
          makes a bogus $TERMCAP from the terminfo entry, which doesn't
          necessarily correspond with the actual termcap entry.  I found that
          my cursor-down was not recognized since the $TERMCAP said it would
          not be provided, while 'screen' actually delivered <esc>OB.
        + integrated winvile's popup menu with the system menu, adding an entry
          to enable/disable the popup menu so that the right mouse button can
          be used for copying selections to the clipboard.
        + improve vile-make-filt by coloring variables in strings.
        + minor fix for single-quoted strings in vile-sh-filt, to handle
          escaped newlines, which are not needed, but terminated the pattern
        + correct handling of default color in color-schemes; it was being
          internally set to the actual color rather than the special code for
          'default', so one could not reset the colors automatically.
        + correct a typo in setting color schemes that used the background
          color where the cursor color was intended.
        + fix for ccolor mode in xvile, for 8-bit displays: the cursor is not
          necessarily colorable if we do not allocate enough GC's.

 (tom) 990920 (t)
        + implement drag/drop for winvile.
        + ensure that win32 and termcap versions do not allow paste into buffer
          that is marked 'view'.
        + correct background in os2vio.c (the 980930 change for blink versus
          bright does not apply to OS/2 full-screen windows, but only the
          stand-alone mode).
        + modify dummy functions for setting fcolor, bcolor, ccolor to restore
          the default value rather than allow setting misleading value to be
          set when the corresponding mode is not really supported.
        + ifdef'd out with OPT_POPUP_WINOPEN popup menu for winopen command,
          added it to the system menu.  This gets in the way of mouse
          selection/extension and (for 2-button mice) prevents pasting with the
          middle button.
        + implement double- and triple-click selection with win32 console and
          gui, as well as pasting with button-2.  There's no simple way to
          implement button-3 extension as in tcap.c, however, for win32 console.
        + correct a spurious decrement of bp->b_bytecount in
          strip_if_dosmode(), from 8.3q changes.
        + implement 'default' color for all drivers, to simplify ccolor.
        + add term.setccol(), to allow changing the cursor color for
          drivers that support it, e.g., xvile, along with mode ccolor.
        + change OPT_TITLE's action routine to show $progname value rather
          than "vile".
        + make OPT_TITLE apply to xvile, using X resources rather than WM
          properties (patch by Rick Sladkey, modified by suggestion from Kevin
          Buettner to integrate it with existing $title logic).
        + fix:  xvile doesn't recognize XK_KP_* keypad keys such as the arrow
          keys on the numeric keypad when numlock is off.  This is particularly
          bad for users with Sun Type 4 keyboards where there is only a single
          numeric/cursor keypad.  (The Solaris X server may not return XK_KP_*
          keysyms by default, the OpenBSD one does.) (patch by Christian
          Weisgerber <>).
        + add a note to the VMS build scripts (descrip.mms and
          to caution installers to delete generated headers and object files
          between building vile.exe and xvile.exe (patch by Clark Morgan).

 (tom) 990914 (s)
        + modify list mode to show the actual record separator rather than ^J.
        + correction to change in 8.3q, to writereg() and getregion(), to
          account for length of recordseparator when it is crlf.  This also
          affects (because the r_size value changes) wordcount(), ldelete(),
          and several places in perl.xs
        + modify text color model in x11.c to work like tcap.c, adding explicit
          fcolor0 and bcolor0 resources and changing logic that implements the
          fcolor and bcolor modes to update GC's at runtime.
        + modify find_in_path_list() to use caseless comparison on systems that
          need this.
        + modify inout_popen() to convert pathname to backslashes on DOS, etc.
        + modify HighlightFilter to check if the filter is found in $PATH before
          deciding to build up the pathname.
        + modify logic in tcap.c to prefer AF/AB over Sf/Sb even if the number
          of colors is greater than 8.  That makes the $palette strings for
          xterm-16color easier to work with.
        + add "cs" as abbreviation for color-scheme; updated vile.hlp and add
          palettes.rc to show examples.  correct expression in chgd_scheme()
          for selecting the color-scheme.  Add "use=" clause to color schemes
          to simplify construction of black and white schemes.
        + convert as needed slashes to backslashes in displayed pathnames in
          which-source and which-exec commands.
        + modify dofmt() to make its repertoire closer to printf's: remove 'D'
          format code, and change 'p' to 'Q', 'u' to 'f'.
        + modify logic in tcap.c to use 'reverse' mode in preference to
          'standout', and either in preference to color when there is a
          conflict.  This works around an error in several termcap entries
          (including screen's), which do not mention NC (no_color_video).  This
          error made selection highlighting not work.
        + correct my recent cleanup of tracing TGETSTR calls in tcap.c, which
          broke the merging of similar control sequences.
        + correct typo in PutModename() call that shows recordseparator,
          which caused GPF on NT.

 (tom) 990907 (r)
        + correct oversight in 'eval' command, which evaluated only the first
        + revised macro-parameter logic to rely on parameter template in the
          store-procedure command rather than accepting unsolicited parameter
          lists.  This works better with command-completion (fixes a problem
          reported by Duncan Sargeant).
        + set txtmode in manpage buffers to simplify further optional
        + check if vile_is_busy, suppress menu operations if true.
        + corrected problem in perl.xs introduced by changes for definition of
          VILE_LIBDIR_PATH which dropped the trailing '/', by modifying logic
          in perl.xs to use pathcat() function.  This also avoids modifying the
          corresponding environment variable.
        + modify to work when the system uses shadow passwords.  Also,
          modify menu.c and x11.c to ignore mouse operations while the editor is
        + add &register function, so the contents of an internal register may
          be manipulated in macros (request by Otavio Exel).
        + add configure check for <sys/socket.h>, needed for SCO which defines
          FIONREAD there.  This fixes screen output, avoiding the fcntl bug,
          but still does not make arrow keys work since the FIONREAD ioctl does
          not work on SCO.  Using select or poll makes it much slower.

 (tom) 990904 (q)
        + modify check for curses/termcap library for FreeBSD to exclude
          curses library, preferring either ncurses or termcap.
        + rename isspecial to isSpecial because FreeBSD 3.1's ctype.h conflicts
        + make ^X-^X command interruptible
        + modify majormode logic so that when a user sets a majormode for a
          given buffer, the side-effects that are performed for each of the
          modes associated with the majormode are performed in this context
          as well.  Previously the mode values were simply attached.
        + recount buffer size after set-dos and set-unix commands to take into
          account the length of the line-ending.
        + force a null on the end of the result from special_formatter(), which
          is used to display the ^G command.  Sometimes there was no null,
          causing the output line to get trashed.
        + add buffer mode recordseparator to set dos/unix modes like the
          set-dos and set-unix commands, i.e., not delayed til the next buffer
          read like the 'dos' mode.
        + add vile-tbl-filt to makefile.wnt
        + add *.ksh to shmode
        + workaround in exec_sh_c() for OS/2 EMX special requirements for
          slash/backslash conversion.
        + reduce compiled-in Unix $startup-path to the path on which we
          install the filter programs, incidentally correcting path
          separator in default value for $startup-path on OS/2 EMX
        + add commands which-source and which-exec to show which file would
          be source'd and exec'd from $startup-path and $PATH + $libdir-path,
        + add logic, also used for type-ahead testing to catnap for BeOS, making
          the cursor and function keys work.
        + modify catnap() to use its select/poll logic for tty type-ahead tests.

 (tom) 990829 (p)
        + modify test for terminfo/termcap library support to look for curses
          library first.  SCO's native termlib does not support color, though
          the UDK's termlib does.
        + eliminate SCO-specific ifdef SYSTEM_LOOKS_LIKE_SCO, which really
          applied to v4.  Tested with sco3.2v5.0.5 (aka v5).
        + correct a negative array index for ctrans[] in show-colors command.
        + remove unneeded putnpad() from tcap.c
        + fix excess initialization of kbindtbl when --disable-extensions is
          configured using macro KBIND_LINK.
        + modify htmlfilt.l to highlight aliases for special characters, e.g.,
        + minor fixes for tc-filt.l, to allow for entries that are missing the
          trailing '\', and to allow for entries without a description.  Also,
          allow '.' and '_' in alias names.
        + correct typo in suffix expression for cshmode.

 (tom) 990822 (o)
        + add &pquote function to simplify use of &lookup when the result might
          contain spaces, and $exec-suffix variable.
        + add &cclass function, and set-char-class, unset-char-class and
          reset-char-classes commands.
        + add tbl-filt.l, for modetbl and cmdtbl highlighting.
        + add .login and .logout to csh mode.
        + modify pictmode to use ~local.
        + modify HighlightFilter and ShowManpage, ShowFormatted macros to use
          &lookup and related functions to construct the pathname of the filter
          program, bypassing possible reset of $PATH in the subshell.
        + add FL_LIBDIR to cases in cfg_locate(), corresponding to $libdir-path
        + add $pathlist-separator variable.
        + add functions &word and &token for simple parsing of strings.
        + add functions &lookup, &path and &pcat to provide support for
          external pathname manipulation.
        + moved symbol table for DIRECTIVE to modes.c, to generate it from
          modetbl and incidentally fix an ambiguity in name resolution, since
          the old table was not automatically sorted.  Since it is handled as
          by the enumerated-mode value code, directive names are now processed
          ignoring case.
        + add &execable test for files.
        + add "&random" as alias for "&rnd", "&readable" as alias for "&rd",
          make all &function names long enough to be more readable.
        + add check for menufile-not-found in do_menu, to avoid passing a null
          pointer to fopen (reported by Graeme Miller).

 (tom) 990817 (n)
        + if .vilemenu is not found, return status to main.c so we can popup
          appropriate message.
        + remove const qualifiers from some functions whose data really are
          modifiable: next_buffer_line(), get_token(), tokval (), user_reply().
        + BeOS has nonworking 'select()', and no corresponding fd_set
          declaration.  Add CF_TYPE_FD_SET configure check to handle this.
          (I'll write some BeOS-specific code to make cursor-keys work).
        + BeOS does not define O_NDELAY; undef'd USE_FCNTL in this case.
        + correct ifdef for ttyname(), was HAS_TTYNAME, to use this on BeOS.
        + add fdl syntax highlighter.

 (tom) 990805 (m)
        + add vile-perl-filt to makefile.wnt
        + minor improvement to txt-filt.l, to reset quoted mode when a blank
          line is found.
        + minor correction to bat-filt.l, workaround for apparent bug in flex
          which is treating a '?' as '+'.
        + minor correction to difffilt.l, forcing word boundary after "diff"
          and "Binary".
        + modify complex fence matching so that if too many iterations are
          needed for the match, that it can still try the simple fence matching.
          A warning message will be displayed if the fence-limit timeout
        + modify perlmode complex fences by merging "do" and "while" groups,
          making that a little faster.
        + change fences-limit from a scale factor to timeout in seconds to make
          it simpler to understand/configure.  (This and the perlmode change
          address a problem reported by Chris Sherman <>).
        + correct vilemode complex fence patterns (the patterns were not
          anchored to "^").
        + modifications for egcs 2.91 (compiler warnings about missing
          initializers for structs where 0's are fine).  egcs 2.91 also has a
          bug causing it to emit a lot of warnings when it saw a missing const
          in the qsort comparison functions.

 (tom) 990717 (l)
        + turn off OPT_CACHE_VCOL, still too experimental.
        + correct flag that would force window repainting in set-dos-mode
          command, lost by optimization in 8.3k.
        + correct a syntax error in configure script's --with-no-leaks option.
        + fix several memory leaks in majormodes with new function
          free_sm_vals(), etc.
        + correct logic in write_string(), an infinite loop would result if the
          string contains a null (filters.c)
        + suppress $read-hook in readin() if we are not reading the current
          buffer.  This can happen as a side-effect of the :tags command, and
          would cause the prompt to be overwritten by the message from
          highlighting the current buffer.
        + add HighlightClear macro, bound to ^X-Q (request by J Chris Coppick).
        + add goto-char command, bound to ^X-G.
        + add variable $bwindows
        + add variable $curchar
        + add variable $lcols
        + add variable $position-format
        + implement a simple 'eval' or 'execute-string' command, allowing users
          to construct commands dynamically.
        + use new function vms_fseek_ok() to check if quickreadf() would not
          successfully read a file whose record structure prevents VMS's read()
          function from reading it in one call (patch by Clark Morgan, reported
          by Adam Denton).

 (tom) 990705 (k)
        + correct logic of read_quoted() from 8.3j, which no longer accepted
          nondigits after a control/V, e.g., ^V^D.
        + add commands to move the cursor up/down by rows on the screen, ignoring
          wrapping: next-row or ^X-^D and previous-row or ^X-^U.
        + add a check for negative array index in l_to_vline(), which would
          cause a core dump when changing a buffer with very long lines to
          linewrap mode and back again.
        + make wrapper for the most frequently called form of mk_to_vcol(),
          dot_to_vcol() and in that function cache a location on the current
          line "close" to DOT, so we can make fewer calls to mk_to_vcol().
          Ifdef'd this with OPT_CACHE_VCOL.
        + correct sign of shift-parameter in call of mvleftwind() from
        + correct test before calling updall(), which was updating the whole
          window each time WFMODE was set, e.g., when updating the ruler.
        + minor optimization (2-3 times faster) of calls to mk_to_vcol() to
          reuse the ruler's column value in updpos() if it is up to date.
        + modify calls to mk_to_vcol() so we show the effective column
          consistently in [Registers], which has a left margin.

 (tom) 990703 (j)
        + implement set-window command (request by Adam Denton).
        + implement show-marks command.
        + rename 'quote()' to 'quote_next()', split-out 'read_quoted()' to
          reuse the logic that recognizes ^V followed by a number in input.
          Now the minibuffer can accept any character except for nulls
          (originally requested by Sean Ahern, but Adam Denton reminded me).
        + modify txt-filt.l to highlight strings in double-quotes.
        + change kbd_reply() to ensure that last_eolchar is set either to
          a newline or a blank if we are interpreting a macro.
        + correct array limit in save_arguments(), which was one too small,
          and added a double-check against that limit.
        + add a sample of (i.e., doc/ to use with indent
          2.x (we're not planning to use this wholesale, but piecemeal, since
          even indent 2.0 has bugs ;-).
        + undefine 'dofile' in perl.xs, to build with perl on Redhat 6.0 (Kevin
        + correct two minor, but annoying warning messages in perl.xs:
                Attempt to free unreferenced scalar
          by incrementing a reference count, and
                BUG: getregion: no mark set in this window
          by checking for null MK before call to getregion.
        + add ShowFormatted macro to manpage.rc, bound to ^X-n, which renders
          the current buffer with nroff.
        + rename manpage macro to ShowManpage
        > patches by Paul Fox:
        + make the Entering/Leaving nesting work correctly if you jump into the
          middle of an error buffer.  previously selecting a line partway
          through the buffer would cause vile to skip parsing the preceding
          change-directory directives, so it wouldn't know where the referenced
          file was to be found.  now, if you don't use ^X^X to traverse the
          buffer linearly, the preceding lines are re-parsed as needed.
        + changed fence.c over to 4 column indents, using indent, plus some
          hand editing on continuations and comment alignment.
        + modify vilefilt.l to accept hyphens in identifiers

 (tom) 990621 (i)
        + add vile-pager to install rule.
        + add macros (e.g., manpage.rc) to install rule.
        + implement $(DESTDIR) variable in Unix makefiles to simplify packaging
          binary distributions.
        + corrections to CF_MAKEFLAGS configure macro, to work with POSIX
          'make', which may pass assignments in the $(MAKEFLAGS) variable.
        + update some configure script macros: CF_CHECK_ERRNO, CF_HEADER_PATH,
          CF_LIBRARY_PATH, from lynx/xterm changes, as well as
          and adapted from autoconf.
        + make the [Variables] buffer partly animated; updating after
          set-variable commands, and as a side effect of the save/restore
          function for macro arguments.  Most variables are set internally,
          however, so do not expect the buffer to jitter as you move the cursor
        + implement parameters for procedures (see macros.doc).
        + modify ifdef's for hooks to use new symbol OPT_HOOKS, since they are
          not really dependent on OPT_PROCEDURES anymore.
        + change run_a_hook() to use docmd() rather than run_procedure(), so
          the hook can be an arbitrary command, rather than only procedures
          (suggested by Brendan O'Dea).
        + correct call on screen_string in ask_for_bname, which had the wrong
          length, hidden in screen_to_bname macro.  This made ^X-k use a length
          of 4, rather than the actual buffer length.
        > perl scripts by Kuntal Daftary (from his notes):
        + is a simplistic extension to allow you to lock your vile
          sessions, say while temporarily leaving your terminal or something
          like that.
        + is a spell checker within vile that behaves (almost) like
          ispell (and in fact does use ispell internally).  This one is
          inspired out of recent mail Christian Lindig providing a spell
          filter.  Also thanks to Tom for the -a flag :-)
        + pod documentation is within the files themselves. just dump all the files in
          your ~/.vile/perl
        + also required me to rig up a mlreply_opts command as an
          addition to the mlreply_* family of commands already offered in the
          Vile package.  Tho the invocation is quite similar to the builtin
          mlreply_* commands, the behavior is simplistic, and does not exactly
          match that of other Vile commands, e.g., mini-buffer editing is not
          supported and TAB-completion behavior is different.

 (tom) 990614 (h)
        + updated example in menus.doc, dropping references to macros not in
          our source distribution.
        + add no_errs flag to suppress bells when ~force is in effect.
        + implement clear-attributes-til, to allow reset of all video attributes
          and highlighting.
        + implement wildcard matching in :kill-buffer, so one can do
                :ki *.log
          to discard all files ending with ".log".  I used filename wildcards
          rather than regular expressions.  If no wildcard matches, the normal
          matching is used, e.g., filename or buffer number.
        + implement name-completion for killbuffer(), usebuffer(), finderrbuf()
          and execbuf().
        + correct logic in x11.c which sets window manager hints for icon; it
          did not first ask for the existing hints.  This caused some window
          managers (olvwm, for instance) to ignore FocusIn events (Mark
          Robinson <Mark.D.Robinson@UK.Sun.COM>).
        + modify logic of insert_namebst() and delete_namebst() to allow
          redefinition of builtin commands.  The builtin command is moved to
          the redefns table until the user deletes the command that redefined
          it (request by Alex Wetmore).
        + modify c-filt.c to highlight floating point constants.
        + modify write_string() function in filters.c to avoid writing a
          newline that's beyond the limit of the string passed as parameter.
          This fixes a case in m4-filt.l that would write an extra newline
          after comment lines containing only a "#".
        + add "/**/#" lines to imakemode preamble pattern, to accommodate old
          (i.e., obsolete) Imakefile's that rely on pre-ANSI cpp's.
        + suppress blank messages in perl.xs

 (tom) 990607 (g)
        + add distinct prefixes to warnings written in perl.xs with write_message
          to aid in debugging.
        + restore ability of Vile::get to return values of internal variables
          without requiring the '$', e.g., Vile::get('$seed').
        + remove a check in Vile::set which tested if we can get a variable's
          value before attempting to set it.  A few variables (e.g., $cryptkey)
          may be writeonly, and temporary variables (e.g., %foo) have no
          predetermined value.
        + add numbers, email addresses and urls to txt-filt.l
        + tweak diffmode suffixes, adding .dif and .diffs
        + implement ":set video=reverse" for tcap.c, correct rendition of
          selection in ntwinio.c as well.
        + add Perl extensions syntax filter xs-filt.l and associated xsmode.
        + tweak perlmode preamble to allow relative paths.
        + add a note in vile.hlp explaining how to use $shell=/bin/sh to
          circumvent reset of $PATH in ".cshrc", so value in $VILE_LIBDIR_PATH
          is inherited automatically.  I didn't mention there, but I have been
          using this for several years, having found that SunOS's make program
          would dump core when running in vile if I left $shell=/bin/csh.
          It's faster anyway...
        + add ftp site info to vile.hlp
        + add ifdef in ntwinio.c to support wheel-mouse, must add
          -D_WIN32_WINNT=0x400 to makefile.wnt (patch by Alex Wetmore).
        + correct ifdef in x11.c to so wheel-mouse support compiles properly
          when menus are not used (patch by Kevin Buettner).
        > patches by Clark Morgan:
        + minor patch to forces wvwrap to pop winvile to the foreground
          (convenient when winvile does not currently have focus).
        + a new "sync-file" command enables synchronization of winvile's
          current buffer with the DevStudio text editor.  When this command is
          used in conjunction with visvile's key redirection feature, it's now
          possible to set a breakpoint in DevStudio from winvile like so:
          + use winvile's search capabilities (including tags) to find the
            program location where a breakpoint is desired, and
          + press F9 (standard DevStudio shortcut that sets/clears a

 (tom) 990602 (f)
        + implement fcolor and bcolor options for xvile.
        + add missing case for VALTYPE_ENUM in listvalueset(), which caused
          very long enum values to be run-on in [Settings].
        + add mode 'video-attrs', mainly to implement bold text as part of the
          color schemes.  I tried implementing reverse, but this is hard to do
          in tcap.c
        + add color schemes, associating fcolor, bcolor, $palette and an
          optional video attribute.  This adds new commands to manipulate the
        + allow ':' for first line of Bourne shell
        + recognize \f1 and \f4 in nr-filt.l
        + modify preamble pattern for tclmode to allow version number, e.g.,
          wish4.1 vs wish.
        + improve sh-filt.l so that option strings such as "--with-8bit" do not
          highlight the "8".
        + modify sel_yank() to set curtabval temporarily so tab/offset
          computations in yankregion work properly when user has selected a
          rectangle in one buffer, then clicks the mouse into a buffer with a
          different tabstop setting (reported by Clark Morgan).
        + improve makefile.l, handling escaped newlines in quoted strings and
          in target lists.

 (tom) 990523 (e)
        + add/use new function restore_dot() to guard against restoring DOT to
          a value which no longer points into the current buffer, e.g., after
          modifying it.  This fixes a core dump in xvile when selecting in the
          [Registers] buffer.
        + improve perl syntax filter by parsing patterns following =~ and =!
          operators.  (Patterns may also be in other places).
        + comment-out save/restore of $CFLAGS in via the
          saved_CFLAGS, since that interferes with configuration on HP-UX 10.20
          with HP's ANSI compiler, which does not support ANSI C without
          specifying an option.  As a result, all of the checks for missing
          function prototypes failed, as well as the checks for terminfo vs
          termcap (reported by Micheal Finken).
        + simplify mlerror, allowing for the possibility that strerror may
          return a null pointer.
        + correct quoting for configure script's --with-exec-macros option,
          which prevented users from setting that values (reported by Michael
          Finken <>).
        + turn off crypting during reads/writes to a pipe.  This is needed in
          crypt mode in order to support macros that pipe text to an external
          program for filtering.  Without this change, instead of the actual
          text, the encrypted text is sent to the external programs which will
          most likely result in incorrect behavior.  (patch by Daniel Palermo
        + provide default colors for xvile similar to those used by vile for
          fcolor1 through fcolor15 (patch by Brendan O'Dea).
        > patches by Clark Morgan:
        + removed duplicate winopen and winopen-nocd documentation from
        + winvile only paints its frame once at startup.
        + added logic to ensure the the winvile frame is completely exposed on
          the desktop (i.e., not clipped by taskbar or painted offscreen).
        + further changes to permit a winvile user to specify any geometry that
          lies within the region bounded by the current desktop screen.
        + setting winvile font via dialog box now repaints screen (in all
          cases) and flushes status message to mini-buffer.
        + fixed a couple of minor problems with wvwrap when setting winvile's
          current working directory.  Wvwrap also makes sure the editor is
        + finally, a rather big change, I've dumped the oleauto Open method.
          As it turns out, this was a bad idea.  I saw cases 2nite where the
          editor was "simultaneously" changing its working directory and
          opening a file.  Not good.  This kind of race condition is avoided
          when VileKeys() "drives" the editor because all of winvile's commands
          are serialized via a Windows message queue.

 (tom) 990519 (d)
        + remove fragment of code in c-filt.c which left it incorrectly parsing
          "string1""string2" (reported by Alex Wetmore).
        + implement $palette for xvile, allowing colors to be permuted.
        + add show-colors command, to show the color names and $palette values
        + change get_token() and mac_tokval() to use TBUFF's, making them
          independent of buffer length.
        + change replacepat to a TBUFF.
        + correct logic for $kill, which did not account for killbuffer
          rotation and was always pointing to the same index.
        + change statevar.c to return results in TBUFF's, making it independent
          of the caller's buffer size.  This fixes some trash after the display
          of $kill in show-variables.
        > patches by Clark Morgan:
        + add winopen and winopen-cd commands to w32 vile.
        + hook the winvile right mouse button to the new winopen command.
        + Add an Open method to winvile ole automation server, which may be
          used to directly open a filename in the editor (thus avoiding the
          overhead of VileKeys).
        + Added wvwrap.exe to the Win32 distribution.  This utility opens one
          or more files in a _single_ winvile instance via a right mouse click
          in the Windows Explorer.  For more details, please read
          doc/oleauto.doc .
          [ Note: wvwrap.exe is Ed Henderson's brainchild and he wrote the
            original version of the program.  Thanks, Ed! ]

 (tom) 990510 (c)
        + fix an overlooked reset of lines read if we are reading via
        + add logic to pathname completion to supply slash if given an
          environment variable that evaluates to a directory name, e.g., $HOME
          (request by Kuntal Daftary).
        + add warn-blanks mode, to allow users to be prompted if they give a
          filename which has nonprinting characters (request by Tom Serkowski
        + correct (supply) class-inheritance in filters.c function keyword_attr.
        + modify filters.c to support arbitrary strings as .class values, used
          this to parameterize m4 filter.
        + minor resync of autoconf macros with xterm and lynx.
        + add M4 syntax filter.
        + correct handling in makefilt.l of escaped quotes outside a string.
          Also, highlight $(name), like ${name}.
        > patch by Clark Morgan:
        + remove race condition in winvile (in ole-auto mode) when keystrokes
          are redirected to DevStudio (noticed on a networked, NTFS drive).
        + fix typo in filters/makefile.wnt -- nmake won't allow use of both
          ':' and '::' for the same target.
        > patch by Gary Ross to add support to xvile for wheel mouse:
        + modified x_process_event to scroll up/down for Button4 and Button5
          button press events.
        + added a new resource XVile.wheelScrollAmount to set the number of
          lines scrolled for each occurrence of these events.  (Default is 3).

 (tom) 990503 (b)
        + correction to SSTRING and DSTRING symbols in perl, other syntax
          highlighters.  The backslash character was not given as part of the
          excluded character range, making escaped quotes and escaped
          backslashes handled improperly.
        + improve mlerror() function for VMS.  Any errno with the special value
          EVMSERR requires special translation.  This translation was not being
          done by vile, which caused the editor to occasionally display an
          "unknown error" message.  Example:
                  $ vile x.y.z    ! invalid file syntax not flagged by vile
          (patch by Clark Morgan).
        + add RCS majormode and syntax filter.
        + add SCCS syntax filter.
        + rename sccsmode to SCCSmode, to workaround majormode's name
          resolution; suffixes are done alphabetically.

 (tom) 990429 (a)
        + minor tweak to c-filt.c so it can be used on gcov output:  the GNU
          coverage tool puts a count down the left margin to show lines
          executed, and "######" where they're not.  c-filt.c did not expect
          the latter, and omitted some of the #'s.
        + correct install rule in filters/makefile.wnt, which combined the
          rules that should have gone to VILE_STARTUP_PATH with the ones
          for VILE_LIBDIR_PATH.
        + remove/correct obsolete description in vile.hlp for syntax filters
          (reported by Clark Morgan).
        + update README to describe 8.3 (patch by Clark Morgan).
        + correct use of $(MAKEFLAGS) in, which is all of the
          makeflags including assignments, not like $(MFLAGS) which was only
          the flags without '-'.  This made "make EXTRA_FLAGS=-O" fail
          (reported by Jeff Morriss <>).
        + add -v option to filters, to show files opened and keywords/classes
          defined, for debugging.  Repeat the -v option for more details.
        + correct expressions for sccsmode; the ^A characters were given as

Changes for vile 8.3 (released Fri Apr 23, 1999)

 (tom) 990420 (v)
        + modify winvile.rc to use VILE_ICON definition, overlooked in previous

 (tom) 990420 (u)
        + add 32x32 monochome versions of the .ico files, for completeness
          because automatically generated versions do not work well for color
        + improved vile.ico by adding 16x16 section (Rick Sladkey).
        + correct reversed logic for no_msgs variable in perl.xs, from
          8.2s changes (reported by Ed Henderson).
        + correct missing return in var_TITLE() on win32 (Clark Morgan).

 (tom) 990418 (t)
        + add configure option --with-xpm, to support color icons in xvile.
          Not all window managers support xpm icons.
        + remove configure test and ifdef's for CC_CANNOT_OFFSET_CASES, since
          rewrite of eval.c left only one place where we care about this
          compiler limitation.
        + add .ico, .xbm and .xpm versions of the most popular icons for xvile
          and winvile.
        + use SMG to get control sequences for 80/132 column switching (Clark
          Morgan, request by Tom).
        + rewrote vmsopen() in vmsvt.c (patch by Clark Morgan).
        + update vile-pager script to find vile-manfilt according to the
          VILE_LIBDIR_PATH setting, etc.
        + modify majormode suffixes check to exclude pipes and internal names
        + add ".hlp" to txtmode suffixes (note that the :h command bypasses
        + add cindent to lex, yacc majormodes.
        + add sccs majormode.
        + implement imake mode using C filter.
        + add syntax filter txt-filt.l, for highlighting simple textfiles.
        + add syntax filter spellflt.l, for highlighting misspelled words with
          ispell.  Source "spell.rc" to get the ^X-i spelling highlighter.
        + add syntax filter difffilt.l for diff output
        + use "seed" in ucrypt.c rather than rand().

 (tom) 990414 (s)
        + add "DBG=" option to makefile.wnt to simplify building with OPT_TRACE.
        + add VILE_LIBDIR_PATH to $PATH on WinNT, as on Unix to find syntax
          filters more simply.
        + minor fixes to filters: makefilt.l to handle $$name, sh-filt.l to
          refrain from highlighting keywords in contexts that look like
          options, e.g., -enable.
        + modify makefile.wnt to accommodate Win95: its shell doesn't grok "&&"
          as a command separator (patch by Clark Morgan).
        + add 'dist' rules to makefile.wnt
        + fix core dump for uninitialized $palette in statevar.c (reported by
          Brian Moore).
        > patches from Paul Fox
        + trimmed some old README text
        + removed margin and scrollsize values from term structs.  they
          were deterministic constants everywhere anyway.
        + eliminated TTxxxx() macros, in favor of simple term.xxxx()
          usage.  ANSI C says the (*term.xxxx)() format isn't necessary.
          we'll see.
        + renamed elements of term struct, since the element names are
          now exposed.  eliminated redundant t_ prefix.
        + renamed null_xxxx() routines to match.
        + renamed some globals to better describe their function (e.g.
          pat, rpat, sres)
        + in a couple of places globals were lurking in macros (e.g.
          nexttabcol) and i made them visible.
        + cleaned up and corrected comments which no longer described the
          code correctly.
        + renamed tokenizing #defines, for better mnemonics.
        + suppressed a couple of arg-unused warnings when building X11 by
          tweaking ifdefs.

        + cleaned up a bunch of code -- moved private defines from estruct.h.
        + collapsed screen address defines to simplify.
        + did some renaming for mnemonic clarification.
        + eliminated unused global flags.
        + eliminated global "regs" struct/union.
        + eliminated all support for flicker suppression.  it was cga-only,
          and wasn't needed on reasonable cards anyway.  we can resurrect
          it if needed, but i doubt we will.  (also eliminated $flickcode
          variable which enabled it.)
        + updated some copyright statements.

        + simplified logic surrounding while-loop processing -- a single
          list is now maintained, rather than the double list shuffling
          that went on before, and endwhiles now get their own struct on
          the loop descriptor list.
        + eliminated recursion when freeing while-loop descriptors.
        + move save/restore of no_msgs (formerly discmd) inside dobuf().
        + simplified flags that indicate that macro creation is in progress.

        + use mlforce() rather than mlprompt() in pressreturn(), and eliminate
          flag setting no longer required. (spawn.c)
        + use rand() rather than global "seed" for encryption purposes.
        + add second %% line to lex "states" check -- it hangs on solaris
          otherwise.  (aclocal.m4)

 (tom) 990404 (r)
        + add filters/mms-filt.l
        + change filters/ to work when configuring with --srcdir
          (patch by Brendan O'Dea).
        + include XBM and XPM versions of [J.] Richard's ``vile screen'' sample
          icon, ifdef'd with OPT_X11_ICON (patch by Brendan O'Dea).
        + rename GetEnv to vile_getenv, since VMS linker does not distinguish
          that from getenv (patch by Clark Morgan).
        + ignore case in VMS majormode suffix and preamble.
        + make C-style indent logic available as a mode 'cindent', so it can be
          assigned as part of a majormode.  It is part of the builtin cmode.
        + collect logic for read/etc., hooks into common functions to make it
          simpler to see them.  Save/restore the count of lines read so that
          the read-hook does not cause vile to report confusing total number
          of lines read, i.e., the actual file plus the highlighting.

 (tom) 990327 (q)
        + add filtername mode, to handle special filter cases for java, js, csh
        + modify makefiles to allow vile to compile on *IX systems with the gnu
          make -j option, to run several C compilers at the same time.  The -t
          option to lex is at least portable to Solaris lex and flex.  Uses
          redirection (patch by Ryan Murray).
        + correct a couple of VMS-specific problems:  assignment through a
          const pointer in cfg_locate, and implicit string concatenation in
          personals (patch by Clark Morgan).
        + correct limit-expression in add_brackets() function, which left
          trash on the end if the buffer name was too long.
        + update the list of files suppressed by --disable-extensions.
        + add configure option --with-purify.
        + modify configure-script so --with-no-leaks option does not require
        + correct error in 8.2p changes to ucrypt.c, i.e., incorrect workaround
          for a case where a cast was needed.
        + revised change to HighlightFilter to add HighlightFilterMsg which
          writes the "Attaching attributes..." message, leaving the
          HighlightFilter macro quiet and more suitable for use in $read-hook.
        + minor changes to make Paul's changes build with perl, tracing
          and disabled extensions/shell.
        > patches from Paul Fox (includes some documentation from Clark Morgan):
        + combined eval.c/sindex() and bind.c/ourstrstr() into single
        + remove redundant mktrimmed() calls when doing buffer lookup.
        + moved code for grabbing next line from buffer from eval.c to
          new routine next_buffer_line() in buffer.c
        + give credit to Roger Ove for scroll optimization code in
        + random number generator now based on rand() -- it's present
          in MSDEV and all UNIXes i know of, but we may need a configure
          check eventually.  (eval.c)
        + removed mostly redundant numeric token type.  explicit check
          for digits in exec.c instead.
        + major overhaul of how vile's $state (formerly "environment")
          variables are implemented.  new file, statevar.c, contains
          support routines, each of which is responsible for both
          getting and setting a single variable.  dispatch is handled
          by new table set up by mktbls.c.  this eliminates two of
          the big switches in eval.c.  the result pointer arg to
          these routines should probably be a tbuff, which would allow
          unlimited variable lengths.  (eval.c, mktbls.c)
        + the code that runs vile &functions has become more table-driven
          as well.  modetbl now contains information on the return
          type of the functions, and the types of the arguments.  this
          cleans up the per-function code somewhat.  (eval.c, mktbls.c)
        + code for @interactive variables and &query function collapsed
          to single new user_reply() routine.  (eval.c, statevar.c,
        + various other cleanup and name revisions in eval.c:  "user"
          variables are now "temporary" variables, and "environment"
          variables are now "state" variables.  utility routines (like
          ltos(), i_ltoa(), stol()) renamed to render_xxx() to create
          a string, and scan_xxx() to decode a string.
        + collapsed the stenv() and set_variable() routines into a single
          entrypoint useable from both exec.c and modes.c.
        + split temp and state variable lookup from their evaluation,
          so the lookup can be done in just one routine.  (eval.c)
        + token evaluation (tokval()) now table driven.  i don't know
          if it's much cleaner, but i think it's better.  it's certainly
          different.  (no, modetbls is not involved, nor should it be. :-)
        + minor change to HighlightFilter in filters/filters.rc to cause
          it to not try and color [Special] buffers.
        + quoting fix in macros/pic.rc
        + supporting changes:  estruct.h,, vile.hlp.

 (tom) 990320 (p)
        + add an install-rule to filters/makefile.wnt
        + eliminate restriction on number of command-line arguments in winvile
          (reported by Ed Henderson).
        + make VILE_LIBDIR_PATH settable from the environment, as per
          documentation (patch by Brendan O'Dea).
        + add/use init_b_traits() function, to ensure that switching to a
          buffer which was source'd while hidden does not copy bogus values
          for the associated line pointers back to the window traits (fixes
          a core dump reported by Paul Fox).
        + modify addline(), bclear(), ifile() to prevent malloc/free from being
          interrupted by 'working' mode.
        + minor fixes to mail highlighting filter, to allow "To: " prefix
          (reported by Paul Fox).
        > patches from Clark Morgan:
        + modify home_path() to work around problem on VMS where
                $ vile ~/com/
          does not work, nor does tab completion, e.g.,
                :e ~/com/d<TAB>
          (the latter was also reported by Ed Henderson).
        + vile restores original terminal width when it exits (mimics the eph
          editor's behavior).
        + added "-132" and "-80" command-line switches to set screen width from
          command line.
        + correct computation of prog_arg for VMS, which is used as part of the
          command-line help message.
        + modify definition of FOPEN_READ for VMS to allow shared reads from
          files (reported by Ed Henderson, analysis by Clark Morgan).
        > patches from Paul Fox:
        + revised macros.doc, touching all previously untouched parts.
          it's now a little more vile-specific, and a little "tighter".
        + rewrite strinc() in terms of strcmp()/strncmp(), rename.
        + converted confusing (to me) do/while() loops to simple while()
        + collapsed keyboard polling code (fcntl version) to single place.
        + fixed imdying() to:  a) leave a core even if there's a problem
          saving buffers, b) try all temp directories, rather than quitting
          on first failure, c) try $TMPDIR first, and current directory
          last, on all systems, d) warn user that files may be in current
          directory.  future:  on write error, should try again in other
          directories.  (file.c)
        + fix bug where assigning BFEXEC in dofile() was tromping possibly
          existing flags (like BFCHG, leading to loss of buffer changes)
        + revised/rewrote entabline/detabline algorithms.  entabline() no
          longer needs to calle detabline() first.  (region.c)
        + fixed return status of nextbuffer()/prevbuffer when in
          noautobuffer mode.  previously did swbuffer to current buffer,
          which succeeds.  now you can safely loop through the buffers, and
          know when to stop.  (this makes the new example in macros.doc
          work.) (buffer.c)
        + rationalize comments, comment wording, and code grouping (basic.c
          line.c buffer.c file.c edef.h eval.c bind.c random.c fences.c
          insert.c search.c window.c word.c display.c main.c input.c)
        + collapse updext_before()/updext_past() into single routine.
          purely mechanical -- could perhaps be improved.  show keyboard
          macro "[recording]" state on modelines (display.c)
        + begin in state HEADER rather than state BODY (filters/mailfilt.l)
        + add new &query function, to (eventually) replace interactive
          @variables.  (eval.c)
        + collapse starting/stopping of keyboard macro into single
          function, which acts as toggle.  leave both key-bindings ( '^X-('
          and '^X-)' ) but one is now redundant.  (input.c vile.hlp)
        + changed sense, somewhat, of kbd and dot macro state variables:
          now a two state boolean, rather than a three state.  well, i
          think it's nicer.  (input.c line.c)
        + simplify macbug code to take advantage of vararg-capable
          mlforce() (eval.c exec.c)
        + revised window grow/shrink algorithms (window.c)
        + more logical variable naming/grouping (file.c edef.h select.c
          npopen.c eval.c insert.c search.c display.c bind.c)
        + change all BUG mlwrites to mlforce (file.c undo.c others)
        + further encapsulate "crypting" knowledge -- create as ffdocrypt()
          accessor for "ffcrypting".  (file.c ucrypt.c)
        + renamed rewritten functions, minor algorithm changes (e.g.  use
          castrealloc() rather than castalloc()/memcpy() (line.c, file.c)
        + added lreplc() function, which can safely replace single
          characters on a line.  (line.c)
        + eliminated old "#ifdef BEFORE/#if NEVER/unused" code and
          variables.  (buffer.c, file.c edef.h spawn.c)
        + uniform use of tb_xxx prefix on TBUFFs.  (edef.h)
        + removed $truth variable (eval.c)
        + removed $ramsize variable (eval.c)
        + guard against possible null pointer dereference of b_fname (eval.c)
        + remove ENVFUNC ifdefs -- i think all our systems have them (eval.c
        + removed OPT_AEDIT ifdefs.  they weren't protecting much.
          (region.c opers.c)
        + added more generic null TERM struct routines, deleted unneeded
          screen-specific ones.  (termio.c ansi.c vmsvt.c x11.c tcap.c)
        + hmmm.  should i even mention this one?  :-) (you guys should
          clearly follow suit.) (version.c)
        + minor supporting changes (proto.h estruct.h tags.c filec.c
          w32reg.c menu.c cmdtbl modetbl1 tbuff.c history.c)
        + comment cleanup, formatting, vestigial code and ifdef removal,
          increased NSTRING/NPAT.  who needs powers of two?  (estruct.h)
        + moved incremental search support def'ns to isearch.c (estruct.h
        + removed from suggested site list from README

 (tom) 990309 (o)
        + rewrite logic of newwidth() and newheight() (Paul Fox).
        + modify treatment of 'fillcol' mode so that a zero is interpreted to
          use the 'wrapmargin' value, and negative values are, like
          'wrapmargin', counted from the current right-margin (prompted by
          discussion with Kuntal M Daftary).
        + minor fixes for ti-filt.c (handle "\\," and terminfo entries without
          aliases or descriptions).
        + remove crypt-til operator; this would not work properly on portions
          of a file.
        + write ucrypt.c to use Unix crypt(1) if available.
        + rename crypt.c, move it to filters as ecrypt.c, for building
          standalone vile-crypt.  will be phased out.
        + set "vilemode" for macros and procedure buffers, to simplify syntax
          highlighting of internal buffers.
        + modify syntax filters so that keyword classes and their instances
          can be treated distinctly.
        + correct missing backslash in QUOTDEFS in
        + review/simplified/corrected comment-prefixes and comments modes
          in filters.rc
        + correct logic of version_of() function, which did not ensure that
          the text really looks like a VMS version specification.  From
          a bug report by Clark Morgan, who said that this works:
                :e ../buf*.c     # look for buffer.c
          but this doesn't:
                :e subdir/buf*.c
                :e [.subdir]buf*.c
          After fixing version_of(), my fakevms driver processes this properly.
        + update vile.hlp description of filter programs and renamed section to
          "Syntax coloring" (patch by Paul Fox).
        > patches by Clark Morgan:
        + only enable vtflash on hosts that support it (Unix, VMS).
        + clarify vile/winvile build instructions when using MS tools.
        + add $pid environment variable for VMS

 (tom) 990212 (n)
        + increase size of underline cursor for OPT_ICURSOR in ntconio.c
        + correct dcl-filt.l to handle inline comments
        + add bash-specific keywords to sh.key (reported by Paul Fox).
        + add missing assignment to save pre_op_dot in fences.c (reported by
          Clark Morgan, from VC++ 6.0 warnings)
        + correct check for return-value of open_region_filter(), which did
          not look for abort of command, resulting in hanging while trying
          to close a pipe that was not open (reported by Paul Fox).
        + change cast in CF_CC_OFFSETOF_CASES to 'long', to accommodate SGI's
          64-bit compiler.
        + restore "perldo" cmdtbl entry, for compatibility (Paul Fox).
        + relax iteration limit for complex fences a little, using new mode
          fence-limit times the buffer length as the hard limit.  This is
          still proportional to the buffer length, rather than allowing
          geometric increase with the fences groups.
        + add configure option --with-libdir-path to allow override of the
          default $(libdir)/vile.  Make this alterable with new variable
        + change install-directory for filter programs to $(libdir)/vile, to
          avoid clutter (suggested by Paul Fox).
        + modify some filters to avoid incrementing yytext since it may be an
        + add configure-check for state support in lex/flex, so we do not
          try to compile with programs that will not succeed.
        + correct limit-check in dname_to_dirnum(), missed a case when fixing
          for 8.2l, which caused pictmode.rc to not read properly.
        > patches by Clark Morgan:
        + correct codes for 8-bit PF1-PF4 in vmsvt.c
        + update vile.hlp for vmsvt.c's function key definitions, as well as
          a note about tilde-expansion on VMS.
        + add vtflash mode, for tcap.c and vmsvt.c

 (tom) 990202 (m)
        + suppress TTtypahead() call in sysmapped_c_avail() when we have made
          characters available in mapungetc().  This fixes a problem where
          type-ahead would get into the data copied from mapgetc_ungottenchars,
          breaking arrow key interpretation on slow connections.  (This was
          reported a few times since 971205, when the problem was introduced,
          but is difficult to reproduce.  Reported/tested by Clark Morgan).
        + implement mode mcolor, which lets user set the color of the
          modelines.  The choices are the same as for visual-matches (request
          by Han Leushuis <>).
        + update 'doingsweep' in one place only, do_sweep(), to ensure that the
          TTcursor() calls nest properly when a selection is aborted.
        + add vt220 7- and 8-bit function key definitions to vmsvt.c (request
          by Clark Morgan).
        + removed a FIXME in termio.c for read_vms_tty's assignment to nibuf,
          having confirmed that the document for the sys$qiow()'s read function
          says the device-dependent data stores a count of terminator
          characters (needed for VMS's equivalent to cbreak or cooked modes)
          rather than data that vile should process (patch by Clark Morgan).
        + prevent dobuf() from being interrupted by 'working' mode.

 (tom) 990126 (l)
        + add "~elsewith" directive to simplify use of fences in vile macros.
        + minor change to kbd_reply to allow abortc to be <control><space>,
          though otherwise nulls are still ignored in that function (request by
          Christian Lindig <>)
        + implement crude iteration-limit for complex fences to guard against
          blowup in error-handling.
        + correct/restore handling of keyboard interruption in complex fences
        + add rules to filters/makefile.wnt so that if $(LEX) is set, the
          build will use that for the lex/flex program and make the lex-based
        + add yywrap() dummy function to filters.c to reduce dependency on libs.
        + change casts in Member_Offset macro to long from int to avoid
          compiler warnings on IRIX 6.x with 64-bit architecture (reported by
          Steen Savstrup Kristensen <>).

 (tom) 990124 (k)
        + modify VMS logic in ttopen to use "SYS$COMMAND" rather than "TT:"
          since the latter does not work with the PIPE command added in VMS 7.x
          to mimics unix cmdline pipe functionality.  Vile couldn't use this
          command, though.  For example:
                $ pipe dir | vile
          failed with an "illegal i/o function" error.  This change allows vile
          to read from the pipe stream as well as retaining its ability to read
          from a redirected stdin (patch by Clark Morgan).
        + reset eofflag in inout_popen, since attribute_from_filter may
          otherwise see the EOF from the previous file reading operation, e.g.,
          if the file did not end with a newline.  Likewise set fileispipe,
          just in case it would be needed.
        + correct inconsistent spelling of cache variable in CF_TERMCAP_LIBS,
          which caused the configure script to ignore a predefined termcap or
          terminfo library.
        + correct order of -lXmu vs -lXext in Athena-widget configure test.
        + resync configure scripts against autoconf 2.13 + patches
        + modify is_vms_pathname(), is_version() to accept a '.' to delimit
          version number (reported by Clark Morgan).
        + implement $sres, i.e., 80/132 column switching for vmsvt.c (patch
          by Clark Morgan).
        + update version number for Vileserv, missed in 8.2j
        + rename some operators that accept a range to end with "-til", for
          consistency (reported by Paul Fox, Clark Morgan).
        + other improvements to perlfilt.l, e.g., underscores in numbers,
          a POD-format,, suggested by Brendan O'Dea.
        + simplify HighlightFilter macro - there is no need to report if no
          filter exists, after all.  This required renaming nroffmode to nrmode
          and pascalmode to pasmode (adapted from example by Brendan O'Dea).
        + apply "group" feature to complex fences, i.e., fence-if, ...,
          fence-fi.  This allows vile to match both while{...} and if{...}
          blocks, for a test-case by Kuntal M Daftary.  It works, but is very
          slow when choosing between patterns that are ambiguous, e.g., the
          different groups of patterns all end with a "}".
        + add "group" feature to majormodes, which allows user to define new
          instances of certain submodes.
        + ensure GCC_UNUSED is defined in filters.h for platforms that do not
          use the configure script (reported by Brian Moore).
        + minor fix to listvalueset() to avoid getting a double-newline.
        + improve makefilt.l, making it read keyword file.
        + add latexflt.l to install rule; various improvements to that
        + improved perlfilt.l symbol table and symbol-parsing based on
 (John P Cavanaugh <>).

 (tom) 981229 (j)
        + modify majormode preamble logic to set ignorecase if the majormode
          sets ignorecase.
        + modify tcap.c to use no_color_video capability to avoid overwriting
          colors with nonfunctioning video attributes.
        + modify html syntax filter to handle embedded JavaScript.
        + add filters for ada, awk, DOS batchfile, VAX DCL, Java, JavsScript,
          mail, nroff, sql, tcl/tk, termcap, terminfo, yacc
        + correct dependencies in filters/ for keywords files, which
          live in $(srcdir) (report by Brendan O'Dea, patch by Kevin Buettner).
        + workaround a parsing problem in lex-filt.l so that STATES and PATTERN
          can be distinguished.
        + various fixes to "e!", which did not prompt or repaint properly if
          the current buffer was from standard input, the unnamed buffer, or a
          temporary buffer.
        + correct a missing pointer increment in rewritten c-filt.c, which
          caused an infinite loop in some cases after '#'.
        + correct a couple of places where missing '\' character in lex files
          was interpreted as \a rather than \\a.
        + correct comparison in is_keyword (filters.c) which caused html
          keywords to not be highlighted.
        + add csh mode to filters.rc

 (tom) 981222 (i)
        + modify expand_pattern() to handle Unix-style wildcards on VMS (reported
          by Clark Morgan).
        + add configure option --with-fakevms, for testing VMS port.
        + change Cpp keyword in vile-c-filt to Preproc, for consistency.
        + move filter programs to filters subdirectory.  Split-out the keyfile
          and symbol management to new file filters.c, and used that to
          enhance the original vile-c-filt so it no longer has line-length
          limitations.  Added lex-based filters for cwebx, html, latex, make,
          perl, sh and vile macros.
        + prevent repeated call to free from old_namebst from memory-leak fix
          in 8.2g
        + add directives ~with and ~endwith, to simplify majormode expressions.
        + minor refinement to gui_isprint()
        > patches by Clark Morgan:
        + add pattern to finderr.c to use with DEC C compilers.
        + modify file globbing so that vile can read these two files from the
          command line (it already did read them via ":e"):
                ../readme or ~/vile.rc
        + documentation updates for README, README.VMS and README.PC

 (tom) 981214 (h)
        + simplify some trace-code using new functions visible_buff, lp_visible.
        + add trace-code for fences.c
        + correct check for zero-sized window, from 8.2e, which made it
          impossible to switch to a window with exactly one line (patch by
          Kevin Buettner).
        > patches by Clark Morgan:
        + modify ffsize() for VMS so that it returns a 0 rather than -1 if a
          call to 'fstat()' fails to get the size.  The file exists, so a zero
          makes vile read if via slowreadf, which works.
        + modify estruct.h to build using descrip.mms alone: the
          script defines logical "SYS" so that <sys/types.h> can be included,
          but the descrip.mms script does not do that.
        + update ifdef's to make vile build with VAX C (the 8.0b changes added
          CC_CANNOT_INIT_UNIONS, which is needed for that compiler).
        + document problem with DEC C, which causes vile to update revision
          dates on files even without writing the file.

 (tom) 981201 (g)
        + fix minor memory-leaks (main.c, bind.c, select.c)
        + modify finderr.c to use the given filename and ignore the associated
          buffer name when looking for matching buffers in case we have multiple
          files with similar names.  Modify getfile() to check first if the
          given parameter is a filename, rather than preferring match on a
          buffer name.
        + optimize tb_bappend and tb_sappend using memcpy rather than loop on
        + add checks for empty/missing filename to dobuf() and getfile() and
          menu.c to prevent core dump when using "Edit .vilerc" menu entry and
          no .vilerc exists (reported by John Gotts <>).
        + modify key-mappings in vmsvt.c to avoid defining VT52-style sequences,
          which introduce the possibility of confusing <esc>A for an arrow
          key (patch by Clark Morgan).
        + restore part of logic in C/C++ comment formatting modified in 8.0p;
          which introduced the undesired behavior of not formatting the first
          line of a comment (patch by Clark Morgan).
        + implement VMS-specific modes for record-format and record-size
          (initiated/tested by Clark Morgan).
        + change default search pattern for VMS to include only current
          versions of each file, unless mode "allversions" is set (request by
          Clark Morgan).

 (tom) 981124 (f)
        + updated CF_IMAKE_CFLAGS macro for configure script, fixes a problem
          configuring with --srcdir.
        + updated config.guess, config.sub from Lynx, adds cases for os390 and
        + update documentation to indicate that vile has been tested on NT 3.51
          (patch by Clark Morgan).
        + correct path separator in default $startup-path for VMS, which would
          prevent vile from reading vile.rc from a system directory (patch by
          Clark Morgan).
        + remove definitions for off_t, making ffsize() return B_COUNT.
        + modify fileio.c to trace return value from ffaccess(), ffexists(),
          ffronly(), ffropen() and ffsize().
        + modify vmsvt.c to support video attributes bold, underline and
          flash (initiated/tested by Clark Morgan).
        > new version of vileget from J Chris Coppick:
        + Vileserv now checks for the existence of ~/.vilesock, but not for the
          file type.  May be more portable.
        + Vileget has a -w option that causes it to wait until the given
          file(s) are written by xvile before it exits.  This could be used in
          conjunction with a mail program for instance.  To use this option,
          you have to set up a write-hook procedure.  See the doc for vileget.

 (tom) 981114 (e)
        + corrected TTcursor logic interaction with xterm-mouse so the cursor
          does not remain invisible after extending a selection.
        + modify so that xvile can be build with --disable-extensions
        + correct ifdef for SYS_VMS which was hiding ifdefs for setsid
        + add script to fix perl-path when installing scripts such
          as vileget.
        + document 'sentences' mode in vile.hlp (patch by Clark Morgan).
        + correct logic in previous-sentence, which checked for end-of-line
          state rather than empty-line in one place, causing the function to
          return the end of the previous line when starting on leading
          whitespace rather than the actual beginning of the sentence (reported
          by Clark Morgan).
        + add "~hidden" macro directive, to suppress 'update()' logic and
          status check for the current macro line.
        + add check for zero-sized window to 'update()' function, to guard
          against attempts to display an incomplete window as a result of
          a read-hook (reported by Sean Ahern).
        + add directory browser extension for vile written with the perl interface
          (from Kuntal M Daftary).
        + add, vileget perl scripts, which give you the ability to
          send edit requests to a running Vile, like gnuserv does for Emacs
          (From J Chris Coppick <>)
        + correct parameter passed to 'access()' function to use symbols.  The
          ffaccess() function relied on coincidence between values for
          did not hold for djgpp.  If all copies of vile.hlp were readonly, it
          was not "found" (reported by, this
          fixes a similar problem reported by Paul Laub <>
          stating that readonly-on-readonly did not work on DOS).

 (tom) 981112 (d)
        + correct/simplify handling of string literals in vile-c-filt, which did
          not treat single quotes and double quotes symmetrically.
        + correct an error in vile-c-filt which caused the ending quote of
          a string to be ignored if it appeared in the first column.
        + add new terminal function TTcursor, to disable cursor display during
          screen updates and during multimotion.  This makes vile display
          better on FTP Software's TNVTPlus wyse50 emulation.
        + restore visual-matches after attribute-from-filter.

 (tom) 981110 (c)
        + implement a new macro directive, "~local" which saves the current
          value of $variables and %variables, restoring them at the end of the
          buffer/macro which is being executed.  This does not (yet) apply to
          mode values.
        + rename some functions to make them easier to grep (token to get_token,
          macarg to mac_tokval, macliteralarg to mac_literalarg).
        + free old attributes in attribute_from_filter() before adding new ones.
        + correct an off-by-one error in attribute_from_filter() which caused
          the second and following attributes to be shifted by one position.
        + change patmatch to a TBUFF to simplify buffer-overrun checks, fix an
          off-by-one error in 'savematch()' which caused a core dump.
        + modify so that Perl interpreter processes END blocks and global
          destructors when vile exits (patch by Brendan O'Dea).
        + updated example for C filter to use attribute-from-filter (patch by
          Clark Morgan).

 (tom) 981106 (b)
        + add new command attribute-from-filter.
        + modify allocation of hypercmd value in select.c to use TBUFF's, fixing
          a use of uninitialized memory.
        + disable keyboard translation in Motif version of xvile (Gary Ross).
        > patches by Clark Morgan:
        + correct key translation in ntwinio.c so that pressing '^' (i.e.,
          shift+6) will no longer cause winvile to flash/beep.
        + README.PC updated to talk about creation and location of startup
        + win32 versions of editor now support the $title env var (users can
          now set and display title from a macro).  appropriate documentation
        + macros/doc and vile.hlp tweaked to show that $title is set using env
          var syntax.  although, surprisingly, the original example syntax
          works (i.e.,  set title "string").  i'm surprised because this is yet
          another undocumented aspect of the macro language--env vars are
          available via the set command.  i'm not sure I want to document this
          feature--there's quite a bit to digest in this language as it is,
        + the my_cd_action stored procedure example in vile.hlp has been
          changed to my-cd-action to prevent users from being surprised that
          '_' is a command terminator.
        + makefile.wnt modified so that the ole-automation version of winvile
          will suck up the new winvile icon (the linker won't accept multiple
          .RES files).
        + document environment variables in vile man-page.

 (tom) 981101 (a)
        + add icon for winvile (V-eyes 'pumpkin').
        + corrections to and, so it works for C comments
          (patch by Ryan Murray).
        + modify tokval() function to eliminate fixed-buffer limits for
          '@' prompts and '<' buffer-variables (reported by Clark Morgan).
        + add 'undoable' mode, as a performance convenience for filtering.
          Note that this purges the undo stack, because it suppresses update
          of the undo stack while changes may occur to the buffer.  Also,
          during filtering it prevents vile from retaining the buffer's contents
          in the kill buffer (prompted by a report by Holger Kummert
        + minor fixes for memory-leaks & test code for that (main.c, fileio.c,
        + modify dfputli and dfputi to output unsigned values to use in $pid
        + correct storeproc() so that it detects if tokens follow a macro's
          name on lines read from source'd file.  These tokens are used for
          annotating macros in describe-bindings (report by Clark Morgan, patch
          by Brendan O'Dea).
        > patches by Clark Morgan:
        + modify so that preceding :!<cmd> with an argument suppresses the
          [Press return to continue] prompt for winvile,
        + update/expand macros.doc
        + correct a limit-check when returning a buffer variable (eval.c).
        + convert $pid to unsigned hex rather than decimal on Win32.
        + make it possible to create vile-perl-api.doc on a win32 host.
        + add detail to README.PC with respect to building embedded perl.

Changes for vile 8.2 (released Sun Oct 25, 1998)

 (tom) 981025 (c)
        + check for null top_widget in x_close; other xvile crashes on VMS
          if I simply run xvile -"V".

 (tom) 981024 (b)
        + modify glob-expansion to always recognize "~" as a synonym for
          $HOME if Unix-style passwd interface does not return anything
          useful (adapted from a patch by Ed Henderson).
        + rename vile.spec to vile-8.1.spec, change configure option to use
          Athena widgets so xvile is built with menu support (Radek Liboska).
          ** This is not an 8.3 filename, but is used only on Linux.
        + modify to use X11R6 input method and dead key support (patch by
          Stanislav Meduna <>).
        + correct click-timeout value for xvile, overlooked in 8.1u (reported
          by Ryan Murray).
        + minor fixes to menu.c so that xvile builds on OpenVMS 7.2 with DEC C.
        > patches by Clark Morgan (mostly for visvile):
        + modified the w32 versions of vile so that during clipboard copy
          operations any character, c, in the following range:
              c > '~' && c >= val(printing-low) && c <= val(printing-high)
          is not translated to a hex representation (\xdd).
          I didn't use any other criteria (e.g., setlocale()) because I
          received no feedback from the person reporting the bug.
          Consequently, I don't know what particular locale value I should test
          (e.g., locale not "C" and not "" ??).  I also explored whether or not
          the w32 paste operations should similarly not translate data when
          copying from the clipboard.  For console vile, translation appears to
          be useful and necessary regardless of the printing-low or
          printing-high settings.  For winvile, translation is not strictly
          necessary because when printing-low is >= 128 and printing-high is <=
          255, winvile properly renders "highbit" ansi characters, such as
              opening quote
              closing quote
          However, the rendering of each highbit character is so small that the
          resultant text is extremely difficult to read.  Consequently, I
          elected to continue my small set of translations (refer to the "map"
          array in w32cbrd.c for a complete list).
          (from report by Jukka Keto <>)
        + extended/updated README.PC
        + add explanation of filterregion() portability (spawn.c)
        + modify in conjunction with visvile, to have the ability to redirect
          user-specified keystrokes to DevStudio.  For example, from winvile
          you can start the debugger, step the debugger, start a build, etc.  I
          think visvile is pretty useful now.  There's one more wrinkle I can
          envision adding at a later date (see visvile/readme.txt for details),
          but this feature is not a high priority (to _me_ :-) ).  The
          documentation of the redirected key feature is included in
          doc/visvile.doc .
        + add a new file called visvile/visvile.dsm (a collection of DevStudio
        + added an environment variable called $cfgopts to the editor.  From
          the help file:
                $cfgopts  comma-delimited list of "interesting" compiled options
                          (read only).  Currently tracked options include:
                perl    -> editor includes perl interpreter
                oleauto -> editor supports OLE automation.

 (tom) 981008 (a)
        + add logic to ins_anytime() to prevent recursion or use in minibuffer,
          e.g., when pressing the insert-key.
        + correct an ifdef for SYS_VMS in main.c from 8.0s which left other
          platforms using vfork (reported by Ryan Murray and Billy Little
          <> ).

Changes for vile 8.1 (released Fri Oct 02, 1998)

 (tom) 981002 (w)
        + modify xterm mouse-click handling so that clicking on the left margin
          when the window is right-shifted always shifts it left.  Before, if
          a tab fell on the left margin, the effective column was still in the
          visible part of the window.
        + back out redundant limit-check in display.c from 8.0u that caused
          an extra cell to be highlighted when doing full-line selection.

 (tom) 981001 (v)
        + updated install-rules for perl scripts.
        + set was_clean flag in all instances of ttclean(), fixing a problem
          where TTkopen() was not invoked on return from :sh command (reported
          by Ryan Murray).
        + strip trailing ^M's from and, add those to the
          list of Perl scripts in vile.hlp and makefiles (report/patch by
          Clark Morgan).
        + pass-through $(OPT) value in recursive-make in makefile.wnt (patch
          by Clark Morgan).
        + move logic to reset regionshape out of multimotion, to main.c's loop(),
          since commands such as "y2q<some motion>q" would otherwise be yanked
          in EXACT mode (reported by Ed Henderson).

 (tom) 980930 (u)
        + modify :ww command to ignore readonly buffers (reported by Chris
        + add sample Redhat RPM spec file "vile.spec" (from Radek Liboska
        + add code to allow user to color Motif pulldown menus, ifdef'd with
          OPT_MENUS_COLORED, normally off since I prefer the toolkit's color
          scheme (patch by Mark D Robinson <>)
        + modify multimotion to reset regionshape to the original value on
          return after a selection is made, or to EXACT if the selection is
          aborted.  This corrects a case where performing quoted fullline
          motion would cause a succeeding "cw" command to affect the whole line
          (reported by Yuri Antonik <>).
        + add,, which support syntax highlighting for perl,
          c and tcl (Kuntal M Daftary).
        + modify os2vio.c so that when running vile in fullscreen mode, bright
          colors are used rather than blinking colors.
        + undo incorrect use of VFCOL mask from my 7.2q change, which caused
          the pscreen array to record VAREV attributes on shifted-in rows.
        + minor optimization in vtset function to perform better on very long
        + modify x11.c to give xvile CDE-like quad-click support.  CDE's
          dtterms select the entire window (including scrollback) on a quad
          click.  Increased the timeout slightly to be able to repeatedly
          select this (patch by Ryan Murray).
        + documentation updates for visvile (patch by Clark Morgan).
        + fix a bug that prevented -font option from working on winvile
          (patch by Clark Morgan).

 (tom) 980925 (t)
        + correct two errors in AdjustedWidth and AdjustedHeight, making
          winvile resize properly when maximized, as well as not jumping when
          resizing after changing fontsize.
        + keep caret in winvile invisible until ttrow,ttcol point to a legal
          position, i.e., until initialization is complete.

 (tom) 980922 (s)
        + correct caret position and size in winvile after changing fontsize.
        + modify putctext() function to support setv of $word, $identifier,
          $qidentifier and $pathname.
        + rename "$wline" to "$wlines", add "$bchars" and "$blines" to return
          the number of characters and lines in the current buffer,
          respectively (request by Paul Askounis <>).
        + modify select.c to allow de-attributing attributed regions.  It takes
          care of the following scenarios now:
          - Non-overlapping regions were decided earlier on the basis on just
            line offsets and as a result worked correctly only for FULLLINE
            regions.  Now they are decided based on line and column offsets and
            so work correctly for all three region types.
          - when de-attributing a region, partially or completely overlapping
            with a previously attributed region, the whole of previous region
            was de-attributed instead of only the overlapping portion.  Now
            only the overlapping portion is de-attributed as long as we don't
            have any RECTANGLE regions.  The fix still does not include
            RECTANGLE regions.
          (patch by Kuntal M Daftary)
        + modify c-filt.c to allow color and text attributes simultaneously
          (patch by Gary Ross <ross@Ultimatech.COM>)
        + add watch.obj to descrip.mms and; change ifdef's for
          VMS consistently to SYS_VMS and comment-out Motif xvile definitions
          in descrip.mms in favor of X toolkit (reported by Andy Harper).
          This may make xvile build with DEC C, however Andy reports also that
          his library lacks XmCreatePullDownWindow, which is not simple to fix.

 (kev) 980919 (r)
        + buffer.c (zotbuf): Kill any fake windows associated with
          the buffer we're about to kill.
        + select.c (hyperspray): Only execute the first found hypertext
        + window.c (delwp): Added support for deleting fake windows.
          (push_fake_win, pop_fake_win): Removed #if 0'd out code.
        + x11.c (is_color_cursor):  Added this field back to
          TextWindowRec; Also added back code to initialize it in
          x_preparse_args() and test it in flush_line().  Without this
          code in place, non-color cursors will not blink properly
          when they are within selections.  [This was removed in
          vile-7.3w.  We should address the reasons for removing this
          code in some other way.]

 (tom) 980910 (q)
        + correct parenthesis for test of F4 change in 8.0l (winvile.c)
        + modify so that xvile builds with --disable-shell (eval.c).
        + correct off-by-one in scrollbar position for winvile.
        + correct computation in AdjustResizing function so that starting a
          window resizing does not change the initial window size (ntwinio.c).
        + improved ":!command" for winvile, by creating a transient console
          which closes when the user presses any key (patch by Clark Morgan).

 (tom) 980908 (p)
        + modify attribute rendition in win32 drivers (ntconio.c, ntwinio.c)
          to make highlighting work with colored text by reversing fg/bg.
        + modify colors in winvile to make lightgray distinct from gray
          (reported by Clark Morgan).
        + further modify shell_complete() to continue splitting command lines
          on blanks, e.g., ^X!command did not do filename completion just like
        + minor lint fixes, e.g,. signed/unsigned values (buffer.c, input.c).
        > patches by Clark Morgan (mostly for visvile):
        + implement logic to return $font value on winvile.
        + simplified some expressions in vile's comment-formatter to make it
          format C++ comments.
        + if visvile disabled, no other dialog options are editable
        + added more document type checking to avoid occasionally opening such
          things as dialog box resource scripts.
        + implemented "CWD set from opened document's path" option
        + implemented "Write all modified buffers to disk prior to build"
          option.  This feature doesn't work as well as it could due to a
          DevStudio (v5) bug.  Refer to ../doc/visvile.doc for further details.
        + implemented "Build log -> errbuf if build reports errs/warnings"

 (tom) 980903 (o)
        + correct 8.0n change for highlighting, fixing an off-by-one error in
          visual-matches (reported by Alex Wetmore).
        + remove SetCursor calls from ntwinio.c, since they obstruct WinNT from
          showing the resize-cursor, as well as causing the cursor to flicker
          around the window border.
        > patches by Clark Morgan:
        + add the ability to set winvile's font from the command line or via
          the environment variable "$font" (a la xvile).
        + modify OLE automation registration to accept a font specification,
          making it possible to configure both the font and screen geometry of
          future instances of winvile OLE automation servers.
        + remove some compiler warnings in ntwinio.c and correct the OLE
          registration logic for the "-geometry" switch (file w32reg.c).

 (tom) 980902 (n)
        + modify updattrs function so that video attributes applied to tabs and
          other nonprinting characters will paint all of the cells used to
          display those characters (request by Richar A Ward).
        + modify win32 drivers (ntconio.c and ntwinio.c) to make visual-matches
          override syntax highlighting (reported by Clark Morgan).
        + correct unstacking behavior for next-tags as per original request.
        + modify shell_complete() function, which is used in both normal
          filename completion, and in completing shell commands so that for at
          least the former case it will handle filenames with embedded blanks
          (analysis by Rick Sladkey <>).

 (tom) 980901 (m)
        + add a check to keep initial TTkopen from trashing the command-line
          help or version (termio.c).
        + implement token-type for macro label linenumber, e.g., tokens
          beginning with an '*'.
        + modify behavior of next-tags so that continued matches do not push
          the tags stack, but remain at the same level as the initial match
          (requested by Ed Henderson).
        + correct typo in change to imdying for the non-Unix case (patch by
          Clark Morgan).

 (tom) 980831 (l)
        + modify dbgwrite() message to show how to get out of the loop, since
          more than one person has thought vile is hung when it is awaiting
          a ^G after reporting a keyboard problem.
        + modify imdying() function to search for a temp-directory, preferring
          $TMPDIR, /var/tmp and /usr/tmp over /tmp.  Lengthened cmd buffer in
          that function since it was too small.  (reported by Duncan Barclay
        + correct logic for dragging scrollbar thumb in winvile which also
          moved cursor position unnecessarily (reported by Ed Henderson).
        + correct handling of Alt-F4 in winvile, which did not close the window
          because it was hidden by logic to support Win32 key modifiers
          (reported by Clark Morgan).
        + correct rendering of color 8 in winvile, which was black rather than
          gray (reported by Clark Morgan).
        + add gui_isprint() function to x11.c to test for characters which are
          nonprinting in xvile, override printing-low and printing-high modes
          to keep, for example, \80 to \A0 in printable form (main.c, x11.c)
        + added a TTkopen call to ttunclean to match the TTkclose in ttclean,
          fixes a problem where arrow keys did not work in the termcap version
          after a :sh command (reported by Ryan Murray).
        + modify configure script tests for termcap/terminfo libraries to allow
          $LIBS to have the corresponding libraries (for Ryan Murray, who wants
          to override the check for -lcurses).
        + correct handling of configure --without-perl, which still tried to
          use perl (reported by Ryan Murray).
        + add autoconf macro CF_PROG_PERL, based on macro from Brendan O'Dea.
        + remove x_quit function, using normal imdying function to handle
          SIGHUP and SIGTERM for xvile (reported by Shawn Halpenny).
        > patches by Clark Morgan:
        + remove spurious rumor in doc/visvile.doc
        + winvile shows file name in title bar
        + winvile ole automation server now catches bogus command line
          arguments before attempting to process -Or switch.

 (tom) 980827 (k)
        + add gui_version() function for winvile, to handle -V option (reported
          by Clark Morgan).
        + set flags for bminip and wminip so that all control characters except
          for newline are echoed as in list-mode (display.c, window.c).
        + correct rendering of termcap color while highlight-selection is
          active (tcap.c)
        + corrected logic of '<' register so it captures both calls on TTgetc
          in map.c, otherwise it missed the 'M' in xterm mouse clicks.
        + revise xterm mouse code to support movement of modelines by
          "dragging" button 1, and selection/extension with buttons 1 and 3.
          Integrated with multimotion() function (select.c, tcap.c).
        + fix a couple of memory leaks
        > patches by Clark Morgan:
        + adds _some_ winvile integration to DevStudio Version 5.  In
          particular, this patch creates a component called visvile.dll, which
          is a DevStudio-compatible add-in that invokes an OLE-compatible
          version of winvile when editing/browsing text/source documents.
          Visvile.dll, a work in progress, is heavily based on visvim.dll.
          Full documentation is included in the new file doc/visvile.doc.
        + add InsertMode and IsMinimized functions for OLE interface.
        + remove unneeded assert's (winreg.c).
        + always set force-console mode for Win95 (main.c).
        + add command-line options to winvile to support OLE (ntwinio.c).

 (tom) 980816 (j)

        + implement a simple usage/popup for winvile.
        + correct a problem with cursor-droppings in winvile when the mouse
          is clicked on the modeline.
        + implement scrollbars for winvile (ntwinio.c)
        > patches by Clark Morgan:
        + changes to allow winvile to be built as an OLE automation server.
          Included with this patch are several new files, including one called
          doc/oleauto.doc, which describes the build process and the relevant
          server options/features.

 (tom) 980727 (i)
        + modify makefile.djg to use -f option of rm, to work with djgpp 2.x
        + updated dependencies in makefile.wnt (patch by Clark Morgan).
        + restore old functionality for win32 ^X-!  (see 8.0c), but make a
          special check for its use in getting directory listings to avoid
          lockup with Thompson Toolkit Shell (patch by Clark Morgan).
        + change "%u" in lsprintf call in w32cbrd.c to "%d", fixes _snprintf
          change in 8.0h (reported by Clark Morgan).

 (tom) 980726 (h)
        + updated config.guess, config.sub based on automake 1.3.
        + combine some logic in file.c with new function strip_if_dosmode().
        + correct typo in perl.xs from 8.0g
        + change win32 _snprintf calls to lsprintf, to build with Borland C++.
        + modify makefile.wnt to build with Perl 5.004, which is missing a
          global for 'rs' on win32 (patch by Clark Morgan, analysis by Kevin).
        + modified Clark's change so that the Win32-specific keycodes are returned
          only when combined with key-modifiers (shift/alt/ctrl) that are specific
          to Win32.
        + mods to cause apropos and show-bindings to display proper binding
          strings for the Win32 clipboard-related features.  Also, modified
          ntconio to support noticed that winvile allows the user to sweep out
          a rectangular region when a control key is pressed during mouse-based
          text selection as in winvile, and documented in vile.hlp (patch by
          Clark Morgan).
        + correct message in win32 clipboard paste reporting the number of
          bytes transferred to the clipboard (patch by Clark Morgan).
        + updated makefile.blc, modified ifdefs to build with with Borland C++
          5.02 (patch by Ryan Murray <>).
        + rename update_scrollbar to gui_update_scrollbar as part of ongoing
          work on scrollbars for winvile.
        + move autoconf tests for OpenLook and Motif libraries into aclocal.m4,
          for reuse in other applications (e.g., xterm).

 (kev) 980725 (g)
        + perl.xs (incgv, rs, ofslen, ofs, ors, orslen): Added PL_ prefix
          to these for perl5.005.  Defined these in terms of the old
          non-prefixed names for older versions of perl5.

 (tom) 980717 (f)
        + corrected return-value of do_a_submode(), which was hiding a problem
          in the call on new_regexval() from set_mode_value().
        + correction to fences-begin and fences-end logic, to account for the
          size of the matched text when doing a reverse sweep.  Only one
          character from fences-end was selected, so that deleting a C-style
          comment would leave a '/' (reported by Clark Morgan).
        + add a couple of null-pointer checks in modes.c, to fix a case
          when 'comments' submode is not initialized.
        + implement previous-buffer command (requested by Quang Ngo
        + modify doindent() to adjust dot to point to the same text on exit as
          it did on entry.  This fixes an instance of autoindent in cmode where
          inserting a right-brace character at the wrapmargin caused the brace
          to be inserted _before_ the wrapped word (reported by Michel Oey
        + corrected missing brackets in that caused --with-scr=xm
          to be misinterpreted.
        + modify win32 clipboard support to enable the copying of an arbitrary
          region or named register to the windows clipboard (patch by Clark

 (tom) 980710 (e)
        + correct recompilation of [Error Expressions], by adding a check if
          the buffer is marked as changed, or if the number of lines in it
          has changed.  If [Error Expressions] was popped up to view its
          contents, that worked, but otherwise (e.g., in .vilerc), it did not
          trigger the recompile (reported by Brian Moore).
        + change winvile -geometry parameter to COLSxROWS, for consistency with
          X Window applications (e.g., xterm), and documented in vile.hlp.
        + correct parsing of line-specification when a leading ',' is used,
          e.g., ":,$d" (reported by hymie! <>).
        + documentation updates (patch by Clark Morgan).
        + modify logic in tags.c so that tags completion works when some of the
          tags files are missing (patch by Clark Morgan).

 (tom) 980708 (d)
        + correct offset for ending null in kbd_string(), which was beyond
          buffer limit - bug from 7.3f (patch by Chris Sherman
        + implement -geometry command-line option for winvile, and corresponding
          modifiable $pagelen and $pagewid values.
        + modify configure script to accept --with-screen=xaw and
          --with-screen=xm, i.e., lowercase screen values (reported by Ryan
          Murray <>).
        + modify winvile to read stdin when there's data available, e.g.,
          dir|winvile.  Tested on Win95 _and_ NT (patch by Clark Morgan).

 (tom) 980703 (c)
        + remove spurious 'void' in perl.xs which caused items to be miscounted
          (report by Kuntal M Daftary, patch by Kevin Buettner).
        + shorten identifiers to no more than 31 characters (reported by
          Graeme Miller).
        > patches by Clark Morgan:
        + fix for a problem reported by Paul Fox:  when a dos box has scroll
          bars (window size smaller than buffer size), then :!<dir> displays
          its output in a switched screen context that the user can't examine.
          This applies to console vile only (winvile has much worse problems in
          the same scenario :-).
        + changes to make ^X-!  use the same code path as filter-region and
          read-pipe when the host is win32-based.
        + implement paste-from-clipboard for win32, bound to Shift+Insert
        + add a new documentation file (doc/w32modes.doc) that describes the
          optimum settings for win32 modes when the host OS is not NT4.

 (tom) 980702 (b)
        + change highlighting rule in vile-c-filt to highlight only the
          "#" and keyword on preprocessor lines (patch by Paul Fox).
        + dynamically allocate pm_buffer array in menu.c, eliminating limit on
          number of menu items (reported by William Yuan
        + new configure macro CF_CC_INIT_UNIONS checks for compilers that
          cannot initialize a union, e.g, a K&R compiler using unproto.
          Ifdef'd union in CMDFUNC to work in that case.
        + correct spelling of EXTRA_LOAD_FLAGS in CF_IMAKE_CFLAGS configure
        + set VIEWOK flag on stored-procedure buffers, otherwise they cannot
          be used in buffers set "view" (reported by Larry Gensch).
        + rename character-type names to use "vl" prefix, to avoid conflict
          with ctype.h names on Digital Unix 5.0 (patch by Larry Gensch).
        + note that $progname may be "winvile" (patch by Clark Morgan).
        + modify and so that $(datadir)/perl is not
          created unless vile is configured --with-perl (patch by Brendan
        + require perl 5.004 since the XS interface is dependent upon tied file
          handles, which are not completely implemented in 5.003 (request by
          Brendan O'Dea).

 (kev) 980606 (a)
        + perl.xs (svrs): No longer a global static variable.
          (perl_init): Don't initialize svrs here anymore.  Also, stifle
          compiler warning.
          (READLINE): Declare and initialize svrs here, but only for
          platforms on which it's broken.
          (perl_default_region, do_perl_cmd, set_region): Adjust r_size
          field in region returned by getregion to account for buffers
          which don't have a trailing newline.
          (newVBrv): call gv_IOadd() in order to be able to use $. with
          the filehandles.
          (newVBrv, do_perl_cmd, set_region): Initialize $. .
          (READLINE): increment (or advance) $. as appropriate.

          [Brendan O'Dea sent me patches for much of the above.]

This change log started on Monday Jun 8, 1998.