









                          BBBS v3.42 1s SysOp Manual





              Documentation by Vincent Danen, copyright (c) 1998












                            The BBBS System Operator Manual - Welcome!        1


The BBBS System Operator Manual - Welcome!
_______________________________________________________________________________

oooooooooooooooo    oooooooooooooooo    oooooooooooooooo          ooooooo o
 BBBBBB""""BBBBBBo   BBBBBB""""BBBBBBo   BBBBBB""""BBBBBBo    oBBBBB""""BBBo
 BBBBBB     BBBBB"   BBBBBB     BBBBB"   BBBBBB     BBBBB"   BBBBBB       "B
 BBBBBB   oBBBB""    BBBBBB   oBBBB""    BBBBBB   oBBBB""    BBBBBBBoo     "
 BBBBBBBBBBBBooo     BBBBBBBBBBBBooo     BBBBBBBBBBBBooo     "BBBBBBBBBBBoo
 BBBBBB"   "BBBBBo   BBBBBB"   "BBBBBo   BBBBBB"   "BBBBBo     "BBBBBBBBBBBBB
 BBBBBB      BBBBBB  BBBBBB      BBBBBB  BBBBBB      BBBBBB        """BBBBBBBB
 BBBBBB      BBBBBBB BBBBBB      BBBBBBB BBBBBB      BBBBBB Bo         BBBBBB"
 BBBBBB     oBBBBBB  BBBBBB     oBBBBBB  BBBBBB     oBBBBBB BBBo      oBBBBB"
 BBBBBBBooBBBBBBB"   BBBBBBBooBBBBBBB"   BBBBBBBooBBBBBBB"   oBBBBBBBBBBBB""
"""""""""""""""     """""""""""""""     """""""""""""""          """"""

                                Version 3.42 1s
             Copyright (c) 1990-1999 Kim Heino and Tapani T. Salmi

                            System Operator's Manual

                            BBBS Table of Contents 
                            BCFG4 Table of Contents
                                 Quick install     

 This doc is bit out-of-date. An update will be available at www.bbbs.net soon.

2        The BBBS v3.42 1s System Operator Manual - Table of Contents


The BBBS v3.42 1s System Operator Manual - Table of Contents
_______________________________________________________________________________

BBBS Documentation Table of Contents
------------------------------------

1.  Installing BBBS
    1.1  First-time installation of BBBS
2.  Configuring BBBS
    2.1  Configuring BBBS - an overview
    2.2  The BCFG4 Configuration Program
    2.3  User access groups
    2.4  The file areas
    2.5  External programs: external.bbb
         2.5.1 Archivers: [af_*] section
    2.6  BBBS groupmail functions
    2.7  Internet access configuration
    2.8  The BBBS chat system
    2.9  The BBBS color palette
    2.10 bbbstxt-files: language configuration
    2.11 Overview of the files BBBS users

3.  Running BBBS
    3.1  The BBBS command line functions
    3.2  The waiting for caller screen
    3.3  Local SysOp keys
    3.4  The BTERM terminal emulator
4.  BBBS and FidoNet Technology Networks
    4.1  Introduction
    4.2  Nodelist definitions: [nodelist] section
    4.3  Echomail definitions: [echomail] section
    4.4  Node definitions: [nodes] section
    4.5  Tick/File-echo definitions: [ticks] section
    4.6  Agnet/QWK definitions: [agnet] section
    4.7  Badecho definitions: [badecho] section
    4.8  Badtick definitions: [badtick] section
    4.9  Netmail bouncing/remapping definitions
5.  BBBS and TCP/IP (Internet) Networks
    5.1  Introduction
    5.2  BBBSD: The BBBS Network Daemon
6.  BZ: The BBBS Programming Language
    6.1  Introduction to the BZ programming language
    6.2  Expressions
    6.3  Functions and Variables
    6.4  The functions in BZ49 runtime library
    6.5  The variables in BZ49 runtime library
    6.6  Other script languages in BBBS
7.  Operating System Considerations
    7.1  BBBS for IBM PC-DOS
    7.2  BBBS for IBM OS/2
    7.3  BBBS for Microsoft Windows NT/95
    7.4  BBBS for UNIX clones
    7.5  BBBS for Amiga
    7.6  OS environment variables
8.  Appendices
    8.1  Frequently Asked Questions
    8.2  About regular expressions (regexp)
    8.3  Wildcards
    8.4  The MG Reference Manual

          The BBBS v3.42 1s System Operator Manual - Table of Contents        3


    8.5  The BBBS license, prices and order form
    8.6  References

 BBBS is a copyright of Kim Heino and Tapani T. Salmi, Copyright (c) 1990-1999

4        First-time installation of BBBS


F i r s t - t i m e   i n s t a l l a t i o n   o f   B B B S 
_______________________________________________________________________________

First of all, thank you for choosing BBBS, the powerful, all-in-one BBS
software solution!

Creating a working BBS system with BBBS is very simple. As you are reading
this, you probably have already extracted the BBBS distribution package to a
directory. This directory is called the "BBS directory". It is probably a good
idea to name it something like c:/bbbs, if for nothing but simplicity's sake.

To get a minimal configuration, you will need to run bcfg4 1, the
BCFG4 configuration program. You can do a lot of configuration there, but for
starters you will just have to configure the name of your BBS and your own
name. Other options should be ok at their default values, but you can check
them all if you like. If you run into trouble, you can at any time request help
with the F1 key.

When you are finished with BCFG4, select exit and save and wait for BCFG4 to
save the configuration you just created. Depending on how many conferences you
created (and a lot of other things), the saving procedure can take a short time
or a very long time. Remember that patience is a virtue!

When BCFG4 is finished, you have a working configuration. Now all you need to
do is log in to the system once to register yourself as the system operator.
BBBS can be run in local mode by executing it with the command line bbbs 0. The
first user that registers into the system will be the main system operator or
"user 0", with access to everything. After you have done this, you have a fully
functional setup.

To get the most out of BBBS, though, you will need to do a bit more
configuring. Just a few things you might like to check are if your menu files
are ok, what kind of file areas you would like to have, if the
user access configuration is ok and especially if external programs, such as
archivers work. But otherwise, BBBS is now installed. Have fun!

For easy reference, you may wish to view the documentation in a different
format. This can be easily accomplished by issuing the following commands:

  copy bag.exe ag2html.exe
  ag2html sysop.gui >sysop.htm
    - this will create an HTML file.
  copy bag.exe ag2doc.exe
  ag2doc sysop.gui >sysop.doc
    - this will create an ASCII file with formatting.
  copy bag.exe ag2txt.exe
  ag2txt sysop.gui >sysop.txt
    - this will create an ASCII file without formatting.
  copy bag.exe ag2ipf.exe
  ag2ipf sysop.gui >sysop.ipf
    - this will create an OS/2 IPF (Information Presentation Facility) file
      that can be compiled by ipfc (from the OS/2 toolkit) into an OS/2
      .INF file.


If you are using UNIX and BBBS binaries are not in your PATH-environment then
you have to start BBBS with command ./bbbs. The same applies to all BBBS
binaries.

                                         Configuring BBBS, an overview        5


C o n f i g u r i n g   B B B S ,   a n   o v e r v i e w 
_______________________________________________________________________________

BBBS, being a comprehensive, all-in-one system, has a lot of features and
therefore also has a lot to configure. The basic things are configured with the
BCFG4 Configuration Program, the rest with ASCII-format text files residing in
your BBBS-directory, which can be edited with your favorite editor or with the
BBBS's internal mg editor.

The most important one of these is the file groups. It is used to define user
access groups. Groups are the basis of BBBS security, so it is very important
that you have a thorough look into the file and how it is formed.

A set of important files are also the 'filedir*'-files. These are used to
create the file areas in your BBBS system. The BBBS filesystem, File/4, is a
very powerful "os-like" filesystem, with tree-structures and file manipulation
commands that are familiar from most operating system shells.

A lot of miscellaneous configuration items are in the external.bbb-file. In it
resides the configuration of external programs, such as archivers and
protocols. Also, a lot of configuration related to networking with other BBS
systems can be found in this file.

The configuration of BBBS groupmail features resides in the alias.bbb-file.
This is where things like mailing lists and comment receivers are defined.

BBBS has also a lot of internet access tools. The behavior of BBBS in internet
and other TCP/IP-networks can be defined in the file inet.bbb.

The BBBS chat system is also a very powerfull, channel-based one. The available
channels and feelings can be configured with the files in the
feelings-directory, defined in BCFG4.

In addition to these configuration files, there are also a lot of other files
that are used to do all sorts of miscellaneous configuration.

Examples of all configuration files come with the distribution package. In
addition to the examples in this manual, also refer to these files, as they are
pretty straightforward and self-explainatory.

6        The BCFG4 configuration program


T h e   B C F G 4   c o n f i g u r a t i o n   p r o g r a m 
_______________________________________________________________________________

The BCFG4 configuration program is used to do most of the configuration in
BBBS. The BCFG4 interface is very easy to use. If you run into trouble or do
not understand something, the F1 key will give you immediate help.

The BCFG4 program is called bcfg4. The calling convention of this program is
simple:

bcfg4 [node]

Where node is the number of the BBBS node you want to configure. In BCFG4, the
global configuration is always the same regardless of the node specified, the
local configuration is specific for each node.

If you specify "bad" as the node-parameter, then BCFG4 will scan your
badecho-directory for nonexistant echos and create them according to the rules
in the badecho-section of external.bbb-file, if there is at least one "unnamed"
conference in your conference configuration.

The things you'll probably want to check are:
  - The general stuff
  - The global toggles
  - The conference configuration
  - The modem setup for each node
  - If you want to have networks, the FidoNet configuration

Otherwise, the default values should be pretty much OK. You can (and should)
go through everything, though, just to make sure.

                                 The GROUPS-file: defining user access        7


T h e   G R O U P S - f i l e :   d e f i n i n g   u s e r   a c c e s s 
_______________________________________________________________________________

BBBS's powerful user access management is based on groups. Groups are
collections of other groups with a distinctive name. The groups you define are
global. That is, you can use them anywhere in the system. In every system you
will most likely run into a situation where you need groups. Just one of them
is when you need to create a "private" conference or a "news" conference. This
is all very easy with groups. All you need to do is to type a few lines.


Defining general groups

Groups are defined in the file groups, residing in the BBBS-directory. The
format of the file is as follows; blank lines and lines beginning with a
semicolon (';') are ignored:

name_of_group:group1{,group2{,...}}

As you can see, a group contains only other groups. Every user is a member of
the groups called all and first.last, where first is the first name of the user
and last is the last name. So, to define a group called bz with the users "Kim
Heino" and "Tapani Salmi", you write:

; Creating a simple general group with two users:
;
bz:kim.heino,tapani.salmi

Then, to create a group simka with the members of the bz-group and also the
users "Pertti Heikkinen" and "Rune Johansen", you would write:

; An example of creating a group called 'simka' with another group:
;
simka:bz,pertti.heikkinen,rune.johansen

Group names that include an exclamation mark ('!') have a special meaning: such
groups include all members of the group left of the exclamation mark, except
the members of the group at the right side of it. For example, the group
fsysop!bz contains all users of the group fsysop, except the members of the
group bz. A shortcut for all!foo is !foo. An example:

; Example of using exclusive groups:
;
simka:bz,pertti.heikkinen,tuomo.soini,rune.johansen
finnish:simka!rune.johansen
;
; Another example; group true has persons that are members of groups foo
; and bar:
;
foo=kim.heino,tapani.salmi,kalle.soiha,olli.trm,sami.virtanen
bar=rune.johansen,kim.heino,olli.trm,matti.luoma
temp=!foo,!bar
true=!temp
;
; So, the group true contains the users Kim Heino and Olli Trm.
;

Remember that if you try to create group foo with the line:


8        The GROUPS-file: defining user access


foo:all!kim.heino,all!tapani.salmi

The result is that everybody is a member of the group foo, since they are
members of the first group or the second group and the group foo is the two put
together. The correct way to do this is would be:

bz:kim.heino,tapani.salmi
foo:all!bz
; or foo:!bz

Remember also that the group foo!foo has no sense: it is an empty group.

Another group name that has a special meaning is any group with a string like
@yymmdd added to it, where yymmdd is a date (yy specifies the year, mm the
month and dd the day). Groups like this have effect in the group they are being
added to only until the specified date is reached. 14 days before the date is
reached, the members of the group receive a message that their access in a
group will soon expire. When the date is reached, an exclamation mark is added
to the group name. An example:

; Example of a group with a member that will exist only for a specified
; time:
;
kids:toni.saari,samuli.suominen,olli.trm@990903
;
; At 20.8. 1999, the line will change into:
;
; kids:toni.saari,samuli.suominen,olli.trm@990903!
;
; Finally, at 3.9. 1999, user Olli Trm will be removed from the group
; and the line will change into:
;
; kids:toni.saari,samuli.suominen

There are also so-called "unit" groups. These are defined as <x# or >x#, where
x is a letter (see below) and # is a number. For example letter 'a' defines an
age group. Every user whose age is under 18 years, belongs into the group <a18.
Likewise, every user whose age is over 17 years, belongs into the group >a17.
An example:

; Example of a group with age definition:
;
kids2:samuli.suominen,<a9
;
; In addition to the user "Samuli Suominen", everyone whose age is
; under nine years belongs into the group kids2.

The unitgroups are:

"<a#" matches users younger than # years, ">a#" older
"<c#" called less than # times, ">c#" more
"<r#" read less than # messages, ">r#" more
"<w#" written less than # messages, ">w#" more
"<u#" uploaded less than # kilobytes, ">u#" more
"<d#" downloaded less than # kilobytes, ">d#" more
"<p#" uploaded less than # files, ">p#" more
"<o#" downloaded less than # files, ">o#" more
"<l#" user has limit-value less than #, ">l#" more


                                 The GROUPS-file: defining user access        9


Groups are also cumulative. That is, when you have created a group on one line,
creating it "again" on an another line simply adds to the already existing
group. The simka group defined above could have also been defined like this:

; Another example of creating a group called 'simka'.
;
simka:bz
simka:pertti.heikkinen,rune.johansen

This is good to remember as a single line in the groups file can only be 1023
characters in length. Remember also that the groups-file is read from top to
bottom.


Restricting conference access with groups

For every conference you generate, there is also a set of groups, defining who
can do what in the conference. Lets say you generate a conference called chat.
For it, there are also four groups:

chat@   - members cannot read or write the messages in the conference.
chat@r  - members can only read messages in the conference.
chat@w  - members can both read and write messages in the conference.
chat@s  - members have SigOp access in the conference.

By default, all users are members of the chat@w-group, so they have full read
and write access to the "chat"-conference. An example: to have only the members
of the group simka and user "Kalle Soiha" be able to read the conference called
"BBBS.Simka", you would write:

; An example of how to restrict conference access:
;
; First disallow everyone to read the bbbs.simka-conference:
;
bbbs.simka@:all
;
; Then allow group "simka" and the user "Kalle Soiha" to read and
; write into it:
;
bbbs.simka@w:simka,kalle.soiha

But what if you have a lot of network areas in your BBS and would prefer not to
have the members of group newbies write into these conferences, only read? One
way to do this would be:

; A bad example of limiting access from a lot of conferences:
;
sf.aloittelijat@w:all
sf.aloittelijat@r:newbies
sf.amiga@w:all
sf.amiga@r:newbies
; etc. ad nauseam

The BBBS group system offers a much quicker way to achieve this. You can create
a group with a regular expression. There are four kinds of regexp groups:

name@=regexp   - Members of the group cannot read or write any messages
                 to conferences matching the regular expression
                 "regexp".

10       The GROUPS-file: defining user access


name@r=regexp  - Members of the group can only read messages from
                 conferences matching the regular expression "regexp".
name@w=regexp  - Members of the group can both read and write messages
                 to conferences matching the regular expression
                 "regexp".
name@s=regexp  - Members of the group have sigop access to conferences
                 matching the regular expression "regexp".

"name" can be any string you like, but it should be something that has
something to do with the actual function of the group. Note, that "name" is NOT
the name of the regular expression group. It is just an unique string that is
part of the name. The real name of the regexp group name@r=regexp is name@r.

As you probably have already guessed, regexp groups can be very powerful
indeed, though they can give you a major headache if you don't know a lot about
regular expression. It is very important to completely understand what regexp
is. "Normal" OS-shell wildcards like '?' and '*' are part of regexp, but they
have a completely different meaning in it.

As an example, let's see how we can easily solve the FidoNet access problem
with regexp groups:

; The correct way to limit access from a lot of conferences:
;
nonewbies@w=^sf\.:all
nonewbies@r=^sf\.:newbies

Notice the power of the regular expression. With just two lines, the
write-access of group newbies is removed from all conferences beginning with
the string "SF.". It doesn't matter how many conferences there are, the regexp
group automatically applies to all conferences matching the expression given.

Actually, as by default every user has read and write access to all
conferences, the first line in above example is redundant:

; The shortest way to limit write access from a lot of conferences:
;
nonewbies@r=^sf\.:newbies

Remember that the last specified conference group will take effect, not the
most "powerful" one; that is, if you first give a sigop access to a certain
group, and later on in the file give the same group a read-access, the group
will have only read-access, NOT sigop-access. This is also true for
regexp-conference groups.


List of all predefined groups that cannot be reassigned:

Group name               Members
=======================================================================
all                      all users, always.
firstname.lastname       user with the name "Firstname Lastname".
foo!bar                  users who are members of the group foo, but
                         not the group bar.
!foo                     users who are not members of the group foo.
>x#                      unit groups
<x#                      unit groups
account                  users who have an account defined and have
                         some credit/money left.

                                 The GROUPS-file: defining user access       11


nomoney                  users who have an account defined, but don't
                         have any credit/money left.
noaccount                users who don't have an account defined.
limit#                   users who have the limit value #.
sys#                     users who have the sysop access #.
node#                    user is in node #.


List of all groups that can be reassigned:

Group name               Who should be members?
=======================================================================
conf@                    users who have no read or write access to
                         conference conf.
conf@r                   users who have only read access to the
                         conference conf.
conf@w                   users who have both read and write access to
                         the conferece conf.
conf@s                   users who have sigop access to the conference
                         conf.
conf@=regexp             users who have no read or write access to
                         conferences matching the regular expression
                         regexp.
conf@r=regexp            users who have only read access to the
                         conferences matching the regular expression
                         regexp.
conf@w=regexp            users who have read and write access to the
                         conferences matching the regular expression
                         regexp.
conf@s=regexp            users who have sigop access to the conferences
                         matching the regular expression 'regexp'.
nochat                   users to whom sysop should always be
                         unavailable for chat.
okchat                   users to whom sysop should always be available
                         for chat.
nonode                   users to whom members of other nodes should
                         always be unavailable (i.e. users who should
                         not be able to send node messages).
nocreate                 users of this group can't create new chat
                         channels.
nofeel                   users who should not be able to use feelings.
okuser                   users who should be able to log in during a
                         "nouser"-event.
ftp                      users who should be allowed to use the main
                         menu command 'ftp' to FTP out.
url                      users who should be allowed to use the main
                         menu command 'url' to URL out.
rlogin                   users who should be allowed to use the main
                         menu command 'rlogin' to rlogin out.
telnet                   users who should be allowed to use the main
                         menu command 'telnet' to telnet out.
finger                   users who should be allowed to use the main
                         menu command 'finger' to finger out.
hunt                     users who should be allowed to use the main
                         menu command 'hunt' to play Hunt.
hack                     users who should be allowed to use the main
                         menu command 'hack' to play NetHack.
irc                      users who should be allowed to use the
                         BBBS groupchat to interface with the Internet Relay

12       The GROUPS-file: defining user access


                         Chat.

                                           Defining file areas in BBBS       13


D e f i n i n g   f i l e   a r e a s   i n   B B B S 
_______________________________________________________________________________

The BBBS filesystem, File/4, is a bit different than the filesystems on most
systems you've seen. File/4 has a tree-like structure and is based on a command
shell, so users familiar with most OS shells should feel pretty much at home.

The core of File/4 is the virtual directory structure defined in
filedir*-files. Virtual directory structure can but need not be the same as the
real directory structure in your hard disk. Individual directories are in turn
set up with descript.ion-files and the BBBS group system.

14       The directory structure: filedir*-files


T h e   d i r e c t o r y   s t r u c t u r e :   f i l e d i r * - f i l e s 
_______________________________________________________________________________

The virtual directory tree for File/4 is created with filedir-files in your
BBS root directory. This is the directory structure that the users see when
browsing your file areas. Filedir-files have a running number as their
extension. There are three kinds of filedir-files. For each type of
filedir-file the extension has a different meaning. The different types are:

1) The filedirg-files (named filedirg.nnn, starting from 000). These
   are used to define the global file directories. Global file
   directories are always added to the directory structure. The
   extension number in filedirg-files has no special meaning, but you
   can have multiple filedirg-files, if you have large fileareas and
   want to keep different kinds of directories in different
   filedirg-files.

2) The filedirn-files (named filedirn.nnn, starting from 001). These
   are used to define directories specific for each node. For example,
   directories that should be available only for node 1 should be
   placed into the file filedirn.001. The first such line that
   the user can write to in the filedirn-file defines the "hold"-directory
   for that node and it must exist. Hold directory is used by the
   users to temporarily hold files which they want to download or otherwise
   handle. If you do not create a hold directory for a node, BBBS will
   complain "hold not found" when a user enters the fileareas. Therefore,
   you'll need a filedirn-file for each node you want to be able to access
   files. For things to be universal in all BBBS systems, please name your
   hold directory /tmp.

3) The filedirc-files (named filedirc.nnn, starting from 000). These
   are used to define directories specific for a certain conference.
   For example, the file filedirc.012 specifies directories that are
   added to the directory structure only when the user is in conference
   number 12.

The structure of all filedir-files is simple. Each line of the filedir-file
specifies one directory entry. A single entry should consist of three fields:

       virtual_directory   real_directory   description_and_flags

Virtual directory is the name of the directory that the user sees when browsing
the file areas. It should be written in lower case. Creating a directory like
/Windows/Games will not work, it will only show the directory /windows and not
its subdirectories.

Real directory is the actual directory on your hard disk or CD-ROM where the
files belonging to this directory should be stored. You must create these
directories.

It is very important that you use a forward slash ('/') as the directory
separator in BOTH virtual directory and real directory fields and NOT a
backslash ('\'). This is because backslash is used as an escape character in
BBBS. Also, it is very recommended that you use only lowercase characters in
virtual directory pathnames.

Description is simply a short description of what kind of files the directory
contains.


                               The directory structure: filedir*-files       15


Flags are very important: they are used to specify various things for the
directory. One of these is the directory access. By default, everyone can read
the files in every file area. To define which groups are allowed to read and/or
write from/to the directory, the following flags can be used:

@r:group1{,group2{,...}}    (specified groups are given READ access to
                             the directory)
@b:group1{,group2{,...}}    (specified groups are given BROWSE access
                             to the directory)
@w:group1{,group2{,...}}    (specified groups are given WRITE access to
                             the directory)
@rw:group1{,group2{,...}}   (specified groups are given both READ and
                             WRITE access to the directory)
(@wr flag is synonymous to the @rw flag)

READ access means that the users belonging to such a group can only read files.
That is, they can type or download files in the directory. WRITE access allows
users to also delete or move the files in the directory. Therefore, users
should normally have only READ access to most directories.

The @e-flag, when added to the flags-field of the directory, is used to prevent
new files scanning for that directory. This is useful for directories that
don't change, like CD-ROMs.

By default, BBBS uses a file called descript.ion in the directory's real
directory as the description file for the directory. You can change this with
the @0 and @1-flags. The difference is that with @0, the file size and date are
read from the disk, with @1 they are read from the descript.ion-file. This is
useful with CD-ROMs.

For example, if you specify this in your filedir-file:

/                c:/root/             Root directory
/graph           c:/pictures/         Assorted pictures
/graph/people    c:/pictures/faces/   People @0c:/descs/faces.desc

BBBS would search the descriptions for files from the files
c:/descs/faces.desc, instead of c:/pictures/faces/descript.ion.

Note how the root directories for the directories /graph/people and /graph have
to be specified. Otherwise they would not show up in the directory listing.

Also, the description output can be formatted with the @n and @@ flags. @n
generates a single line feed to the description and the @@ creates one
'@'-character.

If a line in a filedir-file begins with a dot, then the filename after the dot
(separated with a space) must exist or the directory entries after the dot-line
will not be included to the directory tree. This feature can be used with
removable media, such as a CD-ROM. You can have one directory for all your
CD-ROMs as long as you define correct dot-lines to ensure that the disk in the
CD-ROM drive is autodetected.

16       Setup of directories: the descript.ion-files


Setup of directories: the descript.ion-files
_______________________________________________________________________________

Descriptions for files in a File/4 directory are stored in a 4DOS-compatible
descript.ion file. They can have a "hidden" attribute, but not read only, as
BBBS needs to rewrite the file from time to time. The format of a descript.ion
file is simple:

                        filename  description_and_flags

Description is simply the description for the file. If there is a description
for a file that does not exist on the disk, then it is displayed in the
directory listing, but is marked "offline" by BBBS. In the description, some
flags can be used:

@r:group1{,group2{,...}}
   Give READ access to the specified groups for this file. Members of
   groups with READ access can read the file, that is, they can download
   or type it.

@w:group1{,group2{,...}}
   Give WRITE access to the specified groups for this file. Members of
   groups with WRITE access can write to this file. That is, they can
   for example delete it, if this has been enabled in BCFG4. Having a
   WRITE-access to a directory overrides the read-only-access on a single
   file.

@p:group1{,group2{,...}}
   Make the file PRIVATE for the specified groups. Only the members of
   these groups can see this file, except for users that have a WRITE
   access to the directory that the file is stored in.

@@
   Write a single '@'-character to the description at this point.

@n
   Insert a new line to the description at this point.

@f
   Make this file free. Free files can be downloaded by all users if
   they have at least READ access to the directory. Free files can be
   downloaded even by users without download access. You should make
   especially useful files, like virus scanners, off-line mail programs
   and the BBBS, free so that all users can download them immedately.

@ltruefile
   The file is a link: the real file is stored at the directory pointed to
   by truefile. The original file should still exist (use 0-byte files).
   Note that truefile can also be a link to some other file. If you use a
   lot of links, remember to run BLINKFIX daily.

@adate
   The date date should be used as the file's date, specified in
   yymmdd-format. This is used in description files referred to via
   a @1-flag in the filedirg-files.

@ssize
   The file should be marked as size bytes long, no matter what.
   This is also used with the @1-flag.

                          Setup of directories: the descript.ion-files       17



@e
   The file will not be included to new file scan.

There are two special files that can be used to format the directory list
output. These files are "." and "..". You can specify multiple entries for
them. The description for the file "." is displayed in the directory list
as-is, without the dot. Files before and after the "."-file are sorted
separately by BFILSORT. The description of the file ".." is displayed right
after user changes to this directory, and again, without the ".." prefix.

Example:

.. The current BBBS version is 3.42 1s.
.
. The main files are:
.
bbbs_d.zip The BBBS executables for PC-DOS. @d223 @f
bbbs_2.zip The BBBS executables for IBM OS/2. @d543 @f
.
. Some other files:
.
bbbshelp The BBBS help file in English. @d72 @f

18       Configuring external things: the external.bbb-file


Configuring external things: the external.bbb-file
_______________________________________________________________________________

The external.bbb-file is used to configure most things that can be considered
"external". This includes archivers, external protocols and some
networking configuration.

The external.bbb-file is divided into sections. A section begins with the name
of the section in brackets ('[' and ']' characters) and continues until another
section starts. Like in all BBBS configuration files, empty lines and lines
beginning with a semi-colon (';') are ignored.

You can also implicitly force a certain section be used only if a certain
version of BBBS is run. This can be accomplished by naming the section
[section.os]. os can be any of the following, depending on the version of BBBS
you wish to use those definitions with:

os2        BBBS/2, the OS/2 version.
nt         BBBS/NT, the Windows NT/95 version.
dos        BBBS/D, the PC-DOS version.
sunos      BBBS/SUM and BBBS/SOS, the SunOS versions.
irix       BBBS/IRX, the Irix version.
hpux       BBBS/HP, the HP-UX version.
ultrix     BBBS/U, the Ultrix version.
sco        BBBS/SCO, the SCO UNIX version.
solaris    BBBS/SOL, the Solaris version.
unixware   BBBS/UW, the UnixWare version.
linux      BBBS/LiI, BBBS/LiS, BBBS/LiA, the 80386/SPARC/Alpha Linux version.
freebsd    BBBS/FBI, the FreeBSD version.

Note that the OS-specific sections (such as [af_pack.os2]) must be listed
before "global" sections (such as [af_pack]), as BBBS will use the
configurations from the first usable section it encounters.

                                   external.bbb: configuring archivers       19


e x t e r n a l . b b b :   c o n f i g u r i n g   a r c h i v e r s 
_______________________________________________________________________________

The archivers BBBS uses are configured in the external.bbb-file, in four
sections. In all sections one line defines one archiver: line #1 for archiver
#1, line #2 for archiver #2 and so on. For each archiver, all sections must be
defined. The character - in any line means that archiver is disabled.

The sections used are:

[af_ext]

In this section, the extensions used by the archivers are configured. The
extensions specified here are also used to identify the archiver used when the
user information is listed in the user editor.

[af_ident]

This section defines an unique "fingerprint" for each archiver. You need to
specify the offset of the fingerprint (starting from 0) and of course the
indent bytes, in hexadecimal, separated with a comma. If the indent bytes are
found from the specified offset in any file, then that file is assumed to be
packed with the archiver with the corresponding indent bytes.

[af_pack]

This section specifies the OS command string used to pack a single file into an
archive.

[af_unpack]

This section specifies the OS command string used to unpack a file or a set of
files from the packet to the current directory.

For the af_pack and af_unpack sections, you can use the standard
external.bbb meta characters to specify various things, like the name of the
archive.

If you add or remove archivers, you should also remember to edit the line 359
in your bbbstxt-files to reflect your archiver setup. Otherwise your users
might select archivers that are not available. In the bbbstxt-file, the
archiver names are separated with a slash ('/'). To add an archiver, simply
write an appropriate name at the end of the list. If you want to disable an
archiver, then just remove the appropriate archiver's name, but NOT the slash,
unless you remove it also from your external.bbb.

Note! In all command lines you should use the directory separator of your
operating system!

Example:

; Example of a single archiver definition:
;
[af_ext]
zip
;
[af_ident]
00,504b
;

20       external.bbb: configuring archivers


[af_pack]
c:\bbbs\pack\zip.exe -9 -j %p %F
;
[af_unpack]
c:\bbbs\pack\unzip.exe -j -o -C -s -q %p %f

                                   external.bbb: configuring protocols       21


e x t e r n a l . b b b :   c o n f i g u r i n g   p r o t o c o l s 
_______________________________________________________________________________

The file transfer protocols are configured in the external.bbb-file. For each
protocol, there are three sections that need to be configured. In each section,
the first line is for protocol #1, the second line for protocol #2 and so on.
The '-' character in any line means that protocol is disabled. BBBS can also
handle protocol numbers 1 to 9 internally, but you can use an external program
for them too if you like.

The sections used are:

[t_name]

This section simply defines the names of the protocols. The only place they are
shown is the user editor to identify the used protocol.

[t_download]

This section defines the OS command strings to launch the protocol to download
(send to the remote user) a set of files, the names of which are in a specified
file. The meta-character '%f' can be used to insert the name of this list file.

[t_upload]

This section defines the OS command strings to launch the protocol to upload
(receive from the remote user) files into the current directory.

As with archivers, you can use the external.bbb meta characters in the
t_download and t_upload-sections.

If you add or remove protocols, you should also remember to edit the line 358
in your bbbstxt-files to reflect your protocol setup. Otherwise your users
might select protocols that are not available. In the bbbstxt-file, the
protocol names are separated with a slash ('/'). To add a protocol, simply
write an appropriate name at the end of the list. If you want to disable a
protocol, then just remove the appropriate protocol's name, but NOT the slash,
unless you remove it also from your external.bbb.

Note! In all command lines you should use the directory separator of your
operating system!

Example:

; An example to use the GSZ program instead of the internal ZModem:
;
[t_name]
ZModem
;
[t_download]
c:\bbbs\prot\gsz.exe portx %b,%i %h"handshake cts "sz @%f
;
[t_upload]
c:\bbbs\prot\gsz.exe portx %b,%i %h"handshake cts "rz

22       external.bbb: Network contiguration


e x t e r n a l . b b b :   N e t w o r k   c o n t i g u r a t i o n 
_______________________________________________________________________________

In the external.bbb-file, there is also several sections related to FidoNet
technology networking configuration. They are:

   - The nodelist section (section nodelist)
   - The FidoNet echomail area setup (section echomail)
   - The FidoNet nodes setup ssection nodes)
   - The file-echo configuration sections (sections tick.adopt and ticks)
   - The node and NetMail remappers (sections node_remap, netmail_remap,
     netmail_copy and netmail_bounce)
   - Badecho configuration for BCFG4 (section badecho)
   - Badtick configuration for BCFG4 (section badtick)

Also, an arcane AGNET/QWK-style network can be used with BBBS. Setup for
such a network is done with the external.bbb-section agnet.

                                    external.bbb: The nodelist-section       23


e x t e r n a l . b b b :   T h e   n o d e l i s t - s e c t i o n 
_______________________________________________________________________________

FidoNet technology networks use nodelists to work out the destinations of
echomail messages. A nodelist is a list of all (or some) systems in the
network. In BBBS, the nodelists are listed in the external.bbb-file, under the
section nodelist. Under this section all nodelists that BNC should compile are
listed. After each name, an additional wildcard-specification for a nodediff
(used by BNDIFF) can be specified. If the second parameter starts with an
exclamation mark ('!'), then the nodelist specified is replaced by the file
specified by the second parameter. An ampersand character ('&') works like an
exclamation mark, but the second parameter must specify a compressed list.

Remember that full nodelists should be uncompressed, whereas nodediffs should
be in compressed form.

In all nodelist-section entries wildcards are allowed.

Example:

[nodelist]
; A normal nodelist for foonet:
c:/bbbs/nodelist/foonet.list
; lukki.lst in c:/bbbs/nodelist is replaced by lukki.list in c:/inbound
; when there is one...
c:/bbbs/nodelist/lukki.lst !c:/inbound/lukki.lst
; barnet.list is replaced with the one from the compressed file barnet.zip
; in c:/inbound when there is one...
c:/bbbs/nodelist/barnet.list &c:/inbound/barnet.zip
; Assuming all nodediff.* files in c:/bbbs/inbound/ are diffs for the nodelist
; below...
c:/bbbs/nodelist/nodelist.* c:/bbbs/inbound/nodediff.*

24       external.bbb: The echomail-section


e x t e r n a l . b b b :   T h e   e c h o m a i l - s e c t i o n 
_______________________________________________________________________________

The FidoNet network echomail areas are defined under the section echomail, in
the external.bbb-file. This section is automatically updated by BCFG4 when it
saves the conference configuration, but you can modify it also by hand if you
like. Note that your 'NetMail' area should NOT be added to this section.

The format of the echomail-section is simple: one line defines one echomail
area. A single entry consists of six fields, separated with spaces. The fields
are (from left to right):

group        A single character group ID for this echomail area. Any
             character can be used. Areas from different networks should be
             configured under a differing group ID. If you are running a
             host or a hub, the accesses of your downlinks are defined with
             these group IDs.

areatag      The area tag for this echomail area. The echomail is
             distributed between systems under this name.

bbbs name    The name of the conference to which messages to this echomail
             area should be written to. If the conference name has spaces,
             enclose the name in quotes. If you want to give the conference
             the same name as the areatag of this echomail area, use a single
             '-' character here. A '!' character in this
             field makes this area a passthrough area. For passthrough areas
             at least one add-aka should be defined (see below).

add akas     The list of akas that should be added for this area. BOGUS also
             adds your default aka (defined in BCFG4) for this echomail area.
             Note that you can specify multiple akas here. You should not
             write the same aka twice. For passthrough-areas at least one
             aka should be defined in this field.

flags        Here you can specify one or more flags for this area. Just list
             the flags you want to activate one after another. If you don't
             want to use any flags, use the '-' character only. Allowed
             flags are:

             S  Secure: incoming mail to this area is accepted only if the
                the area's uplink is listed in the export list.
                Whenever possible, use this flag.
             V  Visible: area is visible in areafix listings even to nodes
                who don't have access to it.
             D  Don't perform any dupe checking for this area.

export       The list of nodenumbers this echomail area should be exported
             to. You can list as many nodes as you like. You can use only
             net/node if the node is in the same zone as the previous node,
             or only node if zone:net is the same. If you add a '>'-character
             in front of a nodenumber, then it is marked only for export. If
             you add a '<'-character in front of a nodenumber, then it is
             marked only for import.

As with tick file-echoes, you can also specify a description for the
echomail area after all fields by prefixing it with a slash ("/") character.
If you don't specify a description here, then the one defined in BCFG4 is
used. This way you can add descriptions also for passthrough areas.

                                    external.bbb: The echomail-section       25



Example:

[echomail]
; An example echomail-section definition:
; gr areatag        bbbs name           add akas    flags export
; -- -------------- ------------------- ----------- ----- --------------
B BBBS.ENGLISH      -                   -           S     47:1000/101
G GENERAL           "MAIN BOARD"        40:765/151  S     40:765/765 49
P TESTAREA          !                   40:765/151  S     40:765/765 49

26       external.bbb: The nodes-section


e x t e r n a l . b b b :   T h e   n o d e s - s e c t i o n 
_______________________________________________________________________________

The nodes in a FidoNet technology network you want to poll from or that poll
you are defined under the section nodes in the external.bbb-file. The format of
this section is simple: one line defines one node. In a single entry there are
nine fields, separated with spaces. From left to right, the fields are:

node        The FidoNet address of this node.

spass       The session password that is used with BBBS's internal BackDoor
            mailer. If you want to run a secure system, you must specify
            both mail session password and packet password for all nodes.

apass       BRoboCop (areafix) requests from this node must have this
            password in the subject of the message.

ppass       The "packet-password"; a password stored in outbound packets
            going to this node. This same password has to be also in inbound
            packets from this node to make sure the packets are really from
            that node.

tpass       The password for TICK files.

gr          The echomail area groups that are available for this node for
            both reading and writing. Groups that are listed after the '!'
            character, including the group '!', can not be disconnected,
            only connected.

st          Specifies the flags for this node, as well as the status of
            outbound mail packets for this node. List the flags one after
            another or use the '-' flag if the node is to have no flags
            and "normal" status (mail is transferred regardless of the
            poller). Normally the '-' flag is used. Available flags are:

            C  The mail packets for this node are automatically crashmail.
            H  The mail packets for this node are hold: they are not
               polled anywhere. Instead, the node must pick up them.
            !  Do not route NetMails directly to this node.
            B  Do not use HYDRA protocol with this node.
            R  Do not use the EMSI handshake with this node.
            X  Do not use the xHYDRA protocol with this node.
            D  Do not use FTS-0001 handshake with this node.

pa          Specifies the archiver that should be used with this node. It
            should be a number, pointing to the appropriate archiver entry in
            the external.bbb-file. 0 means "don't pack".

route       The routings for this node. By default, BOGUS automatically
            routes all NetMail to this node directly to it. With this field
            you can specify more. You can list as many routings as you like.
            One routing can be either zone:*, specifying all nodes in
            that zone, zone:net/*, specifying all nodes in that net or
            even a complete 4D-address (zone:net/node.point). Also, if you
            add an asterisk, '*', in front of a routing, then BOGUS will scan
            your nodelist for all downlinks of the hub or region specified
            and route also their mails via this node.



                                       external.bbb: The nodes-section       27


Example:

; An example nodes-section:
;
[nodes]
; node      spass   apass   ppass   tpass gr  st pa route
; --------- ------- ------- ------- ----- --- -- -- -------------------
47:1000/101 privat  passw   -       fub   BCD H  3  47:* 27:47/* 2:20/0
2:222/222   sesonly -       -       -     -   !  3
2:222/0     boot    boot    boot    boot  BD  !  3
2:222/70    boot    boot    boot    boot  C   -  3  1:* 2:* 3:* 4:* 5:* 6:*
2:222/71    boot    -       boot    -     -   !  3
; hub route:
2:22/222    session foopass pktpass tick  B   C  3  *2:22/222
; region route:
2:222/69    example foopass packet  tick  B   C  3  *2:22/0

28       external.bbb: FidoNet technology file-echo configuration


external.bbb: FidoNet technology file-echo configuration
_______________________________________________________________________________

Adopting files

FidoNet technology TICK-style file-echoes are configured with two sections in
the external.bbb-file: the tick.adopt section defines the files BTICK should
generate a TICK file for. For each file, three sequential lines under
tick.adopt should be listed. The first line should contain the TICK areaname
that should be used with the file. The second the file name, wildcards are
allowed. Finally, the third line should contain a description for the file.

Please be careful with the tick.adopt-section as there is no way to check who
originally sent the file for you!


Defining TICK file-echoes

The TICK file-echo areas are defined under the ticks-section. Under the
ticks-section, one line defines one file-echo. One entry consists of seven
fields, separated with spaces. The fields are, from left to right:

gr      A single character group ID for this tick area. Any character can be
        used as the group ID. Different types of file-echo areas and
        especially file-echo areas of different networks should be grouped
        under a differing group ID. If you are running a host or a hub, the
        file-echo area accesses of your downlinks are specified in the
        nodes-section with these group IDs, so be clear with them.

tag     The name of this file-echo area.

path    The directory to which incoming files for this area should be moved
        to. This directory must exist.

aka     The nodenumber that should be used with this file-echo area.
        You can also list many akas.

afl     The area flags for this area, listed one after the another. You can
        use multiple flags. See below for export flags as you can use them
        in this field, too. You can also use the '-' flag to disable all
        flags, and usually you should. The available area flags are:

        V       Visible. Show the existence of this file echo even to those
                areafix requesters who do not have access to this file echo,
                ie. those who do not have the group flag assigned in the
                [nodes] section. Note that they only see this area, they can
                not connect to it.
        Z      file_id.diz should not be used in this area.
                Do not autodescribe files on this file echo, not even if they
                do not have a description field in .tic file
        R      Don't check CRC of the incoming file.
        !      Passthrough, do not update descript.ion-files.
        A      Appends the data of the received files to work/tickinfo and
                work/tickinfo.<group> files; this can be used to create lists
                of received files or new file announcements.

export  The node numbers to which this file-echo area should be exported to.
        You can list as many node numbers as you like. You can also use one
        or more export flags in front of the node number. The available

              external.bbb: FidoNet technology file-echo configuration       29


        flags are:

        @  This node is unlinked, no files should be sent to it.
        +  Do not send a tick file to this node, just forward the file.
        <  Accept files from this node, but do not send any.
        >  Only send files to this node.
        H  Mark files as hold, so that the node in question must pick up
           them.
        C  Mark files as crash, so that you will poll them to the node.
        N  Mark files as normal (the default).

After these fields the slash character ("/") and the description for the
file-echo can follow, but are not mandatory.

Note that the password used with tick-files is configured in the nodes-section
of external.bbb!

Examples:

[tick.adopt]

[ticks]
; gr tag   path         aka        afl export         desc
; -- ----- ------------ ---------- --- -------------- -------------------
A BBBS     d:/pub/bbbs/ 2:22/222   AH  <2:222/222 @42 /BBBS and utilities
V LUKKI    d:/pub/txt/  40:765/151 HS  40:765/765     /LukkiVerkko

New file announcements can be easily automated this way as well by using a few
simple commands. If the A flag is set, information is placed in a file called
tickinfo.[group] in c:/bbbs/work. To announce new files you might use something
like:

bbbs btxt2bbs fido.announce c:/bbbs/work/tickinfo.txt /F SysOp /T All /S
  New File Announcement

See BTXT2BBS-command for more information.


Let's look at an additional example:

M BBBS /home/bbs/tickfile/bbbs/  2:211/16  A  2:211/37 220/851 /BBBS files
|  |     |                         |       |    |               |
|  |     |                         |       |    |               `- descr.
|  |     |                         |       |    `- list of up/down links
|  |     |                         |       `- flags, see above
|  |     |                         `- your aka used in this file echo
|  |     `- real directory (where to put files)
|  `- echo tag
`- group

This means, that
- The group flags was 'M'. This will cause the following:
  - all nodes who do have 'M' in group flags field in their entry in [nodes]
    section of external.bbb may connect or disconnect BBBS file echo
  - announce data of the received files will be added to files
    work/tickinfo and work/tickinfo.M
- the echo tag is "BBBS"
- incoming files to this file echo will be moved to /home/bbs/tickfile/bbbs
- you send files to this file echo as 2:211/16 and receive files to this

30       external.bbb: FidoNet technology file-echo configuration


  file echo if they are addressed to 2:211/16
- flags are 'A' (see above)
- You accept files from 2:211/37 and 2:220/851 and forward new files to
  these nodes
- the area description field in .tic files and in areafix requests
  will be "BBBS files"

                         external.bbb: The remapping/bouncing features       31


external.bbb: The remapping/bouncing features
_______________________________________________________________________________

With BBBS it is also possible to remap NetMail destinations and nodelist
entries. The sections node_remap, netmail_remap, netmail_copy and
netmail_bounce in the external.bbb-file are used to accomplish these things.


[node_remap]

The section node_remap can be used to add or override a nodelist entry. This is
useful for example points that need only one or few nodelist entries and not
the whole nodelist. One line of node_remap-section defines one remapping. The
syntax of one node remap entry is:

,4d_nodenumber,sitename,location,sysop,phonenumber,flags

All fields should be self-explainatory. The phonenumber-field can have multiple
phone numbers, separated with colons (':'). When BackDoor tries to dial this
system, one phone number is selected at random. Note that the
phone number conversion in BCFG4 is done to these phone numbers as well!

The flags-field is the standard FidoNet flags that are active with this system,
separated with commas.

Example:

[node_remap]
; A Foobar-site with three phonenumbers that can be dialled:
; Note that nodenumber is in 4D-format!
,12:34/5.0,Foobar-site,Foobar_City,Joe_Hacker,555-4242:555-6969:555-5555,300


[netmail_remap]

The section netmail_remap can be used to override the sender, receiver and
their node numbers. One line under netmail_remap-section defines one remapping.
The syntax is original#new where original is a regular expression matching the
string in the following format:

sender,senders_4d_fidonet_address,receiver,receivers_4d_fidonet_address

new is the sender, receiver and FidoNet addresses the message should be
remapped to, in the same format. In new, an empty field means that the original
value should be kept.

For example, if you specify the following under netmail_remap:

^.*,.*,dino-maintainer,2:22/222.666$#,,Kalle Soiha,2:22/222.0

Then all NetMails to the user "dino-maintainer" at node 2:22/222.666 should
be directed to the user Kalle Soiha at node 2:22/222.

NOTE! If you are not ABSOLUTELY SURE that you know what you are doing, do NOT
use netmail_remap. It can do you more harm than good and the results will very
likely not be what you want.


[netmail_copy]

32       external.bbb: The remapping/bouncing features



The section netmail_copy can be used to copy incoming netmail to other receiver
too. Unlike with netmail_bounce, the original receiver will get a copy too. One
line under netmail_copy-section defines one copying. The syntax is original#new
where original is a regular expression matching the string in the following
format:

sender,senders_4d_fidonet_address,receiver,receivers_4d_fidonet_address

new is the sender, receiver and FidoNet addresses the message should be copied
to, in the same format. In new, an empty field means that the original value
should be kept.

For example, if you specify the following under netmail_copy:

^.*,.*,dino-maintainer,2:22/222.666$#,,Kalle Soiha,2:22/222.0

Then all NetMails to the user "dino-maintainer" at node 2:22/222.666 should be
copied to the user Kalle Soiha at node 2:22/222.


[netmail_bounce]

The section netmail_bounce can be used to bounce netmail based on specific
criteria. This is a potentially dangerous item to configure, so be sure you
know what you're doing before you start bouncing netmail!  The syntax is
origin#file where origin is a regular expression of the format:

sender,senders_4d_fidonet_address,receiver,receivers_4d_fidonet_address

file is the full path and filename of the text file containing the bounce
message header text. BBBS will take this file and place it above a copy of the
bounced message so when it bounces a message it might look something like this:

  [bounce header file]
  --------------------------
  [original netmail message]

This is a useful function to have to bounce netmail to problem systems or
users. PLEASE be sure that you are not accidentally bouncing netmail that
should not be bounced!  Use this section with caution!

                   external.bbb: AGNET/QWK-style network configuration       33


external.bbb: AGNET/QWK-style network configuration
_______________________________________________________________________________

BBBS also supports the very arcane AGNET/QWK style of networking, in which the
off-line QWK and REP-packets are transferred to and from BBS's according to
certain rules. To set up this kind of network in BBBS, the section agnet in
external.bbb is used. Under this section, each line defines one remote system
and/or user name, in the following format:

name,areafile,suffix,route_regexp

name is the name of the AGNET-user that should execute the polling. The
areafile-parameter should be the name of the file remapping the QWK numbers to
local area names, see below for more information. suffix should be the AGNET
suffix that should be used for this system. route_regexp should be a regular
expression matching the systems that mail should be routed to.

For example:

BCG BOX,agareas,@BCG,@

This will make the AGNET username into "BCG BOX". Users writing messages from
this system will be, for example "Joe Hacker@BCG". Also, all incoming AGNET
mail to this system will be routed.

In the file specified by the areafile-parameter, the QWK index numbers should
be matched against the correct local conferences. In the file, one line defines
one conference in qwk_number,local_name-style format.

For example:

15,Net.Chat
16,Net.Computers
17,Net.BBBS
...

It is highly recommended that you do not use AGNET networking unless there
really is need for it, as the FidoNet style of networking is much more
advanced.

34       external.bbb: The badecho settings for BCFG4


external.bbb: The badecho settings for BCFG4
_______________________________________________________________________________

BCFG4 can autocreate conferences for such echomail areas that have inbound
mail, but have no conference configured. This can be accomplished by running
the BCFG4 program with the "bad"-parameter.

The badecho-section can be used to control the behavior of the automatic
conference creator of BCFG4. If the badecho-section exists, then only the areas
matching the criterias defined in the section will be created. Remember also
that you must have at least one "unnamed" conference in your conference
configuration or no conferences are added. This is accomplished by entering
BCFG4, Global: Confs, and changing the Total conf field to one higher than the
number of conferences you have. For example, if you have 550 message
conferences, you must set the total to 551 (current + 1). You will see that
your next conference is called "unnamed".

Note that when you define badecho-entries and run BCFG4 with the "bad"
parameter, your echomail-section in external.bbb will be updated automatically,
along with the conference configuration in BCFG4.

In the badecho-section, one line defines one criteria in the following format
(items in curly brackets are optional):

uplink area {aka_list} {in_char out_char origin} group {area_prefix} export

uplink is the nodenumber of your uplink the echomail area must originate.

area is a regular expression matching the names of the areas that can be
created.

aka_list is a list of your akas that should be added to the messages in this
echomail area. The first aka is used in BCFG4, the rest in the echomail-section
of external.bbb.

in_char is the name of the character set that should be used when importing
messages.

out_char is the name of the character set that should be used when exporting
messages. This must be specified if you have specified also the in_char-field.

origin is the number of the origin line that should be used on the area. This
must be given if you have specified inbound and outbound character sets.

group is the single character group ID that should be applied to the area. If
the group is '-', then the area will NOT be created.

area_prefix is the prefix that should be applied to the area name. If there is
a '!' character in the prefix, then the area will be created as a passthrough
area.

export is a list of akas that the area should be exported to. The uplink is
automatically added to this list, so you do not need to list it.


Example:

[badecho]
; For areas that originate from 2:210/27: do not generate areas starting

                          external.bbb: The badecho settings for BCFG4       35


; with the string "BBBS". Generate all the rest, with the aka 2:222/0,
; origin line 0, group F, prefix "INT.". Export the area to 2:22/10 and
; 2:222/151.666:
;
2:210/27 ^BBBS -
2:210/27 . 2:222/0 IBM IBM 0 F INT. 2:22/10 2:222/151.666
;
; All areas originating from 2:22/222, beginning with "FOO" should be
; created as passthrough areas, export them to 2:22/10:
;
2:22/222 ^FOO P ! 2:22/10
;
; For all areas from 2:22/222, beginning with "BAR" use the akas 50:123/5
; and 69:100/12, export to 2:222/151.666, using origin line 5:
;
2:22/222 ^BAR 50:123/5 69:100/12 IBM IBM 5 B 2:222/151.666
;
; For all areas from 2:22/222, beginning with "BUZ" use the akas 50:123/5
; and 69:100/12, export to 2:222/151.666, using origin line 0 and the ISO
; charset for inbound messages, and the MAC charset for outbound:
;
2:22/222 ^BUZ 50:123/5 69:100/12 ISO MAC 0 Z 2:222/151.666

36       external.bbb: The badtick settings for BCFG4


external.bbb: The badtick settings for BCFG4
_______________________________________________________________________________

BCFG4 can autocreate file directories for such fileecho areas that have inbound
files, but have no fileecho configured. This can be accomplished by running the
BCFG4 program with the bad-parameter.

The badtick-section can be used to control the behaviour of the automatic
directory creator of BCFG4. If the section does not exist then no area will be
created (default).

Note that when you run BCFG4 with the "bad" parameter, you are also updating
external.bbb and filedirg.000 with any badecho-entries you might have as
defined in the badecho and "badtick" -sections of external.bbb

In the badtick-section, one line defines one criteria in the following format
(items in curly brackets are optional):

uplink area aka_list group {flags} virtdir_root {export} {/desc}

uplink is the node number of your uplink the fileecho must originate from.

area is a regular expression matching the names of the areas that can be
created.

aka_list is a list of your akas that should be added to the seen-bys of .tic
files in this fileecho area. The first is the primary aka to use as originator
to downlinks.

group is the single character group ID that should be applied to the area. If
the group is '-', then the area will NOT be created.

flags is the flags to apply to the area. See the file-echo section of
external.bbb for a list of the flags.

virtdir_root is the name of the virtual directory root that already exists in
filedirg.000. If this virtual root directory does not exist, the new area will
not be created. If the new file-echo is called "test" and virtdir_root is
"/ticks" then the new directory created will be called "/ticks/test". If a
file-echo is called something like "foo/bar/junk" then the directory will be
called "/ticks/foo_bar_junk", and this would require a filesystem supporting
long filenames (HPFS, EXT2, NTFS, etc.).

export is a list of akas that the area should be exported to. The uplink is
automatically added to this list, so you do not need to list it.

/desc is the default description to give each of these areas. You might want to
call the new file-echos by default "New Fido Ticks" so would write "/New Fido
Ticks".


Example:

[badtick]
; For areas that originate from 2:210/27: do not generate areas starting with
; the string "BBBS". Generate all the rest, with the origin aka 2:222/0,
; assign to file-echo group C and add the V (visible) flag. Make the root
; directory /newtic and export files to 2:22/10 and 2:222/151.666, then give
; echos the default description of "New Fido Echo":

                          external.bbb: The badtick settings for BCFG4       37



2:210/27 ^BBBS -
2:210/27 . 2:222/0 C V newtic 2:22/10 2:222/151.666 /New Fido Echo

38       The meta characters in external.bbb-file


The meta characters in external.bbb-file
_______________________________________________________________________________

You can use following meta chars when configuring archivers and protocols in
the external.bbb-file. They are replaced with corresponding string or number.

        %e              Character 27, ESC, ^[.
        %r              Character 13, CR, ^M.
        %%              Character 37, "%".
        %p              Packet name to/from which files should be (un)packed.
        %f              File that should be sent/received or file to be
                        (un)packed to/from a packet.
        %F              Filename (%f), but with "*.*" converted to "*".
        %d              Filename (%f) without its path.
        %D              Filename (%d), but with "*.* "converted to "*".
        %c              In PC-DOS, OS/2 and NT-versions this is the
                        value of either COMSPEC or SHELL variables, checked
                        in that order. If neither is defined, then it will be
                        "c:\os2\cmd.exe" (under OS/2) or "c:\command.com".
                        Under UNIX versions, the order is SHELL, COMSPEC.
                        If neither is defined, then "/bin/sh" is used.
        %n              Value of the "cfgl.newdir" (bl_newdir) variable.
        %N              User's name.
        %L              The current node number.
        %o              Comport number.
        %b              Comport base address (in hex).
        %i              Comport IRQ.
        %s              Comport real baud rate.
        %l              Comport baud rate.
        %a              Comport handle.
        %A              Comport device.
        %h"text"        If RTS/CTS handshake is enabled, text "text",
                        otherwise nothing.

              Configuring BBBS groupmail functions: the alias.bbb-file       39


Configuring BBBS groupmail functions: the alias.bbb-file
_______________________________________________________________________________

The file alias.bbb is used for two purposes. Firstly, you can create mailing
lists so that you can easily send the same message to multiple receivers. The
format of a mailing list entry in alias.bbb is as follows:

listname:fidonet_number1, user_name1,
         fidonet_number2, user_name2,
         fidonet_number3, user_name3
         ...

Everything should be typed on a single line in the alias.bbb-file. You can also
create aliases for users in this way: just create a mailing list with just one
user. For email-aliases, the FidoNet number should be your own FidoNet number.

The second purpose of alias.bbb is to define the receivers for comments users
write with the global command "com". They are defined in a very similar manner
to mailing lists; to define a comment receiver, use the string COM_* as the
mailing list name. Replace * with the corresponding key the user should press
when asked for a comment receiver. After the colon, you should write the user
name or mailing list that the comment should be sent to. If the first character
after the colon is a '<'-character, then the file specified after the '<' is
shown when the choice is selected.

When you define comment receivers, remember also to correctly list the comment
receivers in the precom-file in the menus-directory.


Example:

; An example alias.bbb-file
; This one defines aliases 'B' and 'Z' for the users Kim Heino and
; Tapani Salmi at FidoNet address 2:22/222, a mailinglist called BZ,
; including the same users and three comment receivers:
;
B: 2:22/222, Kim Heino
Z: 2:22/222, Tapani Salmi
BZ: 2:22/222, Kim Heino, 2:22/222, Tapani Salmi
COM_B:Kim Heino
COM_Z:bz
COM_F:<c:/bbbs/menus/access

40       Configuring Internet access in BBBS: the inet.bbb-file


Configuring Internet access in BBBS: the inet.bbb-file
_______________________________________________________________________________

All Internet access is configured in the file inet.bbb. Like the
external.bbb-file, it is divided into different sections. The sections used
are:

[telnet]
[finger]
[rlogin]
[hunt]
[ftp]
[url]

These five sections are used to configure the limitations for outgoing
connections. The telnet-section is used for limitations concerning outgoing
telnet-targets, the finger-section for finger targets and so on. Connections
can only be made to the destinations specified in the appropriate
inet.bbb-section. The syntax for an entry is:

destination:group1{,group2{,group3...}}

Before any user can use any Internet services, he must first be a member of the
group with the name of the service: the group telnet for telnet-connections,
the group ftp for ftp-connections and so on. Also, the user's destination must
be listed in that service's inet.bbb-section, and be a member of one of the
groups defined for that destination.

Only the groups listed can use the service specified in the section, and only
to targets matching the regular expression destination.

For example, to allow only members of the group blood_men to make an ftp
connection to the site ftp.pirasat.org, but allow everyone to ftp into sites
with the .fi domain suffix, you would write into inet.bbb:

[ftp]
^ftp\.pirasat\.org$:blood_men
\.fi$:all


[aka]

This section is used to define shortcuts for destinations for other Internet
services. The syntax is simple:

alias1:real1
alias2:real2
...

For example, the definition b:Kim.Heino@utu.fi would mean that the simple
destination b would be expanded into Kim.Heino@utu.fi.


[aliasout]

This section is used to define outgoing Internet-aliases for SMTP and NNTP mail
transfer and BOGUS import, when the gating option is enabled. The syntax is:

inet-address:original

                Configuring Internet access in BBBS: the inet.bbb-file       41


@domain:@original

The first form is used to alias one local or remote user to a different
inet-name. The second is used to alias a whole domain to a different name. The
remote domain from BCFG4 is implied before checking for the entries in the
aliasout-section.

An example:

; To define the address "b@bbbs.net" be an alias for the local user
; "Kim Heino":
b@bbbs.net:Kim Heino
; To direct all mail going to domain bcgbox.bbbs.eu.org to
; p0.f222.n22.z2.fidonet.org:
@bcgbox.bbbs.eu.org:@p0.f222.n22.z2.fidonet.org


[aliasin]

The aliasin-section works like the aliasout-section, but defines incoming
Internet-aliases. For example:

; To define all mail sent to postmaster@bbbs.net to end up to the user
; Kim Heino:
postmaster@bbbs.net:Kim Heino
; To alias the whole domain bcgbox.bbbs.eu.org:
@bcgbox.bbbs.eu.org:@p0.f222.n22.z2.fidonet.org


[fingerin]

This section is used by the BBBS finger program, bbbsd. In it the remote finger
shortcuts are defined. The syntax is simple:

name:user name
name:<filename

The first form is a normal user alias, the second one can be used to show any
text file to the person fingering the name.

An example:

; To make fingering of the user "b" to display the info of Kim Heino:
b:Kim Heino
; To display the file "c:/manual" to the person fingering the
; user "rtfm":
rtfm:<c:/manual


[popalias]

This section is used by the BBBS POP3 daemon, bbbsd. It defines incoming
POP3-names to real names:

alias:user name

An example:

; Allow Kim Heino to use POP3-alias b in addition to "Kim.Heino":

42       Configuring Internet access in BBBS: the inet.bbb-file


b:Kim Heino


[ftpalias]

Just like popalias, this defines incoming ftp-names to real names:

alias:user name

An example:

; Allow Kim Heino to use FTP-alias b in addition to "Kim.Heino":
b:Kim Heino


[listin]

This section can be used to allow remote users send email directly to a
conference. The syntax is:

from,sender,to:conference

All mail sent to to by from and sender sender will be written to the conference
named conference. Either of the fields can be empty, so just the other fields
are checked. For example, to write all mail sent to bbbs-chat-list@bbbs.net to
the conference BBBS.Chat, you would write:

,,bbbs-chat-list@bbbs.net:bbbs.chat

And, to write all mail coming from listserv@foo.edu to the conference foolist,
you would write:

listserv@foo.edu,,:foolist

These aliases are used when incoming SMTP messages are received and after the
aliases in the aliasin-section have been processed. Remember that both aliases
have to be full Internet addresses!


[listout]

This is the opposite of listin-section. The syntax is:

conference:from,to

An example:

; Export bbbs.chat conference to scain and mollo as email mailinglist.
bbbs.chat:bbbs-chat-list@bbbs.net,scain@min.net
bbbs.chat:bbbs-chat-list@bbbs.net,mollo@iut-bm.univ-fcomte.fr


[bounce_from]
[bounce_to]

These two sections define the addresses that mail from/to should be bounced
back to the sender. Under both sections, one entry can be either a full
Internet address or just @domain. For example, to bounce all mail from
coolcorp.com and all mail sent to nomail@mysite.net, you would write into

                Configuring Internet access in BBBS: the inet.bbb-file       43


inet.bbb:

[bounce_from]
@coolcorp.com

[bounce_to]
nomail@mysite.net


[accept_from]
[accept_to]

These are the opposite of bounce_from, BBBS will accept only email coming
from/to these addresses. Under both sections, one entry can be either a full
Internet address or just @domain.

44       Configuring the BBBS Chat System


C o n f i g u r i n g   t h e   B B B S   C h a t   S y s t e m 
_______________________________________________________________________________

BBBS has a very powerful, channel-based chat system with feelings, familiar
from conversation systems like IRC and different MUDs. Basically, chat channels
are "discussion rooms". In every channel there can be a number of users
chatting at the same time. All messages that are sent to a channel by a person
are seen by all other members of the channel the message was sent to.

The channels can be either static or temporary. Static channels always exist,
even if there aren't be any members on them. Temporary channels exist only as
long as they have members. Static channels are defined in the file
channels.bbb, residing in the feelings-directory specified in BCFG4.
Definitions for temporary channels reside in the file channel2.bbb, but you
needn't worry about it, as BBBS will automatically update it when necessary.

                                             Configuring chat channels       45


C  o  n  f  i  g  u  r  i  n  g     c  h  a  t     c  h  a  n  n  e  l  s  
_______________________________________________________________________________

Each line of the channels.bbb-file defines one static channel, in the following
format:

#channel_name channel_description

All channel names begin with the '#'-character. The description should be a
simple description of the topic or topics that should be discussed in the
channel. In the description, you can use some flags to define the behavior of
the channel:

+a       Make the channel auto-invite. All users are automatically
         made members of a channel with this flag.
+igroup  Make the channel inaccessible to all but members of the group
         group.
+ogroup  The group group is given channel operator access to this
         channel. Channel operators can use the /kick command to
         remove unwanted users from a channel and change the topic of
         channels that don't have a static topic.
+t       The topic of the channel is "locked" and can only be changed
         by channel operators. You don't need to specify this flag for
         static channels, as topic is always locked for them.

For example:
#chat +osysops +a General public chat
#simka +isimka Private simka channel

The bans for different channels are defined in the file banned.bbb in the
feelings directory. The format of this file is simple: one line defines one ban
in the following format:

#channel_name:user_name

So, for example, to ban the user "Samuli Suominen" from the channel
#vanessa_rulez, you would write into banned.bbb:

#vanessa_rulez:Samuli Suominen

You can also have word bans for different channels. These are specified in the
file wordban.bbb. In this file, each line is a regular expression that defines
one word ban. Every time a user sends a chat message to a channel, a string in
the form #channel:message is created, with channel being the channel the
message is sent to and message the actual message. The string is then matched
against all the definitions in the wordban.bbb-file. If any of the expressions
in the file match the string, then the user sending the message is
automatically banned from the channel the message was sent to.

For example, specifying ^#chat:Call.*BBS in wordban.bbb would autoban everybody
sending a message starting with "Call" and containing the string "BBS" to
channel #chat.

46       Configuring chat feelings


C  o  n  f  i  g  u  r  i  n  g     c  h  a  t     f  e  e  l  i  n  g  s  
_______________________________________________________________________________

The BBBS chat has also the possibility to use various feelings, familiar from
different MUDs. They can be used to give some "flavor" to the chat. There are a
lot of feelings in the BBBS distribution package, but you might want to create
your own as well. The feelings are contained in data files in the
feelings-directory specified in BCFG4. They are sorted into files by their
first character, so that the feeling abduct is in the file a.dat, the feeling
teleport in t.dat, and so on. Note that the data files are case sensitive!

There are three types of feelings: ones that require a focus (another user) for
them to be used, ones that work without a focus and ones that can be used
either with or without a focus. They are defined with the keywords wfocus,
wofocus and wwofocus, respectively.

In the data files, the feelings are listed in blocks. Each block begins with a
keyword, specifying what kind of a feeling will be defined next. Then a colon
and the name that should be used to activate this feeling. In the name, the
necessary part should be written in upper case. That is, if you define a
feeling called REMind, then it can be used by writing just "rem". The feeling
definition block consists of a starting curly bracket '{', one or more sockets
and a closing curly bracket '}'. Note that there has to be at least one space
before the closing bracket. Empty lines are ignored, as well as lines beginning
with the pipe character '|'.

There are many sockets that can be used. Which ones are required vary with the
type of the feeling. The generally required sockets are the message sockets:

selfwf: Message displayed to the person emitting the feeling, with
        focused feeling.
allwf:  Message displayed to all, except the person emitting the
        feeling and the focus, with focused feeling.
focus:  Message displayed to the focus.
selfof: Message displayed to the person emitting the feeling, without
        focus.
allof:  Message displayed to all, except the person emitting the
        feeling, without focus.

The message sockets contain the actual feeling message to be displayed. It can
be up to 250 characters long and it will be wordwrapped automatically when
printed to screen. You can use ansi-codes in the message to override the
color-socket (see below), but it will screw up the wordwrapping.

Following variables can be used in the message string:

Var   Expands to:
=========================================================================
$N    The nick of the user emitting the feeling.
$F    The nick of the focus.
$A    The grade of the feeling. See below for more about
      grades. This should follow the verb to get "correct" English.
$B    The extension of the feeling. This should normally be at the end
      of the feeling.

The following depend on the user's sex:

$G    "his" or "her"
$P    "him" or "her"

                                             Configuring chat feelings       47


$E    "he" or "she"

In lower case ($g, $p, $e), they depend on the focus' sex.

Other sockets that are not required in any feelings, but can still be defined,
are:

author:    Name of the person who added this feeling.
classes:   The classes this feeling belongs to, see below for a list.
color:     The default color of this feeling: yellow, green, blue,
           red, cyan or white. First letter is sufficient.
ext:       The default extension of this feeling.
grade:     The default grade of this feeling. See below for more on
           grades.
group:     A regexp groupname, defaults to "all". Only members of the
           group specified here can use this feeling.
karma:     "Karma" value of this feeling, from -10 (very evil) to +10.
standing:  The political value of this feeling from -10 (extreme left)
           to +10 (extreme right).

List of feeling classes:

affectionate       (compassionate)
aggressive
audible            (generates sound)
burgeois           (capitalistic)
friendly
funny
inferior           (the user of the feeling is inferior to others)
malignant          (evil (towards the focus), in other words)
negative
positive
red                (communist, remember also the standing-socket)
superior           (the user of the feeling is superior to others)
tactile            (physical, touching)
vulgar
white              (monarchist or bourgoise, remember also "standing")


Grades

The grade of the feeling describes manner in which the feeling is executed.
Such as shamelessly, gracefully etc. The users can add any grade they like to a
feeling, but you can specify shortcuts for grades in the *.gra-files in the
feelings-directory. Like the feeling data files, the grades are separated into
files by their first letter: shamelessly goes into s.gra, gracefully into g.gra
and so on.

The syntax of grade files is simple, first the name of the grade (with the
necessary part written in upper case), then a colon and then what it should be
expanded to. See below for an example.


Examples:

| Some example feelings.
|
wfocus: ABDuct
  {

48       Configuring chat feelings


    selfwf: You $A abduct $F $B.
    allwf: $N $A abducts $F $B.
    focus: $N $A abducts you $B.
    grade: shame
    group: sysops
    karma: -3
  }

wwofocus: AGRee
  {
    selfof: You $A agree $B.
    allof: $N $A agrees $B.
    selfwf: You agree $A with $F $B.
    allwf: $N agrees $A with $F $B.
    focus: $N agrees $A with you $B.
    grade: whole | wholeheartedly...
  }

wofocus: BLInk
  {
    selfof: You $A blink $B.
    allof: $N $A blinks $B.
  }


| An example f.gra:
|
FATherly:in a fatherly manner
FAIthfully:faithfully
FOOlishly:foolishly
FRUstration:in frustration
FONdly:fondly
FEVerently:feverently
FINally:finally

                     Setting up the color palette: the COLORS.BBB-file       49


Setting up the color palette: the COLORS.BBB-file
_______________________________________________________________________________

The color schemes for the u pal-command are set up in the colors.bbb-file in
the BBBS-directory. In addition to the schemes defined here, users can create
their own customized schemes with the palette editor.

The syntax of the file is simple: first the scheme name, then a colon and then
52 characters defining the colors to be used. The characters represent
different items as follows:

Position Defines the color of...
==========================================================================
   1.    normal text in the message header.
   2.    user names in the message header.
   3.    subject lines in the message header.
   4.    normal text in messages.
   5.    quoted text in messages.
   6.    double-quoted text in messages.
   7.    net information (origin/tear/kludge lines) in messages.
   8.    the directory line in file listing.
   9.    the topmost header lines in file listing.
  10.    sub-directories in file listing.
  11.    normal files in file listing.
  12.    free files in file listing.
  13.    file links in file listing.
  14.    the first line of the file description in file listing.
  15.    the rest of the file description lines.
  16.    the numeric data (amount of downloads etc.) in file listing.
  17.    chat messages sent by the user him/herself.
  18.    incoming public chat messages.
  19.    incoming private messages.
  20.    informative messages (login/logout, entered message...) in chat.
  21.    the chat prefix string (the string displayed before the message).
  22.    incoming public chat messages addressed to the user.
  23.    the header help lines in "Join"-command.
  24.    the highlighted characters in "Join"-command.
  25.    a selected option in "Join"-command.
  26.    an unselected option in "Join"-command.
  27.    local public area names in "Join"-command.
  28.    public network area names in "Join"-command.
  29.    local private area names in "Join"-command.
  30.    network mail area names in "Join"-command.
  31.    area descriptions in "Join"-command.
  32.    header lines in "SHow"-command.
  33.    total separator line in "SHow"-command.
  34.    conference names in "SHow"-command.
  35.    numeric information in "SHow"-command.
  36.    number specifying the amount of personal messages in "SHow".
  37.    user info display header.
  38.    user info display texts.
  39.    user info display numeric information.
  40.    header of "Who"-display.
  41.    nodenumber for active nodes in "Who".
  42.    nodenumber for inactive nodes in "Who".
  43.    speed for active nodes in "Who".
  44.    speed for inactive nodes in "Who".
  45.    status text for active nodes in "Who".
  46.    status text for inactive nodes in "Who".

50       Setting up the color palette: the COLORS.BBB-file


  47.    "when" time for active nodes in "Who".
  48.    "when" time for inactive nodes in "Who".
  49.    nickname for active nodes in "Who".
  50.    nickname for inactive nodes in "Who".
  51.    name of the caller for active nodes in "Who".
  52.    name of the caller for inactive nodes in "Who".

The character can be a number (0-9) or a letter from a to f. The characters
represent different ANSI attributes as follows:

  Char   Color
================================
   0     Black
   1     Red
   2     Green
   3     Yellow
   4     Blue
   5     Magenta
   6     Cyan
   7     White
   8     Black with bold
   9     Red with bold
   a     Green with bold
   b     Yellow with bold
   c     Blue with bold
   d     Magenta with bold
   e     Cyan with bold
   f     White with bold

                                 bbbstxt-files: language configuration       51


b b b s t x t - f i l e s :   l a n g u a g e   c o n f i g u r a t i o n 
_______________________________________________________________________________

With BBBS, it is possible to use up to ten different language configurations.
The language configuration is done with the bbbstxt-files in the BBS root
directory. The extension of the file specifies the language number it
describes. An extensionless bbbstxt-file contains the "default" language,
usually English. With the distribution package, four languages are supplied:
English (bbbstxt), Finnish (bbbstxt1), Swedish (bbbstxt2) and Norwegian
(bbbstxt3).

To edit the supplied languages or create new ones, you can use your favorite
ASCII-editor. Each bbbstxt-file should contain 713 lines. Each line describes
one string that is displayed somewhere in the system. These are (of course) the
same in every bbbstxt-file. When the strings are displayed should be pretty
self-explainatory.

When you are editing the bbbstxt-files, note that the lines should always
contain the original amount of modifiers, characters prefixed with a percent
sign ('%'). The modifies are familiar from the C-language, so that '%u'
specifies a number, '%s' a string and so on.

The bbbstxt-files also contain the names of the commands for the different
menus. If you want to, for example, use the error-script to replace a command,
then you should remove the original command from all your bbbstxt-files. The
error.bz-script that came with the distribution package also offers an easier
way to create new commands and replace old ones, the commands.bbb-file. See the
example script for more details about it.

Remember that if you really want to have multiple languages, you should code
also your scripts so that they support all your languages!

52       An overview of the files BBBS uses


A n   o v e r v i e w   o f   t h e   f i l e s   B B B S   u s e s 
_______________________________________________________________________________

Besides the most obivious configuration files, BBBS uses and creates a lot of
other files that are used. The directory names given here are not mandatory,
they can be anything you like, but you should have them like this for easier
reference in case of trouble.

By default, BBBS creates the following directories and files to the
BBBS root directory:

bad/             Badecho directory.
feelings/        Directory containing feelings and chat configuration.
grab1/           Grab directory for node one.
hold1/           Filearea "hold" directory for node one.
inbound/         Directory containing inbound FidoNet mail.
mail/            NetMail directory for file attaches.
main/            BBBS main directory, containing the messagebase etc.
menus/           BBBS menus directory, containing all the menus.
misc/            Miscellaneous files.
new1/            Temporary upload directory for node one.
outbound/        Directory containing outbound FidoNet mail.
pub/             Public file directory, used as an example in filedirg.000.
scripts/         Directory containing all the BBBS scripts.
secure/          Directory for storing secure incoming FidoNet messages.
tmpin/           Directory for temporarily storing inbound packets.
tmpout/          Directory for temporarily storing outbound packets.
voice/           Directory for storing voice messages.
work/            BBBS work directory, a general-purpose working directory.
alias.bbb        The file holding the BBBS groupmail configuration.
bbbscfg4.000     Global configuration used by all nodes
bbbscfg4.x       Local configuration for node x.
bcfg4.exe        The configuration program.
external.bbb     Configuration file for protocols, archivers and some
                 FidoNet stuff.
filedirg.000     The global file directories.
filedirn.x       The local file directories for node x.
groups           The group definition file.

                                  The files in the BBBS root directory       53


T h e   f i l e s   i n   t h e   B B B S   r o o t   d i r e c t o r y 
_______________________________________________________________________________

The following files should reside in your BBBS root directory:

alias.bbb          The file holding the BBBS groupmail configuration.
bag.exe            The AmigaGuide reader. bag will have different
                   functions depending on what name it is run with. When run
                   as ag2html, it will convert AmigaGuide files to HTML
                   format. As ag2doc, it will convert AmigaGuide files
                   to a normal ASCII format, with emphasis characters. As
                   ag2asc, it will convert AmigaGuide files to normal
                   ASCII text.
bbbs.001           A library file.
bbbs.002           Another library file.
bbbs.exe           The main executable.
bbbsd.exe          The BBBS TCP/IP daemon (finger/ftp/smtp/pop3/
                   telnet/binkp)
bbbs.key           Your personal registeration key. Keep good backups
                   on this one!
bbbscapi.dll       A dynamic link library (OS/2 version only).
bbbscfg4.000       Global configuration used by all nodes
bbbscfg4.x         Local configuration for node x.
bcfg4.exe          The configuration program.
bbbstxt            Language file for language 0. The bbbstxt files hold most
                   of the text that BBBS will display to the screen. You can
                   modify it as you like.
bbbstxtn           Language file for language n.
brobo.wht          The Artificial Stupidity file for BRoboCop.
bterm.log          Log file created by BTERM.
bterm.pho          The BTERM phonebook.
colors.bbb         The color scheme configuration file.
external.bbb       Configuration file for protocols, archivers and some
                   FidoNet stuff.
filedirc.x         The file directories for the conference x.
filedirg.000       The global file directories.
filedirn.x         The local file directories for node x.
groups             The group definition file.
ripc.exe           A program to compile RipScript files into BBBS RIP
                   menu files.
sysop.gui          What you are reading right now.
hello.zad          The default voice greetings file.
inet.bbb           File containing Internet access configuration.
jargon.txt         An optional online hacker's dictionary (The Jargon File).
                   The command q ja will need this.
up_scan.bat        For all uploads, BBBS will automatically run this file.
up_scan.cmd        Like up_scan.bat, but for the OS/2 version.
up_scan.sh         Like up_scan.bat, but for UNIX versions.
_mg                The MG editor startup file. See the file mg.tex for MG
                   documentation.

54       The files in /bbs/main directory


T h e   f i l e s   i n   / b b s / m a i n   d i r e c t o r y 
_______________________________________________________________________________

The main directory contains the most important BBBS database files. You should
keep good backups on this directory!

00000000.hdr    Headers for the messages in conference 0.
00000000.txt    Message texts for conference 0.
0000000a.hdr    Headers for the messages in conference 10.
0000000a.txt    Message texts for conference 10.
accounts.dat    Account records for accounting.
badpoll.dat     Information on unsuccessful polls.
bbbsdown.dat    Records kept about up/downloaded files. If missing, BBBS
                creates it again.
bbbshi.dat      Hippo messages for the users.
bbbsset.dat     Aliases and sets created by users.
bbbsstat.dat    Statistics file.
bbbsuser.dat    The main userfile. Backup this often!
bbbsuser.idx    Index for bbbsuser.dat. Autocreated by BBBS on startup.
btickube.dup    Duplicate file database for BTICK.
busypoll.dat    Information on polls on busy nodes.
bzll.dat        Library file.
chatlog.1       Logfile from last chat with local user on node 1.
confcfg4.dat    Conference setup.
confusr4.dat    Database containing the lastread-pointers and joined
                conferences for the users.
filedir*.idx    Index for fileareas. Can be recreated with BBBS BFILEIDX.
grabdupe.dup    Duplicate offline reply packet database. Used to check if
                user tries to upload same reply packet more than once.
log1            The log that is kept for each node. The name can be
                changed in BCFG4.
okfiles         Only files listed in this file may be uploaded.
okuser          Only users listed in this file may register as a new
                user.
nodelist.idx    Nodelist index, created by BNC.
statzero.dat    Statistics file.
sysnote         Notes that BBBS writes to the sysop (newusers, changed
                names, uploaded files, etc)
tossdupe.dup    Database to keep track of duplicate outgoing echomail.
trashcan        Opposite of okuser, users listed in this file may not
                register.
trashfil        Opposite of okfiles, files listed in this file may not be
                uploaded.

                                     The files in /bbs/menus directory       55


T h e   f i l e s   i n   / b b s / m e n u s   d i r e c t o r y 
_______________________________________________________________________________

The files in /bbs/menus directory can be recognized by their extension.

        Extension       When user sees this file
        ===========================================
        <none>          Language 0, no ANSI, novice
        .1              Language 1, no ANSI, novice
        .gr             Language 0, ANSI, novice
        .gr1            Language 1, ANSI, novice
        .r              Language 0, RIP, novice
        .r1             Language 1, RIP, novice
        .x              Language 0, no ANSI, expert
        .x1             Language 1, no ANSI, expert
        .xg             Language 0, ANSI, expert
        .xg1            Language 1, ANSI, expert
        .xr             Language 0, RIP, expert
        .xr1            Language 1, RIP, expert


areainfo.000    Displayed by "r ai" command on the conference zero.
bang            Russian roulette bang-file.
bbbshelp        File with the help displayed with "h".
bftpmenu        Menu used for FTP-commands.
birthday        The list of those who celebrate their birthday.
brobo_af        Header for BAllFix replies.
brobo_cf        Header for AreaFix replies and connection notifies.
brobo_ff        Header for FileFix (BTICK) message.
brobo_fr        Header for file request replies.
brobo_nf        Header for NameFix replies.
bull            The bulletin menu.
bull0           Welcome-bulletin (displayed when the user logs in).
bull1           Bulletin number one.
c019b           Bulletin menu for conference 19.
c019b0          First-join-bulletin for conference 19.
c019b1          Bulletin one for conference 19.
c019j           Always-join-bulletin for conference 19.
charmenu        Menu used for character choice command.
chathelp        The help screen for groupchat.
chatmenu        Menu used for chat command.
colors01        The first screen of the palette editor.
colors02        The second screen of the palette editor.
confer          The list of the conferences. Delete it to use
                BBBS internal comments.
doormenu        Menu used for door command.
edithelp        The help screen for the full-screen editor.
event           Displayed when user is thrown out after login because
                of an event.
feelmens        Extended chat help, SysOp only.
feelmenu        Extended chat help.
fil4mens        Menu used for file command, SysOp only.
fil4menu        Menu used for file command.
fingerd         Header displayed before 'finger' information.
flaghelp        Help file for file flagging.
formmenu        Menu used for choosing archiving method.
getlost         This file will be shown to user with "getlost" status.
globmenu        Menu  used  for  global commands, will be shown after the
                listing of a main, read, file, utility or sysop menu.

56       The files in /bbs/menus directory


grabdupe        Displayed when user has uploaded a reply packet
                containing already sent messages.
grabmenu        Menu containing the different grab format choices.
hello           Hello-message for the new user.
helplink        Index file for bbbshelp.
huntmenu        Menu used for search command.
joinhelp        Help file for joining.
langmenu        Menu used for language choice.
lostpass        This file will be shown to user who has lost password.
mainmens        Menu used for main command, SysOp only.
mainmenu        Menu used for main command.
markmenu        Menu used for mark command.
outbmenu        Menu used for outbound manager.
postlog         The file will shown after the `g y` command.
postreg         The file will be listed after a user has registered.
prechat         The file will be shown before reason for SysOp chat is asked.
precom          The file will be shown before `comment` command.
precreg         The file will be shown before closed system password question.
predesc         Will be shown to user before asking descriptions for files.
predown         The file will be shown before a user downloads a file.
prefing         Displayed before asking a finger destination.
preftp          Displayed before asking a ftp destination.
pregrab         This file will be shown before the scratchpad is sent to the
                user using the grab command.
prehunt         Displayed before asking a Hunt server location.
prelog          The file that is listed before the user logs in.
prepreup        The file shown before asking the filename in upload command.
prereg          The file is shown before a user is registered.
prerlog         Displayed before asking a rlogin destination.
preteln         Displayed before asking a telnet destination.
preup           The file will be shown prior to an upload.
protmenu        Menu used for protocol choice.
readmens        Menu used for read command, SysOp only.
readmenu        Menu used for read command.
rmodmenu        Menu used for read mode selection.
termmenu        Menu used for terminal type selection.
utilmens        Menu used for utility command, SysOp only.
utilmenu        Menu used for utility command.

                                      The files in /bbs/temp directory       57


T h e   f i l e s   i n   / b b s / t e m p   d i r e c t o r y 
_______________________________________________________________________________

areatoss.0      Areatoss infofile for all nodes, created by BBBS after
                user logs off. If he/she wrote messages to FidoNet
                areas, bit according to conference number will be
                set in this file. BBBS BOGUS A will read this
                to scan areas written to, for exporting mail.
areatoss.1      Areatoss infofile for node one, created by BBBS after
                user logs off. If he/she wrote messages to FidoNet
                areas, the number(s) of the conference(s) will be
                written into this file. For node two it has extension 2.
bbbsmsg.1       Nodemessage file for node one.
bbbsnode        Node status information for the system.
bbbsrun.1       Flagfile for node one, BBBS is now running on that node.
bbbsrun.a       Flagfile for BSMTP. When this file exists, a BSMTP session
                is running.
bbbsrun.b       Flagfile for BNNTP. When this file exists, a BNNTP session
                is running.
bbbsrun.c       Flagfile for BOGUS. When this file exists, BOGUS is running.
bbbsrun.d       Flagfile for BPOP. When this file exists, BPOP is running.
feelings.1      Feelings-file for node one.
transfer.1      Transfer queue for node one.

58       The files in /bbs/misc directory


T h e   f i l e s   i n   / b b s / m i s c   d i r e c t o r y 
_______________________________________________________________________________

The /bbs/misc directory contains various miscellaneous files:

bbbsdef.h       The C-language header file containing the structure of
                all BBBS data files. If you want to do some programming,
                you can use this file as a reference.
mg.tex          The complete documentation for the BBBS's internal MG
                editor, in LaTeX format.
msgview.c       A C-language example on how to read the message text from
                the BBBS messagebase.
setpass.c       A C-language source code for changing the SysOp's
                password - for emergencies.

                                      The files in /bbs/work directory       59


T h e   f i l e s   i n   / b b s / w o r k   d i r e c t o r y 
_______________________________________________________________________________

The /bbs/work directory contains various work files that BBBS uses:

tickinfo.*      This is where BBBS stores the description of and information
                for files we have received via tick file echos. tickinfo.txt
                contains information for all groups while tickinfo.[group]
                contains information only for the specific group of that file
                echo. See Fidonet technology file-echo configuration for
                more information on group letters. Descriptions will only be
                written to tickinfo.* if the group has the announce flag set.
bbbsrun.*       This tells BBBS that node * is currently in use.

There are other files in here that should be of little consequence to the
casual user.

There are also semaphore files you can create to shutdown BBBS:

shutdown.1      Request BBBS node 1 to exit (empty file for errorlevel 0,
                "42" in file for errorlevel 42).
shutdown.n0     Request BNNTP for host 0 to exit.

60       The BBBS command line functions


T h e   B B B S   c o m m a n d   l i n e   f u n c t i o n s 
_______________________________________________________________________________

The standard BBBS calling convention is:

bbbs [com] [node]

Where node is the node number to start this BBBS session into, and com the
comport number. This convention should suffice for most BBBS configurations.
However, there are different versions of BBBS for various OS's. Depending on
which of them you run, you can also use some other parameters or have a
completely different calling convention.

BBBS offers also some other services that can be started from the command line.
To use them, BBBS can also be invoked as:

bbbs [command] {parameters}

Command can be any of the ones listed below. Parameters vary from command to
command.

Command   Function
=======================================================================
BAADD     An account management tool.
BBBS2TXT  Save a message to a text file.
BCONF     Display statistics on conferences.
BCSTAT    Display statistics on conference feeds.
BDATE     Update the birthday list.
BFAG      Convert filelist into AmigaGuide format.
BFILEIDX  Create an index file of the file directories.
BFILSORT  Sort the file directories.
BFTP      Batch FTP.
BFSTAT    Create file area statistics.
BHATCH    Hatch the specified file into the specified file-echo.
BKILL     Kill users with criterias.
BLINKFIX  Update the datestamps of file links.
BLIST     Make an ASCII format file list.
BMKILL    Kill messages with criterias.
BMSG      Import/export FidoNet mail.
BMT       A FidoNet message tracker.
BNC       Compile the nodelist(s) specified in external.bbb.
BNDIFF    Update a nodelist from a NODEDIFF.
BNEWF     Make an ASCII format list of new files.
BNMSG     Send a node message.
BNNTP     Exchange netnews with NNTP servers.
BOGUS     B's Original Garbage Unicast System (FidoNet mail import/export)
BOK       Make an OKFILE.TXT file for use with the FrontDoor mailer.
BOM       Command line interface to the BBBS outbound manager.
BPC       Pack a conference with criterias.
BPOP      Receive mail from POP3 server.
BPURGE    Purge old files from the file areas.
BPUS      Pack the user database.
BRSA      Generate new RSA keys.
BSETPACK  Pack the environment variable settings file.
BSMTP     Exchange email with SMTP servers.
BSTAT     Show a statistics list.
BTICK     Process he incoming TICK files from file-echoes.
BTIME     Adjust the time with a timeserver.
BTXT2BBS  Convert a text file to a message.

                                       The BBBS command line functions       61


BWHO      Show who is online at the moment.

To send an SMS message, use the following commandline:

  bbbs 2 2 COM2 BTERM SMS: [servernumber] link bcfg3068} [text]

BBBS will then send the SMS message text [text].


You should run "bogus w", "bogus a", "btick", "bnntp" and "bsmtp" when needed
(new messages/files coming in or going out).

In your daily event you should run "bogus r", "bogus w", "bndiff", "bnc",
"bfilsort", "blinkfix", "bfileidx" and "bsetpack". You might also want to run
"bdate", "blist" and take full backup.

Once a week you should do "bpc b" and once a year "bpus". When running these
commands there may be no users online.

62       BBBS BAADD - An account management tool


B B B S   B A A D D   -   A n   a c c o u n t   m a n a g e m e n t   t o o l 
_______________________________________________________________________________

Usage: bbbs baadd [amount] {account}

BAADD is used to edit the amount of money on different accounts.
Amount is the value to add to the account(s): using negative values
will deduct money from the specified account(s).

The account-parameter is a regular expression specifying the accounts
to change, default is all accounts. If it is not specified, then only
accounts without credit will be changed.

                         BBBS BBBS2TXT - Save a message to a text file       63


BBBS BBBS2TXT - Save a message to a text file
_______________________________________________________________________________

Usage: bbbs bbbs2txt [areaname] [number] [filename]

BBBS2TXT will save the message number number from the file
area areaname into the file filename.

64       BBBS BCONF - Display statistics on the conferences


BBBS BCONF - Display statistics on the conferences
_______________________________________________________________________________

Usage: bbbs bconf

BCONF displays some status information on the active conferences. The
output will look something like this:

  A# Name                             First  Last    kB MIFPN    Age    M#
--------------------------------------------------------------------------
   0 Netmail                              1   270   159   FP  970410     1
   1 SysOp News                           1    12     2  I  N 961017    11
   2 Post Office                          1   228    67 MI P  970406    73
   3 Administrative                       1    36    10       961228     4
   4 Resume                               1    48    50 MI  N 970307    73
   5 General Chat                         1   133    47  I    970411    68

Descriptions for the different fields:

A#     is the area number.
Name   is the area name.
First  is the number of the first active message in the conference.
Last   is the number of the last message in the conference.
kB     is the size of the message area, in kilobytes.
MIFPN  M - area is a "must": everyone must be a member.
       I - area is auto-invite: new users are automatically members.
       F - area is an echomail area.
       P - area is for private messages.
       N - replies are not allowed in the conference.
Age    is the datestamp of the last message in the conference.
M#     signifies how many members there are in the conference.

                  BBBS BCSTAT - Display statistics of conference feeds       65


BBBS BCSTAT - Display statistics of conference feeds
_______________________________________________________________________________

Usage: bbbs bcstat [area_regexp] [date] {fido}

BCSTAT displays the amount of messages received to the areas matching
the regular expression area_regexp since date. date can be any standard
day, like 960831, or -10, meaning ten days before the current date. If
the optional parameter "fido" is added, then the area names that are
output are their FidoNet echomail names. By default, areas are listed
with their local area names.

Examples:

bbbs bcstat ^bbbs. 962511
bbbs bcstat ^bbbs. -10 fido

66       BBBS BDATE - Update the birthday list.


B B B S   B D A T E   -   U p d a t e   t h e   b i r t h d a y   l i s t . 
_______________________________________________________________________________

Usage: bbbs bdate

BDATE will update the file birthday in your global menu directory, which
is shown every time a user logs in. This command should be run every day.

                   BBBS BFAG - Convert filelist into AmigaGuide format       67


BBBS BFAG - Convert filelist into AmigaGuide format
_______________________________________________________________________________

Usage: bbbs bfag [filename]

BFAG converts standard filelist (created with BLIST) to AmigaGuide format.

68       BBBS BFILEIDX - Create an index file of the file directories


BBBS BFILEIDX - Create an index file of the file directories
_______________________________________________________________________________

Usage: bbbs bfileidx {D} {O}

BFILEIDX scans through your file directories and creates an index file
to speed up file searches and such. Also, it reports of errors in the
file areas, such as too long description lines. For better performance, this
command should be run every day. If you decide not to run it daily, then do
not run it at all.

The optional 'D' parameter gives a report of files with no
description. The 'O' parameter gives a report of files which are
"offline" (specified in the descript.ion files, but do not exist in
the disk).

                             BBBS BFILSORT - Sort the file directories       69


BBBS BFILSORT - Sort the file directories
_______________________________________________________________________________

Usage: bbbs bfilsort

BFILSORT sorts your file directories (the descript.ion files). The
entries before and after the dot entries are sorted separately. If you
want to have nicely sorted file directories, run this command every
day.

70       BBBS BFTP - Batch FTP


B  B  B  S     B  F  T  P     -     B  a  t  c  h     F  T  P  
_______________________________________________________________________________

Usage: bbbs bftp [commandfile] [get-dir]

BFTP can be used to use BBBS's internal FTP routines in batch mode. The
parameter commandfile should be the search path of a file containing
the commands to execute, each on their own line. get-dir should be the
directory the FTP command 'get' should store the transferred files to.

Note that the first line of commandfile should contain the address of the
FTP server that should be connected to. Also, the last command should be
"quit", otherwise BFTP will revert into interactive FTP mode.

An example of a commandfile:

ftp.bbbs.net
anonymous
myname@myhost
cd /pub/dist/bbbs
get *
quit

If you give empty commandfile (NUL or /dev/null, for example) then BFTP runs in
interactive mode.

BFTP can also be used to transfer FidoNet mail. See commands like "put
2:22/222" and "getdel *" from BFTP's help.

                              BBBS BFSTAT - Create filearea statistics       71


BBBS BFSTAT - Create filearea statistics
_______________________________________________________________________________

Usage: bbbs bfstat

BFSTAT will calculate and display simple statistics from your file
areas. It will output the top downloads, top downloads for directories
and top downloads per file for directories.

72       BBBS BHATCH - Hatch the specified file into the specified file-echo


BBBS BHATCH - Hatch the specified file into the specified file-echo
_______________________________________________________________________________

Usage: bbbs bhatch {-replace_file} [filename] [echoname] {description}

BHATCH is used to hatch a new file into a TICK file-echo. The
filename-parameter specifies the file to hatch. Echoname is the name
of the file-echo the file should be hatched into, as entered in
external.bbb. If you do not specify a description, then BHATCH will
try to read it from your file area.

The replace_file-parameter is also optional. It specifies the file
that should be replaced by this file. You cannot use wildcards, for
obvious reasons.

                                BBBS BKILL - Kill users with criterias       73


B B B S   B K I L L   -   K i l l   u s e r s   w i t h   c r i t e r i a s 
_______________________________________________________________________________

Usage: bbbs bkill {Tyyyymmdd} {Cx} {Lx} {Rx} {Ux} {Ix} {*}

BKILL can be used to kill users with certain criterias. You can
specify one or more of the criterias. To be killed or listed, the user must
match all the criterias.

Tyyyymmdd   All users who haven't called since yyyymmdd. Defaults into
            one year from the current date.
Cx          All users who have called less than x times.
Lx          All users who have written less than x messages.
Rx          All users who have read less than x messages.
Ux          All users who have uploaded less than x bytes.
Ix          All users who have limit x (default=don't care (256)).

By default BKILL only lists the users who match the specified
criterias. If you are absolutely hundred percent positive that you
want to kill the users matching the criterias, you need to add the
*-parameter to the end of the command line.

74       BBBS BLINKFIX - Update the datestamps of file links


BBBS BLINKFIX - Update the datestamps of file links
_______________________________________________________________________________

Usage: bbbs blinkfix

BLINKFIX updates the dates of the file links to match the dates of the
real files they are links to. This command should be run every day if
you are using file links.

                           BBBS BLIST - Make an ASCII format file list       75


BBBS BLIST - Make an ASCII format file list
_______________________________________________________________________________

Usage: bbbs blist [filename] {groups {starting_dir}}

BLIST can be used to build an ASCII-format file of all the files in
your BBS. The list will be in the same format as the output of the
"f s -r *"-command. To create a list of only new files, you can use the
command BNEWF.

The only required parameter is the name of the file the resulting list
should be written to. The group-parameter can be used to generate
lists of files only for different groups. When used, only files for
that group has read-access to are included into the list. The
starting_dir-parameter simply defines the directory the list
generation should be started from. By default, generation will start
from the first directory defined in filedirg.000.

The starting_dir-parameter can only be used if the groups-parameter is also
defined.

76       BBBS BMKILL - Kill messages with criterias


BBBS BMKILL - Kill messages with criterias
_______________________________________________________________________________

Usage: bbbs bmkill [area] [from] [to] [subject] [after] [before] {*}

BMKILL can be used to kill messages according to certain criterias. The
area, from, to and subject parameters are regular expressions that are
matched against their relative fields. after and before parameters can
be standard days; either in yymmdd-format or, for example "-10", for "ten days
before the current date". For a message to be taken into account, it must
match all criterias.

By default, BMKILL only lists the messages that match the specified
criterias. If you are absolutely one hundred percent sure that you want
to kill the messages, an additional * parameter has to be added.

Note that the BBBS BPC command has to be used to actually remove the
killed messages from the message base.

                                BBBS BMSG - Import/export FidoNet mail       77


B B B S   B M S G   -   I m p o r t / e x p o r t   F i d o N e t   m a i l 
_______________________________________________________________________________

Usage: bbbs bmsg [R|W|F]

The BMSG command can be used to interface BBBS with an external mail
tosser. BMSG converts the messages in BBBS messagebase into FTS-0001
format and vice-versa.

The R-parameter (BBBS BMSG R) is used to collect all the new messages
from BBBS and convert them into FTS-0001 format files and write them
into directories specified in BCFG4. After this command, a mail
processor of some sort should be run to create outbound mail packets.

The W-parameter (BBBS BMSG W) is used to write all the *.MSG format
messages to BBBS. Again, they are read from the directory specified in
BCFG4.

The final parameter (BBBS BMSG F) requires an additional parameter;
the file name of an areatoss file. This file should contain the
names or numbers of the areas that should be scanned for new
messages. BBBS automatically generates a file called areatoss.nnn into
the temporary directory, where nnn is the node number.

It is highly recommended that you use the BBBS's internal BOGUS mail
tosser instead of an external one.

78       BBBS BMT - A FidoNet message tracker


B B B S   B M T   -   A   F i d o N e t   m e s s a g e   t r a c k e r 
_______________________________________________________________________________

Usage: bbbs bmt

BMT will scan your NetMail directory for messages with unlisted
destination address. It also logs the sender, receiver and subject of
the NetMail messages. This command can be run after NetMail is written
into the message base.

                                    BBBS BNC - Compile the nodelist(s)       79


B B B S   B N C   -   C o m p i l e   t h e   n o d e l i s t ( s ) 
_______________________________________________________________________________

Usage: bbbs bnc {x}

BNC compiles the nodelist(s) defined in the external.bbb-file to be
used with BBBS. This command should be run every time there is changes
to a nodelist. If you give an additional parameter (can be
anything), then the nodelist is complied even if it is up to date.

80       BBBS BNDIFF - Update a nodelist from a NODEDIFF


BBBS BNDIFF - Update a nodelist from a NODEDIFF
_______________________________________________________________________________

Usage: bbbs bndiff

You should run BNDIFF every time you receive a nodediff. It will
automagically update the nodelist to be consistent with the nodediff.
The nodediff names are read from the nodelist-section of the
external.bbb-file.

                   BBBS BNEWF - Make an ASCII format list of new files       81


BBBS BNEWF - Make an ASCII format list of new files
_______________________________________________________________________________

Usage: bbbs bnewf [filename] {groups} {starting_dir} {date}

BNEWF can be used to build an ASCII-format file of the new files in
your BBS. The list will be in the same format as the output of the
F S *-command. To create a list of all files in your system, you can use
the command BLIST.

The only required parameter is the name of the file the resulting list
should be written to. The group-parameter can be used to generate
lists of files only for different groups. When used, only files for
that group has read-access to are included into the list. The
starting_dir-parameter simply defines the directory the list
generation should be started from. By default, generation will start
from the first directory defined in filedirg.000.

The date-parameter can be used to control the date after which files
are considered to be "new". It can be any standard date, like 961125
(for the 25th of November, 1996) or, for example, -10, meaning the
date ten days before the current day.

For example, to include the new files since the last ten days to the list
in the file newfiles-10, issue the command:

bbbs bnewf newfiles-10 all / -10

82       BBBS BNMSG - Send a node message.


B B B S   B N M S G   -   S e n d   a   n o d e   m e s s a g e . 
_______________________________________________________________________________

Usage: bbbs bnmsg [fromnode] {-fromnick} [tonode] [message]

BNMSG sends a node message to the BBBS. fromnode is the node the
message should be coming from. The optional parameter fromnick defines
the nick from which the message will seem to come from. tonode is the
node that the message should be sent to. The message itself can be up
to 250 characters long.

                       BBBS BNNTP - Exchange netnews with NNTP servers       83


BBBS BNNTP - Exchange netnews with NNTP servers
_______________________________________________________________________________

Usage: bbbs bnntp w [host0] {host1} {host2} {...}
       or bbbs bnntp r [host0] {host1} {host2} {...}
       or bbbs bnntp z [host0] {host1} {host2} {...}
       or bbbs bnntp s [host] [localname] [n]
       or bbbs bnntp c [host] [localname] [n]
       or bbbs bnntp g [host] [filename]

BNNTP is used to exchange netnews with NNTP servers. The
action-parameter defines whether netnews should be sent or received
from the host(s) specified. The W action is used to receive, the R
action to send news. The host list must be either names or
IP-addresses of valid NNTP servers.

The Z action can be used to reset the want pointers to the last message
number in the servers specified.

The actions S and C and be used to set the want pointers so that at
maximum n messages are returned the next time news are received from the
host specified, with the exception that with the C action, no duplicate
articles (such articles that you have already received) will be transferred.

The G action can be used to get the list of available areas in host to the
file filename.

If your news server require you can replace host with host,username or
host,username,password to send extra authinfo commands.

84       BBBS BOGUS - The BBBS internal FidoNet mail processor


BBBS BOGUS - The BBBS internal FidoNet mail processor
_______________________________________________________________________________

Usage: bbbs bogus w
       or bbbs bogus b
       or bbbs bogus r
       or bbbs bogus f [filename]
       or bbbs bogus a
       or bbbs bogus n {nodes}
       or bbbs bogus z {nodes}
       or bbbs bogus d

BOGUS is BBBS's internal FidoNet mail processor. It can be used to
import and export FidoNet mail. Instead of BOGUS, you can also use
other, external mail processors with BBBS BMSG, but this is not
recommended, as BOGUS can directly manipulate the BBBS messagebase and
is therefore a lot faster.

The behavior of BOGUS is controlled via the FidoNet-configuration in
the external.bbb-file.

There are six different actions that can be used. The W-action
(bbbs bogus w) is used for toss/pack; BOGUS tosses all incoming mail
packets in the FidoNet inbound directory, forwards mail to the
downlinks of your node and imports the mail into the BBBS message
base.

The B-action (bbbs bogus b) is almost the same as the W-action, with
the exception that only the badecho-directory is checked for messages.

The R-action (bbbs bogus r) is used for scan/pack; BOGUS scans the
BBBS message base for mail that is to be exported and packs it.

The F-action (bbbs bogus f) requires an additional parameter: a
filename for an areatoss file that should list the area names or
numbers that should be scanned for exportable mail. An areatoss-file
is automatically generated by BBBS into the temporary directory, named
as areatoss.nnn, where nnn is the nodenumber of the node that the
areatoss-file is for. Otherwise, the F-action works like the R-action.

The A-action (bbbs bogus a) is like the R-action, with the exception
that it uses internal quick scan information to check which areas
contain exportable mail. When you use the A-action, the first run can
be very slow, but subsequent runs are a lot faster than scans done
with just the R-action.

The N-action also requires additional parameters. A list of downlinks
or nodes should be specified. An area connection notify is then sent
to the nodes/downlinks specified. For nodes that have a ! character in
their st field in the nodes-section of external.bbb, the notify is
sent only if the node has also the apass field defined.

The R-action should be used daily, even if F or A-actions are used on
user logoff to ensure that all mail is actually exported.

The Z-action deletes specified nodes from external.bbb, and also their outbound
packets. USE WITH CAUTION!

The D-action prints debug information about routings.

      BBBS BOK - Make an OKFILE.TXT file for use with FrontDoor mailer       85


BBBS BOK - Make an OKFILE.TXT file for use with FrontDoor mailer
_______________________________________________________________________________

Usage: bbbs bok [path]

BOK is used to generate a list of files for the FrontDoor mailer. The
path-parameter should specify the directory to which your FrontDoor is
installed. FrontDoor can then receive file requests and answer to
them. BOK will create two files: reqlist.txt, containing the
directories from which files can be requested and okfile.txt,
containing links to the files. You should specify these files also in
your FrontDoor configuration.

It is highly recommended that instead of FrontDoor you use BBBS's
internal BackDoor mailer.

86       BBBS BOM - Command line interface to the BBBS outbound manager


BBBS BOM - Command line interface to the BBBS outbound manager
_______________________________________________________________________________

Usage: bbbs bom [command]

BOM can be used to interface with the BBBS's outbound manager. The

With outbound manager you can manage your outbound mail. When you enter
into your outbound manager window, you will get list of our outbound mail.
List format is following:

Nodenumber         Age Flags     Bad Busy ArcMail Files
------------------ --- --------- --- ---- ------- -------
2:222/222.0          0 IC RFDE     0    0    45kB  1994kB
2:220/666.0          0   H FDE     0   12     3kB    10kB

Age tells you how old the oldest outgoing NetMail is, i.e. how long time
ago that node polled you.

Flags are:

Immidiate
Crash
Hold
File Request
File attach
Direct
Erase file when sent

Bad tells you number of many unsuccessfull mailsessions there is.
You can limit number of these from BCFG4.

Busy tells you number of busy calls. Busycalls area cleared every
night.

ArcMail tells you amount of outbound ArcMail.

Files tells you amount of outbound Files.

command-parameter can be any valid outbound manager command:

List {node#}                    List messages (for node)
CHange [message#|node#] {modif} Change message number/all messages for node
Create [node#] {modifiers}      Create message for node
Delete [message#]               Delete message
BAd [node#] [number]            Change number of bad polls for node
Busy [node#] [number]           Change number of busy polls for node
CLear                           Clear tickdir and attach messages
Quit                            Quit back to main menu

Modifiers are:

{New_to_Node#}
{+|-}Immediate  {+|-}Crash  {+|-}Hold  {+|-}Request  {+|-}File  {+|-}Direct
{+|-}Erase      {+|-}Trunc  {+|-}Lock
{New_Subject}

                           BBBS BPC - Pack a conference with criterias       87


BBBS BPC - Pack a conference with criterias
_______________________________________________________________________________

Usage: bbbs bpc a [areaname] [min] [max]
       or bbbs bpc b
       or bbbs bpc s [areaname] [num]
       or bbbs bpc r [areaname]
       or bbbs bpc t

BPC is used to renumber the messages in the conferences. DO NOT RUN
ANY BPC COMMANDS WHILE THERE ARE USERS LOGGED IN! This will cause very
nasty effects you don't want to experience. Don't say we didn't warn you.

BPC A will delete messages from the conference areaname, so that at
least min messages are left active, but no more than max.

BPC B works like BPC A, but it processes all the conferences, reading
the min and max values from the conference configuration in BCFG4.

BPC S deletes all messages from the conference areaname that have a
number smaller than num.

BPC R will repair the conference areaname, renumbering the messages so
that the first active message will be the message number one.

BPC T scans for bad areas and fixes them, if any are found. It will
also renumber the conference like BPC R, if there are more than 62000
active messages in the conference.

88       BBBS BPOP - Receive mail from POP3 server


BBBS BPOP - Receive mail from POP3 server
_______________________________________________________________________________

Usage: bbbs bpop [host] [userid] [password]

BPOP receives and deletes all mail from userid's POP3 mailbox in host host,
using the password password. BPOP first tries to make a secure APOP login
and then falls back to normal login if that is unsuccessful. If you want
to send your email out, you must of course use the BBBS BSMTP command.

POP3 cannot be reliably used with BBS's as the real receiver's name cannot
be determined. Still, BBBS will try to figure it out from the "To:"-line.
It is very recommended to use bbbsd and SMTP instead.

                     BBBS BPURGE - Purge old files from the file areas       89


BBBS BPURGE - Purge old files from the file areas
_______________________________________________________________________________

Usage: bbbs bpurge

BPURGE deletes old files from your file areas. In external.bbb write:

[purge]

d:/pub/txt/fido/fnews*         10
d:/pub/txt/fido/nodediff.*      3

BPURGE leaves only 10 newest fnews* and 3 newest nodediff.* files to your
d:/pub/txt/fido directory.

90       BBBS BPUS - Pack the user database


B B B S   B P U S   -   P a c k   t h e   u s e r   d a t a b a s e 
_______________________________________________________________________________

Usage: bbbs bpus

BPUS will pack the user database by removing all killed users. DO NOT
USE THE BPUS COMMAND WHILE THERE ARE USERS LOGGED IN! This will cause
nasty effects you will not want to experience. Don't say we didn't
warn you.

                                     BBBS BRSA - Generate new RSA keys       91


B B B S   B R S A   -   G e n e r a t e   n e w   R S A   k e y s 
_______________________________________________________________________________

Usage: bbbs brsa

BRSA generates new RSA keys for BZLink-Lite connections by making a new
bzll.dat-file to the main-directory. Please be patient, it might take a
long while to run.

92       BBBS BSETPACK - Pack the environment variable settings file


BBBS BSETPACK - Pack the environment variable settings file
_______________________________________________________________________________

Usage: bbbs bsetpack

BSETPACK packs the user settings file. This command should be run
every day. DO NOT RUN BSETPACK WHILE THERE ARE USERS LOGGED IN! This
will cause nasty effects you will not want to experience. Don't say we
didn't warn you.

                         BBBS BSMTP - Exchange email with SMTP servers       93


BBBS BSMTP - Exchange email with SMTP servers
_______________________________________________________________________________

Usage: bbbs bsmtp w [hostname]
       or bbbs bsmtp r [hostname]

BSMTP is used to exchange email with ESMTP or SMTP servers. BSMTP W sends and
receives email to/from the specified host. Receiving email requires a server
that supports the 'etrn' (ESMTP) or 'turn' (SMTP) command. Normally the 'turn'
command is disabled in SMTP servers as it creates a well-known security hole.
To receive email, you can use BBBS's internal ESMTP daemon, bbbsd.

BSMTP R simply sends all outgoing email to the specified host.

94       BBBS BSTAT - Show a statistics list


B B B S   B S T A T   -   S h o w   a   s t a t i s t i c s   l i s t 
_______________________________________________________________________________

Usage: bbbs bstat

BSTAT displays some BBBS usage statistics for the last seven days. It
displays the total amount of online minutes, calls and messages left
to the system.

          BBBS BTICK - Process he incoming TICK files from file-echoes       95


BBBS BTICK - Process he incoming TICK files from file-echoes
_______________________________________________________________________________

Usage: bbbs btick

BTICK is used to process the incoming TICK files from the
file-echoes and to place the files to correct file areas in your
BBBS. You should run this command every time you receive TICK files.

96       BBBS BTIME - Adjust the time with a timeserver


BBBS BTIME - Adjust the time with a timeserver
_______________________________________________________________________________

Usage: bbbs btime [hostname] [max_diff] [add_secs]

BTIME can be used to adjust the clock of your computer according to the
time on a timeserver residing in the host specified by hostname.
BTIME defaults to socket number 37, the standard time socket.

The max_diff parameter should be used to specify the maximum
difference (in seconds) that can exist. If the difference is greater than
max_diff seconds, then no adjusting is done.

add_secs specifies the amount of seconds to add to the time received from
the timeserver. It should be 0, unless the 'ping' time to the timeserver
host is very long.

                      BBBS BTXT2BBS - Convert a text file to a message       97


BBBS BTXT2BBS - Convert a text file to a message
_______________________________________________________________________________

Usage: bbbs btxt2bbs [areaname] [file] {/F from} {/T to} {/S subject}

BTXT2BBS is used to import a single text file to the BBBS message
base. areaname is the name of the area that the message should be
written to. file is the name of the file to be written. The /F, /T and
/S switches can be used to change the sender, receiver and subject of
the message, but they are optional. They default to "SysOp", "all" and
the name of the file being written.

98       BBBS BWHO - Show who is online at the moment


BBBS BWHO - Show who is online at the moment
_______________________________________________________________________________

Usage: bbbs bwho

BWHO shows the online status of the system at the moment, in the same
format as BBBS's internal who-command.

                                              BBBS and TCP/IP networks       99


B  B  B  S     a  n  d     T  C  P  /  I  P     n  e  t  w  o  r  k  s  
_______________________________________________________________________________

All versions of BBBS (except for the PC-DOS version, BBBS/D) can very easily be
interfaced with TCP/IP networks, such as the internet. BBBS can by itself
handle a lot of different TCP/IP services. This manual does not deal with the
basics of TCP/IP networking - we expect that you already know something about
them. If you do not, read a good book about TCP/IP networking before starting.

BBBS handles all incoming TCP/IP services with a special daemon program, bbbsd.
It can handle incoming FTP, telnet (both regular and raw), SMTP, FINGER, POP3,
ident and MRTG connections. Features (such as access control) for outgoing
connections (done by your users from the system) are configured in the
inet.bbb-file. To make your system answer incoming service requests, you start
bbbsd with the appropriate services enabled. To allow your users use of
outgoing services (such as telneting and ftp'ing out), you first allow your
users to use the service in the groups-file and add possible restrictions to
the inet.bbb-file.

When we talk about "bbbsd services" we mean the names that are used in
conjunction with bbbsd to start a 'daemon' for the service in question. See the
command line reference for more details.


Telnet/Raw

Incoming telnet connections are handled by bbbsd's 'telnetd' service. Both
"dialup" and "telnet" nodes in your system can accept telnet logins. The 'min'
parameter of bbbsd should be the first node that is telnetable on your system
and the 'max' parameter the last one. This means that your telnet nodes must be
sequential (unless you start multiple bbbsd's on different ports).

Outgoing telnet connections are handled by BBBS itself, and both "dialup" and
"telnet" nodes can make a TCP/IP outbound connection. When doing so, BBBS will
automatically distinguish between telnet and raw/binkp connects and make the
appropriate transmission. This allows BBBS to be used seamlessly with regular
telnet systems and binkp systems. If you want to do this, you must start BBBS
with the TCPIP device. When doing so, the com parameter is ignored.

Note that nodes that are started for TCP/IP dialling should have slow protocols
enabled in BCFG4. Also, the "dial string" should be just ATD, not "ATDT". With
outgoing telnet connections, the ATZ command is used to control the connection
type: ATZ7 defaults to 7-bit connection, ATZ8 to an 8-bit one.

For a telnet poller, following nodelist format should be used:

  ;A With just an IP-address, using nonstandard port 666:
  ;A
  ,1000,A_Telnet_Poller,Cyberspace,Joe_Hacker,192.210.9.14:666,300,IP
  ;A
  ;A With a nameserver address, using default port 23:
  ;A
  ,1000,A_Telnet_Poller,Cyberspace,Joe_Hacker,bbs.telnetpoll.org,300,CM,IP

You can use the above in your external.bbb under the [node_remap] section to
override local nodelist entries in your primary nodelists. In this situation
(so you can use both seamlessly) the IP flag used above is important as you can
use it as a regexp search for BBBS to use when looking to dial a system (see
Local: Modem: Dial for more information on outbound dialing and regexp).

100      BBBS and TCP/IP networks




Finger

Incoming finger connections are handled by bbbsd's "fingerd" service. This is
the standard finger protocol and it allows people outside of your system to
obtain information about your system and the users on it. Remember to check
your inet.bbb file for incoming finger configuration!


FTP

Incoming FTP connections are handled by bbbsd's "ftpd" service. This allows you
to open up your system to your users to connect via FTP, or allow anonymous FTP
users to download files from your system. Security issues are discussed in the
filedirx.* section and inet.bbb section. FTP visitors will only have access to
those areas defined in your filedirx.* files, but you might want to limit
anonymous users, etc. These are all discussed in the filedirx.* section.


POP3/SMTP

Incoming POP3 and SMTP connections are handled by bbbsd's "popd" and "smtpd"
services respectively. These allow for incoming and outgoing mail to your
system. The POP3 protocol is typically used by your users who will connect to
your system with their own email client and download any mail waiting for them
in your email message base. The SMTP protocol can also be used for the same
thing, but is used by other internet machines who are delivering mail to your
system for one of your users.


Ident

When this service is enabled, the remote system can ask from you the
telnetter's login id when you telnet (or IRC or...) out. Using identd is
recommended only if you really need it.


MRTG

MRTG stands for Multi Router Traffic Grapher. See
http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html for full description.
To get statistics from bbbsd to MRTG you need following Python script
(copyright (c) Unknown, sorry):

  #!/usr/bin/python
  import sys
  from socket import *
  PORT = 16425
  s = socket(AF_INET, SOCK_STREAM)
  s.connect( sys.argv[1], PORT)
  s.send("%sn" % sys.argv[2])
  data = s.recv(1024)
  s.close()
  print data[:-1]

Install MRTG according to it's documentation, use following section in
mrtg.conf:


                                              BBBS and TCP/IP networks      101


  Target[bbbs-io]: `/usr/local/mrtg/bbbs.py localhost io`
  MaxBytes[bbbs-io]: 1250000
  Title[bbbs-io]: BBBS io
  PageTop[bbbs-io]: <H1>BBBS io</H1>
  AbsMax[bbbs-io]: 125000000
  Options[bbbs-io]: gauge

bbbsd supports io and user (active/new connections) commands, see second
parameter to the Python script above.

102      bbbsd - the BBBS network daemon


b b b s d   -   t h e   B B B S   n e t w o r k   d a e m o n 
_______________________________________________________________________________

If you are running your BBBS system in a TCP/IP network, you can make your
system accessible through the network as well. The bbbsd program is the
"daemon" program that handles all communication between your system and the
network. To get maximum security and stability when using bbbsd, you should be
familiar with TCP/IP networks in general, which is beyond the scope of this
documentation.

bbbsd can handle the following incoming services:

- Telnet: the standard telnet protocol, allowing users to log in via the
  network. Please note that plain 'telnet' is not secure!  Your telnet
  users should always use BZLink-Lite in the BTERM telnet program.
- Finger: the standard finger protocol, allowing people to get information
  about your system and it's users via the network.
- SMTP: the SMTP protocol, allowing your system to receive E-Mail through
  the network.
- POP: the POP3 mailbox protocol, allowing your users to get their mail via
  the network.
- FTP: the standard FTP protocol, allowing your users access to your file
  areas without logging directly into the BBBS via telnet.
- Ident: the standard Ident protocol, allows other to track your outgoing
  connections.
- MRTG: See {"BBBS and TCP/IP networks" link SYS_TCPIP} for description.

The calling convention of bbbsd is:

bbbsd [min] [max] [mode:port{":binkp"}] [mode...] {priority} {"quiet"}
      {"fork"} {"uid:loginname"}

min      is the first node to use for the connection. In a typical
         situation where there are 2 dialin and 5 telnet nodes, you would
         select the number 3 here for telnet/ftp/raw services so as not to
         interfere with your first two dialin nodes. For the other services
         like pop/smtp/finger/ident, you could specify the number 1 here to
         provide a greater opportunity for incoming connections. Since those
         services have no long-term impact and are generally very quick
         connections, it makes sense to allow the extra two nodes to be used.
         (This usually requires that you run bbbsd twice; once for the
         interactive services and once for the non-interactive services).

max      is the last node to use for the connecion. If you only have a
         7 node license, you would place the number 7 here.

mode     is the service name to start. You can start more than one service
         when you call bbbsd, however they will all obey the min/max node
         restrictions defined previously.

port     the incoming port the service will monitor for a connection. The
         standard ports for the services are:

            service       standard port
            ============  =============
            ftpd          21
            telnetd       23
            smtpd         25
            fingerd       79

                                       bbbsd - the BBBS network daemon      103


            popd          110
            identd        113
            mrtgd         16425
            rawd          24554

          The port to use MUST be defined on the commandline (ie. to start the
          ftp service you would use ftpd:21, etc.).

"binkp"  this forces binkp mode for telnet and rawd services. This will
         tell BBBS to allow ONLY binkp connections, not regular telnet.

priority defines the OS priority the daemon should run in.

"quiet"  tells the daemon not to print any output (to be quiet).

"fork"   tells the daemon to fork the service to the background. This is only
         available in the UNIX versions.

"uid"    sets the client's uid and gid for the incoming service. This is only
         available in the UNIX versions.

104      Waiting for a caller screen


W a i t i n g   f o r   a   c a l l e r   s c r e e n 
_______________________________________________________________________________

When BBBS is waiting for a caller, it displays some statistics, like the name
of the previous caller and the amount of messages entered. In this screen,
there are some keys that you can use to invoke different options. They are
listed below.

You can also select all these options from the pull-down menus, activated with
the F1 key. Some of the options are available only if you have enabled Backdoor
from BCFG4. They are marked with an asterisk ('*').

alt-A      Set SysOp available for chat requests.
alt-B      Set modem busy and exit BBBS.
alt-E      Exit with an errorlevel.
alt-F      Force modem to answer an incoming call now.
alt-G      Request a file from a remote system. *
alt-J      Start the BTERM Terminal Emulator.
alt-L      Make a local login to this node.
alt-N      Set SysOp not available for chat requests.
alt-O      Start the outbound manager. *
alt-P      Poll a remote system. *
alt-Q      Exit BBBS with errorlevel 0.
alt-S      Send a file to a remote system. *
alt-X      Reset modem.
alt-Z      Jump to OS shell.
space      Rescan outbound messages. *

                                                      Local SysOp keys      105


L  o  c  a  l     S  y  s  O  p     k  e  y  s  
_______________________________________________________________________________

Listed below are the local sysop keys you can use when an user is logged into
your BBBS system, assuming you have enabled sysop keys in BCFG4.

F10        Show information about the user that is online.
F6         Start full screen SysOp-to-user chat. Press ESC to end it.
F7         Start line-by-line SysOp-to-user chat. Press F7 again to
           end chat.
shift-F1   Reduce the online users' time by 5 minutes.
shift-F2   Reduce the online users' time by 1 minute.
shift-F3   Increase the online users' time by 1 minute.
shift-F4   Increase the online users' time by 5 minutes.
shift-F5   Reduce the online users' time limit by 5 minutes, permanently.
shift-F6   Reduce the online users' time limit by 1 minute, permanently.
shift-F7   Increase the online users' time limit by 5 minutes, permanently.
shift-F8   Increase the online users' time limit by 5 minutes, permanently.
alt-A      Set SysOp available for chat requests.
alt-B      Enters backscroll mode. Cursor keys up and down scroll, ESC
           key ends backscroll. Enter and space keys paste the middle
           line to the user screen . The backscroll is completely transparent;
           the remote user will not notice that you are in backscroll.
           Backscroll cannot be used while the user is downloading. Backscroll
           is available only in operating systems that have threads.
alt-C      Start full screen SysOp-to-User chat. Same as F6.
alt-E      Toggle whether the stuff sent to remote users' screen
           should be displayed in local screen.
alt-F      Grant file access to the user online. This is a permanent
           access change.
alt-K      Hangup this node now.
alt-L      Lock the remote keyboard. With this you can make sure that
           the remote user does not interfere with what you're doing on the
           node. Very useful when you grant temporarly SysOp access.
alt-N      Set SysOp not available for chat requests.
alt-Q      Take this node down after the current user logs out.
alt-S      Toggle temporary SysOp access #255 for the user
           online.
alt-U      Adds a file to the outgoing batch in HYDRA sessions. You
           should write the name of the file to be added to the chat
           window.
alt-Z      Drop to OS shell. The user online will get a message
           informing him that the SysOp has dropped into OS and that
           he should wait for the SysOp to return. Nasty.
alt-0      Run keyboard macro 0.
alt-1      Run keyboard macro 1.
alt-2      Run keyboard macro 2.
alt-3      Run keyboard macro 3.
alt-4      Run keyboard macro 4.
alt-5      Run keyboard macro 5.
alt-6      Run keyboard macro 6.
alt-7      Run keyboard macro 7.
alt-8      Run keyboard macro 8.
alt-9      Run keyboard macro 9.

106      BTERM, the small VT320 terminal emulator


BTERM, the small VT320 terminal emulator
_______________________________________________________________________________

BTERM, accessible from either the waiting for a caller-screen or from
the command line by specifying the device BTERM (or by starting
the BBBS executable named to bterm), is a small VT320 terminal emulator.
It allows you to call to other systems quickly, without having to start
another program.

When BTERM is started from the command line, any additional
parameters after the device will be interpreted as script names to be
executed.

If BTERM is started with the ISDN device (OS/2 version only), then BTERM
can interface the ISDN CAPI via a simple Hayes command emulation:

Command       Action
========================================================
ATA           Answers incoming ISDN call.
ATDxxxx       Dials number xxxx.
ATI           Gives some information.
ATZ           Initializes the ISDN CAPI.
ATZx          Specifies the EAZ level x.

If BTERM is started with the TCPIP device, then BTERM can "dial" out
using the standard TCP/IP telnet protocol. The ATD command can be used
to achieve this. After the ATD command, simply insert the hostname or
an absolute IP address. For example, to telnet to fix.no, just type
"ATDfix.no". If you want to specify a different port than the standard
telnet port (23), then you should separate it from the hostname or

IP address with the hash character ("#"). For example, to telnet to
foobar.org, port 3000, type "ATDfoobar.org#3000". Also, the ATZ command can
be used to control the telnet connection type: ATZ7 defaults to 7-bit
connections, ATZ8 to 8-bit ones.

If BTERM is started with the commandline:

  bterm 2 COM2 SMS: [servernumber] [text]

BTERM will send an SMS message with the text [text].


The following keys can be used in the terminal screen:

F1    Show this help.
F2    Send SMS message using EMI protocol.
F5    Toggle BZLink-Lite on/off. When you are connected with
      BZLink-Lite, you cannot disable it.
F6    Set BZLink-Lite file transfer priority. Priority 1 is the
      slowest.
F7    Show some BZLink-Lite statistics: status of current
      download/upload, the amount of sent packets and the amount of
      resends for this session.
Alt-A Toggle audio bell on/off.
Alt-B Enter backscroll mode. Up/down arrow keys scroll, space and
      enter keys paste the middle line to the terminal.
Alt-C Select the character set to use. By default, BTERM uses the
      ISO character set.

                              BTERM, the small VT320 terminal emulator      107


Alt-E Execute a BZ-script in BTERM mode.
Alt-F Send a FAX.
Alt-G Get (download) a file.
Alt-J Clear screen.
Alt-K Hang up now, without asking.
Alt-L Toggle the log file (bterm.log) on/off.
Alt-M Toggle newline/linefeed mode.
Alt-O Record a voice file.
Alt-P Enter the phonebook.
Alt-Q Quit BBBS, exit straight into the OS.
Alt-R Send a break signal.
Alt-S Send (upload) a file.
Alt-T Display the elapsed online time.
Alt-U Change baud rate.
Alt-V Playback a voice file.
Alt-X Quit BTERM; exit into the caller waiting screen or into
      OS, depending on where BTERM was started from.
Alt-Z Shell into the OS.
Alt-0 Run keyboard macro 0.
Alt-1 Run keyboard macro 1.
Alt-2 Run keyboard macro 2.
Alt-3 Run keyboard macro 3.
Alt-4 Run keyboard macro 4.
Alt-5 Run keyboard macro 5.
Alt-6 Run keyboard macro 6.
Alt-7 Run keyboard macro 7.
Alt-8 Run keyboard macro 8.
Alt-9 Run keyboard macro 9.

When calling to BBBS with BTERM the correct settings in BBBS are:

  u key -yes te vt320 s iso ed mg set "mode" b

108      The BTERM Phonebook


T  h  e     B  T  E  R  M     P  h  o  n  e  b  o  o  k  
_______________________________________________________________________________

Pressing ALT-P in the BTERM terminal screen opens the phonebook.

The following keys can be used:

Up/Down  Move the selector.
Space    Mark the system under the selector.
Enter    Start dialing. If no systems are marked, the system under the
         selector is dialled. Otherwise, the systems are dialed in the
         order they were marked.
E        Edit the entry under the selector.
Del      Delete the entry under the selector.
Ins      Insert a new entry to the selector position.
ESC      Exit phonebook to terminal screen.

BBBS uses the file bterm.pho to store the phonebook.

                                 Really delete phonebook entry -dialog      109


R e a l l y   d e l e t e   p h o n e b o o k   e n t r y   - d i a l o g 
_______________________________________________________________________________

When you delete entries, BTERM wants you to confirm that really want to delete
the phonebook entry.

If you do, press Y. If you do not, press N.

110      BBS name -dialog


B  B  S     n  a  m  e     -  d  i  a  l  o  g  
_______________________________________________________________________________

When inserting entries, you will be presented with two dialogboxes. To the BBS
name-dialog you should enter the name of the system in question. After this,
you will get the BBS phonenumber -dialog

                                               BBS phonenumber -dialog      111


B  B  S     p  h  o  n  e  n  u  m  b  e  r     -  d  i  a  l  o  g  
_______________________________________________________________________________

Enter here the phonenumber(s) of the system. If the system has many nodes,
just enter them all. When you have entered enough phonenumbers, press
enter on an empty dialog. When dialling to a system, BTERM will call the
numbers you entered sequentially.

Note that BTERM will do phone number conversion to these entries, too!

112      Download a file -dialog


D  o  w  n  l  o  a  d     a     f  i  l  e     -  d  i  a  l  o  g  
_______________________________________________________________________________

Alt-G starts file downloading (gets a file from remote).

BTERM supports following file transfer protocols for downloading files:

        HYDRA          bidirectional with chat
        Slow-HYDRA     HYDRA for 7bit links
        Zmodem         unidirectional full stream
        Ymodem         unidirectional with block acking
        ZedZap         Zmodem with 8kB blocks
        Kermit         unidirectional, bit slow, but very universal

If you use HYDRA you can also upload files at the same time. To add files after
you have started a download session, press Alt-C to enter the HYDRA chat
window. Then type the filename with full pathname and press Alt-U to add it to
the outgoing batch.

                                            Filename to upload -dialog      113


F  i  l  e  n  a  m  e     t  o     u  p  l  o  a  d     -  d  i  a  l  o  g  
_______________________________________________________________________________

When you start uploading, you will be presented with a dialog to which you
should enter the file names that should be uploaded (wildcards are ok). Press
Enter on an empty dialog to enter the file selector.

After this dialog, you will be presented with the upload protocol-dialog. In
the selector you can move with the cursor keys, delete a file with the del-key
and send the file under the selector with the space bar.

114      Upload protocol -dialog


U  p  l  o  a  d     p  r  o  t  o  c  o  l     -  d  i  a  l  o  g  
_______________________________________________________________________________

BTERM supports following file transfer protocols for uploading files:

HYDRA          bidirectional with chat
Slow-HYDRA     HYDRA for 7bit links
Zmodem         unidirectional full stream
Ymodem         unidirectional with block acking
ZedZap         Zmodem with 8kB blocks
Xmodem         slow, but universal
Kermit         unidirectional, bit slow, but very universal
ASCII          just dump text file to remote

If you use HYDRA you can also download files at the same time. To add files
after you have started a upload session, press Alt-C to enter the HYDRA chat
window. Then type the filename with full pathname and press Alt-U to add it to
the outgoing batch.

                                                 Really delete -dialog      115


R  e  a  l  l  y     d  e  l  e  t  e     -  d  i  a  l  o  g  
_______________________________________________________________________________

When you press del in the file selection dialog, BTERM wants you to confirm
that really want to delete this file.

If you do, press Y. If you do not, press N.

116      Select charset -dialog


S  e  l  e  c  t     c  h  a  r  s  e  t     -  d  i  a  l  o  g  
_______________________________________________________________________________

Alt-C gives you a list of character sets that you can choose.

Possible choices are:

ISO Latin-1    8bit, used in most InterNet systems  (default)
IBM PC         8bit, used in most BBS systems
Finnish        7bit, used in some BBS in Finland
Norwegian      7bit, used in some BBS in Norway
UK             7bit, no national charset conversion
MAC            8bit, used by MAC computers

                                                     Text #1 - Text #3      117


T  e  x  t     #  1     -     T  e  x  t     #  3  
_______________________________________________________________________________

The SMS message to be sent. BTERM asks for it in three parts, each field is 60
chars long. Only the first 160 characters are transmitted.

118      The BZLink-Lite protocol


T  h  e     B  Z  L  i  n  k  -  L  i  t  e     p  r  o  t  o  c  o  l  
_______________________________________________________________________________

One of the most powerful features of BTERM and BBBS is the support of
the BZLink-Lite protocol. There are many advantages from using
BZLink-Lite. One of these features is the secure login
service. Systems that can act as BZLink-Lite servers (like BBBS)
autodetect BZLink-Lite clients (like BTERM) at login and make the
login secure, so that no passwords are transferred between systems,
only encrypted strings.

Another great feature of BZLink-Lite is that file transfers are
completely transparent: you can start receiving a file and continue
your business in the BBS in a normal way, with a negligible loss of
response time or file transfer speed.

BTERM's BZLink-Lite client mode is activated with the F5 key in the
terminal mode. Next login to a system with a BZLink-Lite server will
then be a BZLink-Lite one.

                             BBBS Scripts: The BZ Programming Language      119


BBBS Scripts: The BZ Programming Language
_______________________________________________________________________________

For heavy customization, BBBS has the possibility to run BZ49 processor
binaries. All scripts that are executed by BBBS are BZ49 binaries. The bzc
compiler program that came with BBBS can be used to generate BZ49 binaries
with the BZ programming language. The BZ language (hereafter referred to
only as BZ) is a very powerful programming language, with features from C,
Pascal and perl.

BZ source code files have the extension .BZ. BZ language header files have
the extension .BZH. BZ49 binaries have the extension .BZB. BZ49 assembly
source code files should have the extension .BZS.

BBBS will run the following scripts, residing in the script directory
specified in BCFG4:

Script     When it is run?
=========================================================================
ascript    Always when a user logs in.
auscript   After a user has entered a description for a uploaded file.
brobo      When a user sends an unknown command to BRoboCop.
dscript    After a user has downloaded a file.
editor     When a user starts message editing and his editor is "script".
error      When a user enters an unknown command.
gascript   When a user logs out with the g a-command.
gscript    When a user logs out normally.
gotfax     When a FAX is received.
gotmail    When new FidoNet mail is received.
gotvoice   When a voice call is received.
hotlog     After a special hotlogin string from the user.
lscript    When the user logs out, after GSCRIPT and GASCRIPT.
msgfilt    After a user has saved a message in a message editor.
msgpfilt   Before the message editor is invoked.
newupass   Before asking the closed system password.
nodemsgf   When a user receives a node message (to show it).
notavail   After a chat request, if sysop is not available.
opendoor   When a user executes the main menu OPen command.
postchat   After sysop-to-user chat has ended.
rscript    After a new user has registered to the system.
script     When a user executes the main menu Answer-command.
snooze     When a user is about to be sleep disconnected.
uscript    After a user has uploaded a file.

Also, every time BBBS tries to print the string \2foo\2, where \2 is the
ASCII character 2, the script foo is run. This can be used almost
everywhere BBBS displays something; the bbbstxt-files, menus, bulletins...

Some BZ-scripts have parameters passed to their main()-function. See the
examples that came with the distribution package to see which ones do,
and what.

This manual documents BZ, but is not a guide to learn programming with. We
assume that you have done programming with a structured programming language
like C or Pascal before. If you haven't, then there are a lot of good books
and tutorials out there that teach the concepts of structured programming.
Reading a C tutorial/book will help tremendously as many BZ functions
resemble their C counterparts or are exactly the same.


120      BBBS Scripts: The BZ Programming Language


As the source code of BZ is pure ASCII, you can use any text editor to
create your source. Remember that CASE IS IMPORTANT, like in all major
languages. Whitespace (such as spaces, tabulators, carriage returns or line
feeds) is not important, but using them makes the source look cleaner and
it is easier for you and other people looking at your source to understand
what you mean. The compiler, however, does not care how you arrange the
source, so you can write it as you see fit.

In the distribution package, several examples of BZ scripts have been
supplied. The best way to learn BZ is to study these files carefully
and modify them to see what happens. Try it out! You really can't break
anything!

Note that BBBS also supports the use of some other script languages.

                                              BZ Language: Expressions      121


B  Z     L  a  n  g  u  a  g  e  :     E  x  p  r  e  s  s  i  o  n  s  
_______________________________________________________________________________

Every BZ command is an expression. A simple function call foobar() is an
expression the value of which is the return value of the function foobar.
The name of a variable is an expression with the value of the variable.
Expressions can be grouped with operators to form more complex expressions.
The evaluating of an expression means that the value of it is determined.
Integer constants evaluate into the value the constant represents. String
constants evaluate into 0 when they are used in an arithmetic context.
Otherwise, they evaluate into the sequence of characters the string
represents.

Every expression also evaluates into a boolean value; true or false.
Expression is false if the value of it is 0, any other value means that the
expression is true.

An assignment is an expression in which the value of an expression is placed
into a variable. The value of an assignment expression is the value of
the variable that is assigned to the other variable. Thus, the value of an
expression like a=5 is 5. The value of the expression foo=2*500; is 1000,
the value of the expression 2*500.

There is also the concept of a so-called conditional expression: the syntax
of it is: expression?true:false. First, the expression is evaluated. If it
evaluates to true, then the true-part of the conditional expression is
evaluated next. Otherwise, the false-part is evaluated.

122      BZ Language: Functions and Variables


B Z   L a n g u a g e :   F u n c t i o n s   a n d   V a r i a b l e s 
_______________________________________________________________________________

The structure of a BZ program is:

function {
   expression
   expression
   ...
}

Therefore, BZ is based on functions. The execution of a program starts from
the function main and returning from it ends the program. "Execution" of a
program means the evaluation of sequential expressions.

A function is defined with the keywords int or char. For example:

// An example function
/*
   Note how BZ uses C++-style comments. Everything between /* and */ are
   considered as comments. When there is a // in a line, everything after
   it is considered to be a comment.
 */
int example(int foo) {
  // the code goes here
}

A function can also have parameters passed to it. The parameters are listed
in the parenthesis, separated with commas. This example function has one
integer type of parameter called foo. Note how the block (the function
code, in this case) is begun C-style. This is universal in BZ: blocks of
code always start with curly brackets. There are a number of functions and
constructs already defined in the BZ Runtime Library. They are the functions
you will mostly use.

A function is called by writing its name and the parameters that should be
passed to it in parenthesis. For example, the function above could be called
simply as example(). BZ functions always return something, normally 0. The
special function return() can be used to return from a function with a
value. Example:

// A function that always returns 42 (not very useful).
int return_42() {
  return(42);
}

The parameter of return can be any expression.

The int and char keywords are also used to declare variables in BZ.
After int or char the variable name should be written. Variable name can
consist of all letters and numbers and the underscore character '_'. A
variable name cannot begin with a number. Multiple variables can be defined
with a single keyword, they just need to be separated with commas. A
variable is only effective in the block that it is defined in. To declare a
global variable, declare it outside a function. In all cases, the variable
can be used only after the point it has been defined.

The keyword int declares integer variables and char declares string
variables. BZ does not have typing, so you can assign integer values to

                                  BZ Language: Functions and Variables      123


string variables and vice-versa. However, this is VERY bad style and might
retailiate in the future, when stricter typing is added to BZ someday.

// An example of a variable declaration:
int example2() {
   int  number,second_number;
   char string,second_string;
}

When declaring variables, they can be assigned an initial value when they are
defined:

// An example of variable declaration with initial value:
int example3() {
   int  bz=42;
   int  yebo=bz*49;
   char b="Kim Heino",z="Tapani Salmi",pjh="Durak";
}

Naturally, variables can be assigned values. This is done with the =
operator.

// An example of an assignment
int example4() {
   int foo,bar,buz;

   foo=2;
   bar=5;
   buz=foo+bar;
}

Every variable in BZ is an index variable. An index is referred to as
variable[index]. The name of the variable is actually just index 0 of it.
Multiple indeces can also be given an initial value:

// An example of variable declaration with initial value on multiple indeces:
int example5() {
   char digits={
     "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
   };

   digits[1];  // this contains the string constant "1".

}

124      bzc: the BZ Language compiler


b z c :   t h e   B Z   L a n g u a g e   c o m p i l e r 
_______________________________________________________________________________

bzc is the program that is used to compile BZ source codes into
BZ49 binaries. The calling convention of BZC is very simple:

bzc file {.}

The parameter file is the file name to be compiled. It is not necessary to
write the extension .BZ. If you give the additional parameter, the dot
character, then bzc is run in debug mode: it displays the compiled
BZ49 assembly source file after compilation. It is only of use for die-hard
BZ49 gurus, so you should not bother.

bzc also uses bz preprocessor called bzpp. There is no need to call bzpp
directly, but it's documentation is also included. It's a standard C
preposessor with couple of directives. Two main directives are #include and
#define.

The #include compiler directive can be used to insert another source file to
a certain point in the source. It is simple to use; after the directive
should come the name of file to include at that point, enclosed between
"less than"- and "greater than"-characters or quotes. For style reasons,
you should only include files that have the extension .bzh.

Examples:

#include <foo.bzh>     // includes foo.bzh from include-dir
#include "foo.bzh"     // includes foo.bzh from current dir


The #define command can be used to create simple macros. The syntax of
#define is:

#define OLD new

After a #define directive, whenever OLD is encountered in the source, it is
replaced with new.

                                                 bzpp: BZ preprosessor      125


b  z  p  p  :     B  Z     p  r  e  p  r  o  s  e  s  s  o  r  
_______________________________________________________________________________

        NAME:   bzpp -- BZ Pre-Processor

        SYNOPSIS:

                bzpp [-options] [infile [outfile]]

        DESCRIPTION:

                BZPP reads a BZ source file, expands macros and  include
                files,  and writes an input file for the BZ compiler. If
                no file arguments are given, BZPP reads from  stdin  and
                writes  to  stdout.   If  one file argument is given, it
                will define the input file,  while  two  file  arguments
                define  both  input and output files.  The file name "-"
                is a synonym for stdin or stdout as appropriate.

                The following options are  supported.   Options  may  be
                given in either case.

                -C              If set, source-file comments are written
                                to  the  output  file.   This allows the
                                output of BZPP to be used as  the  input
                                to a program, such as lint, that expects
                                commands embedded in specially-formatted
                                comments.

                -Dname=value    Define the name  as  if  the  programmer
                                wrote

                                    #define name value

                                at the start  of  the  first  file.   If
                                "=value"  is  not  given, a value of "1"
                                will be used.

                                On non-unix systems, all alphabetic text
                                will be forced to upper-case.

                -E              Always return "success" to the operating
                                system,  even  if  errors were detected.
                                Note that some fatal errors, such  as  a
                                missing  #include  file,  will terminate
                                BZPP, returning "failure" even if the -E
                                option is given.

                -Idirectory     Add  this  directory  to  the  list   of
                                directories  searched for #include "..."
                                and #include <...> commands.  Note  that
                                there  is  no space between the "-I" and
                                the directory string.  More than one  -I
                                command   is   permitted.   On  non-Unix
                                systems   "directory"   is   forced   to
                                upper-case.

                -N              BZPP  normally predefines  some  symbols
                                defining   the   target   computer   and

126      bzpp: BZ preprosessor


                                operating system.  If -N  is  specified,
                                no symbols will be predefined.  If -N -N
                                is  specified,  the   "always   present"
                                symbols,    __LINE__,    __FILE__,   and
                                __DATE__ are not defined.

                -Stext          BZPP normally assumes that  the size  of
                                the  target  computer's  basic  variable
                                types is the same as the size  of  these
                                types  of  the host computer.  (This can
                                be  overridden  when  BZPP  is compiled,
                                however.)  The  -S option allows dynamic
                                respecification of these values.  "text"
                                is  a  string  of  numbers, separated by
                                commas, that  specifies  correct  sizes.
                                The sizes must be specified in the exact
                                order:

                                    char short int long float double

                                If you specify the option as  "-S*text",
                                pointers   to   these   types   will  be
                                specified.   -S*  takes  one  additional
                                argument  for  pointer to function (e.g.
                                int (*)())

                                For   example,    to    specify    sizes
                                appropriate  for  a  PDP-11,  you  would
                                write:

                                       c s i l f d func
                                     -S1,2,2,2,4,8,
                                    -S*2,2,2,2,2,2,2

                                Note that all values must be specified.

                -Uname          Undefine the name as if

                                    #undef name

                                were given.  On non-Unix systems, "name"
                                will be forced to upper-case.

                -Xnumber        Enable debugging code.  If no  value  is
                                given,  a value of 1 will be used.  (For
                                maintenence of BZPP only.)


        PRE-DEFINED VARIABLES:

                When BZPP  begins processing,  the  following  variables
                will  have  been  defined   (unless  the  -N  option  is
                specified):

                Target computer:

                    __BZ49__

                Target operating system:

                                                 bzpp: BZ preprosessor      127



                    __BBBS__

                Target compiler:

                    __BZC__

                The implementor may add definitions to this  list.   The
                default  definitions  match  the  definition of the host
                computer, operating system, and BZ compiler.

                The following are always available unless undefined  (or
                -N was specified twice):

                    __FILE__    The  input  (or  #include)  file   being
                                compiled (as a quoted string).

                    __LINE__    The line number being compiled.

                    __DATE__    The date of compilation.

                    __TIME__    The time of compilation. Thus,

                                    printf("Bug at line %s,", __LINE__);
                                    printf(" source file %s", __FILE__);
                                    printf(" compiled on %s", __DATE__);
                                    printf(", %s.\n", __TIME__);


        DRAFT PROPOSED ANSI STANDARD CONSIDERATIONS:

                The current  version  of  the  Draft  Proposed  Standard
                explicitly  states  that  "readers  are requested not to
                specify or claim conformance to this draft." Readers and
                users  of  Decus  CPP  should  not assume that Decus CPP
                conforms to the standard, or that it will conform to the
                actual C Language Standard.

                When BZPP is itself compiled, many features of the Draft
                Proposed  Standard  that  are incompatible with existing
                preprocessors may be  disabled.   See  the  comments  in
                BZPP's source for details.

                The latest version of the Draft  Proposed  Standard  (as
                reflected in Decus CPP) is dated November 12, 1984.

                Comments are removed from the input text.   The  comment
                is  replaced by a single space character.  The -C option
                preserves comments, writing them to the output file.

                The '$' character is considered to be a letter.  This is
                a permitted extension.

                The following new features of C are processed by BZPP:

                    #elif expression (#else #if)
                    '\xNNN' (Hexadecimal constant)
                    '\a' (Ascii BELL)
                    '\v' (Ascii Vertical Tab)

128      bzpp: BZ preprosessor


                    #if defined NAME 1 if defined, 0 if not
                    #if defined (NAME) 1 if defined, 0 if not
                    #if sizeof (basic type)
                    unary +
                    123U, 123LU Unsigned ints and longs.
                    12.3L Long double numbers
                    token#token Token concatenation
                    #include token Expands to filename

                The Draft Proposed Standard has  extended  C,  adding  a
                constant string concatenation operator, where

                    "foo" "bar"

                is regarded as the single string "foobar".   (This  does
                not  affect BZPP's  processing but does permit a limited
                form of macro argument substitution into strings as will
                be discussed.)

                The Standard Committee plans to add token  concatenation
                to  #define command lines.  One suggested implementation
                is as follows:  the sequence "Token1#Token2" is  treated
                as  if  the programmer wrote "Token1Token2".  This could
                be used as follows:

                    #line 123
                    #define ATLINE foo#__LINE__

                ATLINE would be defined as foo123.

                Note that "Token2" must either have  the  format  of  an
                identifier or be a string of digits.  Thus, the string

                    #define ATLINE foo#1x3

                generates two tokens:  "foo1" and "x3".

                If the tokens T1 and T2 are concatenated into  T3,  this
                implementation operates as follows:

                  1. Expand T1 if it is a macro.
                  2. Expand T2 if it is a macro.
                  3. Join the tokens, forming T3.
                  4. Expand T3 if it is a macro.

                A macro formal parameter  will  be  substituted  into  a
                string or character constant if it is the only component
                of that constant:

                    #define VECSIZE 123
                    #define vprint(name, size) \
                      printf("name" "[" "size" "] = {\n")
                      ... vprint(vector, VECSIZE);

                expands (effectively) to

                      vprint("vector[123] = {\n");

                Note that  this  will  be  useful  if  your  BZ compiler

                                                 bzpp: BZ preprosessor      129


                supports  the  new  string concatenation operation noted
                above.  As implemented here, if you write

                    #define string(arg) "arg"
                      ... string("foo") ...

                This implementation generates  "foo",  rather  than  the
                strictly  correct  ""foo"" (which will probably generate
                an error message).  This is, strictly speaking, an error
                in BZPP and may be removed from future releases.

        ERROR MESSAGES:

                Many. BZPP prints warning or error messages if  you  try
                to     use     multiple-byte     character     constants
                (non-transportable) if you #undef a symbol that was  not
                defined,  or  if  your  program  has  potentially nested
                comments.

        AUTHOR:

                Martin Minow
                Modified for BBBS and BZC by Kim Heino, 1999.

        BUGS:

                The #if expression processor uses signed integers  only.
                I.e, #if 0xFFFFu < 0 may be TRUE.

130      BZ Language constants


B  Z     L  a  n  g  u  a  g  e     c  o  n  s  t  a  n  t  s  
_______________________________________________________________________________

A string constant is a sequence of ASCII characters enclosed in quotes, for
example, "Hello", "World", or "Hello World". Some character can, or must be,
inserted by quoting it with `\' character.

        Quote    Character              ASCII
        =====================================
        \"       "                         34
        \\       \                         92
        \a       Bell                       7
        \b       Backspace                  8
        \e       Escape                    27
        \f       Form Feed                 12
        \n       Line Feed                 10
        \r       Carriage Return           13
        \t       Horizontal Tabulator       9
        \v       Vertical Tabulator        11

All other characters can be quoted by writing a backslash followed by
character's ASCII number in octal (base-8). For example ESC (\e) can also
be written "\033".

An integer constant is a sequence of digits representing an integer value in
the range -2147483648 to 2147483647. An integer constant must start with a
digit from 1 to 9 or the negative sign `-' followed by a digit. You can also
use octal integers (base-8, starting with 0) and hexadecimals (base-16,
starting with 0x).

                                                 BZ Language operators      131


B  Z     L  a  n  g  u  a  g  e     o  p  e  r  a  t  o  r  s  
_______________________________________________________________________________

Below are listed all the operators in BZ language:

Operator      (Un|Bin)ary    What it is/does
================================================================
-             unary          Arithmetic negation
~             unary          Complement
!             unary          Logical NOT
++            unary          Increment by one
--            unary          Decrement by one
*             binary         Multiplication
/             binary         Division
%             binary         Remainder (Modulo)
+             binary         Addition
-             binary         Subtraction
<             binary         Is less than?
>             binary         Is greater than?
<=            binary         Is less than or equal to?
>=            binary         Is greater than or equal to?
==            binary         Is equal to?
!=            binary         Is inequal to?
&             binary         Bitwise AND
|             binary         Bitwise OR
^             binary         Bitwise Exclusive OR
&&            binary         Logical AND
||            binary         Logical OR
<<            binary         Bit shift left
>>            binary         Bit shift right
=             binary         Assignment
+=            binary         Assignment with addition
-=            binary         Assignment with substraction
*=            binary         Assignment with multiplication
/=            binary         Assignment with division
&=            binary         Assignment with bitwise AND
|=            binary         Assignment with bitwise OR
^=            binary         Assignment with bitwise Exclusive OR
<<=           binary         Assignment with bit shift left
>>=           binary         Assignment with bit shift right

A small tutorial for binary number math is also included, although it is boyond
the scope of this documentation.

132      Binary number math


B  i  n  a  r  y     n  u  m  b  e  r     m  a  t  h  
_______________________________________________________________________________

As binary system only knows two digits, you can express numbers 0 and 1
(decimal) with one digit. If you want to express 2 (decimal), you need two
digits, just like you need two digits to express 10 (decimal) in decimal
system. Thus, 2 (decimal) is 10 (one - zero) in binary.

So you get values:

decimal   binary
-------   ------
      0        0
      1        1
      2       10
      3       11
      4      100
      5      101
      6      110
      7      111
      8     1000
      9     1001
    ...      ...

And then to the bitwise logic. Four operations are defined, they are:

1) Bitwise AND (expressed '&' in C, BZ and some other languages). According
   to the definition:

     0 & 0 = 0
     1 & 1 = 1
     0 & 1 = 0
     1 & 0 = 0

   Thus, x & y is 1 only if both x AND y are 1. That's why it is AND.

2) Bitwise OR (expressed '|' in C, BZ and some other languages). According
   to the definition:

     0 | 0 = 0
     1 | 1 = 1
     0 | 1 = 1
     1 | 0 = 1

   Thus, x | y is 1 if either x OR y is 1. That's why it is OR.

3) Bitwise XOR (exclusive or) (expressed '^' in C, BZ and some other
   languages). According to the definition:

     0 ^ 0 = 0
     1 ^ 1 = 0
     1 ^ 0 = 1
     0 ^ 1 = 1

   Thus, x ^ y is 0 if x=y, otherwise it is 1.

4) Bitwise NOT operation, or complement (expressed '~' in C, BZ and some
   other languages), which is obvious:


                                                    Binary number math      133


     ~0 = 1
     ~1 = 0


A couple of examples:

   4 | 2
            100
          | 010
          =====
            110 = 6

   6 & 2
            110
          & 010
          =====
            010 = 2

   7 ^ 2
            111
          ^ 010
          =====
            101 = 5

   5 ^ 2
            101
          ^ 010
          =====
            111 = 7

The two last examples show how the toggling a bit with xor-operation works.

Now the original question was: how to unset a bit, id est: how to make sure bit
1, for example, in an eight bit digit (call it bu_utoggles) is 0. Bit 1 in
bu_utoggles has value 2 (00000010). We do not want to toggle the other bits.
Let's take a random value to bu_utoggles: 01101010:

    01101010
  & 00000010
  ==========
    00000010

Oops, we zeroed all other bits but left bit 1 'on'. Now let's try to perform a
NOT operation to the 1st bit value, 2, first:

    ~00000010 = 11111101

and then perform the and operation:

    01101010
  & 11111101
  ==========
    01101001

Bit 1 got 'turned  off', zeroed, the other bits were not affected. That was
exactly what we wanted, wasn't it.




134      Binary number math



Imagine you have the number 26. In binary that's 11010 and you shift it right
once:

  foo=26; foo=foo >> 1;

Foo is now 01101 (in binary), that is 13 in decimal. Let's now shift this
resultant right once more:

  foo=foo >> 1;

Foo is now 00110 (in binary), that is 6 in decimal. See the logic behind this?
The bits simply move to the appropriate direction. Remember that they DO NOT
wrap around to the "other  side" or "stay in  memory"! That is, if you now
shift this resultant 6 left once:

  foo=foo << 1;

Foo becomes 01100 (in binary), that is 12 in decimal and NOT the 01101 it was
before the last shift to the right. Note also how shifting bits to the left
once multiplies the number by 2 and shifting to the right once divides the
number by two (since binary numbers are the power of two!). It's all simple
maths.

Just a few more examples. Imagine we shift the number 11001100 right 3 times. I
list the bits below after each operation:

  foo=128+64+8+4;  // making 11001100 in binary.
  foo=foo >> 1;    // (0)1100110
  foo=foo >> 1;    // (00)110011
  foo=foo >> 1;    // (000)11001    let's now go back again...
  foo=foo << 1;    // (00)110010    notice how the least significant bit
                   //               is zero!
  foo=foo << 3;    // 10010000

                                           REXX as the script language      135


R E X X   a s   t h e   s c r i p t   l a n g u a g e 
_______________________________________________________________________________

With BBBS/2 it is possible to use REXX as the script language. When starting
a script, BBBS/2 first checks for the existence of a BZ49 binary. If one is
not found, then BBBS/2 will try to execute a CMD file with the same name. If
one is found, it is then executed as a REXX script. Note that you must have
REXX support installed, as BBBS REXX scripts are passed through the standard
REXX interpreter.

BBBS/2 adds some functions to rexx:

Function     Usage
============================================================================
bbbs_say     Works like the normal REXX say function, except that output is
             done to both local and remote screens.
bbbs_kbhit   Works like the BZ Runtime Library kbhit() command.
bbbs_getch   Works like the BZ Runtime Library getch() command.
bbbs_input   Works like the BZ Runtime Library input() command.
bbbs_getvar  Gets a BZ Runtime Library variable. Requires the variable name
             and optinally the index (for such variables that are indexed)
             as parameters.
bbbs_setvar  Sets a BZ Runtime Library variable. Requires the variable name
             and the value to be set and optionally the index (for such
             variables that are indexed) as parameters.

Otherwise, there is nothing special about REXX scripts. They are just like
any other REXX scripts, except that they are executed by BBBS.

136      The BZ Runtime Library by Categories


T h e   B Z   R u n t i m e   L i b r a r y   b y   C a t e g o r i e s 
_______________________________________________________________________________

The BZ runtime library consists of the following predefined functions and
constructs. See also the stdlib.bzh header file for constant definitions and
some extra functions.

See also the alphabetic list of functions.

Constructs:
 asm                     
 break                   
 do...while              
 for                     
 if...else               
 return                  
 switch...case           
 while                   

General Functions:
 breceive()              
 bsend()                 
 delay()                 
 _delay()                
 exit()                  
 help()                  
 tictactoe()             
 yellsysop()             

Standard I/O Functions:
 getch()                 
 _getch()                
 input()                 
 kbhit()                 
 printf()                

File I/O Functions:
 closedir()              
 fclose()                
 feof()                  
 fflush()                
 fgetc()                 
 fgets()                 
 fopen()                 
 fprintf()               
 fputc()                 
 fseek()                 
 ftell()                 
 getnodemessage()        
 opendir()               
 readdir()               
 remove()                
 rename()                
 rewinddir()             

String Manipulation Functions:
 copy()                  
 delete()                
 parsecom()              

                                  The BZ Runtime Library by Categories      137


 pos()                   
 regexp()                
 sprintf()               
 stlocase()              
 strcat()                
 strlen()                
 stupcase()              

User Data Functions:
 freeuser()              
 loaduser()              
 seekforuser()           
 _account_change_money() 
 _account_get_money()    

Low-level Functions and System Calls:
 bbbs()                  
 bfile4()                
 exec()                  
 getenv()                
 getnodestatus()         
 localtime()             
 make_pcboard12sys()     
 make_pcboard14sys()     
 sendnode()              
 setenv()                
 spawn()                 
 system()                
 time()                  

138      Alphabetic listing of the BZ Runtime Library


Alphabetic listing of the BZ Runtime Library
_______________________________________________________________________________

There is also the list of BZ Runtime Library commands by category.

 _account_change_money()  - change user's account info
 _account_get_money()     - get user's account info
 asm                      - directly program the BZ49-processor
 bbbs()                   - execute a BBBS-command
 bfile4()                 - enter the File/4 filesystem
 break                    - end the execution of a block
 breceive()               - receive file(s) from remote
 bsend()                  - send file(s) to remote
 closedir()               - close a directory opened with opendir
 copy()                   - copy a part of string
 delay(), _delay()        - halt program execution for specified time
 delete()                 - deletes a part of a string
 do..while                - repeat a command until a condition is met
 exec()                   - execute another script
 exit()                   - quit the current script
 fclose()                 - close a file
 feof()                   - determine if a file pointer is at end of file
 fflush()                 - flush a file into the disk
 fgetc()                  - read a character from a file
 fgets()                  - read a string from a file
 fopen()                  - open a file
 for                      - repeat a loop until a condition is met
 fprintf()                - write formatted text into a file
 fputc()                  - write a single byte into a file
 freeuser()               - return normal bu-variable values
 fseek()                  - position the pointer of a file handle
 ftell()                  - return the file pointer position
 getch(), _getch()        - read a keypress without waiting
 getenv()                 - get the value of an environment variable
 getnodemessage()         - read a node message from a file
 getnodestatus()          - get a part of the status of a specified node
 help()                   - execute the AmigaGuide help file reader
 if..else                 - execute a statement based on an expression
 input()                  - read user input
 kbhit()                  - check to see if a key has been pressed
 loaduser()               - adjust bu-variables to the values of another user
 localtime()              - format seconds since 1.1.1970, 00:00 UTC to string
 make_pcboard12sys()      - make a v12 PCBOARD.SYS control file
 make_pcboard14sys()      - make a v14 PCBOARD.SYS control file
 opendir()                - opens a directory for reading
 parsecom()               - parse input for commands
 pos()                    - search for a substring in a string
 printf()                 - write formatted output into the screen
 readdir()                - read a single directory entry
 regexp()                 - check if a string matches a regular expression
 remove                   - delete a file
 rename()                 - rename a file
 return                   - return from a function
 rewinddir()              - move the directory pointer to the first entry
 seekforuser()            - find the user number of an user
 sendnode()               - send a node message
 setenv()                 - set an environment variable
 spawn()                  - execute another script
 sprintf()                - write formatted text into a string

                          Alphabetic listing of the BZ Runtime Library      139


 stlocase()               - convert a string into lower case
 strcat()                 - join two strings
 strlen()                 - calculate the length of a string
 stupcase()               - convert a string into upper case.
 switch...case            - create big if...else-loops with same condition
 system()                 - execute an operating system command
 tictactoe()              - execute the game of TicTacToe
 time()                   - return seconds since 1.1.1970, 00:00 UTC
 while                    - repeat until a condition is met
 yellsysop()              - page the system operator

140      asm


a  s  m  
_______________________________________________________________________________

   CONSTRUCT  asm() - directly program the BZ49-processor

    SYNOPSIS  asm(command, argument);

              command  - a BZ49-processor command
              argument - an integer containing the command argument

 DESCRIPTION  asm() is used to control the BZ49-processor directly. command
              can be any valid BZ49-processor command. argument should be
              the argument of the command. This command should be used by
              die-hard BZ49-gurus only.

                                                                 break      141


b  r  e  a  k  
_______________________________________________________________________________

   CONSTRUCT  break - end the execution of a block.

    SYNOPSIS  break;

 DESCRIPTION  break ends the execution of the current block, as if there was
              a closing bracket there.

     EXAMPLE  for(i=0;;++i) {
                if(i==3) break;
              }

    SEE ALSO  for, do..while, switch..case, while

142      do...while


d  o  .  .  .  w  h  i  l  e  
_______________________________________________________________________________

   CONSTRUCT  do...while - repeat a command until a condition is met

    SYNOPSIS  do command while(condition);

 DESCRIPTION  do...while executes the command once and then repeatedly,
              until the expression condition evaluates to false.

     EXAMPLE  do {
                ++i;
                printf("Still under 42...\n");
              } while(i<42);

    SEE ALSO  while, for, break

                                                                   for      143


f  o  r  
_______________________________________________________________________________

   CONSTRUCT  for - repeat a loop until a condition is met

    SYNOPSIS  for({expression{,...}}; {condition{,...}}; {expression{,...}})
              statement;

 DESCRIPTION  for is used to repeat the statement until the
              condition-expression evaluates to false. Before the loop is
              started, the expressions listed before the first semi-colon
              are evaluated. Every time the loop has been completed the
              third expression is evaluated. Normally, the first expression
              should be used to initialize a counter variable and the third
              expression to increment it.

     EXAMPLE  for(t=10; t>0; t--) {
                printf("T minus %d and counting...\n",t);
                delay(10);
              }

    SEE ALSO  while, do...while

144      if...else


i  f  .  .  .  e  l  s  e  
_______________________________________________________________________________

   CONSTRUCT  if...else - execute a statement based on an expression

    SYNOPSIS  if(condition) command1; {else command2;}

 DESCRIPTION  if is used when a command or group of commands should be
              executed only if a specified condition is met. command1 is
              executed only if the expression condition is true. The
              else-part is optional. If it is included, then command2 is
              executed if the expression condition is false.

     EXAMPLE  if(foo != bar) {
                printf("Make the world equal!\n");
                foo=bar;
              } else printf("Equality forever!\n");

    SEE ALSO  switch...case

                                                                return      145


r  e  t  u  r  n  
_______________________________________________________________________________

   CONSTRUCT  return - return from a function

    SYNOPSIS  return({expression});

 DESCRIPTION  return is used to exit a BZ function and optionally return a
              value, specified by expression. If expression is not specified,
              the value 0 will be returned.

     EXAMPLE  int addition(int first, int second) {
                int result;

                result=first+second;
                return(result);
              }

              int main() {
                printf("2 + 3 = %d\n",addition(2,3));
                return(0);
              }

    SEE ALSO  break, exit

146      switch...case


s  w  i  t  c  h  .  .  .  c  a  s  e  
_______________________________________________________________________________

   CONSTRUCT  switch...case - create big if...else-loops with same
              condition.

    SYNOPSIS  switch(condition) {
                case expression2: statement;
                case expression3: statement;
                ...
                default:statement
              }

 DESCRIPTION  switch...case is used to create big if...else loops with the
              same condition. First, the expression condition is evaluated.
              Then all case-statements and their relative expressions are
              checked for equality. When an equality is found, all the
              following statements are executed. If none of the case
              expressions match, the optional default-statement is executed.
              Note that to execute only one case-statement, the statement
              has to end in break; call. Otherwise all case-statements below
              it are also executed.

     EXAMPLE  switch (bar) {
                 case 1:
                 case 2:{
                 printf("1 or 2\n");
                 break;
                 }
                 case 3:{
                    printf("3\n");
                    break;
                 }
                 case 4:printf("4 or ");
                 case 5:{
                    printf("5\n");
                 break;
                 }
                 default:{
                    printf("unknown\n");
                    break;
                 }
              }

    SEE ALSO  if...else

                                                                 while      147


w  h  i  l  e  
_______________________________________________________________________________

   CONSTRUCT  while - repeat until a condition is met

    SYNOPSIS  while(condition) command;

 DESCRIPTION  while is used to loop continuously until a condition is met.
              Every time before executing command, the expression condition
              is evaluated. If it evaluates into true, then the command is
              executed. Note that if the expression is false from the very
              beginning, the command will never be executed.

     EXAMPLE  while(t>0) {
                printf("T minus %d and counting...\n",t);
                delay(10);
                t--;
              }

    SEE ALSO  do...while, for

148      _account_change_money


_  a  c  c  o  u  n  t  _  c  h  a  n  g  e  _  m  o  n  e  y  
_______________________________________________________________________________

    FUNCTION  _account_change_money() - change user's account

    SYNOPSIS  _account_change_money(account,amount);

              account - the account number (usually bu_account)
              amount - value added to current account value

 DESCRIPTION  _account_change_money() change's the amount of money in account.

RETURN VALUE  _account_change_money() returns always 0.

     EXAMPLE  _account_change_money(bu_account,-1);

    SEE ALSO  _account_get_money

                                                    _account_get_money      149


_  a  c  c  o  u  n  t  _  g  e  t  _  m  o  n  e  y  
_______________________________________________________________________________

    FUNCTION  _account_get_money() - get account's money

    SYNOPSIS  _account_get_money(account);

              account - the account number (usually bu_account)

 DESCRIPTION  _account_get_money() gets the amount of money in account.

RETURN VALUE  _account_get_money() returns the amount of money in account.
              -1 if account number is invalid.

     EXAMPLE  int money=_account_get_money(bu_account);

    SEE ALSO  _account_change_money

150      bbbs


b  b  b  s  
_______________________________________________________________________________

    FUNCTION  bbbs() - execute a BBBS-command

    SYNOPSIS  bbbs(command);

              command - a string containing the command line to be executed

 DESCRIPTION  bbbs() executes the command line specified in command as if
              it were issued by the user.

RETURN VALUE  bbbs() returns always 0.

     EXAMPLE  bbbs("f cd /pub/pictures get *");
              bbbs("g y");

                                                                bfile4      151


b  f  i  l  e  4  
_______________________________________________________________________________

    FUNCTION  bfile4() - enter the File/4 filesystem

    SYNOPSIS  bfile4();

 DESCRIPTION  bfile4() enters the BBBS File/4 filesystem, as if the user
              had issued the BBBS command to enter the file menu. bfile4()
              exits when the user issues either the Quit or Goodbye command.
              When the user is using a file menu invoked with a call to
              bfile4() he/she cannot use any of the global commands or
              change the active menu.

RETURN VALUE  bfile4() returns always 0.

     EXAMPLE  int main() {
                printf("Entering filemenu...\n");
                bfile4();
                printf("Have a nice day!\n");
              }

    SEE ALSO  bbbs()

152      breceive


b  r  e  c  e  i  v  e  
_______________________________________________________________________________

    FUNCTION  breceive() - receive file(s) from remote

    SYNOPSIS  breceive();

 DESCRIPTION  breceive() receives files to the incoming directory with
              the user's currently selected transfer protocol.

RETURN VALUE  breceive() returns always 0.

     EXAMPLE  int main() {
                char d;

                if(bu_access & 0xff) {
                  printf("Ok, receiving...\n");
                  breceive();
                } else printf("You're not a sysop!\n");
              }

    SEE ALSO  bsend()

                                                                 bsend      153


b  s  e  n  d  
_______________________________________________________________________________

    FUNCTION  bsend() - send file(s) to remote

    SYNOPSIS  bsend(listfile);

              listfile - a string containing the name of the file in which
              the files to be sent are listed.

 DESCRIPTION  bsend() sends the files listed in listfile to the remote user
              with the user's currently selected transfer protocol. In the
              listfile, a single line should contain one file to be sent.

RETURN VALUE  bsend() returns true if all went OK, false otherwise.

     EXAMPLE  int main() {
                int f;

                printf("I'll send you my autoexec.bat and config.sys...\n");

                f=fopen("fubba.fil","wt");
                fprintf(f,"c:/autoexec.bat\n");
                fprintf(f,"c:/config.sys\n");
                fclose(f);

                bsend("fubba.fil");
              }

    SEE ALSO  breceive()

154      closedir


c  l  o  s  e  d  i  r  
_______________________________________________________________________________

    FUNCTION  closedir() - close a directory opened with opendir

    SYNOPSIS  closedir();

 DESCRIPTION  closedir() closes the directory stream opened with a opendir
              call. After all necessary directory reads have been done to
              a opened directory, a closedir() call should be made to ensure
              that the memory allocated to the directory entries is freed.

RETURN VALUE  closedir() returns always 0.

     EXAMPLE  int main() {
                /* quick-and-dirty directory lister
                 *
                 * an example of opendir(), readdir(), closedir() and
                 * rewinddir().
                 */

                char spec,entry,file;
                int size,filecount;

                spec=input("Enter filespec: ",255,0);
                opendir(spec);

                printf("Directory of %s...\n\n",spec);

                do {
                  redisp=0; filecount=0;
                  while(strlen(entry=readdir())) {
                    file=copy(entry,1,pos("\2",entry));
                    delete(entry,1,pos("\2",entry));
                    size=copy(entry,1,pos("\2",entry));
                    printf("%.30s %i\n",file,size);
                    ++filecount;
                  }

                  printf("Total %u files.\n",filecount);
                  printf("Hit space to view the list again.\n");
                  while(!kbhit());
                  if(getch()==" ") {
                    rewinddir();
                    redisp=1;
                  }
                } while(redisp);

                printf("Have a nice day!\n");
                closedir();
              }

    SEE ALSO  opendir, readdir, rewinddir

                                                                  copy      155


c  o  p  y  
_______________________________________________________________________________

    FUNCTION  copy() - copy a part of string

    SYNOPSIS  copy(buf, start, len);

              buf   - the string to copy from
              start - an integer denoting the first character to start
                      copying from
              len   - an integer denoting the amount of characters to be
                      copied

 DESCRIPTION  copy() copies at maximum len characters from the string
              buf, starting from the startth character. The copying
              stops if the end of buf-string is reached.

RETURN VALUE  copy() returns the copied string.

    EXAMPLES  a=copy("foobar",1,3);
              (returns "foo")

              b=copy("It is true: BBBS rules, by far!",13,10);
              (returns "BBBS rules")

    SEE ALSO  delete(), pos()

156      delay, _delay


d  e  l  a  y  ,     _  d  e  l  a  y  
_______________________________________________________________________________

    FUNCTION  delay(), _delay() - halt program execution for a specified
              amount of time

    SYNOPSIS  delay(time);

              time - the time to delay, in tenths of second

              _delay(time);

              time - the time to delay, in milliseconds

 DESCRIPTION  Both delay() and _delay() completely halt the program
              execution for the specified amount of time. With _delay(),
              the time delayed is just an approximation and cannot be used
              for precise timing.

RETURN VALUE  Both delay() and _delay() return always 0.

     EXAMPLE  int main() {
                if(!bu_resume) {
                  printf("For not writing a resume, there will be a 5 ");
                  printf("second delay!\n");
                  delay(50);
                }
              }

                                                                delete      157


d  e  l  e  t  e  
_______________________________________________________________________________

    FUNCTION  delete() - deletes a part of a string

    SYNOPSIS  delete(buf, start, len);

              buf   - the string to delete from
              start - an integer denoting the first character to start
                      deleting from
              len   - an integer denoting the amount of characters to
                      delete

 DESCRIPTION  delete() deletes at maximum len characters from the
              string buf, starting from character start. If the end
              of buf is reached, then the deleting will stop.

RETURN VALUE  delete() returns the operated string.

    EXAMPLES  a=delete("foobar",4,3);
              (returns "foo");

              b=delete("foobar",1,3);
              (returns "bar");

              z=delete("merry christmas, Mr. B!",7,11);
              (returns "merry Mr. B!")

158      exec


e  x  e  c  
_______________________________________________________________________________

    FUNCTION  exec() - execute another script

    SYNOPSIS  exec(file);

              file - a string containing the name of the script to run

 DESCRIPTION  exec() executes another script. file must be a valid
              script name. A call to exec() aborts the execution of the
              current script - there is no way to return to the script
              that invoked exec(). If this is what you want to do, use
              spawn() instead.

              It is also possible to pass parameters to the main-function
              of the script being called. This is accomplished by adding
              the parameters to the file-parameter of exec(), separated with
              the ASCII character 1.

RETURN VALUE  exec() does not return.

     EXAMPLE  exec("c:/bbbs/bz/newscript");

    SEE ALSO  spawn()

                                                                  exit      159


e  x  i  t  
_______________________________________________________________________________

    FUNCTION  exit() - quit the current script

    SYNOPSIS  exit(error);

              error - an integer containing the error code that should be
                      returned

 DESCRIPTION  exit() exits the current script with the error code
              specified in error. exit() does not do any checking for
              open files or loaded users. Always be sure that all files
              are closed and freeuser() called before calling exit().

RETURN VALUE  exit() does not return.

     EXAMPLE  exit(666);

160      fclose


f  c  l  o  s  e  
_______________________________________________________________________________

    FUNCTION  fclose() - close a file

    SYNOPSIS  fclose(handle);

              handle - the filehandle that should be closed

 DESCRIPTION  fclose() closes the file associated to filehandle handle.
              All opened files should be closed via a call to fclose()
              before the script is exited.

RETURN VALUE  fclose() returns always 0.

     EXAMPLE  int main() {
                int f;

                if((f=fopen("fubba.fil","wt"))==-1) {
                  printf("Ugh!\n");
                  exit(-1);
                }
                fprintf(f,"foo!\n");
                fprintf(f,"bar!\n");
                fclose(f);
                exit(1);
              }

                                                                  feof      161


f  e  o  f  
_______________________________________________________________________________

    FUNCTION  feof() - determine if a file pointer is at end of file

    SYNOPSIS  feof(handle);

              handle - the file handle of the file to check

 DESCRIPTION  feof() determines if end of file has been reached in file
              associated to the filehandle handle. If a file is opened
              in text mode (see fopen), then also control-z-character
              (normal end-of-file-character) is interpreted as end of
              file.

RETURN VALUE  feof() returns true, if end of file has been reached,
              otherwise it returns false.

     EXAMPLE  int main() {
                 int f;

                 if((f=fopen("fubba.fil","rt"))==-1) {
                   printf("Ugh!\n");
                   exit(-1);
                 }

                 /* display fubba.fil... */
                 while(!feof(f) && bv_carrier) printf("%s\n",fgets(f));
                 fclose(f);
                 exit(1);
              }

162      fflush


f  f  l  u  s  h  
_______________________________________________________________________________

    FUNCTION  fflush() - flush a file into the disk

    SYNOPSIS  fflush(handle);

              handle - the file handle to flush

 DESCRIPTION  fflush() flushes all the buffers of the file associated
              with the file handle handle, causing all unwritten data
              be written to disk.

RETURN VALUE  fflush() returns always 0.

     EXAMPLE  f=fopen("testfile.tmp","wt");
              fputc(65,f);
              fputc(66,f);
              fputc(67,f);
              printf("fputcn");
              getch();

              fflush(f);
              printf("fflushn");
              getch();

              fclose(f);
              printf("fclosen");
              getch();
              remove("testfile.tmp");

                                                                 fgetc      163


f  g  e  t  c  
_______________________________________________________________________________

    FUNCTION  fgetc() - read a character from a file

    SYNOPSIS  fgetc(handle);

              handle - the file handle of the file to read the character
                       from

 DESCRIPTION  fgetc() reads a single character from the file associated
              to the file handle handle.

RETURN VALUE  fgetc() returns the ASCII value of the character that is
              read, or -1 if end of file has been reached.

     EXAMPLE  int main() {

                int i, f;
                char bar;

                f=fopen("c:/bbbs/bzc.exe","rb");
                i=fopen("c:/bbbs/test","wb");

                while ((bar=fgetc(f))!=-1) fputc(bar,i);

                fclose(i);
                fclose(f);

              }

    SEE ALSO  fputc, fgets

164      fgets


f  g  e  t  s  
_______________________________________________________________________________

    FUNCTION  fgets() - read a string from a file

    SYNOPSIS  fgets(handle);

              handle - the file handle of the file to read the string from

 DESCRIPTION  fgets() reads a single line of characters from the file
              associated to filehandle handle. A line is considered as
              a sequence of characters followed by a CR+LF-pair.

RETURN VALUE  fgets() returns the actual string read.

     EXAMPLE  fubba=fgets(f);

    SEE ALSO  fgetc, fputc

                                                                 fopen      165


f  o  p  e  n  
_______________________________________________________________________________

    FUNCTION  fopen() - open a file

    SYNOPSIS  fopen(filename, mode);

              filename - a string containing the name of the file to open
              mode     - a string containing the mode that the file
                         should be opened in

 DESCRIPTION  fopen() opens a file specified in filename. All files
              must be opened before any input or output can be made to or
              from them. The mode that the file is opened in depends on
              the string mode. Possible modes are:

              "r"     Open the file for reading. The file must exist.

              "w"     Open the file for writing only. If the file doesn't
              exist, it will be created. Otherwise, it will be truncated
              to 0 bytes.

              "a"     Open the file for appending. If the file doesn't
              exist, it will be created. Otherwise, the file pointer is
              set to the end of file. All writing will be done to the end
              of file.

              "r+"    Open the file for both reading and writing. The
              file must exist.

              "w+"    Open the file for both reading and writing. If the
              file exists, it will be truncated to 0 bytes, otherwise a
              new file will be created.

              "a+"    Open the file for reading and appending. If the
              file does not exist, it will be created. All writing will
              be done to the end of file.

              There are also two additional mode flags that need to be
              appended to the end of the mode-string; t for text mode and
              b for binary mode. In text mode CR characters are skipped
              on input and newline characters converted to CR/LF-pairs on
              output. If the last character of the file is a Ctrl-Z, then it
              and everything following it will be discarded on input. In
              binary mode, none of these transformations are used.

RETURN VALUE  fopen() returns a file handle if the open is successful,
              otherwise it returns -1.

     EXAMPLE  int main() {
                int f;

                if((f=fopen("fubba.fil","wt"))==-1) {
                  printf("Ugh!\n");
                  exit(-1);
                }
                fprintf(f,"foo!\n");
                fprintf(f,"bar!\n");
                fclose(f);

166      fopen


                exit(1);
              }

                                                               fprintf      167


f  p  r  i  n  t  f  
_______________________________________________________________________________

    FUNCTION  fprintf() - write formatted text into a file

    SYNOPSIS  fprintf(handle, format {,argument{,argument...}});

              handle - the file handle to write the formatted text into.
              format - a format specifier, see printf() for details.

              fprintf() can have a number of additional arguments,
              depending on the format specifier. For every format
              specifier in format, an argument should be given.

 DESCRIPTION  fprintf() performs formatted output to the file specified by
              the file handle handle.

RETURN VALUE  fprintf() does not return anything.

     EXAMPLE  int main() {
                 int f;
                 char fubba;

                 f=fopen("fubba.fil","wt");
                 fubba=input("Fubba: ",10,0);
                 fprintf("3+3=%i  Fubba=%s\n",3+3,fubba);
                 fclose(f);
              }

    SEE ALSO  printf(), sprintf()

168      fputc


f  p  u  t  c  
_______________________________________________________________________________

    FUNCTION  fputc() - write a single byte into a file

    SYNOPSIS  fputc(byte, handle);

              byte   - the ASCII value of the byte to write.
              handle - the file handle to write the byte into.

 DESCRIPTION  fputc() writes the byte byte into the file associated
              with the file specified by file handle handle.

RETURN VALUE  fputc() returns always 0.

     EXAMPLE  int main() {

                int i, f;
                char bar;

                f=fopen("c:/bbbs/bzc.exe","rb");
                i=fopen("c:/bbbs/test","wb");

                while ((bar=fgetc(f))!=-1) fputc(bar,i);

                fclose(i);
                fclose(f);

              }

    SEE ALSO  fgetc

                                                              freeuser      169


f  r  e  e  u  s  e  r  
_______________________________________________________________________________

    FUNCTION  freeuser() - return normal bu-variable values after a
              loaduser() call.

    SYNOPSIS  freeuser();

 DESCRIPTION  freeuser() returns the bu-variable values to the ones they
              were before a call to loaduser(). It should always be
              called before exiting, if a loaduser() call has been made.

RETURN VALUE  freeuser() returns always 0.

     EXAMPLE  int main() {
                 int i;

                 for(i=0; !loaduser(i); ++i) {
                   printf("User #%04u: %s\n",i,bu_name);
                   freeuser();
                 }
              }

    SEE ALSO  loaduser()

170      fseek


f  s  e  e  k  
_______________________________________________________________________________

    FUNCTION  fseek() - position the pointer of a file handle

    SYNOPSIS  fseek(handle, offset, whence);

              handle - the file handle of the file the pointer of which
              should be positioned.
              offset - an integer determining the amount of bytes to move
              the file pointer.
              whence - an integer determining the start position to start
              the positioning:

              0 (SEEK_SET) - the file beginning
              1 (SEEK_CUR) - the current file pointer position
              2 (SEEK_END) - the end of file

 DESCRIPTION  fseek() moves the file pointer offset bytes, starting
              from the file position determined by whence. For text mode
              files, offset should be either 0, or a value returned by
              ftell().

RETURN VALUE  fseek() returns true, if an error is encountered.

    EXAMPLES  Seek to the 10th byte of the file:
              fseek(f, 10, 0);

              Seek 10 bytes forward from the current position:
              fseek(f, 10, 1);

              Seek 10 bytes backward from the end of file:
              fseek(f, -10, 2);

    SEE ALSO  ftell()

                                                                 ftell      171


f  t  e  l  l  
_______________________________________________________________________________

    FUNCTION  ftell() - return the file pointer position

    SYNOPSIS  ftell(handle);

              handle - the file handle of the file to return the file
              pointer position from.

 DESCRIPTION  ftell() determines and returns the current position of the
              file pointer and returns an integer determining the
              position as bytes from the beginning of the file, if the
              file is opened in binary mode. In text mode this is not so,
              but the value can nonetheless be used in subsequent calls
              to fseek().

RETURN VALUE  ftell() returns an integer determining the current file
              pointer position.

     EXAMPLE  fseek(f, 0, 2);
              printf("The file is %u bytes long.\n",ftell(f));

    SEE ALSO  fseek()

172      getch and _getch


g  e  t  c  h     a  n  d     _  g  e  t  c  h  
_______________________________________________________________________________

    FUNCTION  getch(), _getch() - read a keypress without waiting

    SYNOPSIS  getch();

              _getch(whence);

              whence - an integer denoting what kind of keypresses should be
              read, as follows:

              whence            action
              ===================================================
              0 (GETCH_BOTH)    Read from both local and remote
              1 (GETCH_LOCAL)   Read only from local keyboard
              2 (GETCH_REMOTE)  Read only from remote keyboard

 DESCRIPTION  Both getch() and _getch() read a single character from the
              (specified) input buffer, if one is available. With _getch()
              the whence value 0 (GETCH_BOTH) should not be used. Instead,
              a getch() call should be made. Note that getch() nor _getch()
              will not wait for a character to become available. If that is
              what you want to do, you should use input() instead.

RETURN VALUE  Both getch() and _getch() return the character that was read or
              the value (character) 255 if none is available.

    EXAMPLES  printf("The key '%c' was pressed.\n",getch());
              printf("User pressed the key '%c'.\n",_getch(2));

    SEE ALSO  input(), kbhit()

                                                                getenv      173


g  e  t  e  n  v  
_______________________________________________________________________________

    FUNCTION  getenv() - get the value of an environment variable.

    SYNOPSIS  getenv(env);

              env - a string containing the name of the environment variable
              to be read.

 DESCRIPTION  getenv() reads the value of the specified environment variable
              and returns it. Note that getenv() reads BBBS environment
              variables and has nothing to do with the environment variables
              set in the OS.

              The following environment variables are set internally by BBBS:

              Environment    Function
              ============================================================
              \01MEMBER      list of BBBS chat system channels the user is a
                             member of, separated with commas.
              \01RESIGN      list of auto-join chat system channels the user
                             has resigned from, separated with commas.
              \01TARGET      the current chat system target of the user.
              \01COLORS      the number of the palette (in colors.bbb) the
                             user is using, or "cxxxxx", where xxxxx are
                             the color letters, colors.bbb-style.

              (\01 is the ASCII character 1, not the actual string "\01")

RETURN VALUE  getenv() returns the value of the specified environment
              variable.

     EXAMPLE  printf("Your chat target is: %s\n",getenv("\1TARGET");

    SEE ALSO  setenv()

174      getnodestatus


g  e  t  n  o  d  e  s  t  a  t  u  s  
_______________________________________________________________________________

    FUNCTION  getnodestatus() - get a part of the status of a specified node.

    SYNOPSIS  getnodestatus(node, item);

              node - an integer specifying the node number to get status
              from.
              item - an integer specifying the type of information that
              should be returned.

 DESCRIPTION  getnodestatus() returns a single piece of information about
              the status of the specified node. The item-parameter value
              is determined by what kind of information should be returned,
              as follows:

              Item             Description                          Type
              ==========================================================
              0 (GNS_SPLIT)    Reserved                             int
              1 (GNS_BSTATUS)  bstatus-value (see below)            int
              2 (GNS_ZSTATUS)  zstatus-value (see below)            int
              3 (GNS_SPEED)    The bps rate of the node (0=local)   int
              4 (GNS_TIME)     when-value in who (see below)        int
              5 (GNS_ENDTIME)  when-value in who when downloading   int
              6 (GNS_NICK)     The nickname of the user in node     char
              7 (GNS_REALNAME) The real name of the user in node    char
              8 (GNS_IDLE)     The amount of idle time (see below)  int

              The bstatus-value contains some toggles about the node. If bit
              1 is set, then the node is in a mail session. If bit 2 is set,
              then the node is in groupchat via the HYDRA protocol. If bit 3
              is set then the node has the "KEEPALIVE" environment set,
              meaning that it will not be sleep disconneted. If bit 4 is
              set, then the node has the "KEEPIDLE" environment set, meaning
              that is should be shown as "idle", even though it might not
              actually be so.

              The zstatus-value defines the actual status of the node. It is
              a single integer, determining it as follows:

              zstatus            Status of the node
              ==============================================================
               0 (ZS_OFF)        Node is down.
               1 (ZS_ACTIVE)     Node is "active".
               2 (ZS_NOTAVAIL)   Node is not available.
               3 (ZS_WRITING)    Node is entering a message.
               4 (ZS_GRAB)       Node is grabbing (downloading messages).
               5 (ZS_DOWNLOAD)   Node is downloading a file.
               6 (ZS_UPLOAD)     Node is uploading a file.
               7 (ZS_SYSCHAT)    Node is chatting with SysOp.
               8 (ZS_DOOR)       Node has opened a door.
               9 (ZS_GROUPCHAT)  Node is in groupchat.
              10 (ZS_TELNET)     Node is using network (telnet, ftp...)
              11 (ZS_SHELLED)    Node has shelled in to the OS.

              The time value determines the login time of the current
              user. It is an integer, packed so that the "hour" value is
              multiplied with the value 256 (0x100) and the "minute" value

                                                         getnodestatus      175


              is the added to the result.

              The nick and realname values are simply strings containing
              the real name and the nickname of the user in the node.

              The GNS_IDLE field is the time() timestamp of the moment
              when the node has started to be idle. Idle times of less than
              120 seconds should be ignored.

RETURN VALUE  getnodestatus() return value depends on the item parameter,
              see the table above.

     EXAMPLE  int main() {
                 int i;

                 for(i=1; i<bg_max_nodes+1; ++i) {
                   printf("Node #%02u: %s\n",i,getnodestatus(i,7));
                 }
              }

176      getnodemessage


g  e  t  n  o  d  e  m  e  s  s  a  g  e  
_______________________________________________________________________________

    FUNCTION  getnodemessage() - read a node message from a file

    SYNOPSIS  getnodemessage(nodefile);

              nodefile - the file handle of the file the node message should
              be read from.

 DESCRIPTION  getnodemessage() reads 340 bytes (a BBBS chatrec) from the
              file specified by the file handle nodefile and converts them
              into a formatted string with the message. Normally you should
              use getnodemessage() with the message.xxx-files in the BBBS
              temporary directory.

RETURN VALUE  getnodemessage() returns a formatted string containing the
              message from the chatrec read.

     EXAMPLE  int main() {
                int f;
                char s, fn;

                fn=sprintf("%sbbbsmsg.%u",bg_tempdir,bv_nodenumber);
                f=fopen(fn,"rb");

                while ((s=getnodemessage(f))!="") printf("%sn",s);

                fclose(f);
                fclose(fopen(fn,"wb"));
              }

                                                                  help      177


h  e  l  p  
_______________________________________________________________________________

    FUNCTION  help() - execute the AmigaGuide help file reader

    SYNOPSIS  help(file, node);

              file - a string containing the name of the help file to read.
              node - a string containing the name of the help file node to
              start reading from.

 DESCRIPTION  help() executes the BBBS's built-in AmigaGuide reader and
              loads into it the file specified in file and displays the
              node specified in node. If file is empty, then the
              standard help file (bbbshelp) is loaded.

RETURN VALUE  help() returns always 0.

     EXAMPLE  help("","Main");
              help("c:/bbbs/sysop.guide","bz_lib_help");

178      input


i  n  p  u  t  
_______________________________________________________________________________

    FUNCTION  input() - read user input

    SYNOPSIS  input(prompt, length, multi);

              prompt - a string containing the prompt that should be
              displayed as a prompt.
              length - an integer determining the maximum amount of
              characters that should be accepted.
              multi  - an integer controlling the node messages and whether
              or not only a word should be read.

 DESCRIPTION  input() reads from the user at maximum length characters,
              first displaying the string prompt, using the BBBS input
              buffer. The parameter multi defines whether or not multiple
              words should be read; multiple words are read only if multi is
              false. The bit 7 of multi is an exception: if it is set, then
              no nodemessages are processed while user is typing his/her
              input.

RETURN VALUE  input() returns a string containing the user input, modified
              approriately.

    EXAMPLES  command=input("Your Command: ",50,1);
              foo=input("Enter string: ",50,0);

    SEE ALSO  getch()

                                                                 kbhit      179


k  b  h  i  t  
_______________________________________________________________________________

    FUNCTION  kbhit() - check to see if a key has been pressed

    SYNOPSIS  kbhit();

 DESCRIPTION  kbhit() checks if a key has been pressed or not. Note that
              kbhit() will not wait for a user to press a key.

RETURN VALUE  kbhit() returns true if a key has been pressed.

     EXAMPLE  while(!kbhit()) printf("BBBS forever!\n");

    SEE ALSO  getch()

180      loaduser


l  o  a  d  u  s  e  r  
_______________________________________________________________________________

    FUNCTION  loaduser() - adjust bu-variables to contain the values of
              another user

    SYNOPSIS  loaduser(userno);

              userno - an integer determining the absolute user number of
              the user whose values should be loaded.

 DESCRIPTION  loaduser() adjusts the values of the bu-variables so that they
              contain the values of the user whose user number is userno.
              The bu-variables contain these values until a call to
              freeuser() is made.

RETURN VALUE  loaduser() returns a nonzero value if an error occurs,
              otherwise it returns 0.

     EXAMPLE  int main() {
                 int i;

                 for(i=0; !loaduser(i); ++i) {
                   printf("User #%04u: %s\n",i,bu_name);
                   freeuser();
                 }
              }

    SEE ALSO  freeuser()

                                                     make_pcboard12sys      181


m  a  k  e  _  p  c  b  o  a  r  d  1  2  s  y  s  
_______________________________________________________________________________

    FUNCTION  make_pcboard12sys() - make a v12 PCBOARD.SYS control file

    SYNOPSIS  make_pcboard12sys(file);

              file - a string containing the name of the file that the
              control file should be created into.

 DESCRIPTION  make_pcboard12sys() creates a door control file PCBOARD.SYS,
              that is compliant with version 12. This can be used with
              various external door programs.

RETURN VALUE  make_pcboard12sys() returns always 0.

     EXAMPLE  make_pcboard12sys("pcboard.sys");

    SEE ALSO  make_pcboard14sys()

182      make_pcboard14sys


m  a  k  e  _  p  c  b  o  a  r  d  1  4  s  y  s  
_______________________________________________________________________________

    FUNCTION  make_pcboard14sys() - make a v14 PCBOARD.SYS control file

    SYNOPSIS  make_pcboard14sys(file);

              file - a string containing the name of the file that the
              control file should be created into.

 DESCRIPTION  make_pcboard14sys() creates a door control file PCBOARD.SYS,
              that is compliant with version 14. This can be used with
              various external door programs.

RETURN VALUE  make_pcboard14sys() returns always 0.

     EXAMPLE  make_pcboard14sys("pcboard.sys");

    SEE ALSO  make_pcboard12sys()

                                                               opendir      183


o  p  e  n  d  i  r  
_______________________________________________________________________________

    FUNCTION  opendir() - opens a directory for reading

    SYNOPSIS  opendir(filespec);

              filespec - a string containing the filespec of the files to
              read.

 DESCRIPTION  opendir() opens a directory for reading files that match the
              wild card expression in filespec. If you want to open a
              directory different than the current directory, simply list it
              before the wild card expression.

RETURN VALUE  opendir() returns true if there was no error, false otherwise.

     EXAMPLE  int main() {
                /* quick-and-dirty directory lister
                 *
                 * an example of opendir(), readdir(), closedir() and
                 * rewinddir().
                 */

                char spec,entry,file;
                int size,filecount;

                spec=input("Enter filespec: ",255,0);
                opendir(spec);

                printf("Directory of %s...\n\n",spec);

                do {
                  redisp=0; filecount=0;
                  while(strlen(entry=readdir())) {
                    file=copy(entry,1,pos("\2",entry));
                    delete(entry,1,pos("\2",entry));
                    size=copy(entry,1,pos("\2",entry));
                    printf("%.30s %i\n",file,size);
                    ++filecount;
                  }

                  printf("Total %u files.\n",filecount);
                  printf("Hit space to view the list again.\n");
                  while(!kbhit());
                  if(getch()==" ") {
                    rewinddir();
                    redisp=1;
                  }
                } while(redisp);

                printf("Have a nice day!\n");
                closedir();
              }

    SEE ALSO  readdir(), rewinddir(), closedir()

184      parsecom


p  a  r  s  e  c  o  m  
_______________________________________________________________________________

    FUNCTION  parsecom() - parse input for commands

    SYNOPSIS  parsecom(cmd_list, input);

              cmd_list - list of available commands, separated with slashes.
              input    - the input string.

 DESCRIPTION  parsecom() parses the input specified in input to see if it
              matches any of the commands specified in cmd_list. The
              commands in cmd_list should be separated with slashes. Also,
              they should be written in dual case, so that the necessary
              (unique) part of the command is in upper case, the rest in
              lower case. cmd_list should contain no more than 254 commands.

RETURN VALUE  parsecom() returns an integer denoting the number of the
              command that the input matches, otherwise it returns 255. If
              the input string is empty, parsecom() returns 0.

     EXAMPLE  cmdno=parsecom("Quit/Read/UGH",input("Com: ",40,1));

                                                                   pos      185


p  o  s  
_______________________________________________________________________________

    FUNCTION  pos() - search for a substring in a string

    SYNOPSIS  pos(needle, haystack);

              needle   - the substring to be located.
              haystack - the string to be scanned.

 DESCRIPTION  pos() seeks the first occurance of needle in haystack.

RETURN VALUE  If needle is found in haystack, then the starting character
              number in haystack is returned. Otherwise, pos() returns 0.

     EXAMPLE  if(pos("sysop", bv_groups)) printf("G'day sir boss!\n");

    SEE ALSO  regexp()

186      printf


p  r  i  n  t  f  
_______________________________________________________________________________

    FUNCTION  printf() - write formatted output into the screen

    SYNOPSIS  printf(format {,argument{,argument...}});

              format   - a format specifier

 DESCRIPTION  printf() writes formatted output into the screen. Characters
              in format are written directly to the screen until a format
              specification is found. A format specification has the
              following format:

              %{flags}{width}{.precision}type

              where items in curly barckets are optional. For each format
              specification, an extra parameter has to be added to the
              printf() call. This parameter is then formatted according to
              the format specification and written to the screen.

              The flags field in format specification is used to modify
              the formatting. The following flags are available:

              Flag   Meaning
              ==============================================================
              -      Left-justify the result in the field. Otherwise, the
                     result is right-justified. The value will be padded
                     with blanks on the right. If - is not specified, then
                     the result is padded to the left with blanks or zeros,
                     depending on the type in the format specification.

              +      Always insert a sign (+ or -), when a number is being
                     output.

              0      If a number is being output, pad the field with '0'
                     characters instead of blanks. This flag is ignored if a
                     string is being output or if the - flag is specified.

              If the length of the result is less than the width specified
              in the format specifier, then it is padded with blanks or '0'
              characters. If the - flag is used, then the field is padded to
              the right, otherwise to the left. If the length of the result
              is greater than the width-field in format specifier, then the
              field is NOT truncated.

              The precision-field can only be used with strings. It
              determines the maximum length of the string for this field. If
              the string is longer, then it will be truncated to be the
              correct length.

              The type-field is a single character determining the type of
              conversion done the the argument matching this format
              specification. It can be one of the following:

              Type  Output and the type of the required extra argument
              ============================================================
              %     The '%' character. This type does not need an extra
                    argument.

                                                                printf      187


              c     A single character.
              d     A signed decimal integer.
              i     A signed decimal integer.
              o     An unsigned octal integer.
              s     A string
              u     An unsigned decimal integer
              x     An unsigned hexadecimal integer, using lower case.
              X     An unsigned hexadecimal integer, using upper case.

RETURN VALUE  printf() returns the number of characters displayed.

    EXAMPLES  printf("Foobar!\n");
              printf("Hello, %s!\n",bu_name);
              printf("49=0x%04X=%4oo",49,49);
              printf("%-33s%s",bu_name,bu_city);
              printf("%4.4s","123456");

    SEE ALSO  fprintf(), sprintf()

188      readdir


r  e  a  d  d  i  r  
_______________________________________________________________________________

    FUNCTION  readdir() - read a single directory entry

    SYNOPSIS  readdir();

 DESCRIPTION  readdir() reads the next directory entry matching the filespec
              given when opendir() was called. If opendir() has not been
              called, readdir() will always fail.

RETURN VALUE  If successful, readdir() returns a string containing the
              filename, file size and the file date, separated with the
              ASCII character number 2. Otherwise, readdir() returns an
              empty string.

     EXAMPLE  int main() {
                /* quick-and-dirty directory lister
                 *
                 * an example of opendir(), readdir(), closedir() and
                 * rewinddir().
                 */

                char spec,entry,file;
                int size,filecount;

                spec=input("Enter filespec: ",255,0);
                opendir(spec);

                printf("Directory of %s...\n\n",spec);

                do {
                  redisp=0; filecount=0;
                  while(strlen(entry=readdir())) {
                    file=copy(entry,1,pos("\2",entry));
                    delete(entry,1,pos("\2",entry));
                    size=copy(entry,1,pos("\2",entry));
                    printf("%.30s %i\n",file,size);
                    ++filecount;
                  }

                  printf("Total %u files.\n",filecount);
                  printf("Hit space to view the list again.\n");
                  while(!kbhit());
                  if(getch()==" ") {
                    rewinddir();
                    redisp=1;
                  }
                } while(redisp);

                printf("Have a nice day!\n");
                closedir();
              }

    SEE ALSO  opendir(), rewinddir(), closedir()

                                                                regexp      189


r  e  g  e  x  p  
_______________________________________________________________________________

    FUNCTION  regexp() - check to see if a string matches a regular
              expression

    SYNOPSIS  regexp(exp, str);

              exp - a string containing the regular expression to match.
              str - a string containing the string to check.

 DESCRIPTION  regexp() executes regular expression matching, using exp as
              the regular expression and str as the string to check. exp has
              to be a valid regular expression.

RETURN VALUE  regexp() returns true, if str matches the expression exp,
              otherwise it returns false.

     EXAMPLE  int main() {
                // a quick-and-dirty grep program:

                int f,c=0;
                char fn,exp,line;

                exp=input("Exp : ",255,0);
                fn=input("File:",255,1);

                if((f=fopen(fn,"rt"))==-1) {
                  printf("grep: no such file '%s'n",fn);
                  exit(-1);
                }

                while(!feof(f)) {
                  ++c;
                  if(regexp(exp, line=fgets(f)))
                    printf("%i: %sn",c,line);
                }
              }

    SEE ALSO  pos()

190      remove


r  e  m  o  v  e  
_______________________________________________________________________________

    FUNCTION  remove - delete a file

    SYNOPSIS  remove(file);

              file - a string containing the name and path of the file
              to delete.

 DESCRIPTION  remove() deletes the file specified by the parameter file.
              The file-parameter cannot contain wildcards. If you want
              to delete multiple files, you should do this with the OS
              shell by using the system() function.

RETURN VALUE  remove() returns always 0.

     EXAMPLE  remove("c:/bbbs/fubba.fil");

    SEE ALSO  system, rename

                                                                rename      191


r  e  n  a  m  e  
_______________________________________________________________________________

    FUNCTION  rename() - rename a file

    SYNOPSIS  rename(old, new);

              old - a string containing the name of the file to be renamed.
              new - a string containing the name that the file should be
              renamed to.

 DESCRIPTION  rename() renames the file old to new.

RETURN VALUE  rename() returns 0 if renaming was successful, nonzero if
              error occurred.

     EXAMPLE  rename("fubba.fil","foobar.fil");

    SEE ALSO  remove()

192      rewinddir


r  e  w  i  n  d  d  i  r  
_______________________________________________________________________________

    FUNCTION  rewinddir() - move the directory pointer to the first
              directory entry

    SYNOPSIS  rewinddir();

 DESCRIPTION  rewinddir() adjusts the directory pointer so that it points to
              the first file in the directory matching the filespec given to
              opendir(). rewinddir() should not be called until after
              opendir() is called to open a directory.

RETURN VALUE  rewinddir() returns always 0.

     EXAMPLE  int main() {
                /* quick-and-dirty directory lister
                 *
                 * an example of opendir(), readdir(), closedir() and
                 * rewinddir().
                 */

                char spec,entry,file;
                int size,filecount;

                spec=input("Enter filespec: ",255,0);
                opendir(spec);

                printf("Directory of %s...\n\n",spec);

                do {
                  redisp=0; filecount=0;
                  while(strlen(entry=readdir())) {
                    file=copy(entry,1,pos("\2",entry));
                    delete(entry,1,pos("\2",entry));
                    size=copy(entry,1,pos("\2",entry));
                    printf("%.30s %i\n",file,size);
                    ++filecount;
                  }

                  printf("Total %u files.\n",filecount);
                  printf("Hit space to view the list again.\n");
                  while(!kbhit());
                  if(getch()==" ") {
                    rewinddir();
                    redisp=1;
                  }
                } while(redisp);

                printf("Have a nice day!\n");
                closedir();
              }

    SEE ALSO  opendir(), readdir(), closedir()

                                                           seekforuser      193


s  e  e  k  f  o  r  u  s  e  r  
_______________________________________________________________________________

    FUNCTION  seekforuser() - find the user number of an user

    SYNOPSIS  seekforuser(name);

              name - a string containing the name of the user whose user
              number should be searched for.

 DESCRIPTION  seekforuser() finds the absolute user number of the user name.
              This number can be used in subsequent calls to loaduser().

RETURN VALUE  seekforuser() returns the user number of name, or 65535 if the
              user is not found.

     EXAMPLE  loaduser(seekforuser("Gleb Butcher"));

    SEE ALSO  loaduser()

194      sendnode


s  e  n  d  n  o  d  e  
_______________________________________________________________________________

    FUNCTION  sendnode() - send a node message

    SYNOPSIS  sendnode(from, to, message, filter, prefix);

              from    - an integer denoting the node from which the node
              message should originate.
              to      - an integer denoting the node to which the node
              message should be sent to.
              message - a string containing the actual message text.
              filter  - an integer containing the filter level of the
              message.
              prefix  - a string containing the prefix of the message.

 DESCRIPTION  sendnode() sends a node message from node from to the node to.
              The bits in filter define what type of node message it is. If
              the bit is unset, it means that it can be interpreted to be a
              message of that filter level. Therefore, messages with filter
              level 255 should not be used, as they can not be filtered out.

              Bit  Level
              =======================================
              0    Chat feeling
              1    Login / Logout information
              2    "New message entered"-information
              3    Public chat message
              4    Private chat message

              prefix determines what kind of prefix the message should have
              when BBBS formats it into a message. Available prefixes are:

              Prefix               Message type
              =========================================================
              #[* ] :nick{ color}  A feeling with focus nick, displayed
                                   with color color.
              #channel:nick        A chat message in channel #channel,
                                   written by user with nickname nick.
              nick                 A private message from user with nickname
                                   nick.
              *channel:nick        An informative message to/about channel
                                   #channel form user with nickname nick.

              There are some node messages that have a special meaning:

              Message      Action taken when a node receives this message
              ===========================================================
              \02CLICK     Sends back the message "\02HUM"
              \02UDATA     Re-reads the user record
              \02RGROUP    Re-reads the group control file 'groups'.
              \02RCHAT     Re-reads the chat channels file 'channels.bbb'.

              (In the above, \02 is the ASCII character number 2, not the
              absolute string "\02".)

RETURN VALUE  sendnode() returns always 0.

     EXAMPLE  sendnode(bv_nodenumber,1,"Hello!",255,bn_nick);

                                                              sendnode      195



    SEE ALSO  getnodemessage()

196      setenv


s  e  t  e  n  v  
_______________________________________________________________________________

    FUNCTION  setenv() - set an environment variable

    SYNOPSIS  setenv(env, value);

              env   - a string containing the name of the environment variable
              to set.
              value - a string containing the value that the environment
              variable should be set to.

 DESCRIPTION  setenv() changes the value of the environment variable env to
              be contain value. If the environment variable does not exist,
              then it will be created. Note that like getenv(), setenv()
              deals with BBBS's internal environment variables, and has
              nothing to do with the environment variables of the OS.

              If you do not wish to have a environment variable listed with
              the "u set" command, then use the ASCII character 1 as the
              first character of the name.

RETURN VALUE  setenv() returns always 0

    EXAMPLES  setenv("FUBBA","t");
              setenv("\1INVISIBLE","foo!");

    SEE ALSO  getenv()

                                                                 spawn      197


s  p  a  w  n  
_______________________________________________________________________________

    FUNCTION  spawn() - execute another script.

    SYNOPSIS  spawn(file);

              file - a string containing the name of the script to execute.

 DESCRIPTION  spawn() executes another script. The execution of the
              program invoking spawn() will continue when the executed
              program exits.

              It is also possible to pass parameters to the main-function
              of the script being called. This is accomplished by adding
              the parameters to the file-parameter of spawn(), separated with
              the ASCII character 1.

RETURN VALUE  spawn() returns always 0.

     EXAMPLE  spawn("c:/bbbs/bz/newscript");

    SEE ALSO  exec()

198      sprintf


s  p  r  i  n  t  f  
_______________________________________________________________________________

    FUNCTION  sprintf() - write formatted text into a string.

    SYNOPSIS  sprintf(format {,argument{,argument...}});

              format - a format specifier, see printf() for details

              sprintf() can have a number of additional arguments,
              depending on the format specifier. For every format
              specifier in format, an argument should be given.

 DESCRIPTION  sprintf() performs formatted output and returns it.

RETURN VALUE  sprintf() returns the formatted string.

     EXAMPLE  bar=sprintf("49=0x%04X=%oo",49,49);

    SEE ALSO  printf(), fprintf()

                                                              stlocase      199


s  t  l  o  c  a  s  e  
_______________________________________________________________________________

    FUNCTION  stlocase() - convert a string into lower case

    SYNOPSIS  stlocase(str);

              str - the string to be converted

 DESCRIPTION  stlocase() converts a string into lower case, taking into
              account the character set that the user is using.

RETURN VALUE  stlocase() returns str in lower case.

     EXAMPLE  foo=stlocase("eLiTeS SuCK!");

    SEE ALSO  stupcase()

200      strcat


s  t  r  c  a  t  
_______________________________________________________________________________

    FUNCTION  strcat() - join two strings

    SYNOPSIS  strcat(str1, str2);

              str1 - a string
              str2 - the string that should be joined to str1

 DESCRIPTION  strcat() joins str2 into str1.

RETURN VALUE  strcat() returns a string consisting of str1 and str2.

     EXAMPLE  foo=input("What is your name? ",50,1);
              printf("%s!\n",strcat("Hello, ",foo));

    SEE ALSO  sprintf()

                                                                strlen      201


s  t  r  l  e  n  
_______________________________________________________________________________

    FUNCTION  strlen() - calculate the length of a string

    SYNOPSIS  strlen(str);

              str - the string the length of which should determined.

 DESCRIPTION  strlen() calculates the length of str and returns it.

RETURN VALUE  strlen() returns an integer determining the length of str in
              characters.

     EXAMPLE  printf("You are %u chars long!\n",strlen(bu_name));

202      stupcase


s  t  u  p  c  a  s  e  
_______________________________________________________________________________

    FUNCTION  stupcase() - convert a string into upper case.

    SYNOPSIS  stupcase(str);

              str - the string to be converted

 DESCRIPTION  stupcase() converts a string into upper case, taking into
              account the character set that the user is using.

RETURN VALUE  stupcase() returns str in upper case.

     EXAMPLE  foo=stupcase("i want to yell!");

    SEE ALSO  stlocase()

                                                                system      203


s  y  s  t  e  m  
_______________________________________________________________________________

    FUNCTION  system() - execute an operating system command

    SYNOPSIS  system(command, swap);

              command - a string containing the OS command to be executed.
              swap    - an integer determining if swapping should be done.

 DESCRIPTION  system() drops into OS, executes the OS command command and
              returns back to the program. If swap is true, then BBBS will
              be swapped to disk or EMS/XMS to save memory for the OS
              command execution in such environments in which this is
              possible to do.

RETURN VALUE  system() returns an integer determining the errorlevel value
              as returned by the OS.

     EXAMPLE  printf("Errorlevel=%u",system("foo.exe",1));

    SEE ALSO  bbbs(), exec(), spawn()

204      time


t  i  m  e  
_______________________________________________________________________________

    FUNCTION  time() - return seconds since 1.1.1970, 00:00 UTC

    SYNOPSIS  time();

 DESCRIPTION  time() returns the amount of seconds that have passed
              since 1.1.1970 at 00:00 UTC.

RETURN VALUE  time() returns an integer determining the amount of
              seconds that have passed.

    SEE ALSO  localtime()

                                                             localtime      205


l  o  c  a  l  t  i  m  e  
_______________________________________________________________________________

    FUNCTION  localtime() - format seconds since 1.1.1970, 00:00 UTC to string

    SYNOPSIS  localtime(date);

 DESCRIPTION  localtime() format seconds since 1.1.1970 at 00:00 UTC type date
              to string.

RETURN VALUE  localtime() returns a string telling year-month-day-hour-min-sec.

    SEE ALSO  time()

206      tictactoe


t  i  c  t  a  c  t  o  e  
_______________________________________________________________________________

    FUNCTION  tictactoe() - execute the game of TicTacToe

    SYNOPSIS  tictactoe(mode, mark);

              mode - An integer determining the mode of play.
              mark - The mark to be used.

 DESCRIPTION  tictactoe() executes the BBBS's internal TicTacToe game. The
              game is played in mode mode, with the mark setup mark. mode 1
              and mark 0 is the normal local versus remote-tictactoe.

RETURN VALUE  tictactoe() returns an integer from 1 to 5, determining the
              result of the game, as follows:
              1 - Local user quit the game.
              2 - Remote user quit the game.
              3 - Local user won.
              4 - Remote user won.
              5 - Carrier was dropped.

    EXAMPLES  tictactoe(1,0);
              tictactoe(2,1);
              tictactoe(2,2);

                                                             yellsysop      207


y  e  l  l  s  y  s  o  p  
_______________________________________________________________________________

    FUNCTION  yellsysop() - page the system operator

    SYNOPSIS  yellsysop(ask);

              ask - an integer denoting whether or not a reason should be
              asked.

 DESCRIPTION  yellsysop() pages the system operator. If ask is true, then a
              chat reason will be asked.

RETURN VALUE  yellsysop() returns true if the SysOp answered to the page
              request.

     EXAMPLE  yellsysop(1);

208      BBBS variables


B  B  B  S     v  a  r  i  a  b  l  e  s  
_______________________________________________________________________________

The following global variables are defined in BZ run-time library:

        Variable name              Type         Index   Constant
        ========================================================

        Conference variables:
         bc_count_of_co            int                  *
         bc_post_conf              int                  *
         bc_resume_conf            int                  *
         bc_fileinfo_co            int                  *
         bc_lastread               int          *       *
         bc_status                 int          *       *
         bc_confname               char         *       *
         bc_description            char         *       *
         bc_ulastread              int          *
         bc_ustatus                int          *

        Function variables:
         bf_timleft                int                  *

        Global config:
         bg_bbbs_name              char                 *
         bg_sysop_name             char                 *
         bg_closed_pass            char                 *
         bg_grabfile               char                 *
         bg_maindir                char                 *
         bg_updir                  char
         bg_tempdir                char                 *
         bg_menudir                char                 *
         bg_tickdir                char                 *
         bg_NetMail                char                 *
         bg_inbound                char                 *
         bg_feelingsdir            char                 *
         bg_scriptdir              char                 *
         bg_max_nodes              int                  *
         bg_bankmax                int                  *
         bg_newu_time              int                  *
         bg_bankrate               int                  *
         bg_newu_access            int                  *
         bg_gtoggles               int                  *
         bg_htoggles               int                  *
         bg_zone                   int          *       *
         bg_net                    int          *       *
         bg_node                   int          *       *
         bg_point                  int          *       *

        Local config:
         bl_modem_init1            char                 *
         bl_modem_init2            char                 *
         bl_modem_init3            char                 *
         bl_modem_hangu            char                 *
         bl_modem_busy_            char                 *
         bl_modem_answe            char                 *
         bl_fd_dobbs               char                 *
         bl_logfile                char                 *
         bl_loginlog               char                 *

                                                        BBBS variables      209


         bl_grabdir                char                 *
         bl_menudir                char                 *
         bl_newdir                 char                 *
         bl_spyfile                char                 *
         bl_start_speed            int                  *
         bl_min_speed              int                  *
         bl_base_addres            int                  *
         bl_irq                    int                  *
         bl_pollrate               int                  *
         bl_answer_ring            int                  *
         bl_ltoggles               int                  *

        Node variables:
         bn_split                  int
         bn_bstatus                int
         bn_zstatus                int
         bn_speed                  int
         bn_time                   int
         bn_nick                   char
         bn_realname               char

        User variables:
         bu_name                   char                 *
         bu_address                char
         bu_city                   char
         bu_phone                  char
         bu_birth                  char
         bu_ok2login               int
         bu_termcap                int
         bu_pagelength             int
         bu_charset                int
         bu_language               int
         bu_readmode               int
         bu_packtype               int
         bu_protocol               int
         bu_nodemsgfilt            int
         bu_timelimit              int
         bu_timeleft               int
         bu_timeson                int
         bu_msgleft                int
         bu_uploaded               int
         bu_downloaded             int
         bu_pmsgleft               int
         bu_puploaded              int
         bu_pdownloaded            int
         bu_ptimeson               int
         bu_pmsgdumped             int
         bu_pmsgread               int
         bu_pkbup                  int
         bu_pkbdown                int
         bu_fchecked               int
         bu_timebank               int
         bu_resume                 int
         bu_limits                 int
         bu_access                 int
         bu_utoggles               int
         bu_firsttime              int
         bu_lasttime               int
         bu_msgread                int

210      BBBS variables


         bu_msgdumped              int
         bu_kbup                   int
         bu_kbdown                 int
         bu_todaydown              int
         bu_userbits               int

        Other variables:
         bv_filna                  char
         bv_local_buffe            char
         bv_comhandle              int                  *
         bv_comdevice              char                 *
         bv_comstring              char
         bv_interface              char
         bv_crrdir                 char
         bv_holdreal               char
         bv_hddesc                 char
         bv_serna                  char                 *
         bv_tempsys                int
         bv_unum                   int                  *
         bv_confnro                int                  *
         bv_baud                   int
         bv_realbaud               int
         bv_logintime              int
         bv_lastmsg                int
         bv_curmsg                 int
         bv_firstmsg               int
         bv_lastreaded             int
         bv_newavail               int
         bv_foryou                 int
         bv_serno                  int                  *
         bv_vername                char                 *
         bv_ver                    char                 *
         bv_tomenu                 int
         bv_nodenumber             int                  *
         bv_reduced                int
         bv_nextevent              int
         bv_temptime               int
         bv_com                    int                  *
         bv_carrier                int
         bv_outputstopp            int
         bv_quicklogin             int
         bv_paged                  int
         bv_groups                 char
         bv_txt                    char         *       *

                                                        bc_count_of_co      211


b  c  _  c  o  u  n  t  _  o  f  _  c  o  
_______________________________________________________________________________

   VARIABLE   bc_count_of_co

       TYPE   int (constant)

DESCRIPTION   Holds the total number of conferences in the system.

212      bc_post_conf


b  c  _  p  o  s  t  _  c  o  n  f  
_______________________________________________________________________________

   VARIABLE   bc_post_conf

       TYPE   int (constant)

DESCRIPTION   Holds the conference number of the defined post
              conference. If no post conference is defined the value will be
              65535.

                                                        bc_resume_conf      213


b  c  _  r  e  s  u  m  e  _  c  o  n  f  
_______________________________________________________________________________

   VARIABLE   bc_resume_conf

       TYPE   int (constant)

DESCRIPTION   Holds the conference number of the defined resume
              conference. If no resume conference is defined this value will be
              65535.

214      bc_fileinfo_co


b  c  _  f  i  l  e  i  n  f  o  _  c  o  
_______________________________________________________________________________

   VARIABLE   bc_fileinfo_co

       TYPE   int (constant)

DESCRIPTION   Holds the conference number of the defined fileinfo
              conference. If no fileinfo conference is defined this value will
              be
              65535.

                                                           bc_lastread      215


b  c  _  l  a  s  t  r  e  a  d  
_______________________________________________________________________________

   VARIABLE   bc_lastread[x]

       TYPE   int (constant), indexed

DESCRIPTION   Returns the amout of messages automatically put to scan when
              user joins to conference #x.

    EXAMPLE   printf("User gets %u messages when joining to %s\n",
                     bc_lastread[3],bc_confname[3]);

216      bc_status


b  c  _  s  t  a  t  u  s  
_______________________________________________________________________________

   VARIABLE   bc_status[x]

       TYPE   int (constant), indexed

DESCRIPTION   Returns a number which indicates what status conference #x has.

              The bits are:
              1     must
              2     member
              4     invite
              8     fidoarea
              16    postarea
              32    allowpriv
              64    nomarks
              128   noreply
              256   nostrip
              512   allfix
              1024  namefix
              2048  alias
              4096  allowtag
              8192  agnet
              16384 moderated
              32768 nntp

                                                           bc_confname      217


b  c  _  c  o  n  f  n  a  m  e  
_______________________________________________________________________________

   VARIABLE   bc_confname[x]

       TYPE   char (constant), indexed

DESCRIPTION   Returns the name of conference #x.

218      bc_description


b  c  _  d  e  s  c  r  i  p  t  i  o  n  
_______________________________________________________________________________

   VARIABLE   bc_description[x]

       TYPE   char (constant), indexed

DESCRIPTION   Returns the description of conference #x.

                                                           bc_ulastead      219


b  c  _  u  l  a  s  t  e  a  d  
_______________________________________________________________________________

   VARIABLE   bc_ulastread[x]

       TYPE   int (constant), indexed

DESCRIPTION   Returns the user's lastread pointer for conference #x.

220      bc_ustatus


b  c  _  u  s  t  a  t  u  s  
_______________________________________________________________________________

   VARIABLE   bc_ustatus[x]

       TYPE   int (constant), indexed

DESCRIPTION   Returns the user's status bits for conference #x.

                                                            bf_timleft      221


b  f  _  t  i  m  l  e  f  t  
_______________________________________________________________________________

   VARIABLE   bf_timleft

       TYPE   int (constant)

DESCRIPTION   Returns minutes left for this call for the current user.

EXAMPLE CODE  int main() {
                printf("You have %u min. left for this call.\n",bf_timleft);
              }

222      bg_bbbs_name


b  g  _  b  b  b  s  _  n  a  m  e  
_______________________________________________________________________________

   VARIABLE   bg_bbbs_name

       TYPE   char (constant)

DESCRIPTION   Returns the name of the board.

                                                         bg_sysop_name      223


b  g  _  s  y  s  o  p  _  n  a  m  e  
_______________________________________________________________________________

   VARIABLE   bg_sysop_name

       TYPE   char (constant)

DESCRIPTION   Returns the name of User #0, which is the "real" SysOp.

224      bg_closed_pass


b  g  _  c  l  o  s  e  d  _  p  a  s  s  
_______________________________________________________________________________

   VARIABLE   bg_closed_pass

       TYPE   char (constant)

DESCRIPTION   Returns the password for accessing the system if you
              run a closed system. This string is crypted.

                                                           bg_grabfile      225


b  g  _  g  r  a  b  f  i  l  e  
_______________________________________________________________________________

   VARIABLE   bg_grabfile

       TYPE   char (constant)

DESCRIPTION   Returns the name of the grabfile as you have defined
              it in BCFG/4.

226      bg_maindir


b  g  _  m  a  i  n  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_maindir

       TYPE   char (constant)

DESCRIPTION   Returns the path to your main dir including a
              trailing slash.

                                                              bg_updir      227


b  g  _  u  p  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_updir

       TYPE   char

DESCRIPTION   Returns the path to your upload directory including
              a trailing slash.

    Remarks   If you changes this variable remember to change it back to
              original value too!

228      bg_tempdir


b  g  _  t  e  m  p  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_tempdir

       TYPE   char (constant)

DESCRIPTION   Returns the path to your work directory including
              a trailing slash.

                                                            bg_menudir      229


b  g  _  m  e  n  u  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_menudir

       TYPE   char (constant)

DESCRIPTION   Returns the path to your main menu directory
              including a trailing slash.

230      bg_tickdir


b  g  _  t  i  c  k  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_tickdir

       TYPE   char (constant)

DESCRIPTION   Returns the path to your tick files directory
              including a trailing slash.

                                                            bg_NetMail      231


b  g  _  N  e  t  M  a  i  l  
_______________________________________________________________________________

   VARIABLE   bg_NetMail

       TYPE   char (constant)

DESCRIPTION   Returns the path to your NetMail directory
              including a trailing slash.

232      bg_inbound


b  g  _  i  n  b  o  u  n  d  
_______________________________________________________________________________

   VARIABLE   bg_inbound

       TYPE   char (constant)

DESCRIPTION   Returns the path to your inbound files directory
              including a trailing slash.

                                                        bg_feelingsdir      233


b  g  _  f  e  e  l  i  n  g  s  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_feelingsdir

       TYPE   char (constant)

DESCRIPTION   Returns the path to your feelings directory
              including a trailing slash.

234      bg_scriptdir


b  g  _  s  c  r  i  p  t  d  i  r  
_______________________________________________________________________________

   VARIABLE   bg_scriptdir

       TYPE   char (constant)

DESCRIPTION   Returns the path to your scripts directory
              including a trailing slash. All of your scripts should
              be in this directory.

                                                          bg_max_nodes      235


b  g  _  m  a  x  _  n  o  d  e  s  
_______________________________________________________________________________

   VARIABLE   bg_max_nodes

       TYPE   int (constant)

DESCRIPTION   Returns the number of nodes configured in your system.

236      bg_bankmax


b  g  _  b  a  n  k  m  a  x  
_______________________________________________________________________________

   VARIABLE   bg_bankmax

       TYPE   int (constant)

DESCRIPTION   Returns the maximum amount of time allowed to store
              in the Time Bank.

                                                          bg_newu_time      237


b  g  _  n  e  w  u  _  t  i  m  e  
_______________________________________________________________________________

   VARIABLE   bg_newu_time

       TYPE   int (constant)

DESCRIPTION   Returns the default timelimit for new users.

238      bg_bankrate


b  g  _  b  a  n  k  r  a  t  e  
_______________________________________________________________________________

   VARIABLE   bg_bankrate

       TYPE   int (constant)

DESCRIPTION   Returns the ratio divider used for calculating the
              Time Bank ratio.

                                                        bg_newu_access      239


b  g  _  n  e  w  u  _  a  c  c  e  s  s  
_______________________________________________________________________________

   VARIABLE   bg_newu_access

       TYPE   int (constant)

DESCRIPTION   Returns a number which sets several different user
              settings:

              0x40000000        New user has download access
              0x80000000        New user has upload access

240      bg_gtoggles


b  g  _  g  t  o  g  g  l  e  s  
_______________________________________________________________________________

   VARIABLE   bg_gtoggles

      TYPE    int (constant)

DESCRIPTION   Returns a number containg different global toggles.
              (See also bg_htoggles)

              Bit Meaning
              === ==========================
               0  up_down_check
               1  show_privates
               2  brobocop
               3  hippo
               4  show_empty
               5  whotext
               6  pack_messages
               7  fido_hydra
               8  fido_zedzap
               9  fido_tranx
              10  fido_unlistnode
              11  fido_unlistpoint
              12  fido_unprotnode
              13  fido_freq_answering
              14  fido_freq_calling
              15  show_sysop_in_stats
              16  bmt_check_destination
              17  disable_newu_address
              18  disable_newu_birthday
              19  users_are_hidden
              20  upload_scan
              21  poll_all_crashes
              22  delete_dup_uploads
              23  savebad
              24  savesecure
              25  bmt_log_headers
              27  no_remote_sysop
              28  bogus_save_NetMail
              29  kb_day_relative
              30  global_download
              31  nntp_gateway
              32  smtp_gateway

                                                           bg_htoggles      241


b  g  _  h  t  o  g  g  l  e  s  
_______________________________________________________________________________

   VARIABLE   bg_htoggles

      TYPE    int (constant)

DESCRIPTION   Returns a number containg more different global toggles.
              (See also bg_gtoggles)

              Bit Meaning
              === ==========================
               0  nntp_save_headers
               1  smtp_save_headers
               2  chat_uses_time
               3  sysnote_msg
               4  eom_to_uucp
               5  use_nodenum_not_nick
               6  allow_all_names
               7  not used
               8  grab_is_free
               9  uploader_owns_file

242      bg_zone


b  g  _  z  o  n  e  
_______________________________________________________________________________

   VARIABLE   bg_zone[x]

      TYPE    int (constant), indexed

DESCRIPTION   Returns the zone part of FidoNet AKA #x.

                                                                bg_net      243


b  g  _  n  e  t  
_______________________________________________________________________________

   VARIABLE   bg_net[x]

      TYPE    int (constant), indexed

DESCRIPTION   Returns the net part of FidoNet AKA #x.

244      bg_node


b  g  _  n  o  d  e  
_______________________________________________________________________________

   VARIABLE   bg_node[x]

      TYPE    int (constant), indexed

DESCRIPTION   Returns the node part of FidoNet AKA #x.

                                                              bg_point      245


b  g  _  p  o  i  n  t  
_______________________________________________________________________________

   VARIABLE   bg_point[x]

      TYPE    int (constant), indexed

DESCRIPTION   Returns the point part of FidoNet AKA #x.

246      bl_modem_init1


b  l  _  m  o  d  e  m  _  i  n  i  t  1  
_______________________________________________________________________________

   VARIABLE   bl_modem_init1

       TYPE   char (constant)

DESCRIPTION   Returns the first of the three line Init string from BCFG/4.

                                                        bl_modem_init2      247


b  l  _  m  o  d  e  m  _  i  n  i  t  2  
_______________________________________________________________________________

   VARIABLE   bl_modem_init2

       TYPE   char (constant)

DESCRIPTION   Returns the second of the three line Init string from BCFG/4.

248      bl_modem_init3


b  l  _  m  o  d  e  m  _  i  n  i  t  3  
_______________________________________________________________________________

   VARIABLE   bl_modem_init3

       TYPE   char (constant)

DESCRIPTION   Returns the third of the three line Init string from BCFG/4.

                                                        bl_modem_hangu      249


b  l  _  m  o  d  e  m  _  h  a  n  g  u  
_______________________________________________________________________________

   VARIABLE   bl_modem_hangu

       TYPE   char (constant)

DESCRIPTION   Returns the configured string to force the modem to hang up.

250      bl_modem_busy_


b  l  _  m  o  d  e  m  _  b  u  s  y  _  
_______________________________________________________________________________

   VARIABLE   bl_modem_busy_

       TYPE   char (constant)

DESCRIPTION   Returns the configured string to set the modem busy from BCFG/4.

                                                        bl_modem_answe      251


b  l  _  m  o  d  e  m  _  a  n  s  w  e  
_______________________________________________________________________________

   VARIABLE   bl_modem_answe

       TYPE   char (constant)

DESCRIPTION   Returns the configured string to tell the modem to answer an
              incoming call. This is configured in BCFG/4.

252      bl_fd_dobbs


b  l  _  f  d  _  d  o  b  b  s  
_______________________________________________________________________________

   VARIABLE   bl_fd_dobbs

       TYPE   char (constant)

DESCRIPTION   Returns the path and name of the DOBBS.BAT file used for
              FrontDoor if one is defined in BCFG/4. If none is defined, the
              string will be empty.

                                                            bl_logfile      253


b  l  _  l  o  g  f  i  l  e  
_______________________________________________________________________________

   VARIABLE   bl_logfile

       TYPE   char (constant)

DESCRIPTION   Returns the path and the filename of the current
              node's log file.

254      bl_loginlog


b  l  _  l  o  g  i  n  l  o  g  
_______________________________________________________________________________

   VARIABLE   bl_loginlog

       TYPE   char (constant)

DESCRIPTION   Returns the path and the filename of the current node's
              login file.

                                                            bl_grabdir      255


b  l  _  g  r  a  b  d  i  r  
_______________________________________________________________________________

   VARIABLE   bl_grabdir

       TYPE   char (constant)

DESCRIPTION   Returns the path including a trailing slash for the
              current node's grab directory.

256      bl_menudir


b  l  _  m  e  n  u  d  i  r  
_______________________________________________________________________________

   VARIABLE   bl_menudir

       TYPE   char (constant)

DESCRIPTION   Returns the path including a trailing slash for the
              current node's menu directory.

                                                             bl_newdir      257


b  l  _  n  e  w  d  i  r  
_______________________________________________________________________________

   VARIABLE   bl_newdir

       TYPE   char (constant)

DESCRIPTION   Returns the path including a trailing slash for the
              current node's temporarly upload directory. (The directory that
              BBBS uses to store files users upload while the upload is in
              process.)

258      bl_spyfile


b  l  _  s  p  y  f  i  l  e  
_______________________________________________________________________________

   VARIABLE   bl_spyfile

       TYPE   char (constant)

DESCRIPTION   Returns the filename for the  current node's temporarly
              spyfile. Empty if none defined.

                                                        bl_start_speed      259


b  l  _  s  t  a  r  t  _  s  p  e  e  d  
_______________________________________________________________________________

   VARIABLE   bl_start_speed

       TYPE   int (constant)

DESCRIPTION   Returns the configured start speed from BCFG/4.

260      bl_min_speed


b  l  _  m  i  n  _  s  p  e  e  d  
_______________________________________________________________________________

   VARIABLE   bl_min_speed

       TYPE   int (constant)

DESCRIPTION   Returns the configured minimum speed to log in from BCFG/4.

                                                        bl_base_addres      261


b  l  _  b  a  s  e  _  a  d  d  r  e  s  
_______________________________________________________________________________

   VARIABLE   bl_base_addres

       TYPE   int (constant)

DESCRIPTION   Returns the configured base I/O address for the
              communications port for the current node.

262      bl_irq


b  l  _  i  r  q  
_______________________________________________________________________________

   VARIABLE   bl_irq

       TYPE   int (constant)

DESCRIPTION   Returns the configured IRQ address for the communications
              port for the current node.

                                                           bl_pollrate      263


b  l  _  p  o  l  l  r  a  t  e  
_______________________________________________________________________________

   VARIABLE   bl_pollrate

       TYPE   int (constant)

DESCRIPTION   Returns the configured polling rate for current node.

264      bl_answer_ring


b  l  _  a  n  s  w  e  r  _  r  i  n  g  
_______________________________________________________________________________

   VARIABLE   bl_answer_ring

       TYPE   int (constant)

DESCRIPTION   Returns the configured number of rings to answer on for
              the current node.

                                                           bl_ltoggles      265


b  l  _  l  t  o  g  g  l  e  s  
_______________________________________________________________________________

   VARIABLE   bl_ltoggles

       TYPE   int (constant)

DESCRIPTION   Returns a number containing several different settings
              that are unique to each node. The numbers are:

              Bit Meaning
              === ======================
               0  local_bell
               1  rts_cts
               2  reset_speed
               3  hangup_at_exit
               4  set_16550
               5  local_sysop_keys
               6  local_echo
               7  save_screen
               8  null_modem_login
               9  send_crashmail
              10  backdoor
              11  fast_fax
              12  dont_check_carrier
              13  nocarrier_is_busy
              14  show_shell_output
              15  allow_shell_break
              16  slow_protocols
              17  fax_receive_revbit
              18  fax_send_revbit
              19  buffered_output
              20  rockwell_kludge
              21  fix_rar_bug

266      bn_split


b  n  _  s  p  l  i  t  
_______________________________________________________________________________

   VARIABLE   bn_split

       TYPE   int

DESCRIPTION   Currently unused, should be zero.

                                                            bn_bstatus      267


b  n  _  b  s  t  a  t  u  s  
_______________________________________________________________________________

   VARIABLE   bn_bstatus

       TYPE   int

DESCRIPTION   If bit 0 is set, user has error correcting modem.
              If bit 1 is set, this is a mail session.

268      bn_zstatus


b  n  _  z  s  t  a  t  u  s  
_______________________________________________________________________________

   VARIABLE   bn_zstatus

       TYPE   int

DESCRIPTION   Enumed activity:

               0 = logged off
               1 = active
               2 = not active
               3 = writing
               4 = grab
               5 = down
               6 = up
               7 = chat
               8 = door
               9 = groupchat
              10 = net activity (telnet, ftp, etc...)

                                                              bn_speed      269


b  n  _  s  p  e  e  d  
_______________________________________________________________________________

   VARIABLE   bn_speed

       TYPE   int

DESCRIPTION   Line connect speed, 0 if local.

270      bn_time


b  n  _  t  i  m  e  
_______________________________________________________________________________

   VARIABLE   bn_time

       TYPE   int

DESCRIPTION   Login time, hours*256+minutes.

                                                               bn_nick      271


b  n  _  n  i  c  k  
_______________________________________________________________________________

   VARIABLE   bn_nick

       TYPE   char

DESCRIPTION   Returns the nick used in the Who command. This can be
              set by the user using U SET "NICK".

272      bn_realname


b  n  _  r  e  a  l  n  a  m  e  
_______________________________________________________________________________

   VARIABLE   bn_realname

       TYPE   char

DESCRIPTION   Returns the realname of current user.

                                                               bu_name      273


b  u  _  n  a  m  e  
_______________________________________________________________________________

   VARIABLE   bu_name

       TYPE   char (constant)

DESCRIPTION   Returns the users name as written to BBBS in uppercase.

EXAMPLE CODE  printf("%s\n",bu_name);

274      bu_address


b  u  _  a  d  d  r  e  s  s  
_______________________________________________________________________________

   VARIABLE   bu_address

       TYPE   char

DESCRIPTION   Returns the users address as written to BBBS.

EXAMPLE CODE  printf("%s\n",bu_address);

                                                               bu_city      275


b  u  _  c  i  t  y  
_______________________________________________________________________________

   VARIABLE   bu_city

       TYPE   char

DESCRIPTION   Returns the users city as written to BBBS.

EXAMPLE CODE  printf("%s\n",bu_city);

276      bu_phone


b  u  _  p  h  o  n  e  
_______________________________________________________________________________

   VARIABLE   bu_phone

       TYPE   char

DESCRIPTION   Returns the users phonenumber as written to BBBS.

EXAMPLE CODE  printf("%s\n",bu_phone);

                                                              bu_birth      277


b  u  _  b  i  r  t  h  
_______________________________________________________________________________

   VARIABLE   bu_birth

       TYPE   char

DESCRIPTION   Returns the users birthday as written to BBBS.

EXAMPLE CODE  printf("%s\n",bu_birth);

278      bu_ok2login


b  u  _  o  k  2  l  o  g  i  n  
_______________________________________________________________________________

   VARIABLE   bu_ok2login

       TYPE   int

DESCRIPTION   Contains users login status. There are three different
              types:

              0 = yes      The user can log in.
              1 = getlost  The user is shown the getlost file and then
                           logged off.
              2 = killed   The user name is removed, but a new user with
                           that name can log in as a new user.

EXAMPLE CODE  printf("Login status: %u\n",bu_ok2login);

                                                            bu_termcap      279


b  u  _  t  e  r  m  c  a  p  
_______________________________________________________________________________

   VARIABLE   bu_termcap

       TYPE   int

DESCRIPTION   This variable contains terminal related information.

              It is divided into two bitwise parts:

              Bit 0-3 - terminal types:
              0=TTY
              1=ANSI
              2=Dummy-ANSI
              3=VT320

              Bit 4-7 - editors:
              0=Line
              1=FSE
              2=MG
              3=Script

EXAMPLE CODE  int main() {
                int termtype=bu_termcap & 0x0f;
                int editor  =bu_termcap >> 4;

                if (termtype==3) printf("VT320n");
                if (editor==1) printf("FSEn");
              }

280      bu_pagelength


b  u  _  p  a  g  e  l  e  n  g  t  h  
_______________________________________________________________________________

   VARIABLE   bu_pagelength

       TYPE   int

DESCRIPTION   Sets number of lines per page for the current user.

EXAMPLE CODE  int main() {
                int p;
                p=bu_pagelength;
                bu_pagelength=0;
                /* do your stuff that requires no --more-- prompt */
                bu_pagelength=p;
              }

                                                            bu_charset      281


b  u  _  c  h  a  r  s  e  t  
_______________________________________________________________________________

   VARIABLE   bu_charset

       TYPE   int

DESCRIPTION   Returns a number representing the character set the
              user is using. The number for the different character sets are:

               0 IBM
               1 SF7
               2 ISO
               3 IBN
               4 US7
               5 GE7
               6 NO7
               7 FR7
               8 IT7
               9 SP7
              10 MAC

282      bu_language


b  u  _  l  a  n  g  u  a  g  e  
_______________________________________________________________________________

   VARIABLE   bu_language

       TYPE   int

DESCRIPTION   Returns the users language. Values are 0 through 9.
              (0=English,1=Suomi,2=Svenska,3=Norsk)

                                                           bu_readmode      283


b  u  _  r  e  a  d  m  o  d  e  
_______________________________________________________________________________

   VARIABLE   bu_readmode

       TYPE   int

DESCRIPTION   This contains information about read modes for the
              user and preferred format for grab collection. It is divieded
              into two bitwise parts:

              Bit 0-3 - read modes:
              0=Marked
              1=Reference
              2=Forward

              Bit 4-7 - offline format:
              0=Text
              1=Hippo
              2=Hippo2
              3=OMEN
              4=QWK
              5=Blue Wave

284      bu_packtype


b  u  _  p  a  c  k  t  y  p  e  
_______________________________________________________________________________

   VARIABLE   bu_packtype

       TYPE   int

DESCRIPTION   Contains a number corresponding to an archiver type.

              The different types are:

              0=text
              1=arc
              2=zip
              3=lzh
              4=arj
              5=zoo
              6=hpk
              7=rar

              Additional archivers will just be given the next number in range.

                                                           bu_protocol      285


b  u  _  p  r  o  t  o  c  o  l  
_______________________________________________________________________________

   VARIABLE   bu_protocol

       TYPE   int

DESCRIPTION   Returns a number corresponding to a protocol.

              The different types are:

              0=Zmodem
              1=Ymodem
              2=Xmodem
              3=Slow-HYDRA
              4=Xmodem CRC
              5=Ymodem Batch
              6=Slow--Zmodem
              7=Hydra
              8=ZedZap

              Additional protocols will just be given the next number in range.

286      bu_nodemsgfilt


b  u  _  n  o  d  e  m  s  g  f  i  l  t  
_______________________________________________________________________________

   VARIABLE   bu_nodemsgfilt

       TYPE   int

DESCRIPTION   Returns the node message filter level.

              Different levels are:
               0 nothing
              10 login / logout
              20 entered message
              30 joined/exited group chat
              49 messages in group chat, node messages
              50 everything

                                                          bu_timelimit      287


b  u  _  t  i  m  e  l  i  m  i  t  
_______________________________________________________________________________

   VARIABLE   bu_timelimit

       TYPE   int

DESCRIPTION   Returns the daily timelimit of the user. 0 means the
              user has unlimited time.

288      bu_timeleft


b  u  _  t  i  m  e  l  e  f  t  
_______________________________________________________________________________

   VARIABLE   bu_timeleft

       TYPE   int

DESCRIPTION   Returns the amount of minutes that the caller had
              available when the call started. At logout, this value
              will contain the value of bf_timleft.

                                                            bu_timeson      289


b  u  _  t  i  m  e  s  o  n  
_______________________________________________________________________________

   VARIABLE   bu_timeson

       TYPE   int

DESCRIPTION   Returns the number of logins for all time for the
              current user.

290      bu_msgleft


b  u  _  m  s  g  l  e  f  t  
_______________________________________________________________________________

   VARIABLE   bu_msgleft

       TYPE   int

DESCRIPTION   Returns the number of messages written for the current
              user for all time.

                                                           bu_uploaded      291


b  u  _  u  p  l  o  a  d  e  d  
_______________________________________________________________________________

   VARIABLE   bu_uploaded

       TYPE   int

DESCRIPTION   Returns the number of files uploaded by the current user.

292      bu_downloaded


b  u  _  d  o  w  n  l  o  a  d  e  d  
_______________________________________________________________________________

   VARIABLE   bu_downloaded

       TYPE   int

DESCRIPTION   Returns the number of files dowloaded by the current user.

                                                           bu_pmsgleft      293


b  u  _  p  m  s  g  l  e  f  t  
_______________________________________________________________________________

   VARIABLE   bu_pmsgleft

       TYPE   int

DESCRIPTION   Returns the number of messages left since the last reset
              for the current user.

294      bu_puploaded


b  u  _  p  u  p  l  o  a  d  e  d  
_______________________________________________________________________________

   VARIABLE   bu_puploaded

       TYPE   int

DESCRIPTION   Returns the number of files upload since the last reset
              for the current user.

                                                        bu_pdownloaded      295


b  u  _  p  d  o  w  n  l  o  a  d  e  d  
_______________________________________________________________________________

   VARIABLE   bu_pdownloaded

       TYPE   int

DESCRIPTION   Returns the number of files downloaded since the last
              reset for the current user.

296      bu_ptimeson


b  u  _  p  t  i  m  e  s  o  n  
_______________________________________________________________________________

   VARIABLE   bu_ptimeson

       TYPE   int

DESCRIPTION   Returns the number of calls since the last reset for the
              current user.

                                                         bu_pmsgdumped      297


b  u  _  p  m  s  g  d  u  m  p  e  d  
_______________________________________________________________________________

   VARIABLE   bu_pmsgdumped

       TYPE   int

DESCRIPTION   Returns the number of messages dumped since the last reset
              for the current user.

298      bu_pmsgread


b  u  _  p  m  s  g  r  e  a  d  
_______________________________________________________________________________

   VARIABLE   bu_pmsgread

       TYPE   int

DESCRIPTION   Returns the number of messages read since the last reset for
              the current user.

                                                              bu_pkbup      299


b  u  _  p  k  b  u  p  
_______________________________________________________________________________

   VARIABLE   bu_pkbup

       TYPE   int

DESCRIPTION   Returns the number of kilobytes uploaded since the last
              reset for the current user.

300      bu_pkbdown


b  u  _  p  k  b  d  o  w  n  
_______________________________________________________________________________

   VARIABLE   bu_pkbdown

       TYPE   int

DESCRIPTION   Returns the number of kilobytes downloaded since the last
              reset for the current user.

                                                           bu_fchecked      301


b  u  _  f  c  h  e  c  k  e  d  
_______________________________________________________________________________

   VARIABLE   bu_fchecked

       TYPE   int

DESCRIPTION   Returns a datecode for the date the current user last
              checked for new files.

              Day is lower 5 bits, month is next 4 bits and year (since 1980)
              is the upper 7 bits.

302      bu_timebank


b  u  _  t  i  m  e  b  a  n  k  
_______________________________________________________________________________

   VARIABLE   bu_timebank

       TYPE   int

DESCRIPTION   Returns the number of minutes the current user has
              stored in his/hers timebank.

                                                             bu_resume      303


b  u  _  r  e  s  u  m  e  
_______________________________________________________________________________

   VARIABLE   bu_resume

       TYPE   int

DESCRIPTION   Returns the message number in the User Info conference
              that contains the current users userresume.

304      bu_limits


b  u  _  l  i  m  i  t  s  
_______________________________________________________________________________

   VARIABLE   bu_limits

       TYPE   int

DESCRIPTION   Returns a number containing different user limits,
              corresponds to "u limit" command.

                                                             bu_access      305


b  u  _  a  c  c  e  s  s  
_______________________________________________________________________________

   VARIABLE   bu_access

       TYPE   int

DESCRIPTION   Returns a number containing differnt user acces bits.

              The bits are:
                0 DOS
                1 Conferences
                2 Files
                3 Private messages
                4 Passwords
               30 Download
               31 Upload
              255 Sysop

306      bu_utoggles


b  u  _  u  t  o  g  g  l  e  s  
_______________________________________________________________________________

   VARIABLE   bu_utoggles

       TYPE   int

DESCRIPTION   Returns a number containing several different user toggles.

              The bits are:
               0 Insert mode
               1 Indent mode
               2 XY Display in editor
               3 Don't flash your name
               4 Conference status at login
               5 Expert mode
               6 Not used
               7 Colors
               8 Review own messages
               9 Real VT100 keyboard
              10 Quote messages
              11 Silent mode
              12 Return to read menu with enter-key

                                                          bu_firsttime      307


b  u  _  f  i  r  s  t  t  i  m  e  
_______________________________________________________________________________

   VARIABLE   bu_firsttime

       TYPE   int

DESCRIPTION   Returns a datecode for the first time the current user
              logged on to the board.

              Bits  Meaning
              ====  ====================
              0-4   Seconds/2
              5-10  Minutes
              11-15 Hours
              16-20 Day
              21-24 Month
              25-31 Year-1980

308      bu_lasttime


b  u  _  l  a  s  t  t  i  m  e  
_______________________________________________________________________________

   VARIABLE   bu_lasttime

       TYPE   int

DESCRIPTION   Returns a datecode for the last time the current user
              logged on to the board.

              Bits  Meaning
              ====  ====================
              0-4   Seconds/2
              5-10  Minutes
              11-15 Hours
              16-20 Day
              21-24 Month
              25-31 Year-1980

                                                            bu_msgread      309


b  u  _  m  s  g  r  e  a  d  
_______________________________________________________________________________

   VARIABLE   bu_msgread

       TYPE   int

DESCRIPTION   Returns the number of total messages read for the
              current user.

310      bu_msgdumped


b  u  _  m  s  g  d  u  m  p  e  d  
_______________________________________________________________________________

   VARIABLE   bu_msgdumped

       TYPE   int

DESCRIPTION   Returns the number of total messages dumped for the
              current user.

                                                               bu_kbup      311


b  u  _  k  b  u  p  
_______________________________________________________________________________

   VARIABLE   bu_kbup

       TYPE   int

DESCRIPTION   Returns the total number of kilobytes uploaded for the
              current user.

312      bu_kbdown


b  u  _  k  b  d  o  w  n  
_______________________________________________________________________________

   VARIABLE   bu_kbdown

       TYPE   int

DESCRIPTION   Returns the total number of kilobytes downloaded for the
              current user.

                                                          bu_todaydown      313


b  u  _  t  o  d  a  y  d  o  w  n  
_______________________________________________________________________________

   VARIABLE   bu_todaydown

       TYPE   int

DESCRIPTION   Returns the amount of bytes the current user has
              downloaded today.

314      bu_userbits


b  u  _  u  s  e  r  b  i  t  s  
_______________________________________________________________________________

   VARIABLE   bu_userbits

       TYPE   int

DESCRIPTION   Returns a number contianing userbits. This is not used
              by BBBS so feel free to use this variable as you want, but
              remember that others might use it as well.

                                                              bv_filna      315


b  v  _  f  i  l  n  a  
_______________________________________________________________________________

   VARIABLE   bv_filna

       TYPE   char

DESCRIPTION   Contains the name of the last processed file.

EXAMPLE CODE  int main() {
                printf("Last processed file: %s\n",bv_filna);
              }

316      bv_local_buffe


b  v  _  l  o  c  a  l  _  b  u  f  f  e  
_______________________________________________________________________________

   VARIABLE   bv_local_buffe

       TYPE   char

DESCRIPTION   This is the keyboard buffer used by BBBS in all input
              routines.

EXAMPLE CODE  int main() {
                bv_local_buffe = "G;Y;";
              }

                                                          bv_comhandle      317


b  v  _  c  o  m  h  a  n  d  l  e  
_______________________________________________________________________________

   VARIABLE   bv_comhandle

       TYPE   int (constant)

DESCRIPTION   Has communication device handle.

EXAMPLE CODE  int main() {
                system(sprintf("foo.exe %u %s",bv_comhandle,bv_comdevice),0);
              }

318      bv_comdevice


b  v  _  c  o  m  d  e  v  i  c  e  
_______________________________________________________________________________

   VARIABLE   bv_comdevice

       TYPE   char (constant)

DESCRIPTION   Has communication device name.

EXAMPLE CODE  int main() {
                system(sprintf("foo.exe %u %s",bv_comhandle,bv_comdevice),0);
              }

                                                          bv_comstring      319


b  v  _  c  o  m  s  t  r  i  n  g  
_______________________________________________________________________________

   VARIABLE   bv_comstring

       TYPE   char

DESCRIPTION   Contains the command queue used by BBBS.

EXAMPLE CODE  int main() {
                if (pos("TEST",bv_comstring)) // if queue contains TEST
                  bv_comstring = "";          // then delete queue
              }

320      bv_interface


b  v  _  i  n  t  e  r  f  a  c  e  
_______________________________________________________________________________

   VARIABLE   bv_interface

       TYPE   int

DESCRIPTION   Is used as a indicator which identifies b-mode or not.

EXAMPLE CODE  int main() {
                if (!bv_interface)
                  printf("Standard mode is active\n");
                else
                  printf("You are currently in b-mode\n");
              }

                                                             bv_crrdir      321


b  v  _  c  r  r  d  i  r  
_______________________________________________________________________________

   VARIABLE   bv_crrdir

       TYPE   char

DESCRIPTION   Returns the current virtual dir in BBBS's internal File/4
              system.

EXAMPLE CODE  int main() {
                printf("Current dir: %s\n",bv_crrdir);
              }

   See Also   bv_realdir

322      bv_realdir


b  v  _  r  e  a  l  d  i  r  
_______________________________________________________________________________

   VARIABLE   bv_realdir

       TYPE   char

DESCRIPTION   Returns the current real dir in BBBS's internal File/4
              system.

EXAMPLE CODE  int main() {
                printf("Current dir: %s\n",bv_realdir);
              }

   See Also   bv_crrdir

                                                           bv_holdreal      323


b  v  _  h  o  l  d  r  e  a  l  
_______________________________________________________________________________

   VARIABLE   bv_holdreal

       TYPE   char

DESCRIPTION   Returns the path to current node's hold directory.

EXAMPLE CODE  int main() {
                int f;
                if ((f=fopen(strcat(bv_holdreal,"windows.bin"),"rb"))!=-1) {
                  fclose(f);
                  printf("DANGER! Will Robinson DANGER! Alien lifeform!\n");
                }
              }

324      bv_hddesc


b  v  _  h  d  d  e  s  c  
_______________________________________________________________________________

   VARIABLE   bv_hddesc

       TYPE   char

DESCRIPTION   Returns the path and filename of the current node's
              descript.ion file containing the descriptions for files in
              hold.

EXAMPLE CODE  int main() {
                int f;
                if ((f=fopen(bv_hddesc,"rt"))!=-1) {
                  if (fgets(f)!="")
                    printf("You have files in your hold-area!\n");
                  fclose(f);
                }
              }

                                                              bv_serna      325


b  v  _  s  e  r  n  a  
_______________________________________________________________________________

   VARIABLE   bv_serna

       TYPE   char

DESCRIPTION   Returns the registered BBBS Name from BBBS.KEY

EXAMPLE CODE  int main() {
                printf("You have reached %s\n",bv_serna)
              }

326      bv_tempsys


b  v  _  t  e  m  p  s  y  s  
_______________________________________________________________________________

   VARIABLE   bv_tempsys

       TYPE   int

DESCRIPTION   Change the temporary SysOp level for the current user.
              SysOp's access is a bitfield integer. You can use values from
              0 to 255, as following:

               1 Can shell to OS and execute OS commands
               2 Full access to all conferences
               4 Full access to all files
               8 May read private messages from all conferences
              16 May change passwords
              32 May edit user's status (kill, status)
              64 May change Netmail message attributes

              To give a certain access just add the numbers. For example, if
              you want a user to have access to all conferences and  private
              messages, the value is 10 (2+8).

EXAMPLE CODE  int main() {
                char name, passw;
                char old_sys;

                if (bu_name == "FOO USER") {
                  printf("You may change the password on a user.\n");
                  if ((name = input("User        : ",80,0))!="") {
                    passw = input("New password: ",10,1);
                    old_sys = bv_tempsys;
                    bv_tempsys = 16;
                    bbbs(sprintf("q;q;u;find;\"%s\";p;%s;%s;;",name,
                                                               passw,
                                                               name);
                    bv_tempsys = old_sys;
                  }
                }
              }

                                                               bv_unum      327


b  v  _  u  n  u  m  
_______________________________________________________________________________

   VARIABLE   bv_unum

       TYPE   int

DESCRIPTION   Returns the current users user number from the user
              database.

EXAMPLE CODE  int main() {
                printf("You are user number %u\n",bv_unum);
              }

328      bv_confnro


b  v  _  c  o  n  f  n  r  o  
_______________________________________________________________________________

   VARIABLE   bv_confnro

       TYPE   int

DESCRIPTION   Returns the number of the current conference.

EXAMPLE CODE  int main() {
                printf("You are in conference number %u\n",bv_confnro);
              }

                                                               bv_baud      329


b  v  _  b  a  u  d  
_______________________________________________________________________________

   VARIABLE   bv_baud

       TYPE   int

DESCRIPTION   Returns the baudrate for the current call. If it is a
              local login, this number will be 9600.

330      bv_realbaud


b  v  _  r  e  a  l  b  a  u  d  
_______________________________________________________________________________

   VARIABLE   bv_realbaud

       TYPE   int

DESCRIPTION   Returns the real baudrate for the current call. If it
              is a local login, this number will be 0.

                                                          bv_logintime      331


b  v  _  l  o  g  i  n  t  i  m  e  
_______________________________________________________________________________

   VARIABLE   bv_logintime

       TYPE   int

DESCRIPTION   Returns the time when the user logged in.

EXAMPLE CODE  int main() {
                printf("You logged in at %s\n",localtime(bv_logintime));
              }

332      bv_lastmsg


b  v  _  l  a  s  t  m  s  g  
_______________________________________________________________________________

   VARIABLE   bv_lastmsg

       TYPE   int

DESCRIPTION   Returns the number of last message read in current
              conference.

EXAMPLE CODE  int main() {
                printf("Last message read: %u\n",bv_lastmsg);
              }

                                                             bv_curmsg      333


b  v  _  c  u  r  m  s  g  
_______________________________________________________________________________

   VARIABLE   bv_curmsg

       TYPE   int

DESCRIPTION   Returns current message number.

EXAMPLE CODE  int main() {
                printf("Current message number is: %u\n",bv_curmsg);
              }

334      bv_firstmsg


b  v  _  f  i  r  s  t  m  s  g  
_______________________________________________________________________________

   VARIABLE   bv_firstmsg

       TYPE   int

DESCRIPTION   Returns number of first available message in current
              conference.

EXAMPLE CODE  int main() {
                printf("First message number is: %u\n",bv_firstmsg);
              }

                                                         bv_lastreaded      335


b  v  _  l  a  s  t  r  e  a  d  e  d  
_______________________________________________________________________________

   VARIABLE   bv_lastreaded

       TYPE   int

DESCRIPTION   Returns number of last read message in current
              conference.

EXAMPLE CODE  int main() {
                printf("Last message read is: %u\n",bv_lastreaded);
              }

336      bv_newavail


b  v  _  n  e  w  a  v  a  i  l  
_______________________________________________________________________________

   VARIABLE   bv_newavail

       TYPE   int

DESCRIPTION   Returns a number indicating how many new messages the
              current conference contains.

EXAMPLE CODE  int main() {
                printf("You have %u new messages.\n",bv_newavail);
              }

                                                             bv_foryou      337


b  v  _  f  o  r  y  o  u  
_______________________________________________________________________________

   VARIABLE   bv_foryou

       TYPE   int

DESCRIPTION   Returns a number indicating how many messages in
              current conference is addressed to you.

EXAMPLE CODE  int main() {
                printf("You have %u personal messages.\n",bv_foryou);
              }

338      bv_serno


b  v  _  s  e  r  n  o  
_______________________________________________________________________________

   VARIABLE   bv_serno

       TYPE   int

DESCRIPTION   Returns the BBBS registration number from BBBS.KEY.

EXAMPLE CODE  int main() {
                printf("Serial number: %u\n",bv_serno);
              }

                                                            bv_vername      339


b  v  _  v  e  r  n  a  m  e  
_______________________________________________________________________________

   VARIABLE   bv_vername

       TYPE   char

DESCRIPTION   Returns the BBBS version name.

EXAMPLE CODE  int main() {
                printf("OS: %s\n",copy(bv_vername,6,3));
              }

340      bv_ver


b  v  _  v  e  r  
_______________________________________________________________________________

   VARIABLE   bv_ver

       TYPE   char

DESCRIPTION   Returns the BBBS version number.

EXAMPLE CODE  int main() {
                printf("%s v%s\n",bv_vername,bv_ver);
              }

                                                             bv_tomenu      341


b  v  _  t  o  m  e  n  u  
_______________________________________________________________________________

   VARIABLE   bv_tomenu

       TYPE   int

DESCRIPTION   Returns the menu number where user is.
                     1=read
                     2=main
                     3=util
                     4=file
                     5=chat
                     6=outb
                     7=ftp

EXAMPLE CODE  int main() {
                if (bv_tomenu==2) printf("main menu\n");
              }

342      bv_nodenumber


b  v  _  n  o  d  e  n  u  m  b  e  r  
_______________________________________________________________________________

   VARIABLE   bv_nodenumber

       TYPE   int

DESCRIPTION   Returns the nodenumber for the current node.

EXAMPLE CODE  int main() {
                printf("You are connected to node %u\n",bv_nodenumber);
              }

                                                            bv_reduced      343


b  v  _  r  e  d  u  c  e  d  
_______________________________________________________________________________

   VARIABLE   bv_reduced

       TYPE   int

DESCRIPTION   Returns the number of minutes the current users
              timelimit has been reduced by due to an event.

EXAMPLE CODE  int main() {
                printf("Timelimit is reduced by %u minutes\n",bv_reduced);
              }

344      bv_nextevent


b  v  _  n  e  x  t  e  v  e  n  t  
_______________________________________________________________________________

   VARIABLE   bv_nextevent

       TYPE   int

DESCRIPTION   Returns the number of minutes left to the next event.

EXAMPLE CODE  int main() {
                printf("Next event is due in %u minutes\n",bv_nextevent);
              }

                                                           bv_temptime      345


b  v  _  t  e  m  p  t  i  m  e  
_______________________________________________________________________________

   VARIABLE   bv_temptime

       TYPE   int

DESCRIPTION   Returns the time limit of the user for the current
              call. At the start of the call, this is assigned the value
              of bu_timeleft.

              If you want to modify the user's timelimit for the current
              call, modify this variable.

346      bv_com


b  v  _  c  o  m  
_______________________________________________________________________________

   VARIABLE   bv_com

       TYPE   int

DESCRIPTION   Returns the COM port number of current node.

EXAMPLE CODE  int main() {
                printf("You are running on COM port %u\n",bv_com);
              }

                                                            bv_carrier      347


b  v  _  c  a  r  r  i  e  r  
_______________________________________________________________________________

   VARIABLE   bv_carrier

       TYPE   int

DESCRIPTION   Inidicates the state of modem carrier

              0 inactive
              1 active

              Can be used to decide if the user hangs up or not.
              SHOULD be used when running loops in scripts,
              BBBS will not abort the script even if user hangs up.

EXAMPLE CODE  int main() {
                printf("Hit any key (or hangup)!!!\n");
                while (!kbhit() && bv_carrier);
              }

348      bv_outputstopp


b  v  _  o  u  t  p  u  t  s  t  o  p  p  
_______________________________________________________________________________

   VARIABLE   bv_outputstopp

       TYPE   int

DESCRIPTION   (Dis)enables output to the user/local screen. Can be used
              when you want to do something which the user shouldn't see.

              BBBS will set bit 0 to 1 if user presses 'N' to --more--
              and resets it when doing input() next time. You probably
              want to alter this variable after showfile() or similar
              functions. BBBS resets only bits 0-2 and saves 3-7.

              Bit Meaning
              --- ----------------------------------------------------
                1 User pressed 'N' to "--more--"
               16 'N' to "--more--" is disabled
               32 Show log entries to screen too
               64 Local screen output is disabled
              128 Remote output is disabled


EXAMPLE CODE  int main() {
                printf("Please wait while joining some conferences..\n");
                bv_outputstopp = bv_outputstopp | 1;
                bbbs("j;bbbs.english;");
                bbbs("j;bbbs.util;");
                bv_outputstopp = bv_outputstopp & 0xF8;
              }

                                                         bv_quicklogin      349


b  v  _  q  u  i  c  k  l  o  g  i  n  
_______________________________________________________________________________

   VARIABLE   bv_quicklogin

       TYPE   int

DESCRIPTION   Toggles whether quicklogin was used or not.

              0 not used
              1 used

350      bv_paged


b  v  _  p  a  g  e  d  
_______________________________________________________________________________

   VARIABLE   bv_paged

       TYPE   int

DESCRIPTION   Number of times user has requested chat with sysop.

                                                             bv_groups      351


b  v  _  g  r  o  u  p  s  
_______________________________________________________________________________

   VARIABLE   bv_groups

       TYPE   char

DESCRIPTION   Returns a string with all the groups the current user
              are a member of. Groups are seperated by a comma (,).

352      bv_txt


b  v  _  t  x  t  
_______________________________________________________________________________

   VARIABLE   bv_txt[linenumber]

       TYPE   char (constant), indexed

DESCRIPTION   Returns the text at the linenumber you supply from
              BBBSTXTx where x is nothing for english or the language code
              the current user is using.

EXAMPLE CODE  Using english language the following command:
              printf("%s\n",bv_txt[13]);
              will output:
              Sorry, no resume info in this system.

                                                Other script languages      353


O  t  h  e  r     s  c  r  i  p  t     l  a  n  g  u  a  g  e  s  
_______________________________________________________________________________

Along with the BZ language, BBBS also supports Java and perl as script
languages. When a perl or Java script is executed, all input and output
from/to stdin/stdout is redirected accordingly, so you can use the standard
input/output commands of the language.

If you want to use perl or Java as a script language, you will have to
specify the BBBSJAVA (for Java) or BBBSPERL (for perl)
environment variable to contain the path to the parser for the appropriate
language.

If you are using BBBS/2, it is also possible to use REXX as the script
language.

If you use multiple script languages, remember that BBBS first tries to
run BZ programs (.bz), then REXX scripts (.cmd), then Java scripts (.class)
and finally perl scripts (.pl).

354      BBBS/D, BBBS for PC-DOS


B  B  B  S  /  D  ,     B  B  B  S     f  o  r     P  C  -  D  O  S  
_______________________________________________________________________________

BBBS/D is the PC-DOS specific version of BBBS.

BBBS should work on all IBM PC compatible computers with 8086 processor or
better, running PC-DOS v3.1 or compatible. BBBS/D can be run under DESQview or
other similar multitasking environment. BBBS/D requires about 370kB of free
memory and can use your EMS/XMS memory for swapping in DOS shells, where it
uses only 3.5kB of your conventional memory. Using a real disk caching program
will speed things up dramatically. Optionally, a FOSSIL communications driver
(revision level 5 or higher) can be used with BBBS/D, but is not required.

There are some of features, like the InterNet-support, that do not work under
the PC-DOS version, for obvious reasons.

You can use the following DESQview settings with BBBS/D:

        Memory Size (in K)................: 370
        Writes text directly to screen....: [Y]
        Displays graphics information.....: [N]
        Virtualize text/graphics (Y,N,T)..: [T]
        Maximum Program Memory Size (in K): 640
        Maximum EMS/XMS/VCPI/DPMI (in K)..:
        Uses its own colors...............: [Y]
        Runs in background (Y,N,blank)....: [Y]
        Uses math coprocessor.............: [N]

On multinode systems it is highly recommended to use IBM OS/2, not DESQview,
even with BBBS/D. The DOS-version of BBBS automatically detects OS/2 and
DESQview, but some advanced timesliding options are only available under OS/2
(in a VDM with BBBS/D or native BBBS/2). When running BBBS/D in a VDM you
should use VX00 (look for a package called SIO*) or some other OS/2 FOSSIL
driver. If you are running BBBS/D in a VDM, run remote nodes in full screen
sessions, not in a WPS window.

BBBS supports all standard FOSSIL drivers (revision level 5 or higher), such as
X00 or BNU. However, if you don't want to use a FOSSIL driver, BBBS offers you
reliable, high-speed internal communication routines. On startup BBBS will
automatically detect whether or not a FOSSIL driver is loaded and act
accordingly. Using a FOSSIL driver is recommended, though. Remember to load the
FOSSIL driver before DESQview.

Usually you can set the receive and transmit buffer sizes when loading the
FOSSIL driver. Using 4kB buffers will give you good performance and will speed
up your system. It will also give you more reliable file transfer with some
internal and external protocols. Of course, bigger buffers will allocate more
memory so if you are very tight on memory you can use smaller transmit and
receive buffers, like 512 bytes (usually FOSSIL driver's default settings).

For more information, read your FOSSIL user's guide.

                                             BBBS/2, BBBS for IBM OS/2      355


B  B  B  S  /  2  ,     B  B  B  S     f  o  r     I  B  M     O  S  /  2  
_______________________________________________________________________________

BBBS/2 is the IBM OS/2 2+ specific version of BBBS.

To run BBBS/2, you need a system that is capable of running OS/2, version 2 or
higher. Thus, you will need at least 4MB of memory, but 8MB or more is highly
recommended. If you are running tight on memory, you should consider running
BBBS under a shell other than WPS. MShell and FileBar are known to be good
replacement shells for running BBBS.

BBBS/2 will work on a FAT drive, but it is highly recommended to run BBBS only
on HPFS drives. Using HPFS drives will speed up your system dramatically. At
least your file areas should be on a HPFS drive to have real file names.

Under OS/2 there are several ways to run BBBS. Let's look at them one by one.


Local login

To start BBBS for local login, node 1, use command bbbs 0. To do the same for
node 2, use command bbbs 0 2. The general syntax is bbbs 0 nodenumber.


Normal setup for modem

To start BBBS for modem (comport), COM2 and node 1, use command bbbs 2. To do
the same for node 2, use command bbbs 2 2. The first parameter is comport
number and the second is nodenumber. The special comport 0, as mentioned above,
means local login.


Setup for nonstandard modem device

BBBS can also use other comport devices than COM#. For this the general syntax
is bbbs comport nodenumber devicename. The comport parameter is ignored, so you
might want to use "1" for it.

For example DigiBoard-card drivers require nonstandard device, so for example
you can use command bbbs 1 2 DIGI2, which starts node 2 for device DIGI2.


BBBS and ISDN CAPI devices

BBBS/2 can also use ISDN cards with CAPI drivers. BBBS requires 16bit or 32bit
CAPI v1.1 drivers to work, CAPI v2.0 is not supported. Please note that most
external ISDN adapters, like ZyXEL Elite 2864i, will use normal comport to
communicate, so you can use normal setup for modem to use these with BBBS.

For CAPI devices use syntax bbbs comport nodenumber ISDN, where comport is
adapter number (comport 1 is the first adapter, adapter #0). The parameter
"ISDN" must be written in upper case.

BBBS accomplishes dialling out with ISDN by doing some simple Hayes emulation
on the ISDN device via the ISDN CAPI. The EAZ of incoming and outgoing calls
are specified with the ATZin,out command, where in is the incoming EAZ and out
the outgoing EAZ. For incoming EAZ the parameter is a bitmapped value (bits 0
to 9), where bit 0 specifies global calls and the rest of the bits specify each
their respective EAZ. For example, to specify global call and EAZ 1, the value

356      BBBS/2, BBBS for IBM OS/2


for in should be 3 (000000011b). The out parameter, on the other hand, is
simply the EAZ number (not bitmapped) to use. See your ISDN card documentation
for more information.

You should also configure the modem init string in BCFG4 appropriately. For
ISDN dialling, the correct dial string is "ATD". Note that it's ATD, not ATDT.


Using BBBS with "hot" comport

BBBS can also use "hot" comport. Hot means that some other program has opened
the port and then passed the handle to BBBS. For example some FidoNet mailers,
like FrontDoor and Xenia, will first answer the incoming call and then shell to
BBBS, if needed. Note that BBBS does not need any frontdoor-mailer, as BBBS can
(and should be allowed to) handle all FidoNet traffic by itself.

The syntax is bbbs comport nodenumber devicename . handle. This means that BBBS
requires you to specify devicename, but you can use for example "COM2". The dot
parameter is also required. For example bbbs 2 1 . COM2 42 starts BBBS for COM2
device, node 1, hot comport handle 42. See your frontdoor-mailer documentation
how to get hot comport handle.


BBBS in Local Area Network, LAN

BBBS can also communicate with a terminal program capable of doing PIPE or
SHAREMEM communication. For example BTERM can do these. To start BBBS as a
PIPE/SHAREMEM server use syntax bbbs comport nodenumber devicename. To start
BBBS as client use syntax bbbs comport nodenumber devicename .. As with
nonstandard modem device, the comport parameter is again ignored. In OS/2 the
devicename can be for example \PIPE\BBBSpipe or \SHAREMEM\BBBSmem. If your
network supports you can also use remote pipes, \\SERVER\PIPE\BBBSpipe.

A simple local loopback test is to start BBBS as SHAREMEM-server and BTERM as
SHAREMEM-client. For this use commands bbbs 1 1 \SHAREMEM\BBBSmem and bbbs 1 1
\SHAREMEM\BBBSmem . BTERM (see below for BTERM parameter).


Outgoing TCP/IP

Just like with ISDN CAPI devices, you can also use BBBS with TCP/IP (InterNet)
network by specifying TCPIP devicename. The syntax is bbbs comport nodenumber
TCPIP, for example bbbs 1 2 TCPIP start node 2 for TCPIP. The specified node
will be used only for outgoing "calls", see below for incoming documentation.
The parameter "TCPIP" must be written in upper case.

A minimal Hayes-emulation is available to do TCPIP-calls:

  ATZ7         Do non-binary, 7bit connection to telnet host.
  ATZ8         Do binary, 8bit connection to telnet host (default).
  ATDhostname  Open telnet connection to host.
  ATRhostname  Open raw connection to host.

For example to open telnet connection to bbbs.net, start BBBS with bbbs 1 1
TCPIP BTERM and write "ATDbbbs.net". Note that the dial string is ATD, not
ATDT. To use non-standard port to connect to, use "hostname#port".

To do FidoNet TCPIP polls configure modem init string in BCFG4 correctly and
"ATD" for dial string. Then start BBBS node with bbbs 1 1 TCPIP. See also

                                             BBBS/2, BBBS for IBM OS/2      357


dialstring convert and [node_remap].


Incoming TCP/IP

Incoming TCP/IP connections (telnet, FTP, SMTP, ...) are handled in bbbsd. Just
run it, there are no special things to configure.


BTERM

You can start BBBS directly to BTERM by specifying parameter BTERM after the
device parameter. For example bbbs 3 1 COM3 BTERM for comport 3, or bbbs 1 1
TCPIP BTERM for TCP/IP. The parameter "BTERM" must be written in upper case.

358      BBBS/NT, BBBS for Microsoft Windows NT/95


BBBS/NT, BBBS for Microsoft Windows NT/95
_______________________________________________________________________________

BBBS/NT is the Microsoft Windows NT/95 specific version of BBBS.

To run BBBS/NT, you need a system that is capable of running Windows NT/95.
Thus, you will need at least 16MB of memory, but 32MB or more is highly
recommended.

BBBS/NT will work on a FAT drive, but it is highly recommended to run BBBS only
on NTFS drives. Using NTFS drives will speed up your system dramatically. At
least your file areas should be on a NTFS drive to have real file names.

Under Windows NT/95 there are several ways to run BBBS. Let's look at them one
by one.


Local login

To start BBBS for local login, node 1, use command bbbs 0. To do the same for
node 2, use command bbbs 0 2. The general syntax is bbbs 0 nodenumber.


Normal setup for modem

To start BBBS for modem (comport), COM2 and node 1, use command bbbs 2. To do
the same for node 2, use command bbbs 2 2. The first parameter is comport
number and the second is nodenumber. The special comport 0, as mentioned above,
means local login.


Setup for nonstandard modem device

BBBS can also use other comport devices than COM#. For this the general syntax
is bbbs comport nodenumber devicename. The comport parameter is ignored, so you
might want to use "1" for it.

For example DigiBoard-card drivers require nonstandard device, so for example
you can use command bbbs 1 2 DIGI2, which starts node 2 for device DIGI2.


Using BBBS with "hot" comport

BBBS can also use "hot" comport. Hot means that some other program has opened
the port and then passed the handle to BBBS. For example some FidoNet mailers,
like FrontDoor and Xenia, will first answer the incoming call and then shell to
BBBS, if needed. Note that BBBS does not need any frontdoor-mailer, as BBBS can
(and should be allowed to) handle all FidoNet traffic by itself.

The syntax is bbbs comport nodenumber devicename . handle. This means that BBBS
requires you to specify devicename, but you can use for example "COM2". The dot
parameter is also required. For example bbbs 2 1 . COM2 42 starts BBBS for COM2
device, node 1, hot comport handle 42. See your frontdoor-mailer documentation
how to get hot comport handle.


BBBS in Local Area Network, LAN

BBBS can also communicate with a terminal program capable of doing PIPE or

                             BBBS/NT, BBBS for Microsoft Windows NT/95      359


MAPFILE communication. For example BTERM can do these. To start BBBS as a
PIPE/SHAREMEM server use syntax bbbs comport nodenumber devicename. To start
BBBS as client use syntax bbbs comport nodenumber devicename .. As with
nonstandard modem device, the comport parameter is again ignored. In Windows NT
the devicename can be for example \\.\PIPE\BBBSpipe or MAPFILE:BBBSmem. If your
network supports you can also use remote pipes, \\SERVER\PIPE\BBBSpipe.

A simple local loopback test is to start BBBS as MAPFILE-server and BTERM as
MAPFILE-client. For this use commands bbbs 1 1 MAPFILE:BBBSmem and bbbs 1 1
MAPFILE:BBBSmem . BTERM (see below for BTERM parameter).


Outgoing TCP/IP

You can also use BBBS with TCP/IP (InterNet) network by specifying TCPIP
devicename. The syntax is bbbs comport nodenumber TCPIP, for example bbbs 1 2
TCPIP start node 2 for TCPIP. The specified node will be used only for outgoing
"calls", see below for incoming documentation. The parameter "TCPIP" must be
written in upper case.

A minimal Hayes-emulation is available to do TCPIP-calls:

  ATZ7         Do non-binary, 7bit connection to telnet host.
  ATZ8         Do binary, 8bit connection to telnet host (default).
  ATDhostname  Open telnet connection to host.
  ATRhostname  Open raw connection to host.

For example to open telnet connection to bbbs.net, start BBBS with bbbs 1 1
TCPIP BTERM and write "ATDbbbs.net". Note that the dial string is ATD, not
ATDT. To use non-standard port to connect to, use "hostname#port".

To do FidoNet TCPIP polls configure modem init string in BCFG4 correctly and
"ATD" for dial string. Then start BBBS node with bbbs 1 1 TCPIP. See also
dialstring convert and [node_remap].


Incoming TCP/IP

Incoming TCP/IP connections (telnet, FTP, SMTP, ...) are handled in bbbsd. Just
run it, there are no special things to configure.


BTERM

You can start BBBS directly to BTERM by specifying parameter BTERM after the
device parameter. For example bbbs 3 1 COM3 BTERM for comport 3, or bbbs 1 1
TCPIP BTERM for TCP/IP. The parameter "BTERM" must be written in upper case.

360      The UNIX version of BBBS


T  h  e     U  N  I  X     v  e  r  s  i  o  n     o  f     B  B  B  S  
_______________________________________________________________________________

BBBS is available for many different UNIX systems. I will use BBBS/LiI, BBBS
for Linux/Intel, as an example, but everything should be similar in other UNIX
systems too.

The BBBS System Operator Manual is not called Linux System Operator Manual and
therefore this manual does not explain how to use Linux. There are lot of good
books about this topic in your local book store and library, so now you know
what to do if you run into problems with commands like chown or inetd. There
are also good manpages for all of these, see for example man chown.

Under Linux there are several ways to run BBBS. Let's look at them one by one.


Local login

To start BBBS for local login, node 1, use command bbbs 0. To do the same for
node 2, use command bbbs 0 2. The general syntax is bbbs 0 nodenumber.

If you don't have bbbs in your PATH then you have to specify the directory as
./bbbs. This same applies to all examples below.


Normal setup for modem, device

There are two ways to start BBBS for modem (comport). Using the device
parameter (this section) is slower, but you still might want to use it first.
Stdin/stdout redirection (next section) is faster, but then you can't see what
your users are doing.

To start BBBS for modem (comport), /dev/ttyS2 and node 1, use command bbbs 1 1
/dev/ttyS2. The first parameter, called comport, is ignored in UNIX versions
and should be "1". Second parameter is nodenumber to start. Third parameter is
the device name which BBBS should use to communicate with your modem.
/dev/ttyS2 is your third comport (/dev/ttyS0 is the first), or in DOS terms
it's COM3. Of course BBBS must have the rights to access this device. See man
chmod and man chown if needed. You might also try to run BBBS as root, but for
security reasons you should add user "bbbs" and use it.

The syntax is bbbs comport nodenumber devicename.

If you have getty (see man getty) monitoring /dev/ttyS2 for calls then you have
to disable it first before BBBS can do the same job. You can disable it by
editing the file /etc/inittab.

If you have problems with high speed modem (DTE rate 38400 baud and up) see man
setserial.


Normal setup for modem, stdin/stdout

BBBS can use standard input and output to communicate with modem. This is also
called redirection mode. The syntax is bbbs comport nodenumber <devicename
>devicename. For example to make BBBS use /dev/ttyS2 and node 1 use command
bbbs 1 1 </dev/ttyS2 >/dev/ttyS2. With redirection you can not see what's
happening because your screen is redirected to modem.


                                              The UNIX version of BBBS      361


The comport parameter is again ignored and should be "1". See above for a note
about device names and access.


bbbs_an, shell-mode

You can create bbbs_an with command ln -s bbbs bbbs_an. Then add user called
"bbbs" and create a shell script ~bbbs/run_bbbs.sh:

  #!/bin/sh
  cd /home/bbbs
  ./bbbs_an

By defining this script as a shell to user bbbs you can allow users to access
BBBS. They log in as user "bbbs", with or without password (your choice, see
man passwd). bbbs_an finds the first available node and uses it in
stdin/stdout-mode.


BBBS and ISDN CAPI devices

BBBS/LiI does not directly support ISDN CAPI devices but your kernel might.
Configure your kernel and ISDN setup, then you can use BBBS as with modem
device.


Outgoing TCP/IP

Just like with ISDN CAPI devices, you can also use BBBS with TCP/IP (InterNet)
network by specifying TCPIP devicename. The syntax is bbbs comport nodenumber
TCPIP, for example bbbs 1 2 TCPIP start node 2 for TCPIP. The specified node
will be used only for outgoing "calls", see below for incoming documentation.
The parameter "TCPIP" must be written in upper case.

A minimal Hayes-emulation is available to do TCPIP-calls:

  ATZ7         Do non-binary, 7bit connection to telnet host.
  ATZ8         Do binary, 8bit connection to telnet host (default).
  ATDhostname  Open telnet connection to host.
  ATRhostname  Open raw connection to host.

For example to open telnet connection to bbbs.net, start BBBS with bbbs 1 1
TCPIP BTERM and write "ATDbbbs.net". Note that the dial string is ATD, not
ATDT. To use non-standard port to connect to, use "hostname#port".

To do FidoNet TCPIP polls configure modem init string in BCFG4 correctly and
"ATD" for dial string. Then start BBBS node with bbbs 1 1 TCPIP. See also
dialstring convert and [node_remap].


Incoming TCP/IP

Incoming TCP/IP connections (telnet, FTP, SMTP, ...) are handled in bbbsd. Just
run it, there are no special things to configure in BBBS.

BUT, there are lot of things to configure in your Linux system before you can
use bbbsd. First of all, only user root can start a daemon which listens to
sockets 1023 and below. Secondly, you already have standard Linux daemons
(services) there, for example in port 23 you have inetd/in.telnetd waiting for

362      The UNIX version of BBBS


connections. You can either disable the standard services, you can move them to
non-standard ports or you can use non-standard ports for BBBS services. This
applies to all of the bbbsd-services you are going to use but let's take telnet
as an example:

To disable a service you have to edit /etc/inetd.conf file. For example telnet
service is defined as telnet stream tcp.... To disable this just comment the
line, add "#" char to the beginning. This has the obvious drawback that then
you can't telnet to your own system anymore.

To move standard telnet service to a non-standard port you have to edit both
/etc/services and /etc/inetd.conf files. To services-file you have to add line
"telnetr 1023/tcp" and in inetd.conf change "telnet stream tcp..." line to
"telnetr stream tcp...". This moves your standard telnet service to port 1023.
Do NOT just change the port number from services file as that would have other
drawbacks.

To start bbbsd-telnet service to non-standard port is simple. Just specify any
free port number in bbbsd's command line instead of the standard one. This
works fine but then your users have to know the port number before they can
access your system.

After editing the global system configuration files you have to either SIGHUP
the daemon(s) or reboot your system. If you are unsure, reboot.


BTERM

You can start BBBS directly to BTERM by specifying parameter BTERM after the
device parameter. For example bbbs 3 1 /dev/ttyS2 BTERM for /dev/ttyS2, or bbbs
1 1 TCPIP BTERM for TCP/IP. The parameter "BTERM" must be written in upper
case.

                                      BBBS/A, BBBS for Commodore Amiga      363


B B B S / A ,   B B B S   f o r   C o m m o d o r e   A m i g a 
_______________________________________________________________________________

BBBS/A is the Commodore Amiga specific version of BBBS.

Under Amiga there are several ways to run BBBS. Let's look at them one by one.


Local login

To start BBBS for local login, node 1, use command bbbs 0. To do the same for
node 2, use command bbbs 0 2. The general syntax is bbbs 0 nodenumber.


Normal setup for modem

To start BBBS for modem, first serial port (comport) and node 1, use command
bbbs 1. To do the same for node 2, use command bbbs 1 2. The first parameter is
comport number and the second is nodenumber. The special comport 0, as
mentioned above, means local login.


Setup for nonstandard serial.device

BBBS can also use other serial-devices than standard serial.device. For this
the general syntax is bbbs comport nodenumber devicename. The comport parameter
is the unit parameter in serial device, 1 being the first unit (unit #0).


Outgoing TCP/IP

You can also use BBBS with TCP/IP (InterNet) network by specifying TCPIP
devicename. The syntax is bbbs comport nodenumber TCPIP, for example bbbs 1 2
TCPIP start node 2 for TCPIP. The specified node will be used only for outgoing
"calls", see below for incoming documentation. The parameter "TCPIP" must be
written in upper case.

A minimal Hayes-emulation is available to do TCPIP-calls:

  ATZ7         Do non-binary, 7bit connection to telnet host.
  ATZ8         Do binary, 8bit connection to telnet host (default).
  ATDhostname  Open telnet connection to host.
  ATRhostname  Open raw connection to host.

For example to open telnet connection to bbbs.net, start BBBS with bbbs 1 1
TCPIP BTERM and write "ATDbbbs.net". Note that the dial string is ATD, not
ATDT. To use non-standard port to connect to, use "hostname#port".

To do FidoNet TCPIP polls configure modem init string in BCFG4 correctly and
"ATD" for dial string. Then start BBBS node with bbbs 1 1 TCPIP. See also
dialstring convert and [node_remap].


Incoming TCP/IP

Incoming TCP/IP connections (telnet, FTP, SMTP, ...) are handled in bbbsd. Just
run it, there are no special things to configure.



364      BBBS/A, BBBS for Commodore Amiga


BTERM

You can start BBBS directly to BTERM by specifying parameter BTERM after the
device parameter. For example bbbs 3 1 serial.device BTERM for comport 3, or
bbbs 1 1 TCPIP BTERM for TCP/IP. The parameter "BTERM" must be written in upper
case.

                                              OS environment variables      365


O  S     e  n  v  i  r  o  n  m  e  n  t     v  a  r  i  a  b  l  e  s  
_______________________________________________________________________________

The following OS environment variables can be set to control the behavior
of BBBS:

Variable        Available values/what it is
===========================================================================
BBBS            FOSSIL - with BBBS/D, use always FOSSIL for communication
                BCOM   - with BBBS/D, use always internal high speed async
                         communication routines. This overrides FOSSIL.
                INT14  - with BBBS/D, use always BIOS routines for
                         communication. This is slow. Do not use it,
                         unless you really need to.
                DEBUG  - show some debugging information while running.
                         This can be added to any of the above with a
                         comma. For example BCOM,DEBUG.

BZLL            When this environment variable is set (that is, it contains
                any string) the BZLink-Lite is automatically activated in
                BTERM terminal emulator.

BBBSJAVA        This environment variable determines the search path of the
                Java parser used to run Java scripts (.class).

BBBSPERL        This environment variable determines the search path of the
                perl parser used to run perl scripts (.pl).

BBBSHACK        This environment variable should point to a NetHack
                playground, if you want your users to use the 'q hack'-command
                to play NetHack.
BBBSCONS        Alternative console.device name for BBBS/A.
BBBSDIR         Directory where bbbs and other files are.
BTERMDIR        Directory where bterm and other files are.

BBBS also supports the standard timezone variables TZ and TZUTC. It is very
recommended to set both to get correct time values in BBBS. The TZ variable
should contain the timezone, the TZUTC variable the difference from UTC
time. Remember that the variables should be the same for all nodes, otherwise
you will see very big (errorneous) values in, for example, the who-command
output.

For Finland, in winter time, the correct timezone is EET-2. Thus, TZUTC
should be +0200. For Norway, the timezone is CET-1 and the difference from
UTC is +0100. For summer time, one hour should be added to these values,
resulting into EET-3 (+0300) for Finland and CET-2 (+0200) for Norway.

366      Frequently Asked Questions


F  r  e  q  u  e  n  t  l  y     A  s  k  e  d     Q  u  e  s  t  i  o  n  s  
_______________________________________________________________________________

1Q:     BBBS reports "Directory not found." when I try to enter the file
        areas.
1A:     Your "filedirg.000" file is missing root-directory, '/'.

2Q:     BBBS does not find subdirectories in the file area.
2A:     Write directories in lower case, not upper. Use '/' as directory
        separator, not '\'.

3Q:     BBBS does not initialize modem.
3A:     Your initialization string misses '|'. Also remember to use it
        in your busy and answer strings.

4Q:     BBBS reports mysterious disk errors.
4A:     You are using SmartDrive or some other non-working disk utility.
        Please remove them and try again. You should also specify big
        value for files-setting in your config.sys.

5Q:     I get "Access denied." when I try to DEScribe or delete a file.
5A:     Give yourself a write access to file directories with '@w' flag.
        Remember to edit "groups" file too.

6Q:     BBBS reports "Hold not found." every time somebody logs in.
6A:     You have not specified correct hold directory in filedirn.???
        file(s). Remember to give all users a write access to the hold dir.

7Q:     BBBS reports a swap error when shelling to external program.
7A:     You have a wrong path in external.bbb file or the filename is
        missing the extension.

8Q:     The commands are all messed up: who brings up bulletin menu
        and stuff like that.
8A:     You haven't updated your bbbstxt-files or have messed them up.
        Update them from the distribution package.

9Q:     BBBS does not work.
9A:     Use a soft, lint-free cloth to clean your hard disk. The
        magnetic dust interferes with high-fidelity applications. Also delete
        your copy of Microsoft Windows.

10Q:    When will the next version be available?
10A:    Real Soon Now.

11Q:    "Download", "MOve" and "COpy" commands does not work in the file
        area.
11A:    You have too long description for some file(s) in the current
        directory. Maximum length is about 750 characters.

12Q:    When starting BBBS it just returns to OS. It works fine with FD.
12A:    You have defined local/general/dobbs.bat in BCFG4. Clear it.
        You should also read help for that option.

13Q:    BBBS does not find the phonenumber of system listed in nodelist.
13A:    Remember to compile nodelists every day by running BNC.

14Q:    Sometimes I see descriptions like "-Q81028001e000001c83acc0" for
        the files in my filearea.

                                            Frequently Asked Questions      367


14A:    You've been running QPEG with "write descriptions" option on.
        That's a error/problem in QPEG. Turn the option off.

15Q:    BackDoor doesn't poll to some system
15A:    The system has been busy too many times or there has been too
        many errors while calling it (see: maindir/busypoll.dat and
        maindir/badpoll.dat). You should also check that node is CM or
        you have correct event running and your nodelist index is up to
        date. "Send crashmail" and "Backdoor" toggles must also be enabled.

16Q:    BBBS reports "Can't open the program" when executing it.
16A:    Your shell does not provide full the filename for "bbbs". Try
        to start it with command "bbbs", not "bbbs".

17Q:    I have noticed that some messages are disappearing faster than
        others. Why is that and who decides?
17A:    It's the size of the message. You see, the messages are stored
        on disk. A message is encoded in things known as 'bits' which are
        written on the disk. A disk is a rotating platter. As anyone
        knows centrifugal force will force anything off of a rotating
        surface.

        As time goes on, the message moves closer and closer to the edge
        of the disk, and finally, it flies right off. Of course, the
        larger messages (more bits == more weight) tend to fly off
        faster.

18Q:    Clock in OS is OK, but in BBBS it's wrong by one hour.
18A:    Your TZ environment variable is wrong. You haven't set it at
        all, or it has/misses DST suffix.

19Q:    OS/2 reports that comport is already in use when I try to start
        an external program.
19A:    If you try to start OS/2 program you must give it comport handle
        (%a in external.bbb), not number or device (%o, %A). If you try to
        start a DOS program you must use SIO driver and it's "-"-parameter
        (in config.sys: "(port,base irq,-)").

20Q:    BBBS reports "Can't pack packets to..." when I toss echomail.
20A:    Typically this could be caused by a few things. The directory may
        not exist where you are trying to pack the file, or the file may
        already exist but has been packed with a different archive method
        first (for example it's packed with lha and you are trying to add
        to it with zip), you have the wrong archiver number defined in nodes-
        section of external.bbb (zip==2), there is no entry for the node in
        the nodes-section (BBBS will then default to archiver #1, there is
        an invalid archiver entry in the af_pack section of external.bbb (try
        "f add somefile" and "f hzip" within BBBS File/4), the work directory
        is non-existant or it is full, or your hard drive is full.

21Q:    I'm trying to setup hunt for BBBS/L. I get a "Can't connect to
        socket" when I run hunt. What socket number should I use?
21A:    Make sure you have huntd running firstly. Then use port 26739 which is
        the standard hunt socket. Also make sure you compiled huntd with the
        -DINTERNET option.

22Q:    How do I give more time to user called Joe User?
22A:    Log in to BBBS as SysOp and give commands:
        u find joe user

368      Frequently Asked Questions


        tlim 90
        The first command selects user Joe User to be edited, and second one
        gives him 90 minutes of login time.

                                              About regular expression      369


A  b  o  u  t     r  e  g  u  l  a  r     e  x  p  r  e  s  s  i  o  n  
_______________________________________________________________________________

        Regular  Expression is a standard way to scan for a text. RegExp
        has  specific  syntax  for wildcards which differs from wildcard
        scan used for files. All texts in BBBS are scanned with RegExps,
        the scan in not case sensitive.

        RegExp          What it does
        ================================================================
        foz             text "foz" as it is
        ^               beginning of the line
        $               end of the line
        .              any character
        [foz]           character `f', `o' or `z'
        [^foz]          any other character than `f', `o' or `z'
        [f-j]           equal to command "[fghij]"
        [^f-j]          equal to commnad "[^fghij]"
        (foo|bar)       text "foo" or "bar"
        x?              equal to command "(x|)"
        x+              one or more `x'
        x*              zero or more `x'
        \x              character `x', used finding f.ex. `*'

NOTE
        Following  RegExps  are  valid, but the result might not be what
        you think you asked for.

        RegExp          What it does
        ================================================================
        .*              matches everything
        .              matches everything except an empty line
        fub*            matches lines with "fu"
        file*.*         matches lines with "fil"

EXAMPLE
        RegExp          What it does
        ================================================================
        foobar          scan for text "foobar" anywhere in the line
        ^foobar         scan for a line starting with "foobar"
        fo.bar          scan for a line with text fo<any character>bar
        \*              scan for character "*" anywhere in the line
        foo(bar|ugh)*buz$
                        scan for a line with text "foo" followed by zero
                        or  more "bar" or "ugh" and followed by "buz" at
                        the  end of the line. For example lines "foobuz"
                        and "junkfoobarughbarbuz" matches this RegExp

SEE ALSO
        Wildcards

370      Wildcards


W  i  l  d  c  a  r  d  s  
_______________________________________________________________________________

DESCRIPTION
        Wildcard-filescan is a standard way to scan for files with user-
        defined pattern. The pattern must match whole filename.

        Wildcard        What it does
        ================================================================
        foz             text "foz" as it is
        *               zero or more characters (any)
        ?               any character
        [foz]           character `f', `o' or `z'
        [!foz]          any other character than `f', `o' or `z'
        [f-j]           equal to command "[fghij]"
        [!f-j]          equal to commnad "[!fghij]"
        \x              character `x', used finding f.ex. `['

NOTE
        Following  wildcards are valid, but the result might not be what
        you think you asked for.

        Wildcard        What it does
        ================================================================
        *.*             matches filenames with "." in it, not all files
        foo*.*          matches  filenames  starting with foo and having
                        "." in it

EXAMPLE
        Wildcard        What it does
        ================================================================
        *               all files
        *foo*           filenames with "foo" in it
        foo*bar[1-4x]   filenames  starting  with  "foo" and ending with
                        "bar" followed by a number from 1 to 4 or "x"

SEE ALSO
        Regular Expression

                                               The MG Reference Manual      371


T  h  e     M  G     R  e  f  e  r  e  n  c  e     M  a  n  u  a  l  
_______________________________________________________________________________

[LaTeX sequences stripped by Hannu Laurila (Well .. I tried)]



The MG Reference Manual
Release MG2A

Copyright 1987, Sandra J. Loosemore

This document, or sections of this document, may be freely
redistributed provided that the copyright notice and the following disclaimer
remain intact:  The author bears no responsibilities for errors in
this document or the software it describes; and shall not be held liable
for any indirect, incidental, or consequential damages.


Introduction
============

MG is a small, fast, and portable Emacs-style text editor intended to
be used by people who can't run a real Emacs for one reason or another
--- as their main editor on smaller machines with limited memory or
file space, or as a `quick-start' editor on larger systems, useful
for composing short mail messages and the like.

We've made MG compatible with GNU Emacs because that is the `big',
full-featured editor that many of us use regularly and are most
familiar with.  GNU Emacs is the creation of Richard M. Stallman, who
was also the author of the original Emacs editor.  However, MG is not
associated in any way with the GNU project, and the MG authors
individually may or may not agree with the opinions expressed by
Richard Stallman and the GNU project.

MG is largely public domain.  You can use, modify, and redistribute MG
as you like.  A few modules, however, are copyrighted; specifically,
the regular expression code, the VMS termcap routines, and the Amiga
support code.  Look at the source code for the exact copyright
restrictions.

There are several other editors in existence which call themselves
MicroEmacs.  The original public domain version was written by Dave
Conroy and circulated as version 1.6.  Derived from this, there is
another PD version by Dave Conroy numbered v30; a significantly larger
PD version by Daniel Lawrence which is now up to version 3.9; at least
one proprietary implementation; an implementation for the Atari ST
with an integrated command shell, by Prabhaker Mateti; and probably
others that we don't know about.

MG is derived from the v30 MicroEmacs, with key bindings, command
names, and general functionality made more compatible with GNU Emacs.
Like v30, MG is fairly small and quite robust.  We have generally
resisted the temptation to overfeaturize.  Some features which are
large and complex are flagged for conditional compilation.

Many people have contributed their time to developing, improving, and
porting MG.  Mike Meyer, Mic Kaczmarczik, and Bob Larson deserve

372      The MG Reference Manual


particular mention for their efforts.

Questions, suggestions, and offers of help should be addressed to:

        mg-developers@ucbvax.berkeley.edu   (ARPA)
        ucbvax!mg-developers                (UUCP)

Implementations of MG
~~~~~~~~~~~~~~~~~~~~~

MG runs on many different kinds of hardware under many different
operating systems.  Currently, these include:

 - 4.2 and 4.3 BSD Unix (including Ultrix-32)
 - System V Unix
 - VAX/VMS
 - Primos
 - OS9/68k
 - Amiga
 - Atari ST
 - MS-DOS

This document describes release MG2A.  When we talk of different
versions of MG in this manual, the term "version" is used to
refer to the different support MG provides for the various machines
and operating systems it runs under, not to different releases of MG
itself.  For example, we might speak of how the VMS version of MG
differs from the Unix version.

As mentioned above, some MG commands may not be implemented in all
versions; these are noted in the documentation.  Some versions of MG
also support features (such as mouse handling) that are not described
here.

A Note on Character Sets
~~~~~~~~~~~~~~~~~~~~~~~~

MG uses the 128-character ASCII character set, and provides support for
8-bit characters.  Whether the particular version of MG that you are running
knows about extended character sets depends on whether your terminal and
the host operating system know about them.  Moreover, since there is no
standard 8-bit character set, the same character codes will probably
give different glyphs on different systems.  Most versions of MG use
the DEC multinational character set.

Notation and Conventions
~~~~~~~~~~~~~~~~~~~~~~~~

In this manual, commands and other things that must be typed in
literally are indicated in a typewriter font, like "next-line".
Placeholders such as command argument names use an italic font.

The terms "command" and "function" are synonymous.  We often
speak of a command being bound to a particular "key", although you
may actually have to type more than one character to form a single key.
Most commands are bound to keys with "control" and "meta" modifiers.

To type a control character, use the control key on your
keyboard like a shift key:  hold down the control key while typing the

                                               The MG Reference Manual      373


character.  In this manual, we will indicate control characters like
"C-x" --- here, typing the character `x' while holding down
the control key.

Some keyboards also have a meta key that works like the control
key.  (It may be labelled something else;  on the Atari ST, for example,
the key marked  `Alternate' is the meta key.)  If your keyboard doesn't
have a meta key, don't panic.  You can also use the escape key as a meta
prefix; first type the escape, and "then" the character.  Meta
characters will be indicated as "M-x".

Besides the meta prefix, two other characters are used as prefixes:
"C-x" and "C-h".  A few keys have special notation:  "SPC" is
the space character, "DEL" is the delete or rubout character, "RET"
is carriage return, and "ESC" is the escape character.  "NUL" is
the null character (ASCII 0), which is usually equivalent to either
"C-SPC" or "C-@".

Uppercase and lowercase characters are generally equivalent in command
keystrokes.

When you run MG from a shell, command line arguments are interpreted as the
names of files you want to "visit", or edit.  Each file is
read into a "buffer" in memory.  No changes are actually made to
the file until you ask it to be written out to disk.

Within MG, the large top part of the screen serves as a "window" into
the buffer being edited.  Below this is the "mode line", which
displays the name of the buffer.  Finally, at the very bottom of the screen,
there is a one-line "minibuffer" which is used for displaying
messages and answering questions.

MG keeps track of two pointers into each window, the "point" and the
"mark".  The "cursor" appears at the point in the current
window, and we often speak of moving the cursor rather than of moving the
point.  The text between the point and the mark is referred to as the
"region".

Some commands deal with "words" and "paragraphs".
Generally, whitespace and punctuation separate words.  Lines that are
empty or that contain only spaces or tabs separate paragraphs without
being part of a paragraph.  A non-empty line that starts with a space
or tab also begins a new paragraph.

A number of commands are defined as "toggles".  If no prefix argument
is supplied, these commands toggle an action.  The action is turned on if a
negative or zero argument is supplied, and turned on if a positive argument
is supplied.

Getting Started
~~~~~~~~~~~~~~~

This document is intended primarily as a reference manual.  If you
have never used any Emacs-like text editor before, it is strongly
suggested that you run the on-line tutorial supplied with the MG
distribution, instead of reading this manual.

Do not be put off by the large number of commands described in this
manual!  It is possible to get by with only a handful of basic commands.

374      The MG Reference Manual


Here are the ones that are probably used most frequently:

C-p     Move the cursor to the previous line
C-n     Move the cursor to the next line
C-b     Move the cursor backwards
C-f     Move the cursor forwards
C-v     Scroll forwards one screenful
M-v     Scroll backwards one screenful
M-<     Go to the beginning of the buffer
M->     Go to the end of the buffer
C-a     Go to the beginning of the line
C-e     Go to the end of the line
DEL     Delete the previous character
C-k     Kill (delete) to the end of line
C-y     Reinsert killed text.
C-x C-c Exit MG
C-x C-s Save the current buffer

Using Commands
==============

Command Arguments
~~~~~~~~~~~~~~~~~

Some commands require arguments.  For example, if you want to read a
file into a buffer, you must type in the name of the file.  In the
descriptions of commands in this manual, if arguments are required,
they are listed following the command name.

MG prompts for command arguments in the minibuffer.  Within the minibuffer,
the following characters can be used for editing:

DEL, C-h        Erase the last character.
C-x, C-u        Erase the entire input line.
C-w             Erase to the beginning of the previous word.
C-q, backslash  Quote the next character typed.
RET             Signifies that you have completed typing in the argument.
C-g             Abort the command in progress.

Prefix Arguments
~~~~~~~~~~~~~~~~

All commands accept an optional numeric prefix argument.  This is
often interpreted as a repetition count.  For example, the function
"next-line", if given a prefix argument, will move the cursor
forward that many lines; without an argument, it will move the cursor
forward one line.  A few commands behave differently if given a prefix
argument than they do without one, and others ignore the prefix
argument entirely.


digit-argument              M-0, M-1, M-2, M-3, M-4, M-5, M-6, M-7, M-8, M-9
negative-argument                                                        M--

One way to specify a command argument is to use the escape key
as a meta prefix, and then type one or more digits.  A dash may be
used for a negative argument.



                                               The MG Reference Manual      375


universal-argument                                                      C-u

Another way to specify a command prefix is to type "C-u".
Typing one "C-u" is equivalent to a prefix argument of 4, typing
two gives a value of 16, and so on.  In addition, you can type digits
following "C-u" to form a numeric prefix argument.

Aborting
~~~~~~~~

keyboard-quit                                                           C-g

Typing "C-g" cancels any command.  It is particularly useful
for cancelling a command when MG is prompting for input in the minibuffer.

Extended Commands
~~~~~~~~~~~~~~~~~

execute-extended-command command                                        M-x

Commands that are not bound to keys can be executed through
"execute extended-command".  If a prefix argument is supplied, it
is passed to the command being executed.


Moving the Cursor
=================

The commands described in this chapter move the cursor (sometimes
called the point or dot) within the current window.  Commands which
set the mark are included here as well.

backward-char                                                           C-b

Moves the cursor backward (left) one character.  If the cursor
is at the left margin, it will be moved to the end of the previous line.

backward-paragraph                                                      M-[

Moves the cursor backwards to the beginning of the current
paragraph, or to the beginning of the previous paragraph if the cursor
is already at the beginning of a paragraph.

backward-word                                                           M-b

Moves the cursor backwards to the beginning of the current word,
or to the beginning of the previous word if the cursor is already at
the beginning of a word.

beginning-of-buffer                                                     M-<

Moves the cursor backwards to the beginning of the buffer.

beginning-of-line                                                       C-a

Moves the cursor backwards to the beginning of the current
line.  This command has no effect if the cursor is already at the beginning
of the line.


376      The MG Reference Manual


end-of-buffer                                                           M->

Moves the cursor forwards to the end of the buffer.

end-of-line                                                             C-e

Moves the cursor forwards to the end of the current line.  This
command has no effect if the cursor is already at the end of the line.

exchange-point-and-mark                                             C-x C-x

Set the mark at the current cursor position, and move the cursor
to the old location of the mark.

forward-char                                                            C-f

Moves the cursor forwards one character.  If the cursor is at the
end of a line, it will be moved to the first character on the next line.

forward-paragraph                                                       M-]

Moves the cursor forwards to the next paragraph delimiter.

forward-word                                                            M-f

Moves the cursor forwards to the end of the current word, or to
the end of the next word if the cursor is already at the end of a word.

goto-line line-number

Moves the cursor to the beginning of line "line-number" in
the buffer.

next-line                                                               C-n

Moves the cursor down one line.  The cursor remains in the same
column unless it would be past the end of the line, in which case it is
moved to the end of the line.  At the end of the buffer, "C-n" will
create new lines.

previous-line                                                           C-p

Moves the cursor up one line.    The cursor remains in the same
column unless it would be past the end of the line, in which case it is
moved to the end of the line.

recenter                                                                C-l

Redraws the entire screen, scrolling the current window if necessary
so that the cursor is near the center.  With a positive prefix argument
"n", the window is scrolled so that the cursor is "n" lines
from the top.  A negative prefix argument puts the cursor that many lines
from the bottom of the window.

redraw-display

Redraws the entire screen, but never scrolls.

scroll-down                                                             M-v

                                               The MG Reference Manual      377



Scrolls the display down (moving backward through the buffer).  Without
an argument, it scrolls slightly less than one windowful.  A prefix argument
scrolls that many lines.

scroll-one-line-down
scroll-one-line-up

These functions are similar to "scroll-down" and "scroll-up"
(respectively), but when invoked without an argument, cause the display
to scroll by one line only.  These functions are enabled by defining the
compile-time option GOSMACS.

scroll-other-window                                                   M-C-v

Scrolls the `other' window forward as for "scroll-up".

scroll-up                                                               C-v

Scrolls the display up (moving forward through the buffer).  Without an
an argument, it scrolls slightly less than one windowful.  A prefix argument
scrolls that many lines.

set-mark-command                                                        NUL

Set the mark at the current cursor position.

what-cursor-position                                                  C-x =

Prints some information in the minibuffer about where the cursor is.


Text Insertion Commands
=======================

The usual way to insert text into a buffer is simply to type the
characters.  The default binding for all of the printing characters
("self-insert-command") causes them to be inserted literally at
the cursor position.

insert  string

Insert "string" into the current buffer at the cursor position.

newline                                                                 RET

Insert a line break into the current buffer at the cursor position,
moving the cursor forward to the beginning of the new line.

newline-and-indent                                                      C-j

Insert a line break into the current buffer at the cursor position,
then add extra whitespace so that the cursor is aligned in the same
column as the first non-whitespace character in the previous line.

open-line                                                               C-o

Inserts a line break into the current buffer at the current position,
but does not move the cursor forward.

378      The MG Reference Manual



quoted-insert                                                           C-q

This command acts as a prefix to
cancel the normal interpretation of the next keystroke.  If "C-q"
is followed by one to three octal digits, it is interpreted as the
code of the character to insert.  Otherwise a single key is read and
the character typed is inserted into the buffer instead of interpreted
as a command.  This is used for inserting literal control characters
into a buffer.

self-insert-command

This is the default binding for keys representing printable
characters.  The character is inserted into the buffer at the cursor
position, and the cursor moved forward.

Killing, Deleting, and Moving Text
==================================

When text is deleted, it is erased completely.  Killing text, on the
other hand, moves it into a temporary storage area called the kill
buffer.  The saved text in the kill buffer is erased when another
block of text is killed.  Until then, however, you can retrieve text
from the kill buffer.  This can be used to move or copy blocks of
text, as well as to restore accidentally killed text.

backward-kill-word                                                    M-DEL

Kill the text backwards from the cursor position to the beginning
of the current word.  Typing "M-DEL" several times in succession
prepends each killed word to the kill buffer.

copy-region-as-kill                                                     M-w

Copies the text in the region into the kill buffer, without removing
it from the current buffer.

delete-backward-char                                                    DEL

Deletes the character to the left of the cursor.

delete-blank-lines                                                  C-x C-o

Deletes all blank lines after the current line, and if the current
line is blank, deletes it and all blank lines preceeding it as well.

delete-char                                                             C-d

Deletes the character underneath the cursor.

delete-horizontal-space                                         M-backslash

Deletes all spaces and tabs on either side of the cursor.

just-one-space                                                        M-SPC

This is like "delete-horizontal-space", except it leaves a single
space at the cursor position.

                                               The MG Reference Manual      379



kill-line                                                               C-k

If no prefix argument is specified, this function kills text up
to the next newline; or if the cursor is at the end of a line, the newline
is killed.  A prefix argument specifies how many lines to kill.  Typing
"C-k" several times in succession appends each line to the kill buffer.

kill-paragraph

This command kills the entire paragraph containing the cursor.
If the cursor is positioned between paragraphs, the next paragraph is killed.

kill-region                                                             C-w

The region (all text between point and mark) is killed.

kill-word                                                               M-d

Text is killed forward from the cursor position to the next
end of word.  If the cursor is at the end of the word, then the next
word is killed.  Typing "M-d" several times appends the killed
text to the kill buffer.

yank                                                                    C-y

Text is copied from the kill buffer into the current buffer at
the cursor position.  The cursor is moved to the end of the inserted
text.

Searching and Replacing
=======================

Searching
~~~~~~~~~

The ordinary search command in MG differs from that in many other editors
in that it is incremental:  it begins searching as soon as you begin
typing the search string, instead of waiting for you to type the entire
string.

All of the search commands described in this section are case-insensitive.


isearch-backward pattern                                                C-r
isearch-forward  pattern                                                C-s

These commands perform an incremental search backward and
forward (respectively) for "pattern".  MG will move the cursor
to the place in the buffer that matches as much of the pattern as you
have typed so far, as each character is entered.

Within the incremental search, the following characters are interpreted
specially:

DEL     Erase the last character in the search string.

ESC     Stop searching; exit from incremental search
        mode, leaving the cursor where the search brought it.

380      The MG Reference Manual



C-g     If a match has been found, exits from
        incremental search but leaves the cursor in its original position.  If
        the search has failed, this will just erase the characters which have
        not been found from the end of the search pattern.  In this case, you
        must type "C-g" again to abort the search.

C-s     Search forward for the next occurrence of the
        same pattern.

C-r     Search backward for the previous occurrence of
        the same pattern.

C-q     `Quotes' the next character typed, forcing it
        to be interpreted as a literal character in the search pattern.

In addition, normal commands such as "C-a" that do not have special
meanings within incremental search cause the search to be terminated, and
then are executed in the ordinary way.

search-again
search-backward pattern                                                 M-r
search-forward  pattern                                                 M-s
These commands perform ordinary, non-incremental searches.
"Search-again" uses the same pattern and direction as the previous
search.

Replacing
~~~~~~~~~

query-replace pattern replacement                                       M-%

The primary replace command in MG is an interactive query replace.
MG searches forward for occurrences of "pattern", and asks you what
to do about each one.  The choices are:


SPC     Replace this match with "replacement",
        and go on to the next.

DEL     Skip to the next match without replacing this one.

.       Replace this match, and then quit.

!       Replace all remaining occurrences without asking again.

ESC     Quit.

By default, "query-replace" adjusts the case of lower-case letters
in the replacement string to match that of the
particular occurrence of the pattern; for example, replacing `Foo'
with `bar' results in `Bar'.  Upper case letters in the replacement
string are always left uppercase.   In addition, supplying a prefix argument
will also tell "query-replace" to leave the case of the replacement
string as-is.

Note that "query-replace" always performs a case-insensitive search.

Regular Expressions

                                               The MG Reference Manual      381


~~~~~~~~~~~~~~~~~~~

Regular expressions provide a means for specifying complex search
patterns, instead of just a literal string.  The commands in this
section are available only if MG is compiled with the REGEX option
defined.

Regular expression syntax uses the following rules.  Most characters
in a regular expression are considered to be "ordinary" characters,
and will match themselves and nothing else.  The exceptions are the
special characters listed below.

.       Matches any single character except a newline.

*       A suffix operator that matches zero or more
        repetitions of the (smallest) preceding regular expression.

+       A suffix operator that matches one or more
        repetitions of the (smallest) preceding regular expression.

?       A suffix operator that matches either zero or one
        occurence of the (smallest) preceding regular expression.

[...]   Matches any one character listed in the character
        set between the square brackets.  See examples below.

^       Matches at the beginning of a line.

$       Matches at the end of a line.

\       Except for the situations listed below, acts as a
        prefix operator which causes the character following
        to be treated as an ordinary character.

|       An infix binary "or" operator.
        It applies to the two largest surrounding expressions.

(...)   A grouping construct, usually used to specify a larger
        expression for postfix operators such as "*" or to limit
        the scope of operands to "|".

\digit  Matches the same text matched by the "digit"th "\(...\)"
        construct.  These are numbered from 1 to 9 in the order
        that the open-parentheses appear.

\`      Matches at the beginning of the buffer.

\'      Matches at the end of the buffer.

\b      Matches at the beginning or end of a word.

\B      Matches anyplace "except" at the beginning or end of a word.

\<      Matches at the beginning of a word.

\>      Matches at the end of a word.

\w      Matches any word-constituent character.


382      The MG Reference Manual


\W      Matches any character which is "not" a word-constituent.


Some examples may help clarify the rules.

foo             Matches the literal string "foo".

;.*             Matches all strings which begin with a semicolon and
                continue to the end of a line.

c[ad]+r         Matches strings of the form "car", "cdr", "caar", "cadr",
                and so on.

[a-z]           Matches any lowercase letter.

[^a-z]          Matches any character "except" lowercase letters.

[0-9+---]       Matches a digit or sign.

(foo|bar)       Matches either the string "foo" or the string "bar".


count-matches     pattern
count-non-matches pattern

These commands count the number of lines which do or do not
(respectively) match the specified pattern.

delete-matching-lines     pattern
delete-non-matching-lines pattern

These commands delete all lines which do or do not (respectively)
match the specified pattern.


query-replace-regexp pattern replacement

This is the regular expression version of "query-replace".

The "replacement" string may be a constant, or it can refer to
all or part of the string matched by the "pattern". "\&" in
the replacement string expands into the entire text being replaced,
while "\n" (where n is a number) replaces the
"n"th parenthesized expression in "pattern".

re-search-again
re-search-backward pattern
re-search-forward  pattern

These are the regular expression equivalents of the ordinary
non-incremental search commands.

set-case-fold-search

This command toggles an internal variable that controls whether
the regular expression search and replace commands pay attention to
case.  By default, regular expression searches are case-insensitive.
Ordinary searches are always case-insensitive and are not affected by
the setting of this variable.

                                               The MG Reference Manual      383




Windows
=======

MG initially has only one text window displayed.  However, you can have
as many windows as will fit on the screen.  Each window has its own mode
line and must display at least two lines of text.  (Note that a MG's
`windows' are distinct from the `windows' handled by screen managers
such as the X Window System.)

Multiple windows may be used to display different buffers.  You can also
have the same buffer displayed in more than one window, which is useful
if you want to see one part of a file at the same time as you are editing
another part.

Although many windows can be displayed at once, only one window is active
at any given time.  This is the window where the cursor appears.

Some commands refer to the `other' window.  This is the window directly
below the current window, or the top window if you are in the bottom window.

delete-other-windows                                                  C-x 1

Makes the current window the only window.

delete-window                                                         C-x 0

Deletes the current window, making the `other' window the
current window.  This command doesn't do anything useful if there is only
one window being displayed.

enlarge-window                                                          C-^

Makes the current window larger.  Without a prefix argument, the
window grows one line; otherwise, the prefix argument specifies how many
lines to grow.

other-window                                                          C-x o

Makes the `other' window the current window.

previous-window

This is like "other-window", except that it cycles through
the windows in reverse order.  This command is available only if MG was
compiled with the GOSMACS option defined.

shrink-window

Makes the current window smaller.  Without a prefix argument, the
window loses one line; otherwise, the prefix argument specifies how many
lines go away.

split-window-vertically                                               C-x 2

Split the current window into two windows, both using the same buffer.



384      The MG Reference Manual


Files and Buffers
=================

Most buffers are used to contain a file being edited.  It is
also possible to have buffers that are not associated with any file;
MG uses these for purposes such as displaying help text, for example.
However, since most commands for dealing with files also deal with
buffers, we have grouped all of these commands together into one chapter.

Buffer Manipulation
~~~~~~~~~~~~~~~~~~~

insert-buffer buffer-name

Inserts the contents of the named buffer into the current buffer
at the cursor location.  The cursor moves to the end of the inserted
text.

kill-buffer buffer-name                                               C-x k

The named buffer and its contents are deleted.  If the buffer has
been marked as modified, MG will ask you if you really want to delete it.
Note that, contrary to its name, this command "does not" save the
buffer contents in the kill buffer.

If a buffer is being displayed in a window when it is deleted, MG will
find some other buffer to display in the same window.

list-buffers                                                        C-x C-b

This command writes information about the buffers currently in
use to a buffer named "*Buffer List*".  This buffer is then displayed
in the `other' window; if there is only one window, this command will
split the screen into two windows.

not-modified                                                            M-~

This command makes MG think that the current buffer has not been
modified, even if it really has been changed.  This affects the behavior
of the "kill-buffer" and the buffer-saving commands described below.

MG indicates modified buffers with two stars at the left end of the mode
line.

switch-to-buffer buffer-name                                          C-x b

The current window is mapped onto the named buffer.  If there
isn't already a buffer with that name around, MG will create one.

switch-to-buffer-other-window buffer-name                           C-x 4 b

This command works like "switch-to-buffer", except that the
`other' window is used.  If there is only one window, this command
splits the screen into two windows and maps the named buffer onto one
of them.

Reading and Writing Files
~~~~~~~~~~~~~~~~~~~~~~~~~


                                               The MG Reference Manual      385


find-file file-name                                                   C-x f
find-file-other-window file-name                                  C-x 4 C-f

These commands are analagous to "switch-to-buffer" and
"switch-to-buffer-other-window", respectively.  The difference is that
these commands look for a buffer associated with the named file.  If no
matching buffer is found, MG will create a new buffer with a name
derived from the filename, and attempt to read the file into the buffer.
If the named file cannot be opened, the buffer remains empty.

insert-file file-name                                                  C-x i

This command reads in the contents of the named file into the
current buffer at the cursor position.  The cursor remains in the same
place.

save-buffer                                                         C-x C-s

If the current buffer has been modified, it is saved.  Buffers
that are not associated with files cannot be written out with this
command.

save-buffers-kill-emacs                                             C-x C-c

This command is used to leave MG and return control to the shell
or other program that was used to start MG.  If there are modified buffers,
MG will ask you if you want to save them before exiting.

save-some-buffers                                                     C-x s

MG will ask you if you want to save modified buffers that are
associated with files.

write-file file-name                                                C-x C-w

The current buffer is written out using the file name supplied.
This is useful for saving buffers that are not associated with files, or
for writing out a file with a different name than what was used to read
it in.

Backup Files
~~~~~~~~~~~~

MG provides a way to save a copy of the original version of files which
have been modified and then written out again.  The backup copy reflects
the state of the file as it existed the first time it was read into MG.
The name used for the backup file varies, depending on the operating
system.

This feature is disabled if MG is compiled with NO_BACKUP defined.

make-backup-files

This command is a toggle which controls the state of an internal
variable that determines whether MG creates backup files.

Changing the Directory
~~~~~~~~~~~~~~~~~~~~~~


386      The MG Reference Manual


The commands in this section are disabled by defining NO_DIR.

cd directory-name

This command changes MG's notion of the `current' directory
or pathname.  This is used to supply defaults for functions that read
or write files.

The syntax for "directory-name" is obviously specific to the
particular operating system MG is running on.

pwd

Display what MG thinks is the current directory.


Modes
=====

Modes are used to locally alter the bindings of keys on a
buffer-by-buffer basis.  MG is normally in fundamental mode, and these
are the bindings that are listed with the command descriptions in
this manual.  Modes define additional keymaps that are searched for
bindings before the fundamental mode bindings are examined; see the
section on key binding below for more details on how this works.

set-default-mode mode-name

Normally, when MG visits a file, it puts the associated buffer
into fundamental mode.  Using the "set-default-mode" command, you
can specify that MG should default to use some other mode on all subsequent
buffers that are created.  This command is a toggle.  With no prefix
argument, if the named mode is not already on the list of
default modes, then it will be added to the list; otherwise, it is removed
from the list.

No Tab Mode
~~~~~~~~~~~

In notab mode, tabs are expanded into spaces instead of inserted
literally into the buffer.  Literal tab characters are displayed as
"^I" (much like other control characters).  These commands are
available if MG is compiled with the symbol NOTAB defined.  (This mode
is mainly for use on systems such as PRIMOS that do not treat tab as a
series of spaces.)

no-tab-mode

This command is a toggle to control whether notab mode is in effect.

space-to-tabstop
Insert enough spaces to move the cursor to the next tab stop.  In
notab mode, this function is bound to "C-i".


Overwrite Mode
~~~~~~~~~~~~~~

Normally, when characters are inserted into the buffer, they are spliced

                                               The MG Reference Manual      387


into the existing text.  In overwrite mode, inserting a character causes
the character already at the cursor position to be replaced.  This is
useful for editing pictures, tables, and the like.

overwrite-mode

This command is a toggle which controls whether overwrite mode is
in effect.

Auto Fill

Fill mode causes newlines to be added automatically at word
breaks when text is added at the end of a line, extending past the
right margin.  Auto fill is useful for editing text and documentation
files.

auto-fill-mode

This command is a toggle which controls whether fill mode is in effect.

insert-with-wrap

This command works like "self-insert", except that it checks
to see if the cursor has passed the right margin.  If so, it fills
the line by inserting a line break between words.  This command is bound to
"SPC" in fill mode.

fill-paragraph                                                          M-q

Fill the paragraph containing the cursor.

set-fill-column                                                       C-x f

Without a prefix argument, this command sets the right margin
at the current cursor column.  If a prefix argument is supplied, it is used
instead as the line width.

Auto Indent
~~~~~~~~~~~

Indent mode binds "RET" to "newline-and-indent", so
that each new line is indented to the same level as the preceeding
line.  This mode is useful for editing code.

auto-indent-mode

This command is a toggle which controls whether auto-indent mode
is in effect.

Blink
~~~~~

Blink mode makes it easier to match parentheses, brackets, and other
paired delimiters.  When the closing delimiter is typed, the cursor
moves momentarily to the matching opening delimiter (if it is on the
screen), or displays the line containing the matching delimiter on the
echo line.  This is useful for editing Lisp or C code, or for
preparing input files for text processors such as LaTeX that use
paired delimiters.

388      The MG Reference Manual



blink-matching-paren

This command is a toggle which controls whether blink mode is
in effect.

blink-matching-paren-hack

This function behaves like "self-insert", except that it
finds the matching delimiter as described above.  In blink mode, this
function is bound to ")", which flashes the matching "(".  This
function also knows about the pairs "{}", "[]", and "<>".
All other characters match with themselves.

Dired Mode
~~~~~~~~~~

`Dired' is an abbreviation for `directory editor', and it provides a way
to browse through the contents of a directory from with MG.  Dired puts
a directory listing into a buffer; you can use normal editing commands to
move around the buffer, and a special group of commands to manipulate
the files.  For example, there are commands to delete and rename files,
and to read a file into an MG buffer.

Since dired mode rebinds many keys, a table may be helpful:

    C-d      dired-flag-file-deleted
    SPC      next-line
    c        dired-copy-file
    d        dired-flag-file-deleted
    e        dired-find-file
    f        dired-find-file
    n        next-line
    o        dired-find-file-other-window
    p        previous-line
    r        dired-renamefile
    u        dired-unflag
    x        dired-do-deletions
    DEL      dired-backup-unflag

The commands in this section are disabled by defining NO_DIRED.

dired directory-name                                                  C-x d

Creates a dired buffer for the given directory name, and displays
it in the current window.  The files
in the directory are listed, usually along with information about the
file such as its size and timestamp.  The exact format of the information
is system-specific.

dired-backup-unflag

This function removes the deletion flag from the file listed on
the previous line of the dired buffer.

dired-copy-file new-name

Copy the file listed on the current line of the dired buffer.


                                               The MG Reference Manual      389


dired-do-deletions

Deletes the files that have been flagged for deletion.

dired-find-file
dired-find-file-other-window

These function works like "find-file" and "find-file-other-window",
except that the filename is taken from the current line in the dired buffer.

dired-flag-file-deleted

Flag the file listed on the current line for deletion.  This is
indicated in the buffer by putting a `D' at the left margin.  No
files are not actually deleted until the function "dired-do-deletions"
is executed.

dired-other-window directory-name

This function works just like "dired", except that it puts the
dired buffer in the `other' window.

dired-rename-file new-name

Renames the file listed on the current line of the dired buffer.
Note that the dired buffer is not updated to reflect the change.

dired-unflag

Remove the deletion flag for the file on the current line.

Miscellaneous
=============

Help
~~~~

Most of the commands in this section write useful information to the
"*help*" buffer, which is then displayed in the `other' window.

These commands can be disabled at compile-time by defining NO_HELP.

apropos topic                                                         C-h a

This command lists all functions whose names contain a string
matching "topic" in the "*help*" buffer.

describe-bindings                                                     C-h b

Information about the key bindings in effect in the current buffer
is listed in the "*help*" buffer.

describe-key-briefly key                                              C-h c

Information about the binding of "key" is printed in the
minibuffer.

help-help option                                                    C-h C-h


390      The MG Reference Manual


This command lists all of the help options available and
prompts for which one to run.  Currently, these include only "a
to run "apropos", "b" to run "describe-bindings", and "c"
to run "describe-key-briefly".


Keyboard Macros
~~~~~~~~~~~~~~~

A keyboard macro is a saved set of commands from the keyboard that can be
reexecuted later on.  There can only be one keyboard macro defined at
any one time.

The commands in this section are available unless they have been disabled
by defining NO_MACRO.

call-last-kbd-macro                                                   C-x e

Execute the saved keyboard macro.  A prefix argument can be used
to specify a repetition count.

end-kbd-macro                                                         C-x )
start-kbd-macro                                                       C-x (

These functions are used to define a keyboard macro.  All keys
entered after "start-kbd-macro" is executed, up to a "end-kbd-macro",
are remembered as they are executed.  You can then reexecute the same
sequence of operations using "call-last-kbd-macro".


Changing Case
~~~~~~~~~~~~~

MG provides a number of functions for changing the case of text.

capitalize-word                                                         M-c
downcase-region                                                     C-x C-l
downcase-word                                                           M-l
upcase-region                                                       C-x C-u
upcase-word                                                             M-u

All of these commands do the obvious.

Odds and Ends
~~~~~~~~~~~~~

This section describes miscellaneous commands that don't fit into any
particular category.

emacs-version

Prints information about the version of MG you are running in
the minibuffer.

meta-key-mode

If the particular version of MG you are running supports a meta key,
this function can be used to determine whether MG actually pays attention
to it or not.  If no prefix argument is supplied, the internal variable

                                               The MG Reference Manual      391


that controls the use of the meta key is toggled; a positive value enables
the meta key, while a negative value disables it.

prefix-region

set-prefix-string string
"Prefix-region" is used to prefix each line of the region
with a string.  This is useful for indenting quoted text, making block
comments, and the like.  The function "set-prefix-string" can be
used to set the string used as the prefix.

suspend-emacs                                                           C-z

This command temporarily suspends
MG so that you can run other programs, and later resume editing.  The
exact behavior depends on which operating system you are running MG
under.  Typically, MG will either spawn a new shell as a subprocess, or
return you to the parent process.

transpose-chars                                                         C-t

This command transposes the previous two characters.


Customization
=============

MG provides a limited support for customization.  However, unlike `real'
Emacs, there is no extension language for interpretively defining new
functions.

Key Bindings
~~~~~~~~~~~~

MG allows keys to be rebound locally or globally.  To understand the
difference between the two, some discussion on how modes are implemented
is necessary.

An internal data structure called a keymap is used to look up the
function that is bound to a particular key.  The keymap for
fundamental mode contains all of the default bindings which are listed
with the command descriptions in this manual.  Modes define additional
keymaps that are searched for a binding before the fundamental mode
keymap is examined.  Keymaps have the same name as the mode they are
associated with.

MG does not provide commands for defining new modes, but you can alter
the keymaps for existing modes.

define-key keymap-name key command

This command can be used to modify the keymap for the named mode.

global-set-key key command
global-unset-key key

These commands modify the keymap for fundamental mode.  Bindings
established by "global-set-key" will be inherited by all other modes,
as long as they do not establish local rebindings of the same key.

392      The MG Reference Manual



local-set-key key command
local-unset-key key

These commands modify the keymap currently in effect.


Startup Files
~~~~~~~~~~~~~

Although MG does not include a general-purpose extension language, it
does provide a way to read and evaluate commands using a somewhat
different syntax than that used for executing extended commands.  This
is typically used in a startup file to modify key bindings.

A startup file consists of one or more expressions.  Each expression must
appear on a separate line in the file; there may not be more than one
expression per line, nor may expressions span across line breaks.
Whitespace (spaces and tabs) separate the tokens in an expression.  For
historical reasons, parentheses are also considered to be whitespace in
this context.  A semicolon acts as a comment character, causing the rest
of the line to be discarded.

An expression consists of a function name, an optional prefix argument
(given as an integer constant), and arguments to be passed to the
function.  If an argument includes literal whitespace or nonprintable
characters (for example, as in a keystroke argument to one of the key
binding functions described in the previous section), it must be
supplied as a string constant enclosed in double quotes.

Within string constants, the following backslash escapes are available
to specify nonprintable characters:


\t, \T          Tab
\n, \N          Newline
\r, \R          Carriarge return
\e, \E          Escape (Meta prefix)
\^              Control Prefix

\n              Specifies a character by its ASCII code, where
                "n" may consist of from one to three octal
                digits.

\fn, \Fn        Specifies the keycode for the "n"th function key.
                "N" may consist of one or two decimal digits.


The following commands which deal with evaluation of expressions are
disabled by defining the compile-time option NO_STARTUP.  See the
implementation notes for your particular version of MG for information
on how it handles startup files.

eval-current-buffer

Evaluate the expressions in the current buffer.

eval-expression expression


                                               The MG Reference Manual      393


Evaluate the expression supplied.

load file-name

Read in the specified file and evaluate its contents.


Fundamental Mode Key Bindings
=============================

NUL       set-mark-command
C-a       beginning-of-line
C-b       backward-char
C-d       delete-char
C-e       end-of-line
C-f       forward-char
C-g       keyboard-quit
C-h       help
TAB       self-insert-command
C-j       newline-and-indent
C-k       kill-line
C-l       recenter
RET       newline
C-n       next-line
C-o       open-line
C-p       previous-line
C-q       quoted-insert
C-r       isearch-backward
C-s       isearch-forward
C-t       transpose-chars
C-u       universal-argument
C-v       scroll-up
C-w       kill-region
C-x       c-x prefix
C-y       yank
C-z       suspend-emacs
ESC       meta prefix
SPC .. ~  self-insert-command
DEL       delete-backward-char

C-h C-g   keyboard-quit
C-h C-h   help-help
C-h a     apropos
C-h b     describe-bindings
C-h c     describe-key-briefly

C-x C-b   list-buffers
C-x C-c   save-buffers-kill-emacs
C-x C-f   find-file
C-x C-g   keyboard-quit
C-x C-l   downcase-region
C-x C-o   delete-blank-lines
C-x C-s   save-buffer
C-x C-u   upcase-region
C-x C-w   write-file
C-x C-x   exchange-point-and-mark
C-x (     start-kbd-macro
C-x )     end-kbd-macro
C-x 0     delete-window

394      The MG Reference Manual


C-x 1     delete-other-windows
C-x 2     split-window-vertically
C-x 4     c-x 4 prefix
C-x =     what-cursor-position
C-x ^     enlarge-window
C-x b     switch-to-buffer
C-x d     dired
C-x e     call-last-kbd-macro
C-x f     set-fill-column
C-x i     insert-file
C-x k     kill-buffer
C-x o     other-window
C-x s     save-some-buffers
C-x 4 C-f find-file-other-window
C-x 4 C-g keyboard-quit
C-x 4 b   switch-to-buffer-other-window
C-x 4 f   find-file-other-window

M-C-g     keyboard-quit
M-C-v     scroll-other-window
M-SPC     just-one-space
M-%       query-replace
M--       negative-argument
M-0       digit-argument
M-1       digit-argument
M-2       digit-argument
M-3       digit-argument
M-4       digit-argument
M-5       digit-argument
M-6       digit-argument
M-7       digit-argument
M-8       digit-argument
M-9       digit-argument
M-<       beginning-of-buffer
M->       end-of-buffer
M-[       backward-paragraph
M-\       delete-horizontal-space
M-]       forward-paragraph
M-b       backward-word
M-c       capitalize-word
M-d       kill-word
M-f       forward-word
M-l       downcase-word
M-q       fill-paragraph
M-r       search-backward
M-s       search-forward
M-u       upcase-word
M-v       scroll-down
M-w       copy-region-as-kill
M-x       execute-extended-command
M-~       not-modified
M-DEL     backward-kill-word


                               -- END OF FILE --

                               The BBBS License, Prices and Order Form      395


T h e   B B B S   L i c e n s e ,   P r i c e s   a n d   O r d e r   F o r m 
_______________________________________________________________________________

Read the terms and conditions of this license agreement carefully before using
the software. If you for any reason, whatsoever, cannot accept the conditions
in this agreement, you are not permitted to use BBBS.

BBBS is a proprietary product of Kim Heino and Tapani T. Salmi, hereafter "the
authors", protected by applicable copyright laws and international treaty
provisions.

BBBS is not, nor has ever been, public domain or free software. You must
register after the 30-day evaluation period. If you decide to use this
software then you are under both legal and moral obligations to register it
with the author. Registration entitles you continue using BBBS.

The registered version of BBBS may not be duplicated for other than backup
purposes. In a non registered version the user's timelimit is limited to 31
minutes. That limitation is removed from the registered version.

BBBS is provided "as is", without warranty of any kind or fitness for a
particular purpose, either expressed or implied, all of which are hereby
explicitly disclaimed. The authors only guarantees that BBBS will occupy disk
space. The authors liability resulting from your use or inability to use BBBS
is limited to the amount that the affected party has paid for it.

There are two different licenses for BBBS: commercial and noncommercial. You
may use noncommercial license only if your BBS is free for all users (new and
old ones) and it is public for everybody to log in. You must use commercial
license if you use BBBS in a company for inner or external mail or file
transfer purposes, or you run a support BBS for a company or it's products. In
short: if you get money from it then it's commercial.

One license for BBBS is valid only in one system, which may contain one or
more computers physically connected to each other all the time via LAN. You
may not use one license in two physically separated systems, i.e. in two
different offices of one company.

Some BBBS versions are distributed with object code files. These objects may
only be used to rebuild (link) BBBS executables, all other uses are strictly
forbidden.

There are two versions of BBBS, with and without RSA crypting. BBBS with RSA
may not be imported/exported to/from some countries, especially the USA and
France. Please check your local import/export laws first. The RSA library used
is fully coded in Finland and it uses 256 bit keys.

In the event that you are in violation of this license agreement you agree and
accept that the authors may cancel your registration and any rights to use
BBBS that you may have.

In doubt contact the authors.



The BBBS node license is divided in two; phone nodes and local nodes. A local
node can not be used with modem or ISDN (or modem emulating driver), it can
only be used for local/telnet/PIPE (LAN) connections. A phone node can be used
for all purposes, including local/telnet/PIPE. The minimum is 2 phone nodes

396      The BBBS License, Prices and Order Form


and 0 local nodes. See the table below for current prices in Finnish Marks
(FIM), Euros (EUR) and US Dollars (USD):


                Noncommercial  |    Commercial
 Phone nodes    FIM    EUR USD |  FIM     EUR  USD
 ------------------------------+------------------
 2              300  50.46  60 |  900  151.37  180
 5              500  84.09 100 | 1500  252.28  300
 10            1000 168.19 200 | 3000  504.56  600   !!!!!!!!!!!!!!!!!!!!!!!!!
 20            2000 336.38 400 | 6000 1009.13 1200   !!                     !!
 21 and over    ask    ask ask |  ask     ask  ask   !!  Remember:          !!
                                                     !!                     !!
                Noncommercial  |    Commercial       !!  The minimum is     !!
 Local nodes    FIM    EUR USD |  FIM     EUR  USD   !!  2 phone nodes and  !!
 ------------------------------+------------------   !!  0 local nodes.     !!
 0                0      0   0 |    0       0    0   !!                     !!
 5              100  16.82  20 |  300   50.46   60   !!!!!!!!!!!!!!!!!!!!!!!!!
 10             200  33.64  40 |  600  100.91  120
 20             400  67.27  80 | 1200  201.82  240
 21 and over    ask    ask ask |  ask     ask  ask


Upgrading the number of nodes or changing the license type will cost the
difference * 1.1. For example if you want to upgrade from 2 phone node
noncommercial license to 5 phone node noncommercial license the price in FIMs
is (500-300)*1.1 = 220 FIM. Fill in new registeration form when you want to
upgrade. When upgrading you can only increase your node amounts, you can not
decrease them.



For contacting, you may use address:

 Kim Heino / Foobar Oy
 Paavolankatu 3 D 34
 FIN-20240  TURKU
 Finland
 Internet: b@bbbs.net, Kim.Heino@utu.fi, http://www.bbbs.net, telnet://bbbs.net
 BBS/FAX/V.34/X.75: +358 2 240 7755 (BCG-Box)
 FidoNet: 2:22/222


For secure contacting use PGP and addresses above:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.3a

mQCNAi6QeWAAAAEEAMXFi3QcjcCEZJyFo4XT5d0vY/8KBS5ffoV6U8HMoU7ipEsc
Zxe8S1/fmzqzEOQ4FKljQoNHNVCZraldznKl5S8SYGcwiPV3MpzmBSbuYcmJu1ah
ZlDqR23XiGoz8Wm7auSD5MSVYM0VSkg+f/1lD1Q8knonruc+8Vv2Z4TPSAZZAAUR
tBxLaW0gSGVpbm8gPEtpbS5IZWlub0B1dHUuZmk+
=bYgJ
-----END PGP PUBLIC KEY BLOCK-----


When registering world-wide send the registration form and money to:

 Address:                                Bank-account:

                               The BBBS License, Prices and Order Form      397


 Kim Heino / Foobar Oy                   Turun Seudun Osuuspankki, Finland
 Paavolankatu 3 D 34                     571236-58198
 FIN-20240  TURKU
 Finland


When registering in the US or Canada send the registration form and money to:

 Address:
 Dimension 7 BBS
 Russ Johnson
 360 Dean Ave.
 Eugene, Or. 97404
 Fidonet: 1:152/7.0
 email: russj@dimstar.net


For registering with credit card (VISA, MasterCard, American Express, ...)
please fill the credit card information in the bottom of this form and FAX it
to Kim Heino (+358 2 240 7755) or send a printed version by regular mail.

For other methods of payment, for example Western Union, please contact us
first.



                         BBBS Registration Form                 Date: __/__/__


      Your name/company: ____________________________________________

         Street address: ____________________________________________

            Postal code: ____________________________________________

                Country: ____________________________________________

            Voice phone: ____________________________________________

 BBS name (max 18 char): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

  BBS phones/open hours: ____________________________________________

         Other BBS info: ____________________________________________

        License type:
        [_] Noncommercial license
        [_] Commercial license
        [_] Upgrade, current BBS name is __________________________,
            license number _______ and number of phone nodes ______,
            and number of local nodes ______.

        Number of phone nodes: __________
                                             Total price: __________
        Number of local nodes: __________

        Method of payment:
        [_] Money included to letter
        [_] Credit card

398      The BBBS License, Prices and Order Form


        [_] Paid to bank account number __________________, date: ____________

        Method of sending registration key to you:
        [_] by mail, in 3.5" HD DOS-disk
        [_] by email, uuencoded file to: _____________________________________
        [_] by modem from BCG-Box, username:
        [_] by modem from Dimension 7, username: _____________________________

 What kind of hardware and software are you using? (Name and model, hard disk,
 amount of RAM, modem, operating system, LAN, etc.)

 _____________________________________________________________________________

 _____________________________________________________________________________

 Other comments, ideas, etc:

 _____________________________________________________________________________

 _____________________________________________________________________________

 I have read the BBBS license agreement and fully agree to obey it.

            Signature: _________________________________________



For registration by credit card only:

Due to the fact that credit card registrations are done in Finland the prices
applied are in Finnish Marks (FIM). 300 FIM is about 60 USD.




 I wish to withdraw the sum of _______ FIM from my credit card account
 for the payment of registration of BBBS.


    Cardholder's name: ______________________________________________

 Cardholder's address: ______________________________________________

                       ______________________________________________

                       ______________________________________________

                       ______________________________________________


     Credit card type: [_] VISA
                       [_] MasterCard
                       [_] OK
                       [_] EuroCard
                       [_] American Express


          Card number: ______ ______ ______ ______


                               The BBBS License, Prices and Order Form      399


          Expiry date: ___/___


            Signature: _________________________________________

400      How to use the help system


H  o  w     t  o     u  s  e     t  h  e     h  e  l  p     s  y  s  t  e  m  
_______________________________________________________________________________

        The help system commands:

        Contents  - Shows the contents (the main help menu)
        Index     - Shows an alpateical index
        Help      - Shows you this help
        Retrace   - Shows the last helpscreen you looked at
        Browse <  - Shows the previous helpscreen in the helpfile
        Browse >  - Shows the next helpscreen in the helpfile
        Search    - Keyword search
        Quit      - Quits back to BCFG4

        When you are in the helpsystem you can move up and down with
        arrow keys. The keys Ctrl-R and Ctrl-C will scroll one page Up
        or Down.

        Often you will see words or sentences that are marked with a
        different background color. These are links to other related
        information. Just press enter when you have selected a link to
        get more information about that subject.

                                                            References      401


R  e  f  e  r  e  n  c  e  s  
_______________________________________________________________________________

See Also (if you want to know more about):

Byte, March 1991, page 309, Lossless Data Compression, by Steve Apiki
        This article describes Huffman coding and LZW coding.

Davis, Stephen R.: DESQview
        A Guide to Programming the DESQview Multitasking Environment.
        ISBN 1-55851-028-1

fts-0001
        A Basic FidoNet(r) Technical Standard.

fts-0005
        The distribution nodelist.

fts-0004
        EchoMail Specification

fts-0006
        YOOHOO and YOOHOO/2U2, The NetMail handshake used by Opus-CBCS
        and other intelligent FidoNet mail handling packages.

fts-0007
        An Enhanced FidoNet(r) Technical Standard

fts-0009
        Message identification and reply linkage.

fsc-0011
        Some thoughts on fsc-0001.

fsc-0015
        FOSSIL 5.0 Documentation.

fsc-0016
        FidoNet Mail Session Startup.

fsc-0025
        AVATAR Video Spec.

fsc-0028
        A Collection of Notes on Moving Files in FidoNet.

fsc-0037
        AVATAR 0+ Video Spec.

fsc-0039
        A Type-2 Packet Extension Proposal.

fsc-0045
        A Proposed Type-2 Packet Extension.

fsc-0048
        A Proposed Type-2 Packet Extension.

fsc-0050

402      References


        A Character Set Identifier For FidoNet Message Editors.

fsc-0053
        Specifications for the ^aFLAGS field.

fsc-0054
        A System-Independent Way of Transferring Special Characters,
        Character Sets and Style Information in FIDO Messages.

fsc-0056
        EMSI/IEMSI Protocol Definitions.

fsc-0057
        Conference Managers - Specifications for Requests

fsc-0062
        A Proposed Nodelist flag indicating Online Times of a Node

fsc-0068
        A Proposed Replacement For FTS-0004.

fsc-0072
        The HYDRA file transfer protocol.

grep(1) manual page
        Regular expression.

COMMON ISDN API
        Standard Interface between Application Programs and ISDN
        Adapters.

Murphy's Law
        Why BBBS does not work?

National Semiconductor: Data Communications, Local Area Networks, UARTs
        What the heck is this NS16550AFN anyway? Also describes other
        NS's UARTs with great details.

PC Magazine, May 26, 1992, page 361, Lab Notes, by Douglas Boling
        Putting Serial-Port Technology in Perspective, Part 2. This
        article describes serial port communication with normal and FIFO
        UARTs and IBM Type 3 UART.

rfc0821
        Simple Mail Transfer Protocol.

rfc0822
        Standard for the format of ARPA InterNet text messages.

rfc0850
        Standard for Interchange of USENET Messages

rfc0854
        Telnet protocol specification

rfc0855
        Telnet option specifications

rfc0856

                                                            References      403


        Telnet binary transmission

rfc0857
        Telnet echo option

rfc0858
        Telnet suppress go ahead option

rfc0859
        Telnet status option

rfc0860
        Telnet timing mark option

rfc0861
        Telnet extended options - list option

rfc0959
        File Transfer Protocol (FTP)

rfc0977
        Network News Transfer Protocol.

rfc1282
        BSD Rlogin

rfc1321
        The MD5 Message-Digest Algorithm.

rfc1345
        Character Mnemonics & Character Sets.

rfc1437
        The Extension of MIME Content-Types to a New Medium. The matter-
        transport/sentient-life-form MIME type is intended to facilitate
        the wider interoperation of electronic mail messages that
        include entire sentient life forms, such as human beings.

rfc1459
        Internet Relay Chat Protocol

rfc1521
        MIME (Multipurpose Internet Mail Extensions) Part One:
        Mechanisms for Specifying and Describing the Format of Internet
        Message Bodies.

rfc1522
        MIME (Multipurpose Internet Mail Extensions) Part Two:
        Message Header Extensions for Non-ASCII Text.

rfc1563
        The text/enriched MIME Content-type.

RC96AC and RC144AC Modem Designer's Guide
        All the possible info about modems based on Rockwell chip.

Tremblay, Sorenson: The Theory and Practice of Compiler Writing
        How to write your own BZC replacement. ISBN 0-07-066616-4


404      References


Your Modem Reference Guide
        How to set up your modem and initialization strings.

                        BCFG4 configuration program, table of contents      405


BCFG4 configuration program, table of contents
_______________________________________________________________________________

        The Hitchhiker's Guide To BCFG4
        ===============================

TABLE OF CONTENTS:
         The keys in BCFG
      Global
         General         
         Toggles         
         Numbers         
         Limits          
         FidoNet         
         Confs           
      Local
         General         
         Toggles         
         Modem           
         Hotlogins       
         Macros          
         Rush Hour       
         Events          
         OS              
      Other
         Exit/Don't save 
         Exit/Save       

406      Global General


G  l  o  b  a  l     G  e  n  e  r  a  l  
_______________________________________________________________________________

SUBTOPICS:
         BBBS name          
         SysOp name         
         NewUser password   
         NewUser account    
         Main directory     
         Menus directory    
         Upload directory   
         Work directory     
         Script directory   
         Feelings directory 
         Grabfile name      
         FidoNet log        
         Internet log       
         FAX receive dir    
         BTERM down dir     
         BTERM up dir       
         CD-ROM paths       
         Hostname           
         Organization       
         Remote domain      
         IRC Server         

                                                        Global Toggles      407


G  l  o  b  a  l     T  o  g  g  l  e  s  
_______________________________________________________________________________

SUBTOPICS:
         Show private messages to CoSysOps 
         Don't allow remote SysOp logins   
         Show empty nodes on Who command   
         Show SysOp in statistics          
         Don't ask address from new user   
         Don't ask birthday from new user  
         Email-O-Magic: Send all to UUCP   
         Use nodenumber, not nick          
         NewUser access: Download          
         NewUser access: Upload            
         kB/Day limit relative to 9600 bps 
         Check similar filenames in upload 
         Check for duplicate uploads       
         Global Download command           
         BRoboCop                          
         Pack messages                     
         Hide userlist                     
         Chat uses time                    
         SysNote msg                       
         Allow all names                   
         Grab is free                      
         Uploader owns file                
         Upload uses time                  
         Save NNTP headers                 
         Save SMTP headers                 
         NNTP cleanfeed                    

408      Global Numbers


G  l  o  b  a  l     N  u  m  b  e  r  s  
_______________________________________________________________________________

SUBTOPICS:
         Total nodes        
         NewUser timelimit  
         Timebank maximum   
         Timebank rate      
         WhoDown size       
         Max. desc lines    
         FAX errorlevel     
         HYDRA tx count     
         HYDRA rx count     
         Flood count        
         Max lines AllFix   
         Yelltune repeat    
         Yelltune           
         Allow Internet out 
         Max. SMTP size     

                                                         Global Limits      409


G  l  o  b  a  l     L  i  m  i  t  s  
_______________________________________________________________________________

SUBTOPICS:
         Byte Limits   
         File Limits   
         kB/Day Limits 
         Cost Limits   

410      Global FidoNet


G  l  o  b  a  l     F  i  d  o  N  e  t  
_______________________________________________________________________________

SUBTOPICS:
      General
         Site name                   
         Location                    
         Phone                       
         Speed                       
         Flags                       
         Show AKAs                   
         Nodenumbers                 
         AKA Matching                
      Sessions
         Inbound                     
         NetMail                     
         Tickdir                     
         Tranx node                  
         Rescan time                 
         Mail errorlevel             
         User mail errorlevel        
         HYDRA protocol              
         ZedZap protocol             
         Tranx your clock with EMSI  
         Mail from unlisted nodes    
         Mail from unlisted points   
         Mail from unprotected nodes 
         Poll all crashmail          
      Origins
         Origin Lines                
      FREQ
         Remote FREQ when answering  
         Remote FREQ when calling    
         Magic file list             
         Normal dir list             
         Maximum files               
         Maximum 100 kB's            
         Maximum minutes             
         Minimum baud                
      Dial
         Number of tries when busy   
         Number of tries when bad    
         Delay when busy             
         Convert from                
         Convert to                  
      BOGUS
         Temporary in pkt            
         Temporary out pkt           
         Outbound                    
         Badecho: area               
         Badecho: secure             
         Max. open files             
         Max. out pkt size           
         Max. bundle size            
         BOGUS dupes                 
         Save badecho: area          
         Save badecho: secure        
         Save all netmail msgs       
         Log headers (BMT)           

                                                        Global FidoNet      411


         Check destination (BMT)     
         NNTP gateway                
         SMTP gateway                

412      Global Conferences


G  l  o  b  a  l     C  o  n  f  e  r  e  n  c  e  s  
_______________________________________________________________________________

SUBTOPICS:
       Conference Browser  
      Conferences
         Name              
         Description       
         Fidoname          
         NNTPname/NNTPhost 
         *.MSG dir         
         Fido export       
         Moderator         
         Fido flags        
         Fido group        
         Nodenumber        
         Origin            
         Msg scan          
         BPC min           
         BPC max           
         Import            
         Export            
         Must for all      
         Invite users      
         Alias allowed     
         Allow tagline     
         Post conf.       
         Allow private     
         No reply          
         No mark reset     
         Fido area         
         No Fido strip     
         AllFix            
         NameFix           
         AGNET             
         Total             
         Post              
         Resume            
         Fileinfo          
      Multiadd
         Listfile          
         Prefix            

                                                         Local General      413


L  o  c  a  l     G  e  n  e  r  a  l  
_______________________________________________________________________________

SUBTOPICS:
         Logfile             
         Spy file            
         FD's DOBBS.BAT      
         Grab directory      
         Menus directory     
         Uptemp directory    
         Min. login bps      
         FAX baud            
         Nodemsg poll rate   
         Blackout timer      
         Sleep disconnect    
         OK/Don't poll flags 
         Lockup password     
         Lockup timeout      
         SMS server phone    
         SMS sender          

414      Local Toggles


L  o  c  a  l     T  o  g  g  l  e  s  
_______________________________________________________________________________

SUBTOPICS:
         Revbits              
         Local screen echo    
         Save screen on shell 
         Audio bell           
         Local SysOp keys     
         BackDoor enabled     
         Send crashmail       
         Slow protocols       
         Callback enabled     

                                                           Local Modem      415


L  o  c  a  l     M  o  d  e  m  
_______________________________________________________________________________

SUBTOPICS:
      General
         Init string              
         BTERM init               
         Hangup string            
         Busy string              
         Aftercall string         
         Start baud               
         Base address             
         IRQ                      
         Aftercall lines          
         Ringing count            
         Reset to connect speed   
         Hangup at logout         
         RTS/CTS handshake        
         Null modem login         
         No carrier check         
         Fast FAX                 
         'NO CARRIER is 'BUSY'    
      Answer
         Don't answer             
         Regexp                   
         Count                    
         String                   
       Dial                       
      Voice
         Data/fax answer string   
         Init string              
         Beep string              
         Playback string          
         Record string            
         Go voice mode            
         Go data mode             
         Modem device             
         Speaker device           
         Mic device               
         Compression method       
         Minimum filesize to keep 
         Voice receive dir        
         Greetings file           
         Remote password          

416      Local Events


L  o  c  a  l     E  v  e  n  t  s  
_______________________________________________________________________________

SUBTOPICS:
         Sunday                         
         Monday                         
         Tuesday                        
         Wednesday                      
         Thursday                       
         Friday                         
         Saturday                       
         Start hour                     
         Start min                      
         End hour                       
         End min                        
         Dial                           
         Errorlevel                     
         Flexible event                 
         Event is a 'must'              
         Don't allow users during event 
         Don't allow incoming mail call 
         Don't allow mail pickup        
         Don't allow file requests      
         Don't send crashmail to CM     
         Send crashmail to all systems  

                                                              Local OS      417


L  o  c  a  l     O  S  
_______________________________________________________________________________

SUBTOPICS:
         OS/2 priority        
         NT priority          
         Amiga priority       
         Show shell output    
         Allow break in shell 
         Rockwell modem       
         Fix RAR's 'feature'  
         2 color screen in /A 
         Change titlebar      

418      The keys in BCFG4


T  h  e     k  e  y  s     i  n     B  C  F  G  4  
_______________________________________________________________________________

In BCFG4, you can always select the choice you want with the cursor keys. You
can also use the home/end keys to move to the first and last item in the list,
respectively.

You can also use these Ctrl-keys:

key(s)         function
=============  =========================================================
Ctrl-n         down
Ctrl-p         up
Ctrl-f         right
Ctrl-b         left
Ctrl-x / ESC   goto previous menu
Ctrl-v / pgdn  next screen
Ctrl-u / pgup  previous screen
Ctrl-q / F1    This help
Ctrl-w / F2
Ctrl-e / F3
Ctrl-r / F4
Ctrl-t / F5
Ctrl-y / F6

                               Global: Conferences: Conference Browser      419


G l o b a l :   C o n f e r e n c e s :   C o n f e r e n c e   B r o w s e r 
_______________________________________________________________________________

The conference browser can be used to quickly move between conference entries,
reorder them, as well as insert and delete them.

You can move the selector bar with the normal editing keys. The space bar
toggles dragging mode. When dragging mode is on, the conference under the
selector bar is moved along with the selector. This way you can reorder the
conferences. Press the space bar again to "drop" the conference in the current
position.

The delete key moves the conference under the selector bar to the end of the
list.

The insert key moves the conference at the end of the list under the selector.

The s-key sorts all the conferences below the selector that have the same
prefix as the conference under the selector. Ie. if all conferences begin with
"fido." and you have the selector bar highlighting a "fido.*" conference, all
of the "fido.* conferences will be sorted alphabetically.

DO NOT change the order when there are other BBBS nodes running!

These are the keys you can use:

key(s)         function
=============  =========================================================
enter          edit current conference
ins / +        insert unnamed conference
del / -        delete highlighted conference (place at bottom of list)
u              add one Unnamed-conference here
Ctrl-k         delete current conference
home           goto first entry
end            goto last entry
Ctrl-n         down
Ctrl-p         up
Ctrl-f         right
Ctrl-b         left
Ctrl-x / ESC   goto previous menu
Ctrl-v / pgdn  next screen
Ctrl-u / pgup  previous screen
Ctrl-q / F1    This help
Ctrl-e / F3    Jump to Global: FidoNet: General
Ctrl-r / F4    Jump to Global: FidoNet: Origins
Ctrl-t / F5    Jump to Global: Confs: Multiadd
Ctrl-y / F6    Add bad echomail areas from badecho dir

The flags shown in the left column are:

flag(s)         meaning
==============  =========================================================
M-------------  Must for all
-I------------  Invite users
--A-----------  Alias allowed
---T----------  Allow tagline
----P---------  Post conference
-----p--------  Allow private
------R-------  No reply

420      Global: Conferences: Conference Browser


-------m------  No mark reset
--------F-----  Fido area
---------S----  No Fido strip
----------a---  Allfix
-----------n--  Namefix
------------Q-  AGNET
-------------N  NNTP area


Normal settings for conferences are:

-I------------  Public local
MI--P---------  Private local
-I-----------N  Newsgroup
MI--P--------N  Email
-I------F-----  Fidonet echo
MI--P---F-----  Netmail

                                                 Main: Global: General      421


M  a  i  n  :     G  l  o  b  a  l  :     G  e  n  e  r  a  l  
_______________________________________________________________________________

You can move in this menu with the standard editing keys.

Under the Global: General choice are the global settings for your BBS.

422      Main: Global: Toggles


M  a  i  n  :     G  l  o  b  a  l  :     T  o  g  g  l  e  s  
_______________________________________________________________________________

You can move in this menu with the standard editing keys.

Under the Global: Toggles choice are all the on/off toggles, which affect all
nodes of your BBS.

                                                 Main: Global: Numbers      423


M  a  i  n  :     G  l  o  b  a  l  :     N  u  m  b  e  r  s  
_______________________________________________________________________________

You can move in this menu with the standard editing keys.

Under the Global: Numbers choice are the numeric settings, which affect all
nodes of your BBS.

424      Main: Global: FidoNet


M  a  i  n  :     G  l  o  b  a  l  :     F  i  d  o  N  e  t  
_______________________________________________________________________________

Under this selection, a new submenu will pop up. All FidoNet configuration is
placed under this selection.

  General:        General FidoNet settings.
  Sessions:       Receive directories, errorlevels, etc.
  Origins:        Origin lines.
  FREQ:           FREQ limits.
  Dial:           Dial conversion.
  BOGUS:          BOGUS and BMT settings.

                                                   Main: Global: Confs      425


M  a  i  n  :     G  l  o  b  a  l  :     C  o  n  f  s  
_______________________________________________________________________________

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

In this window you can press F2 to browse conferences, F3 to edit your
nodenumber setup and F4 to edit your origin lines.

By pressing F5 you can add multiple conferences at one batch.

By pressing F6 BCFG4 will automatically check your badecho directory for new
conferences.

426      Main: Local: General


M  a  i  n  :     L  o  c  a  l  :     G  e  n  e  r  a  l  
_______________________________________________________________________________

Local options are options that affect only the node you are configuring.

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

                                                    Main: Local: Modem      427


M  a  i  n  :     L  o  c  a  l  :     M  o  d  e  m  
_______________________________________________________________________________

Options under this selection define the settings of your modem for this node.

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

428      Main: Local: Hotlogins


M  a  i  n  :     L  o  c  a  l  :     H  o  t  l  o  g  i  n  s  
_______________________________________________________________________________

Options under this selection define the hotlogin strings for the node you are
configuring.

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

                                                   Main: Local: Macros      429


M  a  i  n  :     L  o  c  a  l  :     M  a  c  r  o  s  
_______________________________________________________________________________

Options under this selection define the local keyboard macros for the node you
are configuring.

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

430      Main: Local: Rush Hour


M  a  i  n  :     L  o  c  a  l  :     R  u  s  h     H  o  u  r  
_______________________________________________________________________________

Options under this selection define the rush hour settings for the node you are
configuring.

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

                                                   Main: Local: Events      431


M  a  i  n  :     L  o  c  a  l  :     E  v  e  n  t  s  
_______________________________________________________________________________

Options under this selection define the events that the node you are
configuring should execute.

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

432      Main: Exit, don't save


M  a  i  n  :     E  x  i  t  ,     d  o  n  '  t     s  a  v  e  
_______________________________________________________________________________

Selecting this option will quit BCFG4, but does not save changes. This will
discard all the changes you have made during configuration.

See Also: Exit and save

                                                   Main: Exit and save      433


M  a  i  n  :     E  x  i  t     a  n  d     s  a  v  e  
_______________________________________________________________________________

Quit and save changes to disk. The changes you have just made will be written
to the disk. If you have any BBBS nodes running, you will be warned. To be
safe, DO NOT save the configuration while there are nodes running.

See Also: Exit, don't save

434      Global: General: BBBS's name


G l o b a l :   G e n e r a l :   B B B S ' s   n a m e 
_______________________________________________________________________________

Simply the name of your BBS.

                                         Global: General: SysOp's name      435


G l o b a l :   G e n e r a l :   S y s O p ' s   n a m e 
_______________________________________________________________________________

When a user enters a message to the name SYSOP (or a comment when there are no
comment receivers defined in the alias.bbb-file), the message will be sent to
the user with this name. It might be a good idea to change this if it is not
likely that you (or the main sysop of the system) is around to read the
messages during some perioid of time.

NOTE! the sysnote-file will still be shown only to user number 0.

436      Global: General: NewUser password


G l o b a l :   G e n e r a l :   N e w U s e r   p a s s w o r d 
_______________________________________________________________________________

This password will be asked from all new users that register to the system. If
your system is public, then it should be left empty.

                                      Global: General: NewUser account      437


G l o b a l :   G e n e r a l :   N e w U s e r   a c c o u n t 
_______________________________________________________________________________

The name of the account that new users should be members of. Empty field means
no account. "*" means the account with the user's name. Accounts can be used
(for example) to charge money from users. If you are running a free BBS, this
is best left empty.

Note that accounts are not the same as groups.

438      Global: General: Grabfile name


G l o b a l :   G e n e r a l :   G r a b f i l e   n a m e 
_______________________________________________________________________________

The "base" name of the off-line message packets that are downloaded from your
BBS. For example, if you specify "FOOBAR" here, then the grabfiles are named
foobar.qwk, foobar.zip, foobar.mo1 etc. DO NOT include a '.'-character into the
name!

(With OMEN packets, only the two first letters of this name are used, because
of the OMEN standard).

                                       Global: General: Main directory      439


G l o b a l :   G e n e r a l :   M a i n   d i r e c t o r y 
_______________________________________________________________________________

The name of the directory BBBS should store the most important files, such as
the message base, user data files and other important files. This directory
should be backed up often, preferrably each day.

440      Global: General: Menus directory


G l o b a l :   G e n e r a l :   M e n u s   d i r e c t o r y 
_______________________________________________________________________________

The name of the directory the common menus that should be used for all nodes
are stored. If you want have different menus for different nodes, you can use
the local menu directory setting. When BBBS is displaying menus, it will first
look the local menu directory, and if a suitable menu is not found, then this
directory will be searched.

                                     Global: General: Upload directory      441


G l o b a l :   G e n e r a l :   U p l o a d   d i r e c t o r y 
_______________________________________________________________________________

The name of the directory where new uploaded files should be placed.

442      Global: General: FidoNet log


G l o b a l :   G e n e r a l :   F i d o N e t   l o g 
_______________________________________________________________________________

The path and file name of the file BOGUS, BMT and BTICK should log their
activity into.

                                         Global: General: CD-ROM paths      443


G l o b a l :   G e n e r a l :   C D - R O M   p a t h s 
_______________________________________________________________________________

A regular expression defining the paths to your CD-ROM drives. When the user
tries to download from a directory matching this regexp, the file will be
copied to a different directory first to speed up downloading and allow the use
of a multiple-CD-changer.
Remember to use forward slashes ('/')!

For example, to specify paths d:, e: and f:, you should use "^[def]:" here.

In UNIX version you could use for example "^/mnt/cd".

444      Global: General: Work directory


G l o b a l :   G e n e r a l :   W o r k   d i r e c t o r y 
_______________________________________________________________________________

The name of the directory where BBBS should store the small temporary files it
creates. The files will be automatically deleted by BBBS after they are no
longer needed.

It is highly recommended to use a ramdisk for this directory as this directory
is accessed often. The approximate size required for this directory is the size
of a very long message multiplied by the amount of nodes on your system. For
example, if you have two nodes on your system, the size requirement is
approximately 128kB (2*64).

                                   Global: General: Feelings directory      445


G l o b a l :   G e n e r a l :   F e e l i n g s   d i r e c t o r y 
_______________________________________________________________________________

The name of the directory where the configuration files for
the BBBS chat system and feelings are stored.

446      Global: General: Script directory


G l o b a l :   G e n e r a l :   S c r i p t   d i r e c t o r y 
_______________________________________________________________________________

The name of the directory where BZ-language functions spawn() and exec() will
look for the executable scripts unless an explicit directory is given to them.

                                      Global: General: FAX receive dir      447


G l o b a l :   G e n e r a l :   F A X   r e c e i v e   d i r 
_______________________________________________________________________________

Incoming faxes will be stored in the directory specified here. BBBS can receive
FAXes if you have a group 3, class 2 FAXmodem and you have configured it's
adaptive answering correctly. FAXes will be saved as raw Group 3 FAX files.

You can use a utility called g3topbm to convert a 1D Huffman encoded FAX file a
to PBM file (Portable BitMap). There is also a utility called g3togif that
converts a raw G3 file directly to a GIF (Graphics Interchange Format) file.
Another well-known program is r2t (Binkley EE Raw-FAX to TIF) which converts
the raw G3 file to a TIF file.

448      Global: General: BTERM down dir


G l o b a l :   G e n e r a l :   B T E R M   d o w n   d i r 
_______________________________________________________________________________

The name of the directory BTERM should store downloaded files.

                                         Global: General: BTERM up dir      449


G l o b a l :   G e n e r a l :   B T E R M   u p   d i r 
_______________________________________________________________________________

The name of the directory BTERM should look for files when you invoke the
upload command.

450      Global: General: Internet log


G l o b a l :   G e n e r a l :   I n t e r n e t   l o g 
_______________________________________________________________________________

The name of the file where all Internet activites should be logged. If you
leave this field empty, the file specified in the FidoNet log-field will be
used.

                                           Global: General: IRC Server      451


G l o b a l :   G e n e r a l :   I R C   S e r v e r 
_______________________________________________________________________________

BBBS can interface its groupchat with the Internet Relay Chat. If you want to
do so, you should specify here the IRC server to which BBBS should connect to
when IRC features are in use. The syntax is server:port, for example
"irc.funet.fi:6667". If you leave this field empty, the IRC features are
disabled.

452      Global: Toggles: Show private messages to CoSysOps


Global: Toggles: Show private messages to CoSysOps
_______________________________________________________________________________

If this toggle is enabled, then all users with a high enough sysop level can
read the private messages in conferences. The main SysOp (user number 0) can
always do this, regardless of this setting.

                      Global: Toggles: Show empty nodes on Who command      453


Global: Toggles: Show empty nodes on Who command
_______________________________________________________________________________

If this toggle is enabled, then the main menu command Who will display also
nodes that do not have an active user on them. It might be a good idea to
disable this toggle if you have more than 10 nodes on your system to avoid
unnecessary output.

454      Global: Toggles: BRoboCop


G  l  o  b  a  l  :     T  o  g  g  l  e  s  :     B  R  o  b  o  C  o  p  
_______________________________________________________________________________

Enabling this toggle enables node-BRoboCop. BRoboCop is a automatic cop in your
system. Users can talk to it, play russian roulette, etc. BRoboCop also has
control of uploaded message packets when user is requesting something like
resign from a conference.

BRoboCop's artificial stupidity is controlled via the brobo.wht-file. The
format of the file is:

  >regexp
  text
  text
  text
  [...]

'regexp' is a regular expression. If the message the user sends to BRoboCop
matches it, then a random text line under that regexp is sent back as a reply.
This feature of BRoboCop is defined in the brobo.bz script file.

If enabled, BRoboCop will also control if the users flood (repeat the same
messages over and over) on a BBBS chat channel. When BRoboCop detects excessive
flooding by a user it will react as if the user had sent a message containing
only "FLOOD" in it and throw the user out. The number of times the same message
can be sent before BRoboCop will react can be set with the
Global: Numbers: Flood count setting.

                                        Global: Toggles: Pack messages      455


G l o b a l :   T o g g l e s :   P a c k   m e s s a g e s 
_______________________________________________________________________________

If this toggle is enabled, then BBBS will automatically compress all
entered messages, thus saving about 50% of disk space. The compression
is very fast and transparent, so you or your users will not notice any
speed change if you disable it. However, if you are using an external disk
compression utility like Stacker, it might be a good idea to disable
this.

This toggle can be enabled or disabled at any time as it only affects
new messages.

456      Global: Toggles: Show SysOp in statistics


Global: Toggles: Show SysOp in statistics
_______________________________________________________________________________

If this toggle is enabled, then the statistics of the user number 0 is
also taken into account when calculating statistics.

                      Global: Toggles: Don't ask address from new user      457


Global: Toggles: Don't ask address from new user
_______________________________________________________________________________

If this toggle is enabled, then no address or phone number will be asked
from new users.

458      Global: Toggles: Don't ask birthday from new user


Global: Toggles: Don't ask birthday from new user
_______________________________________________________________________________

If this toggle is enabled, then birthday is not asked from new users.

                                        Global: Toggles: Hide userlist      459


G l o b a l :   T o g g l e s :   H i d e   u s e r l i s t 
_______________________________________________________________________________

If this toggle is enabled, then the system will not allow users to see
the userlist (main menu command SHow) or statistics (main menu
command STAT). Also, the main menu command Who will
not show anything as users are logged in with "hide" mode.

460      Global: Toggles: Check similar filenames in upload


Global: Toggles: Check similar filenames in upload
_______________________________________________________________________________

If this toggle is enabled, BBBS will scan for similar filenames
according to the filename user just gave the system before starting upload.

                          Global: Toggles: Check for duplicate uploads      461


Global: Toggles: Check for duplicate uploads
_______________________________________________________________________________

If this toggle is enabled, then BBBS will after each upload scan your
fileareas for a file name that exactly matches the name of the file that
the user just uploaded. If one is found, the uploaded file will be
deleted.

If you are running your system on a LAN or are using the (notoriously
brain-dead) FAT file system, using a big trashfil file
is a better idea because of performance reasons. Just write (or make
your directory lister write) names of all the files in your file areas
to the trashfil file.

462      Global: Toggles: NewUser access: Download


Global: Toggles: NewUser access: Download
_______________________________________________________________________________

If this toggle is enabled, then all new users will automatically have
download access.

                               Global: Toggles: NewUser access: Upload      463


G l o b a l :   T o g g l e s :   N e w U s e r   a c c e s s :   U p l o a d 
_______________________________________________________________________________

If this toggle is enabled, then all new users will automatically have
upload access.

464      Global: Toggles: kB/Day limit relative to 9600 bps


Global: Toggles: kB/Day limit relative to 9600 bps
_______________________________________________________________________________

If this toggle is enabled, then the
Global: Limits: kB/Day-settings are relative to the
user's connect speed.

For example, if the kB-limit is 3000kB/day and the connect speed is
19200bps, user is allowed to download 6000kBs each day.

                              Global: Toggles: Global Download command      465


Global: Toggles: Global Download command
_______________________________________________________________________________

This toggle should be disabled for better operation.

If enabled, then the download command will search for files in all
directories instead of just looking in the directory the user is at the
time.

466      Global: Toggles: Chat uses time


G l o b a l :   T o g g l e s :   C h a t   u s e s   t i m e 
_______________________________________________________________________________

If this toggle is enabled, then the user's time is reduced normally
while he/she is chatting with the SysOp.

                                  Global: Toggles: SysOp Notes message      467


G l o b a l :   T o g g l e s :   S y s O p   N o t e s   m e s s a g e 
_______________________________________________________________________________

If this toggle is enabled, then the sysnote-message is also written to
the post-conference when the user #0 logs in. Otherwise, it will only be
shown to the user #0 at login.

468      Global: Toggles: Don't allow remote SysOp logins


Global: Toggles: Don't allow remote SysOp logins
_______________________________________________________________________________

If this toggle is enabled, then the user #0 can only log in from the
local keyboard, not remotely (via modem or TCP/IP). Do not disable this
unless you are absolutely sure the user #0 doesn't have to log in from
anywhere else but the local keyboard.

                      Global: Toggles: Email-O-Magic: Send all to UUCP      469


Global: Toggles: Email-O-Magic: Send all to UUCP
_______________________________________________________________________________

If this toggle is enabled, then Email-O-Magic is forced to send all
outgoing messages as to UUCP, even if the receivers name is matched. If
you want to use Email-O-Magic against some other than a BBBS gate you
must enable this toggle.

To define an Email-O-Magic conference turn postarea and fidoarea toggles
on and define the gate's address in the
Global: Conferences: Moderator-field.

470      Global: Toggles: Use nodenumber, not nick


Global: Toggles: Use nodenumber, not nick
_______________________________________________________________________________

If this toggle is enabled, then all users are forced to use a static
nick: "1" for the user on node 1 and so on. This is the old style of
node messages.

                                      Global: Toggles: Allow all names      471


G l o b a l :   T o g g l e s :   A l l o w   a l l   n a m e s 
_______________________________________________________________________________

If this toggle is enabled, then users are not required to have names
that have exactly two words. This allows systems which use just alias
names.

If you enable this toggle, remember to update your
bbbstxt-files appropriately. At least lines 17 and
63 should be changed (the "FIRST"-word should be removed).

472      Global: Toggles: Grab is free


G l o b a l :   T o g g l e s :   G r a b   i s   f r e e 
_______________________________________________________________________________

If this toggle is enabled, then grabbing (downloading an off-line
message packet) will not reduce the user's available time.

See also: Global: Toggles: Chat uses time

                                   Global: Toggles: Uploader owns file      473


G l o b a l :   T o g g l e s :   U p l o a d e r   o w n s   f i l e 
_______________________________________________________________________________

If this toggle is enabled, users can use the file menu commands
RM and DEScribe on files they have uploaded.

474      Global: Toggles: Upload uses time


G l o b a l :   T o g g l e s :   U p l o a d   u s e s   t i m e 
_______________________________________________________________________________

If this toggle is enabled, when a user uploads a file their time
is used. Otherwise the time for the upload is returned to the user.

                                       Global: Toggles: NNTP cleanfeed      475


G l o b a l :   T o g g l e s :   N N T P   c l e a n f e e d 
_______________________________________________________________________________

If enabled, BBBS tried to filter out spam when receiving messages with NNTP.
The following is the criteria BBBS uses:

  Messages with more than 15 lines of binary are allowed only in groups
  containing the word ".binaries".

  Messages crossposted in more than 5 groups are ignored.

  MD5 check of message body: only 5 copies are allowed (with a history size
  of 16000).

  Duplicate bodies in one group are ignored (with a history size of 100).

  Only 20 copies of messages without a reference header and with the same
  NNTP Posting Host, Lines, and Organization headers are allowed (with a
  history size of 5000).

These checks are done after the nntpfilt script is run, where you can do binary
decoding and other checks on incoming messages.

NOTE:  If you are using a linux system, type "man cleanfeed" for more general
information on this feature as it is styled after the linux feature.

476      Global: Numbers: Total nodes


G l o b a l :   N u m b e r s :   T o t a l   n o d e s 
_______________________________________________________________________________

The total number of nodes in your system. BRoboCop is automatically
added if it is enabled.

                                    Global: Numbers: NewUser timelimit      477


G l o b a l :   N u m b e r s :   N e w U s e r   t i m e l i m i t 
_______________________________________________________________________________

The daily time limit new users should have on your system, in minutes.

478      Global: Numbers: Timebank maximum


G l o b a l :   N u m b e r s :   T i m e b a n k   m a x i m u m 
_______________________________________________________________________________

The maximum amount of time users can save to the timebank, in minutes.

                                        Global: Numbers: Timebank rate      479


G l o b a l :   N u m b e r s :   T i m e b a n k   r a t e 
_______________________________________________________________________________

The amount of minutes that have to be deposited to the timebank before
one minute is added to the timebank.

For example: If user stores 10 minutes and timebank rate is 5, he/she
will have 2 minutes in the bank.

480      Global: Numbers: HYDRA tx


G  l  o  b  a  l  :     N  u  m  b  e  r  s  :     H  Y  D  R  A     t  x  
_______________________________________________________________________________

The size of the HYDRA transmit window. Do not change this unless you
know what you are doing.

Value entered here is multiplied with two to get the window size in
kilobytes. Entering a value of 0 means stream (no constant window).

                                             Global: Numbers: HYDRA rx      481


G  l  o  b  a  l  :     N  u  m  b  e  r  s  :     H  Y  D  R  A     r  x  
_______________________________________________________________________________

The size of the HYDRA receive window. Do not change this unless you know
what you are doing.

Value entered here is multiplied with two to get the window size in
kilobytes. Entering a value of 0 means stream (no constant window).

482      Global: Numbers: Flood count


G l o b a l :   N u m b e r s :   F l o o d   c o u n t 
_______________________________________________________________________________

Determines how many identical chat messages can be sent to a channel
before the sender is kicked out by BRoboCop.

Entering a value of 0 here disables flood checking completely.

                           Global: Numbers: Max. lines in AllFix Reply      483


Global: Numbers: Max. lines in AllFix Reply
_______________________________________________________________________________

Determines how many lines will included in BRoboCop's reply to AllFix filefind
requests. A value of 0 disables the reply.

484      Global: Numbers: Yell Tune Repeat Count


G l o b a l :   N u m b e r s :   Y e l l   T u n e   R e p e a t   C o u n t 
_______________________________________________________________________________

Determines how many times the yell tune specified in
Global: Numbers: Yell tune should be repeated.
The default is 30.

                                            Global: Numbers: Yell tune      485


G  l  o  b  a  l  :     N  u  m  b  e  r  s  :     Y  e  l  l     t  u  n  e  
_______________________________________________________________________________

The yell tune that BBBS should yell the SysOp with (on PC-DOS
and OS/2 versions only). It should be a constant note
stream. The format is as follows:

a-g mean the respective short notes. A-G mean the respective long notes.
A '+' character and a note means that the note should be played an
octave higher than normal notes. A '#' character and a note means that
the note is played one half-step higher than normal. A '@' character and a
note means that the note is played one half-step lower than normal. The
'p' character stands for pause that has the half the length of a short note.

The tune strings are the same as the ring sound definition strings used on
Ericsson mobile phones.

Here are some example tunes. Enjoy!

Rob Hubbard: Theme from "Commando" (the C64 game)
aaAAA#AppAGppaAAGagAppp#a#a#a#aApp#ApAGppeEEEE

Moonlight Densetsu (Pretty Soldier Sailor Moon opening tune)
+F+f+#D+#d+#C+C+#Dppp+#D+#d+#C+#c+C#A+#Cppppp+F+f+#D+#d+F+#G+#Fppp+#f+f+#d+F
+#D+#c+C#A

Deep Purple: Smoke on the Water
EGApEG#aAppEGAppGE

Ace of Base: Don't Turn Around
agagAdpDCDp#AAppppG

Airwolf Theme
#A#df#g+#A+#c+c#g+#A+#c+c#g+#A#g+cF#D#c#dc#g#A

Theme from "Arkanoid"
Ga#aAGA+DAppGa#aAGG#FGAGa#aAGA+DApp#A+c+d+C#A+C+F+C

Axel F
Fp#Gfpf#apfp#dpFp+Cfpf+#cp+cp#gpfp+cp+fpf#dp#dcpgpF

Bailando
AGE+cBgpeggeGpeGpGge+cBg

Original Batman opening theme
bb#a#aaa#a#abb#a#aaa#a#aBpB

Barbie Girl
afa+dBppgcg+cAppfdgpdpppagapg

Can-can
CCdfedGGgaefDDdfedcbagfedc

The Coca-Cola Theme
EeefFppDDdeEppEEeffpedpdgEC

Das Boot
Ep@e#c@ee#gBp#a#g#ab+#d+#Fpppppp#Fpf#dffa+#Cp+c#a+c+#c+f+#G


486      Global: Numbers: Yell tune


Diggi Loo, Diggi Ley
ab+C+ca+D+da@ba@b+Cpa@b+c+c+c+c+CF+Dp

Ecuador
bp#F+d+#c+e+#cabp#F+d+#c+e+#ca+dpA+#f+e+#f+e+#c+dpB+d+#c+d+#ca

Enola Gay
ffa#a+c#aaffa#a+CAddfgagfDdAGF

Europe: The Final Countdown
baBpEppp+cb+cpbpAppp+cb+CpEpppagapgp#fpapG

The Flintstones Theme
+CpFpp+Fp+dp+CpFpp+Cp@bpapap@bp+cpFpGpAp

Theme From "MacGyver"
+c+CpBpp#fAGpp+c+CBabaG+EA

Ice Cream Truck theme
ca+cafpca+cafpc@bp@bgpgF

Knight Rider Theme
gp#gg+Dpp+gp+#g+g+Dppgp#gg+dp+gp+Fpppp+fp+Gp

Mark Knopfler: Walk of Life
GpgpppdeGedpCpcpppdeGpgpppdeGedpCpcdeD

2 Unlimited: No limit
AAp+C+cAAp+C+cAAp+Ca+D+D+E+E

Happy Birthday
ccDCFEppccDCGFppcc+CAFEDp@b@bAFGF

The "doubling" sound in Finnish (RAY) Poker machines
cg#fgag#fgggfepedccg#fgag#fgggfepedc

The Simpsons theme
GpB+#C+e+DpBGe#c#c#cDpp#c#c#c#cbEpgggG

Rhythm Is A Dancer
+e+c+d+cffafgg+dgaa+ca

The Bold and the Beautiful theme
+G+Dp+g+F+Ep+c+Dppp+d+e+F+ep+c+D+cpb+CbpgFppG

Metallica: Enter Sandman
D+d+f#gG+dD+d+f#gG+dD+d+f#gGdFdedefeD

Raiders of the Lost Ark March
epfGp+CpppdpeFpppgpaBp+Fpppapb+Cp+Dp+E

Sininen ja valkoinen (Finnish traditional)
+c+c+c+cBA+c+c+c+cBAGFpFpFpbbbbAGbbbbAGFEpEpp

Twilight Zone Theme
+C+#C+CA+C+#C+CA+C+#C+CA+C+#C+CA

Theme from "Leisure Suit Larry" (add EF#F to the beginning if you like)
gaeGAegag+Cppa+c#gA+C#ga+c+d+#Dp+c+E+E+E+E+e+#d+d+#CA+e+#d+E+c+D+C

                                            Global: Numbers: Yell tune      487



Movetron: Ristinolla - slow
+#F+#c+E+#c+#f+#c+E+#C+#F+#C+Db+#Cb+db+#CA+#G+A+#F+#c+E+#c+#f+#c+E+#C+#F+#C+Db
+#Cb+db+#CA+A+#G

Movetron: Romeo & Julia, chorus (ends with g#gG#gG#gG)
gf#dFg#Dgf#dFg#D#dFFFFg#gG#gGgf#dFg#Dgf#dFg#D#dFFFF

Movetron: Romeo & Julia, intro
+#D+D+#D+#d+d+#d+F+G+F+f+#d+f+D+C+D+d+c+d+#D+F+#D+#d+d+c+#D+D+#D+#d+d+#d+F+G+F
+f+#d+f+D+C+D

William Tell overture (ends with +e+#g+B+a+#g+#f+E+#G+E)
bbBbbBbb+E+#F+#GbbBbb+E+#g+#g+#F+#DBbbBbbBbb+E+#F+#G

Theme from "Iltalypsy" (a Finnish TV program)
EG#FDEgaBp+C+CAABag#FppEG#FDEgaBp+C+CAABag#F

Alphaville: Big in Japan
FDccdFpppFDccdGpFpFDccdFfDCDApApA+Cp+Cp+C

X-Files Opening Theme with intro
a+c+e+f+e+c+f+e+c+f+e+c+epp+epp+eppA+E+D+E+G+EpppppA+E+D+E+A+E

X-Files Opening Theme without intro
A+E+D+E+G+EpppppA+E+D+E+A+Eppppp+CBAGBE

Scooter: The First Time
#G#G#g+e+#dBBBb+#c+#d+#Cppppppppp#G#G#g+e+#dBBBb+#c+#d+#C

Bon Jovi: Livin' on a Prayer
+e+eb+d+e+eb+d+g+g+#f+e+e+d+e+EBpp+g+g+#f+e+Ep+g+g+#f+e+e+eBAEpBAB

Mr. President: Coco Jamboo
G+C+Gg+C+G+#d+D+C#G+C+#D#g#A+F+#d+D+CG+C+Gg+C+G+#d+D+C+C+D+#D+c+F

Backstreet Boys: As Long As You Love Me (ugh!)
#gp#GGFGppppppGG#G#A#DppppppppppppC#DppFGFpp#D

488      Global: Numbers: Allow Internet Out


G l o b a l :   N u m b e r s :   A l l o w   I n t e r n e t   O u t 
_______________________________________________________________________________

Determines the hours you will allow online users to use internet features like
IRC, FTP, etc. from your system. They can only use the internet features
between the defined start and end times.

                               Global: Numbers: Max. SMTP message size      489


G l o b a l :   N u m b e r s :   M a x .   S M T P   m e s s a g e   s i z e 
_______________________________________________________________________________

Here you can limit the maximum size of the message in kilobytes that bbbsd will
import. This option can be used to disable flood-bombs and binary file
transfers.

0 disables this feature.

490      Global: Limits: Byte Limits


G l o b a l :   L i m i t s :   B y t e   L i m i t s 
_______________________________________________________________________________

Users with this line's limit value can download this many bytes for each
byte they upload. BRoboCop uses these numbers to control
download access. A value of 0 means unlimited. These limits are checked
instantly on an "f get" command.

                                           Global: Limits: File Limits      491


G l o b a l :   L i m i t s :   F i l e   L i m i t s 
_______________________________________________________________________________

Users with this line's limit value can download this many files for each
file they upload. BRoboCop uses these numbers to control
download access. A value of 0 means unlimited. These limits are checked
instantly on an "f get" command.

492      Global: Limits: kB/Day


G  l  o  b  a  l  :     L  i  m  i  t  s  :     k  B  /  D  a  y  
_______________________________________________________________________________

Users with this line's limit value can download this many kilobytes per
day. A value of 0 means unlimited. These limits are checked instantly on
an "f get" command.

                                                  Global: Limits: Cost      493


G  l  o  b  a  l  :     L  i  m  i  t  s  :     C  o  s  t  
_______________________________________________________________________________

Users with the limit value on this line are charged money from their account
according to these settings (if you defined any accounts).

Cost/Call is the amount charged on the start of each call.
Cost/Min is the amount charged on the start of each new minute the
         user is online.
Cost/Hour is the amount charged on the start of each new hour the
         user is online.

494      Global: Numbers: Max. desc lines


G l o b a l :   N u m b e r s :   M a x .   d e s c   l i n e s 
_______________________________________________________________________________

The maximum amount of lines user can use to describe a file in the file
area (does not effect file_id.diz or TICK import).

There is also a fixed limitation of 4096 bytes (768 for PC-DOS version)
for each file description, which cannot be changed.

                                         Global: Numbers: WhoDown size      495


G l o b a l :   N u m b e r s :   W h o D o w n   s i z e 
_______________________________________________________________________________

Defines the amount of entires BBBS will store to the whodown-database
(viewable with the file menu command WD). The value of 0 disables
download logging completely.

496      Global: Numbers: FAX error


G  l  o  b  a  l  :     N  u  m  b  e  r  s  :     F  A  X     e  r  r  o  r  
_______________________________________________________________________________

If new faxes were received after a completed FAX session, BBBS will exit
with this errorlevel. Remember that you can also use the
gotfax-script.

                                   Global: FidoNet: General: Site name      497


G l o b a l :   F i d o N e t :   G e n e r a l :   S i t e   n a m e 
_______________________________________________________________________________

This is your system's name that will be exchanged in EMSI with mailers
that poll you and that you poll. Usually your BBS name and the same as
in Global: General: BBBS's name.

498      Global: FidoNet: General: Location


G l o b a l :   F i d o N e t :   G e n e r a l :   L o c a t i o n 
_______________________________________________________________________________

The location of your system. This will be exchanged in EMSI. For example
"Turku, Finland".

                                       Global: FidoNet: General: Phone      499


G l o b a l :   F i d o N e t :   G e n e r a l :   P h o n e 
_______________________________________________________________________________

The telephone number of your system. Will be exchanged in EMSI.

500      Global: FidoNet: General: Speed


G l o b a l :   F i d o N e t :   G e n e r a l :   S p e e d 
_______________________________________________________________________________

The maximum modem speed of your BBS in bps. Will be exchanged in EMSI.

                                       Global: FidoNet: General: Flags      501


G l o b a l :   F i d o N e t :   G e n e r a l :   F l a g s 
_______________________________________________________________________________

The nodelist flags that are valid for your site. Will be exchanged in EMSI.

Example: CM,V32B,V42B,XX

   Action flags
   ============
   CM        Node accepts mail 24 hours a day
   MO        Node is "mail only", no BBS.

   Modem feature flags
   ===================
   V22       ITU-T V22     1200 bps full duplex
   V32       ITU-T V32     9600 bps full duplex
   V32B      ITU-T V32bis 14400 bps full duplex
   V34       ITU-T V34    28800 bps full duplex
   V42       LAP-M error correction, also MNP 1-4
   V42B      LAP-M error correction, also MNP 1-5
   MNP       Microcom Networking Protocol error correction
   HST       USR Courier HST
   H14       USR Courier HST up to 14.4Kbps
   H16       USR Courier HST up to 16.8Kbps
   V32T      V.32 Terbo (includes  V.32Bis)
   VFC       Rockwell V.Fast Class
   ZYX       Zyxel 16.8/19.2 Kbps (includes V42B and V32B)

   Echomail flags
   ==============

   |----------------------------------------------------------|
   |      |           Bark          |          WaZOO          |
   |      |-------------------------|-------------------------|
   |      |    File    |   Update   |    File    |   Update   |
   | Flag |  Requests  |  Requests  |  Requests  |  Requests  |
   |------|------------|------------|------------|------------|
   | XA   |     Yes    |     Yes    |     Yes    |     Yes    |
   | XB   |     Yes    |     Yes    |     Yes    |     No     |
   | XC   |     Yes    |     No     |     Yes    |     Yes    |
   | XP   |     Yes    |     Yes    |     No     |     No     |
   | XR   |     Yes    |     No     |     Yes    |     No     |
   | XW   |     No     |     No     |     Yes    |     No     |
   | XX   |     No     |     No     |     Yes    |     Yes    |
   |----------i-----------------------------------------------|

   If you have file requests enabled, the correct file request flag
   for BackDoor is XX.

   Mailer open time flags (if not 24h/day)
   ======================
   Txy       (See 'xy' from the table below)

   NOTE! All times are UTC-times (for example, Finland's summer time is
   three hours ahead of UTC)

   +------+----+ +------+----+ +------+----+ +------+----+ +------+----+
   | Char |Time| | Char |Time| | Char |Time| | Char |Time| | Char |Time|
   +------+----+ +------+----+ +------+----+ +------+----+ +------+----+

502      Global: FidoNet: General: Flags


   |   A  |0000| |   F  |0500| |   K  |1000| |   P  |1500| |   U  |2000|
   |   a  |0030| |   f  |0530| |   k  |1030| |   p  |1530| |   u  |2030|
   |   B  |0100| |   G  |0600| |   L  |1100| |   Q  |1600| |   V  |2100|
   |   b  |0130| |   g  |0630| |   l  |1130| |   q  |1630| |   v  |2130|
   |   C  |0200| |   H  |0700| |   M  |1200| |   R  |1700| |   W  |2200|
   |   c  |0230| |   h  |0730| |   m  |1230| |   r  |1730| |   w  |2230|
   |   D  |0300| |   I  |0800| |   N  |1300| |   S  |1800| |   X  |2300|
   |   d  |0330| |   i  |0830| |   n  |1330| |   s  |1830| |   x  |2330|
   |   E  |0400| |   J  |0900| |   O  |1400| |   T  |1900| |      |    |
   |   e  |0430| |   j  |0930| |   o  |1430| |   t  |1930| |      |    |
   +------+----+ +------+----+ +------+----+ +------+----+ +------+----+

   For example, if a node has a T-flag "TsF", meaning that it is open
   18:30-05:00 UTC-time (that is 21:30-08:00 Finland's summer time).

   ISDN flags
   ==========
   V110L     ITU-T V.110 19k2 asynchronous
   V110H     ITU-T V.110 38k4 asynchronous
   V120L     ITU-T V.120 56k asynchronous
   V120H     ITU-T V.120 64k asynchronous
   X75       ITU-T X.75 single link procedure, 64kbit/s B-channel
   ISDN      "Others". Should be used only if none of the above are
             correct.

                                   Global: FidoNet: General: Show AKAs      503


G l o b a l :   F i d o N e t :   G e n e r a l :   S h o w   A K A s 
_______________________________________________________________________________

In EMSI sessions, only this many AKAs (specified in
Global: Fidonet: General: Nodenumbers)
are transmitted to remote, in addition to your matching AKA, starting
from AKA number 0. If you specify 99 here, all of your AKAs will be
transmitted to remote in EMSI session (this should be used). Specifying
zero will only send your matching AKA to remote, no other AKAs.

504      Global: FidoNet: General: Nodenumbers


G l o b a l :   F i d o N e t :   G e n e r a l :   N o d e n u m b e r s 
_______________________________________________________________________________

Your nodenumbers, in 4D-format (zone:net/node.point). First nodenumber (#0)
is your main address, others are AKAs (Also Known As).

For example: 2:22/222.0

                                Global: FidoNet: General: AKA Matching      505


G l o b a l :   F i d o N e t :   G e n e r a l :   A K A   M a t c h i n g 
_______________________________________________________________________________

The AKA left to this field should be used if the nodenumber of the remote
system matches the regular expression specified here.

For example:

^[1-7]:                 Will use this nodenumber with zones 1-7
^14:15[12]0/            Will use this nodenumber with zone 14 and nets
                        1510 and 1520.

When deciding which aka to use BBBS first checks your AKA matches. If no match
found, it looks for similar zone:net/* pair, then zone:*/* and finally
fallbacks to your primary aka.

506      Global: FidoNet: Sessions: Inbound


G l o b a l :   F i d o N e t :   S e s s i o n s :   I n b o u n d 
_______________________________________________________________________________

The name of the directory where BBBS should store the incoming FidoNet files.
BTICK will check this directory for new files
and move them to the correct directory.

                                    Global: FidoNet: Sessions: NetMail      507


G l o b a l :   F i d o N e t :   S e s s i o n s :   N e t M a i l 
_______________________________________________________________________________

The name of the NetMail (FTS-0001 format) directory that BBBS should use
for file attaches.

508      Global: FidoNet: Sessions: Tickdir


G l o b a l :   F i d o N e t :   S e s s i o n s :   T i c k d i r 
_______________________________________________________________________________

The directory where BBBS should store the tick files that are about to be
sent from your system. It might be a good idea to use the
BOGUS outbound directory for these.

                                 Global: FidoNet: Sessions: Tranx node      509


G l o b a l :   F i d o N e t :   S e s s i o n s :   T r a n x   n o d e 
_______________________________________________________________________________

The node with which your system clock should be tranxed (matched) with.
Tranxing will be done each time a system with this nodenumber is connected
to. It might be a good idea to tranx your clock each night with a system that
you know has always the correct time, if you can find one.

Remember that BBBS also supports the TIME protocol with the
BTIME command.

510      Global: FidoNet: Sessions: Rescan time


G l o b a l :   F i d o N e t :   S e s s i o n s :   R e s c a n   t i m e 
_______________________________________________________________________________

BBBS will check your NetMail area for changes after this many minutes
have passed since the last check.

                            Global: FidoNet: Sessions: Mail errorlevel      511


Global: FidoNet: Sessions: Mail errorlevel
_______________________________________________________________________________

When a mail session is completed and there is received mail, BBBS will
exit with an errorlevel specified here. Remember that the
gotmail-script is also run every time mail is received.

A value of 0 means that BBBS will not exit on received mail. Note that
the gotmail-script is still run.

512      Global: FidoNet: Sessions: User mail errorlevel


Global: FidoNet: Sessions: User mail errorlevel
_______________________________________________________________________________

If a user writes a message to an area which has the
Global: Conferences: Fido area flag set, BBBS will exit
with this errorlevel after the user logs off.

A value of 0 means that BBBS will not exit.

                                      Global: FidoNet: Sessions: HYDRA      513


G l o b a l :   F i d o N e t :   S e s s i o n s :   H Y D R A 
_______________________________________________________________________________

If this toggle is enabled, the internal HYDRA protocol is used in EMSI
mail sessions.

514      Global: FidoNet: Sessions: ZedZap


G l o b a l :   F i d o N e t :   S e s s i o n s :   Z e d Z a p 
_______________________________________________________________________________

If this toggle is enabled, the internal ZedZap (ZModem variant) protocol
is enabled in EMSI mail sessions.

                               Global: FidoNet: Sessions: Tranx toggle      515


G l o b a l :   F i d o N e t :   S e s s i o n s :   T r a n x   t o g g l e 
_______________________________________________________________________________

If this toggle is enabled, BBBS will try to tranx (match) your clock with
the time of the system in address configured in
Global: FidoNet: Sessions: Tranx node.

516      Global: FidoNet: Sessions: Mail from unlisted nodes


Global: FidoNet: Sessions: Mail from unlisted nodes
_______________________________________________________________________________

If this toggle is enabled, BBBS will accept mail from nodes that are not
listed in the nodelist.

                  Global: FidoNet: Sessions: Mail from unlisted points      517


Global: FidoNet: Sessions: Mail from unlisted points
_______________________________________________________________________________

If this toggle is enabled, BBBS will accept mail from points that are not
listed on the nodelist.

518      Global: FidoNet: Sessions: Mail from unprotected nodes


Global: FidoNet: Sessions: Mail from unprotected nodes
_______________________________________________________________________________

If this toggle is enabled, BBBS will accept mail from nodes that do not
have a session password defined.

                         Global: FidoNet: Sessions: Poll all crashmail      519


Global: FidoNet: Sessions: Poll all crashmail
_______________________________________________________________________________

Normally, BackDoor will poll only crashmail that is originally from one of
your AKAs. Enabling this toggle will cause BackDoor to poll all messages
that have the crashmail bit set.

NOTE! Enabling this toggle can be very dangerous since
everybody can route NetMail to you that has the crash bit set, which might
force you to call long-distance. DO NOT enable this unless you are
absolutely sure what you are doing.

520      Global: FidoNet: Origins


G  l  o  b  a  l  :     F  i  d  o  N  e  t  :     O  r  i  g  i  n  s  
_______________________________________________________________________________

An origin line is always added to echomail messages that are exported from
BBBS, either with the BMSG or the
BOGUS commands. Origin line can (and should)
contain information about the node the message originated from. You can, for
example, place your BBS name and phone number here. The origin line that is
used can be defined separately for each conference with the
Global: Conferences: Origin-field. You can specify up
to ten origin lines.

NOTE! Your nodenumber will be added automatically to the end of
the string you enter here, so DO NOT write it on the origin line.
For example, if you specify "BCG-Box" as your origin line, the
last line added to your messages will look something like this
" * Origin: BCG-Box (2:22/222)".

                     Global: FidoNet: FREQ: Remote FREQ when answering      521


Global: FidoNet: FREQ: Remote FREQ when answering
_______________________________________________________________________________

If this toggle is enabled, remote systems can call your system and request
files from you, using the standard FidoNet FREQ protocol. Usually this
should be enabled.

522      Global: FidoNet: FREQ: Remote FREQ when calling


Global: FidoNet: FREQ: Remote FREQ when calling
_______________________________________________________________________________

If this toggle is enabled, remote systems can request files from your system
when you call them. Usually disabled.

NOTE! When you call, you also pay for the transfer. If you enable
this option, be sure you have some kind of limits set in
Global: FidoNet: FREQ: Maximum files,
Global: FidoNet: FREQ: Maximum 100 kB's or
Global: FidoNet: FREQ: Maximum minutes.

                                  Global: FidoNet: FREQ: Maximum files      523


G l o b a l :   F i d o N e t :   F R E Q :   M a x i m u m   f i l e s 
_______________________________________________________________________________

The maximum number of files your system allows for one file request session.

Normal: Maximum number of files for normal nodes
Secure: Maximum number of files for password secured sessions
Points: Maximum number of files for points

524      Global: FidoNet: FREQ: Maximum 100 kB's


G l o b a l :   F i d o N e t :   F R E Q :   M a x i m u m   1 0 0   k B ' s 
_______________________________________________________________________________

The maximum number of 100 kilobytes your system allows for one file
request session.

Normal: Maximum number of 100kB's for normal nodes
Secure: Maximum number of 100kB's for password secured sessions
Points: Maximum number of 100kB's for points

                                Global: FidoNet: FREQ: Maximum minutes      525


G l o b a l :   F i d o N e t :   F R E Q :   M a x i m u m   m i n u t e s 
_______________________________________________________________________________

The maximum number of minutes your system allows for one file request
session.

Normal: Maximum number of minutes for normal nodes
Secure: Maximum number of minutes for password secured sessions
Points: Maximum number of minutes for points

526      Global: FidoNet: FREQ: Minimum baud


G l o b a l :   F i d o N e t :   F R E Q :   M i n i m u m   b a u d 
_______________________________________________________________________________

The minimum baud rate to allow requests. If the current connection is at
lower speed, requests will not be honored.

Normal: Minimum baud rate to allow requests for normal nodes
Secure: Minimum baud rate to allow requests for secured sessions
Points: Minimum baud rate to allow requests for points

                                Global: FidoNet: Dial: Delay when busy      527


G l o b a l :   F i d o N e t :   D i a l :   D e l a y   w h e n   b u s y 
_______________________________________________________________________________

Specifies how long BBBS should wait before dialing again the number that was
busy on the previous call. Units are in minutes.

528      Global: FidoNet: Dial: Number of tries when busy


Global: FidoNet: Dial: Number of tries when busy
_______________________________________________________________________________

Specifies how many times BBBS should dial to a specific number before
giving up when the node is busy.

NOTE! You don't want to specify too high a number here. Good
values are somewhere around 30.

                       Global: FidoNet: Dial: Number of tries when bad      529


Global: FidoNet: Dial: Number of tries when bad
_______________________________________________________________________________

Specifies how many times BBBS should dial to a specifiec number before
giving up when there has been an error (such as lost carrier).

NOTE! You don't want to specify too low a number here. Good
values are somewhere around 3.

530      Global: FidoNet: Dial: Convert from


G l o b a l :   F i d o N e t :   D i a l :   C o n v e r t   f r o m 
_______________________________________________________________________________

Covert phonenumbers from. See example below:

    Convert from                  Convert to
 0:                            -> 990-
    : Adds 990- string to before every phonenumber.
    : 358-2-2404036 will be translated to 990-358-2-2404036
 1: 990-358-                   -> 0
    : Converts 990-358- string to 0
    : 990-358-2-2404036 will be translated to 02-2404036
 2: 02-                        ->
    : Takes 02- string away
    : 02-2404036 will be translated to 2404036

                                     Global: FidoNet: Dial: Convert to      531


G l o b a l :   F i d o N e t :   D i a l :   C o n v e r t   t o 
_______________________________________________________________________________

Convert phonenumbers to. See example below:

    Convert from                  Convert to
 0:                            -> 990-
    : Adds 990- string to before every phonenumber.
    : 358-2-2404036 will be translated to 990-358-2-2404036
 1: 990-358-                   -> 0
    : Converts 990-358- string to 0
    : 990-358-2-2404036 will be translated to 02-2404036
 2: 02-                        ->
    : Takes 02- string away
    : 02-2404036 will be translated to 2404036

532      Global: FidoNet: FREQ: Magic files


G l o b a l :   F i d o N e t :   F R E Q :   M a g i c   f i l e s 
_______________________________________________________________________________

The path and file name of the file containing your "magic" file list.
Magic file list can be used to give distinctive and easy to remember
names to files that are often requested from your system, such as
software your BBS supports. The format of the magic file list is
simple: every line defines one magic name so that the first field
in each line is the actual magic name. After it should come the file
names that are sent to the remote system, separated from each other
with one or more spaces.

If a file name under a magic name begins with the '@'-character, then
BBBS will execute a script with the name that comes after the
'@'-character. For example, a magic file definition line of:

update  @/bbs/scripts/update

Would run the script "/bbs/scripts/update" each time the file "update"
is requested from your system.

A magic file list could look like the following:

files    /bbs/files/bcgbox.fil
about    /bbs/bcgbox.txt
dosbbbs  /pub/bbbs/bbbs_d.zip
os2bbbs  /pub/bbbs/bbbs_2.zip
secret   @script

You can also use other RP (Request Processors) with BBBS, for example, AllFix.
This would be accomplished by putting * @allfix in this field. This
tells BBBS to execute the allfix script (BZ, REXX, Java, or Perl) each time it
processes one FREQ. It passes the filename and the transferlist as a
parameter. To use these parameters, create a BZ script like below and replace
"..." with the commands required to load AllFix or your other RP.

#include <stdlib.bzh>

int main(char freq, char tlist) {
  ...
}

                                    Global: FidoNet: FREQ: Normal dirs      533


G l o b a l :   F i d o N e t :   F R E Q :   N o r m a l   d i r s 
_______________________________________________________________________________

The path and file name of a file containing the directories file requests
can be made from in addition to your file areas. In this file, each line
specifies one directory.

Remember that your file areas will be searched before the directories
specified in this file.

534      Global: Conferences: Total


G  l  o  b  a  l  :     C  o  n  f  e  r  e  n  c  e  s  :     T  o  t  a  l  
_______________________________________________________________________________

The total number of conferences you want to have in your system. You can
change this number any time. If you want to remove conferences, just
decrease this number. The conferences aren't deleted, so when you increase
this number again, the old conferences are still there.

                                             Global: Conferences: Post      535


G  l  o  b  a  l  :     C  o  n  f  e  r  e  n  c  e  s  :     P  o  s  t  
_______________________________________________________________________________

The number of the conference you want to use as your post conference.
Messages entered with the 'COMment' command are stored here. This should
NOT be your NetMail area.

536      Global: Conferences: Resume


G l o b a l :   C o n f e r e n c e s :   R e s u m e 
_______________________________________________________________________________

The number of the conference you want to use as the resume conference (for
the informative messages users can write using the utility menu
command 'RES'). Using the number 65535 here will disable the resume
conference.

                                         Global: Conferences: Fileinfo      537


G l o b a l :   C o n f e r e n c e s :   F i l e i n f o 
_______________________________________________________________________________

The number of the conference you want to use as the fileinfo conference
(extra information of uploaded files is entered in this conference).
Using the number 65535 here will disable the fileinfo conference.

538      Global: Conferences: Name


G  l  o  b  a  l  :     C  o  n  f  e  r  e  n  c  e  s  :     N  a  m  e  
_______________________________________________________________________________

The name of the selected conference. Some more-or-less standard names are
"News" for news from SysOp to users, "Post Office" (or Post) for private
messages, "NetMail" for private FidoNet messages, "Users" (or Resume) for
users  resumes, "Fileinfo" for fileinfo messages, etc.

By pressing F5 you can add multiple conferences at one batch from
fidonet.na type text file.

By pressing F6 BCFG4 will automatically check your badecho
directory for new conferences.

                                      Global: Conferences: Description      539


G l o b a l :   C o n f e r e n c e s :   D e s c r i p t i o n 
_______________________________________________________________________________

The conference description, users will see this description when joining to
conferences with the read menu command 'Join', as well as each time users
start reading messages in this conference.

540      Global: Conferences: *.MSG path


G l o b a l :   C o n f e r e n c e s :   * . M S G   p a t h 
_______________________________________________________________________________

Path to FTS-0001 format (MSG) messages for this area.

When exporting messages, BMSG places messages in this directory. After
export you should run your message tosser (e.g. GEcho) in SCAN
mode. Tosser scans your message areas for new messages and creates outbound
mail packets. When your tosser has performed the operation you can remove
all files from this directory.

                                Global: Conferences: NNTPName/NNTPHost      541


G l o b a l :   C o n f e r e n c e s :   N N T P N a m e / N N T P H o s t 
_______________________________________________________________________________

These options should be empty (zero) if you are not polling messages
from NNTP hosts.

NNTPName is the real name of this newsgroup in the NNTP server. Host number
is the NNTP server number, given in BNNTP
command line.

If NNTPName is "-", then the name of the conference is used.

To define an email conference set newsgroup name to "-" and toggle the
Global: Conferences: Post conf. flag on for an area.

542      Global: Conferences: Msg scan


G l o b a l :   C o n f e r e n c e s :   M s g   s c a n 
_______________________________________________________________________________

Specifies the number of unread messages that should be presented to the
user when he/she joins the selected conference for the first time.

                                       Global: Conferences: Nodenumber      543


G l o b a l :   C o n f e r e n c e s :   N o d e n u m b e r 
_______________________________________________________________________________

The number of the AKA specified in
Global: Fidonet: General: Nodenumbers that should be
used for the selected area. This should only be defined if this
conference is connected to a FidoNet technology network. For a local
message area, the value of this option does not matter.

You can press the F3 key to see/edit your nodenumbers.

544      Global: Conferences: Origin


G l o b a l :   C o n f e r e n c e s :   O r i g i n 
_______________________________________________________________________________

The number of the origin line specified in
Global: FidoNet: Origins that should be used in this
conference. This should only be defined if this conference is connected
to a FidoNet technology network. For a local message area, the value of
this option does not matter.

You can press the F4 key to see/edit your origin lines.

                                        Global: Conferences: Moderator      545


G l o b a l :   C o n f e r e n c e s :   M o d e r a t o r 
_______________________________________________________________________________

If this conference is premoderated, you should specify moderator's FidoNet
address here. If it's not moderated, use 0:0/0.0 in this field.

BBBS uses PISKI moderating. The message is saved as public message
to conference, but when sending it to other FidoNet nodes, it is moved to
NetMail as a private message to moderator's node. It's moderators job to
move it again to conference or delete the message.

Usually you should just use "0:0/0.0" here. Use "2:22/222.0" in BBBS.SYSOP.

546      Global: Conferences: BPC min


G l o b a l :   C o n f e r e n c e s :   B P C   m i n 
_______________________________________________________________________________

The default minimum amount of messages for BPC.

When your conference reaches to total BPC max messages old messages are
deleted so that there will be BPC min messages left when BPC is run
with the the 'B' argument.

A couple of examples:

# messages   BPC min   BPC max    Action
========================================================================
     0         100       200      Nothing happens
    50         100       200      Nothing happens
   100         100       200      Nothing happens
   150         100       200      Nothing happens
   200         100       200      Nothing happens
   250         100       200      Conf. is packed, 100 messages are left
   300         100       200      Conf. is packed, 100 messages are left

                                          Global: Conferences: BPC max      547


G l o b a l :   C o n f e r e n c e s :   B P C   m a x 
_______________________________________________________________________________

The default maximum amount of messages for BPC.

When your conference reaches to total BPC max messages old messages are
deleted so that there will be BPC min messages left when BPC is run
with the the 'B' argument.

For examples, see the BPC min option.

548      Global: Conferences: Must for all


G l o b a l :   C o n f e r e n c e s :   M u s t   f o r   a l l 
_______________________________________________________________________________

If this toggle is enabled, users cannot resign from the selected
conference with the read menu command 'RESign'.

                                     Global: Conferences: Invite users      549


G l o b a l :   C o n f e r e n c e s :   I n v i t e   u s e r s 
_______________________________________________________________________________

If this toggle is enabled, then users are automatically invited as
members of the selected conference on their first call.

550      Global: Conferences: Post conf.


G l o b a l :   C o n f e r e n c e s :   P o s t   c o n f . 
_______________________________________________________________________________

If this toggle is enabled, then the selected conference can contain
only private messages. This toggle should be enabled for local post,
NetMail and EMail conferences.

                                    Global: Conferences: Allow private      551


G l o b a l :   C o n f e r e n c e s :   A l l o w   p r i v a t e 
_______________________________________________________________________________

If this toggle is enabled, then both public and private messages are
allowed on the selected conference.

552      Global: Conferences: No reply


G l o b a l :   C o n f e r e n c e s :   N o   r e p l y 
_______________________________________________________________________________

If this toggle is enabled, then users cannot reply to messges written
to the selected conference.

                                    Global: Conferences: No mark reset      553


G l o b a l :   C o n f e r e n c e s :   N o   m a r k   r e s e t 
_______________________________________________________________________________

If this toggle is enabled, then users cannot mark the messages on the
selected conference as read; they must read them all.

554      Global: Conferences: Fido area


G l o b a l :   C o n f e r e n c e s :   F i d o   a r e a 
_______________________________________________________________________________

If this toggle is enabled, then BBBS will consider this area as a FidoNet
one, and treat it accordingly. This should naturally be enabled on all
the conferences you want to be connected to a FidoNet technology network.

                                       Global: Conferences: AGNET area      555


G l o b a l :   C o n f e r e n c e s :   A G N E T   a r e a 
_______________________________________________________________________________

If this toggle is enabled, then this conference will function as an
AGNET area.

556      Global: Conferences: No Fido strip


G l o b a l :   C o n f e r e n c e s :   N o   F i d o   s t r i p 
_______________________________________________________________________________

If this toggle is enabled, then BOGUS will
save SEEN-BY and PATH lines as kludges into imported messages.
BMSG will save all kludge lines and SEEN-BY lines
as visible lines in messages.

                                           Global: Conferences: AllFix      557


G l o b a l :   C o n f e r e n c e s :   A l l F i x 
_______________________________________________________________________________

If this toggle is enabled, then BBBS will answer AllFix-requests from
remote systems in this area. Requests posted by local users are ignored.

Note! Do not enable this on your NetMail area!

AllFix request is a simple way to find a specific file(s) from remote
systems by using wildcards or keyscan. The structure of a message to
AllFix is very simple. The message must be addressed to AllFix. The
subject line must contain a list of file specifications or keywords.
Keywords must be enclosed within double quotes and/or started with dash
character. You can put more than one word within the quotes.

For example, in the following message, Super Luser is looking for the latest
version of BBBS and a help file.

-----------------------------------------------------
AllFix-area message #42 from SUPER LUSER to ALLFIX.
   Entered on 18th November, 1993 at 12:41, 1 lines.

Subject: bbbs* "help file"
==========================

Just looking for...
-----------------------------------------------------

The message text (body) is ignored. BBBS recognizes messages addressed to
ALLFIX, BROBOCOP, FILEMGR and ARCHIE.

Please note that when user is looking for file snip* and keyword
snip, the same file will be reported twice.

To disable AllFix scan for certain file directory use "@r:all" flag in the
filedir* file. AllFix does not belong to the
"all" group!

If you enable both AllFix and NameFix in the same area
and BBBS receives a message addressed to BRoboCop, both files and users
are checked.

558      Global: Conferences: NameFix


G l o b a l :   C o n f e r e n c e s :   N a m e F i x 
_______________________________________________________________________________

If this toggle is enabled, BBBS will answer NameFix-requests from remote
systems in this conference. Requests posted by local users are ignored.

Note! Do not enable this on your NetMail area!

NameFix request is a simple way to find a specific user from remote systems.
The structure of a message to NameFix is very simple. The message must be
addressed to NameFix. The subject line must contain name of the
user you are looking for.

For example, in the following message, Super Luser is looking for user
called Test User.

-----------------------------------------------------
NameFix-area message #42 from SUPER LUSER to NAMEFIX.
   Entered on 18th November, 1993 at 12:41, 1 lines.

Subject: Test User
==================

Where is she?
-----------------------------------------------------

The message text (body) is ignored. BBBS recognizes messages addressed to
NAMEFIX, BROBOCOP, WHOIS and FINGER.

If you enable both AllFix and NameFix in the same area
and BBBS receives a message addressed to BRoboCop, both files and users
are checked.

                                    Global: Conferences: Alias allowed      559


G l o b a l :   C o n f e r e n c e s :   A l i a s   a l l o w e d 
_______________________________________________________________________________

If this toggle is enabled, then users can write messages using alias names
(set with the 'u set alias' command) in the selected conference.

560      Global: Conferences: Allow taglines


G l o b a l :   C o n f e r e n c e s :   A l l o w   t a g l i n e s 
_______________________________________________________________________________

When this option is enabled, BBBS will allow taglines to be present in messages
it saves. If disabled, BBBS will strip taglines from any messages (locally
entered or offline) before saving to the message base.

                                           Global: Conferences: Import      561


G l o b a l :   C o n f e r e n c e s :   I m p o r t 
_______________________________________________________________________________

This field determines the charset that should be used when importing
messages to the selected conference. This is most likely ISO (ISO Latin-1)
or IBM ("standard" PC charset).

You can use the hotkeys 1234567890+ to select, or toggle with space.

562      Global: Conferences: Export


G l o b a l :   C o n f e r e n c e s :   E x p o r t 
_______________________________________________________________________________

This field determines the charset that should be used when exporting
messages from the selected conference. This is most likely ISO (ISO Latin-1)
or IBM ("standard" PC charset).

You can use the hotkeys 1234567890+ to select, or toggle with space.

                                        Global: Conferences: Fido name      563


G l o b a l :   C o n f e r e n c e s :   F i d o   n a m e 
_______________________________________________________________________________

Determines the selected conference's network name for FidoNet technology
networks. Use "-" if it is the same as the real name of the conference
(specified in Global: Conferences: Name).

564      Global: Conferences: Fido export


G l o b a l :   C o n f e r e n c e s :   F i d o   e x p o r t 
_______________________________________________________________________________

Specifies the nodenumbers to which messages from this conference are to
be exported, separated with spaces.

                                       Global: Conferences: Fido group      565


G l o b a l :   C o n f e r e n c e s :   F i d o   g r o u p 
_______________________________________________________________________________

Specifies the one character FidoNet group ID for this conference. Used
just to group different networks under one ID.

566      Global: Conferences: Fido flags


G l o b a l :   C o n f e r e n c e s :   F i d o   f l a g s 
_______________________________________________________________________________

Specifies the flags for this area. Valid flags are:

S       Area is secure
V       Area is "visible"
D       No dupe checking for this area
>       Allow only message export
<       Allow only message import

                               Global: Conferences: Multiadd: Listfile      567


G l o b a l :   C o n f e r e n c e s :   M u l t i a d d :   L i s t f i l e 
_______________________________________________________________________________

Full filename to fidonet.na type text file with conference names and
descriptions. Press ESC to start updating.

Adding many conferences can take several minutes. Patience
is a virtue.

568      Global: Conferences: Multiadd: Prefix


G l o b a l :   C o n f e r e n c e s :   M u l t i a d d :   P r e f i x 
_______________________________________________________________________________

Specifies the prefix string to be added to conference names.

                                               Local: General: Logfile      569


L  o  c  a  l  :     G  e  n  e  r  a  l  :     L  o  g  f  i  l  e  
_______________________________________________________________________________

The file and path of the file where BBBS should log various activity
by the users that were logged on to this particular node (the node
you specified when starting BCFG4).

570      Local: General: Spy file


L  o  c  a  l  :     G  e  n  e  r  a  l  :     S  p  y     f  i  l  e  
_______________________________________________________________________________

You should leave this entry empty. However, if you want very detailed
information about the user activity on this particular node, you can
specify here the file where all commands of the users should be logged.

Note that there is also the sysop command 'spy' that can be used to
spy on a node temporarily.

                                        Local: General: FD's DOBBS.BAT      571


L o c a l :   G e n e r a l :   F D ' s   D O B B S . B A T 
_______________________________________________________________________________

If you want to use BBBS's internal answer mode this field MUST be left empty.

Otherwise, you can specify a path to a FrontDoor version 2.02 -type
DOBBS.BAT file, if you want to use FrontDoor instead of BBBS's internal
answering mode. BBBS will look into this file to find out the user's
baud rate and other information. The file specified should contain only one
line in the following format:

x s x n i

x = anything, may not contain spaces
s = connect speed
n = time for next event, or "x", if not specified
i = other connection information from modem (may contain spaces)

572      Local: General: Grab directory


L o c a l :   G e n e r a l :   G r a b   d i r e c t o r y 
_______________________________________________________________________________

Specifies the directory where BBBS should temporarily store grabfiles (off-line
message packets).

Note! This MUST point to an empty directory!

                                       Local: General: Menus directory      573


L o c a l :   G e n e r a l :   M e n u s   d i r e c t o r y 
_______________________________________________________________________________

Local menus for this node are here. You can have common menus for all nodes
with global menu directory setting.

BBBS will first look this directory for menus and if the menu file is not found
here the common menu directory will be searched. Some files, like global
bulletins are only looked from common menu directory.

574      Local: General: Uptemp directory


L o c a l :   G e n e r a l :   U p t e m p   d i r e c t o r y 
_______________________________________________________________________________

Uploads are temporarily stored here. After user has described uploaded files,
they are moved to the upload directory (defined in Global: General: Upload
directory).

MUST BE EMPTY DIRECTORY!

                                       Local: General: Min. login baud      575


L o c a l :   G e n e r a l :   M i n .   l o g i n   b a u d 
_______________________________________________________________________________

If you wish, you may specify a minimum speed for callers so as to lock out
users using slower modems from this particular node. If you leave the option
set at zero all users will be allowed to connect.

576      Local: General: Nodemsg poll rate


L o c a l :   G e n e r a l :   N o d e m s g   p o l l   r a t e 
_______________________________________________________________________________

How often to poll nodemessages. Smaller values are faster. One unit is about
two seconds.

                                        Local: General: Blackout timer      577


L o c a l :   G e n e r a l :   B l a c k o u t   t i m e r 
_______________________________________________________________________________

Blank screen when blackout timer (in minutes) has expired with no activity on
internal answer mode. Use 0 to disable.

578      Local: Toggles: Local screen echo


L o c a l :   T o g g l e s :   L o c a l   s c r e e n   e c h o 
_______________________________________________________________________________

Normally you can see exactly what is happening when a remote user is logged in.
This can use quite a bit of resources on a loaded system, and if you don't
really need to see what is going on then you can use this option to tell the
system not to update the local screen while remote users are using the system.

You can toggle the local screen echo back on at any time by pressing the F10
key for the rest of the current user session. You can also press Alt-E to turn
it on/off temporarily.

                                  Local: Toggles: Save screen on shell      579


L o c a l :   T o g g l e s :   S a v e   s c r e e n   o n   s h e l l 
_______________________________________________________________________________

Restore original screen after external program.

580      Local: Toggles: Audio bell


L  o  c  a  l  :     T  o  g  g  l  e  s  :     A  u  d  i  o     b  e  l  l  
_______________________________________________________________________________

Enables local audio bell. If bell is disabled, you won't hear if someone is
yelling you.

                                      Local: Toggles: Local SysOp keys      581


L o c a l :   T o g g l e s :   L o c a l   S y s O p   k e y s 
_______________________________________________________________________________

Allow all local users to use local sysop keys. If turned off then the user for
example cannot use the sysop local-keys to give temporary sysop privileges to
the user logged in. This might be useful if you are running a local system in
order to prevent the users from giving themselves sysop rights or change the
time limit. You can see help for the keys by pressing shift-F10. You can use
F10 to get information about the caller for the node.

582      Local: Toggles: Callback enabled


L o c a l :   T o g g l e s :   C a l l b a c k   e n a b l e d 
_______________________________________________________________________________

Enables the callback.bz script. If this is not toggled, the callback script
will NOT work.

                                      Local: General: Sleep disconnect      583


L o c a l :   G e n e r a l :   S l e e p   d i s c o n n e c t 
_______________________________________________________________________________

Users who are logged into the system have to type something to keep the system
alive. If it looks as they have fallen asleep then we just hangup on them. The
sleep disconnect is the time in minutes we wait. Set it to zero to disable this
feature.

Remember also that before sleep disconnect, the snooze-script is run.

584      Local: General: Send crashmail


L o c a l :   G e n e r a l :   S e n d   c r a s h m a i l 
_______________________________________________________________________________

Enables crashmail polling for this node. All crash mail will be sent
immediately.

                                              Local: General: BackDoor      585


L  o  c  a  l  :     G  e  n  e  r  a  l  :     B  a  c  k  D  o  o  r  
_______________________________________________________________________________

Enables BBBS's internal FidoNet mailer, BackDoor, for this node. Normal human
callers will not notice anything if enabled. Must be enabled for allowing other
BBSes to transfer mail and files with you.

586      Local: General: FAX baud


L  o  c  a  l  :     G  e  n  e  r  a  l  :     F  A  X     b  a  u  d  
_______________________________________________________________________________

New baud rate when receiving FAXes. Some modems want it to be 19200, ZyXEL and
Nokia do not. If no change is required, use 0.

                                       Local: General: Lockup password      587


L o c a l :   G e n e r a l :   L o c k u p   p a s s w o r d 
_______________________________________________________________________________

The password that has to be entered before any of the local sysop keys can be
used. Local sysop keys will be locked when the lockup timeout expires.

588      Local: General: Lockup timeout


L o c a l :   G e n e r a l :   L o c k u p   t i m e o u t 
_______________________________________________________________________________

The time that has to pass before the local sysop keys are locked with the
lockup password. Units are seconds in the range 1-65500. Using value 0 here
disables the locking of the sysop keys.

                                      Local: General: SMS server phone      589


L o c a l :   G e n e r a l :   S M S   s e r v e r   p h o n e 
_______________________________________________________________________________

In some countries, like Finland, there is a service called SMS (Short Message
Service) which uses the EMI protocol to exchange short messages. It uses GSM
(1900MHz, PCN) to accomplish this.

This field is for your local SMS server's phone number. To obtain this, contact
your local GSM operator. BBBS (or BTERM) will call the SMS server, handshake
with the EMI protocol, and send the message. If this node is a TCP/IP node, you
should put your SMS server's IP address instead.

590      Local: General: SMS sender


L  o  c  a  l  :     G  e  n  e  r  a  l  :     S  M  S     s  e  n  d  e  r  
_______________________________________________________________________________

This field is for the SMS sender's phone number (generally will be your own
phone number).

                                        Local: Toggles: Slow protocols      591


L o c a l :   T o g g l e s :   S l o w   p r o t o c o l s 
_______________________________________________________________________________

Normally this option is off.

When turned on, BBBS will use Slow-HYDRA and Slow-Zmodem instead of HYDRA and
Zmodem in EMSI sessions of this node. Slow versions should be used on non-8bit
links (as telnet nodes).

592      Local Toggles: Callback enabled


L o c a l   T o g g l e s :   C a l l b a c k   e n a b l e d 
_______________________________________________________________________________

When enabled, this node will allow usage of the callback.bz script. Otherwise
the callback.bz script is disabled.

                                            Local: General: Poll flags      593


L  o  c  a  l  :     G  e  n  e  r  a  l  :     P  o  l  l     f  l  a  g  s  
_______________________________________________________________________________

BackDoor will not poll crashmail to nodes whose nodelist entry matches "don't
poll" regexp and will poll only to nodes whose nodelist entry matches "ok poll"
regexp. These options should be used on multinode systems to make sure BackDoor
will use your modemx to poll remotes modemx and your modemy on another node to
poll remotes modemy. You can also use this option to hold all outgoing mail to
certain systems or systems who only have V22 modem.

594      Local: Toggles: Revbits


L  o  c  a  l  :     T  o  g  g  l  e  s  :     R  e  v  b  i  t  s  
_______________________________________________________________________________

Some fax modems use reversed bit order in send and/or receive. For most modems
these options should be off (direct bit order), ZyXEL uses direct for receive
and reversed for send, USR Sportster uses reversed for both.

See also AT+FBOR (Class 2) and AT+FBO (Class 2.0) commands from your modem's
manual.

                                    Local: Modem: General: Init string      595


L o c a l :   M o d e m :   G e n e r a l :   I n i t   s t r i n g 
_______________________________________________________________________________

String(s) to be sent for the modem upon initializing.

Here is couple of examples for different modems:

Modem:          Init-1                    Init-2
========================================================================
Asta 2400E      ATZ|                      ATM0E0|
GVC             ATZ|                      ATM0E0|
Nokia ECM FAST  ATZ|
Supra 14400     AT&F2M0E0S95=45W2|
Supra 2400      ATZ|                      ATM0E0X3|
USR V.34        AT&F1S0=0M0X4E0|
Zoom            ATZ|                      AT%E2M0E0|
ZyXEL           AT&F2M0E0|

Following meta-chars are available:

|      Enter, Cr, ^M
<      Lower DTR (hangup)
>      Raise DTR
~      0.5s delay

If you want to be able to receive FAXes, you must turn on your modem's adaptive
answer. Here is couple of examples:

Nokia ECM FAST:  AT+FCLASS=2+FCLASS=0+FLID="fax_id"|
                 AT+FAA=1|
Supra 14400:     AT+FCLASS=0;+FAA=1;+FCR=1;+FDCC=1,5,0,2,0,0,0,0|
                 AT+FLID="fax_id";&K3|
Rockwell:        AT+fcr=1;+fdcc=1,5,0,2,0,0,0,0;+fae=0;+fclass=0|
                 AT+flid="fax_id";+faa=1|
USR V.34:        Init1: AT+FCLASS=2.0|
                 Init2: AT+FLI="fax_id"+FBO=1|
                 BTERM Init: AT+FCLASS=0|
                 Answer: ATS2=255+FAA=1;A|
ZyXEL:           AT#B0#V1#T0#L2+FLID=fax_id|
                 AT+FCLASS=0|
Terton ET:       Init1: ATZ|
                 Init2: AT+FCLASS=1;+FCLASS=0;+FLID="fax_id"|
                 Answer: ATS2=255+FAA=1;A|
Generic:         AT+FCLASS=0;+FCR=1;+FDCC=1,5|
Generic answer:  AT+FAA=1;A|

BBBS requires line speed (DCE) in CONNECT-response from your modem, not the
speed between your computer and your modem (DTE).

596      Local: Modem: General: BTERM init string


Local: Modem: General: BTERM init string
_______________________________________________________________________________

String(s) to be sent for the modem when entering BTERM.

Following meta-chars are available:

|      Enter, Cr, ^M
<      Lower DTR (hangup)
>      Raise DTR
~      0.5s delay

For all modems, there should be the command ATS5=127 in this field to change
the del character from Ctrl-H to del, which is correct for BTERM.

                                  Local: Modem: General: Hangup string      597


L o c a l :   M o d e m :   G e n e r a l :   H a n g u p   s t r i n g 
_______________________________________________________________________________

String to sent for the modem to hang up the phone.

Following meta-chars are available:

|      Enter, Cr, ^M
<      Lower DTR (hangup)
>      Raise DTR
~      0.5s delay

598      Local: Modem: General: Busy string


L o c a l :   M o d e m :   G e n e r a l :   B u s y   s t r i n g 
_______________________________________________________________________________

String to sent for the modem to make line busy.

Following meta-chars are available:

|      Enter, Cr, ^M
<      Lower DTR (hangup)
>      Raise DTR
~      0.5s delay

                               Local: Modem: General: Aftercall string      599


L o c a l :   M o d e m :   G e n e r a l :   A f t e r c a l l   s t r i n g 
_______________________________________________________________________________

This string is sent to the modem after caller has disconnected. It can be used
for debugging purposes. Usually you don't want to use this, but if you do,
remember to specify aftercall lines too. For example ZyXEL supports "ATI2"
which will dump line info to screen.

Following meta-chars are available:

|      Enter, Cr, ^M
<      Lower DTR (hangup)
>      Raise DTR
~      0.5s delay

600      Local: Modem: General: Aftercall lines


L o c a l :   M o d e m :   G e n e r a l :   A f t e r c a l l   l i n e s 
_______________________________________________________________________________

BBBS will log this many lines after aftercall string. There is also 5s timeout.

                                     Local: Modem: General: Start baud      601


L o c a l :   M o d e m :   G e n e r a l :   S t a r t   b a u d 
_______________________________________________________________________________

Initialize modem with this baud rate. Usually the maximum baud rate your modem
can handle.

This is not the maximum baud rate your modem can transfer data with another
modem (like 14400 bps, DCE speed), but the maximum baud rate your modem and and
your computer can talk (like 38400 or 57600 bps, DTE speed).

BBBS/D supports only baud rates up to 115200.

In BBBS/L you should also give "setserial /dev/ttyS? spd_vhi" command for
correct tty before starting BBBS.

602      Local: Modem: General: Base address


L o c a l :   M o d e m :   G e n e r a l :   B a s e   a d d r e s s 
_______________________________________________________________________________

Base address (port) for your comport entered as a hexadecimal number.

The default comport setup is (you can specify different, of course):

        Port   Base  IRQ
        ================
        COM1   03f8    4
        COM2   02f8    3
        COM3   03e8    4
        COM4   02e8    3

This option is used only in BBBS/D.

                                            Local: Modem: General: IRQ      603


L  o  c  a  l  :     M  o  d  e  m  :     G  e  n  e  r  a  l  :     I  R  Q  
_______________________________________________________________________________

IRQ for your comport.

The default comport setup is (you can specify different, of course):

        Port   Base  IRQ
        ================
        COM1   03f8    4
        COM2   02f8    3
        COM3   03e8    4
        COM4   02e8    3

This option is used only in BBBS/D.

604      Local: Modem: General: Ringing count


L o c a l :   M o d e m :   G e n e r a l :   R i n g i n g   c o u n t 
_______________________________________________________________________________

Remote is considered as down after this many number of RINGING messages.

                         Local: Modem: General: Reset to connect speed      605


Local: Modem: General: Reset to connect speed
_______________________________________________________________________________

If you want to run at constant speed between your modem and the computer (and
have set the modem up correctly) you must turn off this option (and most
probably RTS/CTS handshake on to ensure that data is not lost).

606      Local: Modem: General: Hangup at logout


L o c a l :   M o d e m :   G e n e r a l :   H a n g u p   a t   l o g o u t 
_______________________________________________________________________________

Hang up the phone after user logs off.

                              Local: Modem: General: RTS/CTS handshake      607


Local: Modem: General: RTS/CTS handshake
_______________________________________________________________________________

RTS/CTS handshake is used in certain cases to ensure that the modem does not
feed BBBS faster than it can handle, or more likely, especially when using a
constant speed interface, that BBBS does not feed the modem faster than it can
handle. If you are using speed reseted to connect speed you probably don't need
handshaking.

608      Local: Modem: General: Null modem login


L o c a l :   M o d e m :   G e n e r a l :   N u l l   m o d e m   l o g i n 
_______________________________________________________________________________

If this node is connected to other computer via null-modem cable, you can
enable this option to allow users to log in by just pressing enter.

Normally this option should be disabled.

                               Local: Modem: General: No carrier check      609


L o c a l :   M o d e m :   G e n e r a l :   N o   c a r r i e r   c h e c k 
_______________________________________________________________________________

Don't check carrier while user is logged in. If you enable this, BBBS does not
notice if user hang ups. You should only use it for null modem nodes and if
your modem does not present DCD pin correctly.

610      Local: Modem: General: NO CARRIER is BUSY


Local: Modem: General: NO CARRIER is BUSY
_______________________________________________________________________________

If your modem does not detect BUSY signal correctly turn this option on. If
turned off, NO CARRIER means error in mail sessions.

                                       Local: Modem: General: Fast FAX      611


L o c a l :   M o d e m :   G e n e r a l :   F a s t   F A X 
_______________________________________________________________________________

Enable this option if you have a FAXmodem with "fast" negation, ie. ignores
"FAX" result and waits for "+FCON". Most V.34 modems should use this option,
for example Nokia ECM FAST requires it, and Rockwell modems should definately
use it.

612      Local: Modem: Answer: Don't answer


L o c a l :   M o d e m :   A n s w e r :   D o n ' t   a n s w e r 
_______________________________________________________________________________

You can define modem responses here that you do not want BBBS to send an answer
string on.

You can use this menu to form a type of "Distinctive Ring" support. Normally,
in Finland at least, you get an extra number after your normal phone number.
Ie. if your phone number was 2407755 you would get 2407755x where x is usually
1 to 3. Your modem will respond with a RING1, RING2, RING3 depending on what
number is called. Keep in mind, however, that this is all on the same single
phone line. With this, you can put 24077553 (or regexp ^RING3) in your don't
answer field to tell BBBS not to answer the voice "line". 551 (^RING1) could go
to your modem (send init ATA) and 552 (^RING2) might go to your fax (send init
AT+FCLASS=2;A), or something similar. With this, you can share one line between
three numbers, and BBBS will use the correct answer string depending on what
your modem sends.

                                          Local: Modem: Answer: Regexp      613


L o c a l :   M o d e m :   A n s w e r :   R e g e x p 
_______________________________________________________________________________

Here you define what regexp string to match for BBBS to answer. Ie. a regexp
string of ^RING would be the same as the modem returning RING.

614      Local: Modem: Answer: Count


L o c a l :   M o d e m :   A n s w e r :   C o u n t 
_______________________________________________________________________________

Answer to countth call, usually 1. Some caller id systems require you to ignore
first ring and use the second.

                                          Local: Modem: Answer: String      615


L o c a l :   M o d e m :   A n s w e r :   S t r i n g 
_______________________________________________________________________________

This is the init string you want BBBS to send to the modem to answer the phone
call, usually "ATS2=255A".

If you enable voice-options, you could use:

ZyXEL: AT+FCLASS=8;S2=255A|
Rockwell: AT#CLS=8;S2=255A|

Following meta-chars are available:

|      Enter, Cr, ^M
<      Lower DTR (hangup)
>      Raise DTR
~      0.5s delay

See your modem reference manual for more information.

If this field is empty, however, BBBS will run a script called ring.bz in your
scripts directory and gives the modem ring-line (ie. RING) as the only
parameter.

This could potentially be used for distinctive ring support (ie. spawn an
external .wav player when you receive a ring-type that means voice. It could
also be used to reboot the computer if you called with your cellular phone if
you had callerid support. You can use it as another safe-guard against users
you do not want on your system, ie. use the callerid string and if it matches,
don't answer the phone. There are many uses for the ring.bz script.

616      Local: Macros: Keyboard Macros


L o c a l :   M a c r o s :   K e y b o a r d   M a c r o s 
_______________________________________________________________________________

Macro for local key Alt-{num}.

You can use caret to simulate control-keys and run script. For example:

^M             Enter
^^             Caret
^@script@      Run script called "script"

                                              Local: Macros: Hotlogins      617


L  o  c  a  l  :     M  a  c  r  o  s  :     H  o  t  l  o  g  i  n  s  
_______________________________________________________________________________

Hot string logins can be used to identify mail sessions not supported by BBBS.
When hotlogin string is received from modem at login state, the hotlog-script
is run with string number as a parameter. You should use long enough hotlogin
string for users not to type them by accident.

618      Local: Rush Hour: Rush Hour Timelimits


L o c a l :   R u s h   H o u r :   R u s h   H o u r   T i m e l i m i t s 
_______________________________________________________________________________

If you have a very busy system, then you may wish to limit the amount of time
users are permitted to use the system at certain times during the day. This
section allows you to set the maximum time a user will be allowed to use the
system, depending upon what time they logged in. Users who have less time left
than is specified here will of course only be allowed the actual time they have
left. For periods during the day where you don't want an extra time limit to
apply, just enter a zero.

                                                 Local: Events: Sunday      619


L  o  c  a  l  :     E  v  e  n  t  s  :     S  u  n  d  a  y  
_______________________________________________________________________________

Run this event on Sunday.

620      Local: Events: Monday


L  o  c  a  l  :     E  v  e  n  t  s  :     M  o  n  d  a  y  
_______________________________________________________________________________

Run this event on Monday.

                                                Local: Events: Tuesday      621


L  o  c  a  l  :     E  v  e  n  t  s  :     T  u  e  s  d  a  y  
_______________________________________________________________________________

Run this event on Tuesday.

622      Local: Events: Wednesday


L  o  c  a  l  :     E  v  e  n  t  s  :     W  e  d  n  e  s  d  a  y  
_______________________________________________________________________________

Run this event on Wednesday.

                                               Local: Events: Thursday      623


L  o  c  a  l  :     E  v  e  n  t  s  :     T  h  u  r  s  d  a  y  
_______________________________________________________________________________

Run this event on Thursday.

624      Local: Events: Friday


L  o  c  a  l  :     E  v  e  n  t  s  :     F  r  i  d  a  y  
_______________________________________________________________________________

Run this event on Friday.

                                               Local: Events: Saturday      625


L  o  c  a  l  :     E  v  e  n  t  s  :     S  a  t  u  r  d  a  y  
_______________________________________________________________________________

Run this event on Saturday.

626      Local: Events: Start hour


L  o  c  a  l  :     E  v  e  n  t  s  :     S  t  a  r  t     h  o  u  r  
_______________________________________________________________________________

The start hour for this event. Event may not cross day boundary!

See Also: Dial-event

                                              Local: Events: Start min      627


L  o  c  a  l  :     E  v  e  n  t  s  :     S  t  a  r  t     m  i  n  
_______________________________________________________________________________

The start minute for this event. Event may not cross day boundary!

See Also: Dial-event

628      Local: Events: End hour


L  o  c  a  l  :     E  v  e  n  t  s  :     E  n  d     h  o  u  r  
_______________________________________________________________________________

The end hour for this event. Event may not cross day boundary!

See Also: Dial-event

                                                Local: Events: End min      629


L  o  c  a  l  :     E  v  e  n  t  s  :     E  n  d     m  i  n  
_______________________________________________________________________________

The end minute for this event. Event may not cross day boundary!

See Also: Dial-event

630      Local: Events: Errorlevel


L  o  c  a  l  :     E  v  e  n  t  s  :     E  r  r  o  r  l  e  v  e  l  
_______________________________________________________________________________

Shell to OS with this errorlevel. BBBS does not start any BATch file itself,
you should start BBBS from BATch and check these errorlevels.

0       Don't shell

See Also: Dial-event

                         Local: Events: Don't allow users during event      631


Local: Events: Don't allow users during event
_______________________________________________________________________________

Don't allow users to log in when this event in running.

632      Local: Events: Flexible even


L o c a l :   E v e n t s :   F l e x i b l e   e v e n 
_______________________________________________________________________________

Event can "slide" if users logs in.

                                      Local: Events: Event is a 'must'      633


L o c a l :   E v e n t s :   E v e n t   i s   a   ' m u s t ' 
_______________________________________________________________________________

Force event to be run once a day, even if the time has already elapsed.

634      Local: Events: Don't allow incoming mail calls


Local: Events: Don't allow incoming mail calls
_______________________________________________________________________________

Don't allow remote systems to call you and send mail to you during the event.

                                Local: Events: Don't allow mail pickup      635


L o c a l :   E v e n t s :   D o n ' t   a l l o w   m a i l   p i c k u p 
_______________________________________________________________________________

Send remote's mail to them when they call you during this event. If you enable
this and allow incoming mail calls, system is in receive only mode.

636      Local: Events: Don't send crashmail to CM systems


Local: Events: Don't send crashmail to CM systems
_______________________________________________________________________________

Don't try to poll crashmail to CM systems during this event.

                          Local: Events: Send crashmail to all systems      637


Local: Events: Send crashmail to all systems
_______________________________________________________________________________

Try to poll crashmail to all systems during this event.

638      Local: Events: Don't allow file requests


Local: Events: Don't allow file requests
_______________________________________________________________________________

Don't allow remote systems to requests files from you during this event.

                                           Local: Events: Dial to node      639


L o c a l :   E v e n t s :   D i a l   t o   n o d e 
_______________________________________________________________________________

Dials to this node in this event.

Don't use overlapped events. You can define both Dial to node and Errorlevel
for one event. First BBBS exits with errorlevel and then dials.

First BBBS tries to run event #1, then #2, and so on... While (dial)event is
running, other events can force exit with errorlevel, but not polling (except
if new event has smaller number than current event).

640      Local: OS: OS/2 Priority


L  o  c  a  l  :     O  S  :     O  S  /  2     P  r  i  o  r  i  t  y  
_______________________________________________________________________________

BBBS/2 can change it's priority according the activities of user. Here you can
specify priorities for different places in BBBS.

Name             Activity                             Default
========================================================================
Modem thread     Routine handling comport activity    FOREGROUNDSERVER 0
Protocols        Upload and download                  FOREGROUNDSERVER 0
Arcers, grab     (Un)Packing files and grabbing       REGULAR 0
Message search   Mark and Search menus                REGULAR 0
File search      Keyword, Wildcard, New files         REGULAR 0
List search      Jargon, Nodelist browser, Whodown    REGULAR 0
Idle             Waiting for a caller                 REGULAR 0
Normal           All others                           REGULAR 0

The value you should type in can be calculated as following:

value = class * 64 + delta + 32,

where delta is a number between -31 .. 31 and class is one the followings:

0 = IDLETIME
1 = REGULAR
2 = TIMECRITICAL
3 = FOREGROUNDSERVER

For example, if you want to specify priority TIMECRITICAL 16, the value is 2 *
64 + 16 + 32 = 176.

Windows NT/95 users should use the NT priority-field instead.
Amiga users should use the Amiga priority-field instead.

                                                Local: OS: NT Priority      641


L  o  c  a  l  :     O  S  :     N  T     P  r  i  o  r  i  t  y  
_______________________________________________________________________________

BBBS/NT can change it's priority according the activities of user. Here you can
specify priorities for different places in BBBS.

Name             Activity                             Default
========================================================================
Modem thread     Routine handling comport activity    HIGHEST
Protocols        Upload and download                  HIGHEST
Arcers, grab     (Un)Packing files and grabbing       NORMAL
Message search   Mark and Search menus                NORMAL
File search      Keyword, Wildcard, New files         NORMAL
List search      Jargon, Nodelist browser, Whodown    NORMAL
Idle             Waiting for a caller                 NORMAL
Normal           All others                           NORMAL

The value you should type in can be calculated as following:

value = delta + 15,

where delta is a number between -15 .. 15.

-15 = IDLE
 -2 = LOWEST
 -1 = BELOW_NORMAL
  0 = NORMAL
  1 = ABOVE_NORMAL
  2 = HIGHEST
 15 = TIME_CRITICAL

For example, if you want to specify priority NORMAL, the value is 0 + 15 = 15.

OS/2 users should use the OS/2 priority-field instead.
Amiga users should use the Amiga priority-field instead.

642      Local: OS: Amiga Priority


L  o  c  a  l  :     O  S  :     A  m  i  g  a     P  r  i  o  r  i  t  y  
_______________________________________________________________________________

BBBS/A can change it's priority according the activities of user. Here you can
specify priorities for different places in BBBS.

Name             Activity                             Default
========================================================================
Modem thread     Routine handling comport activity    FRONT
Protocols        Upload and download                  FRONT
Arcers, grab     (Un)Packing files and grabbing       NORMAL
Message search   Mark and Search menus                NORMAL
File search      Keyword, Wildcard, New files         NORMAL
List search      Jargon, Nodelist browser, Whodown    NORMAL
Idle             Waiting for a caller                 NORMAL
Normal           All others                           NORMAL

The value you should type in can be calculated as following:

value = delta + 128,

where delta is a number between -128 .. 127.

-2 = IDLE
 0 = NORMAL
 2 = FRONT

For example, if you want to specify priority NORMAL 0, the value is 0 + 128 =
128.

Windows NT/95 users should use the NT priority-field insted.
OS/2 users should use the OS/2 priority-field instead.

                                          Local: OS: Show shell output      643


L o c a l :   O S :   S h o w   s h e l l   o u t p u t 
_______________________________________________________________________________

If this toggle is on, BBBS will redirect outputs of external (un)packers to
user. BBBS can redirect only stdout and stderr streams, not direct screen
writes.

644      Local: OS: Allow break in shell


L o c a l :   O S :   A l l o w   b r e a k   i n   s h e l l 
_______________________________________________________________________________

If this toggle is on, BBBS will check carrier and monitors incoming characters
while spawning to the external (un)packer. If carrier is drop or C-c pressed,
BBBS tries to abort (un)packer.

                                             Local: OS: Rockwell modem      645


L  o  c  a  l  :     O  S  :     R  o  c  k  w  e  l  l     m  o  d  e  m  
_______________________________________________________________________________

Most Rockwell chipset based modems have very poor performance on full duplex
high speed transfers, like with HYDRA. If your modem is Rockwell based (like
Best or Well), you should turn this option on.

This option will slow down BBBS's modem routines and add echo delay (not very
notable, though). If you are sure your modem doesn't need it, turn this option
off.

646      Local: OS: Fix RAR's 'feature'


L o c a l :   O S :   F i x   R A R ' s   ' f e a t u r e ' 
_______________________________________________________________________________

The packing program RAR has an evil feature: it always displays its header
(containing registeration info) and the absolute directories of the archives it
processes. This is a major security issue. You should enable this option if you
are using RAR. It will disable packer output for the packer number 7 defined in
external.bbb.

                                   Local: OS: 2 color screen in BBBS/A      647


L o c a l :   O S :   2   c o l o r   s c r e e n   i n   B B B S / A 
_______________________________________________________________________________

When enabled, BBBS/A will start in a two-color screen as opposed to the default
eight-color screen. This is much faster and uses less memory.

648      Local: OS: Change titlebar


L  o  c  a  l  :     O  S  :     C  h  a  n  g  e     t  i  t  l  e  b  a  r  
_______________________________________________________________________________

If enabled, BBBS tries to change the window titlebar to "BBBS #node - User
Name". This works on OS/2's dosbox, Amiga, Windows NT and in some OS/2 shells.

                                         Global: General: Organization      649


G l o b a l :   G e n e r a l :   O r g a n i z a t i o n 
_______________________________________________________________________________

This can be empty if you are not sending messages to NNTP/SMTP hosts.

This is one line organization name included to outgoing NNTP/SMTP message
header. Usually it tells the name of your BBBS.

650      Global: General: Hostname


G  l  o  b  a  l  :     G  e  n  e  r  a  l  :     H  o  s  t  n  a  m  e  
_______________________________________________________________________________

This can be empty if you are not sending messages to NNTP/SMTP hosts.

This is your computers InterNet hostname. Outgoing NNTP/SMTP messages are
addressed from User.Name@hostname.

                                        Global: General: Remote domain      651


G l o b a l :   G e n e r a l :   R e m o t e   d o m a i n 
_______________________________________________________________________________

This can be empty if you are not sending messages to NNTP/SMTP hosts or if you
are not NNTP/SMTP gateway.

This is a format string for remote user names for messages sent via your
gateway system. BBBS can recognize following incoming addresses:

        %d@p%p.f%f.n%n.z%z.fidonet.org
        %d!%z.%n.%f.%p@myhost.mynet.myorg

Metastrings:

        %%      '%'
        %d      Senders name in "User.Name" format
        %z      Origin zone number
        %n      Origin net number
        %f      Origin node number
        %p      Origin point number
        x       'x'

652      Global: FidoNet: BOGUS: NNTP gateway


G l o b a l :   F i d o N e t :   B O G U S :   N N T P   g a t e w a y 
_______________________________________________________________________________

Act as a NNTP (news) gateway, convert remotely (net) enter messages to remote
domain form.

                                  Global: FidoNet: BOGUS: SMTP gateway      653


G l o b a l :   F i d o N e t :   B O G U S :   S M T P   g a t e w a y 
_______________________________________________________________________________

Act as a SMTP (email) gateway. If this toggle is on, net users may send and
receive email messages via your system.

Remote users must sent the email messages to you as a normal NetMail message,
receiver must be "receiver@remote.host".

654      Global: Toggles: NNTP save headers


G l o b a l :   T o g g l e s :   N N T P   s a v e   h e a d e r s 
_______________________________________________________________________________

If this toggle is on all the headers in incoming NNTP (news) messages are saved
to message as kludges.

                                    Global: Toggles: SMTP save headers      655


G l o b a l :   T o g g l e s :   S M T P   s a v e   h e a d e r s 
_______________________________________________________________________________

If this toggle is on all the headers in incoming SMTP (email) messages are
saved to message as kludges.

656      Local: Modem: Dial


L  o  c  a  l  :     M  o  d  e  m  :     D  i  a  l  
_______________________________________________________________________________

When dialing to the remote system, BBBS tries to match remote's nodelist entry
to case sensitive regexp given here. If none matches, it uses #1.

Matching predial string will be sent to the modem before the number and
postdial right after the number.

On internet nodes, you can dial telnet and binkd/raw nodes by using specific
dialing commands:

ATD will dial telnet nodes.
ATR will dial binkp/raw nodes.

In order to prevent using these strings to dial regular nodes, you may want to
use them only on your internet nodes, as well you could use a nodelist regexp
match of ,BND so only nodes with ",BND" in their nodelist entry will be dialed
using ATR.

Normal command strings modifiers can be used (see Local: Modem: Dial)

                              Global: FidoNet: BOGUS: Temporary in pkt      657


Global: FidoNet: BOGUS: Temporary in pkt
_______________________________________________________________________________

When processing incoming mail bundles BOGUS unpacks them here.

658      Global: FidoNet: BOGUS: Temporary out pkt


Global: FidoNet: BOGUS: Temporary out pkt
_______________________________________________________________________________

Outgoing packets are temporarily created here.

                                      Global: FidoNet: BOGUS: Outbound      659


G l o b a l :   F i d o N e t :   B O G U S :   O u t b o u n d 
_______________________________________________________________________________

Outgoing mail bundles are stored here.

660      Global: FidoNet: BOGUS: Badecho: area


G l o b a l :   F i d o N e t :   B O G U S :   B a d e c h o :   a r e a 
_______________________________________________________________________________

Incoming messages to unknown area are stored here in FTS-0001 format.

                               Global: FidoNet: BOGUS: Badecho: secure      661


G l o b a l :   F i d o N e t :   B O G U S :   B a d e c h o :   s e c u r e 
_______________________________________________________________________________

Incoming messages to secure area with access are stored here in FTS-0001
format.

662      Global: FidoNet: BOGUS: Max open files


G l o b a l :   F i d o N e t :   B O G U S :   M a x   o p e n   f i l e s 
_______________________________________________________________________________

Maximum number of files BOGUS may open. Bigger number is faster.

In BBBS/D this number must be limited to 7.
In BBBS/2 this number should be limited to about 20, but can be as big as 70.
If you increase this number, your unpackers must can handle many files too!
In BBBS/L good number is 20.

                                   Global: FidoNet: BOGUS: BOGUS dupes      663


G l o b a l :   F i d o N e t :   B O G U S :   B O G U S   d u p e s 
_______________________________________________________________________________

BOGUS will remember n*1024 last messages for dupe checking. 0 disables this
feature. Bigger number is slower, uses more memory and disk space, but also
will prevent duplicates better.

In BBBS/D this number must be limited to 15.

664      Global: FidoNet: BOGUS: Max. out pkt size


Global: FidoNet: BOGUS: Max. out pkt size
_______________________________________________________________________________

Maximum size for outgoing pkt file in kilobytes. 0 is unlimited. Normally this
should be about 512.

                          Global: FidoNet: BOGUS: Max. out bundle size      665


Global: FidoNet: BOGUS: Max. out bundle size
_______________________________________________________________________________

Maximum size for outgoing bundle file in kilobytes. 0 is unlimited. Normally
this should be about 2048.

666      Global: FidoNet: BOGUS: Save badecho: area


Global: FidoNet: BOGUS: Save badecho: area
_______________________________________________________________________________

Toggle for saving messages to unknown area.

                          Global: FidoNet: BOGUS: Save badecho: secure      667


Global: FidoNet: BOGUS: Save badecho: secure
_______________________________________________________________________________

Toggle for saving messages violating secure setting.

668      Global: FidoNet: BOGUS: Save all NetMail msgs


Global: FidoNet: BOGUS: Save all NetMail msgs
_______________________________________________________________________________

Toggle for saving all NetMail messages passing through your system.

                              Global: FidoNet: BOGUS: Log headers(BMT)      669


Global: FidoNet: BOGUS: Log headers(BMT)
_______________________________________________________________________________

If this option is enabled, BMT will log info about messages passing your
system.

670      Global: FidoNet: BOGUS: Check destination (BMT)


Global: FidoNet: BOGUS: Check destination (BMT)
_______________________________________________________________________________

If this option is enabled, BMT will check that destination node is listed in
your nodelist. If not it will be returned to the sender. If sender is not
listed, the message will be deleted.

Don't enable this unless you compile full nodelists.

                           Local: Modem: Voice: Data/fax answer string      671


Local: Modem: Voice: Data/fax answer string
_______________________________________________________________________________

Modem command string to change from voice mode to data/fax mode.

ZyXEL: ATS2=255+FCLASS=0A|
Rockwell: AT#CLS=0;+faa=1;A|

Refer to your voice modem manual for more information.

672      Local: Modem: Voice: Init string


L o c a l :   M o d e m :   V o i c e :   I n i t   s t r i n g 
_______________________________________________________________________________

Modem command string to be sent before record and playback.

It must contain two "%d" substrings, first one for compression and second one
for device.

ZyXEL: AT+VSM=%d;+VLS=%d;+FLO=2;S39.7=0;+VIT=45;+VSD=16,70|
Rockwell: AT#VBS=%d;#VLS=%d;#VSD=1;#VSP=35;#VSS=3|

Refer to your voice modem manual for more information.

                                      Local: Modem: Voice: Beep string      673


L o c a l :   M o d e m :   V o i c e :   B e e p   s t r i n g 
_______________________________________________________________________________

Modem command string which produces small beep sound.

ZyXEL: AT+VTS=[800,0,42]|
Rockwell: AT#VTS=[800,0,4]|

Refer to your voice modem manual for more information.

674      Local: Modem: Voice: Playback string


L o c a l :   M o d e m :   V o i c e :   P l a y b a c k   s t r i n g 
_______________________________________________________________________________

Modem command string to start voice playbacking.

ZyXEL: AT+VTX|
Rockwell: AT#VTX|

Refer to your voice modem manual for more information.

                                    Local: Modem: Voice: Record string      675


L o c a l :   M o d e m :   V o i c e :   R e c o r d   s t r i n g 
_______________________________________________________________________________

Modem command string to start voice recording.

ZyXEL: AT+VRX|
Rockwell: AT#VRX|

Refer to your voice modem manual for more information.

676      Local: Modem: Voice: Modem device


L o c a l :   M o d e m :   V o i c e :   M o d e m   d e v i c e 
_______________________________________________________________________________

Device number for telephone line.

ZyXEL: 2
Rockwell: 0

Refer to your voice modem manual for more information.

                                   Local: Modem: Voice: Speaker device      677


L o c a l :   M o d e m :   V o i c e :   S p e a k e r   d e v i c e 
_______________________________________________________________________________

Device number for internal/external speaker.

ZyXEL: 16
Rockwell: 9

Rockwells typically use device 9 or 2.

Refer to your voice modem manual for more information.

678      Local: Modem: Voice: Mic device


L o c a l :   M o d e m :   V o i c e :   M i c   d e v i c e 
_______________________________________________________________________________

Device number for internal/external microphone.

ZyXEL: 8
Rockwell: 3

Refer to your voice modem manual for more information.

                                    Local: Modem: Voice: Go voice mode      679


L o c a l :   M o d e m :   V o i c e :   G o   v o i c e   m o d e 
_______________________________________________________________________________

Modem command string to enter voice mode.

ZyXEL: AT+FCLASS=8|
Rockwell: AT#CLS=8|

Refer to your voice modem manual for more information.

680      Local: Modem: Voice: Go data mode


L o c a l :   M o d e m :   V o i c e :   G o   d a t a   m o d e 
_______________________________________________________________________________

Modem command string to enter data mode.

ZyXEL: AT+FCLASS=0|
Rockwell: ATH#CLS=0|

Refer to your voice modem manual for more information.

                               Local: Modem: Voice: Compression method      681


L o c a l :   M o d e m :   V o i c e :   C o m p r e s s i o n   m e t h o d 
_______________________________________________________________________________

Compression method number to be used to record voice calls.

ZyXEL: 3
Rockwell: 4

Refer to your voice modem manual for more information.

682      Local: Modem: Voice: Minimum filesize to keep


Local: Modem: Voice: Minimum filesize to keep
_______________________________________________________________________________

The minimum size of a recorded voice file to keep. You can use this to avoid
storing "empty" messages. Units are in kilobytes.

                                Local: Modem: Voice: Voice receive dir      683


L o c a l :   M o d e m :   V o i c e :   V o i c e   r e c e i v e   d i r 
_______________________________________________________________________________

Directory where to store recorded voice calls.

684      Local: Modem: Voice: Greetings file


L o c a l :   M o d e m :   V o i c e :   G r e e t i n g s   f i l e 
_______________________________________________________________________________

Greetings file to be played to called.

                                  Local: Modem: Voice: Remote password      685


L o c a l :   M o d e m :   V o i c e :   R e m o t e   p a s s w o r d 
_______________________________________________________________________________

Remote password (DTMF) for listening messages.

686      Main: CD-ROM installer


M  a  i  n  :     C  D  -  R  O  M     i  n  s  t  a  l  l  e  r  
_______________________________________________________________________________

You can move in this menu by pressing up and down  keys. Select the item to
configure by pressing enter.

                                       CD-ROM installer: OK to process      687


C D - R O M   i n s t a l l e r :   O K   t o   p r o c e s s 
_______________________________________________________________________________

CD-ROM installer can be used to install a CD-ROM disk to your file areas
easily.

After you have checked these questions and you are ready to process with CD-ROM
install, turn this toggle on and press ESC.

688      CD-ROM installer: CD-ROM path


C D - R O M   i n s t a l l e r :   C D - R O M   p a t h 
_______________________________________________________________________________

OS path for your CD-ROM drive.

                          CD-ROM installer: Description path in CD-ROM      689


CD-ROM installer: Description path in CD-ROM
_______________________________________________________________________________

Path in the CD-ROM to PCBoard-type description files (dirname.DIR files). May
be left empty.

690      CD-ROM installer: Virtual base directory in BBBS


CD-ROM installer: Virtual base directory in BBBS
_______________________________________________________________________________

Virtual base directory in BBBS where to install these files.

                                       CD-ROM installer: Filedirg name      691


C D - R O M   i n s t a l l e r :   F i l e d i r g   n a m e 
_______________________________________________________________________________

Name of filedirg file. See sysop.gui for more information about these files.

692      CD-ROM installer: Description save directory


CD-ROM installer: Description save directory
_______________________________________________________________________________

Path where to store descriptions in your hard disk. It is a good idea to store
descriptions of one CD-ROM in it's own unique directory. If this field is empty
then the CD-ROM installer works as a HDD installer and will create descript.ion
files in the real directory instead of in the save directory (as it would if
you were installing a CD-ROM). BCFG4 builds the descript.ion files based on a
FILES.BBS file in the real directory.

                          CD-ROM installer: Description file extension      693


CD-ROM installer: Description file extension
_______________________________________________________________________________

Extension for description files. May be left empty.

694      CD-ROM installer: Lower directory names


C D - R O M   i n s t a l l e r :   L o w e r   d i r e c t o r y   n a m e s 
_______________________________________________________________________________

Turn case of directories into lower case.

                                    CD-ROM installer: Lower file names      695


C D - R O M   i n s t a l l e r :   L o w e r   f i l e   n a m e s 
_______________________________________________________________________________

Turn case of files into lower case.

696      CD-ROM installer: Convert all chars


C D - R O M   i n s t a l l e r :   C o n v e r t   a l l   c h a r s 
_______________________________________________________________________________

Don't turn this toggle off, unless you want to keep @ chars in descs as they
are (not recommended).
