home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / ue312os2.zip / src / history.c < prev    next >
Text File  |  1994-08-26  |  108KB  |  2,198 lines

  1. /*
  2.  *    HISTORY.C:    Revision History for
  3.  *
  4.  *    MicroEMACS 3.12
  5.  *        written by Daniel M. Lawrence
  6.  *        based on code by Dave G. Conroy.
  7.  *
  8.  *    (C)Copyright 1988, 1989, 1990, 1991, 1992, 1993 by Daniel M. Lawrence
  9.  *    MicroEMACS 3.12 can be copied and distributed freely for any
  10.  *    non-commercial purposes. Commercial users may use MicroEMACS
  11.  *    3.12 inhouse. Shareware distributors may redistribute
  12.  *    MicroEMACS 3.12 for media costs only. MicroEMACS 3.12 can only
  13.  *    be incorporated into commercial software or resold with the
  14.  *    permission of the current author.
  15.  *
  16.  *
  17.  * REVISION HISTORY:
  18.  *
  19.  * 1.0    Steve Wilhite, 30-Nov-85
  20.  *    - Removed the old LK201 and VT100 logic. Added code to support the
  21.  *      DEC Rainbow keyboard (which is a LK201 layout) using the the Level
  22.  *      1 Console In ROM INT. See "rainbow.h" for the function key defs
  23.  *    Steve Wilhite, 1-Dec-85
  24.  *    - massive cleanup on code in display.c and search.c
  25.  *
  26.  * 2.0    George Jones, 12-Dec-85
  27.  *    - Ported to Amiga.
  28.  *
  29.  * 3.0    Daniel Lawrence, 29-Dec-85
  30.  *    - rebound keys/added new fast buffered I/O for AMIGA
  31.  *    - added META- repeat commands
  32.  *    - added reposition default to center screen (yeah!)
  33.  *    - changed exit with modified buffers message
  34.  *    - made filesave tell us what it is doing
  35.  *    - changed search string entry to terminate with <ESC>
  36.  *      so we can use <NL> in search/replace strings
  37.  *    - updated version number in mode line to 3.0
  38.  *    12-Jan-86
  39.  *    - Added code to reconize the search/replace functions
  40.  *    - Added code to perform search/replace & query functions
  41.  *    14-Jan-86
  42.  *    - moved search logic to separate function in search.c
  43.  *    - added replace and query replace functions
  44.  *    - separated out control key expansions to be used by others in search.c
  45.  *    15-Jan-86
  46.  *    - changed "visiting" to finding
  47.  *    - changed yes/no responses to not need return
  48.  *    - cleaned up various messages
  49.  *    16-jan-86
  50.  *    - fixed spurious spawn message in MSDOS
  51.  *    - added ^X-S synonym to save command
  52.  *    - moved escape to shell to ^X-C
  53.  *    21-jan-86
  54.  *    - added code to suspend shell under BSD
  55.  *    22-jan-86
  56.  *    - added function key support (SPEC) under MSDOS
  57.  *    - Abort now prints [Aborted] on message line
  58.  *    23-jan-86
  59.  *    - Added modes and commands to set/unset them
  60.  *    24-jan-86
  61.  *    - Added Goto Line command
  62.  *    - added Rename Buffer command
  63.  *    28-jan-86
  64.  *    - added goto beginning and end of paragraph commands (META-P/META-N)
  65.  *    - re-wrote kdelete to use realloc. Gained MUCH speed here when
  66.  *      doing large wipes on both UNIX and MSDOS. Changed kill buffer
  67.  *      allocation block size from 256 bytes to 1 k
  68.  *    29-jan-86
  69.  *    - moved extern function declarations to efunc.h
  70.  *    - made name[] name binding table
  71.  *    30-jan-86
  72.  *    - fixed Previous/Next paragraph command not to wrap around EOF
  73.  *    - added Fill Paragraph command (META-Q)
  74.  *    4-feb-86
  75.  *    - added code to properly display long lines, scrolling them right
  76.  *      to left
  77.  *    5-feb-85
  78.  *    - rewrote code to right/left scroll...much better
  79.  *    - added shifted arrow keys on IBMPC
  80.  *    6-feb-85
  81.  *    - add option to allow forward-word to jump to beginning of
  82.  *      next word instead of end of current one. This is different from
  83.  *      other emacs' but can be configured off in estruct.h
  84.  *    - added VIEW mode to allow a buffer to be read only
  85.  *       (-v switch on command line will activate this)
  86.  *    - changed quick exit to write out ALL changed buffers!!!
  87.  *      MAKE SURE YOU KNOW THIS WHEN META-Zing
  88.  *    10-feb-86
  89.  *    - added handling of lines longer than allowed on file read in
  90.  *      (they wrap on additional lines)
  91.  *    - made having space clear the message line and NOT insert itself
  92.  *      a configuration option in ed.h
  93.  *    11-feb-86
  94.  *    - added Describe-command and Help commands.
  95.  *    13-feb-86
  96.  *    - added View file command (^X ^V) and finished HELP command
  97.  *    14-feb-86
  98.  *    - added option to let main loop skip update if type ahead commands
  99.  *       are queued up
  100.  *    16-feb-86
  101.  *    - added Insert File command
  102.  *    17-feb-86
  103.  *    - added scroll next window up/down commands
  104.  *    18-feb-86
  105.  *    - added CMODE indentation
  106.  *    - re-arranged header files to standardize extern and global
  107.  *      definitions
  108.  *    - changed version number to 3.2
  109.  *    - added numeric arguments to search, reverse search and
  110.  *      search and replace
  111.  *    24-feb-86
  112.  *    - added Bind To Key function (^C for now) to allow the user
  113.  *      to change his command keys
  114.  *    - added Unbind key function (M-^C for now)
  115.  *    - added execute named command to execute unbound commands (M-X)
  116.  *    - added describe bindings command (not bound)
  117.  *    - changed version number to 3.3
  118.  *    25-feb-86
  119.  *    - scrapped CERROR mode (too many compilers)
  120.  *    - added EXACT mode for case sensitive searchers
  121.  *    26-feb-86
  122.  *    - added command completion on execute named command and
  123.  *      all routined grabbing a command name
  124.  *    - adding execute-command-line command and its support functions
  125.  *      (in preparation for sourcing files)
  126.  *    - added Execute Buffer command
  127.  *    27-feb-86
  128.  *    - added execute(source) file command and added code to automatically
  129.  *      execute emacs.rc (or .emacsrc on UNIX) before initial read in
  130.  *    - changed version number to 3.4
  131.  *    4-mar-86
  132.  *    - changed word delete to be consistant with word move (it gets
  133.  *      rid of the inter word space now) This is configurable with the
  134.  *      NFWORD symbol in estruct.h
  135.  *    - added B_ACTIVE entry to the buffer table. Let emacs read multiple
  136.  *      file names from the command line and only read them in as needed
  137.  *    5-mar-85
  138.  *    - rewrote command line parser to get rid of my patchy code
  139.  *    - changed version number to 3.5
  140.  *    1-apr-86
  141.  *    - added support for Aztec C 3.20e under MSDOS
  142.  *    - fixed bug in mlwrite on ADM3's and their ilk under V7
  143.  *    - added insertion of pounds in column one under CMODE
  144.  *    - changed version number to 3.6
  145.  *    3-apr-86
  146.  *    - added next-buffer command (^X-X)
  147.  *    5-apr-86
  148.  *    - added kill paragraph command (M-^W)
  149.  *    - changed fill-paragraph to leave 2 spaces after a period at the
  150.  *      end of a word.
  151.  *    - added OVERWRITE mode
  152.  *    7-apr-86
  153.  *    - fixed overwrite mode to handle tabs
  154.  *    8-apr-86
  155.  *    - added add/delete global mode (<ESC>M & <ESC> ^M) commands
  156.  *    9-apr-86
  157.  *    - added insert space command
  158.  *    - moved bindings around     ^C    insert space
  159.  *                    M-K    bind-to-key
  160.  *                    INSERT    insert space
  161.  *                    DELETE    forwdel
  162.  *    - added hunt forward and hunt reverse commands
  163.  *    10-apr-86
  164.  *    - fixed bug in DOBUF with non-terminated command string
  165.  *    15-apr-86
  166.  *    - fixed tab expansion bug in DISPLAY which hung the AMIGA
  167.  *      (sent in by Dawn Banks)
  168.  *    - fixed curcol problen if forwline/backline during keyboard
  169.  *      macro execution (sent in by Ernst Christen)
  170.  *    - added AMIGA function/cursor key support
  171.  *    - fixed nonterminating <NL> replacement bug
  172.  *    - fixed word wrapping problems
  173.  *    16-apr-86
  174.  *    - updated documentation and froze development for 3.6 net release
  175.  *    23-apr-86    version 3.6a
  176.  *    - added foreground and background colors. Setable with the
  177.  *      add mode commands for the moment
  178.  *    24-apr-86
  179.  *    - added command to pipe CLI output to a buffer
  180.  *    25-apr-86
  181.  *    - added Dana Hoggatt's code to replace Lattice's sick system()
  182.  *      function. Now we no longer care what the switchar is.
  183.  *    - cleaned up the positioning on several of the spawing commands
  184.  *    26-apr-86
  185.  *    - added an output flush in vttidy(). Unix really appreciates this.
  186.  *    - added filter-buffer (^X#) command to send a buffer through
  187.  *      a DOS filter
  188.  *    - made automatic CMODE on .c and .h file compilation dependant
  189.  *      in estruct.h
  190.  *    1-may-86
  191.  *    - optimized some code in update(). It certainly needs a lot more.
  192.  *    - added Aztec profiling capabilities. These are conditional on
  193.  *      the APROF symbol in estruct.h
  194.  *    2-may-86
  195.  *    - added (u)ndo command in query-replace. undoes last repalce.
  196.  *    6-may-86
  197.  *    - re-organized and wrote the update() function in display.c
  198.  *      Now my color hacks are in the right places and the code can be
  199.  *      understood.
  200.  *    [Released version 3.6f for BETA test sites]
  201.  *    8-may-86
  202.  *    - fixed bug in new display routine to wrap cursor on extended
  203.  *      lines at the right time
  204.  *    - modified the buffer-position command to give reasonable info
  205.  *    9-may-86
  206.  *    - improved the word wrap algorithm as not to discard non-space
  207.  *      delimiters. The backscan now looks for white space rather than
  208.  *      !inword().
  209.  *    [Released version 3.6g to Krannert]
  210.  *    10-may-86
  211.  *    - Added IBMPC.C an IBM-PC specific display driver. This makes paging
  212.  *      4-6 times faster. Also made some conditional changes to DISPLAY.C
  213.  *      to eliminate the pscreen[] if using the PC driver.
  214.  *    [changed version number to 3.6i]
  215.  *    12-may-86
  216.  *    - added delete-window (^X 0) command to dispose of a single window
  217.  *    - fixed problem with multiple prefixes from a command line which
  218.  *      was reported by John Gamble
  219.  *    14-may-86
  220.  *    - Added Aztec support for the IBMPC display driver. Had to
  221.  *      readjust some includes and defines for this.
  222.  *    - fixed bug in delete-window.
  223.  *    - fixed some bizarre behavior with the cursor after coming back
  224.  *      from spawn calls.
  225.  *    [changed version number to 3.7 freezing development for net release]
  226.  *    15-may-86
  227.  *    - (that didn't last long...) Added execute-macro-(1 thru 20) commands
  228.  *      to execute macro buffers (named "[Macro nn]")
  229.  *    - changed BFTEMP to BFINVS and cleaned up treatment of invisible
  230.  *      buffers.
  231.  *    16-may-86
  232.  *    - added store-macro (unbound) to store any executed command lines to
  233.  *      macro buffer.
  234.  *    - added clear-message-line (unbound) command to do just that
  235.  *    - added resize-window command to change a window's size to the
  236.  *      specified argument
  237.  *    - improved help's logic not to re-read the file if it was already
  238.  *      in a buffer
  239.  *    - added MAGIC mode to all structures and command tables, but the
  240.  *      regular expression code that John Gamble is writing is not ready.
  241.  *    18-may-86
  242.  *    - added interactive prompt requests in command line execution (i.e.
  243.  *      while executing a macro, a parameter starting with an at sign (@)
  244.  *      causes emacs to prompt with the rest of the parameter and return
  245.  *      the resulting input as the value of the parameter).
  246.  *    - added arguments to split-current-window to force the cursor into
  247.  *      the upper or lower window.
  248.  *    20-may-86
  249.  *    - added support for the Microsoft C compiler as per the changes
  250.  *      sent in by Oliver Sharp
  251.  *    - made some upgrades and fixes for VMS sent in by Guy Streeter
  252.  *    21-may-86
  253.  *    - fixed an Aztec bug in ttgetc by clearing the upper byte
  254.  *    - fixed buf in CMODE with #preprocesser input (bug fix submitted by
  255.  *      Willis of unknown path)
  256.  *    - added support of alternative startup file ( @<filename> ) in
  257.  *      the command line
  258.  *    - added ^Q quoting in interactive input (mltreply()).
  259.  *    - added re-binding of meta-prefix and ctlx-prefix
  260.  *    22-may-86
  261.  *    - reorganized getkey routines to make more sense and let prefix
  262.  *      binding work properly.
  263.  *    23-may-86
  264.  *    - checked new code on BSD4.2 and made a few fixes
  265.  *    - added optional fence matching while in CMODE
  266.  *    - added goto and search command line arguments by Mike Spitzer
  267.  *    26-may-86
  268.  *    - added parameter fetching from buffers
  269.  *    27-may-86
  270.  *    - fixed some HP150 bugs......
  271.  *    31-may-86
  272.  *    - Added Wang PC keyboard support from modifications by
  273.  *      Sid Shapiro @ Wang Institute
  274.  *    - Fixed some reverse video bugs with code submitted by Peter Chubb
  275.  *    - Fixed bug in nextbuffer reported by Dave Forslund
  276.  *    - added system V support (USG) from Linwood Varney
  277.  *    2-jun-86
  278.  *    - changed defines to just define one Unix define (for example,
  279.  *      just define BSD for Unix BSD 4.2)
  280.  *    - Added Incremental search functions written by D. R. Banks
  281.  *      in file ISEARCH.C
  282.  *    - added insert-string (unbound) command to help the macro
  283.  *      language out.
  284.  *    - added unmark-buffer (M-~) command to turn off the current buffers
  285.  *      change flag
  286.  *    - fixed nxtarg to truncate strings longer than asked for max length
  287.  *    4-jun-86
  288.  *    - added special characters in command line tokens. Tilde (~) is
  289.  *      the special lead-in character for "nrtb".
  290.  *    - Fixed bad ifdef in Aztec code so it could look at HOME dir
  291.  *      for startup, help, and emacs.rc files
  292.  *    6-jun-86
  293.  *    - make delete word commands clear the kill buffer if not after another
  294.  *      kill command
  295.  *    11-jun-86
  296.  *    - made ~@ in string arguments pass as char(192) to nxtarg() so one can
  297.  *      quote @ at the beginning of string arguments
  298.  *    - changed buffer size vars in listbuffers() to long (for big files)
  299.  *    - re-wrote buffer-position command to be much faster
  300.  *    12-jun-86
  301.  *    - added count-words (M-^C) command to count the words/chars and
  302.  *      lines in a region
  303.  *    - changed regions so they could be larger than 65535 (short ->
  304.  *      long in the REGION structure)
  305.  *    - changed ldelete() and all callers to use a long size. The kill
  306.  *      buffer will still have a problem >65535 that can not be solved
  307.  *      until I restructure it.
  308.  *    - grouped paragraph commands and word count together under symbol
  309.  *      WORDPRO to allow them to be conditionally made (or not)
  310.  *    13-jun-86
  311.  *    - re-wrote kill buffer routines again. Now they support an unlimited
  312.  *      size kill buffer, and are (in theory) faster.
  313.  *    - changed delete-next-word (M-D) to not eat the newline after a word,
  314.  *      instead it checks and eats a newline at the cursor.
  315.  *    17-jun-86
  316.  *    - added numeric argument to next/previous-window to access the nth
  317.  *      window from the top/bottom
  318.  *    - added support for the Data General 10 MSDOS machine
  319.  *    - added save-window (unbound) and restore-window (unbound) commands
  320.  *      for the use of the menu script. Save-window remembers which window
  321.  *      is current, and restore-window returns the cursor to that window.
  322.  *    20-jun-86
  323.  *    - fixed a bug with the fence matching locking up PASCAL NEAR the beginning
  324.  *      of a buffer
  325.  *    - added argument to update to selectively force a complete update
  326.  *    - added update-screen (unbound) command so macros can force a
  327.  *      screen update
  328.  *    21-jun-86
  329.  *    - rearranged token() and nxtarg() calls so that command names and
  330.  *      repeat counts could also be prompted and fetched from buffers
  331.  *      [this broke later with the exec re-write....]
  332.  *    - added write-message (unbound) command to write out a message
  333.  *      on the message line (for macros)
  334.  *    - changed ifdef's so that color modes are recognized as legal in
  335.  *      b/w version, and simply do nothing (allowing us to use the same
  336.  *      script files)
  337.  *    [Released version 3.7 on July 1 to the net and elswhere]
  338.  *    2-jul-86
  339.  *    - Changed search string terminator to always be the meta character
  340.  *      even if it is rebound.
  341.  *    3-jul-86
  342.  *    - removed extra calls to set color in startup code. This caused the
  343.  *      original current window to always be the global colors.
  344.  *    7-jul-86
  345.  *    - Fixed bugs in mltreply() to work properly with all terminators
  346.  *      including control and spec characters
  347.  *    22-jul-86
  348.  *    - fixed replaces() so that it will return FALSE properly on the
  349.  *      input of the replacement string.
  350.  *    - added a definition for FAILED as a return type.....
  351.  *    - changed version number to 3.7b
  352.  *    23-jul-86
  353.  *    - fixed o -> 0 problem in TERMIO.C
  354.  *    - made ^U universal-argument re-bindable
  355.  *    - wrote asc_int() for systems (like Aztec) where it acts strangely
  356.  *    - changed version number to 3.7c
  357.  *    25-jul-86
  358.  *    - make ^G abort-command rebindable
  359.  *    29-jul-86
  360.  *    - added HP110 Portable Computer support
  361.  *    - changed version number to 3.7d
  362.  *    30-jul-86
  363.  *    - Fixed a couple of errors in the new VMS code as pointer
  364.  *      out by Ken Shackleford
  365.  *    - split terminal open/close routines into screen and keyboard
  366.  *      open/close routines
  367.  *    - closed the keyboard during all disk I/O so that OS errors
  368.  *      can be respoded to correctly (especially on the HP150)
  369.  *    - changed version number to 3.7e
  370.  *    31-jul-86
  371.  *    - added label-function-key (unbound) command under symbol FLABEL
  372.  *      (primarily for the HP150)
  373.  *    4-aug-86
  374.  *    - added fixes for Microsoft C as suggested by ihnp4!ihuxm!gmd1
  375.  *        <<remember to fix [list] deletion bug as reported
  376.  *          by craig@hp-pcd>>
  377.  *    8-aug-86
  378.  *    - fixed beginning misspelling error everywhere
  379.  *    - fixed some more MSC errors
  380.  *    - changed version number to 3.7g
  381.  *    ?-aug-86 John M. Gamble:
  382.  *    - Made forward and reverse search use the same scan routine.
  383.  *    - Added a limited number of regular expressions - 'any',
  384.  *      'character class', 'closure', 'beginning of line', and
  385.  *      'end of line'.
  386.  *    - Replacement metacharacters will have to wait for a re-write of
  387.  *      the replaces function, and a new variation of ldelete().
  388.  *    - (For those curious as to my references, i made use of
  389.  *      Kernighan & Plauger's "Software Tools."
  390.  *      I deliberately did not look at any published grep or editor
  391.  *      source (aside from this one) for inspiration.  I did make use of
  392.  *      Allen Hollub's bitmap routines as published in Doctor Dobb's Journal,
  393.  *      June, 1985 and modified them for the limited needs of character class
  394.  *      matching.  Any inefficiences, bugs, stupid coding examples, etc.,
  395.  *      are therefore my own responsibility.)
  396.  *    20-aug-86 Daniel Lawrence
  397.  *    - fixed CMODE .h scanning bug
  398.  *    - changed version number to 3.7h
  399.  *    30-aug-86
  400.  *    - fixed killing renamed [list] buffer (it can't) as submitted
  401.  *      by James Aldridge
  402.  *    - Added code to allow multiple lines to display during
  403.  *      vertical retrace
  404.  *      [total disaster....yanked it back out]
  405.  *    9-sep-86
  406.  *    - added M-A (apropos) command to list commands containing a substring.
  407.  *    - fixed an inefficiency in the display update code submitted
  408.  *      by William W. Carlson (wwc@pur-ee)
  409.  *    10-sep-86
  410.  *    - added Dana Hoggatt's code for encryption and spliced it into the
  411.  *      proper commands. CRYPT mode now triggers encryption.
  412.  *    - added -k flag to allow encryption key (no spaces) in command line
  413.  *    14-sep-86
  414.  *    - added missing lastflag/thisflag processing to docmd()
  415.  *    - changed version to 3.7i and froze for partial release via mail
  416.  *      and BBS
  417.  *    05-oct-86
  418.  *    - changed some strcpys in MAIN.C to bytecopys as suggested by John
  419.  *      Gamble
  420.  *    - replaces SEARCH.C and ISEARCH.C with versions modified by
  421.  *      John Gamble
  422.  *    10-oct-86
  423.  *    - removed references to lflick....it just won't work that way.
  424.  *    - removed defines LAT2 and LAT3...the code no longer is Lattice
  425.  *      version dependant.
  426.  *    14-oct-86
  427.  *    - changed spawn so that it will not not pause if executed from
  428.  *      a command line
  429.  *    15-oct-86
  430.  *    - added argument concatination (+) to the macro parsing
  431.  *    - added [] as fence pairs
  432.  *    16-oct-86
  433.  *    - rewrote all macro line parsing routines and rearranged the
  434.  *      mlreply code. Saved 6K!!! Have blazed the path for expanding
  435.  *      the command language.
  436.  *    17-oct-86
  437.  *    - added new keyboard macro routines (plus a new level to the
  438.  *      input character function)
  439.  *    22-oct-86
  440.  *    - improved EGA cursor problems
  441.  *    - added -r (restricted) switch to command line for BBS use
  442.  *    06-nov-86
  443.  *    - fixed terminator declarations from char to int in getarg() and
  444.  *      nxtarg() in EXEC.C as pointed out by John Gamble
  445.  *    07-nov-86
  446.  *    - made wordrap() user callable as wrap-word (M-FNW) and changed
  447.  *      the getckey() routine so that illegal keystrokes (too many
  448.  *      prefixes set) could be used for internal bindings. When word
  449.  *      wrap conditions are met, the keystroke M-FNW is executed. Added
  450.  *      word wrap check/call to newline().
  451.  *    11-nov-86
  452.  *    - added and checked support for Mark Williams C 86
  453.  *    12-nov-86
  454.  *    - added goto-matching-fence (M-^F) command to jump to a matching
  455.  *      fence "({[]})" or beep if there is none. This can reframe the
  456.  *      screen.
  457.  *    - added code and structure elements to support change-screen-size
  458.  *      command (M-^S) to change the number of lines being used by
  459.  *      MicroEMACS.
  460.  *    15-nov-86
  461.  *    - finished debugging change-screen-size
  462.  *    17-nov-86
  463.  *    - Incorporated in James Turner's modifications for the Atari ST
  464.  *        23-sep-86
  465.  *        - added support for the Atari ST line of computers (jmt)
  466.  *          - added a '\r' to the end of each line on output and strip
  467.  *            it on input for the SHOW function from the desktop
  468.  *          - added 3 new mode functions (HIREZ, MEDREZ, and LOREZ);
  469.  *            chgrez routine in TERM structure; and MULTREZ define in
  470.  *            ESTRUCT.H to handle multiple screen resolutions
  471.  *    [note....ST still not running under Lattice yet...]
  472.  *    25-nov-86
  473.  *    - Made the filter-buffer (^X-#) command not work on VIEW mode
  474.  *      buffers
  475.  *    - Made the quick-exit (M-Z) command throw out a newline after
  476.  *      each message so they could be seen.
  477.  *    26-nov-86
  478.  *    - fixed a couple of bugs in change-screen-size (M-^S) command
  479.  *    - changed file read behavior on long lines and last lines
  480.  *      with no newline (it no longer throws the partial line out)
  481.  *    - [as suggested by Dave Tweten] Made adding a ^Z to the end
  482.  *      of an output file under MSDOS configurable under the
  483.  *      CTRL-Z symbol in ESTRUCT.H
  484.  *    - [Dave Tweten] Spawn will look up the "TMP" environment variable
  485.  *      for use during various pipeing commands.
  486.  *    - [Dave Tweten] changed pipe command under MSDOS to use '>>'
  487.  *      instead of '>'
  488.  *    04-dec-86
  489.  *    - moved processing of '@' and '#' so that they can be outside
  490.  *      the quotes in an argument, and added hooks to process '%' for
  491.  *      environment and user variables.
  492.  *    - modified IBMPC.C to sense the graphics adapter (CGA and MONO)
  493.  *      at runtime to cut down on the number of versions.
  494.  *    05-dec-86
  495.  *    - changed macro directive character to "!" instead of "$" (see
  496.  *      below) and fixed the standard .rc file to comply.
  497.  *    - added code to interpret environment variables ($vars). Added
  498.  *      hooks for built in functions (&func). So, to recap:
  499.  *
  500.  *        @<string>    prompt and return a string from the user
  501.  *        #<buffer name>    get the next line from a buffer and advance
  502.  *        %<var>        get user variable <var>
  503.  *        $<evar>     get environment variable <evar>
  504.  *        &<func>     evaluate function <func>
  505.  *
  506.  *    - allowed repeat counts to be any of the above
  507.  *    - added code to allow insert-string (unbound) to use its
  508.  *      repeat count properly
  509.  *    - added set (^X-A) command to set variables. Only works on
  510.  *      environmental vars yet.
  511.  *    9-dec-86
  512.  *    - added some code for user defined variables...more to come
  513.  *    - added options for malloc() memory pool tracking
  514.  *    - preliminary user variables (%) working
  515.  *    - changed terminal calls to macro's (to prepare for the new
  516.  *      terminal drivers)
  517.  *    15-dec-86
  518.  *    - changed previous-line (^P) and next-line (^N) to return a
  519.  *      FALSE at the end or beginning of the file so repeated
  520.  *      macros involving them terminate properly!
  521.  *    - added code for $CURCOL and $CURLINE
  522.  *    20-dec-86
  523.  *    - set (^X-A) now works with all vars
  524.  *    - added some new functions
  525.  *        &ADD &SUB &TIMES &DIV &MOD &NEG &CAT
  526.  *    - once again rearranged functions to control macro execution. Did
  527.  *      away with getarg()
  528.  *    23-dec-86
  529.  *    - added string functions
  530.  *        &LEFt &RIGht &MID
  531.  *    31-dec-86
  532.  *    - added many logical functions
  533.  *        &NOT &EQUal &LESs &GREater
  534.  *    - added string functions
  535.  *        &SEQual &SLEss &SGReater
  536.  *    - added variable indirection with &INDirect
  537.  *    - made fixes to allow recursive macro executions
  538.  *      (improved speed during macro execution as well)
  539.  *    3-jan-87
  540.  *    - added $FLICKER to control flicker supression
  541.  *    - made spawn commands restricted
  542.  *    - cleaned up lots of unintentional int<->char problems
  543.  *    4-jan-87
  544.  *    - Fixed broken pipe-command (^X-@) command under MSDOS
  545.  *    - added !IF  !ELSE  !ENDIF  directives and changed the
  546.  *      name of !END to !ENDM....real slick stuff
  547.  *    5-jan-87
  548.  *    - quick-exit (M-Z) aborts on any filewrite errors
  549.  *    8-jan-87
  550.  *    - debugged a lot of the new directive and evaluation code.
  551.  *      BEWARE of stack space overflows! (increasing stack to
  552.  *      16K under MSDOS)
  553.  *    - removed non-standard DEC Rainbow keyboard support...let someone
  554.  *      PLEASE implement this in the standard manner using key bindings
  555.  *      and send the results to me.
  556.  *    - added change-screen-width () command and $CURWIDTH variable
  557.  *    11-jan-87
  558.  *    - fixed an incredibly deeply buried bug in vtputc and combined
  559.  *      it with vtpute (saving about 200 bytes!)
  560.  *    16-jan-87
  561.  *    - added code to handle controlling multiple screen resolutions...
  562.  *      allowed the IBM-PC driver to force Mono or CGA modes.
  563.  *    - added current buffer name and filename variables
  564.  *      $cbufname and $cfname
  565.  *    18-jan-87
  566.  *    - added $sres variable to control screen resolution
  567.  *    - added $debug variable to control macro debugging code (no longer
  568.  *      is this activated by GLOBAL spell mode)
  569.  *    - fixed bug in -g command line option
  570.  *    - Released Version 3.8 to BBSNET
  571.  *    21-jan-87
  572.  *    - added $status variable to record return status of last command
  573.  *    2-feb-87
  574.  *    - added ATARI 1040 support...runs in all three modes right now
  575.  *    - added $palette var with palette value in it
  576.  *    - undefined "register" in BIND.C and INPUT.C for ST520 & LATTICE
  577.  *      to get around a nasty Lattice bug
  578.  *    4-feb-87
  579.  *    - added, debugged code for switching all 1040ST color modes, added
  580.  *      code for HIGH monochrome mode as well, DENSE still pending
  581.  *    5-feb-87
  582.  *    - with John Gamble, found and corrected the infamous bad matching
  583.  *      fence problems.
  584.  *    - added error return check in various add/delete mode commands
  585.  *    10-feb-87
  586.  *    - re-arrange code in docmd() so that labels are stored in
  587.  *      macro buffers
  588.  *    - fixed !RETURN to only return if (execlevel == 0) [If we are
  589.  *      currently executing]
  590.  *    14-feb-87
  591.  *    - added to outp() calls in the EGA driver to fix a bug in the BIOS
  592.  *    - adding code for 1040ST 40 line DENSE mode (not complete)
  593.  *    25-feb-87
  594.  *    - added auto-save "ASAVE" mode....variables $asave and $acount
  595.  *      control the frequency of saving and count until next save
  596.  *    - added &and and &or as functions for logical anding and oring
  597.  *    - added string length &LEN, upper and lower case string funtions
  598.  *      &LOWER and &UPPER
  599.  *    27-feb-87
  600.  *    - added $lastkey   last keystroke struck and
  601.  *        $curchar    character under cursor
  602.  *    28-feb-87
  603.  *    - added code for trim-line (^X^T) command and table entries
  604.  *      for the entab-line (^X^E) and detab-line (^X^D) commands.
  605.  *      These are conditional on AEDIT (Advanced editing) in estruct.h
  606.  *    18-mar-87
  607.  *    - finished above three commands
  608.  *    - added $version environment variable to return the current
  609.  *      MicroEMACS version number
  610.  *    - added $discmd emvironment variable. This is a logical flag that
  611.  *      indicates if emacs should be echoing commands on the command line.
  612.  *      real useful in order to stop flashing macros and .rc files
  613.  *    - added $progname environment variable. this always returns the
  614.  *      string "MicroEMACS". OEM's should change this so that macros can
  615.  *      tell if they are running on an unmodified emacs or not.
  616.  *    - fixed a minor bug in the CGA/MONO detection routine in IBMPC.C
  617.  *    20-mar-87
  618.  *    - integrated EGAPC.C into IBMPC.C and eliminated the file. Now an
  619.  *      EGA user can switch from EGA to CGA modes at will
  620.  *    - A LOT of little fixes and corrections sent in by John Ruply
  621.  *    25-mar-87
  622.  *    - Fixed buffer variables so they will work when referencing the
  623.  *      current buffer
  624.  *    26-mar-87
  625.  *    - Fixed asc_int() to be more reasonable. trailing whitespace ignored,
  626.  *      only one leading sign, no non-digits allowed after the sign.
  627.  *    - fixed buffer variables to go from the point to the end of
  628.  *      line.
  629.  *    28-mar-87
  630.  *    - fixed bugs with 8 bit chars as submited by Jari Salminen
  631.  *    - replace AZTEC/MSDOS agetc() with a1getc() which won't strip
  632.  *      the high order bit
  633.  *    30-mar-87
  634.  *    - changed list-buffers (^X^B) so that with any argument, it will
  635.  *      also list the normally invisable buffers
  636.  *    - added store-procedure and execute-procedure/run (M-^E)
  637.  *      commands to store and execute named procedures.
  638.  *    31-mar-87
  639.  *    - Fixed infinite loop in ^X-X command (when [LIST] is the
  640.  *      only buffer left) as pointed out by John Maline
  641.  *    - made filenames in getfile() always lower case as pointed
  642.  *      out by John Maline
  643.  *    2-apr-87
  644.  *    - Fixed buffer variables so they would work on non-current displayed
  645.  *      buffers. They should now work with ALL buffers....
  646.  *    3-apr-87
  647.  *    - Yanked AZTEC profiling code....not very useful
  648.  *    - Modified IBMPC driver so it will not start in EGA mode
  649.  *    - allow the next-buffer (^X-X) command to have a preceding
  650.  *      non-negative argument.
  651.  *    14-april-87: John M. Gamble
  652.  *    - Deleted the "if (n == 0) n = 1;" statements in front of the
  653.  *      search/hunt routines.  Since we now use a do loop, these
  654.  *      checks are unnecessary.  Consolidated common code into the
  655.  *      function delins().  Renamed global mclen matchlen,
  656.  *      and added the globals matchline, matchoff, patmatch, and
  657.  *      mlenold.
  658.  *      This gave us the ability to unreplace regular expression searches,
  659.  *      and to put the matched string into an evironment variable.
  660.  *      SOON TO COME: Meta-replacement characters!
  661.  *    14-apr-87 Daniel Lawrence
  662.  *    - added John Gamble's modified search.c. The code has cut apx
  663.  *      200-300 bytes off the executable.
  664.  *    - added the &RND function to generate a random integer between
  665.  *      1 and its arguments value. Also $SEED is availible as the
  666.  *      random number seed.
  667.  *    - changed the -k command line switch so if there is no argument,
  668.  *      it will prompt for one when the file is read
  669.  *    15-apr-87
  670.  *    - added 20 bytes of buffer in getval()'s local argument alloc so
  671.  *      when it returns a value, it has enough stack space to do at least
  672.  *      one strcpy() before stomping on the returned value. ALWAYS call
  673.  *      getval() ONLY from within a strcpy() call.
  674.  *    - made $curcol return a 1 based value instead of a zero based one.
  675.  *      [changed this back later for 3.8o   it was simply wrong.....]
  676.  *    16-apr-87
  677.  *    - re-wrote bytecopy() for AZTEC & MSDOS so it null terminates the
  678.  *      string.
  679.  *    - changed pipe() to pipecmd() to avoid conflicts with various
  680.  *      UNIX systems
  681.  *    24-apr-87
  682.  *    - changed open parameters on AMIGA window open to 0/0/640/200
  683.  *    25-apr-87    DML
  684.  *    - cleaned up an unneccessary if/else in forwsearch() and
  685.  *      backsearch()
  686.  *    - savematch() failed to malloc room for the terminating byte
  687.  *      of the match string (stomp...stomp...). It does now. Also
  688.  *      it now returns gracefully if malloc fails
  689.  *    [Froze and released v3.8i via BBS net]
  690.  *    14-may-87
  691.  *    - added nop (M-FNC) that gets called on every command loop
  692.  *    - added $wline, returns and sets # lines in current window
  693.  *    - added $cwline, returns and set current line within window
  694.  *    - added $target, returns/sets target for line moves
  695.  *    - added $search, returns/sets default search string
  696.  *    - added $replace, returns/sets default replace string
  697.  *    - added $match, returns last matched string in magic search
  698.  *    29-may-87
  699.  *    - rewrote word deletes to not kill trailing non-whitespace after
  700.  *      the last word. Also a zero argument will cause it to just delete
  701.  *      the word and nothing else.
  702.  *    - more fixes for the search pattern environment variables
  703.  *    30-may-87
  704.  *    - forced all windows to redraw on a width change
  705.  *    2-jun-87
  706.  *    - forced clear-message-line to overide $discmd
  707.  *    - added mlforce() routine and call it in clear-message-line,
  708.  *      write-message and when $debug is TRUE
  709.  *    - recoded the startup sequence in main()....Much Better...
  710.  *    4-jun-87
  711.  *    - forced interactive arguments ( @"question" ) to ALWAYS be echoed
  712.  *      regardless of the setting of $discmd.
  713.  *    7-jun-87
  714.  *    - started adding support for Turbo C under MSDOS
  715.  *    11-jun-87
  716.  *    - words now include ONLY upper/lower case alphas and digits
  717.  *    - fixed some more bugs with the startup..(ORed in the global modes)
  718.  *    - took more limits off the self-insert list....
  719.  *    16-jun-87
  720.  *    - macro debugging now displays the name of the current macro.
  721.  *    - fixed a problem in expandp() in search.c that kept high-byte
  722.  *      characters from working in search strings
  723.  *    18-jun-87
  724.  *    - added &sindex <str1> <str2> function which searches for string 2
  725.  *      within string 1
  726.  *    [released verion 3.8o internally]
  727.  *    19-jun-87
  728.  *    - added $cmode and $gmode to return and set the mode of the
  729.  *      current buffer and the global mode
  730.  *    - separated findvar() out from setvar() so it could be used in
  731.  *      the !LOOP directive (which got canned....read on)
  732.  *    - %No such variable message now types the name of the offending
  733.  *      variable
  734.  *    22-jun-87
  735.  *    - fixed startup bug when editing the startup file
  736.  *    - added the !LOOP <var> <label> directive
  737.  *    26-jun-87
  738.  *    - dumped !LOOP......added !WHILE. This needed and caused a vaste
  739.  *      reorginization in exec.c which mainly involved moving all the
  740.  *      directive handling from docmd() to dobuf(), in the process
  741.  *      getting rid of a lot of junk and making the result smaller
  742.  *      than it started.....(yea!)
  743.  *    - added $tpause to control the fence flashing time in CMODE.
  744.  *      The value is machine dependant, but you can multiply the
  745.  *      original in macros to stay machine independant. (as
  746.  *      suggested by Baron O.A. Grey)
  747.  *    - added hook to execute M-FNR (null) during a file read, after
  748.  *      the name is set and right before the file is read. Took out
  749.  *      any auto-CMODE code, as this is now handled with a macro.
  750.  *      (also suggested by Baron O.A. Grey)
  751.  *    - Added Baron O.A. Grey's SYSTEM V typeahead() code...I hope
  752.  *      this works....if you check this out, drop me a line.
  753.  *    - Added new variable $pending, returns a logical telling if
  754.  *      a typed ahead character is pending.
  755.  *    29-jun-87
  756.  *    - Made adjustmode() use curbp-> instead of curwp->w_bufp-> which
  757.  *      fixed some bugs in the startup routines.
  758.  *    - added $lwidth to return the length of the current line
  759.  *    2-jul-87
  760.  *    - Added &env <str> which returns the value of the environment
  761.  *      variable <str> where possible
  762.  *    - Fixed a NASTY bug in execbuf()..the buffer for the name
  763.  *      of the buffer to execute was NBUFN long, and got overflowed
  764.  *      with a long interactive argument.
  765.  *    3-jul-87
  766.  *    - Moved the loop to match a key against its binding out of execute()
  767.  *      to getbind() so it could be used later elsewhere.
  768.  *    - Added &bind <keyname> which returns the function bound to the
  769.  *      named key
  770.  *    - changed execute-file to look in the executable path first...
  771.  *    6-jul-87
  772.  *    - changed $curchar to return a newline at the end of a line and
  773.  *      it no longer advances the cursor
  774.  *    - a lot of minor changes sent by various people....
  775.  *    7-jul-87
  776.  *    - some amiga specific fixes as suggested by Kenn Barry
  777.  *    - added $line [read/write] that contains the current line in the
  778.  *      current buffer
  779.  *    - changed $curcol so setting it beyond the end of the line will
  780.  *      move the cursor to the end of the line and then fail.
  781.  *    10-jul-87
  782.  *    - added a number of fixes and optimizations along with the rest
  783.  *      of the TURBO-C support as submited by John Maline
  784.  *    13-jun-87
  785.  *    - caused dobuf() to copy lastflag to thisflag so the first
  786.  *      command executed will inherit the lastflag from the command
  787.  *      before the execute-buffer command. (needed this for smooth
  788.  *      scrolling to work)
  789.  *    - made flook() look first in the $HOME directory, then in the
  790.  *      current directory, then down the $PATH, and then in the
  791.  *      list in epath.h
  792.  *    14-jul-87
  793.  *    - added some fixes for VMS along with support for the SMG
  794.  *      screen package as submited by Curtis Smith
  795.  *    15-jul-87
  796.  *    - fixed M-^H (delete-previous-word) so it can delete the first
  797.  *      word in a file....I think there may be more of this kind of thing
  798.  *      to fix.
  799.  *    16-jul-87
  800.  *    - added code to allow arbitrary sized lines to be read from files..
  801.  *      speed up file reading in the process.
  802.  *    - made out of memory conditions safer.. especial on file reads
  803.  *    - fixed a bug in bind having to do with uppercasing function
  804.  *      key names (submitted by Jari Salminen)
  805.  *    - made ST520 exit in the same resolution that EMACS was started in
  806.  *      (for the 1040ST)
  807.  *    20-jul-87: John M. Gamble
  808.  *    - Set the variables matchlen and matchoff in the 'unreplace'
  809.  *      section of replaces().  The function savematch() would
  810.  *      get confused if you replaced, unreplaced, then replaced
  811.  *      again (serves you right for being so wishy-washy...)
  812.  *    [FROZE development and released version 3.9 to USENET]
  813.  *    {It never made it.....got killed by comp.unix.sources}
  814.  *    12-aug-87: John M. Gamble
  815.  *    - Put new function rmcstr() in SEARCH.C to create the replacement
  816.  *      meta-character array.  Modified delins() so that it knows
  817.  *      whether or not to make use of the array.  And, put in the
  818.  *      appropriate new structures and variables.
  819.  *    15-sep-87
  820.  *    - added support for Mark Williams C on the Atari ST
  821.  *    - made the MALLOC debugging package only conditional on RAMSIZE
  822.  *    - added code for flagging truncated buffers
  823.  *    23-sep-87
  824.  *    - fixed &RIGHT to return the <arg2> rightmost characters
  825.  *    - fixed a buffer in getval() to be static....things are stabler
  826.  *      now.
  827.  *    - moved all the stack size declarations to after include "estruct.h"
  828.  *      they work a lot better now....... (rather than not at all)
  829.  *    - made Atari ST spawns all work with MWshell
  830.  *    - fixed spawning on the 1040ST under MWC
  831.  *    27-sep-87
  832.  *    - added &exist function to check to see if a named file exist
  833.  *    - added &find function to find a file along the PATH
  834.  *    - added -A switch to run "error.cmd" from command line
  835.  *    - added $gflags to control startup behavior....
  836.  *    03-oct-87
  837.  *    - changed ":c\" to "c:" in epath.h for the AMIGA as suggested
  838.  *      by Tom Edds
  839.  *    - added binary and, or, and xor functions as submited by John Maline
  840.  *      (&band   &bor    and    &bxor)
  841.  *    - added binary not (&bnot) function
  842.  *    - added fixes for gotoline() and nextarg() as submited by David
  843.  *      Dermott
  844.  *    - fixed return value of $curwidth as submitted by David Dermott
  845.  *    - fixed several calls to ldelete() to have a long first argument
  846.  *      (pointed out by David Dermott)
  847.  *    - Fixed a bug in stock() which prevented uppercase FN bindings as
  848.  *      pointed out by many people
  849.  *    - changed dofile() to make sure all executed files don't conflict
  850.  *      with existing buffer names. Took out cludged code in main.c to
  851.  *      handle this problem... this solution is better (suggested by
  852.  *      Don Nash)
  853.  *    05-oct-87
  854.  *    - added in John Gamble's code to allow for a replacement regular
  855.  *      expresion character in MAGIC mode
  856.  *    [note: under MSDOS  we are still TOO BIG!!!!]
  857.  *    - added overwrite-string as a new user callable function, and
  858.  *      lowrite(c) as an internal function for overwriting characters
  859.  *    - added &xlate function to translate strings according to a
  860.  *      translation table
  861.  *    10-oct-87
  862.  *    - added code to allow emacs to clean its own buffers on exit.
  863.  *      useful if emacs is used as a subprogram. Conditional on
  864.  *      the CLEAN definition in estruct.h
  865.  *    14-oct-87
  866.  *    - swallowed very hard and switched to LARGE code/LARGE data model
  867.  *    - packaged and released version 3.9c internally
  868.  *      (MSDOS executables compiled with TURBO C Large model)
  869.  *    16-oct-87
  870.  *    - temporary fix for FUNCTION keys now includes the Meta-O sequence
  871.  *      if VT100 is definined (submited by Jeff Lomicka)
  872.  *    - an VT100 also triggers input.c to force ESC to always
  873.  *      be interpeted as META as well as the currently bound key
  874.  *    - fixed a bug in the VMSVT driver as pointed out by Dave Dermott
  875.  *    - added a size parameter to token() to eliminate problems with
  876.  *      long variable names. (as sugested by Ray Wallace)
  877.  *    18-oct-87
  878.  *    - fixed a bug in the free ram code that did not clear the buffer
  879.  *      flag causing emacs to ask for more confirnmations on the way out.
  880.  *    19-oct-87
  881.  *    - added ^X-$ execute-program call to directly execute a program
  882.  *      without going through a shell... not all environments have this
  883.  *      code completed yet (uses shell-command where not)
  884.  *    [Froze for 3.9d release internally]
  885.  *    28-oct-87
  886.  *    - added code for Atari ST DENSE mode and new bell as submited
  887.  *      by J. C. Benoist
  888.  *    - made extra CR for ST files conditional on ADDCR. This is only
  889.  *      needed to make the desktop happy...and is painful for porting
  890.  *      files (with 2 CR's) elsewhere (Also from J. C. Benoist)
  891.  *    - added optional more intellegent (and larger) close brace
  892.  *      insertion code (also from J. C. Benoist)
  893.  *    4-nov-87
  894.  *    - fixed AZTEC spawning... all MSDOS spawns should work now
  895.  *    - a META key while debugging will turn $debug to false
  896.  *      and continue execution.
  897.  *    [Froze for version 3.9e USENET release]
  898.  *    4-nov-87 Geoff Gibbs
  899.  *    - Fast search using simplified version of Boyer and Moore
  900.  *      Software-Practice and Experience, vol 10, 501-506 (1980).
  901.  *      Mods to scanner() and readpattern(), and added fbound() and
  902.  *      setjtable().  Scanner() should be callable as before, provided
  903.  *      setjtable() has been called first.
  904.  *    13-dec-87
  905.  *    - added a change to the system V termio.c code to solve a keyboard
  906.  *      polling problem, as submited by Karl Lehenbauer
  907.  *    - removed a "static" from the mod95() function declaration
  908.  *      in crypt.c to make MSC happy (by Malcolm MacNiven)
  909.  *    - added code so the new exec routines in spawn.c are working
  910.  *      under MSC (By Malcolm MacNiven)
  911.  *    - fixed the mixed space/tab entabbing bug as suggested
  912.  *      by Michal Jaegermann
  913.  *    - added the missing brace in the VT100 code in getcmd()
  914.  *      (This one was submited by many different people)
  915.  *    - added more intelligent spawning for TURBO C as submitted
  916.  *      by Bob Montante
  917.  *    - added support for the WICAT computers running under the WMCS
  918.  *      operating system as submitted by Bruce Hunsaker
  919.  *    16-dec-87
  920.  *    - re-wrote fillpara(). Its 4 times Faster!!!
  921.  *    - moved M-FNR binding to $readfile ie to make emacs execute
  922.  *      a macro when reading files:
  923.  *        set $readhook "nop"    ;or whetever
  924.  *    18-dec-1987: John M. Gamble
  925.  *    - Made replaces() beep at you and stop if an empty string is
  926.  *      replaced.  This is possible in MAGIC mode, if you pick your
  927.  *      pattern incorrectly.
  928.  *    - Fixed a subtle bug in the new Boyer-Moore routines, which caused
  929.  *      searches to fail occasionally.
  930.  *    19-dec-87
  931.  *    - new search algorithm from Geoff Gibbs, cleaned up by John Gamble.
  932.  *      its over 30 TIMES FASTER!!!! using a simplified Boyer and Moore
  933.  *      pattern search.  This effects all the but MAGIC search commands.
  934.  *    22-dec-87
  935.  *    - narrow-to-region (^X-<) and widen-from-region (^X->) allow you
  936.  *      to make all but a region invisable, thus all global commands
  937.  *      can act on a single region.
  938.  *    - a numeric argument on the select-buffer (^X-b) command makes
  939.  *      that buffer become "invisable"
  940.  *    - M-FNC becomes $cmdhook
  941.  *      M-FNW becomes $wraphook
  942.  *    23-dec-87
  943.  *    - made unmark-buffer (M-~) update the mode lines of all windows
  944.  *      pointing into the unmarked buffer
  945.  *    28-dec-87
  946.  *    - added new prefix MOUS (coded as MS-) for dealing with mice
  947.  *    29-dec-87
  948.  *    - vastly reorginized machine dependant code. Put termio.c and
  949.  *      spawn.c together and then pulled out msdos.c, unix.c, wmcs.c,
  950.  *      atari.c, amigados.c, and vms.c. These are the operating specific
  951.  *      source files now.
  952.  *    30-dec-87
  953.  *    - cleaned up msdos.c. Got rid of two unused spawn functions for
  954.  *      LATTICE. Also removed attempt to lookup SHELL variable to
  955.  *      find the command processer. This is definatly not applicable
  956.  *      here as COMSPEC should always be the name of the reloaded
  957.  *      command processor.
  958.  *    20-jan-87
  959.  *    - added Jeff Lomicka's ST mouse support and added some
  960.  *      appropriate code to input.c to support this.
  961.  *    - added buffer name completion to the select-buffer (^X-B)
  962.  *      command as submitted by Martin Neitzel.
  963.  *    - changed some function names:
  964.  *        abs    =>    absv
  965.  *        atoi    =>    asc_int
  966.  *        ltoi    =>    long_int
  967.  *        setmode =>    setmod
  968.  *        strncpy =>    bytecopy
  969.  *    25-jan-88    By Jeff Lomicka
  970.  *    - Added parsing of keypad keys, LK201 function key sequences, mouse
  971.  *      sequences (VaxStation form and BBN BitGraph form), and the cursor
  972.  *      position report to VMSVT.C.  This will require a change in the way
  973.  *      that VMS users bind functions to their function keys or keypad
  974.  *      keys.  This also defines a defacto-standard for the names of the
  975.  *      numeric keypad keys, based on the VT100 and compatible terminals.
  976.  *    - Added MOUSE.C to DESCRIP.MMS, and changed it to reference ME.OPT,
  977.  *      and to generate ME.EXE.
  978.  *    - Renamed MICROEMACS.OPT to ME.OPT so that the filename would fit
  979.  *      on smaller systems.
  980.  *    - Added capability for copy and paste from the terminal-wide
  981.  *      copy/paste buffer.  This allows copy and paste of the select region
  982.  *      from and to non-cooperating sessions in other windows.  (The
  983.  *      addition of the MOUSE handling routines disables the transparent
  984.  *      use of the VWS copy/paste mechanism.) There may be a bug in the
  985.  *      PASTE section of this code.  On some VWS systems, you may get a
  986.  *      bunch of Hex characters instead of text.  I'm looking in to finding
  987.  *      out what is really supported in the released versions of VWS.  This
  988.  *      code is conditional based on MOUSE & VMSVT.  Code was added to
  989.  *      VMSVT.C.  Added bindings for to ebind.h.  Yank is on ^X^Y.  Copy is
  990.  *      on ^XC.  If MOUSE & VMSVT is true, this binding overides the use of
  991.  *      ^XC for spanwcli.  [This won't stay.. alternative binding?]
  992.  *      Also added definitions for this to efunc.h.
  993.  *    - Added #define of CPM to estruct.h.  It is used in FILE.C.  You
  994.  *      might want to delete it again. [It was deleted..no CPM support]
  995.  *    - Added noshare attributes to all data in many modules.
  996.  *    - Re-introudced XONDATA condition that was in 3.9eJ's TERMIO.C into
  997.  *      VMS.C.  (This was overlooked by Dan in making 3.9g.)
  998.  *    - Appended a ":" to the "MICROEMACS$LIB:" path element in the VMS
  999.  *      portion of EPATH.H.
  1000.  *    - Fixed mouse reports from VMSVT.C to correspond to the code in 3.9g.
  1001.  *    - In INPUT.C, added VMS to list of systems that generate FN key and
  1002.  *      mouse reports with leading 0 bytes.
  1003.  *    - In order to accomodate callable editor support, I had to arrange
  1004.  *      so that some of the CALLED features are active all of the time,
  1005.  *      particularly EXIT HANDLING.  I changed all calls to exit() into
  1006.  *      calls to meexit().  There is a great need to divide up exits
  1007.  *      between error exits that aren't expected to return, and exits that
  1008.  *      just set the exit flag.  Places that didn't expect exit to return
  1009.  *      should be changed to return immediately after calling exit, so that
  1010.  *      the command loop can catch it and return.  This error handling
  1011.  *      business is a real mess right now.
  1012.  *    - Re-arranged main() so that most of the guts are in called
  1013.  *      routines, so that there can be more than one entry point into the
  1014.  *      program.  Note, now, the possiblity of adding recursive-edit as a
  1015.  *      function that you can call from a macro.
  1016.  *    - Added the universal symbol ME$EDIT to the VMS version as a second
  1017.  *      entry point, for use when called by MAIL and NOTES, which use
  1018.  *      LIB$FIND_IMAGE_SYMBOL and perform run-time linking with their text
  1019.  *      editor.  This stuff works great!
  1020.  *    - Changed Atari-ST makefile to link without -VGEM, so that you will
  1021.  *      get argc and argv.
  1022.  *    - Fixed ST520.C so that screen would be redrawn when we notice that
  1023.  *      desk accessories exit, and so that the mouse will be turned off
  1024.  *      when exiting into a shell (If text cursor was on, mouse is left
  1025.  *      off).
  1026.  *    - Changed ST520.C to have bindings for keypad keys, with PF1 "("
  1027.  *      key as metac, so that it can be used as GOLD prefix.    Uses GOLDKEY
  1028.  *      option in ESTRUCT.H.
  1029.  *    26-jan-88    Daniel Lawrence...
  1030.  *    - cleaned up coding in main.c
  1031.  *    - changed more function names
  1032.  *        itoa    =>    int_asc
  1033.  *        ltoa    =>    long_asc
  1034.  *    27-jan-88
  1035.  *    - added terminal initilizer string output to tcap.c as submitted
  1036.  *      by Ge' Wiejers
  1037.  *    - switched the -A command line switch to be -E the way MWC demands
  1038.  *      that it be. Also had to move -E to -C (for Change...)
  1039.  *    02-feb-88
  1040.  *    - changed META and ^X prefixes to use a new mechinism. Hitting
  1041.  *      a prefix stores it as a pending prefix.
  1042.  *    05-feb-88
  1043.  *    - changed emacs to use ^M for line terminators instead of
  1044.  *      ^J. This required LOTS of changes. Now, however, we can
  1045.  *      search for and manipulate ^M.
  1046.  *    - fixed getcmd() to work again so that describe-key and
  1047.  *      interactive binding functions work again.
  1048.  *    - added $sterm environmental variable. This hold the current
  1049.  *      value of the keystroke needed to terminate search string
  1050.  *      requests. The value in here is also automatically reset
  1051.  *      any time the meta-prefix is rebound, the the meta-prefix's value
  1052.  *    06-feb-88
  1053.  *    - fixed bug in stock().. real control characters in command lines
  1054.  *      now bind properly
  1055.  *    [BBS release of version 3.9i]
  1056.  *    23-feb-88
  1057.  *    - added buffer name completion to delete-buffer (^XK) and reorginized
  1058.  *      code their to gain back 1 K
  1059.  *    - added $modeflag to allow us to hide the modelines.
  1060.  *    - added $sscroll to allow smooth scrolling... (I don't like this
  1061.  *      but there were too many requests for it).
  1062.  *    - added $lastmesg to hold last message EMACS wrote out
  1063.  *    04-mar-88
  1064.  *    - added Alan Phillip's mods to support the VGA adapter on the
  1065.  *      IBM PS/2 machines. Modified it a little.
  1066.  *    15-mar-88
  1067.  *    - Forever twiddling with the startup code, I moved the initialization
  1068.  *      of exitflag to main() to allow a startup file to exit EMACS
  1069.  *      properly.  Also had to make meexit always return(TRUE) regardless
  1070.  *      of the exitstatus. (Ie it always works and doesn't abort the macro)
  1071.  *    17-mar-88
  1072.  *    - added code to change hard tab size with $tabsize variable
  1073.  *    - added binary search to fncmatch()
  1074.  *    28-mar-88
  1075.  *    - optimized the IBMPC version in TURBO C by supplying mixed memory
  1076.  *      mode information (NEAR and PASCAL). The executable is down to
  1077.  *      89K..but remember to name the code segment (from the options menu)
  1078.  *    1-apr-88
  1079.  *    - added remove-mark (^X<space>) to allow you to unset the mark
  1080.  *      in the current window.
  1081.  *    8-apr-88
  1082.  *    - Lots of twiddling with the mixed memory model TURBOC IBM-PC
  1083.  *      version... its 87K long now and fairly stable
  1084.  *    - changed behavior of CMODE when inserting blank lines
  1085.  *    - tightened stack usage from 32K to 20K
  1086.  *    9-apr-88
  1087.  *    - added new cinsert(). blank lines no longer confuse the CMODE
  1088.  *      indentation. Trailing white space is deleted when newline is
  1089.  *      hit in CMODE.
  1090.  *    12-apr-88
  1091.  *    - fixed long standing bug in query-replace-string. When the line the
  1092.  *      point originally starts on is extended (thus re-malloced) a '.',
  1093.  *      aborting the replace and returning to the original replace had
  1094.  *      locked things up. no more.
  1095.  *    07-may-88
  1096.  *    - fixed bug in narrow() ... it works everywhere now.
  1097.  *    [BBS release of 3.9n]
  1098.  *    3-june-88
  1099.  *    - removed restriction against deleting invisable buffers
  1100.  *    - a lot of little fixes suggested by Dave Tweten
  1101.  *    10-jun-88
  1102.  *    - added "safe save"ing as coded by Suresh Konda.
  1103.  *      (when writing a file to disk, it writes it to a temporary file,
  1104.  *       deletes the original and renames the temp file)
  1105.  *    - added $ssave flag to enable or disable safe file saving
  1106.  *    12-jun-88
  1107.  *    - added automatic horizontal window scrolling.    $hscroll (default
  1108.  *      is TRUE) controls if it is enabled. $fcol is the current first
  1109.  *      column of window in screen column one.  $hjump determines the
  1110.  *      number of columns scrolled at a time.
  1111.  *    - changed version number to 3.9o
  1112.  *    22-jun-88
  1113.  *    - made binary searches start from 0 instead of one... EMACS can
  1114.  *      find the first of many lists again.
  1115.  *    - more debugging things.  Added the dump-variable command which
  1116.  *      creates a buffer (like list-buffers does) with all the environment
  1117.  *      and user variables and their values.    Also the display (^XG)
  1118.  *      command prompts and lists the value of a variable.  These are
  1119.  *      both conditional on the DEBUGM symbol in estruct.h
  1120.  *    1-jul-88
  1121.  *    - fixed a bug in showcpos() which did not report the proper value
  1122.  *      for the current character when issued at the end of the file
  1123.  *    [Released internally as 3.9p]
  1124.  *    3-aug-88
  1125.  *    - changed keyname in stock() in bind.c to unsigned char for
  1126.  *      compilers that don't default. This allows more arbitrary
  1127.  *      rebinding. (submitor: David Sears)
  1128.  *    12-aug-88
  1129.  *    - changed wrap-word to force $fcol to 0
  1130.  *    - changed fill-paragraph (M-Q) to force $fcol to 0
  1131.  *    - added -i command line switch to initialize a variable's value
  1132.  *      for example:    emacs -i$sres VGA
  1133.  *    26-aug-88
  1134.  *    - changed code in update_line() in display.c to remove reliance
  1135.  *      on well behaved pointer subtraction (submitted by Kenneth Sloan)
  1136.  *    - fixed potential bug in fileio.c in ffgetline()
  1137.  *      (submitted by John Owens)
  1138.  *    6-sep-88
  1139.  *    - &right and &mid now check their arguments so the bytecopy can not
  1140.  *      start past the end of the string.
  1141.  *    - added $writehook to execute macroes when writing files
  1142.  *    - added $exbhook to execute macro when exiting an old buffer
  1143.  *    - added $bufhook to execute macro when entering a new buffer
  1144.  *    14-sep-88
  1145.  *    - asc_int() now ignores trailing non-digits
  1146.  *    15-sep-88
  1147.  *    - added &trim function to trim whitespace off a variable
  1148.  *    - changed message "Out of memory while inserting string" to
  1149.  *      "Can not insert string" as this error can result when the
  1150.  *      current buffer is in VIEW mode as well.
  1151.  *    - made trim-line, entab-line, and detab-line work on the
  1152.  *      current region if they have no arguments.  Also added alias
  1153.  *      trim-region, entab-region and detab-region.  The old names
  1154.  *      will hang about for a version, then dissapear.  I like the
  1155.  *      new functionality much better.
  1156.  *    25-sep-88
  1157.  *    - Inserted the macros isletter(), isuppper(), islower(), and
  1158.  *      CHCASE() whereever appropriate, replacing explicit character
  1159.  *      comparisons.    When DIACRIT is set to one, they become functions
  1160.  *      and know about the extended ascii character set.  Functions right
  1161.  *      now are in for MSDOS.C - other machines to follow.  From J. Gamble.
  1162.  *    26-sep-88
  1163.  *    - moved all text constants out to a language specific header file
  1164.  *      and left an english version of the constant in a remark at its
  1165.  *      occurence.
  1166.  *    - added $language to return the language of the current version
  1167.  *    - added elang.h to call the proper language specific module
  1168.  *    2-oct-88
  1169.  *    - removed DIACRIT conditional. Its there all the time now. Ripped
  1170.  *      the old code, and replaced it with a upcase[] and lowcase[]
  1171.  *      table.  Functions to manipulate it are now in new source file
  1172.  *      char.c and can be made conditional on system and language.
  1173.  *      Added table for extended MSDOS modeled after John Gamble's
  1174.  *      code.
  1175.  *    5-oct-88
  1176.  *    - got rid of CHCASE()..[except in the MAGIC mode search code]
  1177.  *      I ALWAYS force to upper or lower, and never simply swap.  They
  1178.  *      are now uppercase() and lowercase() in the new char.c source file.
  1179.  *    7-oct-88
  1180.  *    - added all the needed code to use TERMCAP on UNIX to interpret
  1181.  *      function and cursor keys.  A rather slimy trick involving
  1182.  *      the key timing is used, and this makes keyboard macroes
  1183.  *      a little dicy....
  1184.  *    - added the DIACRIT compilation flag back for people who
  1185.  *      want more speed in MAGIC mode.
  1186.  *    10-oct-88
  1187.  *    - as suggested by Michael Andrews, when the current buffer is
  1188.  *      in view mode, don't preallocate expansion room in new lines.
  1189.  *      (ie we aren't editing them anyway!)
  1190.  *    - added Microsoft Mouse drive... went very well. It all appears
  1191.  *      to work, just like the Atari ST mouse driver.
  1192.  *    11-oct-88
  1193.  *    - recieved and tested german.h header file from Martin Neitzel
  1194.  *      (unido!sigserv!neitzel@uunet.uu.net)
  1195.  *    15-oct-88
  1196.  *    - recieved and tested dutch.h header file from Paul De Bra
  1197.  *      (debra@research.att.com)
  1198.  *    - fixed a lot of mouse movement problems.  Dragging a mode line
  1199.  *      sideways horizontally scrolls a it's window.  Fixed positioning
  1200.  *      problems with scrolled and extended lines.
  1201.  *    - added $msflag to turn the mouse off
  1202.  *    - added $diagflag.  When set to FALSE, no diagonal movement is
  1203.  *      possible.  Vertical movement has precidence, but an explicit
  1204.  *      horizontal drag still works.
  1205.  *    - grabbing and dragging the last char of the command line allows
  1206.  *      you to resize the editing screen.  This should be tied into
  1207.  *      various windowing systems later.
  1208.  *    - write mouse-region-(down/up). See the emacs reference docs on the
  1209.  *      exact behavior of these.
  1210.  *    - deleted the old mouse-(kill/yank)-(up/down). They are
  1211.  *      redundant now, and don't work as well as mouse-region-*.
  1212.  *    2-nov-88    [changes submitted by Allen Pratt from ATARI]
  1213.  *    - created DIRSEPSTR and DIRSEPCHAR definitions for directory seperators
  1214.  *    - added TTflush in bindtokey() to force space out to terminal after
  1215.  *      binding name.
  1216.  *    - fixed a pointer casting problem in display.c involving pointer subtraction
  1217.  *    - removed the cursormove() from the beginning of mlwrite() so
  1218.  *      the cursor need not jump to the command line if the fisplay
  1219.  *      is disabled by setting $discmd to FALSE.
  1220.  *    - added >c to get a emacs command sequence and return it as
  1221.  *      a bindable string
  1222.  *    - changed scrnextup -> nextup, scrnextdn -> nextdown, and
  1223.  *      mlreplyt -> mltreply to make short symbol compilers happy.
  1224.  *    - added "print" as a synonim to "write-message".
  1225.  *    - added "source" as a synonim to "execute-file".
  1226.  *    - added a M-^X binding to the execute-command-line command
  1227.  *    4-nov-88
  1228.  *    - changed $tabsize to $hardtab. Added $softab as the current
  1229.  *      softtab size (previously only changable by the ^I (handle-tab)
  1230.  *      command.
  1231.  *    - fixed various problems in reglines() and made ^X^D (detab-region)
  1232.  *      and ^X^E (entab-region) use the current hard tab setting.
  1233.  *    - execute-command-line (M-^X) when executed within a macro line
  1234.  *      (which sounds redundent) will force all of the arguments of
  1235.  *      the executed command to be taken interactivly.  I needed this
  1236.  *      for the new macro to allow mouse functionality on the
  1237.  *      function key window.
  1238.  *    - taking Michael Andrew's suggestion to its conclusion, we no longer
  1239.  *      allocate any extra space except when inserting.  This has
  1240.  *      substantially decreased the memory usage.  Note that when
  1241.  *      we must explicitly set l_used to the proper amount since lalloc()
  1242.  *      is not responcible for the rounding up.
  1243.  *    - arranged to allow getstring() to return a NULL result.  Aborting
  1244.  *      out of an interactive prompt now will properly terminate a macro.
  1245.  *    [Released the 3.10 BETA test version...yes the ATARI version is broke]
  1246.  *    24-nov-88
  1247.  *    - fixed system V input char HOG problems as submitted by
  1248.  *      Kjartan R. Gudmundsson. Also eliminated some other 7 bit filters
  1249.  *      in unix.c at the same time.
  1250.  *    - reading function keys into table has been fixed in TCAP.C.  It will
  1251.  *      no longer attempt to strcpy NULL pointers.
  1252.  *    1-dec-88
  1253.  *    - multiple marks are now implemented. (What a task...). Set-mark
  1254.  *      (M-<space>), remove-mark (^X<space>) and exchange-point-and-mark
  1255.  *      (^X^X) all take a numeric argument from 0 to NMARKS-1 (9 now).
  1256.  *    2-dec-88
  1257.  *    - added goto-mark (M-^G) which moves the point to the requested mark.
  1258.  *    - fixed some VMS things that Curtis pointed out...
  1259.  *    - fixed bug in crypt() algorith!!!! This works properly now.  I had
  1260.  *      to add a $oldcrypt environment variable to trigger the broken
  1261.  *      behavior so people could decrypt their old files.  I will probably
  1262.  *      have to live with this.....
  1263.  *    15-dec-88
  1264.  *    - added end-of-word command to advance just past the end of a word.
  1265.  *    20-dec-88
  1266.  *    - added definitions for SUN's OS and SCO XENIX to allow us to use
  1267.  *      specific calls in those OSs for waiting and timing.
  1268.  *    - merged in XTCAP.C as submitted by Guy Turcotte into tcap.c.  This
  1269.  *      mirrors the BSD 4.3 changes for function keys for the SCO XENIX
  1270.  *      and SUN OS versions
  1271.  *    14-jan-89
  1272.  *    - added $region as a read only variable (max 128 chars) of the
  1273.  *      current region (as suggested by Allan Pratt)
  1274.  *    - changed KEYTAB structure to allow us to bind user macroes
  1275.  *      (buffers) to keys as well as C functions. Lots of changes
  1276.  *      for this.
  1277.  *    18-jan-89
  1278.  *    - finished changes for the new KEYTAB structure.
  1279.  *    - modified describe-bindings to display the bound macroes.
  1280.  *    - added arguments to nullproc() in main.c (BUG FIX!)
  1281.  *    - tried (and succeeded) in defining the pascal keyword
  1282.  *      for MSDOS & TURBO. A 2k reduction in the executable was nice.
  1283.  *    - added macro-to-key (^X^K) function to bind a macro to a key.
  1284.  *    19-jan-89
  1285.  *    - made numeric arguments to keys bound to macroes repeat those
  1286.  *      macroes n times.
  1287.  *    - modified docmd() to look for a macro name if it could not find
  1288.  *      a function name. Again a numeric leadin implies repitition.
  1289.  *    - added machine code execpr() function to the IBMPC version
  1290.  *      because under NOVELL Netware, the DOS 4B exec call does not
  1291.  *      preserve the stack on exit... thus execprog() would die.  This
  1292.  *      requires that you add execpr.obj to the make and link files!
  1293.  *      There is a symbol (NOVELL) in estruct.h to control this code
  1294.  *      being included.
  1295.  *    24-jan-89
  1296.  *    - various bug fixes and type fixes as suggested by the high C
  1297.  *      compiler on the IBM-RT
  1298.  *    1-feb-89
  1299.  *    - changed the fgetc() in unix.c to a read() under V7 and BSD so
  1300.  *      the time dependant function key checking works.
  1301.  *    - added a support for Hewlet Packard's UNIX system which
  1302.  *      is a System V with BSD 4.3 enhancements.  This is controled
  1303.  *      by the HPUX symbol in estruct.h.
  1304.  *    5-feb-89
  1305.  *    - modified mouse-region-up so right clicking down on a modeline and
  1306.  *      then releasing closes that window
  1307.  *    12-feb-89
  1308.  *    - Goaded onward by file completion code submitted by Fuyau Lin, all
  1309.  *      the completion code has been re-written and layered properly.
  1310.  *      Any OS specific driver need to now supply getffile() and
  1311.  *      getnfile() to supply a completion file list, or these can
  1312.  *      return NULL on systems where this is not possible. All this code
  1313.  *      is conditional on the COMPLET symbol in estruct.h.
  1314.  *    17-mar-89
  1315.  *    - system V code from April 1989 "C Users Journal" installed in
  1316.  *      UNIX.C. Hope this puts that problem to rest.
  1317.  *    - Jeff Lomicka fixed a lot of mousing bugs in ST520.c
  1318.  *    - Re-wrote AMIGADOS.C.  This should work properly with INTUITION
  1319.  *      and lots of windowing (resizing, mousing, etc.)
  1320.  *    - more additions for the DATA GENERAL from Doug Rady. (read
  1321.  *      the history in aosvs.c for details).
  1322.  *    - orginized the NOSHARE, VIOD and CONST keywords better.
  1323.  *    - A lot of general cleanup.
  1324.  *    [Released as version 3.10 to the world]
  1325.  *    05-may-89
  1326.  *    - installed the BRICKS revsion control system (from DATALIGHT)
  1327.  *      on my PC developmental machine.  This should make diffs possible.
  1328.  *      The installation was convoluted to to brick's inibility to
  1329.  *      use subdirectories, and implemented through a much more
  1330.  *      complex makefile.
  1331.  *    - fixed a missing structure element in line 1230 of eval.c
  1332.  *    - set attribute to clear screen to 07 in ibmeeop.  This fixes
  1333.  *      a long standing bug involving not seeing the modeline.
  1334.  *    16-may-88
  1335.  *    - a bad character in UNIX.C's code for the HPUX is fixed
  1336.  *    - a couple of header problems for HPUX fixed
  1337.  *    - a bug in EVAL.C comparing var names past 10 chars is fixed
  1338.  *    - added Dan Corkill's ISEARCH mods (see ISEARCH.C) Had
  1339.  *      to fix them to allow function keys at the end of an isearch.
  1340.  *    22-may-89 John Gamble
  1341.  *    - added $SEARCHTYPE var to determine where searches terminate.
  1342.  *        0 = forward: after string, backward: at beg of string
  1343.  *        1 = always at beginning of string
  1344.  *        2 = always character past end of string
  1345.  *      added code and vars all around for this
  1346.  *    28-may-89
  1347.  *    - finished fixing ISEARCH to properly allow function keys and
  1348.  *      mouse movement to terminate the ISEARCH.
  1349.  *    28-may-89 John Gamble
  1350.  *    - Code finally added to handle the $SEARCHPNT (nee' $SEARCHTYPE)
  1351.  *      variable.  Frankly, i think its pretty sloppy, and should
  1352.  *      be replaced by a separate function to deal with point positions.
  1353.  *      Will change it later.
  1354.  *    7-jul-89 John Gamble
  1355.  *    - A far more elegant way of dealing with $SEARCHPNT is present,
  1356.  *      more efficient in space also.  Didn't need the above mentioned
  1357.  *      point function.  Altered ISEARCH.C code to use new calling
  1358.  *      parameters in scan routines.
  1359.  *    - Got started with group structure in MAGIC mode, with alterations
  1360.  *      present in estruct.h and search.c
  1361.  *    15-jul-89 John Gamble
  1362.  *    - added $disphigh environment variable to control the escaped
  1363.  *      display of high bit set ascii characters
  1364.  *    05-aug-89 Daniel Lawrence
  1365.  *    - added to lines to lbound() so a forward search will no longer
  1366.  *      wrap around the end of the buffer if the point was at the end.
  1367.  *    - widen-from-region (^X>) preserves the point and marks if they
  1368.  *      were at the end of the fragment, instead of moving them to
  1369.  *      the end of the buffer.
  1370.  *    - fixed bug in comp_file() to allow up to 128 char files specs
  1371.  *      instead of 32 chars.
  1372.  *    - patched some bugs in the TIPC version.  It runs again, but
  1373.  *      without a mouse and color and reverse video.  The TIPC I had
  1374.  *      to test on was a weird mono one....
  1375.  *    - released 3.10a to the BBS for TIPC users
  1376.  *    05-aug-89 John Gamble
  1377.  *    - refolding and shoving a lot has managed to knock about 300
  1378.  *      bytes of code out of search.c and isearch.c.  Also the some of
  1379.  *      the various commands in an isearch now shadow their bigger
  1380.  *      counterparts.
  1381.  *    - fixed the tab bug in entab-region (^X-^E) which munged lines.
  1382.  *    15-aug-89 Daniel Lawrnece
  1383.  *    - added append-file (^X^A) command to append a buffer on the
  1384.  *      end of a file
  1385.  *    [released 3.10b to Krannert.....]
  1386.  *    20-aug-89 Daniel Lawrence
  1387.  *    - The quote character is now treated as the abort and universal-
  1388.  *      argument characters are: only one key may be bound to it at
  1389.  *      a time.
  1390.  *    9-sep-89
  1391.  *    - a bug in msdos.c prevented the proper binding of ALT-0 on the
  1392.  *      IBMPC. Fixed this as pointed out by Rik Faith.
  1393.  *    17-sep-89 John M. Gamble
  1394.  *    - Isearch now understands alternatively bound keys.
  1395.  *      One change had to be made to ebind.h and input.c, to handle
  1396.  *      the delete-previous-character command.  The delete character
  1397.  *      is now represented internally as CNTL|'?', instead of 0x7F.
  1398.  *      Changes made to handle this are in ebind.h and input.c.
  1399.  *    16-dec-89
  1400.  *     - Incorporated Kevin Mitchell's VMS improvements.  Using the
  1401.  *       native RMS file I/O, and native memory memory routines
  1402.  *       GREATLY speeds up file and buffer manipulation.
  1403.  *    17-dec-89
  1404.  *    - updated the HP150.C file to work with the new style I/O layers.
  1405.  *      hp150 version now works properly.
  1406.  *    25-jan-90
  1407.  *    - dumped a lot of the old choice symbols in estruct.h for some
  1408.  *      things which have either never been used, or have clearly
  1409.  *      superior versions now.
  1410.  *    - removed the WORDPRO and AEDIT symbols.... all this code is
  1411.  *      always in now.  (it never made much of a size difference anyway)
  1412.  *    - modified sources to allow them to use new ANSI style prototypes.
  1413.  *      (this was a lot of work....)
  1414.  *    - in the process, fixed bug where EMACS probably grew confused
  1415.  *      when setting $curchar to a newline.
  1416.  *    26-jan-90
  1417.  *    - replaced old file completion code with version by Michael J. Arena
  1418.  *      It allows us to partially complete directory names on UNIX.
  1419.  *    - modified getffile in MSDOS.C to return directory names as well
  1420.  *      so it can work with the above mod.  I need to do this mod on
  1421.  *      all OSs which will support it.
  1422.  *    - added support for the Supermax UNIX system as submitted by
  1423.  *      Michael Hillerstrom.
  1424.  *    - fixed a couple of OS2 bugs having to do with key input as submitted
  1425.  *      by Sugih Jamin
  1426.  *    - fixed three bugs posted by Kieth Jones (in display.c and eval.c)
  1427.  *    - let the TURBO C MSDOS version use the bios instead of DOS for
  1428.  *      keybord input as submitted by David R. Kohr.  This should solve
  1429.  *      problems with TSRs like Sidekick that break rules.
  1430.  *    - fixed a bug in MSDOS.C's getffile involving how the filename was
  1431.  *      parsed.  Paths including ".." now can expand properly.
  1432.  *    [Released version 3.10e to USENET]
  1433.  *    - changed version number to 3.10f
  1434.  *    15-feb-90
  1435.  *    - added $lterm variable to allow emacs to write non-standard line
  1436.  *      terminators on output.  Set to "" it uses standard terminators.
  1437.  *    - forced ffgetline() to trim trailing line terminators on reading
  1438.  *      this allows us to read strange files more robustly.
  1439.  *    - removed the ADDCR option as the var above can do it
  1440.  *    17-mar-90
  1441.  *    - John Gamble found and fixed a bug in the binding code erroneously
  1442.  *      searching for a particular empty slot.
  1443.  *    22-mar-90
  1444.  *    - changed line buffer allocation scheme during file reading to
  1445.  *      use realloc() and always double the buffer size.  Much faster
  1446.  *      on long line reads. 
  1447.  *    01-may-90
  1448.  *    - added code to allow SUN verion to work properly
  1449.  *    - added .xlk style file locking for unix systems
  1450.  *    10-may-90
  1451.  *    - added NEC 9801 hardware driver.  There is no background color
  1452.  *      implimented yet as this will involve using the graphic planes
  1453.  *      to simulate a backgound color.
  1454.  *    25-may-90
  1455.  *    - added DBCS (Double Byte Character Set) symbol to estruct.h and
  1456.  *      also much conditional code to handle display and editing of
  1457.  *      DBCS chars.  This code is active in the NEC version, using
  1458.  *      japanese KANJI characters.
  1459.  *    - added REP (replace) mode. Very similar to OVER mode except
  1460.  *      tabs and 2 byte characters are handled differently.
  1461.  *    6-jun-90
  1462.  *    - modified ansi.c into fmr.c for the Fujitsu FMR-70 series
  1463.  *      msdos machines.  Extensive modifications to msdos.c were
  1464.  *      needed to accomodate this machine. 
  1465.  *    16-jun-90
  1466.  *    - modified swbuffer() to not check locks on an inactive buffer
  1467.  *      in view mode.  This allows the -v switch to work from the
  1468.  *      command line on a file whose directory the user has no
  1469.  *      write access to.
  1470.  *    28-jun-90
  1471.  *    - added background colors to the FMR driver utilizing the
  1472.  *      graphics planes via the GDS driver.
  1473.  *    30-jun-90
  1474.  *    - added $wchars, a list of characters considered "in a word".
  1475.  *      An empty value sets this to its default of alphas, numbers
  1476.  *      and the underscore (_) character.
  1477.  *    5-jul-90
  1478.  *    - re-arranging code to vector all pop up windows through on
  1479.  *      function for display.
  1480.  *    - fixed bug in positioning of file name in buffer list
  1481.  *    6-jul-90
  1482.  *    - added ability to pop up temporary windows.  Environment variable
  1483.  *      $popval gives the old behavior when FALSE and the new behavior
  1484.  *      when TRUE.
  1485.  *    - added pop-buffer function to allow user to pop up the contents
  1486.  *      of a buffer.
  1487.  *    27-jul-90
  1488.  *    - fixed up the OS2 code back into working.  Wrote getffile()
  1489.  *      and getnfile() to allow it file name completion.
  1490.  *    27-jul-90 John M. Gamble
  1491.  *     - Magic mode characters '+' and '?' added, respectively meaning
  1492.  *    "one to many" and "zero to one (or, optional)".
  1493.  *    12-oct-90
  1494.  *    - A BAD bug in vteeol() hung the machine during the redraw.  Vtcol
  1495.  *    was not getting incremented when the screen was scrolled horizontally.
  1496.  *    26-nov-90
  1497.  *    - conditionalized code in MSDOS.C using the BIOS to not be used when
  1498.  *    compiled for the HP150.  (It's bios is different, of course)
  1499.  *    15-jan-91
  1500.  *    - in linstr() made an non-positive number of inserted characters
  1501.  *      illegal, causing the linstr to return FALSE on negative and
  1502.  *      TRUE on zero... but not changing the text
  1503.  *    15-jan-91
  1504.  *    - rewrote dolock.c to generalize it. it now supports MSDOS and SUN
  1505.  *      the SUN code should work on other UNIXs, but needs confirmation
  1506.  *    17-jan-91  John Gamble
  1507.  *    - removed references to DIACRIT
  1508.  *    - added the $yankpnt variable.
  1509.  *    21-jan-91  Daniel Lawrence
  1510.  *    - adding OS2 support for file locking
  1511.  *    07-mar-91
  1512.  *    - added the concepts of SCREENs.  Each screen is a separate list
  1513.  *      of windows which overlay on text based systems.
  1514.  *
  1515.  *    New commands:
  1516.  *      next-screen        (A-N) switch to the following screen
  1517.  *      previous-screen    (A-P) switch to the previous screen
  1518.  *      find-screen        (A-F) switch or create a named screen
  1519.  *      delete-screen        (A-D) delete the named screen
  1520.  *      list-screens        (A-B) how list of screens
  1521.  *
  1522.  *    New variables:
  1523.  *      $scrname        name of the current screen
  1524.  *      $scrnum        ordinal number of the current screen
  1525.  *
  1526.  *    Most of the code for this is in the new source file SCREEN.C
  1527.  *
  1528.  *    11-mar-91    Code from or suggested by Michael C. Andrews
  1529.  *    - getstring() now accepts ^K to return a non-default empty
  1530.  *      result. (to allow for NULL replace strings!)
  1531.  *    - added indent-region [M-)] and undent-region [M-(]
  1532.  *    - added &ISNum function to test variables for being numeric
  1533.  *    - added $curwind and $numwind to give the current ordinal and total
  1534.  *      number of windows on the current screen
  1535.  *    12-mar-91    Daniel Lawrence
  1536.  *    - checked and fixed code for IBMPC MicroSoft C 5 and 6 compilers
  1537.  *    15-mar-91    Curtis Smith
  1538.  *    - masked the number generated by ernd in writeout() to limit it
  1539.  *      to 5 digits so that MPE won't barf on a too long file name
  1540.  *      for the temporary file
  1541.  *    19-mar-91    Daniel Lawrence
  1542.  *    - added code to parse drive letters to dolock()/undolock()
  1543.  *      MSDOS is happier.
  1544.  *    - changed search order of files to look in current directory
  1545.  *      before HOME and PATH dirs.
  1546.  *    24-mar-91
  1547.  *    - command file names default to a .cmd extention from the command
  1548.  *      line and from the source command.
  1549.  *    [released BETA version 3.11]
  1550.  *    02-apr-91
  1551.  *    - neglected to decrement buffer use counts in free_screen()
  1552.  *      These are now fixed, so delete-screen is again safe.
  1553.  *    19-apr-91 John M. Gamble
  1554.  *    - Made a couple of functions, cclmake() in particular, more efficient.
  1555.  *      Saved a hundred bytes or so, which were immediately used up by:
  1556.  *    - Groups!  Groups are now available in MAGIC mode! (hurrah).
  1557.  *    - Fixed bug where $match would get set with the wrong characters
  1558.  *      if searching backwards.
  1559.  *    - also declared as VOID the VOID functions in search.c.  Should
  1560.  *      get nattered at less often now.
  1561.  *    23-apr-91 Daniel Lawrence
  1562.  *    - namebuffer() was only updating the current modeline. It needed to
  1563.  *      update all of them in case the current buffer was in multiple
  1564.  *      windows. This bug was pointed out by Martin Shultz.
  1565.  *    - added code from Floyd Davidson for new backward kill behavior. This
  1566.  *      is under the NEWKILLB symbol and is for evaluation.
  1567.  *    24-apr-91
  1568.  *    - John Gamble points out that local variable "ap" in mlwrite() can
  1569.  *      not be register type. Fixed this.
  1570.  *    - as reported by Martin Shultz, tabs caused problems in OVERwrite
  1571.  *      mode since the logic for determining to delete or not was based
  1572.  *      on offset into the line rather than column. Preceding tabs
  1573.  *      confused this. I changed the offset reference (in main.c) to a
  1574.  *      reference to the getccol() function and all is well.
  1575.  *    - Risto Kankkenun pointed out a problem in the input handling of
  1576.  *      any completion command... it did not handle function keys well,
  1577.  *      and blocked some normal keys from being used. Inputing an
  1578.  *      extended character in complete() and then translating it to a
  1579.  *      standard ascii char let us correct this.
  1580.  *    - Risto also points out a one character difference between word
  1581.  *      wrapping and paragraph filling. Changed a couple of >= to > in
  1582.  *      reform() in word.c to correct this.
  1583.  *    27-apr-91  John Gamble
  1584.  *    - Oops.  In changing the closure code, so that groups and closure
  1585.  *      could be used together, i broke closure.  Argh.  Fixed now.
  1586.  *    - Added the &GROUP function, so that macro writers could get at
  1587.  *      the substrings matched by groups in a MAGIC search.
  1588.  *    - Since $yankpnt is a Boolean type now, changed its name to
  1589.  *      $yankflag.
  1590.  *    - Altered the broadcast message interceptor code in VMS.C.  Instead
  1591.  *      of using a %variable to hold the message, which was not large
  1592.  *      enough, the message(s) are stashed away in a buffer.  Added a
  1593.  *      global boolean variable pending_msg, which Dan will use to notify
  1594.  *      the user of an intercepted message.
  1595.  *    1-may-91  Daniel Lawrence
  1596.  *    - the backward kill code was very interesting.... but did not update
  1597.  *      the $kill variable (via getkill() in eval.c) and caused all sorts
  1598.  *      of interesting sideffects when the clear kill buffer code was not
  1599.  *      updated either. I refigured the algorithm to use the current kill
  1600.  *      blocks, growing them backwards as needed. Recoding this, it all
  1601.  *      works properly now, allowing negative kills and proper behavior
  1602.  *      when mixing various consective forward and backward kills. This
  1603.  *      new code is smaller and involved less changes.
  1604.  *    2-may-91
  1605.  *    - changed some WFHARDs to WFMOVEs in basic.c for gotobob() and
  1606.  *      gotoeob() as suggested by Risto Kankkunen
  1607.  *    - removed a call to turn break off under MSDOS in ibmkopen()
  1608.  *      in ibmpc.c to answer a observation from John A Steele
  1609.  *    - changed some file names. ATARI.C => TOS.C   ST520.C => ST52.C
  1610.  *      to more accurately reflect the OS and screen code for the ATARI
  1611.  *    - made a lot of changes in TOS.C as specified by Allan Pratt
  1612.  *    - fixed setkey() to not choke on undefined functions
  1613.  *    11-jun-91
  1614.  *    - added in support for LATIN as submited by Anthony Appleyard
  1615.  *    - cause the prompt for search patterns to show the current search
  1616.  *      terminator
  1617.  *    23-jun-91
  1618.  *    - in BASIC.C in gotobop/eop() changed some offests to zero constants
  1619.  *      speeding things up.
  1620.  *    - also added $scribe so I can add in scribe specific formatting
  1621.  *      features, like deciding @commands at the begining of lines delimit
  1622.  *      paragraphs.
  1623.  *    26-jun-91    John Gamble
  1624.  *    - added check for isearch and risearch binding in the incremental
  1625.  *      search commands, as suggested by ???.
  1626.  *    - Put in new text strings from search.c into the <language>.h files.
  1627.  *    - Removed the code in BIND.C which checked for the .rc file in the
  1628.  *      current directory before checking HOME.  This was dangerous in a
  1629.  *      multi-user environment.  Change the HOME variable if you want to
  1630.  *      use a different set of .rc and .cmd files.
  1631.  *    10-jun-91    Daniel Lawrence
  1632.  *    - dumped $scribe. Instead we are adding features to handle any
  1633.  *      formatter of that style. $fmtlead lists all formatter command
  1634.  *      leadin characters. $paralead lists all paragraph start charaters.
  1635.  *    - changed a check in setvar() to allow an interactive input value
  1636.  *      to be just the <NL>, allowing you now to interactively set
  1637.  *      a variable to being empty. ^G still aborts the set.
  1638.  *    17-jun-91
  1639.  *    - a missing parenthesis in a conditional in cinsert() sometimes
  1640.  *      caused a problem when strinking return in CMODE
  1641.  *    24-jul-91
  1642.  *    - changed a write in ttflush() to go to stdout instead of stdin
  1643.  *    18-aug-91
  1644.  *    - replaced tipc.c driver and made minor accomodations to many files
  1645.  *      for support of memory mapped TIPC driver under Zortech C as supplied
  1646.  *      by Ron Lepine
  1647.  *    - added code to msdos and OS/2 to recognize F11, F12 and application
  1648.  *      keypad as seperate, bindable keys. Submitted by Jon Saxton
  1649.  *    2-Sep-91
  1650.  *    - made some minor changes for OS/2 submitted by John Ladwig
  1651.  *    4-Sep-91
  1652.  *    - made a lot of adjustments to the new keyboard.c file for recognizing
  1653.  *      IBMPC extended keys. I think most of its keys are now mapped in all
  1654.  *      modes which the BIOS will recognize under both MSDOS and OS/2.
  1655.  *    6-Sep-91 John M. Gamble
  1656.  *    - changed the outer while loop of scanner() to a if/do-while
  1657.  *      combination.  This allowed the removal from the inner loop of an if
  1658.  *      statement that was returning a constant value.  Speeds up searches
  1659.  *      noticably.
  1660.  *    - reverse searching in fbound() was using matchlen as a jump increment.
  1661.  *      This causes reverse-search to fail if we had just removed MAGIC mode,
  1662.  *      since matchlen may be different from the pattern length, causing the
  1663.  *      search to fail.  Changed to (patlenadd + 1).
  1664.  *    - Code which stored away the previous match before saving the current
  1665.  *      match is moved to the replaces() function where it belongs.  Less
  1666.  *      work for simple searches.  Also changed the free()/malloc()
  1667.  *      combinations to simple realloc() calls - much neater.
  1668.  *    - Putting the "next character" calls in the correct place in amatch()
  1669.  *      meant that i could get rid of all the special checking for BOL and
  1670.  *      EOL characters.  Saved much code space that way.
  1671.  *    - Fixed the fence flashing bug where the cursor failed to flash back
  1672.  *      to a fence which was the first character in a buffer.  Simple matter
  1673.  *      of moving the forward/backward cursor calls in the right place.
  1674.  *    - New function regtostr() is what is called now to save matches, group
  1675.  *      matches, set $region, etc.  Space saver, faster.
  1676.  *    7-Sep-91 John M. Gamble
  1677.  *    - Changed the realloc()s back to free()/malloc() combinations.
  1678.  *      There are still compilers out there who do not have ANSI C
  1679.  *      functions, like certain UNIX systems, which used to be on the
  1680.  *      cutting edge, but are now warts.  Arghhh.
  1681.  *    - Fixed a group length problem, when matchlen was getting added
  1682.  *      more than once (closure again).  New group_length array fixes
  1683.  *      that.
  1684.  *    12-Sep-91 Daniel Lawrence
  1685.  *    - fixed setting of $cbflags, changing mask from BFCHG&BFINVS to
  1686.  *      BFCHG|BFINVS, letting it work as suggested by John Gamble
  1687.  *    14-Sep-91
  1688.  *    - fixed a bug in the mouse handling in mouseline() which prevented
  1689.  *      us from positioning the mouse on the last line of the window when
  1690.  *      $modeflag was set to FALSE
  1691.  *    15-Sep-91
  1692.  *    - In frustration from the new help system crashing and leaving me
  1693.  *      unable to comunicate visibly with the command like, emacs now
  1694.  *      sets $discmd and $disinp to TRUE whenever it goes to fetch an
  1695.  *      interactive command. Delete the assignment in execloop() if this
  1696.  *      gets in the way
  1697.  *    21-Sep-91
  1698.  *    - the new code for decoding the AT keyboard fails real poorly on an
  1699.  *      XT or earlier style machine. When ATKBD is enabled, if the call
  1700.  *      fails the first time, emacs automatically switched to using the
  1701.  *      old style (not that old really) BIOS calls for input.
  1702.  *    5-Oct-91
  1703.  *    - two new variables, $orgrow and $orgcol, and two new function
  1704.  *      change-screen-row and change-screen-column, all you to change
  1705.  *      the upper left corner of emacs' screen on the physical screen.
  1706.  *      You must resize the screen smaller than default before this
  1707.  *      will work.
  1708.  *    - screen resolution changes on the IBMPC force the screen back
  1709.  *      to the upper left corner. This may change in the future.
  1710.  *    8-Oct-91
  1711.  *    - size and position of screen maintained in the SCREEN structure
  1712.  *      so switching screen resets these.
  1713.  *    - Mousing code now switches screens if mouse is used outside of
  1714.  *      current screen.
  1715.  *    9-Oct-91
  1716.  *    - Switching screen deactivates modeline of outgoing screen.
  1717.  *    - Screen list now orginized front->back instead of alphabetically
  1718.  *    - dumped $scrnum as it changes dynamically and is not very usefull
  1719.  *    - replaces next-screen and previous-screen with cycle-screens (A-C)
  1720.  *      which brings the rearmost screen to front. Mousing to a window
  1721.  *      now operates in front to back order! screen.c is smaller!
  1722.  *    11-Oct-91
  1723.  *    - added logic to refresh screens when sizing down or moving screen
  1724.  *    - added $deskcolor var to hold color desktop should be cleared to
  1725.  *    - added TERM structure entry .t_clrdesk as a ptr to function to
  1726.  *      clear the desktop when redrawing windows
  1727.  *    15-Oct-91
  1728.  *    - added code to ibmpc version to properly track screen resolution
  1729.  *      changes. If a screen is the size of the desktop at resolution change
  1730.  *      time, it is resized to the new desktop size.
  1731.  *    16-Oct-91
  1732.  *    - noticed the wrong character set when returning from VGA12 mode
  1733.  *      on the ibmpc. Added code to fix this in egaclose() in ibmpc.c
  1734.  *    21-oct-91
  1735.  *    - added code in IBMPC output routine to interpret char 7 as a beep
  1736.  *    25-oct-91
  1737.  *    - added ability of macro to suppress screen redraw by setting second
  1738.  *      bit in $gflags... like after a shell-command that doesn't output
  1739.  *    30-oct-91
  1740.  *    - added ability to set any $...hook variable to a named procedure
  1741.  *      as well as a built in command.
  1742.  *    - modified the standard startup file EMACS.RC to use named procedures
  1743.  *      rather than numbered macroes for all its internal functions.
  1744.  *    - Modified manual to emphisize the use of named procedures rather
  1745.  *      than the execute-macro-<n> commands which I am trying to phase out.
  1746.  *    31-oct-91
  1747.  *    [RELEASED version 3.11 for general distribution]
  1748.  *    31-Oct-91 Ken Cornetet
  1749.  *    - extra parameter in non-proto version of setkey() deleted
  1750.  *    - Microport V/AT modifications. An "ndir" package is needed
  1751.  *      (contact Ken at <kenc@ezelmo.UUCP> for this)
  1752.  *      Also, set terminfo string "is2" on closing tty
  1753.  *    19-Nov-91 Pete Dunlap
  1754.  *    - changed initializers for search path for the AMIGA to more closely
  1755.  *      resemble reality, don't need to put boot disk in on each search
  1756.  *    - added XENIX to the list of files to preserve permisions
  1757.  *    19-Nov-91 Daniel Lawrence
  1758.  *    - added two missing zeroes in the TERM structure for the HP150
  1759.  *    21-nov-91
  1760.  *    - added $timeflag, when TRUE displays hour/minute of last keystroke
  1761.  *      on bottom modeline
  1762.  *    - ? in file/buffer/command name completion brings up a completion
  1763.  *      list as will a partial completion attempt.
  1764.  *    - changed all lists/description popups to BFINVS invisible buffers
  1765.  *    - changed name of buffer list buffer from [List] to [Buffers]
  1766.  *    - added some missing systems to the list for dolock() in dolock.c
  1767.  *      (notable USG, V7 and BSD)
  1768.  *    23-nov-91
  1769.  *    [RELEASED update 3.11a via BBS]
  1770.  *    24-dec-91
  1771.  *    - added new commands yank-pop (M-Y), delete-kill-ring (M-^Y),
  1772.  *      and cycle-ring (^X-Y) to handle a ring of kill buffers. More
  1773.  *      info on their use in the reference manual.
  1774.  *    - changed version to 3.11b
  1775.  *    5-jan-92 John M. Gamble
  1776.  *    - pop-buffer, with a numeric argument, now behaves like select-buffer
  1777.  *      by making that buffer INVISIBLE.
  1778.  *    - Reverse search groups handled more sensibly, smaller code.
  1779.  *    7-jan-92 Walter Warniaha/via BBS
  1780.  *    - made some fixes to help MSC under MSDOS work properly. Set default
  1781.  *      stack to 20K, fixed some variable conflicts.
  1782.  *    15-jan-92
  1783.  *    - added $posflag to show point position on current modeline as
  1784.  *      suggested by Brian Casiello, defaults to on.
  1785.  *    19-jan-92 John M. Gamble
  1786.  *    - On some otherwise ANSI C compilers, __STDC__ is not 1, because we
  1787.  *      also make use of the PASCAL modifier, which is not ANSI.  So in
  1788.  *      ESTRUCT.H, where there is a check on __STDC__, we also list the
  1789.  *      other ANSI C compilers.  This turns on VOID, CONST, and makes
  1790.  *      ETYPE a union instead of a struct.
  1791.  *    25-jan-92 John M. Gamble
  1792.  *    - Normal Isearch exit updates the search jump tables too.
  1793.  *    31-jan-91 Daniel Lawrence
  1794.  *    - fill-paragraph on an empty buffer no longer hangs
  1795.  *    - changed version number to 3.11c and released via BBS
  1796.  *    15-Feb-92
  1797.  *    - changed vars in showcpos() to count lines as longs!
  1798.  *    - all line number calculations are now in longs
  1799.  *    16-Feb-92 John Gamble
  1800.  *    - use strrev() (which is a library function for some compilers)
  1801.  *      instead of rvstrcpy(), which bites the dust.
  1802.  *    - For compilers whose realloc() can handle NULL pointers, use that
  1803.  *      instead of free()/malloc() combinations.  #if'd, of course.
  1804.  *    - isearch() understands prefix characters now.
  1805.  *    6-Mar-1992 John Gamble
  1806.  *    - Extraordinarily complicated change which involved dumping expandp()
  1807.  *      and using Dawn Banks's echochar() routine to prompt for searches
  1808.  *      and replaces.  Dropped functions mltreply(), promptpattern().
  1809.  *      Moved prompting out of getstring(), and changed functions that call
  1810.  *      getstring(), whose prompting had some extra baggage.  New functions
  1811.  *      mlprompt(), mlrquery(), and echostring().  The function echochar()
  1812.  *      has been moved to INPUT.C.
  1813.  *      The end result of all this is that query-replace-string will prompt
  1814.  *      with the *matched* characters, as opposed with just the search
  1815.  *      and replacement patterns.
  1816.  *    - Altered TEXT{68,69,78,81,84,85,86} to reflect new prompting in ALL
  1817.  *      language header files.
  1818.  *    - cmdstr() returns char*.
  1819.  *    - Back deleting in Isearch will delete the ^Q along with the quoted
  1820.  *      character now.
  1821.  *    - Check posflag to see if line/col info has to be updated in
  1822.  *      incremental-search and query-replace-string.
  1823.  *    29 Mar 1992 John Gamble
  1824.  *    - added the &rev function to reverse the order of characters in
  1825.  *      a string.
  1826.  *    17 April 1992 Daniel Lawrence
  1827.  *    - I started to encapsulate all LINE handling in macroes, in preporation
  1828.  *      for them becoming functions in a version to handle unlimited file
  1829.  *      sizes under MSDOS.
  1830.  *    - changed default for $posflag to FALSE. This will be important
  1831.  *      when we are going through expanded memory or disk for the line
  1832.  *      links.
  1833.  *    30 April 1992 Curtis Smith
  1834.  *    - The HP3000 under MPE also has problems like the HP150 with
  1835.  *      reverse video. Added MPE to such a define in display.c
  1836.  *    - replaced the MPE.C program
  1837.  *    - supplied new build files for MPE
  1838.  *    07 May 1992 Jerry Staddon
  1839.  *    - added code to getboard() in ibmpc.c to save EGA and VGA info
  1840.  *      on startup to allow proper restoration on exit
  1841.  *    20-Jul-92 Daniel Lawrence
  1842.  *    - added mouse support to the OS/2 non-presentation manager version
  1843.  *    21-Jul-92
  1844.  *    - integrated in Walter Warniaha's support for Windows NT
  1845.  *    22-Jul-92
  1846.  *    - rewrote a lot of the Windows NT code to make it work under the
  1847.  *      newest BETA. NT changed a lot.
  1848.  *    29-Jul-92
  1849.  *    - added a ttflush before the ttclose()s in scclose() in unix.c as
  1850.  *      suggested by Bruce Momjian <pure-ee!jabber.BTS.COM!candle!root>
  1851.  *    31-Jul-92
  1852.  *    - in display.c, added line to vtputc() to mask off upper 8 bits of
  1853.  *      passed in int to defeat sign extention of characters. Using the
  1854.  *      char as unsigned char switch on a lot of compilers should no
  1855.  *      longer be neccessay
  1856.  *    - fixed a bug in file.c where a chmod() call needed to be changed
  1857.  *      to a chown() call in writeout().
  1858.  *    24 Sep 1992 John Gamble
  1859.  *    - Merged Pierre Perret's MSWIN MicroEMACS sources (3.11c) with the
  1860.  *    current sources (3.11e).  First pass.  Now follows extensive testing.
  1861.  *    23 Oct 92 Daniel Lawrence
  1862.  *    - debugged problems in merged sources. Generated working DOS and
  1863.  *      microsoft windows versions! new makefile for MSWINdows
  1864.  *    - rigged unique buffer name to getfile() in file.c to prevent
  1865.  *      lockups when processing find-files non-interactivily on files
  1866.  *      with the same filename but different paths
  1867.  *    24 Oct 92
  1868.  *    - Buffer variables (#<bufname>) now return the string "<END>" when
  1869.  *      they reach the end of the buffer.
  1870.  *    25 Oct 92
  1871.  *    - moved rename-screen (A-N) from windows specific code to the portable
  1872.  *      code and bound it be default to ALT-N.
  1873.  *    25 Oct 92 Pierre Perret
  1874.  *    - in mswfile.c change an expression in FileDlgOK() to fix a problem
  1875.  *      dealing with file names.
  1876.  *    25 Oct 92 Daniel Lawrence
  1877.  *    - developing startup files under windows was just too complex.
  1878.  *      I changed the flook() search order to look in the current
  1879.  *      directory after the HOME environment variable and before
  1880.  *      the PATH variable and the table.
  1881.  *    31 Oct 1992 John Gamble
  1882.  *    - Hitting the insert-space key in VIEW mode doesn't move the cursor
  1883.  *      now.
  1884.  *    - Fixed bug as pointed out by Pierre Perret in MAGIC mode search.
  1885.  *      My match length was not getting reset properly after a failed
  1886.  *      recursive amatch() call.
  1887.  *    - Declared VOID PASCAL NEAR kdelete() and next_kill() in line.c.  The
  1888.  *      compiler should have fewer complaints now.
  1889.  *    6 Nov 92 Daniel Lawrence
  1890.  *    - Added support for Rational Systems, Inc's DOS/16M package. With this
  1891.  *      you can put together a DOS MicroEMACS that runs in protected mode
  1892.  *      using all extended memory.
  1893.  *    - added the generation of mouse movement events to the MSDOS driver.
  1894.  *      (This will appear in all drivers eventually). FNm represents a
  1895.  *      mouse move. To maintain consitancy with KnowledgeMan (which is
  1896.  *      inheriting MicroEMACS's event drivers) I changed the generated
  1897.  *      events for shifted mice from FNA to S-FNa.
  1898.  *    - Added a default binding of FNm to nop.
  1899.  *    - changed both the quote-character (^Q) and the quoting within
  1900.  *      command line input to insert the emacs name of any function
  1901.  *      key or mouse press.
  1902.  *    11 Nov 92
  1903.  *    - Received the next windows update from Pierre Perret. I think I have
  1904.  *      folded in his most recent changes.
  1905.  *    - put in Pierre's fix to mswfile.c to correct problem putting file
  1906.  *      names and directory in file box
  1907.  *    - somewhere along the way, Pierre added support for the DEC ALPHA
  1908.  *      running Windows NT. Note there are 2 NT ports contained. A text
  1909.  *      style port and a graphic window style port.
  1910.  *    12 Nov 92
  1911.  *    - added $hilight variable to indicate to the display driver that
  1912.  *      the region between the point and the indicated mark should be
  1913.  *      hilighted. A value of 255 indicates no hilighting.
  1914.  *    14 Nov 92 John Gamble
  1915.  *    - Added a "narrow" column to the list-buffers command output.  Made
  1916.  *      the appropriate changes to TEXT30 in all of the language files.
  1917.  *    17 Nov 92 Daniel Lawrence
  1918.  *    - rewrote scwrite() in IBMPC.C to handle 2 new args to define the
  1919.  *      beginning and end of a hilight region. Rewrote the MEMMAP version
  1920.  *      of update_line() in display.c to use this. Added 4 new fields to
  1921.  *      the VIDEO structure to specify current and requested left and
  1922.  *      right ends of the hilighted region.
  1923.  *    - Officially dumped all DEC RAINBOW specific code. It can run ok
  1924.  *      with the ANSI driver.
  1925.  *    18 Nov 92
  1926.  *    - added $overlap to control number of overlapped lines during paging.
  1927.  *      Default value is 2.
  1928.  *    - added 6 marks to bring total to 16. Marks from 10-15 (zero based)
  1929.  *      are intended for internal MicroEMACS functions. Mark 10 and 11
  1930.  *      will be used to highlight a region.
  1931.  *    - The region between mark ($HILIGHT) and mark ($HILIGHT+1) is
  1932.  *      now displayed in reverse video using the IBMPC MEMMAPed driver.
  1933.  *    19 Nov 92
  1934.  *    - mouse-move (MSm) now updates mark($hilight + 1) while moving. This
  1935.  *      updates the highlighted region as you pull the mouse. Scrolling is
  1936.  *      not yet supported . . .
  1937.  *    7 Dec 92
  1938.  *    - mouse move events are now generated and supported under MSwindows.
  1939.  *    14 Dec 92
  1940.  *    - did some work on mwdisp to allow it to display highlighted regions.
  1941.  *      not complete yet . . .
  1942.  *    21 Dec 92 John Gamble
  1943.  *    - added error message when referencing undefined &function
  1944.  *    - added error message when attempting to divide or mod by zero
  1945.  *    - validation for environment variables (in findvar() in eval.c)
  1946.  *      was linear, now it is a binary search.
  1947.  *    - lowerc() and upperc() in char.c now BOTH return ints
  1948.  *    - added out of memory message when out of memory during a
  1949.  *      copy-region (M-W)
  1950.  *    21 Dec 92 Daniel Lawrence
  1951.  *    - setting a value to the ERROR string will now cause the set (^X-A)
  1952.  *      command to stop execution (unlese !FORCEd). I hope not too many
  1953.  *       macros break because of this.
  1954.  *    28 Dec 92
  1955.  *    - entab-line, detab-line and trim-line aliases for their associated
  1956.  *      -region commands have been removed (as I warned in 88).
  1957.  *    3 Jan 93
  1958.  *    - eliminated a redundant CDECL declaration in estruct.h for
  1959.  *      MS windows and Borland C 3
  1960.  *    5 Jan 93
  1961.  *    - changed some includes and defines in dolock.c and nt.c to account
  1962.  *      for the newest Windows-NT Beta (October's). Arg.
  1963.  *    - mouse move events are now supported under Windows-NT console version
  1964.  *    6 Jan 93
  1965.  *    - mouse movement events are supported for the Fujitsu FMR series
  1966.  *    - scwrite() recoded in FMR driver. There are problems with black
  1967.  *      backgrounds and characters being transparent rather than black.
  1968.  *    12 Jan 93
  1969.  *    [Put version 3.12 into BETA testing]
  1970.  *    9 Feb 93
  1971.  *    - changed three "signed int"s into "int"s. Signed is not legal
  1972.  *      on SUN and is the default anyway.
  1973.  *    - removed a new style prototype from rename_screen() in screen.c
  1974.  *      that should not have been there.
  1975.  *    - a local by the name of lsize conflicted with a estruct.h macro.
  1976.  *      Changed it to line_bytes.
  1977.  *    - refolded loop in bytecopy() in main.c to prevent memory references
  1978.  *      past the end of the source string
  1979.  *    - in update_line() in display.c, initialized local non_blanks to
  1980.  *      TRUE. It was not initialized in some cases
  1981.  *    - cleaned up error returns in dobuf() in exec.c to make sure to
  1982.  *      free einit all the time. Memory was being orphaned on errors.
  1983.  *    - a bug in parse_pathname() in dolock.c constructed the wrong string
  1984.  *      to indicate the path to the current directory. Fixed it.
  1985.  *    10 Feb 93
  1986.  *    - modified all file opens to reset the buffer size for MSDOS under
  1987.  *      the TURBO and MSC compilers.
  1988.  *    - Some terminal do not propigate attributes when using a erase to
  1989.  *      end of line sequence. I had to override its use in the TERMCAP
  1990.  *      driver in a reverse video field.
  1991.  *    - entered some translated messages into DUTCH.H from <*>
  1992.  *    17 Feb 93
  1993.  *    - changed message line colors to match global foreground/background
  1994.  *      colors rather than being hardcoded (suggested by Chris Waters)
  1995.  *    - bound all controlled and shifted mouse moves to mouse-move to
  1996.  *      make the mouse work all the time (suggested by Paul Gomme)
  1997.  *    - expanded max file spec size to 256 for all UNIX style systems
  1998.  *    - expanded number of file locks per session to 255 (I've gotta make 
  1999.  *      this dynamic at some point)
  2000.  *    - eliminated the lowercasing of filenames for OS/2 in makename()
  2001.  *      in file.c
  2002.  *    18 Feb 93
  2003.  *    - added user variable $mmove to allow or suppress generation of
  2004.  *      mouse move events. Global mouse_move shadows this. Also added
  2005.  *      global mmove_flag to temporarily suppress mouse moves.
  2006.  *    - added code in pop() in diplay.c to suppress mouse events during
  2007.  *      pop up buffer processing
  2008.  *    - added code in msdos.c, mswinput, ntconio.c, fmrdos.c to honor
  2009.  *      mmove_flag. I see more OSs need mouse move work (nec)
  2010.  *    - added $isterm to allow for a different incremental-search
  2011.  *      terminator than normal search terminator. Changes in isearch.c,
  2012.  *      evar.h, edef.h, bind.c and eval.c
  2013.  *    - initialize lastline in replaces() in replace.c so that undoing
  2014.  *      at the first suggested replacement in a query-replace-string
  2015.  *      beeps instead of locking up.
  2016.  *    - added mouse movement events for OS/2.
  2017.  *    - a realloc() in replaces() in replace.c barfed when passed a NULL
  2018.  *      pointer under TURBO C using the DOS16M realloc(). Changed the
  2019.  *      #ifdefs to not do this when DOS16M is TRUE
  2020.  *    19 Feb 93
  2021.  *    - moved refresh_screen() from mouse.c to screen.c were it belongs.
  2022.  *    - fixed a mixup in the TERM initializer order in unix.c
  2023.  *      (these two above were suggested by Ed M Van Gasteren)
  2024.  *    - a delicate rearrangement of the code in dobuf which scanned
  2025.  *      for a line label match. The new version avoids ever looking
  2026.  *      at uninitialized memory.
  2027.  *    1 Mar 93
  2028.  *    - replaced TIPC.C with a new version sent by David G. Holm
  2029.  *    - put in place a new french.h file. Also we now have a frenchis.h
  2030.  *      file with ISO standard characters mainly for UNIX systems.
  2031.  *    (following bugs submitted by Eric Picheral [picheral@univ-rennes1.fr])
  2032.  *    - fixed some confusion about binding keys in bind.c. This involved
  2033.  *      the use of STRUCTs for ETYPE under UNIXs that don't handle the
  2034.  *      UNION version properly.
  2035.  *    - also some bindings in BIND.C are now more carefully checked
  2036.  *      against their type (buffer or command) in various functions.
  2037.  *    - fixed some code in char.c to assure 8-bit character handling.
  2038.  *    - in exec.c, in setwlist() a bug prevented some users from adding
  2039.  *      high byte chars to upper/lower translation list. Fixed.
  2040.  *    - I changed write-file (^X^W) and append-file (^X^A) to use
  2041.  *      file name completion.
  2042.  *    - I rewrote the submited routines to add the ability to recognize
  2043.  *      ~/ (home directory) ~name/ (name's home directory) and $<var>/
  2044.  *      (directory named in environment variable) during file name
  2045.  *      completion. These only work interactively!
  2046.  *    2 Mar 93
  2047.  *    - corrected code in search.c for better 8 bit handling as submitted
  2048.  *      by Eric Picheral
  2049.  *    - Eric pulled some text strings from unix.c as well.
  2050.  *    - added what we hope is UNIX color support for System V
  2051.  *      submited by Larry Jones. (I have no way to test this.....)
  2052.  *    - added $OS variable to allow a macro to query for what Operating
  2053.  *      System it is running under.
  2054.  *    3 Mar 93
  2055.  *    - renamed out internal islower() and isupper() to is_lower() and
  2056.  *      is_upper() to eliminate any possible conflict with library
  2057.  *      functions.
  2058.  *    - Adding support for Rational System's Instant C product under MSDOS.
  2059.  *    - fixed 2 problems in clean(). Wrong reference to sp-> changed to
  2060.  *      scrp->. Added arguments to call to clear_ring.
  2061.  *    - changed functions and references to lock() and unlock() to
  2062.  *      xlock() and xunlock() to avoid symbol collision under Instant C
  2063.  *    - added -p<n> command line option to position point within
  2064.  *      line at startup.
  2065.  *    4 Mar 93
  2066.  *    - added code for labeling function keys on HP terminals to the
  2067.  *      UNIX.C driver as submitted by Hellmuth Michaelis.
  2068.  *    - fixed some minor HPUX discrepancies submitted by Hellmuth
  2069.  *    - added "int" to all prototypes in eproto.h which lacked any
  2070.  *      base type. This makes the BETA Instant C compiler much happier,
  2071.  *      and certainly doesn't hurt anything making the type explicit.
  2072.  *    - missed a "char" on the declaration of filepath[] in main.c
  2073.  *    5 Mar 93
  2074.  *    - Ed M Van Gastern points out a number of bugs
  2075.  *    - always make sure the string in pad() in eval.c has spaces
  2076.  *      (don't let it get automatically entabed when cleaning sources!)
  2077.  *    - change $curline to return as a long, not an int
  2078.  *    - a lot of minor problems in st52.c and tos.c have been fixed.
  2079.  *    - Pierre Perret has sent us update code for the windows version
  2080.  *      to allow it to highlight a selected region.
  2081.  *    - a problem in the defines for lock.c for windows NT is fixed
  2082.  *    - $mmove now has 3 values. 0 means NEVER generate mouse move events,
  2083.  *      2 means to ALWAYS generate mouse movements, and 1 means to let
  2084.  *      emacs generate them when it thinks it should (ie not inside of
  2085.  *      pop-buffer, in the help system, in many cases under windowing
  2086.  *      environments where the moves should be handled by the OS)
  2087.  *    8 Mar 93
  2088.  *    - Modified ehelp.cmd to set the environment more carefully and restore
  2089.  *      it on exit. It also turns off all mouse move generation while active.
  2090.  *    [Released version 3.12 BETA 2 to beta testers]
  2091.  *    14 Mar 93
  2092.  *    - many small bug fixes to display.c and unix.c submited by many
  2093.  *      different people.
  2094.  *    - repaired the new display code not to require a complete screen
  2095.  *      redraw on startup on serial environments.
  2096.  *    16 Mar 93
  2097.  *    - Added the ability to place a +<n> on the command line to be
  2098.  *      equivalant to -g<n> to go to a specific line.
  2099.  *    22 Mar 93
  2100.  *    - changed a cast from (unsigned char) to (unsigned) in biteq()
  2101.  *      and setbit() in search.c
  2102.  *    - in int_asc() in eval.c put a special check for -32768 so it
  2103.  *      would not grow confused at the use of this dubiously applicable
  2104.  *      argument.
  2105.  *    - adding a check for a NULL window pointer in ismodeline() fixes
  2106.  *      a bug in mouse-region-up being called before other mouse
  2107.  *      commands crashing the editor.
  2108.  *    - made pat[] rpat[] and tpat[] arrays for holding search patterns
  2109.  *      into unsigned chars.
  2110.  *    - cleaned up spacing and formating in isearch.c. Arg.
  2111.  *    - blocked mouse movement events from occuring during incremental
  2112.  *      and replace query searches if $mmove is set to 1.
  2113.  *    - put in code in gtfilename() in input.c to change forward slashes
  2114.  *      to back slashes in input filenames for MSDOS and OS/2
  2115.  *    26 Mar 93 John Gamble
  2116.  *    - Fixed the TERM structure in SMG.C.
  2117.  *    - VMS Doesn't do UNIONS. Arg........
  2118.  *    - various prototype fixes to keep VMS happy
  2119.  *    - re-aligned the columns in the buffer list in makelist () in buffer.c
  2120.  *    - fixed function definitions in ANSI.C pertaining to VT420 terminals
  2121.  *    - bad use of CONST forced us to remove its use under Zortech C
  2122.  *    29 Mar 93 Daniel Lawrence
  2123.  *    - UNIX.C knows to encode a NULL generated by the control-spacebar
  2124.  *      as a (0/CTRL/32) in the input stream to the kernel.
  2125.  *    - stock() in bind.c now interprets ^@ as <control><space>
  2126.  *      and cmdstr() returns it as ^@ so we can see it.
  2127.  *    - etoec() and ectoc() in input.c now translate ^@ to control-space
  2128.  *      and back.
  2129.  *    1 Apr 93
  2130.  *    - fixed colors being displayed on command line during isearch input
  2131.  *      (as suggested by Chris Waters)
  2132.  *    - in getfile() in file.c, toss out code manually switching to the
  2133.  *      newly created buffer, and insted use swbuffer() as suggested by
  2134.  *      Ed M Van Gasteren. Not only is this smaller, but it will update
  2135.  *      other screens displays when the old code did not.
  2136.  *    3 Apr 93
  2137.  *    - in getstring() in input.c, deletion of a string using a ^U did not
  2138.  *      properly backspace over <NL>. Now it does.
  2139.  *    5 Apr 93
  2140.  *    - changed the execute-buffer command to use the buffer name completion
  2141.  *      rather than the normal command line input.
  2142.  *    - in getval() in exec.c an interactive prompt with a included "%"
  2143.  *      confused mlwrite(). Adding a "%s" as the first arg to mlwrite() fixes
  2144.  *      this as suggested by Chris Waters.
  2145.  *    - in stock() in bind.c removed the uppercasing of all bindable
  2146.  *      control keys, as these can be things like FN^a (control-grey-home)
  2147.  *      on the IBMPC keyboard.
  2148.  *    [Released THIRD and hopefully last BETA of ver 3.12 to BETA testers]
  2149.  *    19 Apr 93
  2150.  *    - As submitted by Eric Picheral, in modeline() in display.c changed
  2151.  *      def of c to unsigned char to display 8 bit file names correctly
  2152.  *    - in echochar() in input.c changed first arg to unsigned char
  2153.  *    - Eric makes more corrections in the FRENCH headers.
  2154.  *    - Doug Rady shows us how to make file reading faster by eliminitating
  2155.  *      a strlen() in ffgetline() in fileio.c and saving the length to pass
  2156.  *      back to the callers. This touches file.c fileio.c and vms.c.
  2157.  *    - As I have warned for 3 years, I removed the $oldcrypt variable
  2158.  *      and all the old broken encryption code.
  2159.  *    - My causing the buffer variables to return <END> at the end of a
  2160.  *      list caused mdi.cmd to grow confused when a file was dropped on
  2161.  *      MicroEMACS's window in MicroSoft Windows. I fixed mdi.cmd's
  2162.  *      drop-files procedure.
  2163.  *    - put in code in dcline() in main.c to change forward slashes
  2164.  *      to back slashes in command line filenames for MSDOS and OS/2
  2165.  *    20 Apr 93
  2166.  *    - removed some no longer needed (unsigned char) casts to pat[],
  2167.  *      rpat[] and tap[] in search.c
  2168.  *    - Boosted the row count for the OS/2 driver, changed the kbhit()
  2169.  *      call to an OS/2 system call.
  2170.  *    - defaulting of unique buffer names on reading of identical filenames
  2171.  *      is now fixed.
  2172.  *    - added a few more (char *) casts to pat[] and tap[] in search.c
  2173.  *      and replace.c
  2174.  *      21 Apr 93
  2175.  *    - added AUX (Macintosh UNIX) support. RETCHAR is now a return char
  2176.  *      (which is different under AUX)
  2177.  *    [The Windows changes here are from Pierre Perret]
  2178.  *    - added code in display.c in update() to update the scroll bar
  2179.  *      thumbs when switching windows (with ^XO).
  2180.  *    - two changes in ScrPaint() to improve some problems we may be
  2181.  *      having with limits on reverse fields.
  2182.  *    - some updating in mswemacs.c to accommodate the March 1993
  2183.  *      Windows NT BETA
  2184.  *    - suppress mouse movement events while handling menus and moving
  2185.  *      the mouse around with the button not depressed.
  2186.  *    - replaced random number generator with a new one from Dana Hoggatt.
  2187.  *      It is based on longs, and is better.
  2188.  *    - various last minute updates to help system and command files.
  2189.  *    22 Apr 93
  2190.  *    [RELEASED version 3.12 for general distribution]
  2191.  */
  2192.  
  2193. history()
  2194.  
  2195. {
  2196.     /* this is here to keep compilers from complaining... it's not needed */
  2197. }
  2198.