/* This file is HISTORY
cb = "cured bug"
 9 Oct 96: I found uses for the Win95 `menu-logo' and `left window-logo' keys.
 7 Oct 96: cb (cosmetic): green menu was linefilled with ascii-0's not spaces.
16 Sep 96: sortlines() printout each iteration made quicker.
10 Sep 96: cb: moved lines kept old line.sl, so upsetting the new mark<mark.
30 Aug 96: I revised mark<mark so it runs quicker in buffers with many lines.
28 Aug 96: cb in sortlines(): occasionally deref-zero when checking zero mark.
 2 Aug 96: I added the codes for the 3 new keys on Windows 95 type keyboards.
24 Jun 96: cb in changemode(): some new PC's listed graphic modes as text modes.
21 Jun 96: I added changemode() to find & change screen mode during editing.
20 Jun 96: cb: formatinsetregion() caused false-alarm "infinite loop" moan.
30 May 96: cb: fault if go_to() a buffer which is in another window.
17 May 96: this week I added a spelling correcter.
17 May 96: cb: this week: bugs in the spelling checker.
30 Jan 96: if call arg1 is file on empty/nonexistent drive, gets default drive.
28 Jan 96: cb: fault during an initial directory-menu exited from AAEMACS.
27 Jan 96: now before main loop, if possible removes initial nameless buffer.
27 Jan 96: now complains on accessing nonexistent or empty drive (not CD-ROM).
26 Jan 96: in dir menu, `home' from root dir calls select-a-drive.
25 Jan 96: cb: going between dirs in dir menu was not removing the old menu.
19 Jan 96: cb: abort in accessing nonexistent drives. But still odd happenings
           when I access nonexistent drives when Novell is active.
11 Jan 96: in deltext() I deleted same lines twice, so emptydustbin() looped.
 5 Jan 96: tidying the displaying routines.
 5 Jan 96: cb: color region wrong if started in folded line starting off screen.
 3 Jan 96: various tidyings-up of read and write a buffer.
14 Nov 95: cb: buffer::go_to() was leaving Found etc -> the old buffer.
13 Nov 95: cb: unbindkey was unbinding mousemove instead of other mouse ops.
 6 Nov 95: magic string not finding if 1st char nonmagic > ascii 127.
 2 Nov 95: replacing: errata, & speeding up when no LF in old or new.
 1 Nov 95: cb: in region:: subroutines I wasn't updating beg & end for changes
           to the buffer, thus occasionally cursor or a mark went out of buffer.
25 Oct 95: cb: I found a BIG memory leak in region::delete() & region::repl().
24 Oct 95: writebuffer() now can write to same file or buffer again, with query.
           Rename-a-file prompt now shows all name. cb memory leak in deltext().
10 Oct 95: cb in val>>char: was also allowing char to == (-1)th char in string.
 6 Oct 95: cb: parse_a_function was accepting too few args, thus bad args.
 5 Oct 95: cb: subr Text->string only returning last line.
 2 Oct 95: altered fullfilename() to handle names starting \\ (net files)
28 Sep 95: added function lastkill, & added a way to keep track of & clean up
           strings left as function results.
22 Sep 95: removed repeated matter in getstring(); separate subr Text->string.
24 Aug 95: cb: getifn() truncated filename if "directory not found".
           new macro interrupt(n) with one long asm().
23 Aug 95: cb: cbrackets() hallucinating /* if region start on 2nd char in line.
22 Aug 95: cb in parameter specifications for yesno() and if().
17 Aug 95: bind-a-key now ignores mouse-move and mouse-button-goes-down.
 8 Aug 95: another warning about current EMM386 setting inserted in README.
 2 Aug 95: cb: callsubr() `correcting' after subr purposely misrecorded itself.
 2 Aug 95: menu added to getstring().
 1 Aug 95: the green menu can now directly call the character menu.
25 Jul 95: cb: 128+ inserted & '0' replaced by 0 in accentedletters().
14 Jul 95: cb in sortlines: dropping contents of lines > 0x4000 chars long
28 Jun 95: cb: aborts if a line got > 0x8000 long. (line.n is now (long) int.)
22 Jun 95: in green menu, click both buttons now gets help.
 6 Jun 95: cb: input/output aborts: on shortening a line, sometimes a mark was
           left in the lost part. A statement had got lost in editing.
24 May 95: I used _farpeek#() and _farpoke#() to write & read screen chars.
11 May 95: slight alteration to line==int after a very long line caused a crash.
10 May 95: buffer.write() now writes directly (I had a crash writing to file).
 9 May 95: Recompiled with -Wall. Removed many unused vars. Linked in an omitted
           branch of the alt-= menu.
 5 May 95: cb: call without arg, alt-del, exit at once caused longjmp to undef.
 5 May 95: mouse: added clickboth.
29 Apr 95: cb: abort: search in macro call was asking for inside-out dosmemget()
           ranges (big number to 80): patched by catching them in newcolor().
 4 Apr 95: cb: newcolor() got -ve `to' arg and crashed.
31 Mar 95: cb in my gets() in MAIN.CC
27 to      Converted to using DPMI to access all screen and low-DOS addresses
31 Mar 95: ready for the new `djgpp 2'. I had to jettison the old subr names
           menu due to obscure bad address fails.
26 Mar 95: in filefromdirmenu() I added ctrl-K = copy pathname to kill.
23 Mar 95: patch in main(): someone's copy rejected mode 3 because graphical
           screen present address range was valid also in his PC.
           I used memcpy() instead of my home-made string copiers in asm.
11 Mar 95: cb: funnies when getstring() called charfrommenu().
 5 Mar 95: directory menu now can sort by name or date or size or not at all.
 3 Mar 95: copy-directory-to-kill now includes total bytes.
27 Feb 95: cb: corrections re magic `/'. I added function formatinsetregion().
24 Feb 95: cb: in fold-long-lines mode a coloured region ended 1 char short if
           it was to end at eol.
20 Feb 95: cb: magic search: if alternative reached |, looped looking for ].
15 Feb 95: cb: reformat adding blank line after word longer than allowed width.
15 Feb 95: red arrow in info line 2nd char if any text off left edge of screen.
 9 Feb 95: cb: reformat not splitting overlong last line in file if without CR.
 8 Feb 95: I put mouse in getstring().
           cb in displaying an orange `m' in mousing mode with > 1 window.
           I added a menu of macros, bound to alt#.
 5 Feb 95: cb: literalchar: in mousing mode aborted on mouse-move & button-down.
 3 Feb 95: I put breakin() in checkspelling in case checking a word loops.
 1 Feb 95: cb: sometimes dir menu cursor flew back to current buffer unwanted.
           cb in check spelling: infinite recursion in trying remove/add `-e'.
24 Jan 95: More mouse work.
           cb: region.movetext() carried the start-defining mark with the text.
20 Jan 95: I finally got the mouse properly in.
           cb: buffermenu > new buffer > dir-menu returned wrong buffer.
20 Dec 94: I tried to put extra features in read-a-char, & thus found again that
            keeping on calling typahead() makes PC deaf sometimes to some keys.
20 Dec 94: cb: rep() now exits setting a flag, not longjmp (which caused error).
19 Dec 94: cb: inserted omitted `deletion' submenu link in menu.
 8 Nov 94: cb: line=int sometimes caused a segment violation on making a line
            longer (I was copying the new line length always).
26 Oct 94: I had to comment out the line `_ax=0x1f; int33();' in MAIN.CC
            (deactivate mouse driver) as with a new mouse it jammed tight.
13 Oct 94: I found that `x=44; is x==44?' (x is a graph screen byte) to test if
13 Oct 94:  graphical screen is there (to check for bad mode) is buggered up by
13 Oct 94:  optimization, so MAIN.CC had to be recompiled without optimization.
13 Oct 94:  (PS. 8 Nov 94: I have rewritten that line in assembler code.)
12 Oct 94: recompiled in Gnu C++ version 2.6.0, & resulting needed alterations.
28 Sep 94: added mark 999 = where cursor was before last command call.
26 Sep 94: cb: MAIN.CC ignored part of INFO.DAT, after 13 Sep 94 alterations.
19 Sep 94: improvements to FINDMODE.CC
19 Sep 94: cb in menu of commands: sometimes no pointer on entering a submenu.
13 Sep 94: now auto-checks for text mode & >=80 chars wide, so no need to state
            available modes in file INFODATA. But no check for colour/mono.
13 Sep 94: work on menu. Altered help so it doesn't reread help files each call.
12 Sep 94: added menu of commands, bound to alt=
 9 Sep 94: cb: literalchar was misrecording in macro when not in insert mode.
 8 Sep 94: cb: removed "is it in current directory?" from MAIN.CC as bug in it.
22 Aug 94: added mode to counterchange at cursor, as laptop cursor often faint.
 3 Jun 94: work on dictionary, and on one-line help for alt-I.
12 Apr 94: added the rest of the chemical elements to the spell dictionary.
 9 Apr 94: cb in incr search: stopped if cursor 1 char off right edge of screen.
21 Mar 94: added subroutine display.
 4 Mar 94: directory now shows how many bytes in directory (not in subdirs).
20 Jan 94: cb in showinfo(): counted eol as 2 bytes always,ignored `no CR' bits.
 2 Jan 94: cb in val::getifn(): reply '=' as buffer funnied later buffer args.
 3 Dec 93: search for magic now much quicker if 1st search char is not magic.
11 Nov 93: cb: put a Breakin() in sortlines().
11 Nov 93: cb: char-menu in get-a-string-reply got help instead.
 9 Nov 93: cb: illegal address if called with arg file on nonexistent directory.
 5 Nov 93: in macros, added labels and goto() and if().
 5 Nov 93: cb: macro::print() omitted final ';' when printing declarations.
19 Oct 93: cb: insertfile sometimes said falsely "inserting into same buffer".
 8 Oct 93: cb: ctrl-Q ctrl-J marked 'no CR' at <next> eol.
 8 Oct 93: added rename-a-file & drop-a-buffer to filefromdirmenu.
29 Sep 93: cb (minor) in filefromdirmenu.
22 Sep 93: cb in read a \nnn in string in translate() (read macro from file).
21 Sep 93: cb: fullfilename mishandling <drive>: without \ straight after.
19 Sep 93: cb: readmacros overwrote its recording.
19 Sep 93: del in buffer_menu now can remove unwanted buffers (not files).
18 Sep 93: cb (deref zero): found a bug that had crept into help apropos.
18 Sep 93: altminus in getstring now gets help.
17 Sep 93: ctrl-_ in filefromdirmenu now gets help.
 4 Sep 93: revised getkey() as preliminary to trying to get mouse in again.
 4 Sep 93: cb: skipsentence always skipped 1 sentence despite N.
31 Aug 93: added names of ten right keypad keypresses that I had missed before.
15 Aug 93: work on spelling checker; added magic ',' to accept any one alphanum.
 8 Aug 93: added mergefile.
 6 Aug 93: added a spelling checker.
14 Jun 93: cb: in print empty string, and was misplacing magic in read a string.
13 Jun 93: added checkup question on write to file, in case ^X ^S error for ^X S
13 Jun 93: added magic '=' = go to end of line.
 2 Jun 93: cb: address 0 in translate() in MACROS.CC if subr had too many args.
22 May 93: cb: macro call with arg misrecorded, so bad craziness on playback.
17 May 93: cb: sortlines() occasionally got into infinite loop.
26 Apr 93: cb: prbuffer() was not putting ';' on end of line.
26 Apr 93: sortlines() now bubbles alternately up and down to save time wasted
            getting a few lines from near the end to near the start of region.
22 Apr 93: cb: insert() at top-left-most char on screen moved buffer->dot OK,
            but not cursor except in fold-long-lines mode.
29 Mar 93: filefromdirmenu() can now create and delete empty directories.
11 Mar 93: macro stats end in ';' not eol. Rebinding buffer to same keyseq OK.
10 Mar 93: revisions to 'read a macro'.
 8 Mar 93: revised search for string.
 2 Mar 93: cb & put a prompt in literalchar().
17 Feb 93: cb: divide by zero in filefromdirmenu() of empty directory.
10 Feb 93: cb: infinite bugs in a little read-an-expression package.
 1 Feb 93: variables in macros; cb various bad craziness in macros.cc .
22 Jan 93: cb in moanifbound() when '*this' was a _char not a _keyseq.
22 Jan 93: Func & Subr arg lists are now short[] = _int etc.
12 Jan 93: cb in case 'B'-64 in modemenu(): was altering Fn.s making error.
11 Jan 93: cb re string length in %v format in pr_() in cc.cc
 5 Jan 93: cb that caused bad address in prbuffer().
16 Dec 92: cb: deref_zeros & funnies re the "(no file)" buffer.
 7 Dec 92: magic search chars [ | ] a-z
 2 Dec 92: magic search chars . space tab
 1 Dec 92: added 'delete a PC file' in filefromdirmenu().
24 Nov 92: magic strings (but no uses for them yet).
20 Nov 92: cb at last: pagedown in foldlonglines mode went too far & often slow.
18 Nov 92: cb: fail in #buffer in readmacros() left B->dot -> wrong buffer.
 9 Nov 92: cb: gotodir() crashed (addr 0) if buffer had no name.
29 Oct 92: added displayhex & features re presence/absence of CR before LF.
29 Oct 92: new faster buffer::write().
26 Oct 92: cb: copydirkill()/filefromdirmenu() were accessing delete'd storage.
24 Oct 92: cb in huntf & huntb: signed char == unsigned char.
23 Oct 92: now can get a listdirectory onto text (copydirkill()).
21 Oct 92: cb: dotty() in refreshscreen() in getstring() mis-altered B->dot.c
17 Oct 92: cb's in filefromdirmenu().
15 Oct 92: keyseq(--) in macros is now a function, not a reserved_word.
 9 Oct 92: cb: recorded arg overwrote name of 1st buffer read by readmacros.
 8 Oct 92: cb at last (I hope!): macros treated empty string as 'no arg'.
 8 Oct 92: put in macro names.
 5 Oct 92: put in my own formatted print instead of stdin.h; etc.
24 Sep 92: readmacro() now checks args of subroutines.
22 Sep 92: found again that Gnu C++ miscompiles if I try to coerce subr to val.
17 Sep 92: revised repeating & how to save the previous command.
15 Sep 92: cb: search-for-word-backwards treating start of word as whole word.
 4 Sep 92: revised the macro reading parsing system; found some old faults.
25 Aug 92: cb in reading & printing insert/overlay/nomove macro lines.
20 Aug 92: file<->buffer read/write are now direct binary, to run quicker.
20 Aug 92: cb: bindkeysubr had a spurious Macro-> instr which gave bad address.
19 Aug 92: removed all numbered-width fields, as they made Gnu C 2.0 blaspheme.
19 Aug 92: removed all static class members, as they made Gnu C 2.0 blaspheme.
18 Aug 92: cb: after delbuf on keybound buffer, the key was left -> thin air.
13 Jul 92: added alt-D in getstring, and 'insert' in directorysearch.
10 Jul 92: added directory menu if he types a directory name for a file name.
 6 Jul 92: added C language bracket matching check (cbrackets, bound to ctrl2).
 3 Jul 92: if no env-var AAEMACS, looks in arg[0], then asks user which dir.
 2 Jul 92: cb: showregion (altZ) didn't show the region if called by a macro.
25 Jun 92: changed subrmenu to get all subr names on 80*25 char screen.
23 Jun 92: cb: alt-Q in para starting off screen: text moved a line down.
23 Jun 92: added showregion, bound to altZ
23 Jun 92: right end char of modeline counterchanged if awaiting a keystroke.
22 Jun 92: all uses of ctrlC transferred to ctrlZ
22 Jun 92: added class mouse and basic subrs for it, but no mouse KF's yet.
19 Jun 92: cb: pagedown didn't move at all if it hit EOF in foldlonglines mode.
19 Jun 92: cb: fullfilename used current drive's current dir for all drives.
19 Jun 92: cb: 'text found' magenta background in wrong place in folded lines.
18 Jun 92: #buffer(---,---) in macro now moans if the key is already bound.
18 Jun 92: info line now says what keyseq the buffer is bound to, if any.
16 Jun 92: cb: fold-long-lines: refresh ignored line folds when counting lines.
12 Jun 92: added extra facilities to 'help'.
11 Jun 92: altered callsubr so that null string reply gets menu of subr names.
11 Jun 92: corrected for that *(byte*)0xe0000484 = <1 less than> #rows/screen.
10 Jun 92: insertfile(empty filename) now makes buffer menu.
10 Jun 92: cb: folded line at top of lower window was going onto upper window.
 8 Jun 92: cb: fullfilename was returning "" as "c:" not ""
 3 Jun 92: cb: fullfilename was duplicating existing drive code.
29 May 92: now moans if he tries to unbind a keyarray.
29 May 92: added 'copy (mark N to mark N+1) to dot'.
27 May 92: cb: !mark (= delete char at mark) was not setting buffer->changed.
26 May 92: cb: fullfilename treated e.g. "C:T$" as "C:\T$"
19 May 92: altered fullfilename in EM.CC to shorten name sections to 8.3 chars.
12 May 92: cb: in fold-long-lines mode cursor position was going haywire when
            line-stepping past line too short to reach to where the cursor is.
