3/12/988 Added minum support for Win32 console (guido masarotto,
guido@sirio.stat.unipd.it)

Changes from last patch (v38i004 in comp.sources.misc)
* added djgpp support on PCs
* cleanup up __unix__ ifdefs
* added __STDC__ prototypes in header file
* change makefile to build an archive and testgl
* added retry on interrupted read()s
* fixed GO32 keymapping to handles arrow keys properly

Changes from last release (v37i050 in comp.sources.misc)
* Added support for AIX, XENIX, TurboC, gcc (EMX) under OS/2
* Added ^U (kill line) functionality
* Added ESC-B/ESC-F backward/forward one word functionality
* Made it possible to preload history with gl_histadd() before calling
  getline()

Changes from last release (v28i056 in comp.sources.misc)

* type-ahead saved in BSD mode (was OK in SYSV and POSIX)
* fixed POSIX mode bug and enabled termios use if POSIX defined.
* allow caller to supply a prompt width calculation function so that the
  caller can embed escape sequences into the prompt (see gl_strwidth in
  the man page).
* added a getline.h header file for inclusion into the caller.
* man page added, thanks to DaviD W. Sanderson (dws@cs.wisc.edu)


Changes from previous release (v25i056 and patch v26i092)

* The user no longer calls gl_init() and gl_cleanup(), getline() sets
  required terminal modes on entry and resets before returning.  This
  was necessary to capture changes in terminal modes that the main
  program might be making.
* Getline() now looks to see which characters are bound to signal
  generation, and when these characters are seen getline() resets
  terminal modes before passing on the signal.  If the signal handler
  returns to getline(), the screen is automatically updated and editing
  can continue.
* The toggle key for overwrite mode has been moved from ^G to ^O
* All code is now classic rather than ANSI C, so any compiler should
  be able to handle it.
* ^Y now yanks back previously kill'ed (^K) text starting at the
  current location.
* ^R/^S begin reverse and forward incremental searches through the
  history list.
* The programmer must add buffers onto the history list by calling
  gl_addhist(char *buffer).  This function makes copies of the buffer
  and adds them to the history list if the buffer is not a blank line
  and if the buffer is different than the last item saved (so the
  program need not check for these conditions)
* The main program can specify the screen width to use with a call to
  gl_setwidth(int width)
* Getline now insists that both the input and output are connected to
  a terminal. If this is not the case, an error message is written and
  the program is terminated.  The main program should check for this
  case and use buffered IO (stdio) for non-interactive sessions.

