OpenDoors Door Programming Toolkit History
                     ------------------------------------------

This document describes the development history of the OpenDoors door
programming toolkit. This document is divided into two sections. The
first section provides a brief timeline of the OpenDoors releases since
version 1.00. The second section provides detailed information on the
changes and enhancements that were made for each version.


OPENDOORS TIME LINE
-------------------

VERSION   RELEASE DATE      HIGHLIGHTS
-------------------------------------------------------------------------------
1.00      Fall, 1990        Initial beta version
1.10      Winter, 1991      First public release
1.20      Spring, 1991      Minor enhancments, including RA 1.00 support
1.30      Spring, 1991      A Few bug fixes
1.40      Spring, 1991      Message customizability
2.00      Summer, 1991      AVATAR support, improved ANSI support
2.10      Summer, 1991      Added od_printf() and a new registration key system
2.20      Summer, 1991      Further customizability, DesqView support
2.30      Summer, 1991      Minor bug fix
3.00      Fall, 1991        Beta release, with RA system file support
3.10      Fall, 1991        Public release with bug fixes from 3.00
3.20      Winter, 1992      Support for enhanced FILES.BBS format
3.30      Winter, 1992      Further bug fiexes
3.40      May, 1992         Full locked-BPS rate support
4.00      July, 1992        New manual, inline colour setting with od_printf()
4.10      February, 1993    Configuration file and log file systems
5.00      September, 1994   Built-in serial I/O, multiple compiler support



DETAILED HISTORY OF OPENDOORS EVOLUTION
---------------------------------------

VERSION 1.00   Initial beta test version of the OpenDoors doordriver. Proved to
               be very bug-free.


VERSION 1.10   First public release.


VERSION 1.20   Made several changes:

                    - Support for the new RemoteAccess 1.00 enhanced
                      exitinfo.bbs file, with many extra pieces of information.

                    - Added a Alt-K function key to allow the sysop to
                      temporarily disable the user's keyboard

                    - Added full support for turning on and off status line.
                      Status line has been changed slightly in format, and [F9]
                      help function key added.

                    - Improved sysop chat mode (added multi-colour and wordwrap)

                    - Fixed up shell-to-DOS to automatically shell to the
                      command processor specified in COMSPEC instead of always
                      using COMMAND.COM. OpenDoors now also returns to system to
                      the drive and directory it was in before DOS shell was
                      issued.

                    - Added support for the new RemoteAccess "sysop next" key.


VERSION 1.30   A few quick changes to perfect all the features of this version
               before beginning major development work on OpenDoors 2.00. Fixed
               two problems:

                    - The status line can no longer be turned back on by the
                      sysop using F1 - F9 keys when a door program has disable
                      the status line itself.

                    - A rather major problem was fixed for use of OpenDoors in
                      conjunction with RA 1.00. We accidentally forgot to save
                      some of the data that is unused in previous versions, but
                      is now used in the new version. This bug caused some
                      unexpected problems, including damage to the USERSXI.BBS
                      file.


VERSION 1.40   Another maintenance release. This version should now function
               perfectly when used in conjunction with older versions of Turbo
               C. Other changes in this version include:

                    - Better error recovery in the case that the door
                      information file has been damaged.

                    - OpenDoors was made more customizable, including allowing
                      the programmer to alter the various OpenDoors messages,
                      and provisions for user defined function keys for the
                      sysop. (ie, it is now possible for the programmer to make
                      Alt-Y another hotkey for the sysop)


VERSION 2.00   Another release, adding a number of new features, such as:

                    - Added support for AVATAR graphics. OpenDoors will
                      automatically detect the presence of AVATAR graphics mode
                      when running under Remote Access, and will allow your door
                      to toggle it when running under other BBS systems.

                    - Improved ANSI routines. Added some new functions, and
                      changed existing functions to send more efficient ANSI
                      codes in some circumstances.

                    - The "Sysop Next" key should now work correctly with RA
                      1.00 and later.


VERSION 2.10   Changes in this version include:

                    - Implementation of a registration key-code to allow
                      registered users to more easily upgrade to new versions.

                    - Added an od_printf() function for ease of formatted output
                      from within OpenDoors.


VERSION 2.20   More improvements, including:

                    - Fixing of some minor bugs, such as incorrect handling of
                      the path to DORINFO1.DEF/EXITINFO.BBS files.

                    - Added support for more customization, such as hooks for
                      functions that will be called before and after Shell to
                      DOS and sysop chat.

                    - OpenDoors is now DesqView aware. OpenDoors will
                      automatically detect the presence of DesqView, and uses
                      the DesqView `virtual screen buffer' for screen display if
                      present.

                    - A QuickBBS 2.75 compatibility problem has also been fixed.


VERSION 2.30   Fixed a small bug in the registration system.


VERSION 3.00   A major upgrade, released as a beta-test version, including the
               following additions/changes:

                    - Eliminated many bugs.

                    - Added support for door information files from: WWIV, PC-
                      Board, Spitfire, WildCat, GAP, TriTel and others.

                    - Added .ASC/.ANS/.AVT file display support with automatic
                      interpretation of QBBS/SuperBBS/RA control characters.

                    - Added ALT-D key to drop the user back to the BBS without
                      hanging up.

                    - Added direct access to RA style configuration, file area,
                      message area, external protocols, event configuration,
                      caller history, users online, menu files, user base and
                      other system files.

                    - Added complete set of message base manipulation routines,
                      with full support for the RA 1.01 message base locking
                      scheme.

                    - The user manual has also been re-written in order to make
                      it easier to work with.


VERSION 3.10   The following bug fixes and changes have been made since the
               release of the beta version, 3.00:

                    - Time fields in messages are now correctly formatted

                    - Corrected a bug in the od_set_attrib function where the
                      intensity setting would not correctly be transmitted to
                      the remote when using ANSI graphics.

                    - Fixed a bug in the re-writing of the DORINFO1.DEF which
                      cause sysop and user's last names to be corrupted.

                    - Registered users may now disable the display of copyright
                      and registration information when the door starts up.


VERSION 3.20   A few more changes and bug fixes were made since version 3.10,
               including:

                    - Fixed the FILES.BBS lister to correctly support FILES.BBS
                      files located in directories other than the default dir,
                      and added page pausing to the FILES.BBS lister.


VERSION 3.30   The following changes and bug fixes were made since version 3.20:

                    - OpenDoors no longer re-writes the DORINFO1.DEF upon
                      exiting. No BBS's are known to actually make use of the
                      information changed in DORINFO1.DEF, and re-writing this
                      file was causing more troubles than it was worth.

                    - The od_msg_read_hdr() function's NEXT_MESSAGE command now
                      works correctly.

                    - Added an od_errno variable to assist in debugging of
                      programs written with the BBS file engine portion of
                      OpenDoors.


VERSION 3.40   A minor upgrade version, with the following changes:

                    - Fixed a compatibility problem with some locked baud rates.
                      Now, if OpenDoors receives a baud rate the door
                      information file that is not supported in the FOSSIL
                      definitions, it will continue without setting the baud
                      rate. (Whereas before, OpenDoors would report an error and
                      exit.)

                    - Made some changes to the manual, and included a utility to
                      remove the extended-ASCII characters from the manual to
                      ease printing on some printers.


VERSION 4.00   This version is a major overhaul of the entire OpenDoors package,
               including a great many enhancements and additions. As of version
               4.00, OpenDoors is available as two separate packages - the door
               programming toolkit (this package), and the BBS interface package
               (which is available separately) Among the major changes to
               version 4.00 of the OpenDoors door programming toolkit are:

                    - A complete re-organization of the manual, including the
                      re-writing of a large portion of the manual. In order to
                      ease printing on some printers, the manual has been re-
                      formatted in order that it no longer contains extended
                      ASCII characters. More thorough documentation on the
                      OpenDoors functions and structures was written, along with
                      the addition of many more examples. Also added to the
                      manual are an index, glossary and other features intended
                      to make the reference manual an even more powerful and
                      flexible tool.

                    - Full support for the changes to RemoteAccess 1.10/1.11 has
                      been added for version 4.00. These include the addition of
                      some new fields stored in the EXITINFO.BBS door
                      information file, and proper adjusting of the user's time
                      remaining online. Version 4.00 also now has full support
                      for the new QuickBBS-specific EXITINFO.BBS file.

                    - All of the text displayed by OpenDoors is now fully
                      customizable using od_control structure variables. This
                      permits both greater door customization, and adds the
                      ability to write 100% non-English doors and programs.

                    - The OpenDoors status lines have been changed. OpenDoors
                      now provides additional user information through multiple
                      RemoteAccess-style status lines, accessible through the
                      F2, F3, etc. keys. Also, the status line may now be turned
                      off by using the F10 key, allowing the sysop to view all
                      25-lines of the information displayed by a door program. A
                      new function od_set_statusline(), permits program
                      selection of the current status line setting.

                    - OpenDoors now allows colour codes to be embedded in
                      od_printf() functions, to eliminate the need for long
                      chains of alternating od_disp_str(), od_set_colour() /
                      od_set_attrib() function calls.

                    - A new formatted input function, od_edit_str() has been
                      added for use in door programs running in ANSI or AVATAR
                      graphics mode. The od_edit_str() function features
                      advanced line editing capabilities which are normally
                      found only in non-door programs, such as inserting or
                      deleting text from the middle of a string, moving the
                      cursor with the arrow keys, and so on. The od_edit_str()
                      function also provides input formatting, allowing you to
                      force the user's input into any format you wish, from
                      phone number formats to date formats to username formats.
                      The od_edit_str() also provides special modes for
                      implementing features such as password input, field input
                      (where the user may move from one field to another using
                      arrow/tab keys), input field highlighting, editing
                      existing strings, auto-delete, and much more. The old
                      od_input_str() function still provides a subset of these
                      features which do not require ANSI or AVATAR graphics.

                    - New functions have been added to the door driver module of
                      OpenDoors. Among these, are an od_putch() function for
                      displaying one character at a time, and an od_spawn()
                      function, for easily executing other programs from within
                      OpenDoors. The od_spawn() function automatically saves the
                      contents of the current door screen, system drive and
                      directory, and provides a separate screen on which the
                      spawned-to program can execute. The od_draw_box() function
                      allows you to easily display windows in door programs,
                      using ANSI or AVATAR graphics codes. Also added is are
                      od_carrier(), od_set_statusline() and od_edit_str()
                      functions, mentioned elsewhere.

                    - More changes have been made in order to permit greater
                      customization and flexibility of OpenDoors. An
                      od_carrier() function has been added to detect the state
                      of the carrier detect signal in programs that disable
                      OpenDoor's internal carrier detection. Also, it is now
                      possible to shut down OpenDoors without exiting via the
                      od_exit() function.

                    - OpenDoors now yeilds the processor to other executing
                      tasks in multitasking environments (ie. DesqView), when
                      the door is inactive or waiting for input.

                    - The door driver function od_clr_scr() now only checks the
                      user's screen clearing setting if that information is
                      available from the door information file. If the
                      information is not available, the od_clr_scr() function
                      will always clear the screen.

                    - Many other small changes were also made for version 4.00.
                      Among these, you now have access to the user's reason for
                      chat and you can switch the pause and stop keys on and off
                      during listing of available files or displaying a text
                      file. Also, previous versions of OpenDoors would read the
                      user's information from the first door information file
                      found. Instead, version 4.00 now reads the most recently
                      created door information file. A bug in the od_clr_line()
                      function has also been fixed.


VERSION 4.10   A great deal of work has been done between version 4.00 and 4.10
               of OpenDoors. This work falls into three major categories: bug
               fixes, improved performance, and new features. In fact, enough
               changes and improvements have been made that this version really
               ought to be numbered 5.00. Below is a summary of the changes that
               have occurred since version 4.00:
                    - Much of the door information file interfacing code has
                      been revamped, in order that OpenDoors now works correctly
                      with the newest versions of the BBS packages it supports.
                      OpenDoors now differentiates between three different
                      DOOR.SYS formats - the DoorWay format, the PC-Board / GAP
                      format, and the Wildcat format. Also, the SFDOORS.DAT code
                      has been fixed to correctly work with the newest version
                      of Spitfire.

                    - OpenDoors will now attempt to swap itself and your entire
                      door program to expanded memory or disk when the sysop
                      shells to DOS, or when you call one of the od_spawn...()
                      functions. Memory swapping may be configured in a number
                      of ways, or even disabled. The OpenDoors swapping code
                      adds only 2K to the door's .EXE file size.

                    - OpenDoors now includes a new od_spawnvpe() function. In
                      addition to the features of the "quick-spawn" od_spawn()
                      function, od_spawnvpe() also returns the errorlevel the
                      called program returned, allows you to alter the
                      environment passed to the child process, and uses the same
                      parameter format as the C spawnvpe() function. (see page
                      117)

                    - The od_page() function now checks the sysop paging hours,
                      set in the OpenDoors control structure. If the user
                      attempts to page the sysop outside of the defined paging
                      hours, he or she will be notified that the sysop is not
                      available.

                    - OpenDoors now includes a configuration file sub-system
                      that you may choose to include in your OpenDoors programs.
                      This sub-system automatically parses the configuration
                      file you specify, responding to any of the built-in
                      configuration commands, and passing configuration options
                      specific to your program back to you. With only a single
                      line of code on your part, this sub-system will allow
                      people running your program to configure many options such
                      as sysop paging hours, system directories, maximum time
                      within the door, etc. It also allows the sysop to provide
                      information that may not be supplied by their particular
                      BBS software, such as modem settings, the system's name
                      and so on. In addition to all these built in commands, you
                      can add your own configuration options, such as display
                      colours, registration key numbers and other information
                      needed by your program - without the need to write your
                      own configuration file parsing routines. (See page 76)

                    - OpenDoors now supports custom, sysop-defined door
                      information file (drop file) formats. By defining a custom
                      door information file format in the cofiguration file,
                      OpenDoors door programs can now be made to run directly
                      under BBS packages that use proprietary file formats that
                      are not directly supported by OpenDoors. (see page 78)

                    - In order to make doors written with OpenDoors even more
                      foolproof for the sysop to setup, an intelligent door
                      information file (drop file) locator has been added.
                      OpenDoors will automatically search for a door information
                      file in the directory specified by the configuration file,
                      the directory specified by your door's source code, the
                      current directory, and the directory pointed to by the
                      environment variables used by any of a number of BBS
                      packages.

                    - OpenDoors now includes a log file sub-system that you may
                      choose to include in your programs. The log file system
                      handles all access and formatting of the logfile, allowing
                      the programmer to make log file entries by simple function
                      calls such as od_write_log("User downloading file");.
                      Also, since the log file system is closely integrated with
                      the rest of OpenDoors, choosing to include the logfile
                      system in a program causes OpenDoors to automatically
                      output the most common logfile entries for events such as
                      the user paging sysop, the user hanging up, sysop chatting
                      with the user, user inactivity timeouts, and so on. (see
                      page 89)

                    - OpenDoors 4.00 would not always correctly turn on and off
                      high intensity or flashing colour attributes in ANSI mode.
                      The ANSI colour handling code has been reworked for
                      version 4.10, to eliminate these problems.

                    - An od_get_answer() function has been added, which can be
                      used to easily permit only certain keys to be pressed in
                      response to a prompt. For instance, to get a Yes/No
                      response from the user, use od_get_answer("YN"); (see page
                      66)

                    - A popular addition to OpenDoors 4.00 was the ability to
                      change the current display colour within od_printf()
                      format strings, using imbedded control characters.
                      However, the programmer was forced to use a rather cryptic
                      two-byte control sequence, where the second character of
                      the sequence contained an 8-bit colour attribute value. It
                      is now possible to change the display colour within
                      od_printf() by specifying the names of the desired
                      foreground and background colours, delimited by a set of
                      BACK-QUOTE (`) characters. For example:

          od_printf("`Red` THIS TEXT IS RED `Blue` THIS TEXT IS BLUE");
          od_printf("`Flashing bright green on dark green` AND THIS IS GREEN");

                      (see page 93)

                    - Version 4.10 would not correctly "freeze" the user's time
                      during DOS shell and sysop page operations, when the door
                      was operating under RemoteAccess 1.11. This has been
                      fixed.

                    - A new variable, od_spawn_freeze_time, has been added to
                      the OpenDoors control structure. When set to FALSE, the
                      user's time remaining continues to be deducted during the
                      execution of any of the od_spawn... functions. When set to
                      TRUE, the user's time remaining is frozen during the
                      execution of an od_spawn... function.

                    - The current directory is now correctly restored to its
                      original setting after the sysop returns from a DOS shell,
                      and after calls to the od_spawn... functions.

                    - A number of people were experiencing difficulty using the
                      od_edit_str() function in version 4.00. A number of
                      improvements to this function's logic have been made in an
                      attempt to make od_edit_str() more foolproof to use. Also,
                      a new flag setting, EDIT_FLAG_LEAVE_BLANK has been added.
                      However, there were a few reports of problems which we
                      were not able to reproduce. If you are still having
                      difficulty with this function, please carefully re-read
                      the section of the manual pertaining to it's use. In
                      particular, be sure that your difficulty is not resulting
                      from the flag settings you are using. If you still suspect
                      a bug in this function, please include with your bug
                      report the source code that is causing the problem.

                    - Page pausing within the od_send_file() and od_list_files()
                      (FILES.BBS listing routine) functions can now be disabled
                      and re-enabled by the programmer.

                    - The "Continue? [Y/n/=]" end of screen prompt and response
                      keys are now fully customizable.

                    - The od_list_files() FILES.BBS listing function now works
                      correctly in all memory models. The function has also been
                      fixed to correctly handle cases where the trailing
                      backslash is not supplied in the path parameter.

                    - The actual BBS line (node) number is now displayed on the
                      default status line, provided that this information is
                      supplied by the BBS software.

                    - It is now possible to detect whether keystrokes originated
                      from the remote or local keyboard. This is a feature that
                      is useful in some special applications, such as split-
                      screen sysop chat programs.

                    - Version 4.00 would not always correctly display the status
                      lines, if there was information missing from the
                      EXITINFO.BBS file. This has been fixed. In addition, the
                      "next event" information is now correctly displayed on the
                      status lines. Also, if the user's birthday is available,
                      their age will also be calculated and displayed on the
                      status line.

                    - If you temporarily disable inactivity timeouts, OpenDoors
                      will no longer automatically trigger and inactivity
                      timeout as soon as you re-enable this feature.

                    - A new function, od_hotkey_menu(), has been added to
                      facilitate displaying a menu with "hot keys". Like the
                      od_send_file() function, od_hotkey_menu() will display an
                      ASCII, ANSI or AVATAR file. However, od_hotkey_menu() also
                      allows you to pass a string listing possible hot keys. If
                      the user presses any of these keys while the menu is being
                      displayed, menu display will immediately cease, and the
                      function will return the key pressed by the user. (See
                      page 71)

                    - The od_send_file() (the ASCII/ANSI/AVATAR file display
                      routine) no longer sends the EOF character if it happens
                      to exist at the end of a file.

                    - In addition to the EZVote OpenDoors tutorial door, an
                      number of other example doors are now included in the
                      OpenDoors package.

                    - A few errors have been corrected in the documentation, and
                      additional information has been added about the new
                      features in this version.



VERSION 5.00   Version 5.00 represents several major steps forward for
               OpenDoors. In addition to numerous bug fixes and minor
               improvements, a number of major new features have been added to
               this version. These include an optional multiple personality
               system which allow the sysop to choose the status line and
               function key style they prefer. This version also adds text-mode
               support for RIP (Remote Imaging Protocol) graphics, and adds a
               group of advanced ANSI/AVATAR/RIP functions for scrolling areas
               of the screen, saving and restoring portions of the screen and
               creating pop-up windows and menus. Also new in this version is
               support for compilers other than Borland/Turbo C(++), such as
               compilers from Microsoft. Version 5.00 also adds built-in
               communications support, making the use of a FOSSIL driver
               optional. Furthermore, direct support for additional BBS systems
               has been added. The list below provides more detail of the
               changes and new features in version 5.00:

                    - The nonstop key ([=]) now works correctly during
                      FILES.BBS listing.

                    - New door information file formats now supported include:
                      RA 2.00 EXITINFO.BBS.

                    - If the TASK environment variable is set, OpenDoors will
                      now use its value to determine the current node number.

                    - The od_control.od_spawn_freeze_time variable now works
                      correctly. Previously, the user's time would always be
                      frozen during od_spawn...() execution, regardless of the
                      value of this variable.

                    - A new feature known as the "Multiple Personality System"
                      has been added to this version. If you choose to include
                      the Multiple Personality System in a door, the sysop will
                      be able to specify which of a number of "personalities"
                      should be used. Each personality defines the statusline
                      appearance and function keys seen by the sysop, and has
                      no effect on the door's operation from the user's
                      standpoint. OpenDoors 5.00 includes personality
                      definitions for WildCat, RemoteAccess, PC-Board, and it's
                      own simplified RA style status lines. You can also define
                      your own personalities by writing a personality
                      definition function. If your choose not to include the
                      Multiple Personality System in a door, you will still be
                      able to define which single personality you wish
                      OpenDoors to use.

                    - This version of OpenDoors can be used with a larger
                      variety of compilers than where supported by the previous
                      version. OpenDoors 5.00 is known to work with all
                      versions of Turbo C, Turbo C++, Borland C++, Microsoft C,
                      Microsoft C++, Quick C and Visual C++. It should also
                      work with any other MS-DOS based ANSI C compiler that
                      supports the Microsoft/DOS .OBJect and .LIBrary file
                      formats.

                    - A new diagnostics feature has been added to OpenDoors,
                      which allows you to determine the reason for the most
                      recent OpenDoors function failure. When any OpenDoors
                      function returns a failure condition, it also sets the
                      new od_control.od_error variable to indicate the reason
                      for the failure.

                    - Added additional definitions to OPENDOOR.H, to map names
                      of OpenDoors functions and variables with the word
                      "colour" from the U.S. spelling "color". In other words,
                      both od_set_colour() and od_set_color() are now
                      recognized by OpenDoors.

                    - The od_list_files() now supports more intelligent path
                      specifications. If the parameter to od_list_files() is
                      NULL or empty, it will search for a FILES.BBS file in the
                      current directory. If a directory path is specified, it
                      will look for a FILES.BBS in that directory. If a full
                      directory and filename are specified, the specified
                      filename will be used in place of FILES.BBS.

                    - To save space, the compact memory model library is no
                      longer included in the normal OpenDoors package. The
                      compact memory model library is now available seperately.

                    - A new function, od_set_dtr(), has been added to allow the
                      DTR line to the modem to be manually controlled. This can
                      be useful in writing programs where you wish to force the
                      modem to hangup, such as a call-back verification door.

                    - Added additional support for various DOS multitasking
                      environments. OpenDoors is now specifically Microsoft
                      Windows aware. OpenDoors also now gives up time to other
                      waiting tasks when it is idle during chat mode.

                    - The od_edit_str() "M" mode now capitializes a character
                      following a dash '-' character.

                    - When transmitting more than one character at a time,
                      OpenDoors now uses the FOSSIL trasfer block function,
                      instead of multiple calls to the transfer character
                      function. This should help to improve performance over
                      high speed connections when running on slow PCs or under
                      multitasking environments.

                    - OpenDoors 4.10 would not correctly change the display
                      colour from high-intensity back to low-intensity. This
                      problem has been fixed.

                    - OpenDoors now recognizes DORINFO?.DEF filenames with
                      alphabetical identifiers (ie, DORINFOA.DEF thru
                      DORINFOZ.DEF) for nodes 10 thru 35.

                    - Improvements have been made to the logfile system. An
                      exit at errorlevel zero no longer causes garbage to be
                      written to the logfile. The logfile functions have been
                      made more reliable when operating under low stack
                      availability conditions. In the past, if a large number
                      of local variables where allocated on the stack, the
                      logfile functions would fail, often writing garbage to
                      the logfile. When the user pages the sysop for chat, the
                      user's reason for wishing a chat is also written to the
                      logfile.

                    - Support for text-mode RIP (Remote Imaging Protocol)
                      graphics has been added. Because this version of
                      OpenDoors always operates in DOS text-mode, none of the
                      graphics mode RIP features (such as drawing lines,
                      circles and displaying icons) will appear on the local
                      screen. Plans for a version of OpenDoors that will
                      operate in graphics mode and optionally display graphics
                      locally are currently under consideration. In this
                      version, RIP support includes a number of new features.
                      OpenDoors will now recognize the RIP setting passed in an
                      RA 2.00 EXITINFO.BBS file and WildCat DOOR.SYS file, and
                      also allows the RIP setting to be specified in a custom
                      door information file. The od_send_file() and
                      od_hotkey_menu() functions will now search for files with
                      .RIP, .AVT, .ANS and .ASC extensions. When displaying RIP
                      graphics to the remote user, a pop-up window appears on
                      the local screen, indicating to the sysop which file is
                      being displayed.

                    - A set of new functions have been added to permit advanced
                      screen manipulations. These functions include
                      od_gettext() and od_puttext() to save and restore
                      portions of the screen, and od_save_screen() and
                      od_restore_screen() to save and restore the entire
                      screen. od_scroll() can be used to scroll any portion of
                      the screen upwards or downwards. od_save_screen() and
                      od_restore_screen() will operate in any mode, but the
                      other functions require ANSI/AVATAR/RIP mode to be
                      available.

                    - Three additional functions, od_window_create(),
                      od_window_remove() and od_popup_menu(), have been added
                      to facilitate the creation of popup windows and menus.
                      When such a window or menu is removed from the screen,
                      the are of the screen "under" the window is returned to
                      it's original state. This allows you to create multiple
                      overlapping windows within a door program. The
                      od_popup_menu() function creates a popup window with a
                      menu from a simple menu definition string. The user can
                      select an option from this menu by pressing the key
                      associated with an option, or by moving a menu selection
                      bar using their arrow keys. These three functions require
                      an ANSI/AVATAR/RIP mode to be available.

                    - A new function, od_chat() has been added, to allow you to
                      explicitly invoke the OpenDoors chat mode from within
                      your program.

                    - A new setting variable, od_control.od_always_clear has
                      been added. When set to TRUE, od_clr_scr() will always
                      clear the screen, regardless of the user's screen
                      clearing setting. When set to FALE, od_clr_scr() will
                      only clear the screen if the user has screen clearing
                      enabled.

                    - It is now possible to configure the errorlevels OpenDoors
                      exits with under various circumstances, such as when the
                      user runs out of time remaining online. See the
                      od_control.od_errorlevel variable

                    - A new setting variable, od_control.od_force_local, can be
                      used to easily force OpenDoors to operate in local mode.
                      Using this variable you can easily add a command line
                      parameter such as "-local" to allow the sysop to force
                      your door to operate in local mode. When OpenDoors is
                      forced into local mode using this variable, it does not
                      look for a door information file, and uses default
                      settings for the user's name, etc.

                    - OPENDOOR.H now sets structure packing to single byte
                      alignment for the od_control structure when Borland and
                      Microsoft compilers are being used. In the past,
                      programmers using OpenDoors have experienced difficulties
                      the od_control structure when the compiler has been set
                      to use word packing.

                    - OpenDoors now closes the FOSSIL driver prior to
                      performing a spawn or sysop DOS shell. This allows doors
                      or other communications programs which use the FOSSIL
                      driver to be executed while the door's execution is
                      suspended.

                    - When used with a FOSSIL driver, OpenDoors normally
                      changes the BPS rate to that passed from the BBS (if the
                      BBS passes a valid FOSSIL BPS rate). This BPS rate
                      setting may now be disabled by setting the
                      DIS_BPS_SETTING bit of the od_control.od_disable
                      variable.

                    - A function hook has been added to allow you to install a
                      function to be called whenever od_kernel() executes
                      (od_control.od_ker_exec). Another function hook,
                      od_control.od_time_msg_func, can be installed to override
                      OpenDoor's time limit warning messages.

                    - A new array, od_control.od_hot_function, allows the you
                      to define functions to be called when any of the
                      programmer-defined sysop hotkeys have been pressed.

                    - A function hook, od_control.od_no_file_func, has been
                      added. This function will be called whenever OpenDoors is
                      unable to find or read a door information file. This
                      allows you to add your own door information file reader,
                      or to provide a local login prompt when no door
                      information file is present.

                    - Previously, OpenDoors would stop correctly updating the
                      user's remaining time at midnight when running under
                      certain BIOSes. This problem has been fixed.

                    - The current display colour attribute can now be accessed
                      through an control structure member,
                      od_control.od_cur_attrib.

                    - od_send_file() and od_hotkey_menu() no longer pause with
                      a "Continue?" prompt prematurely in files that have line
                      lengths greater than 254 characters.

                    - The local keyboard may now be disabled by setting the
                      DIS_LOCAL_INPUT bit of od_control.od_disable. This only
                      affects the sysop's input in circumstances that input is
                      also accepted from the remote user; this setting has no
                      effect on the sysop function keys.

                      A new function hook:                      -

                         void (*od_control.od_local_input)(int);

                      has been added. If set, this function will be called
                      whenever the sysop presses a non-sysop-function key on
                      the local keyboard.

                    - od_control.od_clear_on_exit now controls whether the
                      screen is cleared before shelling or executing
                      od_spawn...(), in addition to before OpenDoors shuts
                      down.

                    - od_page() now restores the original display colour before
                      returning.

                    - It is now possible to display an entire string of
                      characters with terminal emulation, using the new
                      function od_disp_emu().

                    - OpenDoors will now display a small popup window when
                      disconnecting the current connection.

                    - A new variable, od_control.od_in_buf_size, can now be set
                      prior to calling any OpenDoors function to set the size
                      of OpenDoors combined local/remote keyboard input buffer.
                      By default, this buffer is 256 bytes in size.

                    - Previously, there were a number of OpenDoors API
                      functions that would not correctly initialize OpenDoors
                      if they were the first function called in the program.
                      This has been fixed.

                    - To facilitate setting of bps rates up to 115,200,
                      od_control.baud is now an unsigned long.

                    - A new setting, od_control.od_no_ra_codes, has been added
                      to disable the use of RemoteAccess/QuickBBS control codes
                      by od_send_file()/od_hotkey_menu()/od_disp_emu(). The
                      RemoteAccess/QuickBBS ASCII 1 "pause for key" is also now
                      recognized.