File: BUGS

package info (click to toggle)
elvis 2.1i-3
  • links: PTS
  • area: non-free
  • in suites: hamm
  • size: 4,120 kB
  • ctags: 5,838
  • sloc: ansic: 53,854; sh: 811; makefile: 263
file content (1097 lines) | stat: -rw-r--r-- 49,676 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
REPORT BUGS TO kirkenda@cs.pdx.edu (STEVE KIRKENDALL)

NOTE: Each bug in this file is marked with either "*", "/", or "?".
The "*" means the bug is still pending.  The "/" means that I believe it has
been solved.  A "?" means that I've done some work on it, and *hope* it is
solved because it seems to work better but I never really understood what
was wrong in the first place.  A "?" will become a "/" if I don't receive
more reports of that bug.  About 80% of this file lists *fixed* bugs.

NOTE: Not all of these are truly bugs.  This file also serves as my "to do"
list, so some items are just unimplemented features that sounded like a good
idea at one time or another.

/ In "untar.c", the typedefs are apparently clashing with similar typedefs in
  <stdio.h>, on some systems.  Change the names of those types in untar.c.

/ Check the manual for typos!

/ Need to add NEED_MEMMOVE, and use it for older SunOS.

/ The "man" display mode doesn't handle long section names.  At the very least
  it should truncate them!

/ To compile elvis under Solaris2 with "cc" (not "gcc"), you need to add
  "-Dconst=" to the value of the CC macro in Makefile.

* ":set global" scrolls off the top of the screen.  Something should be done
  about that.

* Document the meaning of "!" for each ex command.

* In WinElvis, the "windows" lptype is counter-intuitive.  It changes the
  lplines and lpcolumn options to correspond to the font size and paper size.
  This is the opposite from the "ps" and "ps2" lptypes, which change the
  font size to squeeze lplines by lpcolumns characters on a page.

/ The sesclose() function shouldn't attempt I/O on the session file unless
  the session file has been successfully opened.  Currently, elvis can get
  stuck in an endless loop giving fatal error messages if you set SESSIONPATH
  to a bad value.

* Is `ref' broken?  It can't seem to find variables.

* Trouble with the :& and :~ commands: They are supposed to discard any flags
  from the original :s command, and accept new flags.  (This implies that the
  visual ~ command also discards the old flags.)  Also, :& should always use
  the regexp from the previous :s command, but :~ should use the most recent
  regexp used in any context.

* When an href in a remote web page contains just a file name elvis tends
  to mangle it.  From ftp://ftp.cs.pdx.edu/pub/elvis/unreleased/README.html,
  <A HREF="/pub/elvis/untar.c"> is treated as a reference to
  ftp://ftp.cs.pdx.edu//ub/elvis/unreleased/pub/elvis/untar.c

* Sometimes crashes after running multiple external commands.  Particularly
  noticible with :make, but I think it affects all external programs.
  Reported under Linux.

	I used to be able to reproduce this easily, but now I can't.  Either
	some other change fixed this or changed its symptoms, or I just forgot
	how to reproduce it.

* A core dump has been reported while entering a ":x" command.  The dump
  apparently occurred inside the mapdo() function after most of the local
  variables got scrambled.

	This may be a variation of the "crash after running an external
	program" bug.  The :x command can save the file, and if the backup
	option is set, then elvis runs "cp" or "copy", depending on the OS.

	In addition, a potential bug in the termcap interface was fixed.

* Some crashes/hangs have been reported under Linux.  These may have something
  to do with <u> and <Shift-U> commands.  Usually there are no clues, but at
  least twice the buffer filled with ^@ characters.  Reported by Steve Woodard,
  woodard@kodakr.kodak.com

	I enabled assert() checking and allocation debugging, and played
	around with those commands hundreds of times without being able to
	reproduce it.  It may be compiler- or OS-dependent.

	1/20: It happened to me while I was just editing a plain old text file.
	One of the numbered cut buffers' bufinfo blocks was recycled as a text
	block, and that cause blkread to fail as it tried to find a bogus
	blklist block.

	This happened to me again, shortly after a <Shift-U>.  Definitely a
	problem there.  I've inspected the code though (bufundo() in buffer.c)
	and it seems correct.

* The "ref" program doesn't understand compound tag addresses, such as
	bar	foo.h	/^struct foo$/;/^ int bar;$/;"	struct:foo

* The "ref" program should be modified to support "./tags".  In fact, does
  it even support "tags" (file name instead of directory name)?

	How can it support "./tags" when ref doesn't know which file you're
	editing?  To do this right, I'd probably need to add a "-f fromfile"
	option.

* The value of the blkcache option can have a *HUGE* effect on the speed of
  elvis.  Why should a large cache be necessary?  A macro may crawl when
  blkcache=150, and fly when blkcache=200.

* An ex search command (:/foo) doesn't highlight text when autoselect is true.
  This is unfortunate, because the X11 [Search] button uses that command.

* Problems with the "ctags" program:
  1) `extern "C"' seems to confuse it a lot.
  2) It doesn't know that #defines can't be in a class.
  3) A predeclaration of a class name (e.g., "class MyClass;") generates a
     tag but shouldn't.
  4) Bodies of class declarations aren't scanned but should be (with all
     generated tags being declared as being in that class).
     And could enum values maybe be detected as part of the same fix?
  5) C++ destructors (e.g., ~classname(void)) aren't found.

* When using <a name=...>...</a> to define a name anchor, elvis shouldn't
  display the anchor's text like an href link.

* Reduce the left margin for the markup display modes.  This is particularly
  important for "html", where many preformatted documents are slightly too wide
  to fit in just 72 columns.  Suggestion: Make <H1> center its title, and
  shift everything else four columns to the left.

* In "html" mode, if a single displayed line contains more than one link,
  elvis always seems to follow the *first* link regardless of which one you
  click on.  This is bad for some menu bars.  (May only occur with images.)

* Modify "elvis.ps" to sense the paper size automatically.  Replace "lppaper"
  with a list of driver-specific options; for PS, this should include frame,
  bar, punch, clipboard, font, and tray.  (The frame, bar, and punch options
  are already implemented, but you need to edit elvis.ps to change them.)

* Under X11, if you replace the controlfont with another of the same height,
  elvis doesn't redraw the toolbar.  Labels don't fit in the buttons anymore!

* Under X11, if a dialog has a locked field which is wider than a normal string
  field, it is shifted.  This is bad, because locked fields have no cursor so
  there is no way to shift it back again.  Also, the overall dialog width is
  chosen with the assumption that the whole locked field is visible.

* The X11 interface should support backtabs, for moving backward through
  links in an HTML file.  Map <ISO_Left_Tab> to... what?  ^K and ^_ are
  available.  If I add vim-style g commands, then <g><Tab> would make sense.
  Is there a termcap/terminfo field for describing backtabs?

* Problem: The "squid" HTTP proxy, when handling an FTP request to read a
  directory, returns an HTML document similar to Elvis' own format, but
  it uses relative file names in a weird way.  I suspect squid's method is
  incompatible with that used in "index.html" files on some FTP sites
  such as ftp://sunsite.unc.edu/pub/Linux/!INDEX.html, so this is probably
  really a squid bug, but I need to check.

* Elvis gets confused if you load a URL which has no filename component,
  such as "http://www.yahoo.com".  Adding a trailing slash avoids that.

* Some FTP servers make non-existent files look like directories.
  Specifically, the SIZE command returns "550-Argument is not a plain file".
  Need a better way to detect non-existent files.

* If the cursor is past the end of the buffer, then it looks weird.  This
  could be fixed by adding a "virtual" newline to the end of a file which
  doesn't end with a real one.

* If you use the scrollbar to scroll to the bottom of a large file in html,
  man, or hex mode, then when you reach the very end of the file (where you
  would expect see no part of the file, just ~'s) it jumps back so the window
  is completely filled with lines from the file.

* Can't run a shell command in the background under X11, because elvis waits
  for an EOF condition on its stdout/stderr.  Should something be done about
  that?  (You can do it if you redirect the program's stdout and stderr.)

	Maybe make the x11 prgopen() wrapper check for a '&' command, and
	force "willread" to False in that situation.

* The "hex" display mode does strange things to 0x0a characters.  Those quirks
  are hard to eliminate, because that's the newline character and several
  commands are sensitive to newlines.  But eventually something should be done.

* In the "syntax" display mode, if a multi-line comment ends on the last
  character of the line just above the top of the window, and the comment
  ender string is one character long (which happens in Pascal, but not C),
  then elvis assumes that the top line of the window is a continuation of
  that comment.

* Ex command-line history is very weird.  If you recall an earlier command
  and edit it, you're actually editing the historic version.  I would prefer
  to have a new copy of that line created at the end of the history buffer,
  and have the editing take place on that new copy.

  The same thing happens with regular-expression history, and filter-program
  history.

* elvis's prompt cannot be answered from a keyboard map, an
  example (simplified and therefore useless):

	      :map #1 :!more %^M^M

  the second ^M should answer elvis's prompt, that occurs after
  the shell escape, automatically (only for convenience, because
  `more' has its own prompt), but this doesn't work: I have to
  press <Return> manually - but then elvis recognizes the ^M - and
  moves the cursor one line down (to my surprise: if I map a
  single character to any key I can use this key to answer the
  prompt!)

* In the installation routine, create links named "vi", "ex", and "view".
  Similarly, supply .BAT files or something for Win32.

* Some problems have been reported while trying to recover files.  Either
  there's a bug, or I need to improve the documentation.

* Sometimes text changes as you move the cursor over it in HTML mode.  This
  has also been reported in Hex mode, but I wasn't able to reproduce that, and
  it could easily have been a configuration problem anyway. (:set nonascii=...)

-------------------------------------------------------------------------------
? Under X11, elvis was reported to get stuck in a loop while trying to step
  through the toolbar buttons in the x_tb_predict() function.

	It looks like there was only one button in the toolbar, and the
	buttons are organized in a circular list.  They shouldn't be a
	circular list!  How could that happen?

	This may have some indirect relationship to the way that the default
	geometry is parsed.  The system where this was reported had a
	geometry string that looked like "80x25+130" -- with no "+Y" value.

? Trouble decoding URL-encoded addresses?  Compare elvis' code to that of
  VFY.  Also compare the osnet.c file to the VFY's code.

? Sometimes the X11 interface refuses to give up keyboard focus.  I've seen
  this *VERY RARELY* with FVWM under Linux.  It has also been reported under
  OLVWM, and is supposed to be very common under TWM.  I suspect there is a
  race condition, perhaps because elvis (or something else?) isn't including
  a timestamp on a request?

	Hopefully this was a side-effect of the bug which caused elvis to
	request an invalid window size (width != basewidth + integer * inc).
	That bug caused elvis and the window manager to fight about window
	sizes (and thus burn a lot of CPU cycles!) which may have lead the
	window manager to treat elvis windows differently.

? Does elvis handle ^M in macros differently than the standard vi?

	MS-DOS handles them differently than the standard Unix.  I suspect
	that's the main problem.  Elvis should try to avoid dependencies
	like that, though; perhaps ":source" should always read ex scripts
	in "unix" mode?

? In the Win32/console version, the handling of the "dead" keys (^, ' and `)
  is wrong, they produce three characters, for instance ^<space> inserts #)^

/ the read command omits the message 'read x lines' in some
  circumstances, one case that I can reproduce:

  call elvis for a new (empty) file, then do

	  :r !echo "abc\ndef"
  twice

  	I couldnt reproduce this here.  Hopefully that means it is fixed,
  	but I doubt it.

/ In lib/elvis.bwf, the Win32 copy command doesn't like the ">NUL".

	Unable to verify this bug; it works for me.  I have made a few small
	changes to osprg.c, but as far as I can tell, it should also have
	worked before those changes.  From the description of this bug, it
	sounds like ">NUL" was being passed to COPY.EXE as an argument.

/ A URL with empty parameters ("http://localhost/sample.html?") has been
  reported to cause core dumps.  I was unable to reproduce this myself.
  It is possible that some other change that I made to the code has fixed
  this.

	Could not reproduce this.

/ Elvis got hung on a slow machine running X11.  The cursor continued to blink,
  but elvis didn't respond to any events, including Expose or KeyPress events.

	Unable to reproduce this.

/ These commands, taken from elvis.brf, cause a trap under NT:
  > I suppose you could make "elvis.brf" check the file's write permissions,
  > and check it out if it is read-only.  The following UNTESTED lines should
  > do the job:
  > 
  >         if dirperm(filename) == "readonly"
  >         then !co -l %
  >         if dirperm(filename) == "readwrite"
  >         then set noreadonly

	Worked for me.  (Actually, I used "then !attr -r %" since I don't
	have RCS for Win32.)

/ The NT console port throws away any characters that the user types into
  the console window before elvis creates its own console buffer.  Ideally
  it shouldn't do that.

	I don't think it does.  It can be hard to tell, since (on my NT system
	at least) elvis creates its console buffer after only a second or so.
	But it looks like it works, and if the SetConsoleMode() functions do
	clobber the typeahead buffer, I'm not sure how to tell it not to do
	that.

/ A long (>255 chars) error message from a compiler caused elvis to dump core.
  This was while running :make, of course.

	There's no obvious reason for this to happen.  All of the buffers for
	holding parsed parts of the error message are dynamically allocated
	and grow when necessary.  Perhaps the msg() command caused calc.c's
	buffer to overflow?

	This was actually reported for 2.0, not 2.1.  I was able to reproduce
	it under 2.0 but not 2.1, so I'll assume it was fixed somewhere along
	the way.

-------------------------------------------------------------------------------
/ Change version to "2.1i-beta".

/ The "-b blksize" option doesn't verify that the requested size is a power
  of 2.  It must!

/ The command "elvis -Gquit -cq -b16384" causes a core dump.

	Actually, anything that generated a non-fatal, non-status message
	was causing core dumps when elvis was invoked with the "quit" or
	"script" user interfaces.

/ It would be nice if regexp character classes allowed extra characters after
  the :alnum: or whatever.  E.g., /[:alpha:_][:alnum:_]*/ find C identifiers.
  MORE IMPORTANTLY, did I really implement the right syntax?  The POSIX specs
  could be interpretted as meaning that you need an extra set of brackets
  around the named classes.

	Apparently POSIX does require an extra set of brackets, as in
	/[[:alpha:]_][[:alnum:]_]*/ for matching C identifiers.  I've changed
	elvis' regexp code, and the lib/elvisre.html documentation file.

/ The visual / command doesn't allow / in a character class.  In fact, it
  appears that *all* regular expression parsing code has this problem:
  ex addresses, and :g/:v/:s commands.  Tags may also have this problem,
  but since tag addresses never use character classes it is a moot point.

/ Winelvis' "About" box should show the version number of the VERSION macro,
  or the o_version option.  (They're the same.)  In 2.1h and earlier, it is
  just hardcoded to show "2.1".

/ All aliases seem to be enclosed in curlies, even the ones which were really
  defined on a single line.  Since the presence of curlies affects the way
  arguments are handled, this is a problem.  Apparently arguments are appended
  on the *following* line, so they look like a separate command.

/ Added OS/2 port to general distribution.

/ Describe blksize in the manual.  Mention that it can only be set via -b#
  and explain why.

/ The manual entry for MS-DOS (9.1) states incorrectly that you can change
  the blksize option in a configuration file.

/ The manual needs to say more about filenames: wildcards, %, #, \, $env,
  (expr), ~, {a,b}, `command`.

/ Typo in manual: "altername" should be "alternate".

/ In elvisinp.html, ^R/^L get confused about the terms "window" & "screen".

/ In elvis.syn, MS-DOS file names should accept uppercase extensions as well
  as lowercase.  E.g., .BAT and .bat.

/ Make the X11 version check for WINDOWID *or* one of the known TERM values.

/ If $name isn't found, should elvis try for $NAME?  This would be handy under    Win95 because most programs are insensitive to the case of environment
  variables but getenv() is case-sensitive.  It could also be construed to be
  more CSH-like, which is probably a good thing.

/ How about a command-line option for redirecting stderr (and maybe stdout?)
  to a log file?  This would provide an easy-to-document means by which
  Windows95 users can store error messages.

/ The manual entry for "elvis.ses" still tries to use the old "binary" option.

/ If the "backup" option is set, :wq can cause a core dump at guitcap.c:1547

/ Tag searches on operators don't work?  E.g., if you double-click on <<
  in a C++ program, it should search for the tag "operator<<" but instead it
  just fails.

-------------------------------------------------------------------------------
/ Change version number to "2.1h-beta".

/ For MS-DOS, the ^C key doesn't interupt macros, or long commands.  This is
  apparently due to the fact that MS-DOS only checks for ^C during a few
  specific system calls, and elvis doesn't use those calls when it is busy
  executing commands.

	I fixed this by adding a bogus kbhit() call to the ttypoll() function.

/ The :a, :c, and :i commands are dropping the newline from the last line of
  multi-line text.

/ For X11, the XGetInputFocus() function now returns void instead of a success
  indicator.  Need to modify guix11/guix11.c

/ The sigaction() calls should not use sa_restorer, because it is deprecated.

/ The [charlist] notation in regular expressions doesn't allow ] to be included
  in a regexp.  It should be allowed as the first character, or after an initial
  ^ character for negating the list, or after a - as the end of a range.  Also
  need to document this.

/ In osunix/osnet.c, the function netread() tries to return -1 to indicate
  an error.  It should return False.

/ Problems remain with terminals that support dim text but not bright text.
  md/me/mh termcap attributes.

/ The backslash changes for aliases seems to have broken backslash handling
  for commands like...

  	g/foo/a\
  	one\
  	two

  ... which now adds an extra blank line.  Probably the :append command should
  be modified to expect a newline after the last line, and the normal '.'
  marker should ensure that the last added line ends with a newline.

/ In ex mode if you hit <Enter> at the end of a file, elvis should give a
  better error message than "bad delta".

/ In guiwin32/gwmsg.c, the gwclient_WM_DROPFILES() function needs to quote
  the dangerous characters (such as space) in the filename.

/ The X11 interface can get stuck in a loop in which it continually resizes
  the window.  Apparently if there are two or more resize requests in the
  queue, and elvis adjusts itself for the first one, then the others will
  can change it to still another size.  This has been reported under TWM
  after a simple resize action.

	A somewhat sleazy way to reproduce this: Start elvis.  From within
	elvis, start xkoules.  While elvis is waiting for xkoules to exit,
	resize the elvis window *twice*.  Exit xkoules.

	Possible fix: When elvis gets one configure request, it can try to
	read as many more as possible, and only use the last one.

? Problems with German keyboards under X11.  The modifiers don't appear to
  work correctly, which prevents { } [ ] ~ @ \ | from being enterable.
  Reported by Juergen Preuss (preuss@cach02.chm.tu-dresden.de).

	I borrowed some code from RXVT, which had borrowed it from XTerm.
	Hopefully this will solve the problem.  It doesn't seem to have
	broken anything for US keyboards, but that's all I can test myself.

/ ctags can't handle derived classes: "class foo: public bar {...}" should
  generate an entry for "foo" and ignore "bar".

/ The "tags" option needs to support a notation for "look in the directory of
  the current file".  Vim uses "./tags" for that.

/ After a <L command, I got the message "15 lines NULLed".

/ Some problems with the manual: The use of multiple -V flags should be
  explained somewhere.  The missing features of the DOS port should be
  writ large.

/ The "version" option isn't being initialized correctly.

/ Add a dummy "redraw" option.  Or maybe a real one.

/ Change the html entry in "elvis.syn" to include more tags.

/ When the "number" option is set, clicking the mouse sets the preferred
  column to the wrong value; If you click and then hit j/k, the cursor
  jumps to a different column.

/ A crash was reported in the TeX mode.  Overflowed a token, perhaps?

	Perhaps; the token-getting function wasn't smart enough to handle
	long comments or expressions.  It should be that smart now.

/ The online manual title says "elvis 2.0" -- change to "2.1".  Also, I saw
  a reference to "14.x" which should actually read "16.x"

/ The "Tips" chapter of the manual should have a section on how to make elvis
  run faster.

-------------------------------------------------------------------------------
/ Change version number to "2.1g-beta".

/ Consistent crashes have been reported under Linux in the lp() function
  when elvis is compiled with gcc -O2, with ELF binaries.  Unfortunately, it
  works correctly when compiled with gcc -g, so we can't narrow it down any
  more than that.  Reported by William Cheung, wcheung@scc.spiralcomm.com

/ In text-mode Win32, there are freaky problems reading from a program. 
  Just running a program works; filtering works; reading from a text-mode
  win32 executable such as ls.exe works.  Reading from anything else
  generally causes the output to show on your screen but not be inserted
  into the edit buffer.

	Got pipes working under Win95 in text mode, but not graphic mode.
	Would like to have pipes under graphic mode (WinElvis).

/ Add the ability to run an external tag search program.  A new "tagprg"
  options will be invoked, and its stdout will be parsed as a series of
  tag lines, all of which are assumed to match the requested tag.
  If tagprg is undefined, then use the standard built-in tag searches.

/ Both "windows" and "x11" have a scrollbar option, but they work differently.
  Should probably rename the x11 option to "xscrollbar".

/ Temp files tend to accumulate under Win32.  Problem in oswin32/osprg.c?

/ Rapid left-arrow while in input mode causes characters to be lost.  This
  only seems to show up in Win32 text-mode.

	This was fixed once before, I thought, in input.c:cleanup().
	I suspect new ctrl_o code in inputchange() is to blame for its
	reappearance.

/ Using backslashes for multi-line commands doesn't seem to work right.
  It looks like there's no terminating '\0'.

/ In WinElvis, the toolbar and scrollbar options don't quite work -- you can
  apparently turn them off, but you can't turn them back on again.

/ The names of the "windows" font options conflict with the "x11" options.
  This is a problem because both sets of names appear in the elvisopt.html
  file, and :help needs to be able to find the right one.

	Changed the names of the "windows" options from normalfont, boldfont,
	etc., to normalstyle, boldstyle, etc.  This makes more sense anyway,
	since their values aren't really font names.

/ ":w>>file" doesn't set the alternate file name correctly.  Also, the
  >>file notation doesn't seem to *create* a file if it doesn't exist;
  it should.

/ The :set command doesn't permit trailing spaces.  It should.

/ Need to find a way to nest the { ... } notation.

/ The following should be undoable in a single step: @x macros, :map macros,
  :@x macros, :ab abbreviations, aliases, and :g/:v commands (which are already
  undoable as a single step).

	One possible way to do this: make bufwilldo() check the eventcounter,
	and do nothing if it hasn't changed since the previous bufwilldo().

/ Under X11, toolbar labels should accept characters which aren't defined
  as meaning something else -- namely :"=?~ -- and trailing spaces should be
  ignored.

/ Aliases should not affect the behavior of the exthenflag variable.

/ Add :while and :do commands.  The while expression should be saved
  wherever the exthenflag flag is saved.

/ The htmlescape() function in dmmarkup.c is reported to cause core dumps
  on an RS6000 running AIX, when compiled with optimization enabled.  If
  compiled for debugging, it doesn't dump core so specifics are hard to
  come by on this one.

/ Under MS-DOS, elvis seems to write each character twice.  This was reported
  by a blind user who has a text-to-speech device hooked into his console.

	It doesn't do this with the termcap interface under Linux.  I suspect
	that it is having a hard time because the attribute and character
	bytes are written out seperately.

/ Large :copy commands can get screwed up.  Try editing a large file, such
  as ex.c, and insert line numbers at the start of each line ("%!cat -n").
  Then do a ":100,500co1000" command.

/ Sometimes keywords from elvis.syn are lost?  Saw some PERL code where
  "if" and "while" weren't in boldface.  The large number of PERL keywords
  may be a factor.

	Yes, that was it.  There was a silent limit of 256 keywords.  I have
	now increased that limit to 300 keywords.  I really need to recode
	the keyword hash table though -- it is unnecessarily kludgy.

/ X11 dialogs should support a "locked" data type, because some options can't
  be edited.  If a row doesn't specify an option name, then that row's type
  should be "locked"; this will allow dialogs to display immutable information
  which doesn't come from an option.  If a row has neither an option nor a
  value, then its label should be centered in the dialog.

/ Under MSDOS with TERM=dosansi or TERM=nansi, mouse highlighting is
  flakey, and linewrap causes some problems.  Also, running an external
  command causes the mouse cursor to vanish.

/ Should allow certain words to be customized by language:  Submit, Cancel,
  Help, True, False.  Create options named "true" and "false" for storing
  the local versions of those words; this will also have the pleasant side
  effect of allowing the english words "true" and "false" to be used as
  though they were Boolean literals in expressions.  The other words are
  only used by the "x11" user interface.

/ The saveregexp option doesn't do enough.  It protects the regexp, but
  it needs to protect the substitution text and the substitution flags too.

/ Need to replace <xmp></xmp> with <pre></pre> in the lib/*.html files.
  <xmp> is obsolete, and elvis doesn't implement it correctly anyway.
  Also add <code> to dmmarkup.c, as a synonym for <tt>, and use <code>
  in the lib/*.html files.

/ The :w command affects the value of the "exthenflag" flag.  The elvis.bwf
  and elvis.awf scripts (and others) should probably save the value of
  exthenflag, and restore it afterward.

/ In a :ab! abbreviation, expansion doesn't take place if the short form
  is the last thing on a command line.

/ Under Win32, it should be able to parse UNC names (\\machine\directory\file)

	Apparently the only missing piece is that elvis should not change
	the leading \\ to \.

/ The termcap interface can't use "dim" unless there is also a "bold" escape
  sequence.  There's no need for that!

/ The :ta command doesn't offer any way to supply values which contain
  colons or whitespace.

/ Long moves don't necessarily center the cursor line in the window.  See
  the "!!!" comment in dmnormal.c.  To fix this, I'll need to pass the
  window pointer into the setup function.  (Some other setup functions could
  benefit from this, too.)

/ The :ta command should be smarter about setting the previoustag option.
  Whenever you jump to a tag, previoustag should be set to the name of that
  tag.

/ Add a Windows version of the "quit" GUI to WinElvis.  The normal "quit"
  interface isn't supported there, and the text-mode version of elvis doesn't
  support "lptype=windows".

/ When ^L is defined as forcing a redraw in input mode, it can break some
  common macros.  Perhaps it should be left as a normal "insert me" character.
  Users could still redraw the screen while in input mode by typing ^O^L.

/ Bottom button of X11 scrollbar isn't drawn initially.  It appears after
  an expose event, or after any colon command including colon-backspace.
  I suspect the scrollbar is first drawn with a height of 0, and the top
  button is drawn over the top of the bottom button.

/ On AIX systems, the toolbar is drawn incorrectly.

/ Control-V should display a carat on the screen, while waiting for the
  quoted character.

--------------------------------------------------------------------------------
/ Change version number in version.h to "2.1f-alpha".  (n.b. I haven't been
  doing a consistent job of updating this list as bugs are fixed, or as new
  versions are uploaded.  There *were* some fixes between 2.1b and 2.1f.)

/ An expose event causes the scrollbar to be redrawn, even if it should really
  be blanked out (because the cursor is on the bottom row).

/ Under Win32 or DOS, text-mode "elvis -?" outputs a line of garbage after
  the help message.  The garbage consists of uninterpretted escape sequences,
  emitted as the termcap interface shuts itself down.

/ When invoked in the current directory, with the "exrc" option set, elvis
  will source the ./.exrc file twice.

/ Abbreviations can get stuck in a loop.  Self-referential abbreviations
  should be disallowed.  (Actually, should an abbreviation *ever* expand
  another embedded abbreviation?)

/ The :& command doesn't seem to be working correctly in all circumstances.
  After doing a ":%s/.$" on one buffer, and then switching to another buffer,
  the command ":%&" did not work.

	This is because the "elvis.arf" file uses a :s command to locate and
	execute modelines.  There is no easy way to fix this, unless you think
	":set nomodelines" is an acceptable solution.

	Here's an idea: Create a new "saveregexp" option.  Leave it on
	normally, but turn it off when doing the modeline search.  Also force
	it off while searching for tags for the "showtag" option.

/ The command ":g/old/s//new/g" doesn't work in 2.1e.  It worked in 2.0, so
  some recent change must have broken it.

/ When returning after a :bb command, the cursor is moved to the top of the
  buffer instead of its previous position.  The best way to fix this would
  be to add a "winpos" field to the BUFFER struct, and set it to the cursor
  position before each ^W command or ex command.

/ The X11 interface doesn't handle Expose events during time-consuming
  commands such as :make.

/ If bufdisplay is set to "man", "html", or "tex", then ^Wd should probably
  toggle between "syntax" and bufdisplay, rather than "normal" and bufdisplay,
  so the source text will be displayed with syntax coloring.

/ In ioopen(), the usestdio flag is never turned off.

/ The :make command is insensitive to the gui->poll function.

	It does set the pollfrequency option to 1 while it is running, but
	I think maybe it also needs to call the guipoll() function to reset
	its internal count-down.

	Update: It does detect it, but not until the next line comes in from
	the compiler.  This can take a while.

/ The :g and :v commands don't work correctly on last line.  If the last line
  is supposed to be affected, it appears to actually affect the *FIRST* line.

	The behavior of this bug is more complex than that, actually.  More
	testing is needed.

/ The :s command doesn't handle counts correctly.  It should treat a count as
  a quantity of lines, but instead it treats it as a selector for the instance
  of matching text to change in each line.

/ In the "x11" interface, the tool buttons should wait until the mouse button
  is released.  Otherwise the "quit" button could leave the mouse pointing at
  some totally unrelated window WITH A BUTTON PRESSED!  Surprise!

/ If the "number" option is set, then the printout should show line numbers.
  It should also cause page headers to be printed.

/ Often it would be handy to allow ":e !command" or ":sp !command" to fill an
  untitled buffer from a filter command.  For example, ":sp !man \@ | col -b"
  would cause a window to pop-up, showing the man-page for the word under the
  cursor.

/ In the syntax display mode, the directory in which the current file resides
  should assumed to be in the search path.  For example, if you're editing
  osunix/tcaphelp.c, and you double-click on "tcaposix.h", then elvis should
  be smart enough to load osunix/tcaposix.h.  Currently it isn't.

/ The assert() statement in ex_qall() needs "|| xinf->command==EX_ONLY".

/ If the backspace key sends ^? (and the tty settings indicate this) then
  elvis should treat ^? as ^H.

/ It would be nice if elvis supported HTML frames, in the least-complex
  manner possible: Treat <FRAME SRC=... ALT=...> like <A HREF=...>...</A>

  Similarly, it would be nice if an <IMG> which isn't an hypertext reference
  would fetch the image data (perhaps reading it into a temporary edit buffer)
  and then send it to a configurable program; the default should be "xv -"
  so the image is displayed by xv.

/ If ":make" is used in a window which is displaying an internal buffer
  (especially the "Elvis error list" buffer), and there is another window
  which is displaying a non-internal buffer, then the command should be run
  in that other window.  This is simply for convenience -- after going to the
  trouble of displaying an internal buffer in a window, the user probably
  doesn't want to use that same window to show a buggy source file.

/ Some older X-windows servers don't have XrmCombineFileDatabase().

/ If you are displaying a cut buffer in a window, then you can try to yank
  text from a cut buffer into itself... but cutyank() isn't smart enough to
  handle that correctly; elvis hangs.  Probably cut buffers should be locked.

/ The :pop command should wipe out the list of matching tags.  This will
  allow elvis's enhanced tags to act more like traditional tags for users
  who are in the habit of using ^]^T to glance at the definition of a tag.

/ The X11 resource "*foreground: somecolor" makes toolbar buttons unreadable.

/ The install procedure should copy lib/elvis.xpm and lib/elvis.xbm into the
  /usr/include/X11/{pix,bit}map directories.  Also, small icons would be nice
  (pixmaps of size next/normal=56x46, small=21x18, and mini=17x14)

/ The "Delete Window" button of the last elvis window should not simply fail;
  it should do a ":close" command instead.

/ In the "html" display mode, if a token begins with &nbsp; then elvis
  mistakes the token for a whitespace token; the remaining characters aren't
  displayed.

/ The x, X, ~, and r commands don't work correctly when the count exceeds
  the number of characters in the line.  They should implicitly reduce the
  count; but instead they're just ignoring the command.

	Actually, r and X are supposed to fail, and they do.
	x should fail, but elvis just deleted to left.  Now it fails correctly.
	~ should reduce the count.  It didn't before, but it does now.

/ The character search commands stop at a newline, even if the current display
  mode uses some other definition of a "line".

/ The X11 interface should handle GraphicsExpose events when scrolling a
  window which is partially obscured.

/ Add support for hardtabs/ht option.  And then ignore it, since elvis never
  outputs hard tabs.

/ The "flash" option doesn't work.

/ The current("word") function sometimes causes a core dump.  This occurs when
  the cursor isn't located on a word (but sometimes that works too).

/ Elvis uses an option named "buffers", but that clashes with a variable
  declared in some systems' <stdio.h> file.  Change to "elvis_buffers".

/ Elvis checks for :mh=: even if :me=: is undefined.  It shouldn't.

/ Under NT, in the GUI version, the Options/Syntax menu item brings up
  Dr. Watson.

/ Cut/Paste don't work in Win32/gui?

	Verified.  A true bug.  It attempts to cut/paste whole lines (?) via
	the ">/"< buffer, but the underlying GUI clipboard functions don't
	seem to work.

/ Win32: There is a limit to how small a window can be: 2 rows of 30 characters.
  Resizing the screen to be smaller than that (by dragging an edge/corner of
  the window frame) causes elvis to crash.

/ Win32: If you use a mouse click to position the cursor, and you jiggle
  the mouse slightly, then WinElvis starts highlighting text.  Xelvis is less
  sensitive to jiggles; it requires you to drag the mouse into a different
  character cell before it'll start highlighting, which seems to work well.

--------------------------------------------------------------------------------
/ Change version number in version.h to "2.1b-alpha"

/ The X icons still say "2.0", even though we're working on 2.1 now.

/ Some commands move the cursor to a different buffer when they shouldn't.
  For example, ":(otherbuf)1,20co." copies the lines correctly, but then it
  moves the cursor to line 20 of otherbuf.

/ The "x11" interface should ignore MotionNotify except after a ButtonPress.
  Although elvis only requests MotionNotify events while a button is held down,
  some servers send them at other times as well.

/ Ex parser doesn't support backslashes, for things like...

	:g/XXX/a\
	line1\
	line2

/ Under X, pasting from the clipboard doesn't work during, e.g., a "5s"
  command.  (Probably true of Win32 gui, too.)

/ Environment variables with underscores are not recognized in elvis scripts.

/ A more sophisticated method for handling EOF would be appreciated.
  Suggestion:
  	* Add a "readeol" option to each buffer, one of {unix, dos, mac, text,
  	  binary}, defaults to "text".
  	* Add a "writeeol" option to each buffer, one of {unix, dos, mac, text,
  	  binary, same}, defaults to "same".
  	* Add a "fileeol(filename)" function, returns the file's probable
  	  format, one of {unix, dos, mac, text, binary} by reading the first
  	  part of a file.  Returns "text" if no hard evidence of any other
  	  format.
	* Meanings of values: unix=LF, dos=CRLF, mac=CR, text=local convention,
	  binary=no modifications, same=current value of readeol.
	* The "elvis.brf" file could do a "let readeol=fileeol(filename)"
	  to detect non-text files automatically.

/ Need a way to prevent :make from loading an erroneous BINARY file.

/ The built-in calculator can easily overflow when fetching the value of an
  environment variable.  Possibly other situations, too.

/ Under Unixware, when the termcap interface writes a '\n' character, the
  cursor is forced to column 0.  Should use :do=: or :DO=: instead.

/ ":q!" doesn't turn off a buffer's "modified" flag or delete the buffer.

/ The guitcap file never checks the LINES and COLUMNS environment variables.

/ When entering a command line, ^Ocw places a $ as though it will replace
  the current word, but actually any text is inserted.

/ The "program" option isn't documented.

/ Under X11, some sites are missing the default fonts, or have goofy fonts
  aliased to "fixed" and "variable".  Probably appdefaults fix this for other
  applications.  Elvis should support some method of reading X resources.

/ It would be nice if untar.c kept the date and permissions from the archive.
  This can't be done in ANSI C, but if POSIX calls are supported then it can
  be.  Maybe check for _POSIX_SOURCE?  Also, it would be nice if the untar
  executable could be prepended to the archive, to produce a self-extracting
  archive.

/ Add a way to abbreviate (Elvis error list) and (Elvis map log).

	Done: You can now give use a quote character followed by the initials
	of any buffer in place of the buffer name.  So ("Eel) means the same
	as (Elvis error list).

/ The "warningbells" and "warpback" options are both abbreviated "wb".  Change
  "warpback" to "xwb".

/ The termcap gui should not attempt to catch SIGHUP.  It isn't necessary,
  and catching it can, in fact, cause the elvis process to go into a tight
  loop as it attempts to read from a dead tty.

/ Add ^Wo and :only commands -- like :qall except they only close (don't
  delete buffers) and don't affect the current window.

/ Maybe add a "showname" option, to display the buffer name on the status
  line?

/ The console's "Edit/Paste" menu item doesn't paste all of the characters
  that it should.  (Also, it doesn't work correctly for Chinese text... but
  that may be too big a problem for now.)

/ The manual should mention that "ignorecase" doesn't affect character classes.

/ The status line isn't redrawn when colors change.

/ The "instman.sh" script doesn't invoke elvis correctly to format the
  man-pages.  It uses "-gquit" instead of "-Gquit", and the EXINIT variable
  as no effect because ELVISPATH=dummy.

/ there seems to be a `!' substitution in command lines, this may
  be a "generalisation" of vi's command repetition `!!' (which
  allows command repetition and appending to a command, i.e.
  `!' substitution occurs only at the beginning of a command);
  IMHO the `original' behaviour (which was also implemented in
  elvis18) is better, because a substitution inside of a command
  is rarely needed, but now you have to quote all exclamation marks

/ in vi the `print' and `list' commands query the `number' flag
  (and behave according to it, i.e. print line numbers or not)

/ the join command could display a message like 'x lines joined'

/ In the termcap interface, if you hit <Esc> in command mode, the following
  character is eaten.

	This is normal.  Hitting <Esc> causes the terminal to be "alerted,"
	which has the side effect of throwing away any characters already in
	the type-ahead queue.

/ The defaultreadonly option is ignored.  The bufload() function resets each
  buffer's readonly flag before loading the file.

/ if I call the (ex) join command with an adress range of 1 line
  (not a single adress, sounds strange, but see below ...) it
  joins 2 lines, but -per definition- it should do nothing

  e.g.:           :3,3j             joins lines 3 and 4!

  why bother? ... try the following command:

                :v/./,/./-j

  in vi it compresses consecutive blank lines to one, but,
  due to the behavior of `join', elvis deletes all blank lines

/ the following I've already reported, but now I can describe the
  error more precisely, also I can give you a hint, how to fix
  it:

      elvis deletes one `level' of backslashes before passing a
      command to the shell (concerns ex's `!', read and write
      commands, NOT vi's filter command !)

  I think it's easy to fix, but you should prove it; in `ex.c'
  change line 1228:

		if (*refp && !CHARchr(toCHAR("%#!@\\"), **refp))
						  ^^
						  delete this

/ In the relative part of a line address, the "+" is optional.  I.e., the
  command ":.,.3y" should be identical to ":.,.+3y".

/ The command ":g/^/m0" should reverse the order of all lines, but elvis
  just gives the message "destination can't be inside source".

/ WinElvis doesn't print graphic characters correctly.

/ Add support for multi-line strings which don't require a backslash.

/ Typing some text and then (without hitting Esc) allowing the left arrow to
  autorepeat causes some characters to be lost.  This only happens under the
  X11 user interface.

/ The description of the "keywordprg" option says that $1 is replaced by the
  current word, but currently the word is appended to the option's value.

--------------------------------------------------------------------------------
/ Change version number in version.h to "2.1a-alpha"

/ Changing one option via the Options menu causes all options in that dialog
  to be set, so ":set" with no arguments causes them to be displayed.

  FIXED: This is actually due to a quirk in elvis' options.c file.  I've fixed
  it.  Previously elvis didn't store the default value for each option; now
  it'll save the values of all options immediately after executing "elvis.ini"
  as the defaults.  Each option's OPT_SET flag will be set or cleared after
  a value is assigned to the option, depending on whether the new value
  matches the default value.

/ Bug in filename completion under all Microsoft OSes (not just in Win32 gui):
  If you enter a directory name and partial file name using forward slashes,
  the substituted name will drop the directory name.  If I use a backslash,
  it works correctly.  For example, "guiwin32/gu<Tab>" becomes "guiwin.c" but
  "guiwin32\gu<Tab>" becomes "guiwin32\guiwin.c".

  FIXED, at least for Win32.  It is due to minor bugs in the osdir.c functions.

/ In the X11 user interface, I've received some requests for more configuration
  options for the cursor.  Some folks don't like the hollow rectangle.  Add a
  new "cursorstyle" option which can be set to hollow, opaque, or xor.

/ In addition to "xterm", perhaps guix11.test() should check for "iris-ansi"
  (for SGI) and "dtterm" (for CDE).

/ In text mode, the cursor jumps to lower-right corner after each keystroke.
  Annoying on slow terminals.  This appears to be an attempt to clear the line,
  by drawing a bunch of spaces before the statusline text (showmode, ruler).

/ Errors that occur interactively should not set exitcode to 1.

/ eventreplace() doesn't move the cursor to the correct location.

/ Add WinElvis and WinTags to the "makwin32.bat" file.

/ In WinElvis, if the text doesn't completely fill the window, then the
  scrollbar will look funny.  This is unavoidable.  We would like to have
  the scrollbar's thumb completely fill the scrollbar (since the text
  completely fills the window) but Win32 tries to do us a favor by removing
  the scrollbar in that situation.

/ :only can cause a core dump.  Try starting elvis without a file, running :sp
  and then :on

/ :close can close the last window.  It shouldn't.

	Actually, that's a pretty convenient behavior to support.  The window's
	"close" button does a :close, which should be able to close the last
	window... if there aren't any modified buffers.

/ Under Win32, if you move the pointer outside of the text window, it isn't
  restored to its intended shape when you move it back in again.

/ Under X11, the resource for button colors must not be named "foreground".
  That leads to a foreground-on-foreground problem, so button labels aren't
  legible.

/ Under X11, -client isn't sensitive to which machine the command is running
  on.  Perhaps the "ELVIS_SERVER" attribute name should be renamed to
  "ELVIS_ON_{hostname}".  Another problem is that user ids may differ --
  running in root and as a real user, for example.

/ Backslash needs to be treated literally in more situations, especially
  under Win32.  A name like "C:\tmp\_tempfile" should be treated literally.

  The worst case is something like "C:\temp\$wc\foo", where the "$wc" is
  supposed to be literal.  I don't think anything can make this be rational!
  The current code interprets the backslash as a quote for the $ character,
  so elvis loads "C:\temp$wc\foo".  If backslash was literal, it would try
  to perform environment variable substitution for "$wc".  The current
  behavior is about as good as it gets.

/ Does the ":lpr" command support ">>" to append to files?  It should.

/ If the buffer doesn't end with a newline, then the Y command will go into
  an endless loop.

/ Newly created windows should acquire input focus... and when entered
  interactively they do.  But for macros and the "elvis -client -c ..."
  command, this doesn't work correctly.

/ The :s command (not :s/old/new/) is supposed to repeat the previous
  :s/old/new/ command, but doesn't.  The :& command works correctly.

/ Under Win32, the italic font is shifted slightly to the left -- which is
  fine normally, but not after a ":set italicfont=n".  Then it clips off
  the uprights of many letters.

/ Skip the "Hit <Enter> to continue" prompt if we're in the middle of a map.

/ Tweak the tags stuff to use the proposed standard.
	- Allow :" after the address in field 3
	- Interpret file: as file:(tagfile) -- i.e., file: marks static tags
	- In the extra fields, the values are subjected to the following
	  translations: = becomes =3D, tab becomes =09, newline becomes =0A

/ Writing via ftp doesn't turn off the "writing" flag when complete.  This
  causes the next read to fail in an assert() statement.