
                *****************************************
                       ATLANTIS SOFTWARE PRESENTS
                *****************************************

                 Atlantis Networking Game Engine Library

                         A.N.G.E.L.  Version 1.0 (Beta)

                  Written By Jimmy Rose & Andy Stewart

                    Copyright 2001 Atlantis Software

                   This Document Updated: Nov 12 2001
                *****************************************


           WARNING! This Beta documentation may be incomplete!
           It may also refer to features not yet implemented.
           Please read the "License.txt" file.


                            INTRODUCTION
                            ____________

    A.N.G.E.L. is a programming library designed to aid programmers in
    the creation of BBS Doors and other communications utilities. There
    will be several versions of this program available for use on various
    platforms. Current versions are designed to be used with Delphi and
    Virtual Pascal for Windows 95/98/NT/2000/XP, and Turbo Pascal 7.0 for
    DOS.

    Please note that this documentation covers multiple versions. If you
    are having trouble compiling an A.N.G.E.L. program please make sure
    that you are reading the correct instructions for the compiler that
    you are using.


                             FEATURES
                             ________

        * Internal Telnet Support Under Windows!
        * Build Native 32bit Windows Programs!
        * Support for DOOR.SYS and DOOR32.SYS!
        * Wildcat5/Winserver Support! 
        * Support for all major dropfiles!
        * Internal ANSI Support!
        * Pipe Color Code Support!
        * ISA Color Code Support!
        * Handles all Communications!
        * Easily Port DOS Doors To Windows & Linux!
        * Full Local Mode Support, No Dropfile Required!
        * Configurable Status Lines!
        * Fossil Support For DOS!


                         INCLUDED FILES
                         ______________

    Here is a list of all files included in this archive. 
    
    [Delphi Version]
    ANGEL.DCU       This is the main A.N.G.E.L. unit.
    DOORTEST.DPR    Example program showing how to use A.N.G.E.L.
    DOORHDR.PAS     Pascal include file for Wildcat5/Winserver wcSDK.
    DOS.DCU         Delphi DOS unit.
    CRT.DCU         Delphi CRT unit.
    PASW32.DLL      Dynamic link library used by the DOS and CRT units
                    This file must be present.
    ANGEL.TXT       Documentation for A.N.G.E.L.

    The files below are the communications routines used by A.N.G.E.L.
    They should be placed in your units directory or in the directory
    with your A.N.G.E.L. program where Delphi can find them.

    COMBASE.DCU
    BUFUNIT.DCU
    TELNET.DCU
    SOCKDEF.DCU
    SOCKFUNC.DCU
    SOCKFUNC.RES
    SYSTEM32.DCU
    THREADS.DCU
    W32SNGL.DCU
    W32SOCK.DCU
    WIN32COM.DCU

    [Turbo Pascal Version]
    ANGEL.TPU       This is the main A.N.G.E.L. unit.
    DOORTEST.PAS    Example program showing how to use A.N.G.E.L.
    COMBASE.TPU     Communications unit for A.N.G.E.L.
    FOS_COM.TPU     Communications unit for A.N.G.E.L.
    ANGEL.TXT       Documentation for A.N.G.E.L.


                              REQUIREMENTS
                              ____________

    The Windows version of A.N.G.E.L. requires Borland Delphi along with
    the matching version of the A.N.G.E.L. Delphi library. It may be used
    with Dephi Standard, Professional or Enterprise. A version for Virtual
    Pascal is also available for Windows.

    Libraries for multiple versions of Delphi are available. Please make
    sure that the library you are using matches your Delphi version.

    The DOS version requires Borland Turbo Pascal 7.0.
    
    If you're compiling for Wildcat5/Winserver you must have the wcSDK and
    have WC5/Winserver loaded on your system to run the program after it 
    has been compiled. However, you do not need the wcSDK to compile your
    program for the WC5 platform.



                      COMPILING AN A.N.G.E.L. PROGRAM
                      _______________________________

    [DELPHI INSTRUCTIONS]
    Copy all of the included .DCU files into your units directory, or
    a directory on your system where Delphi can find them. Alternately,
    you may place all of the .DCU files in the same directory as your
    "Door".

    Copy the PASW32.DLL into your "SYSTEM" directory. On Windows 95/98
    and Windows ME that is: "C:\WINDOWS\SYSTEM". On Windows NT/2000/XP
    it is: "C:\WINNT\SYSTEM32".

    Your program must have the .DPR extension, not .PAS.
    Right -> "myprogram.dpr".
    Wrong -> "myprogram.pas"

    Your A.N.G.E.L. Door program should have {$APPTYPE CONSOLE} as the
    first line of the program.

    In the "USES" part of your program add ANGEL, DOS, CRT and SYSTEM32.

    Examine the included sample program "Doortest.dpr" for a better
    understanding of using the A.N.G.E.L. library.

    It is strongly recommended that you turn off "Huge Strings" in your
    Delphi compiler options.

    When distributing A.N.G.E.L. programs you must also distribute the
    PASW32.DLL file with your program.

    [WIDLCAT5/WINSERVER INSTRUCTIONS]
    Add the file "DoorHdr.pas" to your uses declaration. Then follow 
    instructions for Delphi. You will use the command line switch /W
    to start your door. Note that you must have the wcSDK and
    WC5/Winserver installed on your system. 

    [TURBO PASCAL INSTRUCTIONS]
    Copy all of the included .TPU files into your units directory,
    or a directory on your system where Turbo Pascal can find them.
    Alternately, you may place all of the .TPU files in the same
    directory as your "Door".

    Examine the included sample program "Doortest.pas" for a better
    understanding of using the A.N.G.E.L. library.


                      LAUNCHING AN A.N.G.E.L. PROGRAM
                      _______________________________

    A.N.G.E.L. uses a configuration file named ADOORx.cfg. Where x is the
    node number. It also uses a standard dropfile (DOOR.SYS, DOOR32.SYS, etc)
    to initialize itself when not operating in local mode. You may rename the
    configuration file anything you want by specifying the correct command
    line option (see below).
    The configuration file is a 10 line text file with the following format:

    DOORSYS
    C:\BBS\NODE1\
    WIZARDS CASTLE
    JIMMY ROSE
    TELNET
    D:\DOORS\LORD3\
    0
    0
    0
    0

    Line 1 is the dropfile type (DOORSYS,DOOR32,DORINFO,TRIBBS,WWIV,etc).
    Line 2 is the full path to the dropfile for this node. Do NOT
           specify dropfile name on this line.
    Line 3 is the system name.
    Line 4 is the name of the system operator.
    Line 5 is the locked baud rate if applicable or TELNET if using
           a telnet connection.
    Line 6 is the full path to the directory where the door is located.
           Do NOT specify the door name, only the directory path.
    Lines 7-10 are reserved for future use, but must be present.        

    This file must be present for the program to launch. You may specify the
    configuration file name and path with command line switch /C.
    Example: program.exe /Cc:\bbs\doors\adoor.cfg

    You must have a seperate configuration file for each node on your system.

    The dropfile type may be any one of the follwing: DOOR32 (DOOR32.SYS),
    DOORSYS (DOOR.SYS), DORINFO (DORINFO1.DEF), WWIV (CHAIN.TXT),
    TRIBBS(TRIBBS.SYS), SPITFIRE(SFDOORS.DAT), PCBOARD12(PCBOARD.SYS),
    PCBOARD14(PCBOARD.SYS).

    A configuration utility is provided for quick and easy creation of the
    ADOORx.CFG file(s). The Windows version is named SETUP32.EXE and the DOS
    version is named SETUP.EXE. You may distribute the setup programs with
    the doors that you create.


                            COMMAND LINE OPTIONS
                            ____________________

    The following command line switches may be used:
        /H  Handle or ComPort to use. (Required for Remote Operation)
        /C  Configuration File
        /T  Telnet Mode
        /L  Local Mode
        /G  Game Module (IGM)
        /S  Security Level
        /W  Wildcat5/Winserver Switch
        /M  Time Left in Minutes. (Useful for limiting time in door)
        /?  Shows available switches
        
    EleBBS Example: MYDOOR.EXE /H*W /Cc:\bbs\doors.adoor*N.cfg

    The /H parameter must be specified when not operating in local mode.
    If no command line switches are used, the program defaults to local mode.

                           LOCAL MODE OPERATION
                           ____________________

    A.N.G.E.L. programs may be ran in local mode without using a dropfile if
    desired. You may start an A.N.G.E.L. program in local mode by either
    using the command line switch /L or simply typing the program name without
    any parameters, allowing you to create not only BBS door type programs but
    any type of program or game for general distribution.

    When operating in local mode A.N.G.E.L. programs show a default local
    screen and prompt you to enter your name. You may replace the default
    screen by creating an ANSI picture, naming it "local.ans" and placing
    it in the program directory. If present, "local.ans" will be displayed
    instead of the default screen. When creating the local ansi remember to
    leave blank the line where the prompt is displayed.



                          OPTIONAL CONFIGURATION
                          ______________________

    Programmers and Sysops may take advantage of an optional configuration
    file named "SYSOP.DAT" This is a standard text file that may be created
    or edited with standard text editor. If present, A.N.G.E.L. will read in
    this file before performing initialization. The format of the file is as
    follows:

    ISA
    15
    1

    Line 1 is the Status Bar Type. (See "Configurable Status Line" below)
    Line 2 is the Status Line Foreground color. (See "Color Codes" below)
    Line 2 is the Status Line Background color. (See "Color Codes" below)

    If the command line switch /G is used to designate an In Game Module
    the file "IGM.DAT" will be read instead of "SYSOP.DAT". The format is
    the same. This allows programmers to configure different status line
    colors to indicate whether a player is playing the actual game or
    playing an IGM.

    If the file(s) SYSOP.DAT or IGM.DAT is not present, default values
    will be used.

                          VARIABLES & STRUCTURES
                          ______________________

    This section contains a list of public variables and structure
    declarations that you may access in your programs.

    User information is contained in the structure 'user'.

    user.uName     : string[30];  { User's Full name }
    user.FirstName : string[20];  { User's First name }
    user.LastName  : string[20];  { User's Last name }
    user.Alias     : string[20];  { User's Alias if available }
    user.Location  : string[30];  { Where the current user is calling from }
    user.Email     : string[40];  { User's Email address if available }
    user.Security  : word;        { Users Security Level }
    user.IDnumber  : word;        { Users Record # from dropfile if exists}

    System information is contained in the structure 'bbs'.

    bbs.SystemName     : string[30]; { Name of BBS or Online System }
    bbs.Sysop          : string[20]; { Name of System Operator }
    bbs.DropFilePath   : string[80]; { Path to Drop File }
    bbs.DropFile       : string[15]; { Type of Drop File }
    bbs.DoorPath       : string[80]; { Full Path to the door }
    bbs.OriginPath     : string[80]; { Original Path when program is launched }
    bbs.Comport        : word;       { Comm Port # for dial-up connections}
    bbs.Node           : word;       { Current Node Number }
    bbs.TimeLeft       : word;       { User's time left for this session }
    bbs.TimeLimit      : word;       { Used for command line switch }
    bbs.ActualTime     : word;       {Used internally for rewriting dropfile}
    bbs.BaudRate       : longint;    { Baud Rate From Drop File}
    bbs.LockedBaud     : longint;    { Locked Baud Rate From adoor.cfg File}

    A.N.G.E.L. Interface information is contained in the structure 'AI'.

    AI.StatFore    : byte;    { Status bar foreground color  }
    AI.StatBack    : byte;    { Status bar background color  }
    AI.TextFore    : byte;    { Screen text foreground color }
    AI.TextBack    : byte;    { Screen text background color }
    AI.StatusType  : StatusBarType; { Type of Status Bar display }
    AI.GrMode      : byte;    { Graphics mode (Future Use)   }
    AI.DEBUG       : byte;    { Used only for testing  }
    AI.TimeOut     : byte;    { Idle Time before disconnecting }
    AI.Telnet      : boolean; { True if in telnet mode }
    AI.Local       : boolean; { True if in local mode  }
    AI.IGM         : boolean; { True if door is an IGM }
    AI.WC5         : boolean; { True if door is compiled for WC5/WINSERVER }
    AI.UseAlias    : boolean; { If true then use alias for user.uName }
    AI.Chatting    : boolean; { In Chat Flag }
    AI.ansi        : boolean; { ANSI graphics flag }
    AI.html        : boolean; { HTML graphics flag }
    AI.WinClient   : boolean; { Windows Terminal Interface graphics flag }
    AI.dos         : boolean; { DOS flag }
    AI.ConfigFileName : string[60]; {Name of the .cfg file including path}
    AI.ProgramName    : string[30]; {Name of the current program}
    AI.Version        : string[12]; {Version of the current program}
    AI.Author         : string[30]; {Author of the current program}

    The following global variables are also defined:
    LocalChar  : boolean; { True if last key pressed was local }
    RemoteChar : boolean; { True if last key pressed was remote}
    UP         : boolean; { True if last key pressed was the UP arrow key   }
    DOWN       : boolean; { True if last key pressed was the DOWN arrow key }
    LEFT       : boolean; { True if last key pressed was the LEFT arrow key }
    RIGHT      : boolean; { True if last key pressed was the RIGHT arrow key}
    F1,F2,..F10: boolean; { The last function key pressed will be TRUE }


                           PROCEDURE & FUNCTION LIST
                           _________________________

    This section contains a list of public procedure and function definitions
    arranged by category.

    INPUT/OUTPUT FUNCTIONS

    procedure aExit(en: word);
    This procedure should be called when exiting the program. It
    releases all memory used by A.N.G.E.L. and performs other
    clean-up chores. It should be used instead of 'halt'.
    aExit returns an exit code that may be evaluated by the process
    under which the program was called.
    Example: aExit(1);

    procedure aWrite(s : string);
    Writes a string to both the local and remote terminal with support
    for ANSI control codes.

    procedure aWriteLn(s : string);
    Writes a string with linefeed to both the local and remote terminal
    with support for ANSI control codes.

    procedure aWriteIcc(s : string);
    Writes a string to both the local and remote terminal with support
    for ISA Color Codes. See "ISA Color Codes" below.

    procedure aWriteIccLn(s : string);
    Writes a string with linefeed to both the local and remote terminal
    with support for ISA Color Codes. See "ISA Color Codes" below.

    procedure aWritePcc(s:string);
    Writes a string to both the local and remote terminal with support
    for Pipe Color Codes. See "Pipe Codes" below.

    procedure aWritePccLn(s:string);
    Writes a string with linefeed to both the local and remote terminal
    with support for Pipe Color Codes. See "Pipe Codes" below.

    function aReadKey : char;
    Waits for and returns a single key pressed either locally or
    remotely.

    function aReadStr : string;
    Returns a string entered either locally or remotely.

    function aReadLong : longint;
    Returns a long integer entered either locally or remotely.

    procedure aGotoXY(x,y : byte);
    Positions the cursor at the specified co-ordinates.

    procedure aClr;
    Clears the screen both locally and remotely.
    
    procedure aClrC(c : byte); Clears the screen locally and remotely
    leaving the background color 'c'

    procedure aClrEol;
    Clears from the cursor position to the end of the current line.

    procedure aWriteXY(x,y : word; s:string);
    Writes a string locally and remotely at the specified co-ordinates.

    procedure aSetFore(f : byte);
    Sets the foreground color. See the color codes below.

    procedure aSetBack(b : byte);
    Sets the background color. See the color codes below.

    procedure aSetColor(f,b : byte);
    Sets both the foreground and background color. See the color codes
    below.

    procedure aShowFile(filename:string; fcolor, bcolor:byte; pauseit:boolean;
                        abort:boolean);
    Display the specified file both locally and remotely with ANSI support.
    The default colors are fcolor (foreground) and bcolor (background). If
    'pauseit' is true the file will be paused every 20 lines. If 'abort'
    is true, the user may abort the file display by hitting a key.
    Example: aShowFile('menu.ans', 7, 0, false, false);

    procedure aShowFileFast(filename: string);
    This procedure displays the specified file both locally and remotely with
    ANSI support. It's fast but doesn't offer the extra features found in
    aShowFile.

    procedure OneChar(var c:char; ch:string);
    Gets a character locally or remotely, only accepting one char
    defined in the string 'ch'.
    Example: OneChar('1234567890QX');

    procedure BannerLine(s: string; f, b: byte);
    Returns string 's' centered on a colored banner line, where 'f' is the
    foreground color and 'b' is the background color.
    Example: BannerLine('This is cool!',15,4);

    procedure NewLn;
    Write a CR/LF locally and remotely.

    procedure NewLnn(i: byte);
    Write 'i' number of  CR/LF's locally and remotely.

    function YesNo(Ch: char): boolean;
    This function returns either TRUE (yes) or FALSE (no) in response
    to a YES/NO question.

    procedure Pause(clr: byte);
    There are 12 different pause routines. The first two are plain pause
    prompts. The others are animated pause routines. Number 6 is the Pac
    Man pause, Andy's favorite. :-)
    Examples: Pause(1); Pause(6); Pause(11);

    procedure Input(var report:string; ml: byte);
    Allows string input 'report' with a maximum length of 'ml'. This
    procedure is not case sensitive. Case is not forced.

    procedure GInput1(var report:string; ml:byte; c: char);
    Graphical Input. Allows string input 'report' in length 'ml' with an
    ANSI graphical background. ANSI graphic used is passed as 'c'.

    procedure GInput2(var report:string; ml:byte; c: char; s:string);
    This is the same as GIinput1 with an additional feature. Pressing
    ENTER without entering any other data returns string 's' as the input
    on the line. Used when you want a 'default' input.

    STRING FUNCTIONS

    function  LowStr(s:string): string;
    Converts string 's' to all lowercase.

    function  UpStr(s1: string): string;
    Converts string 's' to all uppercase.

    function  Center(s1: string): string;
    Displays the string centered.

    function Cstr(i:longint):string;
    Convert integer or longint to string.

    function CstrR(rl:real; base:integer):string;
    Convert real to string.

    function CstW(w:word): string;
    Convert word to string.

    function ValueR(I:string): real;
    Convert string to real.

    function ValueW(i:string): word;
    Convert string to word.

    function Value(I:string): longint;
    Convert string to longint.

    function CharStr(ch: char; i: byte): string;
    Returns a string consisting of 'i' amount of 'ch' characters.
    Example:
    Awrite(charstr(#32,24)+'Split Screen Chat'+charstr(#32,25));

    function Int2Str(L : LongInt) : String;
    Converts an integer to a string.

    function Str2Int(S : String) : LongInt;
    Converts a string to an integer.

    function PadStr(passedstr: string; addspc: byte; location: char): string;
    Pads addspc - length(passedstr) spaces to the string 'passedstr'.
    'R' = padded to the right, 'L' = padded to the left.

    function ISAPadStr(passedstr: string; addspc: byte; location: char; fillchar: char;
                       isastrcolor: string; isacharcolor: string): string;
	This is basically the same as the "PadStr" function except instead of defaulting to
	a space (#32) it fills the extra space with 'fillchar'. 'fillchar' may be any ansi
	character (#1 to #255). It Pads 'addspc' - length of 'passedstr' number of fillchar
	to the string 'passedstr'. isastrcolor = the ISA color of the passedstr ie: '^\09'.
    isacharcolor = the ISA color of the fillchar ie: '^\08'. 'R' = padded to the right,
    'L' = padded to the left. Example: ISAPadStr(Dude,10,'L',#250,'^\09','^\08');
    would return: '^\08......^\09Dude'

    TIME/DATE FUNCTIONS

    function time_left   : word;
    Returns the time the user has left in minutes.

    function time_used   : word;
    Returns the amount of time the user has used so far.

    function Jul( mo, da, yr: integer): real;
    This function returns an integer day count using 1 January 1980 as 0.

    procedure JtoD(pj: real; var mo, da, yr: integer);
    This function reverses the calculation in Jul, returning the result
    in a Date_Rec.

    function aDate: string;
    Returns the current date as a string in the format month/day/year.
    Example: today := aDate; aWrite(today);
    This line of code would print the date in the format 07/13/01.

    UTILITY FUNCTIONS

    function aGetFore: byte;
    Returns the current foreground color.

    function aGetBack: byte;
    Returns the current background color.

    procedure snooze(n: integer);
    Pauses for n seconds.
    This is the same as sleep(x) under Win32 and delay(x) under DOS.
    You should use it in place of 'sleep' or 'delay' for cross platform
    compatibility.
    
    procedure timeslice;
    Releases a time slice to the operating system.
    This procedure is used internally and should not be called under 
    normal circumstances. However, if you have programmed a loop that 
    does NOT call any ANGEL procedures or functions and you want to 
    release a timeslice, then you may wish to use it. For example in
    a LOOP that is doing some math intensive calculations where no other
    ANGEL function is called.
    
    function SearchExec(ProgramName, Parameters : String): Integer;
    This function will search the current path for 'ProgramName' and
    execute the program with the command line parameters passed in
    'Parameters'. The function returns either the DOS error code
    (0 if no error) or '2' if 'ProgramName' cannot be found.

    function FileExist(FileName : String): Boolean;
    Returns true if file 'Filename' exists.

    function DirExist(DirName : DirStr) : Boolean;
    Returns true if directory 'DirName' exists.

    function AddCommas(passedstr: string): string;
    Returns string 'passedstr' with the correct number of commas. This
    function may be used when using a string as a number.
    Example: AddCommas(1000000); would return '1,000,000'.

    function clearCC(clrstr: string): string;
    This function will clear both ISA and Pipe color codes from the
    string 'clrstr'.
    Example: string1 := (ClearCC('^\01Blue on Black ^\02Green on Black');
    This would strip the color codes and just leave the text in string1.

    procedure DisplayStatus(choice: StatusBarType);
    This procedure is intended for internal use and ordinarily you should
    not need to call it. However if for some reason you decide to change
    status line types while your program is running, it may be called to
    immediately update the display. Read the section titled "CONFIGURABLE
    STATUS LINE" for a list of legal values.

                               COLOR CODES
                               ___________

    These are the color codes that are used in the procedures Asetfore,
    Asetback and Asetcolor.

    Color Codes ANSI

    Black        0      Dark Gray    8
    Blue         1      Lt Blue      9
    Green        2      Lt Green    10
    Cyan         3      Lt Cyan     11
    Red          4      Lt Red      12
    Purple       5      Magenta     13
    Brown        6      Yellow      14
    Lt Gray      7      White       15

    Background only uses colors 1-7.

    Example: Asetcolor(15,1); Sets the text (foreground) color to White
    and the background color to Blue.


                             ISA COLOR CODES
                             _______________

   ISA Codes are imbedded codes that make it easy to change colors,
   perform a CR/LF or clear the screen while printing strings to the
   console. An ISA Code is a four character code that consists of a
   "Carat-Slash" pre-cursor character followed by a two digit color code.

   ISA Color Codes are only available in the procedures aWriteIccLn and
   aWriteIcc.

   When NOT using ISA Codes you should use aWrite and aWriteLn instead as
   they are faster.

   The first digit is the background color, the second digit is the
   foreground color.  IE:  ^\02 would be Green on Black.

   The ISA Color Codes are as follows:

   ^\ followed by:

   0 - Black       1 - Blue         2 - Green         3 - Cyan
   4 - Red         5 - Purple       6 - Brown         7 - Light Gray
   8 - Dark Gray   9 - Light Blue   A - Light Green   B - Light Cyan
   C - Light Red   D - Magenta      E - Yellow        F - White

   LF - CR/LF
   CL - Clear Screen

   Only 0 - 7 may be used as background colors.


                               PIPE CODES
                               __________

   Pipe Codes are codes that are imbedded codes that make it easy to
   change colors while printing strings to the console. A Pipe Code
   is a three character code that consists of a "Pipe" character followed
   by a two digit color code. The "Pipe" character is usually accessed
   by pressing "shift" + "\" (backslash) on your keyboard.
   Pipe Color Codes are only availble in the procedures Awritecln and
   Awritec. When NOT using Pipe Codes you should use Awrite and Awriteln
   instead as they are faster.


   The Pipe Color Codes are as follows:

    Foreground Colors:

        |00 Black          |08 Dark Grey
        |01 Blue           |09 Light Blue
        |02 Green          |10 Light Green
        |03 Cyan           |11 Light Cyan
        |04 Red            |12 Light Red
        |05 Purple         |13 Magenta
        |06 Brown          |14 Yellow
        |07 Lt Grey        |15 White


    Background Colors:

        |16 Black Background    or  |B0 Black Background
        |17 Blue Background     or  |B1 Blue Background
        |18 Green Background    or  |B2 Green Background
        |19 Cyan Background     or  |B3 Cyan Background
        |20 Red Background      or  |B4 Red Background
        |21 Purple Background   or  |B5 Purple Background
        |22 Brown Background    or  |B6 Brown Background
        |23 Lt Grey background  or  |B7 Lt Grey background


    Note that the background colors have two possible codes for each
    color. You may use either one.

    Example: AwritePccln('The |04Red dragon |15destroyed the village');
    This would print "Red dragon" in red and the rest in white.


                         CONFIGURABLE STATUS LINE
                         ________________________

     The status line of A.N.G.E.L. programs may be configured to emulate
     popular BBS software. The variable AI.StatusType holds the current
     status line selection. You may change the status line by assigning
     a new value to this variable. Possible values are:

     ANGEL1 ( Default A.N.G.E.L. Status Line )
     ISA    ( ISA style status lines, one line at top, one at bottom )
     TRIBBS ( TriBBS style status line )
     RA     ( Remote Access style status line )

     Examples: AI.StatusType := ISA;  AI.StatusType := TRIBBS;
     
     See "OPTIONAL CONFIGURATION" section above to see how to set the
     status line at start-up.


                                SYSOP KEYS
                                __________

    Sysop keys are available from the local console only.

        [F1]  Displays Help
        [F2]  Shows User Information
        [F3]  Shows System Information
        [F4]  Displays Program & Author Information
        [F5]  Activates Chat Mode
        [F7]  Adds 5 minutes to the user's time
        [F8]  Subtracts 5 minutes from the user's time
        [F10] Terminates the door


                               HINTS & TIPS
                               ____________

    Programs written with A.N.G.E.L. can be compiled on Windows, DOS,
    and Linux platforms using the appropriate version of the library.

    Starting an A.N.G.E.L. program by typing the name at the DOS prompt
    with no command line switches will launch the program in local mode.
    Thus allowing the program to be used without a dropfile or command
    line switches, if desired.

    When color codes are not required, Awrite and Awriteln should be used
    for effieciency.

    When using Telnet, a dropped carrier is only detected on the key
    input routines.

    When running the Windows version, the program will always execute
    slightly faster in Full Screen mode that it will in a window.


                         SAMPLE CONFIGURATION FILES
                         __________________________

    This section not yet completed.


                                 CREDITS
                                 _______

    Thanks to Maarten Bekers for Elecom. You can find EleBBS and Elecom
    at Maartens website: http://www.elebbs.com.


                                  NOTES
                                  _____

    When using the 32bit Windows version of EleBBS, it is not necessary
    to use a batch a file to call the door.

    The 32bit Windows version of this program was written in Pascal
    using Borland Delphi.

    The 16bit DOS version was written using Borland Turbo Pascal.

    A.N.G.E.L. Doors have been tested with the following software:
    EleBBS, Wildcat 5, Synchronet.




                              FUTURE PLANS
                              ____________


    A Linux version will be made available in the near future.

    New graphics formats will be implemented.

    Full InterBBS integration will be added.



    If you have any questions, comments, or suggetions please send
    an email to: atlantis@jimmyrose.com


    If you do have a problem and write, please be prepared to
    provide the following information:
    > Program version number.
    > BBS Software & version number.
    > Any thing else "specific" to your problem.
*****************************************************************************
                    THANKS FOR USING A.N.G.E.L.!
*****************************************************************************
