


                       Anarchy Road Software Presents:

                      Falcon CBCS - An Amiga Opus Clone


                           "Bob's Favourite CBCS"
                        "The CBCS with Fahrvergnügen"


                    Copyright © 1988-91, by Brian Fehdrau.
                            All rights reserved.


                       Operator's Manual, First Draft
                                 01-Oct-91


IMPORTANT
=========

As you might have inferred from the title, this is a *first draft*.  It
should contain all information required to use all aspects of the program,
because it was created by walking through the source code and making
generous notes, and then converting that into real English text.  However,
chances are that some parts will be unclear, especially since the month it
took me to work all this out introduced no shortage of inconsistent writing
styles and formats.  Also, most information will occur only once, and either 
some redundancy or a See-Also note here and there is required in order to 
make it easier to find certain information.  Therefore I would appreciate 
notification of sections which are difficult to find or understand.  
Sections might also be in an weird order, meaning that they should, but may 
not, follow each other in a logical fashion.  So if you've got a better 
order for them, let me know.



Some Quick Information About DemoWare, Distribution and Me
==========================================================

What the zark is DemoWare?
--------------------------
It's obvious, really.  It's a lot like ShareWare.  You can use what you've 
got for as long as you want, but if you use it for long enough, then you 
really ought to consider the effort required to create this program and 
register it.  The difference with DemoWare is that there's another incentive 
besides guilt.  In Falcon's case, this incentive to send in your fee and 
register your copy is a 50K limit on file transfers.  Meaning, a person 
cannot transfer a single file larger than 50K, or a batch of files which 
total more than 50K.  The first file could not be downloaded at all unless 
it can be broken up, and the second group would have to be done in two or 
more downloads.  Similarly so for uploads.  Note that the limit is per 
*transfer*, not per call.

Some people would call this CrippleWare, but I see a difference.  Generally,
CrippleWare is designed so that it cannot be used easily in a normal 
situation, and it often has certain key features disabled completely.  My 
variety of DemoWare allows normal operation and includes all features, with 
one key feature limited but not disabled, so that a person may demo the 
program and that feature to see if they want to register.  Hell, if they can 
get along without full-sized transfers, they can run the unregistered 
version and forget all about a certain starving programmer.

If you do wish to register, there should be a file called "Registration.txt"
in your archive which contains information on how to register a form to fill
out, and an address to send it to.


Distribution
------------
The two archives Falcon comes in are freely distributable, with the 
exception that nobody may make any profit from them (short, perhaps, of a
small disk copying fee).  The archives may be placed on any BBS or other 
online service that does not claim any rights over them, as Compu$erve has
been known to do.  They may be placed in disk collections (such as the Fred
Fish disks) or users' group disks, subject to the non-profit limitation
mentioned above.  The archives themselves are not to be altered, meaning that
no files are to be removed or added.  I would prefer that the archiving 
method not be changed, but I see no point in prohibiting it.  Distribution 
of the unaltered contents of the archives on a disk collection would be 
okay.

If the form of distribution you wish to use does not not fall within the 
above guideline, or falls on the wrong side of them, talk to me and we might
work something out.  I'm not totally unreasonable.


Where to Find Me
----------------
I can be reached through FidoNet technology at either 1:140/22@FidoNet or 
1:140/22.2@FidoNet.  The first is my boss and the second is me, and either 
will get to me.  I can also be reached through the Internet address 
bf@weyr.fidonet.org.  Also, if you're going to use an Internet address, it 
may be quicker to use fehdr460@skdad.usask.ca.  That will only be available 
until some time in December 1991, which is when my CMPT 460 class ends.  I 
will probably have a new account in January, as fehdr398@skdad.usask.ca.  
Blame this on the brain-dead system of handing out undergrad accounts at the 
University of Saskatchewan.  Snail-Mail me at P.O. Box 7635 / Saskatoon, SK /
Canada / S7K 4R4.



                              Table of Contents
                              =================

    1.  Setting Up
            What You Will Need
    2.  Running the Program
    3.  Waiting For a Call
    4.  Logging In
            New Users
    5.  General BBS Usage
            "More [Y,n?]" Prompts
            Local Menus
            Line Editing and Command History
            Other (Non-Prompt) Key Commands
            Command Stacking
            Yelling with the Sysop
    6.  BBS Menus
            Main Menu
            Message Menu
                Reading a Message
                The Prompt
            File Menu
            Change Menu
            Edit Menu
            Subop Menu
            Librarian Menu
            Sysop Menu
            User Edit Menu
    7.  Entering and Editing a Message
            Starting a Message
                Entering a FidoNet Address
            Saving a Message
            The Editors Themselves
                LORE ("Line ORiented Editor")
                FRED ("Falcon's Rapid EDitor")
    8.  The Goodbye (Logoff) Sequence
    9.  XPR (eXternal PRotocol) File Transfers
    10. FTerm
            Special Keys
            Transfers
            In Case of Problems with Display Positioning
            The Review Buffer
            File Requester
            Dial Directory
            Dialer
    11. Configuration Files
            falcon.cfg
            msgareas.bbs
            fileareas.bbs
            menus.bbs
            sched.bbs
            term.bbs
    12. Configurable Menus
            How to Make a New Menu
            Customizing Menus
                GOTO
                NIL, CON, and RAW
                BATCH
                GOODBYE
                MACRO
            Arguments
            Note on Help Files
            What Kinds of Programs to Use and What Kinds Not to Use
            Warnings
            Suggestion
            Notes About DLG Doors
            Sample External Menu
    13. Batch File
    14. Suggestions and Hints
    15. Miscellaneous/Technical Information
            Workbench/KickStart 2.0
            Overlaid vs. Pure Executables
            bf.library
            Using a Nodelist
            Refreshing the Display
            Editing File Lists
            The Quote File
            The Log File
            Text Files
            Help Files
            The Numeric Keypad
            Remote VT100 Keys
            ANSI Used in Output
            Those "stat.dat" Files and the "systemstat.dat" File
    16. FidoNet-Specific Technical Information
            Quoting
            Netmail/Echomail Kludge/Control Lines
            Notes on Kludges
            Datestamps
    17. Yet to Come
    18. ICK!  BUGS!  (And other caveats)


1.  Setting Up
==============

First, you want to get the files you are provided with into the proper 
places.  Therefore, change to the directory you want your BBS in, and 
unarchive the files.  This will provide you, after a few more DOS commands, 
with a bare-bones BBS which should be ready-to-run.  You will make changes 
later.

Here's a rough idea of what you should be doing in your shell.  Note that
you should replace "BBS:" with the directory you want to put the BBS in, and
"ARCHIVES:" with wherever you put the Falcon archives.  Also, where you see 
"lhunarc", use your favourite unarchive, but be sure it extracts with 
extended filenames and paths.

    1> cd BBS:

    1> lhunarc ARCHIVES:Falconxxx-2    ; extract Falcon, bf.library,
                                       ; support files and paths

    1> makedir msgs                    ; \
    1> makedir msgs/gen                ; |_  Make the directories for
    1> makedir files                   ; |   mail and files (for now)
    1> makedir files/gen               ; /

    1> makedir logs                    ; optional, for storing old log files

    1> makedir FONTS:IBM
    1> copy IBM.font FONTS:            ; you should probably use my IBM.font
    1> copy IBM FONTS:IBM              ; no one says you CAN'T use another's
    1> delete IBM.font
    1> delete IBM all

    1> copy bf.library LIBS:
    1> delete bf.library

    1> list LIBS:diskfont.library      ; and if it's not there, put it there

You must also be sure that "T:" is assigned somewhere.  Falcon occasionally 
keeps some files in "T:".  Notice that that is "T:" and not "T/".  You must 
use the DOS Assign command to assign the volume "T:" to where you want your 
temporary directory.  There is one exception:  if the root directory of your 
boot disk had a "T" directory in it, "T:" will have been assigned there 
automatically, although you may still want to move it.  I suggest a "T" 
directory on the RAM disk.  At any rate, it should be on a reasonably quick 
device, since it is used, among other things, to store the cut & paste 
buffer in FRED.

You can run the program as it is now, but I strongly suggest you make a few 
important changes to the configuration right now, before you run it:

    In Falcon.cfg:

        NAME    "your BBS's name"
        SYSOP   "your name"
        MAXBAUD your_modem's_maximum_baudrate

        You may also have to change some modem strings, depending on your 
        modem.  Consult Falcon.cfg documentation for more information.

    Text files you will want to personalize, sooner or later:

        welcome1.bbs
        welcome2.bbs
        bulletin.bbs
        newuser.bbs
        editorial.bbs
        yell.bbs
        warning.bbs
        logoff.bbs

To create the userlist, just log in with the name you put in the SYSOP field 
of Falcon.cfg.  Falcon will consider that to be a special case and give you 
SYSOP access (you'll know if this works, since Falcon will tell you), so 
make sure you do this before some other user thinks of it!  You should be 
able to get by with that.  The Sysop Menu is available as "!" from the Main 
Menu, and the User Edit Menu is "E" from there.  When you finished looking
around, you'll probably want to come back to this document.  Meanwhile,
I'm going to go get a glass of Coke Classic.


What You Will Need
------------------
This is a short but hopefully complete list of the files you should have.
Files with an asterisk are what I figure you'll need for a FidoNet system if 
you should go that far (thinking in terms of a point, as I've never run a 
node myself).  Files in square brackets are optional.

    FONTS:
        IBM.font
        IBM/8
        IBM/12

    LIBS:
        bf.library
        diskfont.library
        [xpr#?.library]
       *[traplist.library]

    DEVS:
        serial.device

    Anywhere in your command paths, including the current directory:
        Falcon 
       *(an archiver compatible with your boss' archiver)
       *FExport/FImport or CM (ConfMail) and possibly oMMM
       *TrapDoor or Welmat

       *The Roof   A special shell for (FidoNet) BBSs, which I have little 
                   experience with but which looks like a promising 
                   replacement for the ARP shell I used in my doomed fbatch.

    The current directory:
        Falcon.cfg      Or in S: or Falcon: or user-specified path/name
       *TrapDoor.cfg    Or in user-specified path/name
       *FastPoint.cfg   Or in user-specified path/name
                        Could instead be a ConfMail and/or oMMM config file

    CONFIGDIR           ???DIRs are set in Falcon.cfg
        english.bbs
        msgareas.bbs
        fileareas.bbs
        term.bbs
        [sched.bbs]

    USERDIR
        user.bbs        Actually, this will be created by Falcon)

    (Note: .?bs means either .bbs and/or .gbs)
    TEXTDIR
        welcome1.bbs    Intro file, shown before name prompt
        welcome2.?bs    First file shown after password prompt
        [bulletin*.?bs] Shown after welcome2.bbs.  may be numbered, starting
                        with 1, in unbroken ascending order--Falcon stops
                        looking after it doesn't find one.
        newuser.bbs     Shown to new users when they sign up
        quotes.bbs      Quote file
        [editorial.?bs] file for E)ditorial command)
        [yell.?bs]      Shown if yell not available (if file not present, 
                        prg says "Yell is turned off right now.")
        [msgarealist.?bs]   Shown in lieu of msg A)rea list
        [filearealist.?bs]  Shown in lieu of file A)rea list
        warning.?bs     File shown before asking for area passwords
        [logoff.?bs]    Shown at logoff (bbs/gbs)

    HELPDIR
        changehelp.bbs  These are not normal text files.  See the section
        edithelp.bbs    on help files for more information.
        filehelp.bbs
        mainhelp.bbs
        msghelp.bbs
        useredithelp.bbs
        sysophelp.bbs
        subophelp.bbs
        librarianhelp.bbs

        lorehelp.bbs    These are normal text files.
        keyhelp.bbs
        longhelp.bbs


    KEYDIR
        [falcon.key]    Only registered users will have/need this



2.  Running the Program
=======================

Normally, to run falcon, you'd do just that: "run falcon".  However, there
are some command line options:

    -t ........ Tiny mode toggle.  Useful if you have Falcon configured to 
                start up in tiny mode
    -l ........ Interlace toggle.  Not all that useful, really.
    -f ........ Go straight to FTerm
    -b <baud>.. Spawn at this baud rate
    -h ........ Hang up in spawned session, instead of letting calling 
                program do it.
    -? ........ Help (a list of options similar to this one)

Otherwise, if the argument is not an option, it will be used as the filename
for falcon.cfg instead of the one used by default, ie.:

    "run falcon CONFIG:falcon.cfg"

When Falcon exits, normally the DOS errorlevel will be set to 0.  However,
if messages have been entered in an echo or matrix area, appropriate error-
levels will be returned, and an error will return yet another number.  See
the documentation for Falcon.cfg for more information on errorlevels.

On top of the DOS errorlevels, Falcon returns codes in an environment 
variable, which we'll call "fret" for convenience (since that's the default 
name for it).  This will be set to "error" if the program couldn't run 
successfully for some reason.  Otherwise, it could be set to "exit" when the 
program exits on request, an event name if it exits due to one, or "return" 
if it was spawned.

Falcon does not need a special stack size.  It does not use much.  However,
to be safe, I call the stack-checking routine whenever the user switches BBS 
menus.  This will catch any overflows, since Manx looks at the lower bound 
of the stack to see if a special value it puts there at run-time has been 
overwritten.



3.  Waiting for a call
======================

When the system has finished initializing the modem, it will start waiting for
the phone to ring.  At this point, there will also be a prompt, which will
accept commands to go to the T)erm, to Q)uit, to C)onnect locally, or to 
Connect as the S)ysop (which pre-enters the sysop's name).  There is also an
invisible R)ing command, which will make the program think the phone has rung,
and therefore it will pick up the phone.  It could be useful.  There are
equivalent menu items for all commands except R)ing.  

(Note that if the Online Menu's "Sysop Next" item was selected during the last 
call, the prompt will be skipped and the session will be started as if the 
S)ysop Connect key was hit.)

While waiting, events will also be checked.  If it happens that the current
time is within the bounds of an event, the program will exit with the name of
that event in the usual return environment variable.  Note that this 
scheduling is simplistic and can cause problems with repeated events if 
Falcon starts up again before the event ends.  Make sure events take at least
as long as their duration.

If the phone has rung, then the program will send a code to the modem 
indicating that it should answer.  It will then wait for 30 seconds.  If an
appropriate connect message is received, the session will begin.  Should the 
program receive another ring code while waiting for a connect, it will assume 
that maybe the connect or no-carrier code for the last ring got munged and 
simply try to pick the phone up again.  If no connect is made or broken during
the 30 seconds, the program will hang up and resume waiting for a call.  
Typing A)bort will do the same thing.



4.  Logging In
==============

Once a user has connected to the system with a sufficient baud rate (if
applicable) and gone through the Escape-Escape sequence (if applicable),
they will be greeted with a brief tag noting that they are connecting to
a Falcon CBCS, which was written by Brian Fehdrau.  Then the first welcome
file will be sent, and they will end up in the name prompt.

To enter a name, they simply enter the first name and the last name at the 
appropriate prompts.  These can be stacked and entered as the entire name
all at once (ie. instead of "Brian<return>Fehdrau<return>", I would enter 
"Brian Fehdrau<return>" at the first name prompt.  Then Falcon will display
the name and ask if it is correct.  To avoid this, they can simply append the
confirmation to the stacked name ("Brian Fehdrau y").

(I am aware that this method of asking for the name causes problems with
certain names, such as the "Somebody van der Whoever" variety.  I suggest 
using periods, like "Somebody van.der.Whoever".  I think I'm going to have to 
change this.)

Then Falcon asks for the user's password, which they get three chances to get
right before being booted.  Simple enough.  Note that the prompt only shows
periods where the letters should be, in order to keep people from reading 
passwords over other peoples' shoulders.  This is one reason not to add the
password to the stack mentioned above, as entering it there leaves it visible.

Once the correct password has been entered, Falcon does a little user 
housekeeping, such as zeroing limits if it's a new day, and the like.  At this
point the time limit for this call is determined, based on time remaining
for this day, absolute call limits, and scheduled events.  Then it displays 
the second welcome file and any bulletins, and drops the user into the Main 
Menu.

New Users
---------
A new user logs on simply by entering their name.  Since it will not be in the 
user file, the program will obviously assume they are new.

If the program is configured to accept new users, it will prompt the user to
enter the name of their city.  It is at this point that they are advised that
they can hit enter to return to the name prompt, which is useful for people
who have entered their name incorrectly.  Otherwise they enter their city's
name.  Then they are prompted for a password, and then prompted to enter it
again to be sure it was correct.  After that they answer a few prompts 
regarding IBM characters, ANSI and the like.

The user's name is checked.  If it's the sysop logging on for the first time,
which is done by entering the name specified for the sysop in the 
configuration, then the user will be given SYSOP level.  On the other hand,
if they try to sign on as "Sysop" or "All", the program will assume they are 
a jerk and turf 'em.  On the other ...foot?... they may be advised about
the Change Menu's capitalization-changer if their name is the sort that
is not supposed to be capitalized normally (presently only Mc and Mac names).

The new user is dropped into the first unused record or appended to the end
of the user file if their are no empty slots.  They will have the new user
level and limits which were specified in the configuration file, novice-level 
help, and any area/write keys they were supposed to get automatically.

If the sysop has configured the program to keep an application file, a few
more questions will be asked of the user.  The data will not be used by
the program, but it might be useful to the sysop.  Each entry in the file
will include the user's name and city, as entered already, along with their
address, phone number, age, and computer type.



5.  General BBS Information
===========================

Once you're into the BBS itself, some of this information may be of use
to you...

"More [Y,n?]" Prompts
---------------------
If you have "More [Y,n?]" prompts turned on in the Change Menu, and the 
amount of text sent out since the last prompt or screen-clear would fill up 
your screen (based on the Screen Length field in the Change Menu), you will 
get a More prompt.  This prompt is simply to prevent text from scrolling off 
your screen before you have read it.

Once you're in one of these prompts, your actions are obvious.  You can type
'N' (or ^C) to break the current text, which will happen in exactly the same
way as typing ^C normally would.  Hitting 'Y' (or any other key, for that
matter) erases the prompt and resumes text output.

Note that the way the prompt is erased is based on your display as 
configured in the Change Menu.  If you have told the Change Menu something 
about your display that is not true, this is one place where it may show up. 
If the prompt is not erased, you should checked your settings.

If you're interested, the erasing is done by first dropping back to the 
start of the line, which is done with a carriage return if you have 
linefeeds turned on, otherwise with a number of backspaces.  If you have 
ANSI on, the clear-to-end-of-line code is sent and that's that.  Otherwise, 
the program sends out enough spaces to clear out the prompt, and drops back 
to the start of the line again in the same way it did before.

Local Menus
-----------
While online, you can use several menu (Amiga, not BBS) items.  Here they 
are, listed by their keyboard shortcuts:

    O   Sysop on next           Does a sysop logon immediately after
                                current user hangs up.
    L   Inactive logoff toggle  Decides whether inactivity is a reason to
                                log someone off.
    T   Transfer toggle         If transfers are off due to insufficient 
                                baud rates, this can allow them anyway.
    U   User yelling toggle     If Y)ell has not been scheduled for this
                                time period, this can allow it.
    R   Remote input toggle     Decides whether or not the remote user can
                                enter text.  Good for mouthy jerks.
    Y   Yell at user            Obvious.  Chat with the user.
    B   Boot user               Also obvious.  They're outta here.

These menus should work everywhere, including during normal text output and
doors.

Line Editing and Command History
--------------------------------
When typing at a prompt (be it a menu or in a line-edited message), you have 
some extended commands to edit the line.  You may not be able to see 
everything you're doing if you have a destructive backspace.  If you do, you 
should set Destructive BSp to YES in the Change Menu, or the BBS will send 
out a lot of unnecessary text when you're editing the middle of a line.  If 
your backspace is non-destructive, set Destr.BS to NO and you should be able 
to see the entire line, no matter which part of it the cursor is on.  Just 
remember that you are editing the entire line and that when you hit return, 
the entire line will be entered, no matter where your cursor is on it.

If you are entering a password, all features of the prompt will still be 
available, but all output will be replaced with periods so that someone 
watching over your shoulder will not be able to see your passwords.

Note:  Prompts have length limits.  If you insert into the middle of a full 
line, you will lose a character at the end of the line.

Here are the commands you can use (NOTE: "^X" would mean Control-X):

    Simple  VT100    Local    Function
    ------- -------- -------- --------
    ^S      Left     Left     Move left one character on the line
    ^D      Right    Right    Move right one character on the line
    ^A      Sh-Left  Sh-Left  Move left one word on the line
    ^F      Sh-Right Sh-Right Move right one word on the line
    ^Q      Home     Home     Move to start of line
    ^I    = Tab,End  Tab,End  Move to end of line
    ^W      Up       Up       Retrieves previous line  (remembers the last 5
    ^Z      Down     Down     Retrieves next line       lines > 1 char long)
    ^H    = BackSp.  BackSp.  Delete character behind cursor
    (127) = Del      Del      Delete character under cursor
    ^Y                        Erase to end of line
    ^X,^C                     Erase entire line

    ^[^[    Esc-Esc  Esc-Esc  For line editor, exit to Edit Menu
    ^W      Up       Up       For line editor, move up one line in message
    ^Z      Down     Down     For line editor, move down one line in message
    ^H    = BackSp.  BackSp.  For line editor, delete character behind the
                              cursor, or, if at start of line and line is 
                              not first line, move to previous line and make 
                              it wrap.  Delete line if blank.

                     F1       User level +1
                     Sh-F1    User level -1
                     F2       User time +10 minutes
                     Sh-F2    User time -10 minutes
                     F6       Toggle inactive logoffs 
                     F7       Toggle transfer availability for this session
                     F8       Toggle Y)ell availability for this session
                     F9       Toggle remote text lockout
                     F10      Validate user (if level<NORMAL, level=NORMAL)
                     Sh-F10   Boot user
                     Help     Function key command list

Otherwise, the prompt accepts ASCII characters in the ranges of 32..126 and 
160..254 as regular text.

Other (Non-Prompt) Key Commands
-------------------------------
These commands are available during text output:

    Basic Key VT100  Local    Function
    --------- ------ -------- --------
    ^C                        Break text output, wipe out type-ahead buffer
                              In some cases this may not be permitted
    ^S                        Pause text output
    ^Q (^C)                   Unpause text output (or break)
    ^Z                        Wipe out type-ahead

Otherwise characters are stored in a type-ahead buffer for later usage.

Command Stacking
----------------
It is possible to string several to-be-executed-consecutively commands
together at the same prompt.  A quick example would be a common way of
logging off:

    [4] Highest: 9
    Msg.area 10 ... What I hate about Barry Manilow

    Select: a1gyn

...which would, without any large amounts of unnecessary text being spewed
out (that normally would if the commands were to be typed one at a time),
change the user's current area to 1, start the goodbye/logoff sequence,
reply "yes" to the "Do you really want to log off?" prompt, and reply "no"
to the "Leave a private message to the sysop?" prompt, thus saving the user
about 10 lines of extra text being sent.

Stacking should work at any prompt, except the line-based message entry 
prompt, and the stack will be automatically cleared if an erroneous command
is encountered, thus avoiding any subsequent errors.

The types of commands that can be placed on the stack are as follow:

    Type            Example                 Terminator
    --------------- ----------------------- --------------------------
    White-Space     " ", "," or ";"         non-White-Space
    Single Letter   "a", "A", "?"           auto-terminates
    Word            "password"              White-Space
    Sentence        "A message Subject..."  "|" (must be used and also
                                                 terminated as a Word)
    Number          "-123"                  non-numeric character
    Stack           "Blah Blah | more blah" bottom of stack

The bottom of the stack terminates anything, of course.

A "-" is a Single Letter only if not followed by a numeric character.

One sort-of-exception to these rules is the initial first/last name prompt.  
A user with only one name (such as "Sysop") can insert a carriage return for 
the second name (if blank, none, non-existent, etc) by using a pipeline 
("|") for the second name, despite the names being fetched as words.  Also, 
some systems, such as Fido v12 which uses three names and not two, 
necessitate the pipeline at the end of the name(s) (ie. "Joe User | y 
password" for the same reason as "Sysop" would in Falcon.  I've kludged the 
"Joe User, right? [Y,n]" prompt so that it will just keep grabbing Single 
Letters until it sees a non-pipeline, and thus a Fido key-macro will work on 
Falcon as well.  As it happens, Fido no longer does this, but I figure this 
point ought to be explained and I don't feel like re-wording it.

A good overall example of these is the basic message entry process, starting 
from the main menu and an unspecified message area for fun.  We'd want to go 
to the Message Menu (single letter), the area menu (single letter), pick an 
area (number), pick the enter command (single letter), answer the "Private? 
[y,N,a]" prompt (single letter), enter a "To:" name (sentence), and a 
"Subject:" (stack):

      MAIN MENU
      Select: ma10eyJoe Sysop | What have you got against Barry Manilow?

Voila.  You should be in the editor.  Get the idea?  Good.

Yelling with the Sysop
----------------------
If you are chatting, either through the Y)ell command at the Main menu, or 
through an impromptu yell-at-the-user, and you have ANSI color on, you'll 
notice that the color changes depending on who is typing.  Text the sysop 
enters comes up yellow, and text the user enters comes up cyan.  This is to 
help make clear who typed what.

You can exit a chat session by typing "/e" by itself on a blank line.



6.  BBS Menus
=============

Falcon has eight built-in menus:  the Main Menu, the Message Menu, the File 
Menu, the Change Menu, the User Edit Menu, the Edit Menu, the Subop Menu, 
the Librarian Menu, and the Sysop Menu.

There should always be two levels of help available to the user.  Entering 
"?" should show the help that a NOVICE user sees at every prompt.  Entering 
"??" should show a more verbose list of commands, with a line of information
about each one.  Wherever the help comes from, though, including anything
displayed automatically at the prompt, only the commands available to the
online user's level are displayed.

Another command which should always be available is the "_" command.  This 
is useful in long stacks (especially the automatic login stacks), because it
stops and asks the user to hit return before continuing.  For instance, a 
login stack of "FLM* Q_MAF" would list all new files in marked areas, wait 
for a return, and then move to the message area (which usually clears the 
screen) and start reading the new messages.


Main Menu
---------
B)ulletin       Redisplays the login bulletin.
C)hange Menu    Simply moves to the Change Menu.
E)ditorial      Display an editorial.  This is normally some moralistic 
                trash the sysop actually believes in.  I'm beginning to
                think I should take out this command.  :-)
F)ile Menu      Simply moves to the File Menu.  J also works, because I kept 
                typing the Message Menu's J)ump To File Menu command at the 
                Main Menu.
G)oodbye        Starts the logoff sequence.
I)System Info   Display some system information, including the number of 
                calls to date, the previous caller to the system, the date 
                the system was "born", and the number of messages entered to 
                date.
M)essage Menu   Simply moves to the Message Menu.
Q)uote          Displays a quote from the quote file, just like during the 
                login sequence.
S)tatus         Display some user information, including time on line, time 
                left, time online today, time left today, time online to 
                date, kilobytes downloaded, kilobytes uploaded, efficiency 
                of last transfer, number of calls to date, number of 
                messages entered to date, matrix mail credit, and the last 
                call.  Also shows the current time and date.
U)ser List      Either display the entire user list or search it for a 
                string.  Shows full name, city, and last call.
V)ersion        Displays the version of the program, my name, and 
                copyrights.  Also displays brief information about 
                registration if the program is (still!) unregistered.
Y)ell           Yell for Sysop to come and chat.  This may not be possible, 
                depending on whether or not the Sysop has scheduled Yell 
                availability for this time of the day.  Users with SYSOP 
                level can Yell either way, if they want to.  If it is 
                possible, the screen will beep once a second for ten seconds 
                and either the Sysop will answer or they won't and a message 
                to try again later will be displayed.
!)Sysop Menu    Simply moves to the Sysop Menu.


Message Menu
------------
About reading:  A SYSOP-level user can read any message.  Users with lower
levels can read any message except private messages not to or from them.

About updating/re-editing:  A SYSOP-level user can update any message.  
Users with lower levels can update any message they wrote.

About hurling/forwarding/killing:  A SYSOP-level user can do these to any
message.  An ASSIST-level user can do this to any message they can read.  
Users with lower levels can do this to any message to or from them.

About writing:  A SYSOP-level user can write in any area.  Users with lower
levels can not write if do not have the write key to writelocked area or if 
the area is a read-only area.


Reading a Message
~~~~~~~~~~~~~~~~~
First, if neither Zoom not Continuous modes are on, the screen will be 
cleared (or the equivalent for users with screen clears turned off).
Otherwise a few blank lines will be output.   

Next, the header will be displayed.  It will be in the following format,
where descriptions in square braces indicate something that will be present 
only if applicable:

            Sender
               | [Sender's
               |  Address]              [Netmail cost]
               |      | Addressee             |  [Flags (see below)]
               |      |     |    [Destination |          |
               |      |     |      address]   |          |
               |      |     |         |       |   .------'------.
    From:    Barry M. |     |         |     $1.23 Pvt Rec'd Crash
    Orig:    (see below)    |         |
    To:      Brian Fehdrau -'         |     #34/56 [4] Fri  9 Aug 91 16:08
    Dest:    (see below) -------------'      |   |  |  `--------.--------'
    Subject: Re: Barry Manilow is a fink     |   |  |           |
                        |                    |   |  |           |
                        |                    |   |  |   Date & time sent
                      Topic                  |   | Times read
                                             | Highest message
                                      Message number


Addresses may look like one of the following:

    Nodes:  1:140/22
            1:140/22@FidoNet
            Benden Weyr (1:140/22@FidoNet) Saskatoon SK

            The latter is only if the Sysop has a traplist.library-format
            nodelist in which Falcon can look up node information.

    Points: 1:140/22.2
            1:140/22.2@FidoNet
            1:140/22.2@FidoNet, a point of Benden Weyr (1:140/22@FidoNet)
                                                            ...Saskatoon SK

            The latter is only if the Sysop has a traplist.library-format
            nodelist in which Falcon can look up node information.

    External (non-FidoNet technologies):
            zeebie.uucp
            zeebie.uucp via <a fidonet address, as above>

Flags:

    Flag    Means
    ------- ------------------------------------------------------------
    Pvt     The message is private between sender, addressee, and Sysop
    Crash   CrashMail is NetMail which goes out immediately and directly
    Rec'd   The addressee has read the message
    Sent    Usually means matrix mail has been processed, may have other
            meanings for some echo/matrix mail processors.
    File    The Subject field contains the name of a file to be sent with
            the matrix message.  Called "File-attach".
    InTrans This message is between its sending node and its destination
    Orphan  This message is InTrans but couldn't go anywhere from here
    Kill    This message is to be deleted after it is Sent
    Local   Shows if a matrix or echo message was entered on this system,
            actually on for ANY message entered on this system
    *       This flag ("*") should not be on.  It is an unused flag.
    Freq    This matrix message contains a file request, I think.
            I've never used file requests.
    RcptReq An automatic receipt reply message is supposed to be sent 
            back to the sender when this matrix message gets to its 
            destination (often not supported)
    Rcpt    This matrix message IS a receipt reply to a RcptReq message
    AudReq  This matrix message should cause an audit reply message from
            each system it goes through, ideally meant to test routing
            (often not supported)
    Aud     This matrix message IS an audit reply to a AudReq message

After the header is done, the message body will be displayed.  If it was 
entered as it was supposed to be, using line-wrapping, paragraphs should be 
formatted for the user's screen width.  Text will be scrolled as it has been 
configured to in the Change Menu's "Scroll Type" command.

There are four kinds of message lines:

  - Hidden control lines which start with ^A (called Kludge lines).  These 
    can be shown if the Change Menu's "Show Kludge Lines" is set to YES--
    they will show up in green if the user has ANSI color turned on.
  - Hidden echo SEEN-BY: lines.  These can be shown if the Change menu's
    "Show SEEN-BY Lines" is set to YES--they will show up in green if the 
    user has ANSI color turned on.
  - Quoted lines: those with a ">" character in the first six characters of 
    the line which are not preceded by a "<" character (which allows for 
    "<grin>").  These may be highlighted in white if the Change Menu's 
    "Highlight Quote" is set to YES and the user has ANSI color turned on.
  - Normal text, which will be shown as cyan if the user has ANSI color 
    turned on.

  - A pseudo-fifth kind of line is a blank line, one which has absolutely
    nothing on it.  Lines like this will actually be displayed as a single 
    space, which is all but invisible when reading, but handy for capturing 
    and re-uploading to a line editor.

Then, if message is reply, it will say at the bottom, in white:

    "*** Reply to #<original>."

If the message has a reply, it will say at the bottom (on the same line as 
the Reply line, if it is there), in white:

    "*** See also #<reply>."


The Prompt
~~~~~~~~~~
The message area prompt is a little different from the others.  When you 
first enter the menu or a new area, it will show the following:

  - The number of messages in this area and the highest one.
  - If the number of messages is 0,
        "NO messages"
    Else if the user's last-read pointer is 0,
        "You haven't read any of these messages"
    Else if the user's last-read pointer points to the highest message,
        "NO NEW messages have been posted"
    Else if the user's last-read pointer is greater than the highest msg,
        "POSSIBLE ERROR: Your lastread pointer was higher than n."
    Else if the user's last-read pointer is between 0 and the highest msg,
        "The last message you read was N."
  - Then the prompt:
        [<current msg #>] Highest: <highest msg #> <notice>
        (ECHO|MATRIX|Msg.) area <area #> ... <description>

    Where <notice> may say "Press enter for <direction> msg" if any more 
    messages are available in the current direction (<direction> is either 
    "NEXT" or "PRIOR").

  - In Zoom Read mode it will skip all of the above when it goes to the next 
    area, saying "ZOOMing to <area description>" and starting up a 
    continuous read for this area.  Once the read is done, it will ask the 
    user if they want to enter a message in this area.  If they say yes, 
    they are allowed to do so, then asked again, and so on, until they say 
    no.  When they say no, the program looks for the next area.


Finally, to the command list:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<msg>)Go To Msg If <msg> is in range, this will move to that message number 
                and read it or the next available message from there (in the 
                current direction).
<cr>)Read Next  Hitting carriage return reads the next message in the 
                current direction, which defaults to forward and can be set 
                with the P)revious and N)ext commands.  If the direction is 
                forward and there are no messages left and change menu's 
                Auto-Next-Area is set to YES, the program will skip to the 
                next marked area with new messages, like typing "/" (or 
                "AN"), or reset the area to 1 if none are left.
A)rea           Lists all available areas and asks which, if any, to switch 
                to.  Normally, this will not show areas you cannot access, 
                but if the sysop has supplied a special text file for this 
                list, it may contain inaccessible areas.

                Hitting <cr> returns the user to the current area.

                There are a few commands that can be entered as well as an 
                area number:

                    M - Next marked area
                    N - Next marked area with new messages (see "/", below)
                    C - Next marked area with new messages, checking current
                        area first
                    F - First marked area with new messages
                    ? - Describes above four commands

                If the Change Menu's "Verbose Scan" is set to YES, the above 
                commands show each area's number as it is being checked.

                If the program runs out of areas for the above commands, it 
                sets the user's area back to 1 and says so (and waits for 
                the user to hit return if they have screen clears on, so 
                that they won't miss the no-more-areas notice).
B)ody Search    Works like hitting return to read the next message, but 
                skips over all messages that do not contain a given string 
                in the header or the message text.
C)urrent Msg    This reads the current message, if it exists.  Good for 
                times when a burst of line noise mangles a message and you 
                want to read it again without typing in its number.
E)nter a Msg    Obvious enough.  See "About writing", above.
F)orward Msg    Forwards a message to someone else.  What is done is the 
                message is copied into a new message From: <you> and To: All 
                with a note about the original sender/receiver/date.  The 
                message can then be U)pdated if necessary.
G)oodbye        Starts the logoff sequence.
H)url Message   "Hurls" a message into another area.  Useful for putting an 
                inappropriately-placed message in the proper area.
I)nquire/Index  Looks for a string in message headers, starting with 
                highest, going downwards to the lowest, and showing all 
                message headers that contain that string.
J)ump to File   "Jumps" over the Main Menu to the File Menu.  Use this 
                instead of the usual "MF".
K)ill Message   Deletes a message and re-links any reply/see-also chains it 
                may have been involved in.  See above, under "About hurling/
                forwarding/killing".
L)ist Messages  Lists messages from a starting point upwards, in the 
                following format:  "<#> <date> <flags> From: <from> To: 
                <to>", where <flags> contains two characters, the first '-' 
                if the message is public and 'P' if it is private, and the 
                second '-' if the message has not yet been received and 'R' 
                if it has been.
LV)List Verbose Just like L)ist Messages, except it adds another line to 
                each entry which contains the Subject.
M)ain Menu      Simply moves to the Main Menu.  You can also Q)uit to the 
                Main Menu.
N)ext Message   This reads the next message, if there is one, and sets the 
                current reading direction to forwards.  This command, unlike 
                P)revious, may have the same side effects as hitting 
                <return> while in forward mode.  See the section on hitting 
                <return>.
P)revious Msg   This reads the previous message, if there is one, and sets 
                the current reading direction to reverse.
R)eply to a Msg Replies to the current message, if it exists.  The 
                appropriate strings will be copied into the new message's 
                header, although they may be replaced at need.  It should be 
                pointed out that, unlike some programs, it is okay to reply 
                to a message you haven't just read.  If the message your 
                pointer points to is accessible, you can reply to it and the 
                right information will be put into the prompt defaults.
S)tatus         Display some user information, including time on line, time 
                left, time online today, time left today, time online to 
                date, kilobytes downloaded, kilobytes uploaded, efficiency 
                of last transfer, number of calls to date, number of 
                messages entered to date, matrix mail credit, and the last 
                call.  Also shows the current time and date.
U)pdate Message Loads an already-saved message back into the message editor 
                for re-editing.  Note that, because of problems with 
                preserving control line information, it is not permitted to 
                U)pdate echo or matrix messages.  See above, under "About 
                updating".
X)press Search  Works like hitting return to read the next message, but 
                skips over all messages that do not contain a given string 
                in the header.
Z)oom Read      This is much the same as =)Continuous Read but does so in 
                all marked areas with new messages, and prompts the user to 
                see if they want to enter a message after each area has 
                finished.  See above, under "The Prompt" for more 
                information.
.)(Un)Mark Area Toggle the mark on the current area.  Used for A)rea 
                commands.
/)Same as "AN"  Skips to the next marked area with new messages, just like 
                typing "AN", except a little less text is output and it's 
                only one character to type.
!)Subop Menu    Simply moves to the Subop Menu.
+)Move to Reply Moves to the message number in the "*** See also #x." part 
                of the current message, if applicable.
-)Move to Orig. Moves to the message number in the "*** Reply to #x." part 
                of the current message, if applicable.
=)Cont. Read    Turns on continuous mode, which reads all messages from the 
                next on to the end of available messages in current 
                direction, without prompts or screen clears between 
                individual messages.  It can be stopped by typing ^C.  The 
                user is asked if they want to leave ANSI (and if so, ANSI 
                color) and "More [Y,n]" prompts on during the read.


File Menu
---------
About New Files:  A file is considered "new" if its date is later than that
of the last call the user made during which they did a file listing.  Note 
that that refers to a listing of *any* area and not just the one in 
question.  Because listing any area sets the "last call with a listing" date 
for subsequent calls, it is suggested that you look for all new files with 
the L)ocate command, either "LM*" for marked areas or "LG*" for all areas.  
Otherwise, if you list one area and then get logged off, your "last listing" 
date will be set and you will have a harder time finding the new files in 
the areas you did not list.  A login stack starting with "FLM* Q_" or 
"FLG* Q_" would be a good idea.  See the Change Menu's X)ecute command for 
more information on login stacks.
                
<cr>)New Files  The first time <return> is hit (with nothing else on the 
                line), the program lists new files as if the "N)ew Files"
                command had been executed.  If the files have already been 
                listed in this area and the Change Menu's "Auto-Next-Area" 
                is set to YES, it will execute the "/)Next Marked Area With
                New Files command".  This can be used in a manner similar to 
                hitting return to find all new messages in the Message Menu.
A)rea           Lists all available areas and asks which, if any, to switch 
                to.  Normally, this will not show areas you cannot access, 
                but if the sysop has supplied a special text file for this 
                list, it may contain inaccessible areas.

                Hitting <cr> returns the user to the current area.

                There are a few commands that can be entered as well as an 
                area number:

                    M - Next marked area
                    N - Next marked area with new files (see "/", below)
                    C - Next marked area with new files, checking current
                        area first
                    F - First marked area with new files
                    ? - Describes above four commands

                If the Change Menu's "Verbose Scan" is set to YES, the above 
                commands show each area's number as it is being checked.

                If the program runs out of areas for the above commands, it 
                sets the user's area back to 1 and says so.
C)ontents       Either views the contents of an archive it recognizes, or 
                tells the user what the file may be (if it knows).  
                Otherwise it will say it doesn't know what the file is.
D)ownload File  Used to transfer a file from the BBS, if file transfer 
                protocols have been set up by the sysop.  First the user 
                selects the protocol, and then they will be asked for one or 
                more filenames.  If the protocol allows for it, all files 
                requested may be sent in a batch, but otherwise only the 
                first will be sent.  Use "|" as a filename to indicate the 
                end of the file list so that other commands can be stacked 
                for after the transfer, ie. "DZ FalconXXX-1.LZH 
                FalconXXX-2.LZH FalconXXX-3.LZH | GYN" to download all of 
                the Falcon files and then automatically log off.  If any 
                files are not present, the user is prompted to enter the 
                list again (Remember the line history! One can use ^W to 
                bring up the last line for re-editing.).  

                The total file size and time required is then shown.  If 
                this copy of Falcon is unregistered and the files total more 
                than 50K, the transfer will be aborted with a notice about 
                the 50K limit.  If there is not sufficient time to complete 
                the transfer (in the BBS's estimation), the user will be 
                warned that they should abort, but allowed to continue if 
                they want because the estimate may be off or they may be 
                able to resume the download during the next call if the 
                protocol allows for it.
F)ile Listing   Shows all files, or new files if the user enters "F*", or 
                searches for a string if the user enters "F<string>".  You 
                must use whitespace to stack commands after a F)ile Listing, 
                ie. "F <more commands>" or "F.wrp <more commands>".

                The file listing will consist of individual files which may 
                be accompanied by comment lines.  The file entries are in 
                this format:

                    <name>       <size> <date>* <description>

                The size and date are derived from the actual file and not 
                from the list, so they may say "MISSING" and "??-???-??" if 
                the file can not be found (some Sysops use this feature to 
                store very large files offline which can then be 
                requested).  The (blinking) asterisk after the date, if 
                present, indicates a new file.
G)oodbye        Starts the logoff sequence.
H)url File      "Hurls" a file, along with its description (if it has one) 
                into another area.  Useful for putting an inappropriately-
                placed file in the proper area.

                Technical note:  This tries to simply rename the file from 
                one directory to another, but if that is impossible 
                (normally because the two directories are on different 
                devices or partitions), the user is given the option to 
                physically copy it over and delete the original.  This will 
                show progress, in percent, at most once a second.
I)mport File    Used to put file(s) into the F)ile Listing.  Asks for file 
                name(s), and then when done it asks for a description of 
                each file imported.  This is mostly used for local 
                "uploading".
J)ump to Msgs   "Jumps" over the Main Menu to the Message Menu.  Use this 
                instead of the usual "MM".
K)ill File      Deletes a file and takes it out of F)ile Listing if it is in 
                it.
L)ocate Files   This acts much like using the F)ile Listing to search for a 
                string, but looks in all areas (a G)lobal search) or all 
                marked areas (a M)arked search) for either a given string or 
                "*" for new files.  As is mentioned above, using LM* or LG* 
                is a very good way to quickly find all new files.
M)ain Menu      Simply moves to the Main Menu.  You can also Q)uit to the 
                Main Menu.
N)ew Files      Shows new files in this area, just like typing "F*", but 
                shorter.
R)Zmodem Upload Because Zmodem always starts a send (upload) by sending the
                string "RZ<return>", this command was added to automatically
                start receiving should someone start a Zmodem upload without
                entering "UZ" first.  Note that there must be a Z)modem
                protocol available.  See U)pload for more information.  The 
                only difference is that this command does not bother with 
                the space/time-available information, as the other end 
                should not be able to see it if it is already sending.
S)tatus         Display some user information, including time on line, time 
                left, time online today, time left today, time online to 
                date, kilobytes downloaded, kilobytes uploaded, efficiency 
                of last transfer, number of calls to date, number of 
                messages entered to date, matrix mail credit, and the last 
                call.  Also shows the current time and date.
T)ype File      Types a file.  This leaves things like "More [Y,n]" prompts 
                on, and that is how it differs from an ASCII transfer.
U)pload File    Used to transfer a file to the BBS, if file transfer 
                protocols have been set up by the sysop.  First the user 
                selects the protocol, and then they may be asked for a 
                filename, but only if the protocol does not send it 
                automatically.  Then it will warn the user about time and 
                space available.  If this copy of Falcon is unregistered, it 
                will warn the user about the 50k transfer limit.  Then it 
                starts waiting for the transfer to start.

                A file whose upload was aborted for some reason (ie. 
                insufficient time) may be resumed if the user is the one who 
                started it (or is a SYSOP-level user) and the protocol 
                allows for it.  Simply start an upload with the same name.  
                As a side effect, a protocol that does not resume can be 
                used to replace a file in the same fashion.

                After the upload, the program asks for the description(s) of 
                file(s) uploaded.  If the user has disconnected, files are 
                given blank descriptions.
Z)ippy Listing  This does a zippy (meaning "quick" - okay, so I was running 
                out of good letters) AmigaDOS "List"-command-style listing 
                of the directory which contains the current area's files.  
                This may show files which are not in the F)ile Listing, such 
                as the "files.bbs" file the F)ile Listing is derived from.  
                Unless the user is of SYSOP level, this will only show files.
.)(Un)Mark Area Toggle the mark on the current area.  Used for A)rea 
                commands and L)ocate M)arked commands.
!)Libr. Menu    Simply moves to the Librarian Menu.
/)Same as "AN"  Skips to the next marked area which has new files.  This is 
                just like typing "AN", except a little less text is output 
                and it's only one character to type.


Change Menu
-----------
This menu always shows the status of all available options.  This is the
format at the time of writing:

   U)ser Name.......<name>
   C)ity............<city>

   H)elp Level......<n/r/e>   S)creen Clears...<y/n>  T)ab Expansion...<y/n>
   E)ditor Type.....<l/s>     ANSI G)raphics...<y/n>  LineF)eeds.......<y/n>
   Screen W)idth....<width>   R)emove Color....<y/n>  N)ulls...........<num>
   Screen L)ength...<length>  I)BM.Characters..<y/n>  See Seen-B)y's...<y/n>
   M)ore Prompts....<y/n>     >)Highlite quote.<y/n>  See K)ludges.....<y/n>
   +)Auto-Next-Area.<y/n>     D)estructive BSp.<y/n>  V)erbose Scan....<y/n>
   Msg Z)Scrolling..<s/p/w>   X)ecute At Login.<stack>

   Marked A)reas:
   Message:  <area list>
   File:     <area list>

A)rea Marks     Toggle marks on file or message areas.  Enter M or F to 
                select which type (defaults to M), or a number to toggle an 
                area.  Hit return or enter Q to quit back to the Change Menu.
B)SEEN-BY Lines SEEN-BY: lines usually follow the Origin: line of an echo 
                message.  Since they aren't the least bit interesting, 
                they're normally detected and hidden.  They can be shown if 
                this option is toggled to YES.
C)ity           Obvious.  Change the city the user lives in.
D)estr. BackSp. If, when your terminal displays a Backspace (ASCII 8) 
                character, it erases the character under the cursor's new 
                position, you have a destructive backspace.  If there is no 
                effect other than moving the cursor, you have a non-
                destructive backspace.  Falcon will give you a brief test to 
                see which you have.  Making sure this is set correctly is 
                important because it is used in prompt editing and in 
                erasing "More [Y,n?]" prompts.
E)ditor Type    Toggle between the the LINE-oriented editor (called LORE) 
                and the SCREEN-oriented editor (called FRED, after Falcon's 
                Rapid EDitor).  If you have a large enough display (60x10 or 
                more), are calling at 1200 baud or more, and you are running 
                with a terminal that supports ANSI (with Insert/Delete Line/
                Character codes), you should set this to SCREEN.
F)Linefeeds     Toggle linefeeds on or off.  Do NOT turn this off if you 
                need them!  Everything will suddenly be displayed on one 
                line if you do.  Local console users must be especially 
                careful because the local screen always gets linefeeds and 
                the effects may not be seen until they log in from remote.  
                If you happen to get that effect without realizing how you 
                did it, then this is the toggle for you.
G)ANSI Graphics Toggle ANSI positioning and color codes on and off.  If you 
                have them on and you see a lot of things like "[0;36m", then 
                your terminal does not support ANSI and you should turn it 
                off here.  See also R)emove Color.
H)elp Level     Sets the help level.  There are three levels, and they give 
                the following format to most menus:

                    NOVICE:
                        <menu name> MENU: Type "??" by itself for help
                        <brief help, as when "?" is typed>
                        Select:

                    REGULAR:
                        <menu name> MENU: <command letters available>
                        Select:

                    EXPERT:
                        <menu name> MENU:
                        Select:

                Variations exist in the Message, File, and User Edit menus.  
                It is suggested to users on floppy-based systems that they 
                not use NOVICE, as the brief help is read from a text file 
                every time.  Letter help is also read from the same help 
                file, but it is cached at run-time to avoid noticeable 
                pauses for such a small amount of text.
I)BM Characters Toggle whether or not Falcon sends out IBM (ASCII 128-255) 
                characters on purpose.  Off the top of my head, I can only 
                think of the dividing lines in the screen editor, which are 
                either dashes or horizontal IBM graphic bars, depending on 
                this setting.  Note that they are not actually filtered out 
                if they come up in unexpected places.  Maybe later.
K)ludge Lines   Kludge lines are message lines, usually in echoes or netmail 
                areas, which contain control information and are usually 
                hidden because the line starts with Control-A (called an 
                IFNA Kludge, for reasons I don't care to explain).  They can 
                be shown if this option is toggled to YES.
L)Screen Length Change screen length, in the range of 2-100.  There will be 
                a test if the length is not stacked (ie. "L25").
M)"More? [Y,n]" Toggle "More? [y,n]" prompts at the end of each page of text.
N)ulls          Determine the number of "filler nulls", or ASCII 0 
                characters, to be sent out after each carriage return.  I 
                think it's meant for systems with small receive buffers and 
                slow scrolling.  Note that this has never actually been 
                implemented in the BBS, but it's there for doors.  I suspect 
                nobody actually needs them anymore, but we'll see if anyone
                complains.
P)assword       This changes the user's password.  It first asks for the old 
                password, to be sure nobody has walked in while the real 
                user was, say, answering the call of nature.  Then it asks 
                for a new one and asks again to confirm that it got it right.
Q)uit to Main   Simply moves to the Main Menu.  Hitting <return> also does 
                this.
R)emove Color   Toggle suppression of color when ANSI is on.  If your term 
                supports ANSI, but you don't want the colorful display, you 
                can use this to turn it off.  This is also useful if your 
                terminal is monochrome anyway, as it cuts down on the amount 
                of escape codes transmitted.  You still get the advantage of 
                screen positioning codes and the full-screen editor if you
                use it.
S)creen Clears  If this is set to YES, the screen will be cleared in various 
                places, such as the beginning of each message, or the entry 
                to the message menu, or the change menu, etc.  If it is set 
                to NO, a blank line will be sent instead of a screen clear. 
                This does not affect the screen editor, of course.
T)ab Expansion  Toggles whether or not Tab characters are expanded to 
                spaces.  This is not actually used in Falcon itself, but it 
                is available for doors to use.
U)ser Name      Obvious enough.  Allows the user to change their name.  
                Normally this will not be available to the average user.  
                Note that it is not permissible to change the name to 
                "Sysop" or "All".
V)erbose Scan   If this is toggled to YES, using the special area-scanning 
                commands will display the area numbers as they are scanned.  
                Most useful, I imagine, for floppy systems.  On a hard drive 
                the pause is negligible.
W)Screen Width  Change the screen width, in the range of 16-160 columns.
X)ecute @ Login Change the command stack to be executed automatically at 
                login.  Use " " to clear it.  There is a maximum of 25 
                characters.  I personally recommend "FLM* Q_MAF", which 
                locates and displays all new files in all marked areas, 
                stops and waits for the user to hit return, then finds the 
                first marked message area with new messages.  This of course
                assumes that the user has marked their favourite areas.  
                Note that the starting place is (obviously) the Main Menu.
Z)Scroll Mode   This affects the way a message scrolls.  This does not 
                affect Zoom or Continuous read modes.

                    S ... Normal scrolling.
                    P ... Display one page at a time under the message 
                          header.  This requires ANSI and More prompts.
                    W ... Scrolls a window of text under the message 
                          header.  This requires ANSI with Delete-Line 
                          codes.
+)Auto-Next     If this is set to YES, and all available material has been 
                seen in the current area, hitting return will either skip to 
                the next marked area with new material or return to area 1.  
                Applies to both file and message areas.
>)Quote H.Light Toggles highlighting of quote lines in messages. Meaning, if 
                ANSI color is on, will turn ">"-style quotes white while the 
                the main text is cyan.
^)Capitalizing  Presently this only toggles Mcname or Macname with McName or 
                MacName.  However, I'm going to have to change that sooner 
                or later because there are other oddly-capitalized names out 
                there.


Edit Menu
---------
Note that this menu is somewhat different, as it is accessed from the line-
based message editor.  See the section on that editor for more information.

If you are logged off while in this menu, your message will be saved with a 
note at the bottom saying that it was done automatically due to a 
disconnection.

C)ontinue       Continue message where you last left off (or set the 
                cursor).  This may drop you into the middle of the message 
                if you have put the cursor there.
N)ew Message    This simply reinitializes the message buffer (to a blank 
                message).  Good if you give up on your current text but 
                still want to say something.
A)bort Message  Obvious.  Exit the message editor without saving the 
                message.  There will be a y/n prompt to see if this was done 
                on purpose.  Note that there is an invisible Q)uit Message 
                command that does the same thing.
F)Change Flags  Use this to toggle the following message flags (if 
                applicable): Pvt, Crash, Kill (after sending), File 
                (as in file-attach).
T)o             Change the "To:" field of the message.  If "Sysop" is 
                entered, it may be redirected to a real name if the sysop 
                has set up the program to do so.
J)Subject       Change the Subject: field of the message.
D)Delete Line   Delete one line of the message.  Note that this deletes one 
                physical editor line, and not any lines which is may wrap 
                to.
W)rap toggle    Toggle whether or not a certain line wraps around to the 
                next.  Meaning whether the next line continues the paragraph 
                that this line was part of.
I)nsert At      Select the new position to insert text at - note that it is 
                perfectly fine to pick a place in the middle of the 
                message.  There will be a  notice about which line to pick 
                for the end of the message, which will normally be the 
                highest line + 1.
E)dit Line      Perform a search & replace function on one line.  Note that 
                the search string is not case-sensitive.
L)ist Message   List message, including header - except for line numbers, 
                this will look very similar to what a user would see when 
                they read the message.
S)ave Message   Clear enough.  Save the message and exit the editor.
H)elp           Transmits an extended help file with information on for 
                using the line editor itself.


Subop Menu
----------
A)ll Keys/Marks Give out or take away all area keys, write keys, or marks.
C)ode/Tag       Change the area's mail code/tag, ie. "AMY_POINT".
D)irectory      Change the area's regular directory/path.  If the path for 
                the area does not exist, there is an option to create it.  
                Use "." for the current directory, since hitting return 
                aborts.
F)Toggle Flag   Toggle one of the area flags:  INVISIBLE, LOCKED, READONLY, 
                PRIVATEONLY, PUBLICONLY, WRITELOCKED, AUTOKEY, or 
                AUTOWRITEKEY.
I)nformation    Display information about current area:  name, code, 
                directory, level, password, type, flags.
R)eload Stats   Rereads the area's directory to determine the number of 
                messages and the highest message.  This can be used if the 
                cached statistics appear to be wrong.
K)Toggle Key    Toggle one user's area key.
L)evel          Change the area's minimum entry level, ie. PRIVIL.
M)Toggle Mark   Toggle one user's area mark.
N)ame           Change the area's verbose name, ie. "General Messages".
P)assword       Change the area's password.  Use "-" to turn it off, since 
                hitting return aborts.
Q)uit           Moves/quits to the Message Menu.  Also saves message area 
                configuration file if necessary.
T)Area type     Change the area's type:  NORMAL, ECHO, or MATRIX.
V)iew Users     List users:  A)ll users, users I)n the area, users O)ut of 
                the area, users who can W)rite, M)ute users, and users 
                S)earched for.
W)Toggle Write  Toggle one user's write key.
#)Renumber      Renumber the area's messages.  When it asks for the "first", 
                it means the lowest message that could be deleted - note 
                that all messages below the first must exist.  This is used 
                mainly to preserve echo highwater messages (1.msg) by 
                starting with message 2 (note - it will still adjust reply 
                links for messages below this, as it should).  When it asks 
                how many should be left, it wants to know the number of 
                messages that can remain at or above the first after 
                renumber is done.  Use a very large number to just renumber 
                and not reduce (ie. # 1 5000).  Note that is is perfectly 
                fine to ask for zero messages to be at or above the starting 
                point.


Librarian Menu
--------------
A)ll Keys/Marks Give out or take away all area keys or marks.
C)ode/Tag       Change the area's mail code, ie. "GENERAL".
D)irectory      Change the area's regular directory/path.  If the path for 
                the area does not exist, there is an option to create it.  
                Use "." for the current directory, since hitting return 
                aborts.
F)Toggle Flag   Toggle one of the area flags:  INVISIBLE, LOCKED, READONLY, 
                or AUTOKEY.
I)nformation    Display information about current area:  name, code, 
                directory, upload directory, level, password, type, flags.
K)Toggle Key    Toggle one user's area key.
L)evel          Change the area's minimum entry level, ie. PRIVIL.
M)Toggle Mark   Toggle one user's area mark.
N)ame           Change the area's verbose name, ie. "General Files".
P)assword       Change the area's password.  Use "-" to turn it off, since 
                hitting return aborts.
Q)uit           Moves/quits to the File Menu.  Also saves file area 
                configuration file if necessary.
T)Area Type     Change the area's type:  NORMAL, or MATRIX.
U)pload Dir.    Change the area's upload directory/path.  If the path for 
                the upload area does not exist, there is an option to create 
                it.  Use "." for the current directory, since hitting return 
                aborts.
V)iew Users     List users:  A)ll users, users I)n the area, users O)ut of 
                the area, and users S)earched for.


Sysop Menu
----------
A)dd Area       Use this to create a new message or file area, to be 
                customized with the Subop or Librarian menus, respectively.
                If the path for the area does not exist, there is an option 
                to create it.  Use "." for the current directory, since 
                merely hitting return aborts.
D)irectory      Displays a DOS "List" command-style list of files in a given 
                directory.
E)UserEdit Menu Simply moves to the User Edit Menu.
F)ile Areas     Displays all file areas, in this format:  "<area> <type> 
                <level> <Lock,PW,Inv. flags> <description>".
K)ill Log       If the Sysop has a LOGFILE, it can be deleted with this.
L)System Log    If the Sysop has a LOGFILE, it can be displayed with this.
M)essage Areas  Displays all message areas, in this format:  "<area> <type> 
                <level> <Lock,PW,Inv. flags> <description>".
Q)uit           Moves/Quits to the Sysop Menu.  Also saves message area 
                and/or file area configuration files if necessary.
S)wap Areas     Allows one to exchange two message or two file areas.  This 
                is used for rearranging areas.  Use this instead of editing 
                the area files because it also swaps all area information, 
                user pointers, keys, etc.  It is permissible to swap a real 
                area for an empty one, except that area 1 must be a real 
                area.
T)ype File      Display a given file.  Only sysop can type *.msg, user.bbs, 
                user.bak.


User Edit Menu
--------------
The prompt for this menu also shows the currently selected user (or 
"<none>").

A)dd User       Creates a blank user in the user.bbs file.  They are given 
                the default new user level, or NORMAL if the system is 
                configured not to take new users.  This new user should next 
                be edited with other commands to personalize it.
C)ity           Simply changes the City for the currently selected user.
D)elete User    Deletes the current user (if it's not the user doing the 
                editing), but prompts first to be sure it was intended.  
                Note that this sets the record to "unused" (designated by a 
                blank name) for later use.  It does not actually shorted the 
                user log.
E)dit User      Select a user to edit.  Gives option to save current user, 
                if necessary.  When selecting, it is possible to search for 
                a user name (or number).  Use "*" to search through all 
                names.  When searching, the user will be prompted about 
                whether this is the user they want or not, and to see if 
                they want to abort this search.  Use "?" to list all names 
                without prompts.
H)Toggle Hidden Hides (or unhides) selected user from users lower than SYSOP
                in various user lists.
I)User Info     Shows the following user stats:  name, number, status of 
                "hidden" flag, city, password (if in local mode and user 
                looking is of SYSOP level), last time on, level, netmail 
                credit, time on & time limits, downloads & download limits, 
                calls, messages entered, and the various keys they have 
                (message, message write, file, subop, librarian).
K)Toggle A Key  Toggles any key (message, message write, file, subop, 
                librarian).  Note that only a SYSOP-level user can grant 
                subop and/or librarian keys.
L)User Level    Set the currently selected user's level.  A level higher 
                than the giver's cannot be granted.  Note that this 
                modifies time/transfer limits if necessary.

                User levels are as follow:  TWIT, DISGRACE, NORMAL, PRIVIL, 
                ASSIST, and SYSOP, in ascending order.  TWIT is normally
                punishment.  DISGRACE is normally used for new users 
                awaiting verification.  NORMAL should be what the general 
                rabble have.  PRIVIL is for preferred users.  ASSIST is
                obviously for assistants.  And, of course, SYSOP is the 
                biggie and needs no explanation.
N)ame           Simply changes the Name the currently selected user.
P)assword       Change the currently selected user's password.  This is only 
                available to SYSOP-level users at the local console.
Q)uit           Moves/quits to the Sysop Menu.  Also gives option to save 
                user or abort the exit if a user is currently selected.
T)ime/Transfer  Set time and/or transfer limits.  If there is no user 
                selected, this affects all users of given level.  Asks for 
                time per day, time per call, download per day, download per 
                call, and whether or not to clear the user's accumulated 
                downloads.
V)alidate User  "Validate" the currently selected user.  If their level is 
                less than NORMAL, it is set to NORMAL and the time/transfer 
                limits are adjusted.
$)Net Credit    Set netmail credit in cents.  (Yes, folks, I know not all of 
                you use dollars and cents.  Sorry.  Maybe it'll be 
                configurable later.)



7.  Entering and Editing a Message
==================================

Starting a message
------------------
Starting a message is a matter of either E)ntering one or R)eplying to one
in the Message Menu (also, you could leave a logoff message to the sysop).
The very first thing that may be asked, assuming the message is a reply, is 
whether or not you want to quote the message into the message buffer.  If you
do, it will be quoted in the (de facto) standard " initials> some quoted 
text" style, with a header line that says, "In a message dated <datestamp>, 
<sender> wrote:").  If you do this, please make sure you delete all the text 
you do not want, or else you'll be wasting disk space and the reader's time.

The next thing you will be asked, unless you are a user with a level lower
than sysop in a public-only or private-only area, is whether or not you want
the message you are about to enter to be private.  A private message cannot
be read by normal users.  Only the sender, the recipient, and users with
a user level of SYSOP can read it.

Next, if this is a netmail message and your level is SYSOP, you will be asked
if you want to send the message as CrashMail.  The reason this is restricted
to SYSOP is because CrashMail goes out immediately after the call, and
DIRECTLY to the destination without routing.  In other words, we can't have
Joe Jerk sending a "HI! I'M JOE, WHO ARE YOU?" message to Tokyo (or 
Saskatoon, if you happen to be reading this in Tokyo).  Note that the actual 
sending of CrashMail is up to the mail tosser and mailer.  Falcon just flags 
it as being such mail.

Next, if this is a netmail message, you will be asked if you want this 
message to be killed after it is sent.  If you cannot figure out what this 
results in, you are a stupid festering hunk of goo and do not deserve to 
send netmail.

Again, if this is a netmail message, you will then be asked to enter a 
destination address.  If this is a reply, the default address will be the
sender's address in the message you replied to, and if not it will be the
address of the system you are on.  See "Entering a FidoNet Address", below,
for more information on doing so.

Next, a simple "To:" prompt.  This is, obviously, the name of the person
you want to send this message to.  If the message is a reply, the original
sender's name will be the default.  If you're sending a private message, 
this name will be checked against the user list, and if it's not in there, 
you will be warned that there is nobody by that name to receive it, and 
asked if you want to try again.  You can use "?" for a name if you want to 
look through the user list to, say, find the proper spelling of a name (you 
can search for a string or list all users by hitting return).  Note that if 
you send to "Sysop", your message will probably be re-directed to the 
sysop's real name.  

Next, if this is a netmail message, you will be asked if you want this 
message to have a file or files attached to it.  The file(s) will then be 
named in what is normally the Subject line.  See your mail tosser 
documentation to be sure that it supports this, and to see what the syntax 
is supposed to be for the Subject line, because I've never used this and do 
not know anything about it except that Falcon sets the File-Attach bit.

Finally the Subject: prompt, which is obvious enough.  If this is a reply, 
the default for this prompt is the subject of the original message, with a 
"Re: " prepended if one is not already there.  Just for your information, 
"Re" is apparently an originally-Latin word ("res") which means "Concerning" 
or "In the matter of" (or "Regarding" if you need a "re" word in order to 
remember).  It doesn't stand for "Reply".

Note that the Subject: prompt will say "File(s):" instead if this is a file-
attach message.


Entering a FidoNet address
--------------------------
The simplest thing to do is to hit return, which will enter the default
address.  This may be the desired address if, for instance, the address
being prompted for is the destination for a reply.

The syntax rules for entering an address are as follows:

    1) Entering a number preceded by a "." changes the point
    2) Entering a number preceded by a ":" changes the net

    3) Entering a number followed by a ":" changes the zone
    4) Entering a number followed by a "/" changes the net
    5) Entering a number followed by a "." changes the node

    6) Entering a number followed by nothing and preceded by nothing or 
       a '/' changes the node, and sets the point to 0

Several rules may apply in a string, ie. "123/45" uses the fourth and sixth 
rules, in that order.  Since it's not necessarily clear from the rules what
to do, here are some useful forms which show that the rules really just
describe the format you'd probably want to use anyway:

    node                  to send to a node in your net, implies .0
    net/node              to send to a net/node in your zone, implies .0
    zone:net/node         to send to zone:net/node, implies .0

    .point                to sent to a point off of your node or your boss
    node.point            to send to point in your net
    net/node.point        to send to a net/node.point in your zone
    zone:net/node.point   to send to zone:net/node.point

    zone:                 to set the current zone without exiting the prompt
    net/                  to set the current net without exiting the prompt
    node.                 to set the current node without exiting the prompt

Obviously "zone", "net", "node", and "point" would be replaced by numbers.

Other stuff you can enter at the address prompt, if the program has access 
to a nodelist:

    Z or : by itself      gives a listing of zones (quite slow)
    N or / by itself      gives a listing of nets in current zone (slow)
    O or # by itself      gives a listing of nodes in current net
    P by itself           gives a listing of points off of current node

Once an address has been entered, it will be checked for existence.  If 
there is a nodelist, only SYSOP-level users will be allowed to send to non-
listed destinations (with a warning).  If there is no nodelist, the user 
will be warned that the destination may not exist.

If a message is not local, its cost will be obtained from the address' 
listing in the nodelist, or from the default cost set up in the 
configuration if there is no nodelist.  Users with insufficient credit will 
not be allowed to send to that node.


Saving a Message
----------------
First, the program opens the disk file and writes out the header.  Then it
writes out any applicable control lines.  The comes the actual message
body.  Finally, for echo messages, tear/origin lines (if not already 
present) and blank SEEN-BY and PATH lines if the program has been configured 
to do so.

Then, if the message is a new reply, Falcon tries to link it onto the end of 
the reply chain, noting any other replies as it does so.

Finally, it subtracts netmail credit if this is a netmail message and the 
user has a level lower than SYSOP.

If Falcon can't save the message, it returns to the editor, telling the user 
to either abort or wait and try again later.  The exception to this is if 
the message is being saved due to a disconnection, of course.


The Editors Themselves
======================

LORE ("Line ORiented Editor")
-----------------------------
This is for people who either have an insufficient display size or an 
insufficient/non-existent ANSI driver in their terminal program.  It's
an amalgamation of the best parts of every line editor I've ever used,
spliced together as well as possible.

Text entry in the line editor can be as simple as the average line editor:
enter text continuously, hit return only at the end of paragraphs, and use 
backspace to erase & correct errors.  Words will automatically be wrapped 
to the next line if the line nears your screen's width, so you need not hit 
return anywhere except the ends of paragraphs.  (If you hit return at the
end of each line, the message may not be formatted correctly for someone
with a different screen width from yours.)

However, this editor also allows full usage of Falcon's fairly versatile
prompt-editing commands.  Please refer to the Line Editing and Command
History section for more information on general line editing features.
The notable differences between the prompt and the line editor which are 
described there but which bear repeating here are as follows:  using the 
up/down commands normally used to move through the line history will 
instead move through the message, and using the backspace command at the 
start of a non-first line will delete the current line if it is empty, 
then move to the previous line and make it wrap (think of it as deleting 
the carriage return if there is one).

When you are finished entering text, or you want to do something like
listing the message, you can either hit return on a blank line, or use
ESC-ESC if that would be inconvenient (ie. editing the middle of a 
paragraph).  That will take you to the Edit Menu (where you should be right
now), which has its own documentation and therefore won't be discussed here.
However, I will note that using I)nsert Text to move the cursor to a 
certain line may put you on the line before it if that line wraps.  It
makes sense if you think about it.

Use "<space><return>" if you want to enter an actual blank line into your 
message.

About entering text in the middle of the message:  If you have moved the
cursor into the middle of your message, remember that you are _inserting_
the text, not overwriting.  So you can add a paragraph to the middle of
a message or text to the middle of a paragraph.

Finally, you might note that the line number is followed by either a ":" or
a ">".  If it's followed by a ">", this is the start of a new paragraph
(ie. you hit return on the last line), and if it's a ":", then this is a
continuation of the previous line.  Simple, huh?

Note that if you are logged off for some reason, the message will be saved
with a note to that effect at the bottom.


FRED ("Falcon's Rapid EDitor")
------------------------------
(To avoid redundancy, only the important or local-user-relevant information 
will be highlighted here.  Please refer to the online help by typing "^Kh" 
for more comprehensive documentation.  Obviously, the sysop can just type 
the help/longhelp.bbs file.)

Suggestion:  As is noted elsewhere, the cut/paste buffer is a temporary file 
in "T:".  Putting "T:" on a RAM disk or on a reasonably fast hard drive is a 
good idea.

A local user can click in various bits of the screen.  If the click is
between the two dividing lines around the main text, the cursor will simply
be moved as close to the click as possible.  If the cursor is already there,
the mark will be set at that position.  If the click is on one of the 
dividing lines, the result will be a page-up or -down, with the exception
that clicking on the INSERT/OVSTRK indicator on the bottom line will toggle
it instead of paging down.  Finally, clicking on the header edits it.

Also available to the local user are the usual online menus (meaning Amiga
menus, not BBS menus), plus two new ones that are normally ghosted.  Here 
they are, listed by their menu shortcuts:

    Fred
    ----
    S   Save                Simply saves the message.
    A   Abort               Abort the message, but only after a
                            confirmation prompt
    N   New (clear)         Erase message and start again, but only after
                            a confirmation prompt

    Fred-Edit
    ---------
    M   Set Mark            Set the mark to the current cursor position
    X   Cut                 Cut the marked area of text out of the
                            message into the cut/paste buffer
    C   Copy                Cut the marked area of text into the 
                            cut/paste buffer
    V   Paste               Insert the contents of the cut/paste buffer
                            into the message at the cursor position
    F   Import File         Load a textfile into the cut/paste buffer for
                            pasting into the message.  Local mode only.
    K   Kill Line           Cut the line under the cursor out of the 
                            message and put it in the cut/paste buffer.
    E   Kill to EOL         Cut the line under and to the right of the 
                            cursor out of the message and put it in the 
                            cut/paste buffer.
    I   Toggle Insert       Toggle insert/overstrike mode.


Requirements:

FRED will only work for a user with a screen of minimum dimensions 60x10.
Further, they must be calling at no less than 1200 baud, and they must have
ANSI turned on.  It should also be pointed out that their ANSI emulation
must be sufficient.  Terminals which work so far are:  Any Amiga term which 
uses the console.device for screen output (95% of them do), and Telix for 
MS-DOS.  Amiga's JRComm lower than v1.01 does NOT work, but v1.01+ 
apparently does in IBM ANSI mode.  MS-DOS's ProComm does not seem to emulate 
the codes, though I've only tried testing it with echo-back from the modem.  
I'm told the MacIntosh terminal ZTerm works.  Anything else is a big 
question mark, and should be tried out.  Refer to "ANSI Used in Output", 
elsewhere in this document, for more information.  Please report any 
findings so they can be included in this list.  



8.  The Goodbye (Logoff) Sequence
=================================

This first asks the user if they are sure they want to log off.  This avoids
accidental logoffs.  If they say no, they are returned to the Main Menu (note
that it is ALWAYS the Main Menu, no matter which menu they were in when they
tried logging off).

If they are sure they want to log off, and if there is a logoff message area, 
they will be asked if they wish to leave a private message to the sysop.
If they say yes, they will be dropped into their selected editor to leave 
such a message.  Whether they save or abort, they will then be logged off
when they exit the editor.

When they are logged off, they may see a logoff text file if one has been
created by the sysop, and then a brief message saying something to the effect
of "Disconnecting <name> on <datestamp>."  Then it will either hang up or
perhaps return to a program which ran the BBS and let that program hang up.



9.  XPR (eXternal PRotocol) File Transfers
==========================================

The XPR transfer display shows the following information, if applicable:

   .----------------------------------------------------------------------.
   | Transfer type:  <protocol name, ie. "Zmodem">                        |
   |                                                                      |
   | Last message:   <last message, ie. "Sending File">                   |
   | Last error:     <last error, ie. "CRC error">                        |
   |                                                                      |
   | File name:      <file name>                                          |
   | File size:      <size in bytes>                                      |
   |                                                                      |
   | Est. xfer time: <protocol's estimate>   Errors:        <# errors>    |
   | Elapsed time:   <varies>                Timeouts:      <# timeouts>  |
   |                                                                      |
   | Block size:     <size in bytes>         Packet type:   <descr.>      |
   | Blocks sent:    <number of blocks>      Packet delay:  <not sure>    |
   | Bytes sent:     <amount transferred>    Char. delay:   <not sure>    |
   | Bytes/sec:      <protocol's estimate>   Checksum type: <ie. CRC-16>  |
   `----------------------------------------------------------------------'

Note that this display loses some information, like the filename, if the 
screen is toggled because I am only allowed to display strings when I am 
told to by the protocol.  The numbers are generally updated quite often, so 
they will be refreshed.  Note that if you really want to see the filename 
after it's been erased by toggling the screen, the Status window will 
contain a copy of it in the Where: slot.  I can remedy this loss of 
information by allocating some memory to hold the information I was last 
told about, but is it really that important?

The CPS rate may be off for file sends.  This is because output is buffered
to avoid pauses while data is read from the disk, and the XPR library does
not know that.  The final CPS rate may be near correct, but the rate Falcon
calculates after the transfer is more accurate, especially since it counts
from the first time the two sides shake hands, instead of the time this
side starts looking for the other side.  Some people like to be thorough in
their estimates, but I like to know how fast the transfer was going *only when
it was actually going*.

The transfer may be aborted by typing Escape, ^C, or ^X.  Typing '.' toggles
the screen mode, because there isn't a menu for it.  If there was and you 
typed the Right-Amiga-'.' menu shortcut, you'd end up with a regular '.' 
anyway, thus this command.  Similarly, if the transfer is taking place in the
BBS, entering '/' or '?' will toggle the status window.

The transfer will also be aborted on loss of carrier, and also by a time-up
if it is taking place in the BBS.

Note that if you have configured the program to turn off the third plane during
transfers, to retrieve the DMA time a 3+ bitplane hires screen steals, the
window will come up in yellow on red instead of white on blue, because the
latter two colors are not available in the now-four-color screen.  No big deal,
but I thought I'd mention it.

If a file is being received in the BBS, it will have the user's name put
into the filenote of the file, starting at the fortieth column (which makes
it line up neatly for the DOS List command).  This is used for continuing
or replacing files.  If a user uploads to a file that already exists, their
name is checked against the one on the file.  If it matches (or, for that 
matter, if they are of SYSOP-level), they are allowed to continue the upload
or replace the file, depending on whether or not the protocol is configured
to resume a receive.
    


10.  FTerm
==========

To save the bother of exiting the BBS and loading up a terminal program, 
Falcon comes with a small terminal program that can lean on the main 
program's code to save space.  It also has a timeout option, which means if
you walk away from the terminal and forget about it, the BBS will be brought
back up automatically after a while.  It saves wear and tear on your users.

Anyway, first, FTerm will load up term.bbs, and exit back to the BBS with an 
error string if something was wrong.

Otherwise, if there is no carrier present, it'll display a little header with
its name, version, copyrights, and the like, then send the term.bbs INIT
string to the modem and drop into the terminal mode.  If there IS a carrier, 
it'll just drop straight into the terminal mode without any of the intro/init
business (note that the baud rate will be set to the maximum, which may or
may not be correct for the current connection).

There's nothing really special about the terminal itself.  About all it does
is filter out shift-in/shift-out characters, because these can put you into
a weird mode where all characters have 128 added to them before they are
displayed.  Messy.

The term menus:

    Menu   Item   Shortcut  Action
    -----------------------------------------------------------------------
    Term
        Re-Load Config  L   Re-reads term.bbs, reinits if no carrier
        Phone dir       F   Enters "F"one directory, if possible
        Redial          R   Either continue dialing or enter phone dir
        View Buffer     V   Enter review buffer
        Save Buffer     B   Save entire review buffer to disk
        Hang up         H   Send term.bbs HANGUP string
        Modem re-init   M   Send term.bbs INIT string
        Screen Toggle   .   Flip between WorkBench window and full screen
        About FTerm         Shows a submenu with brief information on FTerm

    Config
        Baud                Select baud rate from submenu:
            110         1       Change to 110 baud
            300         2       Change to 300 baud
            1200        3       Change to 1200 baud
            2400        4       Change to 2400 baud
            4800        5       Change to 4800 baud
            9600        6       Change to 9600 baud
            12000       7       Change to 12000 baud
            14400       8       Change to 14400 baud
            19200       9       Change to 19200 baud
            38400       0       Change to 38400 baud
        Word Length         Select word length from submenu (not implemented):
            8                   Change to world length 8
            9                   Change to world length 9
        Parity              Select parity from submenu (not implemented):
            None                Change to no parity checking
            Even                Change to Even parity
            Odd                 Change to Odd parity
            Mark                Change to Mark parity
        Stop bits           Select stop bits from submenu (not implemented):
            1                   Change to 1 stop bit
            2                   Change to 2 stop bits
        Misc                Miscellaneous settings
            Incoming... I       Do or don't convert incoming CR's to CR/LF's
            Outgoing... O       Do or don't convert outgoing CR's to CR/LF's
            Local Echo  E       Do or don't echo outgoing chars to the screen
        Protocol            Select an XPR protocol if there are any
            None                (means there aren't any)
            <protocol> <?>      Change current protocol to <protocol>

    Transfer
        Toggle Send     S   Start or stop an ASCII send
        Toggle Capture  C   Start or stop capturing text to disk
        Upload          U   Upload file with the current protocol
        Download        D   Download file(s) with the current protocol


Special Keys
------------
The cursor keys, keypad, and function keys can all send configurable strings.
See term.bbs documentation.

The Help starts review buffer.  Since it also exits the review buffer, one
could think of it as a toggle, really.


Transfers
---------
The ASCII send just sends the data in a file straight to the modem, with
the pauses set up in term.bbs, and possibly CR->CR/LF translation depending
on whether or not it's been turned on.

The ASCII capture writes incoming data to a file.  Note that it captures ALL 
characters, including ANSI sequences.

Downloading may ask for both a directory and a filename, or just a directory.
This is based on whether or not the program has been told that the current 
protocol will be told the filenames by the sender.

Uploading will ask for both a directory and a filename.  Sorry, I haven't
gotten around to batch sends.

Both downloading and uploading will finish by showing the total transfer time,
the return code from the protocol (which may not be a reliable indicator of
the transfer's success, by the way), and a chars/sec rating for the entire
transfer.  Note that this CPS rate will be more accurate for uploads, because
the output buffering the program does often confuses the library.


In Case of Problems with Display Positioning
--------------------------------------------
As it happens, bringing up the review buffer or the dialing directory also 
resets the positioning of the display.  You see, certain ANSI codes can move 
the location (in pixels) of the upper left corner of the character display.  
If your text seems out-of-place, try doing something to clear the screen (to 
make sure the code that caused it isn't displayed again when the display is 
refreshed), then enter and exit the review buffer or the dial directory.


The Review Buffer
-----------------
The review buffer is used to look back through text that may have scrolled off
of the screen.  It holds the last N bytes (where N is the number from 
falcon.cfg's REVBUFSIZE command) of text displayed to the screen, including
both the text displayed in the term AND any text displayed while in the BBS,
since the review buffer doubles as a sort of memory of what's been on the
screen even when the program is in tiny mode.

The review buffer will take your screen size and font into account, and put
as many lines of review text into your screen as it can, except for the
top and bottom lines, which are used for a title bar and a gadget bar.
This review text will have the color stripped out, which allows for much,
much faster scrolling when moving about.  It does, however, understand 
the ANSI cursor-movement codes, and backspaces, and the like, so everything
should come out in the right place... just in monochrome.  Actually, I
should note that it can't work with move-to-row,col commands, so full-screen
editing sessions tend to end up all on one line, which is just as well.

The gadget bar contains seven gadgets:
    DONE    Exits review buffer
    TOP     Moves to earliest part of buffer
    END     Moves to most recent part of buffer
    PGUP    Moves back one page in buffer
    PGDN    Moves forward one page in buffer
    /\      Moves back one line in buffer
    \/      Moves forward one page in buffer

There are also key commands:
    Up      Moves back one line in buffer
    Down    Moves forward one line in buffer
    PgUp    Moves back one page in buffer (also Shift-Up)
    PgDn    Moves forward one page in buffer (also Shift-down)
    Home    Moves to earliest part of buffer
    End     Moves to most recent part of buffer
    .       Toggles screen mode, because there isn't a menu for it.  If
            there was and you typed the Right-Amiga-'.' menu shortcut, 
            you'd end up with a regular '.' anyway, thus this command.

    Left, Right, Help, Space, Q, Escape, Return all exit the Review Buffer

On exit, the text that was on the screen before will be refreshed to the best
of the buffer's ability, for you to continue your session.


File Requester
--------------
I'm not using any special file requester at the moment.  It's just two
prompts.  This is because I've foolishly been expecting Commodore to release
2.0 for the last year and a half, at which point I would use the built-in
requester.  (Note:  CBM finally announced that 2.0 will be released next
month (October), so I've removed the very nasty remark that used to be in
this spot.)

At any rate, it simply asks for a directory, with a path already filled in
based on the defaults set in term.bbs.  Use ^X to kill it and enter another.
Then it may ask for a filename, which should be easy enough for a genius like
you to figure out without instructions.


Dial Directory
--------------
First, it should be noted that one cannot bring up the dialer if there is
a carrier present, or if there are no entries in the directory.

The dial directory will take your screen size and font into account, and put
as many directory entries into your screen as it can, except for the top and 
bottom lines, which are used for a title bar and a gadget bar.

Each entry in the directory will contain the name of a BBS (or person, or
whatever), the number, the baud rate, and a comment.  The entry which is
inverted is the entry the cursor is currently on, although in some cases it
may not be inverted (see below).  An entry with a purple background is
selected.

The gadget bar contains four gadgets, along with the entries:
    OKAY    Start dialing the currently-selected entries, in order
    CANCEL  Return to term without dialing
    /\      Scroll window back one line, if possible
    \/      Scroll window forward one line, if possible

    <entry> Each entry can be toggled by clicking on it.  Note that this
            moves the cursor to that entry and makes it (the cursor)
            invisible.

There are also key commands:
    Up, Left
            Move cursor back one entry if possible, and make it visible
            if it isn't.  Scrolls window if necessary.
    Down,Right
            Move cursor forward one entry if possible, and make it visible
            if it isn't.  Scrolls window if necessary.
    Home, Shift-Up, Shift-Left
            Move cursor to top entry in window, and make it visible if it
            isn't.
    End, Shift-Down, Shift-Right
            Move cursor to top entry in window, and make it visible if it
            isn't.
    Q, Esc  Return to term without dialing
    Return  Start dialing the currently-selected entries, in order
    Space   Selects/deselect entry under cursor, and make it (the cursor)
            visible if it isn't.
    .       Toggles screen mode, because there isn't a menu for it.  If
            there was and you typed the Right-Amiga-'.' menu shortcut, 
            you'd end up with a regular '.' anyway, thus this command.


Dialer
------
The dialer will dial all selected entries, starting with the ones nearest the
top of the directory, going down, and starting again at the top when it hits
the end.  If there are no entries selected (due to deletions or none to begin
with), it will return to the directory.

The display takes up the top 8 lines of the display, top and bottom being the
title and gadget bars.  The ones between show the current name and number, 
number of attempts, the time left for the current attempt or pause between
attempts, and the last string received from the modem.

To dial, the program sends the term.bbs DIAL string to the modem, the phone
number, and the falcon.cfg ENDOFLINE string.  It then waits for DIALTIME
seconds.  If it receives a CONNECT_* string, it will return to the term
with the baud rate after deselecting the current entry.  It may also connect
at the current baud rate if it receives no string but sees a carrier.
If it doesn't connect within the time limit, it sends the STOPDIAL string
and waits BETWEENTIME seconds before starting again with the next entry.

Note that if someone attempts to phone you between attempts, the term may
detect it, and if set to in term.bbs, will exit and let it continue to
ring so that you can answer it.

The gadget bar contains four gadgets:
    OKAY    Connect without waiting.  Meaning, return to the term at the
            current entry's baud rate after deselecting the current entry.
    CANCEL  Hang up, stop dialing, and return to the directory.
    SKIP    Hang up and skip to the next selected entry.
    DELETE  Hang up, deselect the current entry, and skip to the next 
            selected entry.

There are also key commands:
    Tab, Space
            Hang up and skip to the next selected entry.
    C       Connect without waiting.  Meaning, return to the term at the
            current entry's baud rate after deselecting the current entry.
    Esc, Q  Hang up, stop dialing, and return to the directory.
    Del, Backspace
            Hang up, deselect the current entry, and skip to the next 
            selected entry.
    .       Toggles screen mode, because there isn't a menu for it.  If
            there was and you typed the Right-Amiga-'.' menu shortcut, 
            you'd end up with a regular '.' anyway, thus this command.



11.  Configuration Files
========================

Falcon's config files all follow the same basic syntax:

    word        is a non-quoted whitespace-terminated series of chars
                ie. 'Main' in the menus.bbs command 'MENU Main'
    num         is a word that only contains digits, possibly preceded
                by a '-', ie. the arguments in 'DEF_DAY_TIME 1 2 3 4 5 -1'
    str         is a quote terminated series of chars
                ie. '"ATZ\r"' in the Falcon.cfg command 'RESET "ATZ\r"'

                if a str can fit into a word, it is permissible to omit
                the quotation marks, ie. 'ADDRESS 1:140/22.2@FidoNet'
                instead of 'ADDRESS "1:140/22.2@FidoNet"'

Whitespace is one or more of the following: tab, space, or carriage return.

Commands are generally words.  Arguments may be any combination of words
and strings.

Strings have special escape chars that are interpreted when they are read
into memory:

    \n      newline (linefeed, ASCII 10, ^J)
    \r      carriage return (ASCII 13, ^M)
    \t      tab (ASCII 9, ^I)
    \b      backspace (ASCII 8, ^H)
    \f      formfeed/screen-clear (ASCII 12, ^L)
    \e      escape (ASCII 27, ^[)
    \nnn    ASCII character with octal value nnn        (may be \n or \nn)
    \xnn    ASCII character with hex value nn           (may be \xn)
    \innn   ASCII character with integer value nnn      (may be \in or \inn)
    \<c>    character <c> (used for backslash, for instance: "\\" -> "\")

    ^<c>    Control character, <c> in "A..Z[\]^_", such as ^C, ^[, or ^^.
            Use "\^" for an actual caret character.

And for modem strings only:

    \w      pause for ~1/3 sec
    \d      drop DTR for the time given in falcon.cfg's DTR_DOWNTIME

            NOTE: Dropping DTR may not work on some multi-serial cards.
            It will if the modem has DTR ignored or forced on.  Also, it will
            not work if another program still has the serial device open, 
            because the only way to drop DTR is to completely close the 
            device.  Use the usual "\w\w\w+++\w\w\w\rATH0\r"-style string if 
            so.

Note that configuration files are not normally order-dependant regarding 
the various control commands.  Meaning, it doesn't matter if you say:

        BEGINTINY TINY_POS 123 45

          or

        TINY_POS 123 45
        BEGINTINY

          or

        BEGINTINY
        <rest of file>
        TINY_POS 123 45

Exceptions to this rule are pointed out, like where the msgareas.bbs AREA 
command picks current area (for all subsequent commands to act on), or 
where the term.bbs DIRECTORY command indicates that the phone directory is
from here to the end of the file.  Get the idea?

Commands which define a path will have a "/" appended to the name if 
necessary.  Unnecessary cases are blank paths (current directory) and
paths which end in ":".


Comments are the same as in most config/batch files:  A ';' means that the
rest of the line is a comment.  Note that you may have to put at least one
space before the ";", or it may be considered a part of the last item on
the line.  A ";" may not come in the middle of a command.  For instance,
a command with four arguments:

    CMD arg1 arg2 arg3 arg4 ; parser will ignore this comment

    CMD arg1 arg2 arg3  arg4; parser will think the ";" is part of "arg4"
                            ; and not realize the rest was a comment

    CMD arg1 arg2           ; parser will think this comment is arguments
        arg3 arg4           ;   and then barf on these two

The reason comments are only allowed between commands is because the ';' 
may be needed as an argument somewhere, somewhen.


Falcon.cfg
----------
Falcon looks for Falcon.cfg in the current directory, in S:, and in FALCON:.
It is also possible to pass a path/name on the command line.  This file is
for general configuration of the BBS, ie. bbs/sysop name, modem strings, 
address, protocols, etc.

7WIRE
    Usage:      7WIRE
    Default:    not 7-wire

    Determines whether or not to use 7-wire serial handshaking.  This
    is usually used for high-speed modems.

ACKNOWLEDGE
    Usage:      ACKNOWLEDGE str
    Default:    "OK"

    This is the modem return string that would normally be returned after 
    a successful command.  However, I never did get around to actually
    using it.  <meek grin>

ADD_BLANK_SEENBY
    Usage:      ADD_BLANK_SEENBY
    Default:    don't add it

    Using this flag causes echo messages to be saved with blank SEEN-BY:
    and PATH: control lines.  This can solve problems if echo message
    processors (I'm thinking of ConfMail specifically) add extra, unwanted
    blank lines around the SEEN-BY lines.  I seem to recall another reason
    that this may be necessary, but what I can't recall is what is was.
    Oh well, it's here if you need it.

ADDRESS
    Usage:      ADDRESS fidonet_address.str
    Default:    0:0/0.0

    This sets the BBS's FidoNet-style address.  It can be in several forms:

        zone:net/node           (no domain)
        zone:net/node.point     (no domain)
        zone:net/node@domain
        zone:net/node.point@domain

    It is suggested that you use a domain, usually "FidoNet".  This address
    can be entered without any quotes, but since it is technically a string,
    you can put quotes around it if you need them.

    See also:   POINTNET

APPFILE
    Usage:      APPFILE filename.str
    Default:    (no application file)

    The name of the new user application file, if you want one.

ATTENTION
    Usage:      ATTENTION str
    Default:    "AT"

    This string is the modem command prefix.  It starts off a command, 
    but if an ENDOFLINE is send immediately, it a no-operation.  It 
    should not have an ENDOFLINE in it, since that is what ENDOFLINE is
    for.

    See also:   ENDOFLINE

AVOID
    Default:    AVOID str
    See also:   "+"

    If user types the first character of this string (later, if 
    circumstances require, I may change it so that you can check a whole 
    bunch of characters, but not now), then when the character is sent to 
    the modem, a NUL (ASCII 0) character is also sent.  This is to prevent a 
    user from putting your modem into command mode, for all the good it 
    would do them anyway.

    See also:   ESCAPE, HANGUP

BEGINSTATUS
    Usage:      BEGINSTATUS
    Default:    begin without status

    Determines whether status window is opened when the program is started.

    See also:   STATUS_POS

BEGINTINY
    Usage:      BEGINTINY
    Default:    begin large

    Determines which screen mode to begin with:  The WorkBench "idiot bar"
    or the large display.  You should always keep the BBS in tiny mode when
    you are not actively watching it for some reason, because not only is
    it a waste of chip memory, but the large display also scrolls slowly
    and therefore slows down output.

    See also:   TINY_POS

BUSY
    Usage:      BUSY str
    Default:    "BUSY"

    If the dialer gets this from the modem instead of a CONNECT message 
    or a NOGOOD message, it skips to the next number.

    See also:   NOGOOD1, NOGOOD2, CONNECT

BYTEFILEOK
    Usage:      BYTEFILEOK
    Default:    cannot send 1 byte files

    The recent implementation of XPRZmodem falls prey to a division by zero 
    software error if it tries to send a one byte file.  I think this is 
    because Falcon buffers the output and therefore seems to send the file
    in zero seconds.  When XPRZ tries to calculate the characters/second
    value, *poof*, division by zero, software error, down goes the system.
    At any rate, this is here in case you need to send one byte files for 
    some insane reason.

CBMENV
    Usage:      CBMENV
    Default     ARP/Manx/Rokicki environment variables

    Setting this flag causes Falcon to use CBM ENV:-style environment
    variables instead of the ARP/Manx/Rokicki style.

CHAT_EXEC
    Usage:      CHAT_EXEC dos_command.str
    Default:    none

    This AmigaDOS command is called when a user Y)ells for the Sysop.
    It must be run and the output must be redirected to NIL:.

    Example:    "run >NIL: playsound wantchat.sound"

    Naturally, "run >NIL:" may be replaced with your preferred command.

CMDPAUSE
    Usage:      CMDPAUSE pause.num
    Default:    50

    Wait this many 50ths (or maybe it's 60ths?) of a second after each 
    modem command.

CONFIGDIR
    Usage:      CONFIGDIR path.str
    Default:    "" (current dir)

    Where to find the following files:  english.bbs, msgareas.bbs, 
    fileareas.bbs, sched.bbs, menus.bbs, term.bbs, systemstat.dat, and 
    possibly some I forgot.

    See also:   HELPDIR, TEXTDIR, NODELISTDIR, USERDIR, KEYDIR

CONNECT
    Usage:      CONNECT baud.num flags.word connect.str   or
                CONNECT FIND flags.word connect_template.str
    Defaults:   300  - "CONNECT"
                300  A "CONNECT/ARQ"
                FIND - "CONNECT %lu"
                FIND A "CONNECT %lu/ARQ"

    This command adds a connect string to the list of default strings that 
    Falcon understands to mean that a modem connection has been made.
    Using a combination of set-baud-rate and dynamic-baud-rate strings,
    accommodating pretty much any modem's crazy connect strings should be
    possible.

    The four defaults should cover most modems, including HSTs.  Note that 
    the version which FINDs the speed dynamically from the string it gets 
    from the modem MUST have the "%lu" (in lowercase) where the baud rate 
    should be in order to work.

    The flags argument currently only recognizes one flag, which is the
    'A' ARQ flag.  If there are others that should be included (note that 
    their only real use at this point is more descriptive logging of a
    connect mode), let me know.

    Note that the term cannot set the baud rate to anything other than 300,
    1200, 2400, 4800, 9600, 12000, 14400, 19200, and 38400 baud, but the BBS 
    should be able to handle any number.  I'll see if I can work out a way
    to get the term to use odd rates too, the problem being mostly in the
    rigid Baud submenu.

CONNECT_MINBAUD
    Usage:      CONNECT_MINBAUD minbaud.num
    Default:    0 (no minimum)

    Users cannot log on if their baudrate is below this number.

    See also:   TRANSFER_MINBAUD, sched.bbs/EVENT

CONNECTTIME
    Usage:      CONNECTTIME seconds.num
    Default:    1 second

    This is the number of seconds to pause after BBS connects and before
    either starting up the ESCESC sequence or starting the session.
    The reason for this dead time is that even slower modems may take a
    little too long to recognize the connect (at the calling end) and
    therefore may miss some text if there is no short pause.

    See also:   ESCTIME, ESCESC

CONTENTS
    Usage:      CONTENTS extension.str do.str
    Default:    no content viewers

    These are used by the C)ontents command in the File Menu.  If you have 
    a program to view the contents of a certain kind of file (usually 
    identified by the "extension" field), include it in the "do" field.  
    Then the "do" string will be executed as a DOS command, and its output 
    will be printed.  This version of the "do" string must have three "%s"'s
    in it, in this order:  The first %s in the string will be where file 
    output is redirected, and should normally be immediately after a ">".  
    The second %s is the pathname, and is guaranteed to end with ":" or "/", 
    unless it is blank, in which case it will stay blank.  The third %s is 
    the filename.  The full command will usually look like:

            CONTENTS ".EXT" "program >%s view_options \"%s%s\""
 
        ie. CONTENTS ".ARC" "arc >%s -vw \"%s%s\""

            (results in 'arc >T:tempfile -vw "FILES:gen/zeebie.arc"')

    Make sure you use the \" escape codes to put quotation marks around the
    path/name, or a space in the path or name might screw things up.  Also,
    disable any prompts that may come up during program execution if you 
    can.

    Note: an extension of "" will match any file; use it if you have some 
    sort of all-purpose viewer like PolyXArc.

    Alternative:

    If you know the file contents cannot be viewed, put a "*" at the start
    of the "do" string, and the rest of it will be shown as "That is 
    <str>".  For instance,

            CONTENTS ".MAC" "*probably a Macintosh picture"

    will come back as "That is probably a Macintosh picture." for any file 
    ending in ".MAC".

DATESTAMP_11W
    Usage:      DATESTAMP_11W
    Default:    SEAdog datestamps

    This determines what format the datestamp will take in new messages.
    Some processors have trouble with the default (prettier) SEAdog
    format.

    The look like:      SEAdog:   "Tue  1 Jan 91 01:23"
                        Fido 11w: "01 Jan 91  01:23:45"

DEF_CALL_DL
    Usage:      DEF_CALL_DL twit.num disgrace.num normal.num privil.num
                    assist.num sysop.num
    Default:    150 450 900 1350 1800 -1

    Sets the default call download limits for all user levels.  This is used
    for new users and for changing a user's level.  A limit of -1 means
    unlimited (within time limits, of course).

    These are roughly equivalent to a 2400 baud transfer during the user's
    available time for the call.

    See also:   DEF_CALL_TIME, DEF_DAY_TIME, DEF_DAY_DL

DEF_CALL_TIME
    Usage:      DEF_CALL_TIME twit.num disgrace.num normal.num privil.num
                    assist.num sysop.num
    Default:    10 30 60 90 120 -1

    Sets the default call time limits for all user levels.  This is used
    for new users and for changing a user's level.  A limit of -1 means
    unlimited, except for events.

    See also:   DEF_CALL_DL, DEF_DAY_TIME, DEF_DAY_DL

DEF_COST
    Usage:      DEF_COST cents.num
    Default:    25 cents

    This is used for non-local netmail if there is no nodelist available
    to determine the cost.

    Apologies to those in countries that do not use dollars and cents.
    That may be a little more flexible in the future.

DEF_DAY_DL
    Usage:      DEF_DAY_DL twit.num disgrace.num normal.num privil.num
                    assist.num sysop.num
    Default:    300 900 1800 2700 3600 -1

    Sets the default daily download limits for all user levels.  This is 
    used for new users and for changing a user's level.  A limit of -1 means
    unlimited (within time limits, of course).

    These are roughly equivalent to a 2400 baud transfer during the user's
    available time for the day.

    See also:   DEF_CALL_TIME, DEF_CALL_DL, DEF_DAY_TIME

DEF_DAY_TIME
    Usage:      DEF_DAY_TIME twit.num disgrace.num normal.num privil.num
                    assist.num sysop.num
    Default:    20 60 120 180 240 -1

    Sets the default daily time limits for all user levels.  This is used
    for new users and for changing a user's level.  A limit of -1 means
    unlimited, except for events.

    See also:   DEF_CALL_TIME, DEF_CALL_DL, DEF_DAY_DL

DEPTH
    Usage:      DEPTH depth.num
    Default:    3 bitplanes

    Depth of large display's screen in bitplanes), 1-4 in hires, and
    1-5 in lores.

    See also:   WIDTH, HEIGHT, INTERLACE, LORES, PALETTE

DEVICE
    Usage:      DEVICE library_name.str unit.num flags.num
    Default:    "serial.device" 0 0

    Selects the device driver for serial IO.  Use a name of "" for a local-
    only operation.

DIAL
    Usage:      DIAL str
    Default:    "ATDT"

    This string is the modem dialing command prefix.  It should not have an 
    ENDOFLINE string in it, since that string is automatically appended.

    See also:   ENDOFLINE

DIALTIME
    Usage:      DIALTIME seconds.num
    Default:    30 seconds

    This is the amount of time the program will wait for carrier after 
    dialing.

    See also:   WAITTIME

DOWNLOAD_NOLOG
    Default:    DOWNLOAD_NOLOG
    Default:    log downloads

    This flag merely tells the program not to log downloads.  Useful in
    a system with a large volume of downloads.

DTR_DOWNTIME
    Usage:      DTR_DOWNTIME pause.num
    Default:    50

    Wait this many 50ths (or maybe it's 60ths?) of a second between
    dropping DTR and raising it again (to hang up).

EDITOR_LINES
    Usage:      EDITOR_LINES lines.num
    Default:    1024

    Maximum number of lines in the message editors.

ENDOFLINE
    Usage:      ENDOFLINE str
    Default:    "\r"

    This string is the modem command suffix.  It ends and enters a modem
    command string.

    See also:   ATTENTION

ENV_VAR_NAME
    Usage:      ENV_VAR_NAME var_name.str
    Default:    "fret"

    This is the name of the environment variable to be send for returning 
    strings to DOS when the program exits.  It is also read in certain
    parts of the program.

ERRL_NONE
ERRL_MATRIX
ERRL_ECHO
ERRL_BOTH
ERRL_FAILED
    Usage:      ERRL_???? errorlevel.num
    Default:    0, 1, 2, 3, 20, respectively

    If the BBS failed, ERRL_FAILED is returned to DOS.

    If the BBS worked, ERRL_NONE is returned if no echo or matrix messages 
    were entered, ERRL_MATRIX if matrix messages were entered, ERRL_ECHO
    echo messages were entered, and ERRL_BOTH if both matrix and echo 
    messages were entered.

ESCAPE
    Usage:      ESCAPE str
    Default:    "\w\w\w+++\w\w\w"

    This modem string is intended to get the modem out of online mode into
    command mode.

    See also:   HANGUP, AVOID

ESCESC
    Usage:      ESCESC
    Default:    no Esc-Esc sequence

    If this flag is set, the BBS will not start up until two ESCs have
    been typed.  This is useful if HST callers are having problems with 
    long handshake (MNP, I think) times after connect and missing some or 
    all of the intro text.  If the handshaking goes on long enough, garbage
    may even be entered at the name prompt if there is nothing to prevent
    it.

    This wait for two escapes goes on for thirty seconds, then the BBS
    automatically starts up the session as if two escapes had been typed.

    See also:   ESCTIME, CONNECTTIME

ESCTIME
    Usage:      ESCTIME seconds.num
    Default:    5 seconds

    If ESCESC has been specified, this is the number of seconds to look 
    for a carriage return.  If a carriage return is received during this
    time, the BBS jumps straight to the ESCESC sequence.  Otherwise
    the ESCESC sequence is started after the time runs out.

    Try to arrange it so that this command plus the CONNECTTIME command
    are long enough that all HST (or other high speed modem) handshaking
    is over just before the time is up.  That way HST users see the 
    "Hit ESC twice..." message just after connect, and other users can
    hit return to get there sooner.  I suggest either CONNECTTIME 1
    ESCTIME 6 or CONNECTTIME 0 ESCTIME 7.

    See also:   ESCESC, CONNECTTIME

EXIT
    Usage:      EXIT str
    Default:    whatever RESET was set to

    This modem command is sent when Falcon exits.  It can do whatever you 
    want, but normally that's nothing more than a simple reset.

    See also:   RESET

EXPORTFILE
    Usage:      EXPORTFILE filename.str
    Default:    (no export file)

    Given this filename, Falcon will create, on exit, a ConfMail-style list 
    of area labels needing exporting.

    See also:   msgareas.bbs/LABEL

FONT
    Usage:      FONT fontname.str height.num
    Default:    "topaz.font" 8

    This is the font used in the large/full-screen display.

    See also:   FONTWIDTH

FONTWIDTH
    Usage:      FONTWIDTH width.num
    Default:    font's real width

    You can set a font's width with this command.  If you're fiddling about
    with a proportional large display font, you might want to try setting
    this to 8.  However, this actually changes the font for ALL applications
    that may be using it, so it is only to be used for experimentation.  Do 
    not use it regularly.

FRONTDOOR
    Usage:      FRONTDOOR dos_command.str
    Default:    no front door

    If given, this DOS command will be called after connect.  The 
    environment variable given in ENV_VAR_NAME will be set to the connecting 
    baud rate, and if it's set to "nospawn" on return, Falcon will hang up 
    and return to the waiting state, else it will start up the BBS.

    Normally you will not use this for front door programs, because the
    front door usually calls YOUR program, and not vice-versa.  However, I
    was messing around with something that worked this way and did not see
    any reason to take it out afterward.  It might be useful.

    See also:   ENV_VAR_NAME

HANGUP
    Usage:      HANGUP str
    Default:    "\w\w\w+++\w\w\wATH0\r"

    This modem command should hang up the modem from any mode.  If your
    modem will hang up on DTR being dropped, and you are not forcing DTR
    to stay on, and there is no other program using your unit of the serial
    device (because the only way to drop DTR is to completely close out the 
    device), you can substitute "\d" here to drop DTR.  It is a much cleaner 
    disconnect that way.

    Note:  If you are running with a modem that does internal buffering,
    as some HSTs do, and you wish to hang up with DTR, you should add
    a few waits before you drop it so that the last bit of text can be
    output.  There IS a one-second pause before the HANGUP string is
    sent, but you may need more, ie. "\w\w\w\d" to wait an additional
    second.

HEIGHT
    Usage:      HEIGHT height.num
    Default:    normal height

    Height of large display's screen in *** NON-INTERLACE *** pixels.
    If you want an interlaced screen 420 pixels high, this should be
    specified with "HEIGHT 210".

    See also:   WIDTH, DEPTH, INTERLACE, LORES, PALETTE

HELPDIR
    Usage:      HELPDIR path.str
    Default:    "" (current dir)

    Where to find help files ("#?help.bbs").

    See also:   TEXTDIR, CONFIGDIR, NODELISTDIR, USERDIR, KEYDIR

INACTIVETIME
    Usage:      INACTIVETIME seconds.num
    Default:    270 seconds

    After this amount of time, the user will be logged off for inactivity.

    See also:   RESPONDTIME

INIT
    Usage:      INIT str
    Default:    "ATZ\r\w\w\wATE0M0\r"   (no echo, speaker off)

    This modem command is sent before the BBS starts to wait for a call.  
    It should do things like turn off the speaker so that your modem 
    doesn't wake you up in the middle of the night.

INTERLACE
    Usage:      INTERLACE
    Default:    non-interlaced

    Turns on interlace for the large display's screen.

    See also:   WIDTH, HEIGHT, DEPTH, LORES, PALETTE

KEYDIR
    Usage:      KEYDIR path.str
    Default:    "" (current dir)

    Where to find falcon.key.

    See also:   HELPDIR, TEXTDIR, CONFIGDIR, NODELISTDIR, USERDIR

LOCAL_OFFHOOK
    Usage:      LOCAL_OFFHOOK
    Default:    on hook

    Using this flag makes your phone go off the hook when you log in
    locally.  Otherwise the phone can ring.

    See also:   MAKEBUSY, OFFLINE

LOCK_PORT
    Usage:      LOCK_PORT baud.num
    Default:    don't lock port

    Lock the serial port at a certain baud rate, and pretend it's at
    whatever other baud rate it connects at.  This is a method used
    by high-speed modems to cut down on overhead.

LOGFILE
    Usage:      LOGFILE filename.str
    Default:    (no log file)

    The name of the system log file, if you want one.

LORES
    Usage:      LORES
    Default:    hires

    Causes large display's screen to be in lores.

    See also:   WIDTH, HEIGHT, DEPTH, INTERLACE, PALETTE

MAKEBUSY
    Usage:      MAKEBUSY str
    Default:    "ATH1\r"

    This modem command makes the phone busy for local logins if 
    LOCAL_OFFHOOK has been specified.

    See also:   OFFLINE, LOCAL_OFFHOOK

MAXBAUD
    Usage:      MAXBAUD baud.num
    Default:    300

    The best speed your modem can connect at.

    See also:   LOCK_PORT

NAME
    Usage:      NAME bbsname.str
    Default:    "Unnamed System"

    This is, quite simply, the name of the BBS.

NEWUSERLEVEL
    Usage:      NEWUSERLEVEL level.word
                NEWUSERLEVEL NOT

    This sets the level that new users will be given.  Using NOT instead
    of a level will disallow new users.

NODELISTDIR
    Usage:      NODELISTDIR path.str
    Default:    "" (current dir)

    Where to find a TrapList (traplist.library) format nodelist.  Note that
    at the time of writing, the version of TrapList needed by Falcon is
    still unavailable to the general public.

    See also:   HELPDIR, TEXTDIR, CONFIGDIR, USERDIR, KEYDIR

NOGOOD1
    Usage:      NOGOOD1 str
    Default:    "NO CARRIER"

    If the dialer gets this from the modem instead of a CONNECT message 
    or a BUSY message, it skips to the next number.

    See also:   NOGOOD2, CONNECT, BUSY

NOGOOD2
    Usage:      NOGOOD2 str
    Default:    "VOICE"

    If the dialer gets this from the modem instead of a CONNECT message 
    or a BUSY message, it skips to the next number.

    See also:   NOGOOD1, CONNECT, BUSY

OFFLINE
    Usage:      OFFLINE str
    Default:    "ATH0\r"

    This modem command is used to hang up the phone after the MAKEBUSY
    string has been sent to tie up the phone during a local login.  Note
    that the difference between HANGUP and OFFLINE is that this command
    is meant to be sent from command mode.

    See also:   MAKEBUSY, LOCAL_OFFHOOK

PALETTE
    Usage:      PALETTE color_0.num ... color_<palette_size>.num
    Default:    000 B00 070 AA0 00A A0A 09C BBB

    Large display's screen colors, set to an IBM-style set which doesn't
    flicker too much in interlace.  You can change them, but I suggest
    keeping the general IBM configuration of black, red, green, yellow,
    blue, purple, cyan, and white.

    See also:   WIDTH, HEIGHT, DEPTH, INTERLACE, LORES

PICKUP
    Usage:      PICKUP str
    Default:    "ATA\r"

    This string is sent to the modem when the BBS receives a RING string.
    It picks up the phone with an answer carrier, and starts looking for
    the CONNECT strings.

    See also:   RING, CONNECT

POINTNET
    Usage:      POINTNET pointnet.num
    Default:    (no pointnet kludge)

    This affects netmail addressing for points.  If your boss issues you
    a pointnet, include it here.  The difference is invisible in the BBS,
    where all addressing will appear to be normal, but will in fact be
    zone:pointnet/point behind the scenes.  However, you need not concern
    yourself with the whys and hows of it.

    See also:   ADDRESS

RESET
    Usage:      RESET str
    Default:    "ATZ\r"

    This command resets the modem.

RESPONDTIME
    Usage:      RESPONDTIME seconds.num
    Default:    180 seconds

    After this amount of time, there will be a message issued to the user
    that they should respond soon (or else be logged off for inactivity).

    See also:   INACTIVETIME

REVBUFSIZE
    Usage:      REVBUFSIZE bytes.num
    Default:    4096 bytes

    Determines the size of the screen history buffer, which keeps track of
    what was on the screen even when it was in tiny mode.  This buffer is 
    also the terminal's review buffer.  Minimum 1024 bytes

RING
    Usage:      RING str
    Default:    "RING"

    If Falcon receives this from the modem, it sends the PICKUP string
    to answer the phone.  It is also used in the terminal to detect an
    incoming call during dialing.

    See also:   PICKUP

STATUS_POS
    Usage:      STATUS_POS x.num y.num
    Default:    0 0

    Where to put status window.

    See also:   BEGINSTATUS

STOPDIAL
    Usage:      STOPDIAL str
    Default:    whatever HANGUP was set to

    This is sent to the modem when aborting a dial that has taken too long.
    It defaults to the full HANGUP string, but if you can just hit space or
    return to abort when your modem is calling out, then use that.  I do.

    See also:   HANGUP

SYSOP
    Usage:      SYSOP sysopname.str
    Default:    "Sysop"

    This has two uses.  First, you log into your BBS with this name and
    the program will set you up as the Sysop.  Second, this name is used
    for redirecting mail sent to "Sysop".

TEXTDIR
    Usage:      TEXTDIR path.str
    Default:    "" (current dir)

    Where to find the following text files:  welcome1.bbs, welcome2.bbs,
    bulletin#?.bbs, quotes.bbs, editorial.bbs, newuser.bbs, yell.bbs,
    warning.bbs, logoff.bbs, and possibly some I forgot.

    See also:   HELPDIR, CONFIGDIR, NODELISTDIR, USERDIR, KEYDIR

TINY_POS
    Usage:      TINY_POS x.num y.num
    Default:    0 0

    Where to put Workbench "idiot bar" horizontally.

    See also:   BEGINTINY

TRANSFER_MINBAUD
    Usage:      TRANSFER_MINBAUD minbaud.num
    Default:    0 (no minimum)

    Users cannot transfer files if their baudrate is below this number.

    See also:   CONNECT_MINBAUD, sched.bbs/EVENT

TRANSFER_PRI
    Usage:      TRANSFER_PRI priority.num
    Default:    same as program

    You can set the task priority of Falcon during transfers with this.
    However, this is mostly meant for testing.  Upping the priority can
    bog down or lock out other tasks if you've got a CPU-intensive 
    protocol, and for that matter, lowering it could result in the 
    protocol itself being bogged down or locked out.  You should not use
    this.

TRANSFER_TWOPLANES
    Usage:      TRANSFER_TWOPLANES
    Default:    Normal number of planes

    Since 3 planes in hires (which is the normal setting for the large
    display) steals DMA time, it is suggested that this be used with
    high-speed modems.  As a matter of fact, it should be used with ALL
    modems, since it'll always save CPU time, and there is no reason not 
    to do it.

USERDIR
    Usage:      USERDIR path.str
    Default:    "" (current dir)

    Where to find user.bbs.

    See also:   HELPDIR, TEXTDIR, CONFIGDIR, NODELISTDIR, KEYDIR

WAITTIME
    Usage:      WAITTIME seconds.num
    Default:    2 seconds

    This is the amount of time the program will wait between hanging up
    on a failed dial and dialing again.

    See also:   DIALTIME

WIDTH
    Usage:      WIDTH width.num>
    Default:    normal width

    Width of large display's screen in pixels.

    See also:   HEIGHT, DEPTH, INTERLACE, LORES, PALETTE

XPR
    Usage:      XPR bbs_char.char menu_shortcut.char flags.word
                    300.num 1200.num 2400.num 4800.num 9600.num
                    name.str library.str config.str
    Default:    no protocols available

    Each XPR command adds an XPR protocol with the given name.  The bbs_char
    field is the character used to select the transfer type (ie. the 'Z' in
    "D Z file", to download with Zmodem).  Use '-' if you don't want the
    protocol available in the BBS.  The menu_shortcut field is used in the
    terminal, and is the letter shown in the right of a menu item.  Make 
    sure no other menu items in the terminal have the same letter.  The 
    300..2400 fields are approximate chars/sec estimates for each baud rate, 
    used for estimating download times.  The library field is the name of 
    the XPR-format library, ie. "xprzmodem.library".  The config string is 
    the library's config string, and should be described in each protocol's 
    documentation.

    The flags are as follows:

        R ... The protocol is capable of resuming a transfer
        N ... The protocol sends the filename
        - ... Blank, use for no flags, or possibly to show that a
              flag is off, ie. "A-CDE-"

    Note that there is presently a limit of 32 protocols.  If you need
    more room, say so and I'll modify the program.  Later, there won't
    be a limit.


msgareas.bbs
------------
Falcon looks for msgareas.bbs in the CONFIGDIR (set up in falcon.cfg).
This file obviously configures the message areas.

AREA
    Usage:      AREA num
    Default:    none

    This command basically picks the current area.  Other subsequent
    commands will act on this area.  Range 1-100.

AUTOKEY
    Usage:      AUTOKEY
    Default:    new users get no keys to this area

    This command indicates that new users should be given keys to the 
    current area.

    See also:   LOCKED

AUTOWRITEKEY
    Usage:      AUTOWRITEKEY
    Default:    new users get no write keys to this area

    This command indicates that new users should be given write keys for
    the current area.

    See also:   WRITELOCKED

ECHO
    Usage:      ECHO
    Default:    not an echo area

    This command makes the current area an ECHO area.  Origin lines will
    be added and SEEN-BY: lines will be hidden (if the user has them turned
    off).  This is mutually exclusive with MATRIX.

    See also:   MATRIX

INVISIBLE
    Usage:      INVISIBLE
    Default:    not invisible

    This command makes the current area invisible to all users lower than
    SYSOP level.  No barriers to entry are actually put up.

LABEL
    Usage:      LABEL str
    Default:    ""

    This command sets the current area's label, ie. "AMY_POINT".  This is 
    normally the same as the tag used by Fidonet mail processors.  LABEL is 
    currently used only for creating a list of areas needing export for mail
    packers like ConfMail (and FastPoint, I think).

    See also:    falcon.cfg/EXPORTFILE

LEVEL
    Usage:      LEVEL level.word
    Default:    TWIT

    This command sets the current area's minimum-entry level, ie. PRIVIL.
    Users below this level can neither see or enter the area.

LOCKED
    Usage:      LOCKED
    Default:    not locked

    This command locks the current area.  Only SYSOP-level users and users 
    who have been given "keys" will be able to see and enter the area.

    See also:   AUTOKEY

LOGOFFMSGAREA
    Usage:      LOGOFFMSGAREA
    Default:    area 1 flagged

    This command flags the current area as the one in which to put logoff
    messages to the sysop.

MATRIX
    Usage:      MATRIX
    Default:    not a matrix area

    This command makes the current area a MATRIX area.  Source/destination
    net addresses will be shown, and non-local net messages may be sent.
    This is mutually exclusive with ECHO.

    See also:   ECHO

NAME
    Usage:      NAME str
    Default:    ""

    This command sets the verbose name of the current area, ie. 
    "General msgs".

PASSWORD
    Usage:      PASSWORD str
    Default:    no password

    This command gives the current area a password.  Users cannot see this
    area and must know the password to get in.

PATH
    Usage:      PATH str
    Default:    "" (current dir)

    This command sets the path (directory) for the current area.  This 
    path is where the BBS looks for #?.msg and stat.dat files (and also 
    where it writes them, obviously).  Normally there is one directory
    per area.

PRIVATEONLY
    Usage:      PRIVATEONLY
    Default:    writing public messages permitted

    This command makes the current area private-only to all users lower than
    SYSOP level.  Meaning, they cannot write public messages.

    See also:   READONLY, PUBLICONLY

PUBLICONLY
    Usage:      PUBLICONLY
    Default:    writing private messages permitted

    This command makes the current area public-only to all users lower than
    SYSOP level.  Meaning, they cannot write private messages.

    See also:   READONLY, PRIVATEONLY

READONLY
    Usage:      READONLY
    Default:    writing permitted

    This command makes the current area read-only to all users lower than
    SYSOP level.  Meaning, they cannot write messages

    This is useful for an announcements area.

    See also:   PUBLICONLY, PRIVATEONLY

WRITELOCKED
    Usage:      WRITELOCKED
    Default:    not write-locked

    This command locks the current area's message-writing commands.  Only 
    SYSOP-level users and users who have been given "write keys" will be 
    able to write messages in this area.

    See also:   AUTOWRITEKEY


fileareas.bbs
-------------
Falcon looks for fileareas.bbs in the CONFIGDIR (set up in falcon.cfg).
This file obviously configures the file areas.

AREA
    Usage:      AREA num
    Default:    none

    This command basically picks the current area.  Other subsequent
    commands will act on this area.  Range 1-100.

AUTOKEY
    Usage:      AUTOKEY
    Default:    new users get no keys to this area

    This command indicates that new users should be given keys to the 
    current area.

    See also:   LOCKED

INVISIBLE
    Usage:      INVISIBLE
    Default:    not invisible

    This command makes the current area invisible to all users lower than
    SYSOP level.  No barriers to entry are actually put up.

LABEL
    Usage:      LABEL str
    Default:    ""

    This command sets the current area's label, ie. "GENERAL".  This is 
    not presently used for anything.

LEVEL
    Usage:      LEVEL level.word
    Default:    TWIT

    This command sets the current area's minimum-entry level, ie. PRIVIL.
    Users below this level can neither see or enter the area.

LOCKED
    Usage:      LOCKED
    Default:    not locked

    This command locks the current area.  Only SYSOP-level users and users 
    who have been given "keys" will be able to see and enter the area.

    See also:   AUTOKEY

MATRIX
    Usage:      MATRIX
    Default:    not a matrix area

    This command makes the current area a MATRIX file area.  I'm sorry, but
    I cannot for the life of me remember why I included this.  There was a
    reason.  I'm sure there was...

NAME
    Usage:      NAME str
    Default:    ""

    This command sets the verbose name of the current area, ie. 
    "General files".

PASSWORD
    Usage:      PASSWORD str
    Default:    no password

    This command gives the current area a password.  Users cannot see this
    area and must know the password to get in.

PATH
    Usage:      PATH str
    Default:    "" (current dir)

    This command sets the path (directory) for the current area.  This 
    path is where the BBS looks for files and the files.bbs list.
    Normally there is one directory per area.

    See also:   UPLOADPATH

READONLY
    Usage:      READONLY
    Default:    writing permitted

    This command makes the current area read-only to all users lower than
    SYSOP level.  Meaning, they cannot upload files.

UPLOADPATH
    Usage:      UPLOADPATH str
    Default:    whatever PATH was set to

    This command sets the upload path (directory) for the current area.  
    This optional path is where the BBS puts uploaded files, possibly for
    verification and/or hurling into the correct area.  Also good for 
    directing uploads from a dozen specific areas to a general New Uploads
    area.

    See also:   PATH


menus.bbs
---------
Falcon looks for menus.bbs in the CONFIGDIR (set up in falcon.cfg).  This 
file sets up menu levels, additional menus, doors, and macros.  See the
section on Configurable Menus for more information.

<command>
    Usage:      <command>
    Default:    n/a

    Where command is one of the following letters:

        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`

    This sets the command's minimum level to the currently selected command 
    level.  Users below that level will not be able to use this command.

    This also selects the current command letter for certain other
    commands to act on.

    Note that commands "," and ";" can't be used because they're whitespace.

    See also:   <level>

<level>
    Usage:      <level>
    Default:    TWIT

    Where <level> can be NOT, TWIT, DISGRACE, NORMAL, PRIVIL, ASSIST, SYSOP.

    This command selects the level that subsequent commands will be given.
    Think of it as "Set the following commands to <level>: ..."

    Users below this level will not be able to use whatever commands
    you specify.  If the level is NOT, then no users will be able to use it,
    effectively turning it off.

    Default command levels (these are NOT menus.bbs commands!):

        Main:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            A-----------------------------T-TTT-TDT-TD--T---D-T-DT--D-----T-
        Message:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            A---------T-TTDTTTTTTTTTT---T-T-DDT-DNTNDDNDTT-TTDT-N----D----T-
        File:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            A------------TD---------------T-D-NN-TTAATADTT--TPTDNT--------T-
        Change:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            ----------D------------------TT-DNDTTTTTTTNTTT-TTTTTSTTT-T---TT-
        UserEdit:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            ---A--------------------------T-S-SSA--SA-AA-S-ST-AA-A--------T-
        Edit:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            ------------------------------T-T-TTTT-TTT-T-T--T-TT--T-------T-
        Subop:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            --T---------------------------T---TT-T--T-TTTT-TTT-T-TT-------T-
        Librarian:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            ------------------------------T---TT-T--T-TTTT-TTT-TTT--------T-
        Sysop:
            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
            ------------------------------T-T--TTT----STT---T--T----------T-

    NOTE:  The '?' and '_' commands always default to TWIT in new user-
    created menus.  '?' is always a help key, and '_' always stops and asks
    the user to hit enter.

    See also:   <command>

BATCH
    Usage:      BATCH falcon_batch_file.str
    Default:    n/a

    The currently selected command will run this Falcon batch file command,
    which is not a DOS batch file (which can be used through something like
    'CON "execute dos_batch_file"'), but rather a file consisting of NIL,
    CON, and/or RAW lines.  Here's a hypothetical registration batch file:

        NIL     "copy BBS:reg_form.txt T:"
        CON MC  "echo \"Please fill out the registration form...\""
        NIL     "wait 2"
        RAW -   "raw_screen_edit \"T:reg_form.txt\""
        NIL     "copy T:reg_form.txt \"FORMS:«FULLNAME».txt\""

    The reason for this alternative kind of batch file is so that several
    kinds of commands can be combined in one sequence.

    See also:   <command>, NIL, RAW, CON

CON
    Usage:      CON flags.word dos_cmd.str
    Default:    n/a

    The currently selected command will run this DOS command, which will
    be treated as if it were running in a CON: window, except that all
    I/O will be through the BBS instead.

    Applicable flags:

        M   Allow "More [Y,n]" prompts
        C   Allow the user to break out of the program with ^C
        A   Force ANSI through even if user has it turned off
        R   Force ANSI color through even if user has it turned off
        I   Force IBM characters through even if user has them turned off
        F   Fix local screen after execution
        -   Nothing (use as filler)

    The dos_cmd string may have "«...»"-style arguments, which the BBS will
    fill in.  These are described elsewhere.

    See also:   <command>, NIL, RAW, BATCH

GOODBYE
    Usage:      GOODBYE
    Default:    n/a

    The currently selected command goes to the logoff sequence.

    Do not use GOODBYE in conjunction with the Edit, Sysop, UserEdit, Subop,
    or Librarian menus, or any that you may have added to them, because 
    these menus have special exit conditions.

    See also:   MENU, GOTO, <command>

GOTO
    Usage:      GOTO menu_name.word
    Default:    n/a

    The currently selected command goes to the specified menu.  For 
    instance, the Main Menu "M" command could be specified like this:

        MENU Main DISGRACE M GOTO Message

    Do not use GOTO in conjunction with the Edit, Sysop, UserEdit, Subop,
    or Librarian menus, because these menus have special entrance and
    exit conditions.  You might be okay if you add a menu to them which
    cannot return to the main BBS without going back through the menu
    it left, but I wouldn't do it if I were you.

    See also:   MENU, GOODBYE, <command>

HELPFILE
    Usage:      HELPFILE helpfile.str
    Default:    "<menu_name>help.bbs" (except for message -> msghelp.bbs)

    This changes the name of the help file for the current menu.  This
    file is still looked for in the HELPDIR path set out in falcon.cfg.

    See also:   MENU, falcon.cfg/HELPDIR

MACRO
    Usage:      MACRO commands.str
    Default:    n/a

    The currently selected command will insert the given commands into
    the BBS command stack so that they are executed next.  ie.:

        Menu Message TWIT O MACRO "GYN"    ; one-character logoff
        Menu Main    TWIT * MACRO "FLG* Q" ; all new files (from Main)

    Note that doing something like 'X MACRO "X"' is a bad idea.  Do not
    include a macro's command inside it, nor any macros that call it.

    Make sure your macro can be followed by other commands.  If the last
    thing in a macro is a "word", for instance, make sure it is followed
    by a whitespace character to separate it from anything that follows.
    If it is a sentence, append a "|" to end it.  Etc.  This is because
    MACROs are merely inserted before the rest of the command stack.

    See also:   <command>

MENU
    Usage:      MENU menu_name.word
    Default:    Main

    Where menu_name can be Main, Message, File, Change, Edit, Sysop, 
    UserEdit, Subop, Librarian, or a user-defined menu.

    This command selects the menu for other subsequent commands to act on.
    If the menu is built-in or has already been initialized, it will just
    be selected.  Otherwise, a new menu of this name will be created and
    initialized.

NIL
    Usage:      NIL dos_cmd.str
    Default:    n/a

    The currently selected command will run this DOS command with no
    input or output.

    The dos_cmd string may have "«...»"-style arguments, which the BBS will
    fill in.  These are described elsewhere.

    See also:   <command>, CON, RAW, BATCH

RAW
    Usage:      RAW flags.word dos_cmd.str
    Default:    n/a

    The currently selected command will run this DOS command, which will
    be treated as if it were running in a RAW: window, except that all
    I/O will be through the BBS instead.

    Applicable flags:

        C   Allow the user to break out of the program with ^C
        F   Fix local screen after execution
        -   Nothing (use as filler)

    The dos_cmd string may have "«...»"-style arguments, which the BBS will
    fill in.  These are described elsewhere.

    See also:   <command>, NIL, CON, BATCH


sched.bbs
---------
Falcon looks for sched.bbs in the CONFIGDIR (set up in falcon.cfg).  This 
file sets up schedules and events.

EVENT
    Usage:      EVENT name.str
    Default:    no events

    This initializes an event, which other subsequent commands will act on.

    Most events cause the BBS to exit with the return environment variable 
    set to the event name.  They also affect user time limits, since the
    BBS must exit no matter what the user wants.  Be careful!  The BBS will
    NOT exit on an event if it is in the terminal mode.

    Some events start special schedules:
 
        yell                Y)ell command available

        no300connect        Callers <= 300  baud can't connect to BBS
        no1200connect       Callers <= 1200 baud can't connect to BBS
        no2400connect       Callers <= 2400 baud can't connect to BBS
        no9600connect       Callers <= 9600 baud can't connect to BBS

        no300transfer       Callers <= 300  baud can't up/download
        no1200transfer      Callers <= 1200 baud can't up/download
        no2400transfer      Callers <= 2400 baud can't up/download
        no9600transfer      Callers <= 9600 baud can't up/download

    Any event name beginning with one of the above strings (ie. "yell",
    "yell2", "no300connect_A", "no300connect_B") causes the thing the name
    implies to be true for the duration of that event.

    See also:   falcon.cfg/ENV_VAR_NAME

<day>
    Usage:      <day>
    Default:    no days selected

    Where <day> can be Sun, Mon, Tue, Wed, Thu, Fri, Sat, Everyday.

    The currently selected event occurs on this (these) day(s) of the week.

START
    Usage:      START military_time.num
    Default:    I'm not sure.  Don't try.

    Set the currently selected event to start at this time of the day on a 
    24 hour military clock, which is in the format HHMM, with HH=0..23 and 
    MM=0..59.  ie. 10:30pm = 2230.

    See also:   DURATION

DURATION
    Usage:      DURATION minutes.num
    Default:    I'm not sure.  Don't try.

    Set the currently selected event to last this many minutes.  It should 
    be at least 1.  The method I'm currently using to do events is not very 
    good.  If an event is in progress, the BBS will exit, even if it has done 
    so once already for the current event.  You must make sure that whatever
    the event causes will last at least as long as this DURATION, or it 
    could occur twice.

    See also:   START


term.bbs
--------
FTerm looks for sched.bbs in the CONFIGDIR (set up in falcon.cfg).  This 
file is used to set up the modem strings, dial directory, and miscellaneous
other stuff for FTerm.

<cursor key>
    Usage:      <cursor key> macro.str
    Default:    ""

    Where <cursor key> is CURUP, CURDOWN, CURLEFT, CURRIGHT, SHCURUP,
    SHCURDOWN, SHCURLEFT, SHCURRIGHT.

    These define the cursor key macros.  Typing the specified key in the 
    terminal sends out macro.str.  Simple.

    See also:   <function key>, <number pad key>

DIAL
    Usage:      DIAL str
    Default:    whatever falcon.cfg/DIAL was set to

    This string is the modem dialing command prefix.  It should not have an 
    ENDOFLINE string in it, since that string is automatically appended.

    There is presently no real reason to have this, as the BBS never does
    any dialing and you can just set that string to what you want.  However,
    it may do so in the future (for, say, callback validation or some such)
    and therefore I provide two versions.

    See also:   ENDOFLINE, falcon.cfg/DIAL

DIRECTORY
    Usage:      DIRECTORY
    Default:    normal command mode

    After this command, term.bbs turns into a phone directory, all the
    way to the end of the file.  The format of each directory entry is
    as follows:

            name.str phone_number.str baud.num comment.str

        ie. "Dis BBS" "123-456-7890" 2400 "24 hours, Joe Sysop"

    This command must come after all other commands.

DLDIR
    Usage:      DLDIR path.str
    Default:    "RAM:"

    This is the default download path.  It is put into the file requestor
    to begin with (which, at this time, is either one or two prompts,
    since I don't want to use ARP and CBM hasn't released 2.0 just yet), 
    where it can be changed.

    See also:   ULDIR

EOLPAUSE
    Usage:      EOLPAUSE pause.num
    Default:    0

    Wait this many 50ths (or maybe it's 60ths?) of a second after each 
    end-of-line in an ASCII send.

    This is useful for uploading text to, say, a BBS that has unusually
    long pauses when you hit carriage return, or simply does not have a
    buffer

    See also:   SENDPAUSE

<function key>
    Usage:      <function key> macro.str
    Default:    ""

    Where <function key> is F1, F2 ..., F10 or S1, S2, ..., S10.

    These define the function key macros.  Typing the specified key
    in the terminal sends out macro.str.  Simple.

    See also:   <number pad key>, <cursor key>

HANGUP
    Usage:      HANGUP str
    Default:    whatever falcon.cfg/HANGUP was set to

    This modem command should hang up the modem from any mode.  If your
    modem will hang up on DTR being dropped, and you are not forcing DTR
    to stay on, and there is no other program using your unit of the serial
    device (because the only way to drop DTR is to completely close out the 
    device), you can substitute "\d" here to drop DTR.  It is a much cleaner
    disconnect that way.

    This is given in case you do like I do and force DTR in the term, so
    that if I crash the system while online, I won't get disconnected and
    can reload the term.  I don't force it in the BBS, though (my modem
    can toggle forcing DTR with an AT command instead of a dip switch).
    So my falcon.cfg HANGUP is "\d", and my term.bbs hangup is "\w\w\w
    +++\w\w\wATH0\r".  See?

    See also:   falcon.cfg/HANGUP

INIT
    Usage:      INIT str
    Default:    "ATZ\r"

    This string initializes the modem for the terminal.

LOCAL_ECHO
    Usage:      LOCAL_ECHO
    Default:    no local echo

    This command tells the term to echo outgoing text to the local screen
    as well.  This is mostly used in straight term-to-term chats.

    See also:   TRANSLATE_EOL_IN, TRANSLATE_EOL_OUT

<number pad key>
    Usage:      <number pad key> macro.str
    Default:    ""

    Where <number pad key> is K. (kay-period) or K0, K1, ..., K9.

    These define the number pad key macros.  Typing the specified key
    in the terminal sends out macro.str.  Simple.

    See also:   <function key>, <cursor key>

SENDPAUSE
    Usage:      SENDPAUSE pause.num
    Default:    0

    Wait this many 50ths (or maybe it's 60ths?) of a second after each 
    character in an ASCII send.  Note that using a nonzero number adds
    a certain amount of overhead, so that 1 is a bit slower than you
    might expect, compared to 0.

    This is useful for uploading text to, say, a BBS that doesn't read
    text very fast and might lose some input to a buffer overrun.

    See also:   EOLPAUSE

STOPDIAL
    Usage:      STOPDIAL str
    Default:    whatever HANGUP was set to

    This is sent to the modem when aborting a dial that has taken too long.
    It defaults to the full HANGUP string, but if you can just hit space or
    return to abort when your modem is calling out, then use that.  I do.

    There is presently no real reason to have this, as the BBS never does
    any dialing and you can just set that string to what you want.  However,
    it may do so in the future (for, say, callback validation or some such)
    and therefore I provide two versions.

    See also:   HANGUP

TIMEOUT
    Usage:      TIMEOUT seconds.num
    Default:    0 (no timeout)

    If this number is nonzero, and there are so many seconds of dead
    time (no input, no output, no carrier), the terminal will time out
    and return to the BBS to wait for a call.

TRANSLATE_EOL_IN
    Usage:      TRANSLATE_EOL_IN
    Default:    leave incoming CR's alone

    This command tells the term to translate incoming carriage returns to 
    carriage return/linefeed sequences.  This is mostly used in straight
    term-to-term chats.

    See also:   TRANSLATE_EOL_OUT, LOCAL_ECHO

TRANSLATE_EOL_OUT
    Usage:      TRANSLATE_EOL_OUT
    Default:    leave outgoing CR's alone

    This command tells the term to translate outgoing carriage returns to 
    carriage return/linefeed sequences.  This is mostly used in straight
    term-to-term chats.

    See also:   TRANSLATE_EOL_IN, LOCAL_ECHO

ULDIR
    Usage:      ULDIR path.str
    Default:    "RAM:"

    This is the default upload path.  It is put into the file requestor
    to begin with (which, at this time, is either one or two prompts,
    since I don't want to use ARP and CBM refuses to release 2.0), where
    it can be changed.

    See also:   DLDIR



12.  Configurable Menus
=======================

Note:  directories like CONFIG/ and HELP/ are actually references to the 
directories you set up in your falcon.cfg file.

How to Make a New Menu
----------------------
Edit your CONFIG/menus.bbs file.  Use the MENU keyword to select a menu 
which does not exist.  A new menu of that name will be created.  Example:

    MENU External

A new menu is created only on the first instance of an unfamiliar name.
If you should happen to reference it again with another "MENU External"
line, that will only select it again.  The name here is the name which 
will be displayed in the menu, as...

    <label> MENU                ie.     EXTERNAL MENU
    Select:                             Select:

Note that the version you see in the menu will be in allcaps, no matter
what you entered, just to match up with the word "MENU".  The string 
will, however, appear as entered in the "Where:" field of the status 
window.

Anyway, you've created a new menu.  Now you need to customize it...


Customizing Menus
-----------------
You can customize any menu, built-in or new.  Built-in commands will, 
however, take precedence.  To do so, first select it:

    MENU Utilities

Now select the level of the command(s) you wish to add:

        SYSOP

Now the command letter, just as if you were only setting it's level, which
you are in fact doing, but you will follow it by command information.

            B NIL "copy LOG:log.bbs LOGBACK:log.bak"

Now the Utilities menu has a new SYSOP-level 'B' command, which in this 
case runs a program, quietly, to back up the log file.  Refer to 
the section on Help Files for information on adding an entry to the help 
file.

The currently-available set of customizations for a command are:

    GOTO <label>
    NIL <dos command and arguments>
    RAW <switches> <dos command and arguments>
    CON <switches> <dos command and arguments>
    BATCH <falcon batch file>
    GOODBYE
    MACRO

GOTO
~~~~
GOTO is simple.  All it does it link the current menu to another through 
the specified command letter.  To link a Games menu to the main menu, 
both ways, do this:

    MENU Games
        TWIT M GOTO Mmain

    MENU Main
        TWIT G GOTO Games

Note that Games must be declared before Main's GOTO points to it, or else 
Falcon will cry foul because it has not yet heard of any Games menu.  If 
you have several custom menus which all reference each other, you must 
declare them before linking them, like so:

    MENU One
    MENU Two
    MENU Three

    MENU One
        TWIT 2 GOTO Two
             3 GOTO Three
    MENU Two
        TWIT 1 GOTO One
             3 GOTO Three
    MENU Three
        TWIT 1 GOTO One
             2 GOTO Two

It is perfectly acceptable to reference a menu more than once, since it is
only created once.  Technically, I did not need the first "MENU One" line,
because it would have been created before it was pointed to by the "GOTO 
One" lines in MENUs Two and Three.

NIL, CON, and RAW
~~~~~~~~~~~~~~~~~
All three of these require the AmigaDOS "Run" command to be in your command
path.  CON and RAW both require the "NewShell" command as well.

These three execute the given command with the given arguments.  NIL
executes the command without any input or visible output.  NIL is usually
used to perform a task that the user need not see or participate in.  CON 
and RAW execute the command, through the BBS, like a command executed in 
a CON: or RAW: window.  The user sees the output, and may type input.
In CON, the input is line-based, like in a CLI or Shell.  In RAW, it is
character-based, where every character gets sent to the program with no
built-in editing, although the program may provide some if needed.  Good
programs for CON and RAW would be a polling booth and a text editor,
respectively.  Another difference is that CON programs are subject to
"More? [Y,n]" prompts.

Note that, for a CON or a RAW command, using "" means to open a full Amiga-
DOS shell.  This is cute, but really quite dangerous for a BBS to have
because, except for the level required to start the shell, there is no
security.  Now, if you're the only one with SYSOP, you can set the shell
to SYSOP level only and be safe, but many sysops have other users set to
SYSOP.  It's also a problem if you run a program while in the shell that
opens its own window or screen, because of course you can't access that
from the BBS program.

Examples:

        DISGRACE    S CON MC "status full"
                    I CON MC "info"
                    A CON MC "avail"
        NORMAL      C RAW -  "rawedit some text file"
        SYSOP       K NIL    "delete LOG:log.bbs"
                    N CON MC ""                         ; "" means newshell

The switches are as follows (note that they are not used with NIL commands):

    M   Allow "More? [y,n]" prompts in CON commands.  RAW commands do not
        get these prompts.
    C   Allow user to type ^C to break out of the program.
    A   Force ANSI to be permitted in CON commands.  RAW commands do not
        have ANSI filtered out for them if the user has ANSI turned off.
    R   Force ANSI color not to be removed in CON commands.  RAW commands 
        do not ANSI color filtered out for them if the user has ANSI 
        color turned off.
    I   Force IBM chars to be permitted.  RAW commands do not have IBM
        chars filtered out for them if the user has IBM chars turned off.
    F   Fix local screen after program is run.  Some programs, Contris
        for example, may send ANSI codes which change the settings in the
        console.device, and this will reset them after the program is 
        done.  Note that this involves clearing the screen.
    -   Nothing.  Use this if you don't have any flags on.  You could also
        use it to make your flags look like the flags in the AmigaDOS
        command "list", ie. "------" or "MC-R---" or "MCARIF".

Final note:  It is permissible to run a batch file (ie. 'CON CM "execute 
zeebie.bat"'), and it is also permissible for a program to run another
program (usually through the dos.library function Execute("command",NULL,
NULL), if there are any programmers wondering).  All I/O will be properly 
redirected.

BATCH
~~~~~
BATCH will read in and interpret the batch file you specify, when the
user types the command letter.  Note that this is not a DOS batch file 
but rather a custom file made up of NIL, CON, and RAW lines, like this:

    RAW -  "rawedit T:temp_file"
    NIL    "cuss_filter T:temp_file"
    CON CM "echo \"*n*nThis is the file you entered, filtered:*n\""
    CON CM "type T:temp_file"
    NIL    "delete "T:temp_file"
    CON CM "echo \"*nDone.\""

If that file was called "cuss.bat", you'd use this to add it:

        NORMAL N BATCH "cuss.bat"

The reason this is not a regular batch file is so that you can have both
RAW and CON commands in one sequence.  If you just want a regular AmigaDOS
batch file, use something like 'CON CM "execute zeebie.bat"'.  

The only drawback to BATCH files is that there is overhead for every 
command to set up the door, usually amounting to a second or two pause
before each command.  Naturally this would drop on a faster computer like
a 3000.

Most of the time you will not need BATCH files.

GOODBYE
~~~~~~~
Obvious.  The user can log off with this.  Example:

        TWIT G GOODBYE

Ta da.

MACRO
~~~~~
Use this to execute a few BBS commands through one.  For instance, to 
create a one-character logoff sequence from the Message Menu:

        TWIT O MACRO "GYN"

Do not call the macro you are in.  It will be a bad thing.  Don't call
a different macro that calls the macro you are in.  It will be a bad thing.

Make sure your macro can stand having other commands stacked after it.
For instance a macro which did a global search for new files would work
as "LG*", but not if there were other commands following it.  The "*", or
any other description, is read in as a "word" and therefore needs a white-
space character to separate it from anything that follows.  It should 
instead be "LG* ".


Arguments
---------
Arguments may have BBS information dynamically inserted into them.  If, 
for example, you wanted to pass the user's name to a game, you could say:

        RAW - "playgame \"«FULLNAME»\""

That would be an example of a straight copy.  There are also conditionals, 
which insert the first following «»-type string if the flag is on, and the 
second if the flag is off, ie:

        RAW - "playgame \"«FULLNAME»\" «ANSI»«»«NOANSI»"

...which would give something like 'playgame "Brian Fehdrau"' for my 
configuration, and 'playgame "Joe No-Ansi" NOANSI' for someone who doesn't
want ANSI graphics.  As you can obviously see, it's permissible to put
nothing between the "«»"'s in a conditional argument.  It's easiest to 
think of conditionals like this: "«if this flag is on»«then insert this»
«else insert this»".

There are also prompt arguments, which ask the user for a certain kind
of command with a given prompt.  The «» string following the argument 
contains the prompt.  ie.:

        V CON CM "ppdecrunch \"«FILEPATH»«AGETWORD»«View which file? »\""

(That would be used to V)iew a PowerPacked text file in the current file
area.)

All dynamic arguments come between a '«' and a '»'.  On my usa1 keymap, 
these are typed with alt-'9' and alt-'0'.  I picked these because they 
weren't too likely to be needed on the command line.  If, however, you do 
need them, you can enter "««" for a single '«', and '»' is fine by itself.

Note that these arguments may also be used in MACROs.

Here is a list of dynamic arguments, without "«»"'s (Note that these ARE
case-sensitive, and therefore MUST be entered in uppercase):

    Argument types:
    ---------------
    s  = string
    d  = 16 bit signed integer
    ld = 32 bit signed integer
    u  = 16 bit unsigned integer
    lu = 32 bit unsigned integer)

    Straight copy arguments
    -----------------------
    FIRSTNAME   s   The user's first name, ie. "Brian"
    LASTNAME    s   The user's last name, ie. "Fehdrau"
    FULLNAME    s   The user's full name, ie. "Brian Fehdrau"
    CITY        s   User's city/area, ie. "Saskatoon, SK"
    PASSWORD    s   The user's password (be careful!) ie. "(yeah, right!)"

    TOTALTIME   d   User's total time on to date, in minutes
    TODAYTIME   d   Time of previous calls today, in minutes
    CALLTIME    d   Unmodified time allowed per call, -1 if unlimited
    DAYTIME     d   Time allowed per day, -1 if unlimited

    TOTALDOWN   ld  User's total downloads to date, in kilobytes
    TODAYDOWN   ld  Total downloads today, in kilobytes
    CALLDOWN    ld  Unmodified download allowed per call, -1 if unlimited
    DAYDOWN     ld  Download allowed per day, -1 if unlimited

    TOTALUP     ld  User's uploads on to date, in kilobytes

    CALLS       u   Number of times user has called to date
    MSGS        u   Number of messages user has entered to date

    FILEAREA    u   The user's current file area
    FILEPATH    s   The path to user's current message area
                    Note that this path is available from any menu.
    MSGAREA     u   The user's current message area
    MSGPATH     s   The path to user's current message area
                    Note that this path is available from any menu.

    LASTCALL    lu  The user's last call, in seconds since 00:00 1 ??? ????
    CREDIT      lu  Mail credit, presently in cents
    WIDTH       u   Width of screen, in columns
    HEIGHT      u   Length of screen, in rows

    LEVEL       u   Userlevel, 0-5 (TWIT,DISGRACE,NORMAL,PRIVIL,ASSIST,SYSOP)
    HELP        u   User help level, 0-2 (NOVICE,REGULAR,EXPERT)

    USERNUM     d   User's number in user.bbs file, starting with 1, not 0
    USERDIR     s   Path to directory containing user.bbs file

    Conditional arguments
    ---------------------
    IBMCHARS        Does the user support the upper (128-255) IBM chars?
    LINEEDIT        Line editor vs. screen editor
    DESTR_BS        Are the user's backspaces destructive?
    NOCOLOR         Does the user want ANSI color filtered out?
    CLEAR           Does the user want screen clearing?
    FEEDS           Does the user need linefeeds?
    ANSI            Does the user want ANSI?
    MORE            Does the user want more prompts?

    Prompt arguments
    ----------------
    GETLETTER   s   Get a letter/command, same stacking as in BBS
    GETNUMBER   s   Get a number, same stacking as in BBS
    GETWORD     s   Get a word, same stacking as in BBS, ie. a filename
    GETSENTENCE s   Get a number, same stacking as in BBS
    GETSTACK    s   Get entire stack or command line with no parsing

    These prompts will not accept a blank answer.  They will insert a blank
    string if the user hits return.  If you prepend an "A" to the string, 
    ie. "AGETWORD", it will take a blank string from the user as a signal 
    to abort the command.  Remember that any error- or range-checking is up
    to you (ie. look out for "#?"s or "*"s in filenames).

An unrecognized argument is just printed out verbatim, ie. "«ZOT»" would 
come out as "ZOT".


Note on help files
------------------
By default, a menu's helpfile will be looked for as HELP/<label>help.bbs, 
which in this case of a Utilities Menu would be HELP/utilitieshelp.bbs.  
However, you can set it up to look for a different name like this:

        HELPFILE <filename>

Which would then be looked for as HELP/<filename>.


What Kinds of Programs to Use and What Kinds Not to Use
-------------------------------------------------------
When Falcon detects that a user is too inactive or has run out of time
altogether, it sends what is called a C break signal to the program, 
which is exactly the same as if you had typed control-C when the program 
was running in a normal CLI or shell.  This is how Falcon regains control.
If a program will not exit cleanly and reasonably promptly (no more than 
10-30 seconds at the outside) on a control-C signal, you should avoid 
using it.  Note that this break signal is only sent to the program which
most recently had some I/O.


Warnings
--------
Do not use ARun to run Falcon under 2.0.  ARun disagrees with the system
call Execute(), which is used to run external programs.  You'll probably
get an odd-address exception guru if you do.

Be careful when linking (with GOTO) into and out of built-in menus.  You 
should not, for instance, link out of the Sysop, UserEdit, Subop, or 
Librarian menus, since they have special exits that can save changed 
config files.


Suggestion
----------
I suggest making your Run and NewShell commands resident (automatic under 
2.0).  Run is used once for every NIL program, and twice in a RAW or CON 
program along with NewShell:  Run is used once by the system call 
Execute(), and both are used in the command that is Execute()d.  Actually, 
come to think of it, Execute() may not know about resident commands under 
1.2/1.3.  I'm not sure.  Maybe put it in RAM: if your drive (whatever 
sort) is slow.  This is to reduce overhead.


Notes About DLG Doors
---------------------
DLG Pro, another Amiga BBS, uses similar doors.  If they do not access the
DLG userlog or data structures directly, you can use them with Falcon.  
You will need to figure out the conversion from their arguments to mine,
since I don't currently know anything more than their %1 corresponds to
my «FULLNAME».  Shouldn't be too hard, though.  You may need to set up a
directory or two, but nothing painstaking.

Apparently, DLG has a DF command that other programs can Execute() to type 
a file.  I understand that the DF command interprets their %x codes.  
Just replace their DF program with Type.  And, no, I do not interpret their 
%x codes.  You see, they don't seem to want to tell me what they are so 
that we could, say, form a standard interface.  Tom Conroy said something 
to the effect of "We don't want to give away trade secrets."  Unimpressed, 
I replied with a comment about his evidently expanding hat size.


Sample External Menu
--------------------
MENU External
    TWIT        M GOTO      MAIN
                G GOODBYE
    DISGRACE    S CON CM    "status full"
                I CON CM    "info"
                A CON CM    "avail"
    NORMAL      E RAW -     "rawedit \"some text file\""
                C BATCH     "cuss.fbat"
                P RAW -     "execute SomeRawGame_Setup_Then_Run «FULLNAME»"
    SYSOP       B NIL       "copy LOG:log.bbs LOGBACK:log.bak"
                N CON C     "" ; newshell
MENU Main
    TWIT        X GOTO      EXTERNAL

Editing the HELPDIR's externalhelp.bbs file would be up to you.



13.  Batch File
===============

You'll probably find a file called "fbatch" in your distribution archive.
Fbatch is the batch file I've used so far.  However, fbatch is going to be a 
problem.  It really only works in the ARP Shell, and the Arp Shell doesn't 
work under 2.0.  I'm going to have to dump it.  I think I'm just going to
distribute Falcon without an example batch file and let the user work it 
out, since it's bound to end up very personalized when they're through 
anyway.  As I've suggested elsewhere, you should take a look at Robert 
Williamson's Roof shell, which is meant for BBSs (FidoNet BBSs, to be 
exact).  However, I'm still going to include the documentation I wrote for 
fbatch as long as I'm including it.  Really, though, you'd be much better 
off writing you own.

Falcon's Batch File
-------------------
"FBATCH" is the file that runs my point (if you don't interface with 
FidoNet and you don't run any other schedules, you don't need fbatch or any
other batch file).  It is written for the ARP shell.  I'm not sure if it 
could be made to work under the regular CBM shell (which the ARP shell is a 
superset of).

The batch file and several of the example packer/mailer config files require 
BBS: to be assigned to the directory Falcon is run from, LOG: where you want 
the BBS's, the mailer's, and the batch file's log, MAIL: to the directory 
which holds the message area directories, LOGBACK: to where ever you want to 
keep backups of the log.bbs file, MAILIN: to the place where the mailer will 
put incoming mail packets and archives, and MAILOUT: to your MATRIX 
directory.  So put something like the following in your startup-sequence, 
(it's basically what I use with my 590HD):

    assign BBS:     DH0:bbs
    assign LOG:     BBS:
    assign LOGBACK: BBS:logs
    assign MAIL:    BBS:msgs
    assign MAILOUT: MAIL:matrix
    makedir         RAM:inbound     ; you may want to use a MAIL:inbound
    assign MAILIN:  RAM:inbound     ;   dir instead, esp. with big echoes

Note that the environment variable "fret" is set by Falcon on exit, usually 
based on schedules from sched.bbs.  It may be set to "quit" on a manual 
exit, or "exit" if it has been spawned from a front door (though in that 
case it hardly matters).  The type of environment variable is determined by 
the presence (or absence) of the CBMENV keyword.

Note that at least one event (newlog) has an alternative (commented out)
that would make use of the ARP Shell's pipes.  It is in the form of a 
$(date) command in this case, which inserts the result of the 'date' command 
into a filename.  In order to use this, one must have not only the ARP 
Shell, but must have PIP: mounted as well.  PIP: is a pipe that comes with 
ConMan that ARP also uses.  Instructions on its installation should be found 
in both the ARP and ConMan documentation.  It is not required, but it is 
useful.

The file can be run with an event name (ie. "run fbatch mail") and it should 
act as if Falcon had signalled for that event to happen.  Afterwards, it 
will return to Falcon or exit if called with the THENQUIT switch (ie. "run 
fbatch import thenquit").  Remember to set the S (script) protection bit.  
If not, you'll have to change the command to "run execute fbatch ...".



14.  Suggestions and Hints
==========================

 o  Run in "tiny" (WorkBench idiot bar) mode whenever you are not actively
    watching or using the program.  Scrolling a three bitplane hires screen,
    especially if it is visible, is very slow, not only because of the 
    actual data-movement, but also because displaying a three+ bitplane 
    hires screen steals CPU time and bogs down the system.  If you leave the 
    display open, the serial output will be slowed down visibly.  I can't 
    help this.  (For the same reason, you should always leave the 
    TRANSFER_TWOPLANES flag in your falcon.cfg file.)

 o  If you do have the full display going, do not keep the status window on.
    It partitions the scrolling, which also slows things down horribly.  Try
    it:  you'll see what I mean.  I can't help this either.

 o  If you want to remove the file areas altogether or restrict them to 
    registered users, you must remove all links to the File Menu or set them 
    to the appropriate level.  These links include, at present, the F and J 
    commands from the Main Menu, and the J command from the Message Menu.  
    You can do this like so in the menus.bbs configuration file:

        ; to remove
        MENU Main NOT F J
        MENU Message NOT J

        ; to restrict
        MENU Main PRIVIL F J
        MENU Message PRIVIL J

    See the documentation on menus.bbs for more information.

    Note that yanking up area 1's level is not sufficient to restrict access 
    to the file menu, because the user can always get into area 1.  Even if 
    they try to change areas, they can still hit return to drop back into 
    their current area (usually 1) when they see that no areas are 
    available.

 o  Do not use external message renumbering programs.  Unless they say they 
    will update Falcon's user pointers, chances are that they won't, and 
    your users will be left with inaccurate last-read pointers.

 o  Try using Robert Williamson's ROOF shell if you need scripts to do 
    something more complex than automatically running the BBS at startup.  
    My ARP-Shell-based scripts will be useless under 2.0, because the ARP 
    Shell does not work under 2.0, and 2.0 is due out in a few weeks at the
    time I'm writing this.  As Robert uses Falcon, among other things, you 
    should be able to work from his example scripts.  (NOTE:  At this time, 
    I don't think he's released a version (with samples) since receiving 
    Falcon.  Ask him...?)

 o  If you're running on floppies, use a reasonable number of disk buffers.  
    This will help with loading commonly-used overlays and with reading the 
    brief-help portion of the prompt for users with a help level of NOVICE.  
    Getting FaccII would be a good idea.  Another thing you should remember
    when you're running on floppies is that LIBS: must be assigned to a disk
    in a drive, or else the program will not be able to load the XPR 
    libraries.

 o  If you're running on any slow drive, most notably floppies (but some 
    hard drives too), you should increase your serial read buffer's size 
    (from Preferences).  Ideally, it should be big enough so that it won't 
    overflow while the protocol stops to dump some data to disk.  This 
    should also reduce or even prevent RTS/CTS pausing on high-speed modems, 
    which pause instead of letting the buffer overflow.  How big the buffer 
    should be depends on how fast the transfer is and how slow the drive is.  
    Experiment.

 o  Try to avoid modifying files and/or paths in file areas more often than
    you need to.  Scanning areas for new files is done by looking at the 
    directory, and if it has been modified since the last call, then the 
    entire directory is scanned to see if there are any non-"files.bbs" 
    files that have been modified since the last call (it's weird, but it 
    works well enough and works within the files.bbs concept).  Therefore,
    if you modify the directory, the entire thing has to be scanned (like
    the AmigaDOS List command would do) and that slows things down a bit.
    Modifying a file will, obviously, make it "new" even though it
    probably isn't.



15.  Miscellaneous/Technical Information
========================================

Workbench/Kickstart 2.0
-----------------------
Falcon works under 2.0.  It even works with wacky system fonts.  The last 
time I had someone run it under Enforcer in front of me, we could only find 
one hit, and it was a safe and easily-fixed bug (basically a strcpy(NULL,
NULL), in case you're wondering).  He's never reported any hits since then, 
but I don't know how often he runs Enforcer.


Overlaid vs. Pure Executables
-----------------------------
The executable file is actually about 30% larger than the entire memory 
required (data space included) during a waiting-for-call, tiny-WorkBench-
window situation because Falcon uses overlays for most sections (config file 
reader, each menu, the editors, etc).  They are loaded at need and unloaded
when not in use, which is sensible because most are mutually exclusive.  On 
a hard drive, the load time for each section should be practically nil.  
Someone using a floppy shouldn't notice too much, especially if they usually 
have a reasonable number of buffers.  Most sections, if not all, are less 
than 20K or even 10K.

However, if you are going to run Falcon several times at once, you will 
probably want the re-entrant/pure/resident-able version.  It takes up more 
memory if you're only running it once, but on subsequent invocations it only 
needs enough memory for the stack and variables/data.  If you need this 
version, please contact me and we'll see if we can get it to you.  I did not 
want to include it in the general distribution archive because it's a fairly 
sizable file and most people will not want it.


bf.library
----------
"Why do we have to have another library?" you ask.  Well, at the moment
Falcon is only really meant for a single-line system (although it can be
used for multi-line, albeit somewhat shakily).  However, it is being adapted 
for a secure multi-line environment, which will require the program to be 
broken in two:  first, a server program, which will read the configuration 
files and control access to message areas and such, and a client program, 
which will sign on with the server and actually run the system.  In order to 
avoid duplication of code between the two programs, a library with a single, 
re-entrant copy of the code was created.  Some of the functions are generic 
enough (ie. a fully-featured, re-entrant printf()) that I may make the 
library format public for doors to use.


Using a Nodelist
----------------
In order to access a nodelist from the BBS, you must have traplist.library,
version 4+, and the TrapList program that comes with it.  Unfortunately,
neither has been released to the general public.  *** Max has just announced
that TrapDoor 1.80 will be released on October 1st, which, coincidentally
enough, is the day I'm releaseing Falcon 1.00.  That's a convenient 
coincidence.  At any rate, if you've got the necessary stuff, and you set up 
the nodelist directory properly in Falcon.cfg, Falcon will start using the 
nodelist.


Refreshing the Display
----------------------
When Falcon refreshes the display when returning to full-screen mode from
tiny mode, what it does is print the last (1.25*lines_in_screen) lines that 
were displayed, or however many came after the last screen clear if that was 
more recent.  This can be problematical during a full-screen edit, since 
there aren't many "lines".  A "line" in this case is a string which ends 
with an end-of-line character, and there just aren't many output in most 
full-screen editors (including mine).  It may take a bit of time to print 
out what the BBS sees as a rather longish line which, will probably include 
much of your editing, depending on how large the review buffer is.  
Confused?  Oh well.


Editing File Lists
------------------
In case you want to edit the files.bbs file lists in your file areas, this
is how they are interpreted:

  - If line starts with illegal file start, or <space>, '=', or '-', it is 
    considered a comment.  Note that if you want to use ANSI color in the 
    comment, you may need to reset it at the start of every line because all 
    comments are initially set to cyan.
  - Otherwise, Falcon gets all characters up to the first whitespace and
    uses them as the filename, then gets the file size and date from disk 
    and displays them (or "MISSING ??-???-??" if it could not find the 
    file), then a '*' if file is new since last time file area was listed, 
    then displays the rest of the line as comment.  Note that the file 
    comment will be wrapped to fit a column underneath its normal position 
    if it is too long and the caller's screen is wide enough to accommodate 
    a decently-sized column (otherwise it'll just print the entire line all 
    at once).

Falcon considers the following to be illegal file starts:  "\:/#*?[]()><|".
Naturally, there are others, like carriage returns or escapes, but those are
the ones that may not have been obvious.  This is useful to know, since 
the files.bbs listing decides whether or not a line is a comment or a file
based on whether or not the first character of that line is an illegal file
start (as well as space, '-', or '=').  Therefore you can use those 
characters in a comment without having to put a space at the start.


The Quote File
--------------
The quotes.bbs file is made up of a number of quotes, separated by lines 
with nothing but "---" on them.  It is found in the TEXTDIR.

If the quotes.bbs file can't be found, it says:

        "A wise man knows when there is something wrong with his
         quoting facility."

The quote is selected by dropping in at a random position and finding the
start of the quote it drops into.  This results in larger quotes being
picked more often, but it's the simplest way to do it.


The Log File
------------
This file will not show up unless specified in Falcon.cfg.

It comes out in this format:

    <char> <datestamp>  <comment>

Where <char> describes the comment type:

    "?" = Program error
    "!" = User did something naughty
    "*" = Noteworthy user action
    " " = Nothing special

The datestamp is a message-style datestamp, with the date and time.

The comment is the actual reason the entry has been made.  It may be
indented somewhat:  2 spaces for things that occur while Falcon is
running, 2 more for things that happen during a call, and a little
more yet for transfer file lists.


Text Files
----------
When transmitting a text file, if Falcon encounters a ^B (ASCII 2) character,
it will toggle ^C breaking on or off, depending on what it is at that time.
The default at the start of the file is to permit breaking.  This is useful
if you want new users to sit through your entire warning/whatever to them,
but don't be a jerk and put one into the start of your 23K animated ANSI 
sequence.  If I get complaints about this sort of thing from users, I'll just 
take it out, since I'm more a user than a sysop and will side with them.

It should also be pointed out that some .bbs text files have .gbs 
counterparts.  These are displayed, if available, to users with ANSI.  If 
they aren't available, the usual .bbs file is sent, as it would be to a non-
ANSI user.


Help Files
----------
Menu help files have a special format.  Note that this only applies to help 
files specifically for menus, and not to text files used for, say, the long
help in FRED.  These help files are arranged in lines, as follow:

line 1:  Regular level help.  Each letter is checked to see if the
         is available to the user.  This text is read at program
         startup and cached, to avoid pauses.  For NOVICE level help
         a pause seems negligible, but for one line, it's annoying.
line 2:  Column width (note that this is only used for calculation
         of current line width and that each command must have
         spaces to pad to the column width).  This is needed because
         ANSI can make strings look longer to the computer than they
         are when displayed.
line 3+: Groups of three, like so:
         line A:  First letter of command, used to figure availability
         line B:  Brief help, out put in columns of width from line 2
         line C:  Line-long help.  Not used yet as of 0.27.  Should be 
                  less than about 70 characters

For example, to make a menu which would look like this in REGULAR level 
help...

        THE MENU: A B C D  ?
        Select:

...and like this is NOVICE level help...

        THE MENU: 
        A)Go Here   B)Go There  C)Go Home   D)Go Away   
        ?)This Help 

...you would have a help file (thehelp.bbs) that looked like this in the 
HELPDIR specified in falcon.cfg:

        A B C D  ?
        12
        A
        A)Go Here   
        Go to this place
        B
        B)Go There  
        Go to that place
        C
        C)Go Home   
        Go to your residence
        D
        D)Go Away   
        Go to hell

As you may have noticed, the name of the menu determines the name of its
help file.  It's always HELPDIR/<menu_name>help.bbs, with the one exception
of the Message Menu's msghelp.bbs file.


The Numeric Keypad
------------------
In some parts of the program, the numeric keypad has special functions for
the following keys: '0..9', '.', '-', and their shifted versions.  You
can use the number pad in the normal manner by typing control-NumL (the
left parenthesis on a 500/2000/3000 keypad, use control-'-' on a 1000) to
toggle modes.  You can also toggle modes on the fly by using the control key
with one of the keys above, to get what the key would be if the current mode 
was reversed.  The pad defaults to "special" mode.


Remote VT100 Keys
-----------------
The following VT100 key strings are accepted by the BBS and used where 
applicable:

    Cursor-Up               "<CSI>A"
    Cursor-Down             "<CSI>B"
    Cursor-Right            "<CSI>C"
    Cursor-Left             "<CSI>D"
    Shifted-Cursor-Up       "<CSI>T"
    Shifted-Cursor-Down     "<CSI>S"
    Shifted-Cursor-Right    "<CSI> @"
    Shifted-Cursor-Left     "<CSI> A"
    End (Keypad 1)          "<CSI>K"
    Home (Keypad 7)         "<CSI>H"

Where <CSI> is one of "<esc>[", "<esc>O", or ASCII $9b.


ANSI Used in Output 
-------------------
Falcon, if the appropriate modes are on, uses the following set of ANSI 
codes (where "<CSI>" is presently "<esc>["):

    Basic ANSI                                FRED Msg General
    ----------------------------------------------------------
    <CSI><n>C       move right n chars          *   *
    <CSI>H          home                        *   *   *
    <CSI><r>H       move to column 1, row r     *   *
    <CSI><r>;<c>H   move to column c, row r     *
    <CSI>K          clear from cursor to eol    *   *   *
    <CSI>J          clear from cursor to eod    *   *   *
    <CSI><???>m     color/style                 *   *   *

    The <???> field in the color/style code can be zero or more of the 
    following, separated by ";"'s:

        0 ...... Reset
        1 ...... Bold on
        5 ...... Blink on
        30-37 .. Change foreground color to n-30
        40-47 .. Change background color to n-40

(If anyone wants to know, the screen clear sequence I use is the following:  
"<ASCII 12><esc>[H<esc>[J" which works out to "formfeed, ANSI cursor-to-home 
code, ANSI clear-to-end-of-display code".  That should clear ANY screen.)

The following ANSI controls are not supported by all terminals.  They are by 
any Amiga term which uses the console.device.  Also JRComm (IBM-ANSI mode) 
for the Amiga, Telix for MS-DOS, and apparently ZTerm for the Macintosh.  
They are not required to use Falcon, but enhance its operation if you use 
certain modes.

    Special ANSI                              FRED Msg General
    ----------------------------------------------------------
    <CSI>M          delete one line             *   *
    <CSI><n>M       delete n lines              *
    <CSI>L          insert one line             *
    <CSI><n>L       insert n lines              *
    <CSI>P          delete one char             *
    <CSI><n>P       delete n chars              *
    <CSI>@          insert one char             *
    <CSI><n>@       insert n chars              *


Those "stat.dat" Files and the "systemstat.dat" File
----------------------------------------------------
Each area/stat.dat file caches (saves) the values one sees upon entry to the
Message menu.  These include the number of messages and the highest message
in that area.  It also includes two highwater marks should an echomail 
processor ever decide to use them, and a fair deal of expansion space for 
later usage.  The reason these values are cached is that is takes time to 
scan a directory to figure them out, especially if the program is running on 
floppies.  Such a scan is only done if the directory has been modified since 
the stat.dat file was last written out.

The systemstat.dat in the config directory holds the system's birthday, 
number of calls, last-user and current-user information, the most recent 
MSGID serial number and the number of messages entered to date.  Don't 
delete it if you can help it.



16. FidoNet-Specific Technical Information
==========================================

For people who care, and I imagine that excludes the majority of you, here 
are the ways Falcon supports various mail-related items:

Quoting
-------
  - New quotes are read in as lines a fair bit narrower than the usual 
    screen width of 80 (I know, a magic number, how hideous).  Then each 
    line has a space, at most two initials, a '>', and another space added 
    to the start.  Blank lines are left alone.
  - Old quotes are left alone.  As for identifying them, I look for a '>' in 
    the first 6 characters of each line.  Simplistic, but it works 
    remarkably well.  There is one exception:  it is not a quote is there is 
    a '<' before the '>', because "<grin>" is a common thing to find at the 
    start of a line.

Quoting a message from me with quotes from somebody else's message might 
look like this:

  (Left edge)
    |_______________________________________________________________
    |
    | >  SE> So how do you quote?
    | > 
    | > ^^^^^ Like this.
    |
    | SE> I hate your quoting style!  You are such 
    | SE> a moron!
    |
    | BF> It looks better than yours.
    |
    |I agree.
    |_______________________________________________________________

I currently prepend a header, like so:

    "In a message dated Wed 12 Dec 90 04:49, Brian Fehdrau wrote:"

I think I shall change that to:

    "On Wed 12 Dec 90 01:51, Brian Fehdrau wrote:"
                                           ^^^^^^ implies "to All"

    "On Wed 12 Dec 90 04:49, Brian Fehdrau wrote to Maximilian Hantsch:"
                                           ^^^^^^^^ not a reply

    "On 14 Dec 90 01:23:45, Maximilian Hantsch replied to Brian Fehdrau:"
                                               ^^^^^^^^^^ a reply

...and then again with a blank line, converting any original Fido two-space 
style datestamps ("dd mmm yy  hh:mm:ss") to one space to save a little room 
(oh boy, one byte).         ^^

I still haven't done this, though.


Netmail/Echomail Kludge/Control Lines
-------------------------------------
Falcon supports the following kludge lines:

    N E KLUDGE <parameters>
    - - ------------------------------------
    *   FMPT OrigPoint
    *   TOPT DestPoint
    *   INTL Dest.3D Orig.3D
    *   GATE: Dest.5D Orig.5D
    * * MSGID: Orig.?? SerialNumber.Hex8
    * * REPLY: Dest.?? SerialNumber.Hex8
    *   MSGTO: Dest.5D
    * * PID: Falcon <version> <number>


Notes on Kludges
----------------
  - .3D = Zone:Net/Node
    .5D = [Zone:]Net/Node[.Point][@Domain]
    .?? = Pretty much any kind of address.  Usually a .5D address, but could 
          very well be something like a UUCP site, like "weyr.fidonet.org".
  - Falcon can also read .5D as [Domain#][Zone:]Net/Node[.Point], but does 
    not write them that way.
  - Falcon will write the minimum amount of a 5D address that it has to.  
    Meaning, if it doesn't know the domain, it won't include one, and if the 
    point is 0, it'll be omitted because that would be redundant (since
    "zone:net/node" is equal to "zone:net/node.0").
  - Falcon does not currently do its own packing.  Therefore PATH lines
    aren't my problem.
  - Serial numbers generated by Falcon always increase.  If you want to know 
    exactly how they are determined, they are the C time() value (seconds 
    since a certain date), and incremented by one if that value has already 
    been used.
  - REPLY and MSGTO are mutually exclusive.
  - INTL's, FMPT's and TOPT's can have colons (ie. "INTL:") in them and 
    Falcon can still read them.  They will be written without, at least 
    until FTS-0001 says otherwise.  As a side note, any other keyword can be 
    read without a colon, though this is probably not encouraged.
  - INTL's can be .5D addressed (like GATE) and Falcon can still read them.  
    It will not, however, write them that way.
  - GATE is only included when the domains are both non-blank and do not 
    match.
  - Presence of a GATE or MSGID/REPLY/MSGTO combination does not exclude 
    INTL, FMPT, TOPT.  And it won't until somebody declares them obsolete in 
    favor of GATE/etc.  A little redundancy won't hurt too much, whereas a 
    message not getting to its destination might.
  - At the moment, I don't read origins to help find the originating node.  
    This is due to laziness, not an actual decision, although I don't really 
    trust origins anyway.
  - I do not intend to support EID and RID.  MSGID and REPLY do the job 
    better and easier.
  - I don't know if I'm doing GATE right.  I don't know what the actual 
    message (binary header) should be addressed to.


Datestamps
----------
Falcon supports two styles, configurable at run-time by the sysop.

    SEAdog:    "Wkd dd Mmm yy hh:mm"    ie. "Tue  1 Jan 91 01:23"
    Fido 11w:  "dd Mmm yy  hh:mm:ss"    ie. "01 Jan 91  01:23:45"



17.  Yet to Come
================

 o  The setup needs to be modified into a server-program/client-program
    arrangement.  You can probably run a multi-line system with Falcon, but
    there is no explicit support for it.  I've tried to make message-saving
    robust enough to work with a multi-line setup, but two users saving a
    message at exactly the same time, give or take a quarter second, could 
    probably still mess things up.  Also, the message area stats could be
    obsolete occasionally for one line (actually, this is standard behaviour
    for some programs, but I'd rather do it right when I get to it).  
    Therefore a server is required to track the number of messages and write-
    access to areas, not to mention other stuff line linking the lines for 
    chats and so on.  I've done some work on this, but none of it is actually 
    in the program you have.

 o  english.bbs is not complete.  One time, when I was less busy, I started
    exporting strings from the program into this language file, which could
    then be replaced later with a different language.  However, things came
    up and I only got a small amount of the text transferred.  I'll work
    on it later.  It's probably just as well, since the text came out of
    what is probably the only source file which doesn't change much anymore.

 o  Aliases or Alias message areas.  I'll either add an overall-alias to
    the user record, or perhaps just have Opus-style alias areas, where the
    user has the ability to enter the From: name of a message.  



18.  ICK!  BUGS!  (And other caveats)
=====================================

Some known bugs¹ and caveats as of 17 Sep 91:

  - Don't ARun the program under 2.0.  ARun, I think only with the NOIO
    option set, messes up if the program tries to call the Execute()
    function.  Messes up, as in Gurus.  This is an ARun thing, not a
    Falcon thing, but I thought you should know.
  - Because of the ^A kludge lines written out when an echo or matrix
    message is saved, U)pdating such messages is currently not at all
    safe to do.  Regular users are banned from doing it, and you should
    not do it either.  I'm going to have to find some way to work
    around this.  For the time being, you can do this if you need to
    edit an echo or matrix message:  start a new message (enter or
    reply), import (^Q^F) the ???.msg file of the message to be updated,
    paste it in, kill the header and kludge lines (don't worry, the 
    unprintable bits of the binary header didn't get read in), make any 
    changes, save it, and delete the original.  It's messy, but it has 
    the desired effect.  If you're calling from remote, just ASCII 
    capture the message and re-upload it instead of importing it.
  - The first mouse click on the Falcon screen is supposed to be absorbed
    (as in MicroEmacs) so that the window can be activated without
    messing anything up.  Sometimes the first click doesn't need to be
    absorbed, though, and that can lead to annoyance when your it-should-
    be-noticed-damn-it click doesn't do anything.  But no harm is done.
  - Not really a bug, but the Bytes/sec field in an XPR _send_ can be
    awfully high, at least at first.  This is because the output is
    buffered, and the entire first block _seems_ to XPR to have been 
    sent out in the blink of an eye.  So we're talking about 1024 
    bytes/sec on a 2400 baud transfer in the first block.  It'll smooth
    out as more blocks are sent, but it'll always be high.  The after-
    transfer CPS rates shown underneath a terminal transfer and in the
    S)tatus command for a BBS transfer are more accurate.  Unless you
    want clunky & chunky Zmodem transfers, this one won't be "fixed".
  - For some reason I haven't figured out yet (obviously), FTerm sometimes
    misses a short block of characters (like 5-10).  Beats me why, but
    then again, I'm not really here to write a terminal anyway.
  - Download limits don't actually do anything (download capability is
    instead based on time).  I no longer like the way I was originally
    going to do them, so they don't do anything just now.
  - Falcon disables DOS requesters so that disk-full errors and the like 
    will simply return an error to Falcon without making it hang while it 
    waits for a gadget click from the user.  This is good, because it means 
    your BBS will never lock up, but it's bad because a software error will 
    always go straight to the blinking red alert instead of possibly going 
    to the task-held-etc. requester.  In other words, even a tame error like 
    a divide by zero will take the entire system down.  Now, Falcon is 
    really quite clean, but it could die through no fault of its own, as 
    another program could be randomly trashing memory which happens to 
    belong to Falcon.  Just so you know.  There's nothing to be done, 
    really.  It's a problem every BBS program has.


¹ Some bugs are mentioned because they may be a while in being fixed.
  The rest are just to inform the new sysop of what I'm aware of.
