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 4.00 MP Copyright (c) 1990-1999 Kim B. Heino and Tapani T. Salmi System Operator's Manual Quick Install BBBS Table of Contents BCFG4 Table of Contents BBBS Homepage: http://www.bbbs.net/ BBBS Documentation Project: http://www.freezer-burn.org/bbbs/

The BBBS v4.00 MP System Operator Manual - Table of Contents

BBBS Documentation Table of Contents ------------------------------------ 1. Installing BBBS 1.1 First-time installation of BBBS 1.2 About this manual 2.3 How to get help 2. Configuring BBBS 2.1 Configuring BBBS - an overview 2.2 The BCFG4 Configuration Program 2.3 Basic security: Groups and access 2.4 File areas 2.5 Message conferences 2.5.1 Netmail conference setup 2.5.2 Email conference setup 2.6 External programs: external.bbb 2.6.1 Archivers: [af_*] section 2.6.2 Protocols: [t_*] section 2.6.3 Meta characters used in external.bbb 2.7 Groupmail support: alias.bbb 2.8 Login aliases: login.bbb 2.9 Internet access: inet.bbb 2.10 Language support: the bbbstxt-files 2.11 The menu system 2.10.1 Command configuration: the 'error'-script 2.10.2 Command configuration: commands.bbb 2.10.3 Removing and renaming commands in bbbstxt-files 2.10.4 *Creating script-based menus 2.12 The chat system 2.13 Color palette setup 2.14 Overview of used files 2.14.1 Multinode preconfiguration 3. Running BBBS 3.1 BBBS command line functions 3.2 The Waiting For Caller screen and BackDoor 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 4.10 AllFix FileFind configuration 4.11 BRoboCop and AreaFix 5. BBBS and TCP/IP (Internet) Networks 5.1 Introduction 5.2 BBBSD: The BBBS Network Daemon 5.3 BBBSD: The FTP Daemon 5.4 BBBSD: The HTTTP 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/D: BBBS for PC-DOS 7.2 BBBS/2: BBBS for OS/2 7.3 BBBS/NT: BBBS for Windows NT/95/98 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 in BBBS 8.4 The MG Reference Manual 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

First-time installation of BBBS

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

About this manual

This manual is an ongoing work of progress. As BBBS is constantly evolving, so is this manual. This manual will give you comprehensive information about installing, configuring, updating, and maintaing your new (or old) BBBS system. The manual is currently maintained by Vincent Danen. If you have any questions or concerns about the manual, please direct them to Vincent instead of to Kim. If Kim wanted to answer questions about the manual instead of programming BBBS, he would write the manual. As it stands, he only puts in last-minute changes before a new public version is released. Updates for this manual can be found periodically on www.bbbs.net or at the BBBS Documentation Project (www.freezer-burn.org). 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.

How to get help

So you're stuck. The manual, as detailed and comprehensive as it is, can't help you (or you can't find what you need). There are a number of avenues that can be used to find help on BBBS. This list is but a small one of the available resources: Homepage: http://www.bbbs.net/ Support BBS's: BCG-Box 4 : +358 2 240 7755 telnet://bbbs.net http://bbbs.net/ Freezer Burn : telnet://bbs.freezer-burn.org Email support: Kim Heino, b@bbbs.net Vincent Danen, vdanen@linux-mandrake.com Echomail support: FidoNet (zone 1 and 2): BBBS.ENGLISH FidoNet (zone 2 only) : BBBS.BZ BBBS.CHAT BBBS.UTIL BBBS.FINNISH BBBS.SYSOP (registered users only) Sysop's TechNet : STN.BBBS

Configuring BBBS, an overview

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.

The BCFG4 configuration program

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. There are some other commandline options for BCFG4 as well, but the above is the most commonly used. 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

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.törmä,sami.virtanen bar=rune.johansen,kim.heino,olli.törmä,matti.luoma temp=!foo,!bar true=!temp ; ; So, the group true contains the users Kim Heino and Olli Törmä. ; Remember that if you try to create group foo with the line: 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.törmä@990903 ; ; At 20.8. 1999, the line will change into: ; ; kids:toni.saari,samuli.suominen,olli.törmä@990903! ; ; Finally, at 3.9. 1999, user Olli Törmä 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 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". 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. 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 Chat.

Message conferences

BBBS supports a wide variety of message conferences. It allows for support of netmail, email, echomail, local mail, and newsgroup conferences. Echomail conferences can support AllFix FileFind support and NameFix support (an echomail-based user searching tool). Conferences are defined in the BCFG4 program using it's menu-driven fullscreen interface. A description of each configurable option can be found in the Global: Confs section. To setup specific "special" conferences: Netmail conference setup Email conference setup

Netmail conference setup

Setting up a netmail conference is relatively painless. The netmail conference must be defined as your first "echoed" conference (ie. it must be listed before any email, echomail, or usenet conferences). This conference can have any name you like (ie. "netmail" or "local.netmail" or anything else you might prefer). The Fidoname of the conference should simply be "-". For the different flags, you should have Post conf. and Fido area checked. And that's it! Now all netmail for your system will be imported to and exported from this conference.

Email conference setup

Configuring the email conference is pretty easy. The email conference must be defined after any netmail conferences you might have. It can have any name you like (ie. "email" or "local.email" or anything else you might prefer). The Fidoname should be a "-", as well the NNTPname should be a "-" also. Then simply check Post conf. and you've finished setting up your email conference. The format of email addresses in BBBS is firstname.lastname@yourdomain.com, where yourdomain.com is defined in BCFG4://Global/General/Hostname. NOTE: If you use a UUCP gateway for email (and won't be using the internal SMTP and POP3 daemons), you need to check BCFG4://Global/Toggles/Email-O-Magic as well. As well, you need to change a few things in the email conference setup. Go back to the email conference you just defined and check the Fido area toggle. Now put the gateway FTN address in the Moderator field. This will rewrite all email into a netmail message destined for the defined Moderator (or gateway). If you are going to be using the SMTP or POP3 daemons, you can have BBBS automatically send outgoing email by using the "bbbs bsmtp r mail.your-isp.com" command on the commandline (you should make this a regular event so that email goes out quickly). All incoming email received by the BBBS SMTP daemon will be written into the conference you have just defined.

Defining file areas in BBBS

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.

The directory structure: filedir*-files

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. For global configuration files, you can also use the hash symbol ('#') to be substituted for the current node number in the special global filedirn-file filedirn.000. Example: filedirn.000: /tmp /home/bbbs/node#/hold @rw:all @e Your personal hold dir filedirn.001: /tmp /home/bbbs/node1/hold @rw:all @e Your personal hold dir 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. 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) @u:group1{,group2{,...}} (specified groups are given UPLOAD 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. BROWSE access means the user can enter the directory and do a directory listing, but can neither read nor write to the directory. UPLOAD access means the user can upload a file to the directory, but cannot move or delete files. An example of the @b flag might be in the case of adult files where you might use an access string of @w:fsysop @r:pic18 @b:all. This would mean that all the files in the directory can be manipulated by the group fsysop, can be downloaded by the group pic18, and can be listed by all users. 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.

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. @e The file will not be included to new file scan. @d The number of downloads this file has received. This is incremented by one every time someone downloads the file. 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 4.00 MP. . . 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

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

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 ; [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

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 11 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. BBBS can handle 11 different protocols internally: zmodem ymodem xmodem slow-hydra xmodem crc ymodem batch slow-zmodem hydra zedzap kermit uucode 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

external.bbb: Network configuration

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) - AllFix FileFind configuration (section archive) 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

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

external.bbb: The echomail-section

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. < Allow only message import (do not export to nodes). > Allow only message export (do not import from nodes). 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. 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

external.bbb: The nodes-section

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 ten 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. email The destination email address of this node. This field is only necessary if this node is to receive their mail archives and file attaches via UUcoded email. The format is a simple email address like filebot@bbs.semel.fi. For BBBS to automatically decode incoming emails into your inbound mail directory simply have your down/up-links send the email to filebot@yourdomain.com (ie. if your defined domain name was bbs.freezer-burn.org they should send file-mail to filebot@bbs.freezer-burn.org). You can filter out unwanted filebots by using inet.bbb or smtpfilt.bz. 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 ; email node: 23:58/4 blah blah blah blah F - 3 23:* blah@blah.com

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. These are all listed in the TICK file. 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 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 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

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! For telnet/binkp nodes, the phonenumber-field is used to indicate the domain name or IP address of the remote system. Using the hash symbol ('#') after the domain name or IP address specifies a non-standard port to use. The flags-field is the standard FidoNet flags that are active with this system, separated with commas. Some recommended special flags for telnet or binkp nodes can be used as well, specifically IBN to indicate Binkp capabilities and ITN to indicate telnet capabilities. If you also change the dialling properties of any given node, you can use these flags to specify special init strings (ie. ATR for Binkp/RAW nodes), or to restrict certain nodes to dialing telnet/binkp systems on telnet nodes and not to dial such systems on nodes connected to a regular dialin line. IBN and ITN flags are also used in nodelists according to the FTS-500x specs. Example: [node_remap] ; A Foobar-site with three phonenumbers that can be dialled: ; Note that nodenumber is in 4D-format! ; Joe Hacker at 12:34/5 with three phone numbers to use: ,12:34/5.0,Foobar-site,Foobar_City,Joe_Hacker,555-4242:555-6969:555-5555,300 ; Jim Hacker at 12:34/12 with an IP-only node running telnet on port 24: ,12:34/12.0,Foobar-site,Foobar_City,Jim_Hacker,foo.bar.net#24,300,ITN [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] 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

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.

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 ; 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

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": 2:210/27 ^BBBS - 2:210/27 . 2:222/0 C V newtic 2:22/10 2:222/151.666 /New Fido Echo

AllFix FileFind configuration

You can restrict directories of AllFix FileFind responses in this section. Quite simply, you define the echomail area that responds to FileFind requests, and give a regexp of which directories to search, with an optional different reply conference. If no reply conference is given, replies are made in the conference that is searched. Example: [archie] ; areaname_of_allfix_message{,replyarea}:regexp_of_dirs_to_search ; Search all file directories for the echomail area STN.FILEFIND but only ; search file directories begining with "linux." for the echo ; FILEFIND-LINUX and reply in FILEFOUND-LINUX: STN.FILEFIND:. FILEFIND-LINUX,FILEFOUND-LINUX:linux..

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

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

Configuring Login aliases: the login.bbb-file

BBBS allows for login aliases for direct logins (telnet/dialup, not HTTP or FTP). The format of this file is simple. Everything should be typed on a single file in the format alias:realname. Example: ; An example login.bbb-file B:Kim Heino wulfheart:Vincent Danen

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 Other configurable internet-related options in inet.bbb are: [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 @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": 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 [emailforward] This defines email forwarding. If email comes in to a defined name, it will be forwarded to the specified email address recipient. An example: ; forward all email for b@bbs.freezer-burn.org to b@bbbs.net: b@bbs.freezer-burn.org:b@bbbs.net [emailcopy] This defines email copying (or email cc'ing). This will take the message sent to the destination email address and send a copy to the specified email address. This function will delete the original email to the original destination address, so if you want to keep the original of that email, you must specify it as a recipient email address as well. These entries are parsed after bounce/accept entries, but before alias/forward/list entries. An example: ; copy email to sorssu@sorssu.org to bcg, torsh, ranger, and fopaman and ; keep a copy for sorssu as well: sorssu@sorssu.org:bcg@sorssu.org sorssu@sorssu.org:torsh@sorssu.org sorssu@sorssu.org:ranger@sorssu.org sorssu@sorssu.org:fopaman@sorssu.org sorssu@sorssu.org:sorssu@sorssu.org NOTE: This only works for local users. The above example assumes the BBS domain name to be sorssu.org and all of the email names to be local user names or email aliases. If you wish to copy email to someone outside of your local domain (ie. users on your BBS) then see the [emailforward] section. [listin] This section can be used to allow remote users to send email directly to a conference (like a mailing list). 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! The difference between the from and sender fields are subtle. When it comes to importing mail from mailing lists, from is usally the email address of the mailing list itself while sender is the email address of the original person who sent the message to the list in the first place. [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 inet.bbb: [bounce_from] @coolcorp.com [bounce_to] nomail@mysite.net [accept_from] [accept_to] These are the opposite of the bounce statements. 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. [bbbsd] This section allows you to define which IP's and netmasks to deny and allow for bbbsd. The syntax is simple: [deny]service ip/netmask Where [deny] is an exclamation mark ('!') to deny a service and ip/netmask statement, and nothing to allow it. Serice can be any of the standard protocols bbbsd supports: Telnet, raw, POP3, SMTP, FTP, finger, ident, HTTP, MRTG, or TP. The IP/Netmask is a statement of IP ranges to allow/deny. An example: telnet 10.0.0.1/8 !telnet 0.0.0.0/0 The first line allows incoming telnet from 10.* while the second line denies telnet from * (which effectively limits telnet to a typical Class A network).

The Menu System

BBBS has a very powerful menuing system. The menu system is composed of many parts. The bbbstxt-files, the commands.bbb file and the error-script are all a part of the menuing system. It is extremely flexible and versatile. Almost anything you want to do, you can do through these extensions of modifying the language files and scripts, whether they be BZ, Perl, Java or REXX. Due to the high configurability, there is no easy way to change and customize menus. Some users may find this daunting and may do no more than change the help screens, while others may dive right in and customize their BBBS to the extent that the menuing system allows. There is no right or wrong way to customize your system, nor is there too little or too much customization. The BBBS package was intended to give sysops as much flexibility as they require, and the menuing system is one way of accomplishing this.

Command Configuration: commands.bbb

Using the commands.bbb file is a common way of customizing menus and adding commands to your system. The commands.bbb file resides in your main BBBS directory and is a simple text file. The error.bz script must exist and be compiled before this configuration file can be used because BBBS reads the error.bz script whenever an unknown (or bad) command is typed, and the script is what parses and acts upon the information of this file. The content of the file is simple: Command Menu Script, *bbbs_command or !os_command Command is the menu command you want to add (ie. a "cd.." command in the file menu). Menu is a numeric value corresponding to the menu you want your command to appear on. The following values represent menus: 1 The Read menu 2 The Main menu 3 The Utility menu 4 The File menu 5 The Chat menu 6 The Outbound menu 7 The FTP menu 128 Join No Access (user tries to join a conference they do not have access to) 129 File CD No Access (user tries to CD to a file directory they do not have access to) 130 bz::bfile4() (user enters the bfile4() BZ command) [This can be used to access file areas without logging in] 131 Feelings menu * Any menu (Global) Script, *bbbs_command or !os_command is exactly what it says it is. This is where you associate what action you want with your new command. You can alias commands to other commands, call specific scripts, or run a specific command for your operating system. To run a BBBS command, begin this field with the asterix ('*') character, and to run an operating system command, begin this field with the exclamation mark ('!') character. Example config.bbb file: ;Command Menu Script, *bbbs_command or !os_command ;================================================================== ; ; alias "cd" commands: ; cd.. 4 *cd .. cd\ 4 *cd / cd/ 4 *cd / ; ; other BBBS commands: ; ACCess !,fsysop, 1 *>b You have access! ; ; scripts: ; Who 2 e!who Join * strjoin BNMSG 6 bnmsg Optionally, you can also add !regexp_of_groups before the menu parameter. This will restrict commands to members of the specified group. In the above example, only members of the group "fsysop" would be able to execute the command ACCess. When writing commands, remember to use upper case for the minimum letters you want to use to access the command, while the lower case letters are optional (ie. in the above example both "acc" and "access" would accomplish the same command). You may want to replace some internal commands with a script you have written or downloaded. This takes a little more work, but is still quite easy. Edit your bbbstxt-files and locate the original command and rename it (ie. rename the /Who/ command to /XWho/). Then you place your own Who command in commands.bbb and you have effectively replaced the internal command. If, for some reason, you want to access the old command via another script, you can still do so by calling "xw" or "xwho".

Command Configuration: the 'error'-script

Another method of changing menus is by a script called error.bz. This script is called everytime a user types in a command that BBBS does not recognize and thinks it is a bad command. The way BBBS checks for valid commands is by the bbbstxt-files first, then the error.bz script. This script is what parses the commands.bbb file for information. BBBS comes with a default error.bz in your /bbbs/scripts directory. It has a few default commands already written, as well as the main ability to parse and use commands.bbb. The commands internal to error.bz are: REGEXP This displays a help topic on regular expressions (Global Menu) CLS This clears the screen (Global Menu) ADDON Shows the files usermenu.gr and usermens.gr, which must exist in one of your menu directories (Global Menu FILT MBBS-Compatability dummy command (Util Menu) GR MBBS-Compatability dummy command (Util Menu) RUN Runs an external script (Sysop-only command) By looking at error.bz, and with a little understanding of the BZ language, you can easily adapt the script to suit your needs. For more simplistic commands, commands.bbb should be enough, but for more advanced commands that do not warrant a whole new script, errors.bz is a great place to put them. The script relies heavily on the parsecom() command, so you should have a good understanding of how to use it. Also, BBBS passes to error.bz two parameters: the command and the current menu number. The command is what the user typed on the BBBS menu prompt and the menu number is the corresponding number of the menu the user is in (see commands.bbb-section for a list of menus and their menu numbers). Remember to compile your error.bz script everytime you make changes to it.

Removing and Renaming Commands in bbbstxt-files

The bbbstxt-files are the "meat" of your system. These language files are used not only to print strings to the screen based upon user input, but they also provide the core menu structure of your BBBS menu system. The format of the menu lines in bbbstxt-files are simple... it is a single line full of commands for a specific menu, with each command seperated by a forward slash ('/') character. BBBS interprets these lines to link them to its internal commands. WARNING: do not remove menu lines or change command orders! If you do so, your menus will no longer work and can have unpredictable results! If you want to rename a command (let's say you have a better "who listing" script and you want to use it instead of the internal Who command), change the name of the command to something more obscure. Do not remove it or change the order of the commands! Changing /Who/ to /XWho/ would be appropriate. The lines associated with menu commands are as follows in bbbstxt-files: Line# Menu name ===== ========= 9 Utility menu 10 Global menu 42 Vote menu 73 User->Alias menu 86 Grab-format selection menu 133 Read menu 191 Help menu 222 Main menu 223 File menu 331 Terminal emulation selection menu 334 Editor selection menu 357 Character-set selection menu 358 Protocol selection menu 359 Archive selection menu 360 Language selection menu 361 MG text editor menu 362 Read->Search menu 363 Read->Mode menu 364 Read->Add Msgs to Scratchpad menu 366 Chat menu 367 Logoff menu 369 Goodbye menu 371 Read->Mark menu 374 Bulletin menu 375 CTRL-K menu in the FullScreen Editor 421 Chat Window menu 427 Extended Chat menu 538 Process Grab Packet Anyway? menu 557 Outbound menu 560 Outbound menu flavour types 580 FTP menu Not all of the above menus can be changed with commands.bbb or error.bz because they do not have associated known menu types, however they can be manipulated and renamed by editing the bbbstxt-files.

Creating Script-Based Menus

This section must be completed yet.

Configuring the BBBS Chat System

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

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.

Configuring chat feelings

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" $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 { 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

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. Each defined color section also has an associated color code (like \3ca) which can be used in the bbbstxt-files. The codes for each color position has it's own color code. The syntax of the file is simple: first the scheme name, then a colon and then 51 characters defining the colors to be used. The characters represent different items as follows: Position Code Defines the color of... ========================================================================== 1. \3ca message: normal text in the header. 2. \3cb message: user names in the header. 3. \3cc message: subject lines in the header. 4. \3cd message: normal text in body. 5. \3ce message: quoted text in body. 6. \3cf message: double-quoted text in body. 7. \3cg message: net information (origin/tear/kludge lines). 8. \3ch file: the directory line in listing. 9. \3ci file: the topmost header lines in listing. 10. \3cj file: sub-directories in listing. 11. \3ck file: normal files in listing. 12. \3cl file: free files in listing. 13. \3cm file: file links in listing. 14. \3cn file: the first line of the file description in listing. 15. \3co file: the rest of the file description lines. 16. \3cp file: the numeric data (amount of downloads etc.) in listing. 17. \3cq nodemsg: chat messages sent by the user him/herself. 18. \3cr nodemsg: incoming public chat messages. 19. \3cs nodemsg: incoming private messages. 20. \3ct nodemsg: informative messages (login/logout, entered message...) in chat. 21. \3cu nodemsg: the chat prefix string (the string displayed before the message). 22. \3cv nodemsg: incoming public chat messages addressed to the user. 23. \3cw join: the header help lines in. 24. \3cx join: the highlighted characters. 25. \3cy join: a selected option. 26. \3cz join: an unselected option. 27. \3cA join: local public area names. 28. \3cB join: public network area names. 29. \3cC join: local private area names. 30. \3cD join: network mail area names. 31. \3cE join: area descriptions. 32. \3cF show: header lines. 33. \3cG show: total separator line. 34. \3cH show: numeric information. 35. \3cI show: number specifying the amount of personal messages. 36. \3cJ util: user info display header. 37. \3cK util: user info display texts. 38. \3cL util: user info display numeric information. 39. \3cM who: header. 40. \3cN who: nodenumber for active nodes. 41. \3cO who: nodenumber for inactive nodes. 42. \3cP who: speed for active nodes. 43. \3cQ who: speed for inactive nodes. 44. \3cR who: status text for active nodes. 45. \3cS who: status text for inactive nodes. 46. \3cT who: "when" time for active nodes. 47. \3cU who: "when" time for inactive nodes. 48. \3cV who: nickname for active nodes. 49. \3cW who: nickname for inactive nodes. 50. \3cX who: name of the caller for active nodes. 51. \3cY who: name of the caller for inactive nodes. 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 The different sections represented are: Abbreviation Menu or Command =============================== message Message menu file File menu nodemsg Inter-node messages join Message conference "Join"-command show Message conference "SHow"-command util Utility menu who "Who"-command

bbbstxt-files: language configuration

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. Other special characters in bbbstxt-files are 2 which represents a CTRL-B character, and 1 which represents a CTRL-A character. You can also use colors based on the color palette, using the appropriate color codes within the bbbstxt-files. See the color palette reference for a list of the codes you can use. 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. Remember that if you really want to have multiple languages, you should code also your scripts so that they support all your languages!

An overview of the files BBBS uses

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 BBBS Configuration Files

The BBBS configuration files are created and manipulated using BCFG4. Some special notes about the configuration files which will make creating a multinode system a little easier: bbbscfg4.000 is the global configuration file and is used by all nodes. It's variables are edited in BCFG4 in the Global sections. bbbscfg4.x are local configuration files for specific nodes (where x is the node number, for example bbbscfg4.001 would be for node 1). It's variables are edited in BCFG4 in the Local sections. bbbscfg4.999 is the "local-global" configuration file. This file is very unique in that it can be used to reduce similarly-configured nodes to a single configuration file. In the past, on a 20-line system, you would need bbbscfg4.001 through bbbscfg4.020, all seperately configured by using BCFG4 x twenty times to configure each node. This file saves you those many steps. It is primarily useful for telnet nodes with redundant configurations. What BBBS does is when loading a particular node, it first searchs for a corresponding local configuration file (bbbscfg4.x) and if none is found, it will use bbbscfg4.999 for all the local information. To create bbbscfg4.999, execute BCFG4 0. You may also want to edit the Local/General/(logfile|grabdir|uptempdir) options in BCFG4 and use the hash symbol ('#') to represent the node number (it will be translated to the current running node using the configuration). Conceivably, you could run your entire system with only a bbbscfg4.000 and bbbscfg4.999 configuration files, it will work for all node types (local, dialup, telnet).

The files in the BBBS root directory

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. trashpas Contains regexps of passwords that should not be allowed. 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.

The files in /bbs/main directory

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. okphone Only phone numbers listed in this file will be called back by the Callback Verifier 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. trashpho Opposite of okphone, phone numbers listed in this file will not be called back by the Callback Verifier

The files in /bbs/menus directory

The files in /bbs/menus directory can be recognized by their extension. There are three levels of menus: novice, junior, and expert. Novice menus will show a quick help (the mini menus) to users when entering the menu and will show long (novice) menus when a user presses ? for help. Junior menus don't show mini menus, but show the long (novice) help screen, while expert menus show the short (expert) menus for help. One note on the RIP graphics emulation needs to be clarified. RIP is a GUI for use on BBS systems and the remote user must be using a RIP-capable terminal program in order to experience RIP graphics. BBBS will automatically convert Dummy-ANSI control codes to RIP TTY window codes. BBBS will also filter out RIP control code start sequences (the "!|" characters) and therefore you must replace all "!" characters in your RIP menu files with the Ctrl-A character (0x01). BBBS will eat all characters from Ctrl-A to end-of-printf/CR/LF if RIP is not selected. This will allow BBBS to display menus to users with RIP terminal emulation selected but not using a RIP terminal. As well, BBBS comes with a program called ripc.exe which will compile text-mode RIP files into binary menu files. The following files will be found and/or can be created for BBBS use in the /bbs/menus directory: Extension When user sees this file =========================================== <none> Language 0, no ANSI, novice/junior .1 Language 1, no ANSI, novice/junior .gr Language 0, ANSI, novice/junior .gr1 Language 1, ANSI, novice/junior .r Language 0, RIP, novice/junior .r1 Language 1, RIP, novice/junior .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 AllFix 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. cbv1 Displayed before disconnecting the user and calling back cbv2 Displayed after successfully calling the user back cbvphone Tells the user the format of the phone number to enter charmenu Menu used for character choice command. charmini Mini menu used for character choice command. chathelp The help screen for groupchat. chatmenu Menu used for chat command. chatmini Mini 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. editmenu Menu containing the different editor choices. editmini Mini menu containing the different editor choices. event Displayed when user is thrown out after login because of an event. exprmenu Menu containing the different menu level choices. exprmini Mini menu containing the different menu level choices. feelmens Extended chat help, SysOp only. feelmenu Extended chat help. fil4mens Menu used for file command, SysOp only. fil4menu Menu used for file command. fil4mini Mini menu used for file command. fingerd Header displayed before 'finger' information. flaghelp Help file for file flagging. formmenu Menu used for choosing archiving method. formmini Mini 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. grabdupe Displayed when user has uploaded a reply packet containing already received messages. grabmenu Menu containing the different grab format choices. grabmini Mini 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. huntmini Mini menu used for search command. joinhelp Help file for joining. langmenu Menu used for language choice. langmini Mini 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. mainmini Mini menu used for main command. markmenu Menu used for mark command. markmini Mini 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. protmini Mini menu used for protocol choice. readmens Menu used for read command, SysOp only. readmenu Menu used for read command. readmini Mini menu used for read command. rmodmenu Menu used for read mode selection. rmodmini Mini menu used for read mode selection. termmenu Menu used for terminal type selection. termmini Mini menu used for terminal type selection. utilmens Menu used for utility command, SysOp only. utilmenu Menu used for utility command. utilmini Mini menu used for utility command. votemenu Menu used for vote command. votemini Mini menu used for vote command.

The files in /bbs/temp directory

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.

The files in /bbs/misc directory

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

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. rescan.1 This tells BBBS to rescan the outbound queue for node 1. 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. bbbsd.noc If exists, bbbsd rejects incoming connections. The file can contain a one line description that will be shown to the user. bbbs.noc If exists, BBBS will reject incoming callers. This is a useful semaphore to use during maintenance functions that users should not be on the BBS during.

The BBBS command line functions

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. BWHO Show who is online at the moment. To send an SMS message, use the following commandline: bbbs 2 2 COM2 BTERM SMS: [servernumber] [text] BBBS will then send the SMS message text [text]. When starting BBBS as a local node you can add keycodes after the node parameter (also called buffer-stuffing). For example: bbbs 0 1 User Name^Mpassword^Mwho^M 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.

BBBS BAADD - An account management tool

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

Usage: bbbs bbbs2txt [areaname] [number] [filename] BBBS2TXT will save the message number number from the file area areaname into the file filename.

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

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

BBBS BDATE - Update the birthday list.

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

Usage: bbbs bfag [infile] [outfile] BFAG converts standard filelist (created with BLIST) to AmigaGuide format. [infile] is the name of the filelist and [outfile] is the name of the AmigaGuide file to create.

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

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.

BBBS BFTP - Batch FTP

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 via FTP. A few items need to be configured in order to do, but they are rather straightforward. Edit your external.bbb's [node_remap] section and add something like: ,1:140/14.0,fb,Edmonton,Vincent_Danen,bbs.freezer-burn.org,300 This tells BBBS that node 1:140/14 is available at the domain name bbs.freezer-burn.org. For more information (and other possibilities such as different flags to use for telnet/binkp/etc. see the [node_remap] section). An example commandfile: bbs.freezer-burn.org example_user example_pw cd in put login.bsy put 1:140/14 del login.bsy cd ../out put login.bsy getdel * del login.bsy quit To put the above into a working script (commandfile called "fb.ftp") you might use: #!/bin/sh cd $BBBSDIR if [ -f login.bsy ]; then exit 0 fi touch login.bsy ./bbbs bftp fb.ftp /ftn/mail/in > /dev/null 2>&1 rm -f login.bsy ./bbbs bogus w This adds some extra security precautions. The script will check for a login.bsy file indicating that an ftp session is already in place, and if it exists, it will abort the script. If it doesn't exist, BFTP is called (with all messages and error message being discarded) and once it's done, login.bsy is once again removed. The commandfile itself will upload/remove the login.bsy file on the ftp site to indicate to the remote system that we are logged in and transferring files (refer to your uplink for appropriate busy semaphores and where they should be placed). The above script is, of course, for linux, but the basic idea is clear and can easily be adapted to another OS using REXX or batchfile scripting. Commands that can be used in FTP scripts are (full command can be used or only capital letters in command to abbreviate): Cd Change directory Dir List files Names Get list of file names in directory Get Download files Quit Exit FTP Site Site specific commands Type Type (display) file to screen DELete Delete files Put Upload files (you can also use a node number here to put all files for a specific node (ie. put 1:140/14) GETDEL Get and Delete files (safest to use for downloading FidoNet mail via FTP) CHdir Change directory Ls List files DOwnload Download files CLose Close FTP connection (doesn't exit) EXit Exit FTP CAT Type (display) file to screen RM Delete files UPload Upload files MIRror Mirror files (only current directory) These are the same commands BBBS uses for it's internal FTP client. Some of them won't be useful with BFTP, but they might be. WARNING: Be sure you do not run too instances of BFTP at the same time that use the put [nodenumber] and getdel commands! It can have some unpredictable and probably undesirable results!

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.

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

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.

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

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.

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

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.

BBBS BMT - A FidoNet message tracker

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)

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. BNC can support points as well, and understands pointlists with "Boss" and "Point" formats.

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

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

BBBS BNMSG - Send a node message.

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

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.

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

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.

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

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.

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

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.

BBBS BPUS - Pack the user database

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

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.

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

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. BSMTP T sends the ETRN/TURN command to the SMTP specified host. Using BSMTP W is similar to issuing both BSMTP R and BSMTP T commands. The TURN and ETRN commands relate directly to how the remote SMTP server works. Most remote SMTP servers no longer support the TURN command because it provides some well-known security issues. ETRN (Extended TURN) is an ESMTP (Extended SMTP) command which most SMTP servers now use. This a safe method of transferring mail because with ETRN you provide your SMTP uplink with your domain name and instead of receiving the mail, the SMTP server turns around and opens a connection to your SMTP server to transfer the mail. ETRN is especially important if you are not connected to the internet 24hrs a day, 7 days a week and your SMTP server is not always reachable. Someone running a server that is not constantly connected may want to run something similar to the following example linux script: #!/bin/sh cd /home/bbbs [ -f work/bbbsrun.b ] && exit 0 ./bbbs bsmtp t mail.uplink.com > /dev/null 2>&1 ./bbbs bsmtp r mail.myuplink.com > /dev/null 2>&1 [ -f work/bbbsrun.b ] && rm -f work/bbbsrun.b What this does is send the ETRN command to mail.uplink.com (your uplink SMTP host or mail relay). This tells mail.uplink.com to open a normal (E)SMTP connection to your site and deliver any mail waiting for your system. It will also then send any mail waiting to be delivered to mail.myuplink.com (in most cases, both servers may be the same, in which case you could simply use BSMTP W). BBBS always tries to use ESMTP first, with fallback to regular SMTP.

BBBS BSTAT - Show a statistics list

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

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. BTICK returns errorlevels based on whether or not it has processed any files. This can be useful for calling BNDIFF depending whether or not files have been received, in case one of them is a nodelist. BTICK exits with the following errorlevels: 0 = .TIC files have been processed. 1 = .TIC files have not been processed.

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

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.

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

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). 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: 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.

bbbsd - the BBBS network daemon

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, or use SSH. - 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. - HTTP: the standard HTTP protocol, allowing your users access to your file and message areas without logging directly into the BBBS via telnet. - Ident: the standard Ident protocol, allows other to track your outgoing connections. - TP: the standard time protocol. See BBBS BTIME for description. - MRTG: See BBBS and TCP/IP networks 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 tpd 37 fingerd 79 httpd 80 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.

BBBSD: The FTP Daemon

BBBS comes with an internal FTP daemon which allows your users to access file areas via FTP. The daemon also can allow anonymous ftp to desired file areas. The FTP daemon works with the File/4 system in BBBS to decide who gets what access. Users login with their username (first.last) or an alias if you have defined one in inet.bbb. The FTP daemon uses the file ftpd as a header or welcome message file (it can be found in the menu directory). BBBS supports the majority of standard FTP commands. The one drawback to the FTP daemon is that is does not support resuming of broken FTP transfers. However, with that aside, BBBS has a unique feature that nicely integrates the FTP server with the BBS. Users have the ability of downloading offline mail (grab) packets via FTP with the default or their configured grab format. By issuing the get grab and put grab commands, a user can download and upload offline grab packets via the FTP service. For simplicity sake, when advertising this ability, it might be best if the user understands that although a get grab command will download a grab packet, their FTP client will also save the file as simply grab. It might be wise to note that users should issue a get grab [packet-name] command (ie. get grab fb.qwk or something similar) that would be easily identifiable as a grab packet. Similarly, the user will have to issue a put grab fb.rep command in order to upload their locally named fb.rep file to the magic filename grab, which BBBS needs to know the file is in fact an uploaded reply packet. Another note might be to indicate to the users to turn binary file transfers on prior to sending/receiving grab packets.

BBBSD: The HTTP Daemon

BBBS comes with an internal HTTP daemon which allows your users to access message and file areas via their favourite web browser. To enable HTTP, simply call it when you run bbbsd. Configuration for the HTTP daemon is fairly straighforward. There are a number of template HTML files which can be customized that are found in your menus directory: confs.www - lists subscribed conferences dirlist.www - shows a directory listing for selected file area enter.www - enter a message in a conference error_i.www - shown when an internal error occurs error_p.www - shown when user enters an invalid username or password error_t.www - shown when user is sleep disconnected join.www - join conferences login.www - login to BBS or select to apply as a new user msg.www - read message newuser.www - apply as a new user reply.www - reply to a message settings.www - change user settings viewall.www - lists all conferences viewarea.www - lists all messages in current message area You can also run scripts on the web pages, which greatly enhances BBBS's functionality as a web server. The HTML code to run a script is: <a href="bbbs?id=$i&do=b[script-name]">your text</a> All web-based scripts are run from a single script called www.bz. This script must be compiled and exist in your scripts directory. Two parameters are passed to www.bz: the id and the script-name and are accessed by: int main(char id, char name) To return to the previous page from within a script, add the following piece of code to your script: printf("<a href=\"bbbs?id=%s&do=\">back</a>\n",id); For example, you can use the following as a piece of test code: <a href="bbbs?id=$i&do=btestwww">Test</a> www.bz: int main(char id, char name) { printf("<html>\n"); printf("<head>\n"); printf("<title>%s</title>\n",name); printf("</head>\n"); printf("<body>\n"); printf("<p>Simple test! The ID is %s, the name is %s</p>\n",id,name); printf("<a href=\"bbbs?id=%s&do=\">back</a>\n",id); printf("</body>\n"); printf("</html>\n"); } For more elaborate code, or to have multiple scripts, you can parse the value of name to branch to different routines in www.bz by using something as simple as: www.bz: int main(char id, char name) { switch(name) { case "testwww": { testwww(); } case "who": { who(); } case "foobar": { foobar(); } default: { exit(0); } } } With the above you would contain each seperate script within it's own routine. For example, if you wanted a "who's on" command, you would pass the script-name "who" and catch it and start up the who() routine. For more details on what you can do with BZ scripting, please refer to the BZ section of the documentation.

Waiting for a caller screen

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. * BackDoor is BBBS's own internal FTN-compliant mailer. BackDoor supports FrontDoor-style mail queueing and will initiate when a FTN (FidoNet Technology Network) protocol is sent from the opposite computer instead of a user name when BBBS answers the phone. BackDoor then loads and handles the incoming mail call, exchanging FTN-style mail packets with remote computers. When the Waiting For Caller screen is active, BackDoor will also initiate outbound mail polls for those systems you have defined for your system to call and exchange netowrk mail with. BackDoor is configured in BCFG4 and with your external.bbb file. Also, while transfering network mail with the Hydra protocol, the sysop can type /group to open a chat window to chat with the sysop at the other end. This is called group chat and is supported by the Hydra protocol (which is also a bi-directional protocol).

Local SysOp keys

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.

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. ATTxxxx Dials number xxxx using SSH. 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. You can also use ATT to dial a hostname using SSH. 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. F3 Send SMS message using connected Nokia Communicator GSM-phone. Prefix the message with "!" to specify operator SMS (aka Class 0 SMS, aka Flash-SMS). 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. 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 You can also rename bterm.exe as such: btelnet.exe (usage: btelnet hostname) bssh.exe (usage: bssh hostname) This will create a telnet and SSH client program respectively.

The BTERM Phonebook

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

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.

BBS name -dialog

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

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!

Download a file -dialog

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

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.

Upload protocol -dialog

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

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.

Select charset -dialog

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

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.

The BZLink-Lite protocol

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

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. bull# When no textfile bull# is found corresponding to the selected bulletin in the bulletin menu (ie. CGI-bulletins). callback When a user is requesting callback verification to upgrade their access (if you use this be sure to add a 'del main/callback.dat' to your daily event script!) 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. fidopoll After a FidoNet mail session. 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. gotsmtp After an incoming SMTP session. 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. nntpfilt When news is received via BNNTP, before importing. 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. smtpfilt When mail is received by the SMTP daemon, before importing. snooze When a user is about to be sleep disconnected. tickfilt Before processing incoming TICK files. upscript After all uploaded files are processed. uscript After a user has uploaded a file, before asking for the file description. usermail After a human caller logs off and mail has been entered but usermail_errorlevel is zero. www When called by HTTP (see HTTP Daemon). 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... The ASCII character 2 is the equivalent of CTRL-B. 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. 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.

Example: gotmail.bz

An example gotmail.bz script to run BBBS mailtossing functions: int main() { system("bbbs bogus w",0,0); system("bbbs btick",0,0); }

Example: editor.bz

The editor.bz file will allow local users (usually sysop) to run their favourite text or message editor as their editor within BBBS. The script is passed three parameters: filename conf# reply-to. An example editor.bz script using a text editor: int main(char file, int conf, char reply) { // file is the filename to be edited // next while is for dos/nt/os2 only! // while (pos("/",file)) file=sprintf("%s////%s", // copy(file,1,pos("/",file)-1),copy(file,pos("/",file)+1,120)); if (bv_com) return(1); // remote caller editor... else system(sprintf("emacs %s",file),0,0); // local user editor return(0); // 0=ask, 1=cancel, 2=save } Editor.bz should return one of three return-levels. 0 tells BBBS to ask whether to save the message, 1 to cancel, and 2 to save the message immediately.

Example: gotfax.bz

Gotfax.bz is passed one parameter: fax_number,remote_FLID. This can be parsed as shown below. An example gotfax.bz script to decode incoming faxes: int main(char s) { int num, fname, faxname; if (pos(",",s)) { num=copy(s,1,pos(",",s)-1); s=delete(s,1,pos(",",s)); opendir("e:/bbbs/fax/*.g3"); fname=readdir(); faxname=delete(fname,8,4); system(sprintf("e:/bbbs/fax/r2t.exe -i%s.g3 -c4",faxname),1,0); system(sprintf("rename e:/bbbs/fax/bfax0001.fax %s.tif",faxname),0,0); remove(sprintf("e:/bbbs/fax/%s.g3")); /* num=fax number flid=s */ } }

BZ Language: Expressions

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.

BZ Language: Functions and Variables

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 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". }

bzc: the BZ Language compiler

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

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 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: __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) #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 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.

BZ Language constants

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

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.

Binary number math

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: ~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. 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

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.

The BZ Runtime Library by Categories

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() 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()

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 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

asm

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

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

do...while

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

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

if...else

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

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

switch...case

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

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

_account_change_money

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

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 or doesn't exist. EXAMPLE int money=_account_get_money(bu_account); SEE ALSO _account_change_money

bbbs

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

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()

breceive

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

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()

closedir

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

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()

delay, _delay

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

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!")

exec

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

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);

fclose

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

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); }

fflush

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

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

fgets

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

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); exit(1); }

fprintf

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()

fputc

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

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()

fseek

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

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()

getch and _getch

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

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()

getnodestatus

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 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)); } }

getnodemessage

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

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");

input

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

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()

loaduser

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

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()

make_pcboard14sys

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

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()

parsecom

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

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()

printf

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. 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()

readdir

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

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()

remove

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

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()

rewinddir

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

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()

sendnode

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); SEE ALSO getnodemessage()

setenv

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

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()

sprintf

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

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()

strcat

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

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));

stupcase

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

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()

time

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

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()

tictactoe

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

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);

BBBS variables

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

VARIABLE bc_count_of_co TYPE int (constant) DESCRIPTION Holds the total number of conferences in the system.

bc_post_conf

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

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.

bc_fileinfo_co

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

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]);

bc_status

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

VARIABLE bc_confname[x] TYPE char (constant), indexed DESCRIPTION Returns the name of conference #x.

bc_description

VARIABLE bc_description[x] TYPE char (constant), indexed DESCRIPTION Returns the description of conference #x.

bc_ulastead

VARIABLE bc_ulastread[x] TYPE int (constant), indexed DESCRIPTION Returns the user's lastread pointer for conference #x.

bc_ustatus

VARIABLE bc_ustatus[x] TYPE int (constant), indexed DESCRIPTION Returns the user's status bits for conference #x.

bf_timleft

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); }

bg_bbbs_name

VARIABLE bg_bbbs_name TYPE char (constant) DESCRIPTION Returns the name of the board.

bg_sysop_name

VARIABLE bg_sysop_name TYPE char (constant) DESCRIPTION Returns the name of User #0, which is the "real" SysOp.

bg_closed_pass

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

VARIABLE bg_grabfile TYPE char (constant) DESCRIPTION Returns the name of the grabfile as you have defined it in BCFG/4.

bg_maindir

VARIABLE bg_maindir TYPE char (constant) DESCRIPTION Returns the path to your main dir including a trailing slash.

bg_updir

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!

bg_tempdir

VARIABLE bg_tempdir TYPE char (constant) DESCRIPTION Returns the path to your work directory including a trailing slash.

bg_menudir

VARIABLE bg_menudir TYPE char (constant) DESCRIPTION Returns the path to your main menu directory including a trailing slash.

bg_tickdir

VARIABLE bg_tickdir TYPE char (constant) DESCRIPTION Returns the path to your tick files directory including a trailing slash.

bg_NetMail

VARIABLE bg_NetMail TYPE char (constant) DESCRIPTION Returns the path to your NetMail directory including a trailing slash.

bg_inbound

VARIABLE bg_inbound TYPE char (constant) DESCRIPTION Returns the path to your inbound files directory including a trailing slash.

bg_feelingsdir

VARIABLE bg_feelingsdir TYPE char (constant) DESCRIPTION Returns the path to your feelings directory including a trailing slash.

bg_scriptdir

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

VARIABLE bg_max_nodes TYPE int (constant) DESCRIPTION Returns the number of nodes configured in your system.

bg_bankmax

VARIABLE bg_bankmax TYPE int (constant) DESCRIPTION Returns the maximum amount of time allowed to store in the Time Bank.

bg_newu_time

VARIABLE bg_newu_time TYPE int (constant) DESCRIPTION Returns the default timelimit for new users.

bg_bankrate

VARIABLE bg_bankrate TYPE int (constant) DESCRIPTION Returns the ratio divider used for calculating the Time Bank ratio.

bg_newu_access

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

bg_gtoggles

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

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

bg_zone

VARIABLE bg_zone[x] TYPE int (constant), indexed DESCRIPTION Returns the zone part of FidoNet AKA #x.

bg_net

VARIABLE bg_net[x] TYPE int (constant), indexed DESCRIPTION Returns the net part of FidoNet AKA #x.

bg_node

VARIABLE bg_node[x] TYPE int (constant), indexed DESCRIPTION Returns the node part of FidoNet AKA #x.

bg_point

VARIABLE bg_point[x] TYPE int (constant), indexed DESCRIPTION Returns the point part of FidoNet AKA #x.

bl_modem_init1

VARIABLE bl_modem_init1 TYPE char (constant) DESCRIPTION Returns the first of the three line Init string from BCFG/4.

bl_modem_init2

VARIABLE bl_modem_init2 TYPE char (constant) DESCRIPTION Returns the second of the three line Init string from BCFG/4.

bl_modem_init3

VARIABLE bl_modem_init3 TYPE char (constant) DESCRIPTION Returns the third of the three line Init string from BCFG/4.

bl_modem_hangu

VARIABLE bl_modem_hangu TYPE char (constant) DESCRIPTION Returns the configured string to force the modem to hang up.

bl_modem_busy_

VARIABLE bl_modem_busy_ TYPE char (constant) DESCRIPTION Returns the configured string to set the modem busy from BCFG/4.

bl_modem_answe

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.

bl_fd_dobbs

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

VARIABLE bl_logfile TYPE char (constant) DESCRIPTION Returns the path and the filename of the current node's log file.

bl_loginlog

VARIABLE bl_loginlog TYPE char (constant) DESCRIPTION Returns the path and the filename of the current node's login file.

bl_grabdir

VARIABLE bl_grabdir TYPE char (constant) DESCRIPTION Returns the path including a trailing slash for the current node's grab directory.

bl_menudir

VARIABLE bl_menudir TYPE char (constant) DESCRIPTION Returns the path including a trailing slash for the current node's menu directory.

bl_newdir

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.)

bl_spyfile

VARIABLE bl_spyfile TYPE char (constant) DESCRIPTION Returns the filename for the current node's temporarly spyfile. Empty if none defined.

bl_start_speed

VARIABLE bl_start_speed TYPE int (constant) DESCRIPTION Returns the configured start speed from BCFG/4.

bl_min_speed

VARIABLE bl_min_speed TYPE int (constant) DESCRIPTION Returns the configured minimum speed to log in from BCFG/4.

bl_base_addres

VARIABLE bl_base_addres TYPE int (constant) DESCRIPTION Returns the configured base I/O address for the communications port for the current node.

bl_irq

VARIABLE bl_irq TYPE int (constant) DESCRIPTION Returns the configured IRQ address for the communications port for the current node.

bl_pollrate

VARIABLE bl_pollrate TYPE int (constant) DESCRIPTION Returns the configured polling rate for current node.

bl_answer_ring

VARIABLE bl_answer_ring TYPE int (constant) DESCRIPTION Returns the configured number of rings to answer on for the current node.

bl_ltoggles

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

bn_split

VARIABLE bn_split TYPE int DESCRIPTION Currently unused, should be zero.

bn_bstatus

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.

bn_zstatus

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

VARIABLE bn_speed TYPE int DESCRIPTION Line connect speed, 0 if local.

bn_time

VARIABLE bn_time TYPE int DESCRIPTION Login time, hours*256+minutes.

bn_nick

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".

bn_realname

VARIABLE bn_realname TYPE char DESCRIPTION Returns the realname of current user.

bu_name

VARIABLE bu_name TYPE char (constant) DESCRIPTION Returns the users name as written to BBBS in uppercase. EXAMPLE CODE printf("%s\n",bu_name);

bu_address

VARIABLE bu_address TYPE char DESCRIPTION Returns the users address as written to BBBS. EXAMPLE CODE printf("%s\n",bu_address);

bu_city

VARIABLE bu_city TYPE char DESCRIPTION Returns the users city as written to BBBS. EXAMPLE CODE printf("%s\n",bu_city);

bu_phone

VARIABLE bu_phone TYPE char DESCRIPTION Returns the users phonenumber as written to BBBS. EXAMPLE CODE printf("%s\n",bu_phone);

bu_birth

VARIABLE bu_birth TYPE char DESCRIPTION Returns the users birthday as written to BBBS. EXAMPLE CODE printf("%s\n",bu_birth);

bu_ok2login

VARIABLE bu_ok2login TYPE int DESCRIPTION Contains users login status. There are five 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. 3 = kill+boot The user name is removed, and the user cannot login again with that name until BBBS BPUS is called. 4 = unverified The user has not been verified by the callback verifier. EXAMPLE CODE printf("Login status: %u\n",bu_ok2login);

bu_termcap

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"); }

bu_pagelength

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

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

bu_language

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

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

bu_packtype

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

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.

bu_nodemsgfilt

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

VARIABLE bu_timelimit TYPE int DESCRIPTION Returns the daily timelimit of the user. 0 means the user has unlimited time.

bu_timeleft

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

VARIABLE bu_timeson TYPE int DESCRIPTION Returns the number of logins for all time for the current user.

bu_msgleft

VARIABLE bu_msgleft TYPE int DESCRIPTION Returns the number of messages written for the current user for all time.

bu_uploaded

VARIABLE bu_uploaded TYPE int DESCRIPTION Returns the number of files uploaded by the current user.

bu_downloaded

VARIABLE bu_downloaded TYPE int DESCRIPTION Returns the number of files dowloaded by the current user.

bu_pmsgleft

VARIABLE bu_pmsgleft TYPE int DESCRIPTION Returns the number of messages left since the last reset for the current user.

bu_puploaded

VARIABLE bu_puploaded TYPE int DESCRIPTION Returns the number of files upload since the last reset for the current user.

bu_pdownloaded

VARIABLE bu_pdownloaded TYPE int DESCRIPTION Returns the number of files downloaded since the last reset for the current user.

bu_ptimeson

VARIABLE bu_ptimeson TYPE int DESCRIPTION Returns the number of calls since the last reset for the current user.

bu_pmsgdumped

VARIABLE bu_pmsgdumped TYPE int DESCRIPTION Returns the number of messages dumped since the last reset for the current user.

bu_pmsgread

VARIABLE bu_pmsgread TYPE int DESCRIPTION Returns the number of messages read since the last reset for the current user.

bu_pkbup

VARIABLE bu_pkbup TYPE int DESCRIPTION Returns the number of kilobytes uploaded since the last reset for the current user.

bu_pkbdown

VARIABLE bu_pkbdown TYPE int DESCRIPTION Returns the number of kilobytes downloaded since the last reset for the current user.

bu_fchecked

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.

bu_timebank

VARIABLE bu_timebank TYPE int DESCRIPTION Returns the number of minutes the current user has stored in his/hers timebank.

bu_resume

VARIABLE bu_resume TYPE int DESCRIPTION Returns the message number in the User Info conference that contains the current users userresume.

bu_limits

VARIABLE bu_limits TYPE int DESCRIPTION Returns a number containing different user limits, corresponds to "u limit" command.

bu_access

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

bu_utoggles

VARIABLE bu_utoggles TYPE int DESCRIPTION Returns a number containing several different user toggles. The bits are: 0 Not insert mode 1 Indent mode 2 XY Display in editor 3 Don't flash your name 4 Conference status at login 5 Expert mode (most significant bit) 7 Colors 8 Review own messages 9 Real VT100 keyboard 10 Quote messages 11 Silent mode 12 Return to read menu with enter-key 13 Expert mode (less significant bit) See also misc/bbbsdef.h, utog_ macros.

bu_firsttime

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

bu_lasttime

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

VARIABLE bu_msgread TYPE int DESCRIPTION Returns the number of total messages read for the current user.

bu_msgdumped

VARIABLE bu_msgdumped TYPE int DESCRIPTION Returns the number of total messages dumped for the current user.

bu_kbup

VARIABLE bu_kbup TYPE int DESCRIPTION Returns the total number of kilobytes uploaded for the current user.

bu_kbdown

VARIABLE bu_kbdown TYPE int DESCRIPTION Returns the total number of kilobytes downloaded for the current user.

bu_todaydown

VARIABLE bu_todaydown TYPE int DESCRIPTION Returns the amount of bytes the current user has downloaded today.

bu_userbits

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

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); }

bv_local_buffe

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

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); }

bv_comdevice

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

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 }

bv_interface

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

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

bv_realdir

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

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"); } }

bv_hddesc

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

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) }

bv_tempsys

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 128 May use all chat commands 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

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); }

bv_confnro

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

VARIABLE bv_baud TYPE int DESCRIPTION Returns the baudrate for the current call. If it is a local login, this number will be 9600.

bv_realbaud

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

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)); }

bv_lastmsg

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

VARIABLE bv_curmsg TYPE int DESCRIPTION Returns current message number. EXAMPLE CODE int main() { printf("Current message number is: %u\n",bv_curmsg); }

bv_firstmsg

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

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); }

bv_newavail

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

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); }

bv_serno

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

VARIABLE bv_vername TYPE char DESCRIPTION Returns the BBBS version name. EXAMPLE CODE int main() { printf("OS: %s\n",copy(bv_vername,6,3)); }

bv_ver

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

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"); }

bv_nodenumber

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

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); }

bv_nextevent

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

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.

bv_com

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

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); }

bv_outputstopp

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

VARIABLE bv_quicklogin TYPE int DESCRIPTION Toggles whether quicklogin was used or not. 0 not used 1 used

bv_paged

VARIABLE bv_paged TYPE int DESCRIPTION Number of times user has requested chat with sysop.

bv_groups

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 (,).

bv_txt

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

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).

BBBS/D, BBBS for PC-DOS

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

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

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

The UNIX version of BBBS

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 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 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

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

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 (this requires a modified copy of NetHack that the author of BBBS cannot re-distribute). 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.

Frequently Asked Questions

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. 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 tlim 90 The first command selects user Joe User to be edited, and second one gives him 90 minutes of login time. 23Q: Why does BBBS give me errors when packing with LHA under linux? 23A: The LHA that comes with RedHat 5.2 (and other linux distributions) is broken. It creates "file.lzh", even if BBBS tells it to create "file.su0". You can get an update from: RPM: ftp://contrib.redhat.com/libc6/i386/lha-1.14d-4.i386.rpm DEB: ftp://ftp.debian.org/debian/dists/slink/non-free/binary-i386/ utils/lha_1.14c-1.deb Homepage: http://www2m.meshnet.or.jp/~dolphin/index.htm

About regular expression

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 BBBS also supports "eregexp" or Extended Regular Expressions. Until I can get some good examples, for those linux users out there, try doing a "man 7 regex" for more information. SEE ALSO Wildcards

Wildcards

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

BRoboCop and AreaFix

BBBS comes with built-in AreaFix capabilities, just like any other mail or file tosser. BRoboCop is the central AreaFix "robot" and it handles both mail and file requests. Messages can be sent to AreaFix or BRoboCop, and areafix passwords must be on the subject line. WARNING: AreaFix will not work without an areafix password! Users can also pass extra commands to BRoboCop on the subject line: -h BRoboCop sends the help message menus/brobo_cf back to user -l Gives list of all areas available for user -q Gives list of linked areas available for user -u Gives list of unlinked areas available for user In the actual message text, the following meta commands can be used. Only one command is permitted per line: %help BRoboCop sends the help message menus/brobo_cf back to user %list Gives list of all areas available for user %query Gives list of linked areas available for user %unlinked Gives list of unlinked areas available for user +arearegexp Connect to file or echo area(s) -arearegexp Disconnect file or echo area(s) file +arearegexp Connect to file area(s) file -arearegexp Disconnect file area(s) echo +arearegexp Connect to echo area(s) echo -arearegexp Disconnect echo area(s) Arearegexp's are standard regular expressions used to find message or file echo names. The arearegexp "%all" will be expanded to ".". Find out more information on Regular Expressions. Example: From: Joe Sysop, 111:1200/58 To: BRoboCop, 111:111/0 Subj: MYPASSWD -l +^STN This will connect Joe Sysop at 111:1200/58 to all message and file echos with names starting with STN and will also send him a list of all the message and file echos he has access to.

The MG Reference Manual

[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 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 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. 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. 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. 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 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. 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. 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. 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 ~~~~~~~~~~~~~~~~~~~ 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. \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. 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. 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 ~~~~~~~~~~~~~~~~~~~~~~~~~ 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 ~~~~~~~~~~~~~~~~~~~~~~ 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 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. 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. 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 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 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. 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 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 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

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 internal 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 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: 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 18618 SW Bryant St. Beaverton, Or. 97006 Fidonet: 1:105/8.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 [_] 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: ______ ______ ______ ______ Expiry date: ___/___ Signature: _________________________________________

How to use the help system

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

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 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 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 Your Modem Reference Guide How to set up your modem and initialization strings.

BCFG4 configuration program, table of contents

The Hitchhiker's Guide To BCFG4 =============================== TABLE OF CONTENTS: The keys in BCFG4 The commandline Global General Toggles Numbers Limits FidoNet Confs Local General Toggles Modem Hotlogins Macros Rush Hour Events OS Other CD-ROM Installer Exit/Don't save Exit/Save

Global: General

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 IP Organization Remote domain IRC Server

Global: Toggles

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 No anonymous FTP No anonymous WWW

Global: Numbers

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

SUBTOPICS: Byte Limits File Limits kB/Day Limits Cost Limits

Global: FidoNet

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) Check destination (BMT) Disable security NNTP gateway SMTP gateway

Global: Conferences

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

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

Local: Toggles

SUBTOPICS: Revbits Local screen echo Save screen on shell Audio bell Local SysOp keys BackDoor enabled Send crashmail Slow protocols Callback enabled Callback verify req.

Local: Modem

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

Local: Events

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

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

Other: CD-ROM Installer

SUBTOPCS: CD-ROM path Desc. path in CD-ROM Virtual base dir. Filedirg name Desc. save directory Desc. file extension Lower dir. names Lower file names Convert all chars OK to process

The keys in BCFG4

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 Checks badecho directory for new conferences

The BCFG4 Commandline

BCFG4 has a few useful commandline options that can be used: BCFG4 [node] BCFG4 bad BCFG4 bckill [area] [date] {kill} BCFG4 bmove [node] [fromdir] [todir] BCFG4 [node] creates the configuration for node [node]. For example, to create or edit the configuration for node 1, issue BCFG4 1. BCFG4 bad will autocreate echomail areas as defined in external.bbb section [badecho]. BCFG4 bckill can be used to kill inactive message conferences. [area] is a regexp of conference names, while date is the date to check against for inactiveness. For example, a command of: bcfg4 bckill fido. 990101 Will list all the matches of message conferences beginning with fido and not having any messages since before January 1st, 1999. It will show you the last message date as well as the highest number of messages in the conference. Press Q to exit the listing. Adding a . to the end of the command will actually delete the echos. Be very certain you want to do it before adding the kill command because BCFG4 will physically delete the conference then renumber the conferences so once it is killed it cannot be undeleted. So to kill the areas meeting the above criteria you would issue: bcfg4 bckill fido. 990101 . BCFG4 bmove will change the old path [fromdir] to the new path [todir] for the node specified. For example, to change paths from /bbbs/node1/hold to /bbbs/node01/hold (for node 1, of course) you would issue: bcfg4 bmove 1 /bbbs/node1/hold /bbbs/node01/hold

Global: Conferences: Conference Browser

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 -------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

You can move in this menu with the standard editing keys. Under the Global: General choice are the global settings for your BBS.

Main: Global: Toggles

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

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.

Main: Global: FidoNet

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

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.

Main: Local: General

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

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.

Main: Local: Hotlogins

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

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.

Main: Local: Rush Hour

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

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. You can define up to 90 events.

Main: Exit, don't save

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

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

Global: General: BBBS's name

Simply the name of your BBS.

Global: General: SysOp's name

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.

Global: General: NewUser password

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

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.

Global: General: Grabfile name

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

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.

Global: General: Menus directory

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

The name of the directory where new uploaded files should be placed.

Global: General: FidoNet log

The path and file name of the file BOGUS, BMT and BTICK should log their activity into.

Global: General: CD-ROM paths

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".

Global: General: Work directory

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

The name of the directory where the configuration files for the BBBS chat system and feelings are stored.

Global: General: Script directory

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

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.

Global: General: BTERM down dir

The name of the directory BTERM should store downloaded files.

Global: General: BTERM up dir

The name of the directory BTERM should look for files when you invoke the upload command.

Global: General: Internet log

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

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.

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

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.

Global: Toggles: BRoboCop

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

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.

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

If this toggle is enabled, then no address or phone number will be asked from new users.

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

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.

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

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.

Global: Toggles: NewUser access: Download

If this toggle is enabled, then all new users will automatically have download access.

Global: Toggles: NewUser access: Upload

If this toggle is enabled, then all new users will automatically have upload access.

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

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.

Global: Toggles: Chat uses time

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

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.

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

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.

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

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).

Global: Toggles: Grab is free

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

If this toggle is enabled, users can use the file menu commands RM and DEScribe on files they have uploaded.

Global: Toggles: Upload uses time

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

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.

Global: Toggles: No Anonymous FTP

If enabled, BBBS does not allow anonymous FTP users via bbbsd FTP daemon.

Global: Toggles: No Anonymous WWW

If enabled, BBBS does not allow anonymous WWW users via bbbsd HTTP daemon.

Global: Numbers: Total nodes

The total number of nodes in your system. BRoboCop is automatically added if it is enabled. This number should never be higher than the number of nodes in your keyfile. If you have a 7 key license, this number must be 7, not 8 otherwise BBBS will not start. For numbering your nodes, your first node should be your modem node (up to your maximum number of modem (dialin) nodes) and then you should use the remaining node numbers for telnet nodes. For example, in a 7 key system (2 dialin, 5 telnet/local/lan), you should use nodes 1-2 for dialin and nodes 3-7 for telnet. This is because BBBS must have the modem nodes defined first.

Global: Numbers: NewUser timelimit

The daily time limit new users should have on your system, in minutes.

Global: Numbers: Timebank maximum

The maximum amount of time users can save to the timebank, in minutes.

Global: Numbers: Timebank rate

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.

Global: Numbers: HYDRA tx

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

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).

Global: Numbers: Flood count

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

Determines how many lines will included in BRoboCop's reply to AllFix filefind requests. A value of 0 disables the reply.

Global: Numbers: Yell Tune Repeat Count

Determines how many times the yell tune specified in Global: Numbers: Yell tune should be repeated. The default is 30.

Global: Numbers: Yell tune

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 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 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

Global: Numbers: Allow Internet Out

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

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.

Global: Limits: Byte Limits

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. You can define up to 128 different limit values.

Global: Limits: File Limits

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. You can define up to 128 different limit values.

Global: Limits: kB/Day

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. You can define up to 128 different limit values.

Global: Limits: Cost

Users with the limit value on this line are charged money from their account according to these settings (if you defined any accounts). You can define up to 128 different limit values. 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.

Global: Numbers: Max. desc lines

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

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.

Global: Numbers: FAX error

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

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.

Global: FidoNet: General: Location

The location of your system. This will be exchanged in EMSI. For example "Turku, Finland".

Global: FidoNet: General: Phone

The telephone number of your system. Will be exchanged in EMSI.

Global: FidoNet: General: Speed

The maximum modem speed of your BBS in bps. Will be exchanged in EMSI.

Global: FidoNet: General: Flags

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 as it supports WaZOO updates and requests. 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| +------+----+ +------+----+ +------+----+ +------+----+ +------+----+ | 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

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.

Global: FidoNet: General: Nodenumbers

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 You can define up to 44 node numbers.

Global: FidoNet: General: AKA Matching

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.

Global: FidoNet: Sessions: Inbound

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

The name of the NetMail (FTS-0001 format) directory that BBBS should use for file attaches.

Global: FidoNet: Sessions: Tickdir

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

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.

Global: FidoNet: Sessions: Rescan time

BBBS will check your NetMail area for changes after this many minutes have passed since the last check.

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.

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

If this toggle is enabled, the internal HYDRA protocol is used in EMSI mail sessions.

Global: FidoNet: Sessions: ZedZap

If this toggle is enabled, the internal ZedZap (ZModem variant) protocol is enabled in EMSI mail sessions.

Global: FidoNet: Sessions: Tranx toggle

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.

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

If this toggle is enabled, BBBS will accept mail from points that are not listed on the nodelist.

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

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.

Global: FidoNet: Origins

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

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.

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

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

Global: FidoNet: FREQ: Maximum 100 kB'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

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

Global: FidoNet: FREQ: Minimum baud

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

Specifies how long BBBS should wait before dialing again the number that was busy on the previous call. Units are in minutes.

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

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.

Global: FidoNet: Dial: Convert from

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

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

Global: FidoNet: FREQ: Magic files

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

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.

Global: Conferences: Total

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

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.

Global: Conferences: Resume

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

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.

Global: Conferences: Name

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

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.

Global: Conferences: *.MSG path

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

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.

Global: Conferences: Msg scan

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

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.

Global: Conferences: Origin

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

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.

Global: Conferences: BPC min

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

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.

Global: Conferences: Must for all

If this toggle is enabled, users cannot resign from the selected conference with the read menu command 'RESign'.

Global: Conferences: Invite users

If this toggle is enabled, then users are automatically invited as members of the selected conference on their first call.

Global: Conferences: Post conf.

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

If this toggle is enabled, then both public and private messages are allowed on the selected conference.

Global: Conferences: No reply

If this toggle is enabled, then users cannot reply to messges written to the selected conference.

Global: Conferences: No mark reset

If this toggle is enabled, then users cannot mark the messages on the selected conference as read; they must read them all.

Global: Conferences: Fido area

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

If this toggle is enabled, then this conference will function as an AGNET area.

Global: Conferences: No Fido strip

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

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.

Global: Conferences: NameFix

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

If this toggle is enabled, then users can write messages using alias names (set with the 'u set alias' command) in the selected conference.

Global: Conferences: Allow taglines

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

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.

Global: Conferences: Export

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

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).

Global: Conferences: Fido export

Specifies the nodenumbers to which messages from this conference are to be exported, separated with spaces.

Global: Conferences: Fido group

Specifies the one character FidoNet group ID for this conference. Used just to group different networks under one ID.

Global: Conferences: Fido flags

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

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. This can be used to import more than just echomail conferences, however. You can also use this command to import newsgroups with a few slight modifications. Create a file listing the newsgroups you wish to add (you might want to use bbbs bnntp g ... command to download a list of available newsgroups then cut and paste) so that it resembles a standard fidonet.na file. Fill in your defaults and make sure the NNTPname field contains only a dash (-) character. Then press ESC to import your new newsgroups. A fidonet.na style file looks like: [echoname] [echo description]

Global: Conferences: Multiadd: Prefix

Specifies the prefix string to be added to conference names.

Local: General: Logfile

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).

Local: General: Spy file

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

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)

Local: General: Grab directory

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

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.

Local: General: Uptemp directory

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

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.

Local: General: Nodemsg poll rate

How often to poll nodemessages. Smaller values are faster. One unit is about two seconds.

Local: General: Blackout timer

Blank screen when blackout timer (in minutes) has expired with no activity on internal answer mode. Use 0 to disable.

Local: Toggles: Local screen echo

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

Restore original screen after external program.

Local: Toggles: Audio bell

Enables local audio bell. If bell is disabled, you won't hear if someone is yelling you.

Local: Toggles: Local SysOp keys

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.

Local: Toggles: Callback enabled

Enables the callback.bz script. If this is not toggled, the callback script will NOT work.

Local: Toggles: Callback verify required

This tells BBBS that the use of callback.bz is required, and that users must be validated by the Callback Verifier before gaining access to the system. Files used by the Callback Verifier are: main/okphone - only phone numbers listed in this file will be called back by main/trashpho - opposite of okphone, phone numbers listed in this file will not be called back menus/cbv1 - shown before disconnecting the user and calling back menus/cbv2 - shown after successfully calling the user back menus/cbvphone - tells the user the format of the phone number to enter The Callback Verifier replaces prompting the user for a password. It will assign the user a random password upon successfully completing the Callback Verification.

Local: General: Sleep disconnect

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.

Local: General: Send crashmail

Enables crashmail polling for this node. All crash mail will be sent immediately.

Local: General: BackDoor

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.

Local: General: FAX baud

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

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.

Local: General: Lockup timeout

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

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.

Local: General: SMS sender

This field is for the SMS sender's phone number (generally will be your own phone number).

Local: Toggles: Slow protocols

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).

Local Toggles: Callback enabled

When enabled, this node will allow usage of the callback.bz script. Otherwise the callback.bz script is disabled.

Local: General: Poll flags

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.

Local: Toggles: Revbits

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

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).

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

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

Local: Modem: General: Busy string

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

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

Local: Modem: General: Aftercall lines

BBBS will log this many lines after aftercall string. There is also 5s timeout.

Local: Modem: General: Start baud

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.

Local: Modem: General: Base address

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

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.

Local: Modem: General: Ringing count

Remote is considered as down after this many number of RINGING messages.

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).

Local: Modem: General: Hangup at logout

Hang up the phone after user logs off.

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.

Local: Modem: General: Null modem login

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

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.

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

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.

Local: Modem: Answer: Don't answer

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

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.

Local: Modem: Answer: Count

Answer to countth call, usually 1. Some caller id systems require you to ignore first ring and use the second.

Local: Modem: Answer: String

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.

Local: Macros: Keyboard Macros

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

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.

Local: Rush Hour: Rush Hour Timelimits

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

Run this event on Sunday.

Local: Events: Monday

Run this event on Monday.

Local: Events: Tuesday

Run this event on Tuesday.

Local: Events: Wednesday

Run this event on Wednesday.

Local: Events: Thursday

Run this event on Thursday.

Local: Events: Friday

Run this event on Friday.

Local: Events: Saturday

Run this event on Saturday.

Local: Events: Start hour

The start hour for this event. Event may not cross day boundary! See Also: Dial-event

Local: Events: Start min

The start minute for this event. Event may not cross day boundary! See Also: Dial-event

Local: Events: End hour

The end hour for this event. Event may not cross day boundary! See Also: Dial-event

Local: Events: End min

The end minute for this event. Event may not cross day boundary! See Also: Dial-event

Local: Events: Errorlevel

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

Don't allow users to log in when this event in running.

Local: Events: Flexible even

Event can "slide" if users logs in.

Local: Events: Event is a 'must'

Force event to be run once a day, even if the time has already elapsed.

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

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.

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

Try to poll crashmail to all systems during this event.

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

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).

Local: OS: OS/2 Priority

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

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.

Local: OS: Amiga Priority

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

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.

Local: OS: Allow break in shell

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

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.

Local: OS: Fix RAR's 'feature'

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

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.

Local: OS: Change titlebar

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

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.

Global: General: Hostname

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: IP

This allows you to define your own IP and netmasks. An example would be: 127.0.0.1/32,10.0.0.1/8,195.16.193.12/0 This tells BBBS to use IP addresses as follows: 127.0.0.1 for connections coming from 127.0.0.1 10.0.0.1 for connections coming from 10.0.0.0-10.255.255.255 195.16.193.12 for any other connections. This is useful for people with an NAT/SUA link to the internet. For most others, leaving it blank or just using your normal IP address (ie. 195.16.193.12) is good enough.

Global: General: Remote domain

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'

Global: FidoNet: BOGUS: NNTP gateway

Act as a NNTP (news) gateway, convert remotely (net) enter messages to remote domain form.

Global: FidoNet: BOGUS: SMTP gateway

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 send the email messages to you as a normal NetMail message, receiver must be "receiver@remote.host".

Global: Toggles: NNTP save headers

If this toggle is on all the headers in incoming NNTP (news) messages are saved to message as kludges.

Global: Toggles: SMTP save headers

If this toggle is on all the headers in incoming SMTP (email) messages are saved to message as kludges.

Local: Modem: Dial

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

When processing incoming mail bundles BOGUS unpacks them here.

Global: FidoNet: BOGUS: Temporary out pkt

Outgoing packets are temporarily created here.

Global: FidoNet: BOGUS: Outbound

Outgoing mail bundles are stored here.

Global: FidoNet: BOGUS: Badecho: area

Incoming messages to unknown area are stored here in FTS-0001 format.

Global: FidoNet: BOGUS: Badecho: secure

Incoming messages to secure area with access are stored here in FTS-0001 format.

Global: FidoNet: BOGUS: Max open files

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

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.

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

Maximum size for outgoing bundle file in kilobytes. 0 is unlimited. Normally this should be about 2048.

Global: FidoNet: BOGUS: Save badecho: area

Toggle for saving messages to unknown area.

Global: FidoNet: BOGUS: Save badecho: secure

Toggle for saving messages violating secure setting.

Global: FidoNet: BOGUS: Save all NetMail msgs

Toggle for saving all NetMail messages passing through your system.

Global: FidoNet: BOGUS: Log headers(BMT)

If this option is enabled, BMT will log info about messages passing your system.

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.

Global: FidoNet: BOGUS: Disable security

If this option is enabled, BOGUS will not pay any attention to echomail or netmail destinations or packet passwords. This is useful when a downlink has you setup incorrectly and you want to toss the mail anyway. WARNING: This is a very dangerous option to enable! You are very likely to get and generate duplicate messages or experience other problens with this enabled. Please be sure you know what you are doing before you turn this on!

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.

Local: Modem: Voice: Init string

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

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.

Local: Modem: Voice: Playback string

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

Modem command string to start voice recording. ZyXEL: AT+VRX| Rockwell: AT#VRX| Refer to your voice modem manual for more information.

Local: Modem: Voice: Modem device

Device number for telephone line. ZyXEL: 2 Rockwell: 0 Refer to your voice modem manual for more information.

Local: Modem: Voice: Speaker device

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.

Local: Modem: Voice: Mic device

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

Modem command string to enter voice mode. ZyXEL: AT+FCLASS=8| Rockwell: AT#CLS=8| Refer to your voice modem manual for more information.

Local: Modem: Voice: Go data mode

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

Compression method number to be used to record voice calls. ZyXEL: 3 Rockwell: 4 Refer to your voice modem manual for more information.

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

Directory where to store recorded voice calls.

Local: Modem: Voice: Greetings file

Greetings file to be played to called.

Local: Modem: Voice: Remote password

Remote password (DTMF) for listening messages.

Main: CD-ROM installer

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

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.

CD-ROM installer: CD-ROM path

OS path for your CD-ROM drive.

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.

CD-ROM installer: Virtual base directory in BBBS

Virtual base directory in BBBS where to install these files.

CD-ROM installer: Filedirg name

Name of filedirg file. See sysop.gui for more information about these files.

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

Extension for description files. May be left empty.

CD-ROM installer: Lower directory names

Turn case of directories into lower case.

CD-ROM installer: Lower file names

Turn case of files into lower case.

CD-ROM installer: Convert all chars

Don't turn this toggle off, unless you want to keep @ chars in descs as they are (not recommended).