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

                 Atlantis Networking Game Engine Library
                                 
                         A.N.G.E.L.  Version 0.9 (Beta)
                           
                  Written By Jimmy Rose & Andy Stewart
    
                    Copyright 2001 Atlantis Software 
                
                   This Document Updated: May 10 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 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!
        * 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
                         ______________
                          
    [Delphi Version]
    Here is a list of all files included in this archive. All of the
    .DCU files were compiled using Delphi version 5.                          
                         
    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..
    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.DPR    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. The current
    library release is for Delphi 5.0. It may be used with Dephi Standard,
    Professional or Enterprise.
    
    Libraries for other versions of Delphi may be made available.
    
    The DOS version requires Borland Turbo Pascal 7.0.
    


                      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. 
    
    [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 6 line text file with the following format:
    
    DOORSYS
    C:\BBS\NODE1\
    WIZARDS CASTLE
    JIMMY ROSE
    TELNET
    D:\DOORS\LORD3\
        
    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.
    
    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
        /S  Security Level 
        /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.



                          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.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;
    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'.    
    
    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 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' number of spaces to the string 'passedstr'.
    'R' = padded to the right, 'L' = padded to the left.    
    
    TIME 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.
        
    UTILITY FUNCTIONS 
       
    function aGetFore: byte;
    Returns the current foreground color.
    
    function aGetBack: byte;
    Returns the current background color.

    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;  
                          

                                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. 
                                                                   

                         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.
    
    The source code for A.N.G.E.L. is not available at this time.
    
    A.N.G.E.L. Doors have been tested with the following software:
    EleBBS
    
        

                              FUTURE PLANS
                              ____________
                                
    The DOS version will be released shortly after the 32bit Windows
    version is released. 
        
    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: jrose@one.net 
           

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