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

                 Atlantis Networking Game Engine Library

                         A.N.G.E.L.  Version 1.0 

                  Written By Jimmy Rose & Andy Stewart

                    Copyright 2002 Atlantis Software

                   This Document Updated: Nov 15 2002
                *****************************************




                            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 Native Support! 
        * Support for all major dropfiles!
        * Internal ANSI Support!
        * Pipe Color Code Support!
        * ISA Color Code Support!
        * Handles all Communications!
        * LORD & ISA IGM Support!
        * Easily Port DOS Doors To Windows & Linux!
        * Full Local Mode Support, No Dropfile Required!
        * Configurable Status Lines!
        * Fossil Support For DOS!
        * Fully Extensible IGM Support For Your Doors!


                         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.
    IGM.PAS         Inter-Game Module support 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

    [Borland & 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.
    IGM.PAS         Inter-Game Module support unit.
    ANGEL.TXT       Documentation for A.N.G.E.L.
    
    [Miscellaneous Files that may be included]
    ALORD.PAS       Used for creating LORD IGM's.
    ISAIGMxxx.ZIP   Complete developer'skit for creating ISA IGM's.
    IGM.TXT         Documentation for adding IGM support to your doors.
    ANGELKD.PAS     Used for compatibility with Kdrive (also used by alord).
                    Note that ANGELKD.PAS contains 16bit code that is not
                    compatible with 32bit Delphi. 
    ADOOR.CFG       Sample door configuration file.
    MENU.ANS        Ansi menu used by Doortest.exe.
    OLD.NEW         ISA color codes demo used by Doortest.exe.
    HISTORY.TXT     History file for the A.N.G.E.L. doorkit. 
                         


                              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 is available Turbo Pascal 7.0 and Borland Pascal 7.1.
    
    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 available for download from the Atlantis
    website. It offers quick and easy creation of the ADOORx.CFG file(s).
    You may distribute the setup program 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
        /N  Node Number
        /G  Game Module (IGM)
        /S  Security Level
        /W  Wildcat5/Winserver Switch
        /M  Maintenance Mode
        /Z  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.
    
    The /G switch tells A.N.G.E.L. that the program is an Inter-Game Module.
    You may pass the path to the IGM dropfile with this switch.
    Example: MYIGM.EXE /Gc:\bbs\doors\lord\
    
    The maintenance mode switch /M allows you to execute an A.N.G.E.L. program
    in local mode without having to log in. This is useful for running doors
    that require unattended nightly maintenance. 
    Note that if you run maintenance for an IGM, you do NOT use the /G switch
    when running maintenance.
    

                           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, always TRUE in local mode}
    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 aInit;
    IMPORTANT! This procedure MUST be called as the first procedure in
    your program. This initailizes the communications routines in ANGEL.
    If you fail to call this procedure, then attempt to access any
    ANGEL function remotely, the program will crash due to not being 
    properly initialized.

    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 aWriteCh(ch : char);
    Writes a single character both locally and remotely.
    
    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;
    Returns the string centered.
    Example: aWriteLn(center('This will print in the center of the screen.');

    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 addblank(s1: string; i1:integer): string;
    Adds spaces to string S1.

    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.
    
    function Field(DaStr: string; DaChar: char; DaInst: byte): string;
    Field() - Parses out delimited lines based on token passed as
    delimiter. Example: Say S:= First,Second,Third
    Field(S,',',2) would return 'Second'.
    
    function BackSpace(NumBS: byte): string;
    Returns NumBS of backspaces. Example: aWriteln(BackSpace(3)); 
    returns 3 backspaces, thus backspacing 3 characters.

    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 aCopyFile(SourceFileName, DestFileName: String): boolean;
    Copies file SourceFileName to DestFileName. When used under Win32, the
    destination file will be overwritten if it already 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

    
                               IGM SUPPORT
                               ___________
                               
    A.N.G.E.L. contains full support for LORD and ISA Inter-Game Modules,
    also known as IGM's. In addition, it makes it very simple to add IGM
    support to any door written with A.N.G.E.L. 
    
    Please see IGM.TXT for instructions on creating Inter-Game Modules.
      

                               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
                         __________________________

    Here is a sample configuration for setting up a 32bit A.N.G.E.L. 
    door with Synchronet 3.x. The handle is passed on the command line
    using the %u parameter.   

    Name				    Vegas Slots
    Internal Code			VEGAS
    Start-up Directory		c:\sbbs\xtrn\vslots
    Command Line			slots /H%u /Cc:\sbbs\xtrn\vslots\adoor%#.cfg
    Clean-up Command Line
    Execution Cost
    Access Requirements
    Execution Requirements
    Multiple Concurrent Users	Yes
    Intercept Standard I/O		No
    Native (32-bit) Executable	Yes
    Modify User Data		Yes
    Execute on Event		No
    BBS Drop File Type		Mystic		DOOR32.SYS
    Place Drop File In		Node Directory
    Time Options...


                                 CREDITS
                                 _______

    Thanks to Maarten Bekers for Elecom. You can find EleBBS and Elecom
    at Maartens website: http://www.elebbs.com.
    
    Thanks to Charles Wardick for his extensive work on the LORD interface.
    
    Thanks to Wayne King for his sample Synchronet configuration.
    
    The Atlantis Software website is located at: 
    http://jimmyrose.com/atlantis
    
    Andy Stewart's website is http://www.taynik.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 BBS software:
    [32bit]
    EleBBS, Wildcat 5 (Winserver), Synchronet.
    [DOS] 
    TriBBS, Renegade, Wildcat4.x.




                              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.!
*****************************************************************************
