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