_______
/ /
/ ____/_____ ____ ____ _____ ______ _____ ______
/ /___ / _ //___/ /__ / /___ //__ __//____//_____/
/___ // // /// //_// //__// // //___ //____
____/ // // /// /___/ /___ / // /____//___ /
/ // // ///___ // || // // // //___ ____/ /
/______//____//____/// // // // // /____//_____/
SOCRATES (tm) v1.00
(C) Copyright 1990 Mikronetics
All Rights Reserved
Documentation by Robert D. Swift
Socrates BBS (v1.00) License and Distribution
COPYRIGHT
The SOCRATES program and all support programs described in
this document and included in the SOCRATES system
distribution files are copyrighted and all rights are
reserved by Mikronetics and Michael A. Jacobs.
THIS IS NOT FREE SOFTWARE! If you paid a "public domain"
vendor for this program, you paid for the service of copying
the program, and not for the program itself. Rest assured
that nothing ever gets to the originators of this product
from such a sale. You may evaluate this product, but if you
make use of it, you must register your copy.
We offer several inducements to you for registering. First
of all, you receive the most up-to-date copy of the program
that we have -- and we do update the product on a regular
basis. You also receive support for SOCRATES -- which can
be quite valuable at times. And finally, we have a few
utilities not included in the evaluation package. Make no
mistake, however - this is a fully functional version of
SOCRATES and not "crippled" in any way.
TRADEMARKS
SOCRATES is a trademark of Mikronetics.
Many product names found throughout this manual are
trademarks of various companies. These include:
BinkleyTerm Bit Bucket Software
DSZ Omen Technologies
Fido & FidoNet Tom Jennings and Fido Software
IBM International Business Machines
MS-DOS Microsoft Corp.
Plato Nippon Electric Company (NEC)
X.00 Raymond L. Gwinn
WARRANTY AND DISCLAIMER
The author makes no warranties, expressed or implied, as to
the quality or performance of these programs. The author
will not be held liable for any direct, indirect, incidental
or consequential damages resulting from the use of these
programs. Your use of these programs constitute your
agreement to this disclaimer and your release of the author
from any form of liability or litigation.
- i -
Socrates BBS (v1.00) License and Distribution
DISTRIBUTION
This is "user-supported" software. You are hereby granted a
license to distribute this copy of SOCRATES and its
documentation, subject to the following conditions:
1. SOCRATES may be distributed freely without charge
in evaluation form only.
2. SOCRATES may not be sold, licensed, or a fee
charged for its use. If a fee is charged in
connection with SOCRATES, it must cover the cost
of copying or dissemination only. Such charges
must be clearly identified as such by the
originating party. Under no circumstances may the
purchaser be given the impression that they are
buying SOCRATES itself.
3. SOCRATES must be presented as a complete unit,
including this documentation. Neither SOCRATES
nor its documentation may be amended or altered in
any way.
4. By granting you the right to distribute the
evaluation form of SOCRATES, you do not become the
owner of SOCRATES in any form.
Any other use, distribution or representation of SOCRATES is
expressly forbidden without the written consent of Michael
A. Jacobs.
REGISTRATION
Registering SOCRATES allows you to use the product after the
trial period. Registered SOCRATES users get the current
copy of SOCRATES on disk and priority when calling the
SOCRATES Software support BBS (we guarantee no support to
unregistered users). Most importantly, registered users
know they are helping to make sure that high-quality
software like SOCRATES continues to be sold in this low-cost
way.
SOCRATES registration costs $40 US. Payment may be in the
form of check or money order in US currency. Payment should
be made out to:
Mikronetics
2114 Weatherton Dr.
Wilmington, DE 19810
United States of America
- ii -
Socrates BBS (v1.00) Contents
TABLE OF CONTENTS
COPYRIGHT i
TRADEMARKS i
WARRANTY AND DISCLAIMER i
DISTRIBUTION ii
REGISTRATION ii
TABLE OF CONTENTS iii
1. INTRODUCTION 1
1.1 Program Description 1
1.2 Why Socrates? 2
1.3 Acknowledgements 3
1.4 System Requirements 4
1.5 SOCRATES Files 4
2. INSTALLING SOCRATES 6
2.1 The SOCRATES Directory 6
2.2 Conditions, Signals and States 6
2.3 The Initialization File 7
2.4 Message Areas and Directories 9
2.5 File Areas and Directories 10
2.6 SOCRATES Program File 12
2.7 Bulletins And Display Files 13
3. SOCRATES PROGRAM FILE 14
3.1 Overview 14
3.2 Menus 14
3.3 Responses 16
3.4 Commands 18
3.5 File Lists 22
3.6 Shells and Parameters 23
3.7 Putting It All Together 24
4. RUNNING SOCRATES 26
4.1 Command Line Parameters 26
4.2 User's Special Keys 26
4.3 Running Stand-Alone 27
4.4 Running With A Front End 28
4.5 Re-Entering SOCRATES 30
- iii -
Socrates BBS (v1.00) Contents
5. THE SYSTEM OPERATOR'S ROLE 31
5.1 SysOp Commands 31
5.2 User File Maintenance 32
5.3 Message Area Maintenance 33
5.4 Socrates Type Message Linking 35
APPENDIX 1 - Use of Delimiters 36
APPENDIX 2 - Evaluating Conditions 37
APPENDIX 3 - Initialization File Settings 40
APPENDIX 4 - BBS Program Commands 61
APPENDIX 5 - Shell Parameters
APPENDIX 6 - TimeBanks & Multipliers 119
APPENDIX 7 - FidoNet 121
APPENDIX 8 - Registration Form 122
INDEX 123
- iv -
Socrates BBS (v1.00) Introduction
1. INTRODUCTION
1.1 Program Description
The SOCRATES BBS package has been designed to provide the
ultimate in flexibility. It can be better described as a
BBS "construction set" because all of the menus, user
responses and system activities are defined by the SysOp.
In a sense, the SysOp is actually a "system programmer" and
SOCRATES executes the "programmed" configuration.
In addition to the usual programmable menu choices found in
other systems, SOCRATES even allows you to choose the format
of the message bases used. These can be either sequential
message bases such as used in most FidoNet style BBS
programs, or you can choose to use SOCRATES' own message
base format. The SOCRATES message base groups messages in
an area by subject, thus allowing you to quickly access all
messages related to a particular topic.
SOCRATES is fully FidoNet compatible when used with a front-
end mailer such as BinkleyTerm. In addition, the message
areas can be set up Fido style so that existing message
utilities can be used.
Ease of operation, flexibility and compatibility are the
major strengths of SOCRATES. If this is what you are
looking for in a BBS, look no further... SOCRATES is here!
- 1 -
Socrates BBS (v1.00) Introduction
1.2 Why Socrates?
I have never been one to easily fit into molds. Although
many BBS systems out there are 'configurable', one could
never make any real changes. Change the text in the menus,
alter the messages, sure, but it was still the same thing.
So, being a habitual programmer, I started work on my own
BBS program. As all good programmers should do, I broke the
problem down into its components. At first, I was just
going be yet-another-custom-BBS, but it occurred to me,
there must be many other malcontents out there as well, but
who don't have the time to write their own BBS program. And
thus became my vision of a meta-BBS system, where all the
BBS functions would be there, and it could be up to the
Sysop to decided how he/she/it wants to put it together.
Individuality, what a concept!
So now you're saying, 'Ok, that answers "Why Socrates?," but
why "Socrates?"'.
At the University of Delaware, (where I learn the underlying
principal of this arcane art) there was this obscure
mainframe system called 'Plato' (ah ha! a clue...). On it,
there was a message system called 'notesfiles' which worked
in a subject based system: each subject had a base note and
a list of associated responses. I liked this system much
better then the way Fido and the gang dealt with it. Even
when using links, after reading a subject, you still had to
wade through the notes again when you move on. But on
Plato, if you weren't interested in a subject, just go on to
the next one.
So, I borrowed this idea and wrote myself a message reader.
At the time, though, I wasn't very well studied up on
Ancient Greece, and chose to called it Socrates, thinking it
was Plato who taught Socrates. As it happened, I was wrong;
Socrates taught Plato who taught Aristotle (who taught
Alexander the Great who conquered Greece, Asia Minor, and
Persia and was eventually declared ZC of Zone 2.) But
Aristotle was 9-letters long, and Socrates was the magical
8-letters long, and .SOC made a good extension for my system
files, so Socrates it was.
- 2 -
Socrates BBS (v1.00) Introduction
1.3 Acknowledgements
I'd like to thank the academy, my family, the director, the
producer, my good friend Jack Nicholson...
The most thanks to goes to Bob Swift, the man who took the
crap I wrote as documentation and turned it into this lovely
work of art.
I also appreciate the efforts of my beta-testers who, I'm
assuming from their lack of responsiveness, found absolutely
no bugs...
... and Mike Epler who told me what he wanted for files
functions when I had no concept.
And of course, Thomas Jefferson.
Michael A. Jacobs
aka
Mike J (FidoNet 1:150/199)
- 3 -
Socrates BBS (v1.00) Introduction
1.4 System Requirements
SOCRATES will run on an IBM PCjr, PC, XT, AT, PS/2, or true
compatible with one hard drive and one floppy drive, or two
floppy drives, and with at least 200k of free memory. For a
few functions, such as the DOS Shell, more memory may be
required. SOCRATES will also require that a FOSSIL program
be loaded and, of course, a modem.
To get full use of SOCRATES your modem must meet certain
standards as well. The Carrier Detect signal should not be
forced high (on) by the modem, so that SOCRATES can tell
when you are on-line. This is usually controlled by the
setting of a dip switch on the modem, or a modem command.
The DTR (Data Terminal Ready) signal should not be ignored
by the modem.
1.5 SOCRATES Files
SOCRATES requires that the following files be located within
the system PATH:
RELOGIN.EXE - Re-enter Socrates after exit
SOC-MSG.EXE - Maintains message areas
SOC-SCAN.EXE - Maintains Socrates message areas
SOC-USER.EXE - Maintains user file
SOCRATES.EXE - The SOCRATES program itself
In addition, the following files are used when setting up or
modifying the BBS configuration and must be in the system
PATH:
CR-AREAS.EXE - Compile message area index
CR-FILES.EXE - Compile file area index
CR-INITS.EXE - Compile initialization file
CR-SOC.EXE - Compile configuration file
- 4 -
Socrates BBS (v1.00) Introduction
SOCRATES requires the following files to be in the current
directory when the program is started. These files are
created using the compile programs listed above:
AREAS.SOC - Message area index
COMM.SOC - Command list
COMMINDX.SOC - Command list index
FILES.SOC - File area index
FLST.SOC - Files list
FLSTINDX.SOC - Files list index
FMULT.SOC - Download limits
INITS.SOC - Initialization data
MENU.SOC - BBS menus
MENUINDX.SOC - BBS menus index
QUOTETRK.SOC - Quotes file pointer (if req'd)
RESP.SOC - User responses
RESPINDX.SOC - User responses index
TLIMS.SOC - Time limits
The following files contain the user data for the BBS and
must be in the current directory when SOCRATES is started.
If these files are missing, they will be created when a user
logs onto the system or when SOC-USER is run:
USERS1.SOC - User data
USERS2.SOC - User data
The SOCRATES archive contains the following files:
CR-AREAS.EXE - Compile message area index
CR-FILES.EXE - Compile file area index
CR-INITS.EXE - Compile initialization file
CR-SOC.EXE - Compile configuration file
READ_ME.1ST - Last minute release notes
RELOGIN.EXE - Re-enter Socrates after exit
SOC-AREA.TXT - Sample message area file
SOC-FILE.TXT - Sample files area file
SOC-INIT.TXT - Sample initialization file
SOC-MSG.EXE - Maintains message areas
SOC-PROG.TXT - Sample program definition file
SOC-SCAN.EXE - Maintains Socrates message areas
SOC-USER.EXE - Maintains user file
SOCRATES.DOC - This documentation file
SOCRATES.EXE - The SOCRATES program itself
SOCRATES.REG - Registration form
SOCRATES.REV - Revisions list
SAMPLE.ZIP - Various example files
- 5 -
Socrates BBS (v1.00) Installing Socrates
2. INSTALLING SOCRATES
2.1 The SOCRATES Directory
As with installing any new program on your system you have
to start at the beginning. That is, "Where do I put it?"
Although the Socrates programs can be placed anywhere in
your path, it is strongly recommended that you create a
separate sub-directory for the BBS. Throughout this
document, we will use the example of the files installed in
the C:\SOCRATES sub-directory.
Okay, you have a directory. Now, what goes into this
directory? First, copy all the files from the distribution
disk (or archive) into the directory. This will provide you
with much of what you need but there are still a few things
that have to be done before you have a fully functional,
working system. You will have to create sub-directories for
the file and message areas that you want to keep, as well as
customizing and compiling the configuration and program
files. Sound complicated? It really isn't if you take your
time and work through it one step at a time.
2.2 Conditions, Signals and States
You're probably thinking to yourself, "what do they mean by
conditions, signals and states?" Simply put, these provide
the flexibility and programming power of the SOCRATES
bulletin board system.
Signals are like "keys" assigned to a user. The command
files can check if a user has a certain signal enabled and
perform differently depending on whether they do or don't.
This is useful for setting conditions independent of a
user's privilege level. There are 256 signals available,
numbered from 0 to 255.
States are similar to signals except that they are set by
the system while a caller is on-line and are reset when the
caller logs off. These are useful for setting conditions
depending on what has happened while the user is on line,
such as only allowing one time through a bulletin or only
paging the SysOp once. There are 256 states available,
numbered from 0 to 255.
Conditions are constants, variables or formulae that
evaluate to either a logical true or false state. These can
then be applied to some of the lines in the initialization
file and most of the lines in the program file to alter the
way the SOCRATES engine deals with these command lines.
See APPENDIX 2 for a complete list of the constants and
variables used in defining conditions.
- 6 -
Socrates BBS (v1.00) Installing Socrates
2.3 The Initialization File
This is the file that tells the SOCRATES engine a little
about your system and how to communicate with your modem.
This file is a straight text file and can have any valid
file name. There is no default name but a commonly used
name is SOC-INIT.TXT (pronounced sock-in-it).
The initialization file commands include the following
groups:
Modem Settings
PORT comm port
BAUD default baud rate
MODEMINIT initialization string
MODEMHANGUP hang-up string
Logon Settings
NAMEPROMPT user name prompt string
DATAPROMPT user data prompt string
PASSWORDATTEMPTS maximum password attempts
LOGONTIME maximum time to log on
PRIVATESYSTEM no new users allowed
FORGOTPASSWORDCOMM wrong password commands
FORGOTPASSWORDMENU wrong password menu
New User Settings
NEWUSERPRIV privilege level
NEWUSERHELP help level
NEWUSERCOMM1 commands before password
NEWUSERCOMM2 commands after password
NEWUSERSCREENWIDTH screen width
NEWUSERSCREENLENGTH screen length
NEWUSERSIGNALS initial signals
NEWUSERMENU first menu displayed
Menu and Display Screen Settings
WELCOMEFLST welcome file displayed
INTROCOMM commands after logon
FIRSTMENU first menu displayed
- 7 -
Socrates BBS (v1.00) Installing Socrates
Time Limit Settings
TIMELIMIT time limits multiplier
SESSIONTIMELIMIT default time limit for
session
DAILYTIMELIMIT default time limit for
day
EXCEEDEDDAILYTLIMCOMM commands after max time
ONLINEUPLOADREFUND on-line refund multiplier
ACTIVETIMEBANKUPLOADREFUND active time bank
refund multiplier
PENDINGTIMEBANKUPLOADREFUND pending time bank
refund multiplier
DAILYTIMEBANKROLLOVER daily pending to active
timebank transfer
FidoNet Settings
ZONE zone number
NET net number
NODE node number
POINT point number
Message Area Settings
CLEARBEFOREMESSAGE clear screen before msg
CUTATSEENBY don't show SEEN-BY lines
READPRIVATE allow reading private msg
WRITEPRIVATE allow writing private msg
FORCEPRIVATE force msg to be private
FIDONET identify netmail area
ALLOWQUOTING allow user to quote
APPENDORIGIN add ORIGIN: line
ORIGINLINE ORIGIN: line string
File Area Settings
FILESLISTFILE name of file list file
FILESMULT files limits multiplier
SESSIONBYTESTHRESHOLD max session d/l bytes
DAILYBYTESTHRESHOLD max daily d/l bytes
TOTALBYTESTHRESHOLD max total d/l bytes
SESSIONFILESTHRESHOLD max session d/l files
DAILYFILESTHRESHOLD max daily d/l files
TOTALFILESTHRESHOLD max total d/l files
SESSIONBYTESRATIO max session d/l:u/l ratio
DAILYBYTESRATIO max daily d/l:u/l ratio
TOTALBYTESRATIO max total d/l:u/l ratio
SESSIONFILESRATIO max session d/l:u/l ratio
DAILYFILESRATIO max daily d/l:u/l ratio
TOTALFILESRATIO max total d/l:u/l ratio
Miscellaneous Settings
LOGFILE system log filename
INACTIVITYTIMELIMIT inactivity before logoff
STARTCHATMSG string at start of chat
ENDCHATMSG string at end of chat
- 8 -
Socrates BBS (v1.00) Installing Socrates
See APPENDIX 3 for a complete description of the command
settings and their use.
Note that all blank lines are ignored as well as anything
following a semi-colon (;) in a non-blank line. This will
allow you to insert comments in your control files.
Once the initialization file is complete, it will have to be
compiled before SOCRATES can use it. This is done by
executing the CR-INITS.EXE program which will read the
initialization file and produce the compiled files
FMULT.SOC, TLIMS.SOC and INITS.SOC which SOCRATES will use.
The CR-INITS.EXE program is executed as follows:
CR-INITS
Note that you will have to re-compile the initialization file each time after a change is made before the change will take effect. 2.4 Message Areas and Directories Now that you have the initialization file completed, the next step is to set up your message areas. First, you should decide what areas you wish to have on your system and whether these areas will be used as Fido areas or SOCRATES areas. You will then need to create a sub-directory for each area. For our example, we will set up a general message area for all users, a private message area for higher priority users, and a Fido NetMail area. We would create the sub- directories: C:\SOCRATES\MSGAREAS\GENERAL C:\SOCRATES\MSGAREAS\PRIVATE C:\SOCRATES\MSGAREAS\NETMAIL Now that we have our directories, we have to tell SOCRATES about them. This is done in the areas definition file which is an ordinary text file. There is no default file name for this file but a commonly used name is SOC-AREA.TXT. This file is quite straightforward because each line defines a message area and only contains two entries, path to message area and message area type, separated by spaces. The path to the message area need not end in a trailing backslash. - 9 - Socrates BBS (v1.00) Installing Socrates The message area type entry must be either Fido or Socrates. Remember that the Socrates areas differ from the Fido areas in that they are subject-oriented and special index files are maintained in the sub-directory. If the area type entry is missing, SOCRATES will assume that the area is a Fido area. Each message area listed in the definition file is assigned a number by SOCRATES, sequentially beginning with 1. This message area number is the number used for the "a=" comparisons when setting conditions. Note that all blank lines are ignored as well as anything following a semi-colon (;) in a non-blank line. This will allow you to insert comments in your control files. Once the message area definition file is complete, it will have to be compiled before SOCRATES can use it. This is done by executing the CR-AREAS.EXE program which will read the definition file and produce the compiled file AREAS.SOC which SOCRATES will use. The CR-AREAS.EXE program is executed as follows: CR-AREAS Note that you will have to re-compile the message area definition file each time after a change is made before the change will take effect. 2.5 File Areas and Directories If you plan to have any areas for uploading or downloading on your system, you will have to set these up as file areas. First, you should decide what areas you wish to have on your system and then you will then need to create a sub-directory for each area. For our example, we will set up a public file area for all users, a private file area for higher priority users, and a Fido Network files area. We would create the sub- directories: C:\SOCRATES\FILEAREA\PUBLIC C:\SOCRATES\FILEAREA\PRIVATE C:\SOCRATES\FILEAREA\NETFILES Now that we have our directories, we have to tell SOCRATES about them. This is done in the areas definition file which is an ordinary text file. There is no default file name for this file but a commonly used name is SOC-FILE.TXT. - 10 - Socrates BBS (v1.00) Installing Socrates This file is quite straightforward because each line defines a file area and only contains two entries, path to download area and path to upload area, separated by spaces. The paths to the areas need not end in trailing backslashes. If the upload path entry is missing, SOCRATES will assume that the upload path is the same as the download path. Each file area listed in the definition file is assigned a number by SOCRATES, sequentially beginning with 1. This message area number is the number used for the "FA=" comparisons when setting conditions. Note that all blank lines are ignored as well as anything following a semi-colon (;) in a non-blank line. This will allow you to insert comments in your control files. Once the file area definition file is complete, it will have to be compiled before SOCRATES can use it. This is done by executing the CR-FILES.EXE program which will read the definition file and produce the compiled file FILES.SOC which SOCRATES will use. The CR-FILES.EXE program is executed as follows: CR-FILES Note that you will have to re-compile the file area definition file each time after a change is made before the change will take effect. Now that you have your file area control file compiled, you have one more thing to do before your system's file areas are ready. That is to build a files list file in each of the specified download areas. The name of this file list file is defined by the FILESLISTFILE entry in your initialization file. The files list file is a text file listing the files available for download in that area. Each file is listed on a separate line, followed by a description which will be displayed to the user when they ask for a list of the files. If the first character on a line is a space or an asterisk, then the line is displayed as is. If the first character is an at-sign (@), then the remainder of the file is not displayed. Otherwise, all characters up to the first space are considered a filename and the download directory is searched for that file. If the file is found, SOCRATES will display the filename, the file size and the remainder of the line. If the file is not found, SOCRATES will display the filename, a brief message that the file is unavailable and the remainder of the line. - 11 - Socrates BBS (v1.00) Installing Socrates 2.6 SOCRATES Program File This is the file where you get to let SOCRATES know the design of your BBS and how it should operate. The program file contains the code for all of the BBS menus, the valid user responses and the actions that SOCRATES should take as a result of the various responses. In short, this is where you get to program your BBS. The SOCRATES program file is an ordinary text file. There is no default file name for this file but a commonly used name is SOC-PROG.TXT. There are four types of modules in the SOCRATES program file. These modules are menu, response, command and filelist. Some of the modules have "special codes" associated with them as well as a set of commands. See APPENDIX 4 for a complete description of the program commands and their use. In addition, a sample program file is included to demonstrate some of the features of the system. Note that all blank lines are ignored as well as anything following a semi-colon (;) in a non-blank line. This will allow you to insert comments in your control files. Once the program file is complete, it will have to be compiled before SOCRATES can use it. This is done by executing the CR-SOC.EXE program which will read the program file and produce the compiled files MENUINDX.SOC, MENU.SOC, RESPINDX.SOC, RESP.SOC, COMMINDX.SOC, COMM.SOC, FLSTINDX.SOC and FLST.SOC which SOCRATES will use. The CR-SOC.EXE program is executed as follows: CR-SOC Note that you will have to re-compile the program file each time after a change is made before the change will take effect. - 12 - Socrates BBS (v1.00) Installing Socrates 2.7 Bulletins And Display Files The other files used by SOCRATES are files which are displayed to the user. These files can be either ASCII or ANSI (or just about anything else) and SOCRATES can be programmed to send the appropriate type of file depending on the terminal type defined by the user (or by screen width, et cetera). These files can be defined by the initialization, such as welcome files, or they can be defined in the program file. Some examples of display files defined in the program file are help screens or bulletins. These files need not be compiled for SOCRATES to use them. - 13 - Socrates BBS (v1.00) Socrates Program File 3. SOCRATES PROGRAM FILE 3.1 Overview As stated earlier, the SOCRATES program file is where you can design the way that the SOCRATES engine will execute your BBS. This file is comprised of a number of modules, each module defining part of the system. Each module may be a menu, response list, command list or file list, and is identified by the type and an assigned name. The lines that follow a module label form the module itself until the end of the file or the occurrence of the next module label. Each of the module types is described below. A complete list of the program commands can be found in APPENDIX 4. 3.2 Menus The menu module begins with a line like: MENU to indicate that the following lines define a menu. The lines that follow make up the actual menu and are in the format: [/] [condition] If the condition on the line evaluates to TRUE, the string is displayed (without the delimiters), followed by a carriage return and linefeed if the delimited string is followed by a slash. If there is no slash present, the carriage return and linefeed are suppressed. If the condition is missing, it is assumed to be TRUE. - 14 - Socrates BBS (v1.00) Socrates Program File For example, the menu: Menu Main 'Main Menu'/ h=0 '---------'/ h=0 'A)rea Change'/ h=0 'G)oodbye'/ h=0 'Command:' h=0 + h>=2 'Command (A,G):' h=1 will display as follows if the help level, h, is set to 0: Main Menu --------- A)rea Change G)oodbye Command: Note that the cursor will be left following the colon on the "Command:" line. There are two type of special codes allowed for use in menus. These are display codes and control codes. Display codes cause special information to be displayed while control codes influence what is displayed further on in the menu. If a display code is followed by a slash, the displayed information will be followed by a carriage return and linefeed. Special codes are always delimited by asterisks. The special codes supported are: *CLEAR* *MSGNUM* *HIGHEST* *SUBJECT* *SKIP* *FORCE* *UNFORCE* - 15 - Socrates BBS (v1.00) Socrates Program File For example, consider our original menu with some special codes added: Menu Main *SKIP* 'Main Menu'/ h=0 '---------'/ h=0 'A)rea Change'/ h=0 'G)oodbye'/ h=0 *FORCE* 'Command:' h=0 + h>=2 'Command (A,G):' h=1 So, what would happen now? If commands were stacked up and the help level was set to zero when this menu is run, it would hit the *SKIP* statement and would not display the menu until it reached the *FORCE* statement. It would then display the "Command:" line, but not the "Command (A,G):" line because its condition evaluated to FALSE. For another example, consider that your user is in a long menu (perhaps listing message areas) and they hit Control-C. Okay, the rest of the displayed text is skipped, but you want the prompt to come up no matter what, otherwise your user would just be sitting there with the computer staring back at him. Before the prompt, put in the *FORCE* command and, after skipping for a bit, it will display the prompt line anyway. Clever, huh? 3.3 Responses The next module type is the response module which begins with a line like: RESP to indicate that the following lines define a list of valid user responses. The lines that follow make up the actual response list and are in the format: [mod] [*] [label] [condition] Looks pretty complicated, huh? Again, not really if you take it one piece at a time. The is a valid user response enclosed within delimiters. This must match the user input EXACTLY unless there are modifiers present. Note that the responses are continuous strings of characters and if you put any spaces in the string, the response CANNOT be matched. - 16 - Socrates BBS (v1.00) Socrates Program File The [mod] are optional modifiers to the user's response. These modifiers must be enclosed in square brackets and separated by commas. At present, there are only two modifiers available to you, these being: O - ONE, user's input trimmed to one character C - CAPS, user's input converted to all caps If there is an (optional) asterisk immediately prior to the command, then the command is not executed if there are user inputs stacked up. If the user's input, after the (optional) modifiers are applied, exactly matches the response string then the is executed. Many of the commands require a parameter. When a parameter is required, it must be delimited by any of the following delimiter pairs: () [] {} <> See APPENDIX 4 for a complete description of the available commands. If the command is executed successfully, the menu [label] is the next menu executed. If the command fails, SOCRATES will re-execute the current menu. The final entry on the response line is the [condition]. The response line is only processed if the condition evaluates to TRUE. When a response list is executed, it starts at the first line, and works its way down, evaluating the condition on each line. If the condition is FALSE, SOCRATES proceeds to the next line. If the condition is TRUE, then SOCRATES takes the user's input, changes it according to the modifiers, then compares it to the response string. If these are different, SOCRATES skips to the next line. If there is a match, then the command is executed (unless skipped with the [*] option). If the command is executed successfully, then the next-menu [label] is executed. Should the command fail, then the current menu is executed again. If the entire RESP list fails to turn up a match and no RESP line is run, then SOCRATES displays an error message to the user and re-executes the current menu. - 17 - Socrates BBS (v1.00) Socrates Program File For example, a response module may look like: 'A' [o,c] null Areas 'G' [o,c] logoff 'SECRETS' [c] file(secrets.txt) p>=100 'oop' commlist(orangutan) s25 In the above example, anything starting with an "a" or a "g" in either upper or lower case will match; "SECRETS" in any combination of upper and lower case will match; and "oop" in lower case only will match. Note that order in a response file is very important because SOCRATES will execute the first response line that matches. For example, in the response module: 'BEEP' [c] page 'B' [o,c] null bulletins 'BEEP' MUST come first. If the 'B' line was first, then when the user typed BEEP, SOCRATES would match the 'B' because "beep" would be capitalized and trimmed to one character, thus becoming 'B'. There are two special codes which are available to this module. These both allow user input which is applied to other commands. These codes, which are delimited with asterisks, are: *@* accept any text as user input *#* accept a number as user input See APPENDIX 4 for complete information and examples of the proper use of the response module special codes. 3.4 Commands The command module is simply a collection of valid commands with execution conditions (similar to the way commands are processed in the response module) which can be referenced by a single "COMMLIST" command. This allows you to develop your own command subroutine functions. The command module begins with the line: COMM to indicate that the following lines define a list of commands. The lines that follow make up the actual response list and are in the format: [(parameter)] [condition] - 18 - Socrates BBS (v1.00) Socrates Program File There are three special codes which are available to this module. These all allow you to end further execution of the command list under certain conditions. These codes, which are delimited with asterisks, are: *FAILBREAK* end as failed command if previous command failed. *FAILSUCCEED* end as successful command if previous command failed. *SUCCESSBREAK* end as successful command if previous command was successful. The commands available for use in both the response module and the command module are grouped as follows: General Commands NULL does nothing LOGOFF display filelist and exit FILE display file FILELIST execute a file list COMMLIST execute command list VERSION display Socrates version PAGE call for SysOp USERLIST display user list INFO display user stats SHELL shell specified command EXIT exit with errorlevel WRITE display string WRITELN display string with CRLF LASTTIMECALLED display last time called TIMESCALLED display # times called NUMOFCALLERS display # of callers QUOTE display from quote file LINETOFILE write user data to file NAMETOFILE write user name to file TIMETOFILE write timestamp to file - 19 - Socrates BBS (v1.00) Socrates Program File Change Commands SHOWCHG display user's data SHOWNAME display user name SHOWDATA display user data SHOWPSWD display user password SHOWWIDTH display user scrn width SHOWLENGTH display user scrn length SHOWMORE display user MORE status SHOWHELP display user help level SHOWTERM display user term type CHGNAME change user name CHGDATA change user data CHGPSWD change user password CHGWIDTH change user scrn width CHGLENGTH change user scrn length CHGMORE change user MORE status CHGHELP change user help level CHGTERM change user term type Generic Message Commands AREA change message area ABORT quit (don't save pointer) SAVE quit (save pointer) TOGLPRIV toggle private flag KILL delete message Fido Type Message Commands NEXT go to next message PREV go to previous message MSGNUM go to specified message LINKUP go to SEE-ALSO message LINKDOWN go to REPLY-TO message SHOW re-show current message HEADERS display message headers ENTER write a message RESPOND reply to current message SHOWTOFILE write message to file SHOWTOUSERFILE write message to file (Note that Fido-type message area commands will do nothing in a Socrates-type message area.) - 20 - Socrates BBS (v1.00) Socrates Program File Message Edit Commands EDITFIDONET edit FidoNet TO: address EDITPRIVATE toggle Private flag EDITATTACH toggle FileAttach flag EDITKILLSENT toggle KillSent flag EDITCRASH toggle Crash flag EDITSAVE save message EDITABORT abort message EDITLIST list message so far EDITINSERT insert text after line EDITCONT add text to end of msg EDITDELETEFROM mark first line to delete EDITDELETETO mark last line and delete EDITEDIT edit specified line EDITCHGTO change the TO field EDITCHGSUBJ change the SUBJECT field EDITOUTSIDE invoke outside editor (Note that Edit functions will do nothing unless an ENTER, RESPOND, START, or ADD has been executed. The Edit functions will quit working after an EDITSAVE or EDITABORT has been executed.) Socrates Type Message Commands NEW go to next reply (new) MAIN go to next subject (new) AHEAD1 go to next reply REVERSE1 go to previous reply AHEAD advance replies REVERSE back up replies STAY display current message FORWARD1 go to next subject BACK1 go to previous subject FORWARD advance subjects BACK back up subjects GOSUBJ go to specified subject SUBJLIST display list of subjects START start a new subject ADD reply to current subject STAYTOFILE write message to file STAYTOUSERFILE write message to file (Note that Socrates-type message area commands will do nothing in a Fido-type message area.) File Area Commands FILEAREA change file area LISTFILES list files in FILELIST DOWNLOAD shell with d/l command UPLOAD shell with u/l command - 21 - Socrates BBS (v1.00) Socrates Program File Time Bank Commands UNBANK use bank time on-line UNBANKALL use all bank time on-line SHOWACTIVETIMEBANK display time in active time bank SHOWPENDINGTIMEBANK display time in pending time bank Signal Commands SIGNALOFF turn off signal SIGNALON turn on signal State Commands STATEOFF turn off state STATEON turn on state See APPENDIX 4 for a complete description and examples of the proper use of the commands available for use in the response and command modules. 3.5 File Lists The final module type is the file list module. This module begins with the line: FLST to indicate that the following lines define a list of files to be displayed. The lines that follow make up the actual files list and are in the format: [condition] The file is a file to be displayed. As much path as necessary may be included. When a File List is executed, each line is evaluated in turn. If the condition evaluates to be TRUE, then the file is displayed and processing goes on to the next line. If the condition evaluates to FALSE, then processing just skips to the next line. There are no special codes which are available to this module. - 22 - Socrates BBS (v1.00) Socrates Program File The concept is really pretty simple when illustrated with an example like: RESP bulletins 'B' [o,c] filelist(bulletins) main FLST bulletins lowpriv.bul p<10 highpriv.bul p>9 3.6 Shells and Parameters When using the SHELL, EDITOUTSIDE, DOWNLOAD, and UPLOAD commands, you are essentially executing another program. When executing another program, you will often need to send it command line parameters. Some things can be hard-coded, but many of the parameters are situational. For instance, in the DOWNLOAD, you shell out to an external file-transfer driver, and you will probably need to specify the Download path and possibly the user input (the filename). To pass data into the SHELL, you include parameters in the command data. A parameter is a percent sign (%) followed by a key letter. When SOCRATES executes the command, it converts the parameter into the actual data it represents. The parameters are: %1 - user's input %A - Port number (COMx:) %B - Baud rate %D - Download path (no trailing backslash) %U - Upload path (no trailing backslash) %% - a percent sign (%) - 23 - Socrates BBS (v1.00) Socrates Program File 3.7 Putting It All Together Having gotten this far, you should now have at least a "bare-bones" system, ready to run. Your directory structure (following our example) should look something like this: C:\SOCRATES\ | | |--MSGAREAS\ | | | |--GENERAL\ | | | |--PRIVATE\ | | | |--NETMAIL\ | | |--FILEAREA\ | |--PUBLIC\ | |--PRIVATE\ | |--NETFILES\ The files contained in the sub-directories are as follows: --------------------------------------------- | C:\SOCRATES\ | | | | RELOGIN.EXE SOC-MSG.EXE SOC-SCAN.EXE | | SOC-USER.EXE SOCRATES.EXE CR-AREAS.EXE | | CR-FILES.EXE CR-INITS.EXE CR-SOC.EXE | | AREAS.SOC COMM.SOC COMMINDX.SOC | | FILES.SOC FLST.SOC FLSTINDX.SOC | | FMULT.SOC INITS.SOC MENU.SOC | | MENUINDX.SOC QUOTETRK.SOC RESP.SOC | | RESPINDX.SOC TLIMS.SOC USERS1.SOC | | USERS2.SOC | --------------------------------------------- --------------------------------------------- | C:\SOCRATES\MSGAREAS\PUBLIC\ | | | | LINK.SOC SUBJ.SOC 1.MSG | | 2.MSG 3.MSG 4.MSG | | 5.MSG 6.MSG 7.MSG | | . | | . | | . | --------------------------------------------- - 24 - Socrates BBS (v1.00) Socrates Program File --------------------------------------------- | C:\SOCRATES\MSGAREAS\PRIVATE\ | | | | LINK.SOC SUBJ.SOC 1.MSG | | 2.MSG 3.MSG 4.MSG | | 5.MSG 6.MSG 7.MSG | | . | | . | | . | --------------------------------------------- --------------------------------------------- | C:\SOCRATES\MSGAREAS\NETMAIL\ | | | | 1.MSG 2.MSG 3.MSG | | 4.MSG 5.MSG 6.MSG | | . | | . | | . | --------------------------------------------- --------------------------------------------- | C:\SOCRATES\FILEAREA\PUBLIC\ | | | | FILES.LST and all files for download | --------------------------------------------- --------------------------------------------- | C:\SOCRATES\FILEAREA\PRIVATE\ | | | | FILES.LST and all files for download | --------------------------------------------- --------------------------------------------- | C:\SOCRATES\FILEAREA\NETFILES\ | | | | FILES.LST and all files for download | --------------------------------------------- An example of an initialization file and a working program file are included in the SOCRATES archive. - 25 - Socrates BBS (v1.00) Running Socrates 4. RUNNING SOCRATES 4.1 Command Line Parameters There are four command line switches / parameters that can be used with the SOCRATES program. These are: /L local mode ####/B run with #### baud /1 run once then exit #/O set time limit override. if number is less then the user's normal time limit, use it. These switches will enable you to run SOCRATES locally (for testing or messaging), as a stand-alone BBS or under a "front end" program (like BinkleyTerm). With the exception of operating in "local" mode, you will likely want to operate SOCRATES from within a batch file. In all modes except the local mode, SOCRATES will require that a FOSSIL (Fido-Opus-Seadog Standard Interface Layer) program be loaded. This will handle all communications between SOCRATES and the communications port and modem. Although SOCRATES has been tested with a number of FOSSIL programs, one of the most commonly used is X.00 by Ray Gwinn. Please refer to the documentation that come with whichever FOSSIL that you choose to use for instructions on loading and proper use. 4.2 User's Special Keys While SOCRATES is running, the user can interrupt almost any display by entering either a Control-C or a Control-K. When the user enters a Control-S, the output is paused until the user types another key. When at any menu prompt, the user can stack future commands simply by separating them with spaces. For example, if the user is at the Main Menu, and they want to go into message area 1 and read message #10, all they have to do is type 'M A 1 10'. - 26 - Socrates BBS (v1.00) Running Socrates 4.3 Running Stand-Alone This is the operating mode where SOCRATES is the only program running. As such, it must handle all the duties of the BBS including answering the phone. In this mode, it is very important that the modem initialization and hang-up strings are set up properly. Although this method of operation can be started by simply changing to the SOCRATES sub-directory and entering the command: SOCRATES most people will opt to run the program from within a batch file so as to use the exit capabilities to perform other functions. This can be done by trapping the errorlevel that SOCRATES exits with and branching accordingly. An example of a batch file to execute the SOCRATES program follows: echo off cls c: cd\socrates :top socrates if errorlevel 2 goto games goto end :games [do whatever external games things you want] c: cd\socrates relogin goto top :end - 27 - Socrates BBS (v1.00) Running Socrates 4.4 Running With A Front End The other way of running SOCRATES is to have the program called by another program, such as a mailer like BinkleyTerm. The calling program looks after answering the phone and establishing the connection with the caller. It then transfers control to SOCRATES (usually by exiting with an errorlevel). When SOCRATES is run this way, it is started with the ####/B command line switch to indicate that there is a caller already on-line at #### baud, and the /1 switch to exit SOCRATES after the caller logs off and return control back to the calling program. You can also add the optional #/O switch to override the user's available time, because most mailers will provide the time to the next scheduled event when exiting to a BBS. This "front end" operating method will be necessary if you intend to exchange electronic mail through FidoNet. - 28 - Socrates BBS (v1.00) Running Socrates An example of a batch file to operate this style of BBS is as follows: echo off cls :bink-top c: cd\binkley bt if errorlevel 102 goto soc-mail if errorlevel 101 goto fidomail if errorlevel 100 goto maint if errorlevel 24 goto b2400 if errorlevel 12 goto b1200 if errorlevel 3 goto b300 goto end :b2400 set baud=2400 goto soc-top :b1200 set baud=1200 goto soc-top :b300 set baud=300 :soc-top c: cd\socrates socrates %baud%/B /1 if errorlevel 2 goto games soc-scan goto bink-top :games [do whatever external games things you want] c: cd\socrates relogin goto soc-top :soc-mail cd\socrates soc-msg soc-scan goto bink-top :fidomail [fidonet message packing] goto bink-top :maint [do all your regular maintenance] goto bink-top :end - 29 - Socrates BBS (v1.00) Running Socrates 4.5 Re-Entering SOCRATES By now, you will already have the idea that SOCRATES can be re-entered by the user without having to go through the whole log on sequence again. This will allow your callers to exit to external programs (games and such) and return to the BBS almost transparently. When the EXIT command is used, SOCRATES will create a file called EXITUSER.SOC. This file contains information about the current caller including name, baud rate and time remaining. When the RELOGIN program is executed, the EXITUSER.SOC file is renamed to RELOGIN.SOC, which is used to get the user's name, baud rate and time remaining the next time SOCRATES is run. The user is taken directly to the main menu, by- passing all of the log-in steps. Do not use the RELOGIN.EXE program unless Relogin to the BBS is actually intended. - 30 - Socrates BBS (v1.00) The System Operator's Role 5. THE SYSTEM OPERATOR'S ROLE 5.1 SysOp Commands The SysOp has certain commands available to them while SOCRATES is in operation. The commands that are available while a user is on-line are: / or ? Display the name of the current user and the time that they have left. This will also display a list of Sysop keys. C Enter chat mode. The SysOp can exit this mode by entering a Ctrl-Z. Ctrl-A Enter simultaneous keyboard mode. Any keystrokes entered by the SysOp will be interpreted as input by the user. The SysOp can exit this mode by entering a Ctrl-Z. This mode is useful for leading a new user through the system. Z Reset the user's time limit. Alt-X Log the current user off of the system immediately. When SOCRATES is waiting for a caller, the commands available to the SysOp are: / or ? Display the list of Sysop keys. L Enter local session mode. Alt-X Exit the program and return to DOS. Ctrl-C Exit the program and return to DOS. - 31 - Socrates BBS (v1.00) The System Operator's Role 5.2 User File Maintenance The heart of any good BBS is it's users and most SysOps consider their user files to be among the most important files on their systems (even to the point of backing this list up to a floppy disk EVERY day). SOCRATES does much of the user file maintenance itself, such as adding new entries as required. Even so, there are still times that the SysOp must manipulate the data in this list (whether to correct spelling, adjust a user's privilege, or delete a user entirely). Included in the SOCRATES package is a program called SOC-USER.EXE which allows the SysOp to modify the user database at will. The program is extremely easy to operate. You simply change to the directory where your USERS1.SOC and USERS2.SOC files reside and enter "SOC-USER". When activated, the program will display the data for the first user in your user list. From this screen, you will be able to modify any of the data for this user, or select a different user record to work on. If you enter a question mark, a help screen will be displayed as follows: SOC-USERS - Socrates User File Editor Socrates BBS System v1.00 -- Copyright 1990, Mikronetics Commands: Movement Editing Deleting Adding > Next N Name K Kill + New Entry < Prev D Data U Unkill F First P Password A Kill by Age E End V Privilege ! Purge / Search H Help M More ------------ T Terminal W Width 1 Active TimeBank L Length 2 Pending TimeBank S Signals B Approve TimeBank time Q Quit The majority of the commands are straightforward and need no explanation. The commands that may require some clarification are the Deleting commands. - 32 - Socrates BBS (v1.00) The System Operator's Role The main thing to remember is that when a record is killed, either using the "Kill" or the "Kill by Age" command, the record is only marked for deletion and not actually removed. Because of this, you have the option of changing your mind and retrieving the record by using the "Unkill" command. Once your mind is made up and you want to remove the marked records from the database, you will use the "Purge" command. This will perform the actual record removal and deletion. 5.3 Message Area Maintenance The program SOC-MSG.EXE is included in the SOCRATES package and is used to maintain the message areas. Obviously, you don't want to let the messages just continue to pile up endlessly, so they will need to be trimmed down occasionally (unless you have a LOT more drive space than the rest of us). To use the program, simply enter the following: SOC-MSG The control file is a straight text file containing the commands for maintaining the message areas. There are 3 commands which are used to identify which areas are to be maintained and how the maintenance should be done. The commands are: Area # Select a message area as active. All operations will be performed on this area until another AREA command is executed or until the end of file is reached. Delete m n Messages are deleted in such a way that the first "m" messages are ignored, then the following messages are deleted until there are "m+n" messages remaining. (one often may want to keep the first few messages to retain echomail high- water-marks or message area rules.) Renum Messages are renumbered so that their numbers are contiguous. - 33 - Socrates BBS (v1.00) The System Operator's Role An example of a SOC-MSG control file is as follows: ; ; Sample SOC-MSG.CTL Control File ; Area 1 Delete 1 49 Renum ; Area 84 Delete 0 200 Renum ; ; End of File ; It should also be noted that the SOC-MSG program will update the message read pointers. These pointers are stored in files in each message area. The files are named LMRxxxx.SOC, where the xxxx is a four character hexadecimal number keyed to a user through the USERSx.SOC files. There is one LMRxxxx.SOC file for each user that accesses the message area and these files should not be deleted. - 34 - Socrates BBS (v1.00) The System Operator's Role 5.4 Socrates Type Message Linking The final utility program included in the SOCRATES package is a program called SOC-SCAN.EXE. This program is used to prepare a SOCRATES Type message area for reading by creating all of the subject and link information files. If all messages entered the system through the BBS, then the Socrates Message area files would maintain themselves after being initialized. Fortunately or not, the truth is that most of us are also using echomail. This mail comes from an external source which is completely unaware of the Socrates environment. So how does SOCRATES know how these message fit into the scheme of things? It won't unless you run SOC-SCAN. After importing messages from an external source, SOC-SCAN should be executed. It will go through all SOCRATES message areas and either append new information onto the old subject and link files, or completely re-scan the area if necessary. SOC-SCAN should also be executed after making any kind of modifications to a message area. Specifically, after a SOCRATES message area is processed with SOC-MSG, you must run SOC-SCAN. NOTE: Whenever you start a new Socrates message area or convert a Fido-type to a Socrates-type, you must run SOC-SCAN to initialize the Subject and Link files. - 35 - Socrates BBS (v1.00) APPENDIX 1 - Use of Delimiters APPENDIX 1 - Use of Delimiters Some areas of this manual refer to "delimited strings" and it may not be clear to everyone just what is meant by that. Delimited strings are nothing more than strings of characters that are surrounded by delimiters, or characters which indicate the beginning and end of the string. Delimiters within SOCRATES can be any non-space character. The delimited string then begins with any character, and all characters between this first character and the next occurrence of that same character comprise the text of the string. Most commonly used delimiters are the double quotes ("), such as: "this is the string enclosed in double quotes." This can pose a problem if the string that you want contains a double quote within it. In the case of the string entry: "Demonstrates the problem with using "double" quotes." The actual string used would be: Demonstrates the problem with using and the remainder of the line would be ignored as garbage. However, if the delimiter used were a single quote, the delimited string would look like: 'This demonstrates how "double quotes" can be used.' and the string used by the program would look like: This demonstrates how "double quotes" can be used. Remember, the use of different delimiters can overcome a number of problems that may otherwise occur if only a single delimiter is allowed. Here are some further examples of valid delimited strings: 'this is the text inside a single quote' "inside double quotes" "the hamster said, 'No thank you, sir.'" -the delimiter can be anything- Heven letters and stuffH %completely arbitrary% /got it?/ Note that the asterisk is used as a delimiter to indicate a "special code" in the SOCRATES program file and should not be used as a regular string delimiter. - 36 - Socrates BBS (v1.00) APPENDIX 2 - Evaluating Conditions APPENDIX 2 - Evaluating Conditions Conditions are constants, variables or formulae that evaluate to either a logical true or false state. These can then be applied to some of the lines in the initialization file and most of the lines in the menus file to alter the way the SOCRATES engine deals with these command lines. Logical constants are defined as follows: F False T True Logical variables used by SOCRATES are: S Returns the True or False status of the specified signal. Z Returns the True or False status of the specified state. L True if SOCRATES is running in "local" mode. SBT True if the user has exceeded their download session byte threshold. This is the maximum number of bytes that a user may download in a single session. DBT True if the user has exceeded their download daily byte threshold. This is the maximum number of bytes that a user may download in a single day. TBT True if the user has exceeded their download all-time total byte threshold. This is the maximum number of bytes that a user may download from the BBS. SFT True if the user has exceeded their download session file threshold. This is the maximum number of files that a user may download in a single session. DFT True if the user has exceeded their download daily file threshold. This is the maximum number of files that a user may download in a single day. TFT True if the user has exceeded their download all-time total file threshold. This is the maximum number of files that a user may download from the BBS. - 37 - Socrates BBS (v1.00) APPENDIX 2 - Evaluating Conditions SBR True if the user's current session ratio of downloaded / uploaded bytes exceeds the limit set in the initialization file. DBR True if the user's current daily ratio of downloaded / uploaded bytes exceeds the limit set in the initialization file. TBR True if the user's current all-time total ratio of session downloaded / uploaded bytes exceeds the limit set in the initialization file. SFR True if the user's current session ratio of downloaded / uploaded files exceeds the limit set in the initialization file. DFR True if the user's current daily ratio of downloaded / uploaded files exceeds the limit set in the initialization file. TFR True if the user's current all-time total ratio of session downloaded / uploaded files exceeds the limit set in the initialization file. Other variables that return a numerical value which can be used in a comparison are: A Current message area. FA Current file area. D Current day of the week (0=Sun, 1=Mon, et cetera) H Current help level. M Minutes portion of the current time of day. HR Hours portion of the current time of day (in 24 hour clock format). P Current user's privilege level. TM Current user's terminal type. At present only types 0 (dumb terminal) and 1 (ANSI terminal) have been defined. Other types can be added as required. - 38 - Socrates BBS (v1.00) APPENDIX 2 - Evaluating Conditions Operators which are used for evaluating conditional expressions are as follows: & Logical AND + Logical OR - or ~ Logical NOT < "less than" comparitor > "greater than" comparitor <= or =< "less than or equal to" comparitor >= or => "greater than or equal to" comparitor = "equal to" comparitor () Parentheses are used to set precedence for evaluating expressions Here are some examples of valid conditions: a=2 True for message area number 2. SBT & p<20 True if session byte download limit has been exceeded and the user's privilege is less than 20. a<3 + p=255 Message area number is less than 3 or the user's privilege is equal to 255. - p=255 User's privilege is not equal to 255 - 39 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings APPENDIX 3 - Initialization File Settings Following are the settings available for use in the initialization file. The settings are listed in alphabetical order and give a description of the setting, show the default values, proper syntax and an example line. ----------------------------------------------------------- ACTIVETIMEBANKUPLOADREFUND Multiplier to apply to the time spent uploading which is then refunded to the user's active timebank. Note that the number used must be divided by 20 to yield the true multiplier (ie. number 20 is actually a multiplier of 1). Default: 20 Valid inputs: 0 to 65535 Example: ACTIVETIMEBANKUPLOADREFUND 60 ----------------------------------------------------------- ALLOWQUOTING Setting to determine whether message quoting is supported when replying to a message. Default: T Valid inputs: any condition Example: ALLOWQUOTING (a=2 + a>7) & p=>15 ----------------------------------------------------------- - 40 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings APPENDORIGIN Setting to determine whether a FidoNet EchoMail type "Origin:" line is appended to messages entered. Default: F Valid inputs: any condition Example: APPENDORIGIN (a>3 & a<=6) + a=14 ----------------------------------------------------------- BAUD The baud rate that your modem will be initialized at. Default: 2400 Valid inputs: powers of 2 x 300 (ie. 300, 600, 1200, etc.) Example: BAUD 9600 ----------------------------------------------------------- CLEARBEFOREMESSAGE Setting to determine whether the user's screen is cleared before displaying a message. This entry takes no argument and is disabled unless the entry appears in the initialization file. Default: none Valid inputs: n/a Example: CLEARBEFOREMESSAGE ----------------------------------------------------------- - 41 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings CUTATSEENBY Setting to determine whether SEEN-BY lines (from FidoNet EchoMail) are displayed. This entry takes no argument and is disabled unless the entry appears in the initialization file. Default: none Valid inputs: n/a Example: CUTATSEENBY ----------------------------------------------------------- DAILYBYTESRATIO Ratio of daily downloaded / uploaded bytes that users should not exceed. Default: 1024 Valid inputs: positive integer Example: DAILYBYTESRATIO 15 ----------------------------------------------------------- DAILYBYTESTHRESHOLD Default daily limit of bytes downloaded which may be modified by multipliers. Default: 524288 Valid inputs: positive integer Example: DAILYBYTESTHRESHOLD 2000000 ----------------------------------------------------------- - 42 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings DAILYFILESRATIO Default daily ratio of downloaded / uploaded files that users should not exceed. Default: 1024 Valid inputs: positive integer Example: DAILYFILESRATIO 10 ----------------------------------------------------------- DAILYFILESTHRESHOLD Default daily limit of files downloaded which may be modified by multipliers. Default: 32 Valid inputs: positive integer Example: DAILYFILESTHRESHOLD 20 ----------------------------------------------------------- DAILYTIMEBANKROLLOVER Setting to determine whether the user's time in the pending timebank is rolled over into the active timebank at the end of the day. This entry takes no argument and is disabled unless the entry appears in the initialization file. Default: none Valid inputs: n/a Example: DAILYTIMEBANKROLLOVER ----------------------------------------------------------- - 43 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings DAILYTIMELIMIT Default daily time limit in minutes. This may be modified by multipliers. Default: 240 Valid inputs: 0 to 65535 Example: DAILYTIMELIMIT 90 ----------------------------------------------------------- DATAPROMPT String sent to the caller asking for additional user data. This data need not be the typical City and State information, but can be anything at all. Default: "Where are you calling from?" Valid inputs: delimited string less than 128 characters Example: DATAPROMPT: "What's yer favorite color, kid?" ----------------------------------------------------------- ENDCHATMSG String sent to the user when leaving chat mode. Default: "--------- End Chat with Sysop ----------" Valid inputs: delimited string less than 128 characters Example: ENDCHATMSG "Done chatting. Returning you to SOCRATES." ----------------------------------------------------------- - 44 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings EXCEEDEDDAILYTLIMCOMM Command list executed when a user has exceeded their daily time limit. Default: DAILYTIMEOUT Valid inputs: any command list label Example: EXCEEDEDDAILYTLIMCOMM overtime ----------------------------------------------------------- FIDONET Setting to determine whether FidoNet address information should be included when entering a message. See APPENDIX 7 for more information on the FidoNet electronic mail network. Default: F Valid inputs: any condition Example: FIDONET a=6 ----------------------------------------------------------- FILESLISTFILE File used for listing the files in a "files"area. Default: "FILES.LST" Valid inputs: any delimited valid file name Example: FILESLISTFILE "files.bbs" ----------------------------------------------------------- - 45 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings FILESMULT [] Multiplier to apply to the default download file and byte limits. There can be more than one FILESMULT entry with different conditions attached. These are evaluated in order and the last one that applies is the multiplier that is used. Note that the number used must be divided by 20 to yield the true multiplier (ie. number 20 is actually a multiplier of 1). Default: 20 Valid inputs: positive integer Example: FILESMULT 80 ----------------------------------------------------------- FIRSTMENU First menu presented to a caller after a "normal" log on. Default: MAIN Valid inputs: any menu label Example: FIRSTMENU top ----------------------------------------------------------- FORCEPRIVATE Setting to determine whether all messages entered by the users are marked as "private". Default: F Valid inputs: any condition Example: FORCEPRIVATE a=18 & p<199 ----------------------------------------------------------- - 46 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings FORGOTPASSWORDCOMM Command list executed after a caller has failed the specified number of times to enter the correct password and before they are presented with a menu. Default: FORGOT_PASSWORD Valid inputs: any command list label Example: FORGOTPASSWORDCOMM areyouahacker ----------------------------------------------------------- FORGOTPASSWORDMENU The menu presented to a caller after they have failed the specified number of times to enter the correct password. Default: FORGOT_PASSWORD Valid inputs: any command list label Example: FORGOTPASSWORDCOMM cantrememberit ----------------------------------------------------------- INACTIVITYTIMELIMIT Number of minutes of inactivity before a user gets logged off. Default: 5 Valid inputs: 0 to 65535 Example: INACTIVITYTIMELIMIT 2 ----------------------------------------------------------- - 47 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings INTROCOMM Command list executed after a successful log on. Default: INTRO Valid inputs: any command list label Example: INTROCOMM hitherebuddy ----------------------------------------------------------- LOGFILE Name of the file used to store the user activity log. Default: "SOCRATES.LOG" Valid inputs: any delimited valid file name Example: LOGFILE "c:\socrates\logfiles\my-bbs.log" ----------------------------------------------------------- LOGONTIME Number of minutes a caller has to successfully log on. Default: 4 Valid inputs: 0 to 65535 Example: LOGONTIME 22 ----------------------------------------------------------- - 48 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings MODEMHANGUP String sent to the modem to hang up after a caller has disconnected. Default: "~~+++~~ATH|" Valid inputs: delimited string less than 128 characters Example: MODEMHANGUP "|~~ATH0|~~" Note that the following character translation is done: | becomes a chr(13) [ENTER] ^ translates the NEXT character into a control character (^A sends a Control-A) ~ pauses for one second ' pauses for one tenth of a second ----------------------------------------------------------- MODEMINIT Initialization string sent to the modem when it is being reset. Default: "|ATZ|~~ATE0M0V1X4S0=1|" Valid inputs: delimited string less than 128 characters Example: MODEMINIT "ATE1H0M0V1X7&M4&K1&B1&S1&H3S15=89S0=0~|" Note that the following character translation is done: | becomes a chr(13) [ENTER] ^ translates the NEXT character into a control character (^A sends a Control-A) ~ pauses for one second ' pauses for one tenth of a second ----------------------------------------------------------- - 49 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings NAMEPROMPT String sent to the caller asking for their name. Default: "Your Full Name:" Valid inputs: delimited string less than 128 characters Example: NAMEPROMPT "Y'all better gimme yer real name now!" ----------------------------------------------------------- NET The FidoNet Net that your system is in. See APPENDIX 7 for more information on the FidoNet electronic mail network. Default: -1 Valid inputs: -32768 to 32767 Example: NET 150 ----------------------------------------------------------- NEWUSERCOMM1 Command list executed before a new user is asked to provide a password. Default: NEW_USER1 Valid inputs: any command list label Example: NEWUSERCOMM1 freshmeat ----------------------------------------------------------- - 50 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings NEWUSERCOMM2 Command list executed after a new user is asked to provide a password and before they are presented with a menu. Default: NEW_USER2 Valid inputs: any command list label Example: NEWUSERCOMM2 cherryuser ----------------------------------------------------------- NEWUSERHELP The help level that new users to the system are assigned when they log on for the first time. Default: 0 Valid inputs: 0 to 255 Example: NEWUSERHELP 5 ----------------------------------------------------------- NEWUSERMENU The first menu presented to a new user. Default: NEW_USER Valid inputs: any menu label Example: NEWUSERMENU firstevermenu ----------------------------------------------------------- - 51 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings NEWUSERPRIV The privilege level that new users to the system are assigned when they log on for the first time. Default: 5 Valid inputs: 0 to 255 Example: NEWUSERPRIV 27 ----------------------------------------------------------- NEWUSERSCREENLENGTH The screen length that new users to the system are assigned when they log on for the first time. Default: 24 Valid inputs: 0 to 65535 Example: NEWUSERSCREENLENGTH 43 ----------------------------------------------------------- NEWUSERSCREENWIDTH The screen width that new users to the system are assigned when they log on for the first time. Default: 80 Valid inputs: 0 to 65535 Example: NEWUSERSCREENWIDTH 132 ----------------------------------------------------------- - 52 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings NEWUSERSIGNALS [ ...] The signals that new users to the system are assigned when they log on for the first time. Default: none Valid inputs: any list of numbers from 0 to 255 Example: NEWUSERSIGNALS 1 2 199 255 ----------------------------------------------------------- NODE The FidoNet Node number of your system. See APPENDIX 7 for more information on the FidoNet electronic mail network. Default: -1 Valid inputs: -32768 to 32767 Example: NODE 199 ----------------------------------------------------------- ONLINEUPLOADREFUND Multiplier to apply to the time spent uploading which is then refunded to the user's current session time limit. Note that the number used must be divided by 20 to yield the true multiplier (ie. number 20 is actually a multiplier of 1). Default: 20 Valid inputs: 0 to 65535 Example: ONLINEUPLOADREFUND 10 ----------------------------------------------------------- - 53 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings ORIGINLINE String appended to messages entered when APPENDORIGIN is selected. Default: "" Valid inputs: delimited string less than 128 characters Example: ORIGINLINE "The Best Darn BBS Around!" ----------------------------------------------------------- PASSWORDATTEMPTS Number of tries that caller has to enter the correct password before the program goes into a "forgotten password" mode. Default: 3 Valid inputs: 0 to 65535 Example: PASSWORDATTEMPTS 146 ;EXTREMELY patient SysOp ----------------------------------------------------------- PENDINGTIMEBANKUPLOADREFUND Multiplier to apply to the time spent uploading which is then refunded to the user's pending timebank. Note that the number used must be divided by 20 to yield the true multiplier (ie. number 20 is actually a multiplier of 1). Default: 0 Valid inputs: 0 to 65535 Example: PENDINGTIMEBANKUPLOADREFUND 10 ----------------------------------------------------------- - 54 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings POINT The point address of your system under a FidoNet node. See APPENDIX 7 for more information on the FidoNet electronic mail network. Default: 0 Valid inputs: 0 to 65535 Example: POINT 14 ----------------------------------------------------------- PORT The communications port that your modem is connected to. Note that if an uninstalled comm port is specified, SOCRATES may hang or crash. Default: 1 Valid inputs: 0 to 65535 Example: PORT 2 ----------------------------------------------------------- PRIVATESYSTEM Setting to determine whether new users are allowed onto the system. This entry takes no argument and is disabled unless the entry appears in the initialization file. Default: none Valid inputs: n/a Example: PRIVATESYSTEM ----------------------------------------------------------- - 55 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings READPRIVATE Setting to determine whether the users can read messages marked as "private". Default: F Valid inputs: any condition Example: READPRIVATE -a=18 & p>199 ----------------------------------------------------------- SESSIONBYTESRATIO Ratio of session downloaded / uploaded bytes that users should not exceed. Default: 1024 Valid inputs: positive integer Example: SESSIONBYTESRATIO 512 ----------------------------------------------------------- SESSIONBYTESTHRESHOLD Default session limit of bytes downloaded which may be modified by multipliers. Default: 131072 Valid inputs: positive integer Example: SESSIONBYTESTHRESHOLD 2000000 ----------------------------------------------------------- - 56 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings SESSIONFILESRATIO Ratio of session downloaded / uploaded files that users should not exceed. Default: 1024 Valid inputs: positive integer Example: SESSIONFILESRATIO 100 ----------------------------------------------------------- SESSIONFILESTHRESHOLD Default session limit of files downloaded which may be modified by multipliers. Default: 32 Valid inputs: positive integer Example: SESSIONFILESTHRESHOLD 2 ----------------------------------------------------------- SESSIONTIMELIMIT Default session time limit in minutes. This may be modified by multipliers. Default: 60 Valid inputs: 0 to 65535 Example: SESSIONTIMELIMIT 90 ----------------------------------------------------------- - 57 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings STARTCHATMSG String sent to the user when entering chat mode. Default: "----------- Chat with Sysop ------------" Valid inputs: delimited string less than 128 characters Example: STARTCHATMSG "Hey! I wanna talk to you..." ----------------------------------------------------------- TIMELIMIT Multiplier to apply to the default time limits. There can be more than one TIMELIMIT entry with different conditions attached. These are evaluated in order and the last one that applies is the multiplier that is used. Note that the number used must be divided by 20 to yield the true multiplier (ie. number 20 is actually a multiplier of 1). Default: 20 Valid inputs: positive integer Example: TIMELIMIT 80 ----------------------------------------------------------- TOTALBYTESRATIO Ratio of all-time total downloaded / uploaded bytes that users should not exceed. Default: 8 Valid inputs: positive integer Example: TOTALBYTESRATIO 10 ----------------------------------------------------------- - 58 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings TOTALBYTESTHRESHOLD Default all-time total limit of bytes downloaded which may be modified by multipliers. Default: 1048576 Valid inputs: positive integer Example: TOTALBYTESTHRESHOLD 10000000 ----------------------------------------------------------- TOTALFILESRATIO Ratio of all-time total downloaded / uploaded files that users should not exceed. Default: 1024 Valid inputs: positive integer Example: TOTALFILESRATIO 100 ----------------------------------------------------------- TOTALFILESTHRESHOLD Default all-time total limit of files downloaded which may be modified by multipliers. Default: 64 Valid inputs: positive integer Example: TOTALFILESTHRESHOLD 1000 ----------------------------------------------------------- - 59 - Socrates BBS (v1.00) APPENDIX 3 - Init File Settings WELCOMECOMM Command list executed when a caller connects and before they are asked for name and password. Default: "WELCOME" Valid inputs: any command list label Example: WELCOMECOMM howdy ----------------------------------------------------------- WRITEPRIVATE Setting to determine whether the users can enter messages marked as "private". Default: F Valid inputs: any condition Example: WRITEPRIVATE (a<18 + a>18) & p>15 ----------------------------------------------------------- ZONE The FidoNet Zone that your system is in. See APPENDIX 7 for more information on the FidoNet electronic mail network. Default: 0 Valid inputs: 0 to 65535 Example: ZONE 1 ----------------------------------------------------------- - 60 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands APPENDIX 4 - BBS Program Commands Following are the commands, responses and special codes available for use in the program file. These are listed in alphabetical order and give a description of the command, proper usage and an example line. ----------------------------------------------------------- *#* Module: Response Description: A special code which will accept a numeric input and use the input as User Input. Parameters: none Failure State: n/a Example: menu CHGWIDTH ''/ 'New Width: ' resp CHGWIDTH '' null change *#* CHGWIDTH change ----------------------------------------------------------- *@* Module: Response Description: A special code which will accept any text input and use the input as User Input. Parameters: none Failure State: n/a Example: menu userlist ''/ 'Pattern to match (* = All): ' resp userlist '' null main *@* userlist main ----------------------------------------------------------- - 61 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands ABORT Module: Response or Command Description: A generic message area command that will abort the current message area without saving the last message read pointer. Parameters: none Failure State: none Example: RESP fido 'ABORT' [c] abort no_area ----------------------------------------------------------- ADD Module: Response or Command Description: A Socrates message area command that will add a reply to the current subject. Parameters: none Failure State: Empty TO: field in message Example: COMM do_add stateoff(3) add ----------------------------------------------------------- - 62 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands AHEAD Module: Response or Command Description: A Socrates message area command that will advance the specified number of replies to the current subject. Parameters: number of replies to advance (user input) Failure State: none Example: resp msg_soc '' new 'N' [o,c] new 'M' [o,c] main '0' stay *#* ahead ----------------------------------------------------------- AHEAD1 Module: Response or Command Description: A Socrates message area command that will advance one reply to the current subject. Parameters: none Failure State: none Example: resp msg_soc '' new 'N' [o,c] ahead1 'M' [o,c] main ----------------------------------------------------------- - 63 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands AREA () Module: Response or Command Description: A generic message area command that will change to the specified message area. Parameters: message area number Failure State: (1) AREAS.SOC not found (2) area number not defined (3) area is Socrates type with subject and link files missing. Example: resp areas '1' commlist(area1) fido '2' area( 2) msg_soc '' null no_area ----------------------------------------------------------- BACK Module: Response or Command Description: A Socrates message area command that will back up the specified number of subjects. Parameters: number of subjects to back up (user input) Failure State: none Example: menu backsub *skip* 'Back how many? ' resp backsub *#* back msg_soc '' null msg_soc ----------------------------------------------------------- - 64 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands BACK1 Module: Response or Command Description: A Socrates message area command that will back up one subject. Parameters: none Failure State: none Example: resp msg_soc '' new 'P' [o,c] back1 'M' [o,c] main ----------------------------------------------------------- CHGDATA Module: Response or Command Description: A Change command that will input and change the user's data. Parameters: none Failure State: blank input Example: resp change 'D' [o,c] CHGDATA ----------------------------------------------------------- - 65 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands CHGHELP Module: Response or Command Description: A Change command that will input and change the user's help level to the specified value. Parameters: help level number (user input) Failure State: number out of byte range (0-255) Example: menu CHGHELP ''/ '0) Novice - Full Help'/ '1) Experienced - Some Help'/ '2) Expert - No Help'/ 'New Help Level: ' resp CHGHELP '' null change *#* CHGHELP change ----------------------------------------------------------- CHGLENGTH Module: Response or Command Description: A Change command that will change the user's screen length to the specified value. Parameters: new screen length (user input) Failure State: number out of byte range (0-255) Example: menu CHGLENGTH ''/ 'New Length: ' resp CHGLENGTH '' null change *#* CHGLENGTH change ----------------------------------------------------------- - 66 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands CHGMORE Module: Response or Command Description: A Change command that will toggle the user's MORE? setting. Parameters: none Failure State: none Example: resp change 'M' [o,c] CHGMORE ----------------------------------------------------------- CHGNAME Module: Response or Command Description: A Change command that will input and change the user's name. Parameters: none Failure State: blank input Example: resp change 'N' [o,c] CHGNAME ----------------------------------------------------------- - 67 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands CHGPSWD Module: Response or Command Description: A Change command that will input and change the user's password. Parameters: none Failure State: blank input Example: resp change 'P' [o,c] CHGPSWD ----------------------------------------------------------- CHGTERM Module: Response or Command Description: A Change command that will change the user's terminal emulation type to the specified value. Note that the only difference between terminal types as far as Socrates is concerned is that terminal type 0 uses a Ctrl-L to clear the screen while type 1 uses [2J (the ANSI code to clear the screen). Any other changes, such as ANSI codes in menus, are up to the sysop and can be selected using the TM= condition. Parameters: new terminal type (user input) Failure State: number out of byte range (0-255) Example: menu CHGTERM ''/ ' 0) Dumb Terminal'/ ' 1) ANSI'/ 'New Terminal: ' resp CHGTERM '' null change *#* CHGTERM change ----------------------------------------------------------- - 68 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands CHGWIDTH Module: Response or Command Description: A Change command that will change the user's screen width to the specified value. Parameters: new screen width (user input) Failure State: number out of byte range (0-255) Example: menu CHGWIDTH ''/ 'New Width: ' resp CHGWIDTH '' null change *#* CHGWIDTH change ----------------------------------------------------------- *CLEAR* Module: Menu Description: A special code which will clear the user's screen by sending the appropriate screen clear code as defined by the user's terminal type. Parameters: none Failure State: n/a Example: menu information *skip* *clear* '---- Information ----'/ 'N)ew Uploads'/ 'G)etting around the BBS'/ 'S)ocrates Message Area Information'/ 'Q)uit to Main Menu'/ ----------------------------------------------------------- - 69 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands COMM Module: Command Description: Identifies the start of a command module. Parameters: command module label Failure State: n/a Example: COMM fido_next stateon(1) stateon(2) next ----------------------------------------------------------- COMMLIST () Module: Response or Command Description: Execute a command list identified with a COMM statement. Parameters: command list label Failure State: (1) command list not defined (2) *FAILBREAK* exit from command list Example: menu quest 'Answer the questionnaire now?'/ '(1) Yes (2) Whoops, wrong key. : ' resp quest '1' commlist(quest) main '2' null main ----------------------------------------------------------- - 70 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands DOWNLOAD Module: Response or Command Description: Shell to a specified external file transfer protocol passing user input. Parameters: External file transfer protocol command line complete with parameters passed as user input. Failure State: (1) file not found (2) unable to execute shell Example: menu dl_zmodem 'Files: ' resp dl_zmodem '' null files *@* download(c:\programs\dsz.com port %a speed %b sz %d\%1) ----------------------------------------------------------- EDITABORT Module: Response or Command Description: A message edit command that will abort entry of the current message. Parameters: none Failure State: none Example: menu enter_abort 'Are you sure? ' resp enter_abort 'Y' [o,c] editabort fido -a=2 'Y' [o,c] editabort msg_soc *@* null msg_enter ----------------------------------------------------------- - 71 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITATTACH Module: Response or Command Description: A FidoNet message edit command that will toggle the FileAttach bit in the current message header. Parameters: none Failure State: none Example: resp edit_attach 'A' [o,c] editattach fido a=6 ----------------------------------------------------------- EDITCHGSUBJ Module: Response or Command Description: A message edit command that will input and change the SUBJECT: field of the current message. This command will not work when used in conjunction with the RESPOND or ADD commands. Parameters: none Failure State: none Example: resp msg_enter 'J' [o,c] editchgsubj msg_enter z4 ----------------------------------------------------------- - 72 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITCHGTO Module: Response or Command Description: A message edit command that will input and change the TO: field of the current message. Parameters: none Failure State: blank entry Example: resp msg_enter 'T' [o,c] editchgto msg_enter z4 ----------------------------------------------------------- EDITCONT Module: Response or Command Description: A message edit command that will allow you to continue to add to the end of the current message. Parameters: none Failure State: none Example: resp msg_enter 'C' [o,c] editcont ----------------------------------------------------------- - 73 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITCRASH Module: Response or Command Description: A FidoNet message edit command that will toggle the Crash bit in the current message header. Parameters: none Failure State: none Example: resp edit_crash 'C' [o,c] editcrash fido a=6 ----------------------------------------------------------- EDITDELETEFROM Module: Response or Command Description: A message edit command that will mark the first line of a range of lines for deletion in the current message. No deletion is done until the EDITDELETETO command is executed. Parameters: number of first line to delete (user input) Failure State: (1) line out of range (2) blank line number entered Example: menu delete1 'Delete from line: ' resp delete1 '' null msg_enter *#* editdeletefrom delete2 ----------------------------------------------------------- - 74 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITDELETETO Module: Response or Command Description: A message edit command that will mark the last line of a range of lines for deletion in the current message and delete the line range. Parameters: number of last line to delete (user input) Failure State: (1) end line before start line (2) blank line number entered Example: menu delete2 'Delete to line: ' resp delete2 '' null msg_enter *#* editdeleteto msg_enter ----------------------------------------------------------- EDITEDIT Module: Response or Command Description: A message edit command that will allow you to edit a specified line in the current message. Parameters: number of line to edit (user input) Failure State: line number out of range Example: menu editedit 'Edit line: ' resp editedit '' null msg_enter *#* editedit msg_enter ----------------------------------------------------------- - 75 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITFIDONET Module: Response or Command Description: A FidoNet message edit command that will allow you to edit the FidoNet destination address in the current message header. Parameters: none Failure State: none Example: resp edit_fidonet 'D' [o,c] editfidonet fido a=6 ----------------------------------------------------------- EDITINSERT Module: Response or Command Description: A message edit command that will allow you to insert after a specified line in the current message. Parameters: none Failure State: none Example: menu insert 'Insert after line: ' resp insert '' null msg_enter *#* editinsert msg_enter ----------------------------------------------------------- - 76 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITKILLSENT Module: Response or Command Description: A FidoNet message edit command that will toggle the KillSent bit in the current message header. Parameters: none Failure State: none Example: resp edit_killsent 'K' [o,c] editkillsent fido a=6 ----------------------------------------------------------- EDITLIST Module: Response or Command Description: A message edit command that will list the lines entered so far for the current message. Parameters: none Failure State: none Example: resp msg_enter 'L' [o,c] editlist ----------------------------------------------------------- - 77 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITOUTSIDE Module: Response or Command Description: A message edit command that will create a file called MESSAGE.TXT containing the text entered so far for the current message. The system then shells to the editor specified on the command line. When the editor is exited, Socrates will convert the file MESSAGE.TXT back to message format for further editing. Parameters: text editor to shell to Failure State: shell returned errorlevel other than zero Example: resp msg_enter 'O' [o,c] editoutside(c:\programs\edit.com message.txt) L ----------------------------------------------------------- EDITPRIVATE Module: Response or Command Description: A message edit command that will toggle the Private flag in the header of the current message being written. Parameters: none Failure State: none Example: resp enter_private 'P' [o,c] editprivate fido -a=2 ----------------------------------------------------------- - 78 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EDITSAVE Module: Response or Command Description: A message edit command that will save the current message. Parameters: none Failure State: none Example: resp enter_msg 'S' [o,c] editsave message ----------------------------------------------------------- ENTER [(to_name)] Module: Response or Command Description: A Fido message area command that will allow you to start a new message. If the optional (to_name) follows the command, it will be used for the TO: field. Parameters: TO: field entry (optional) Failure State: (1) empty TO: field (2) empty SUBJECT: field Example: resp enter_msg 'E' [o,c] enter message or comm logoff_message stateon(3) stateoff(4) enter(SysOp) ----------------------------------------------------------- - 79 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands EXIT () Module: Response or Command Description: This command will halt the SOCRATES program with the specified errorlevel. Socrates will create an EXITUSER.SOC file containing the user's name, baud rate and time remaining. This will allow input to other programs or for relogging back into Socrates. Parameters: errorlevel to exit with Failure State: none Example: 'O' [o,c] exit(255) ----------------------------------------------------------- *FAILBREAK* Module: Command Description: A special code which will end the execution of the command file if the previously executed command line failed. The calling COMMLIST command will be returned as failed. Parameters: n/a Failure State: n/a Example: comm enterfido enter *FAILBREAK* writeln(Remember, NetMail costs...) a=2 ----------------------------------------------------------- - 80 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands *FAILSUCCEED* Module: Command Description: A special code which will end the execution of the command file if the previously executed command line failed. The calling COMMLIST command will be returned as successfully completed. Parameters: n/a Failure State: n/a Example: comm new_user2 file(newuser.txt) *FAILSUCCEED* file(newuser2.txt) ----------------------------------------------------------- FILE () Module: Response or Command Description: This command will display the specified file to the user. Parameters: name of file to display Failure State: file not found Example: 'B' [o,c] file(bulletin.txt) mainmenu p>15 ----------------------------------------------------------- - 81 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands FILEAREA () Module: Response or Command Description: This command will change to the specified file area and make it the active area. Parameters: number of file area to make active Failure State: (1) FILES.SOC file not found (2) file area not defined Example: resp fareas '1' filearea(1) files '2' filearea(2) files '' null no_farea ----------------------------------------------------------- FILELIST () Module: Response or Command Description: Execute a file list identified with a FLST statement. Parameters: file list label Failure State: file list not defined Example: resp bulletins 'B' [o,c] filelist(bulletin) main ----------------------------------------------------------- - 82 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands FLST Module: FileList Description: Identifies the start of a filelist module. Parameters: filelist module label Failure State: n/a Example: flst bulletin bulletin.001 p<10 & TM=0 bulletin.A01 p<10 & TM>0 bulletin.002 p>9 & TM=0 bulletin.A02 p>9 & TM>0 ----------------------------------------------------------- *FORCE* Module: Menu Description: A special code which will force the following lines of the menu to be displayed to the user, even after a *SKIP* code has been executed. Parameters: none Failure State: n/a Example: menu information *skip* *clear* '---- Information ----'/ 'N)ew Uploads'/ 'G)etting around the BBS'/ 'S)ocrates Message Area Information'/ 'Q)uit to Main Menu'/ *force* ''/ 'Command:' ----------------------------------------------------------- - 83 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands FORWARD Module: Response or Command Description: A Socrates message area command that will advance the specified number of subjects. Parameters: number of subjects to advance (user input) Failure State: none Example: menu forwardsub *skip* 'Forward how many? ' resp forwardsub *#* forward msg_soc '' null msg_soc ----------------------------------------------------------- FORWARD1 Module: Response or Command Description: A Socrates message area command that will advance one subject. Parameters: none Failure State: none Example: forward1 msg_soc ----------------------------------------------------------- - 84 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands GOSUBJ Module: Response or Command Description: A Socrates message area command that will advance to the specified subject number. Parameters: number of subject to advance to (user input) Failure State: none Example: menu gosubj *skip* 'Subject: ' resp gosubj *#* gosubj msg_soc '' null msg_soc ----------------------------------------------------------- HEADERS Module: Response or Command Description: A Fido message area command that will display message header information (To, From and Subject) for all messages in the current message area that the user is allowed to see. Parameters: none Failure State: none Example: 'H' [o,c] headers ----------------------------------------------------------- - 85 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands *HIGHEST* Module: Menu Description: A special code which will output the highest message number in the current message area. This is typically used in Fido type message areas. Parameters: none Failure State: n/a Example: *force* 'Messages 1-' *highest* ' [N ' z1 & z2 ' [P ' z1 & -z2 ' [+ ' -z1 & z2 ' [- ' -z1 & -z2 *MSGNUM* ']'/ 'Message Command: ' ----------------------------------------------------------- INFO Module: Response or Command Description: Displays the current user's time remaining as well as download and upload totals. Parameters: none Failure State: none Example: 'S' [o,c] info main ----------------------------------------------------------- - 86 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands KILL Module: Response or Command Description: A message area command that will kill (delete) the current message. Parameters: none Failure State: message not found Example: 'K' [o,c] kill fido p=255 ----------------------------------------------------------- LASTTIMECALLED Module: Response or Command Description: A command to display to the user the last time they called. This command sends a CRLF after the string. Parameters: none Failure State: none Example: comm info writeln("You last called on ") lasttimecalled ----------------------------------------------------------- - 87 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands LINETOFILE (filename) Module: Response or Command Description: A command to write the current user's USER DATA to the specified file. Parameters: file to write user data to Failure State: none Example: comm writetolog nametofile(callers.log) linetofile(callers.log) ----------------------------------------------------------- LINKDOWN Module: Response or Command Description: A Fido message area command that will back up to the RESPONSE-TO message (the message that the current message is a reply to). Parameters: none Failure State: current message missing Example: comm fido_linkdown stateoff(1) stateoff(2) linkdown ----------------------------------------------------------- - 88 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands LINKUP Module: Response or Command Description: A Fido message area command that will advance to the SEE-ALSO message (the reply to the current message). Parameters: none Failure State: current message missing Example: comm fido_linkup stateoff(1) stateon(2) linkup ----------------------------------------------------------- LISTFILES Module: Response or Command Description: Command to list the files in the current file area's FILESLISTFILE (specified in the initialization file). Parameters: none Failure State: FILESLISTFILE not found Example: 'L' [o,c] listfiles files ----------------------------------------------------------- - 89 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands LOGOFF [(filelistlabel)] Module: Response or Command Description: Executes a FILELIST of the and then disconnects. Parameters: none Failure State: none Example: comm intro writeln() p=0 writeln(Beat it, loser!) p=0 writeln() p=0 logoff p=0 or logoff(exitscreens) ----------------------------------------------------------- MAIN Module: Response or Command Description: A Socrates message area command that will skip to the next subject and then advance to the next unread message. Parameters: none Failure State: none Example: resp msg_soc 'N' [o,c] new 'M' [o,c] main '0' stay ----------------------------------------------------------- - 90 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands MENU Module: Menu Description: Identifies the start of a menu module. Parameters: menu module label Failure State: n/a Example: menu quest ''/ 'Answer the questionnaire now?'/ '(1) Yes (2) Whoops, wrong key. : ' ----------------------------------------------------------- *MSGNUM* Module: Menu Description: A special code which will output the current message number in the current message area. This is typically used in Fido type message areas. Parameters: none Failure State: n/a Example: *force* 'Messages 1-' *highest* ' [N ' z1 & z2 ' [P ' z1 & -z2 ' [+ ' -z1 & z2 ' [- ' -z1 & -z2 *MSGNUM* ']'/ 'Message Command: ' ----------------------------------------------------------- - 91 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands MSGNUM Module: Response or Command Description: A Fido message area command that will advance to the specified message. Parameters: number of message to advance to (user input) Failure State: none Example: menu go_msg *skip* 'Message Number: ' resp go_msg *#* msgnum msg_fido '' null msg_fido ----------------------------------------------------------- NAMETOFILE (filename) Module: Response or Command Description: A command to write the current user's name to the specified file. Parameters: file to write name to Failure State: none Example: comm writetolog nametofile(callers.log) linetofile(callers.log) ----------------------------------------------------------- - 92 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands NEW Module: Response or Command Description: A Socrates message area command that will advance to the next unread message. Parameters: none Failure State: none Example: resp msg_soc 'N' [o,c] new 'M' [o,c] main '0' stay ----------------------------------------------------------- NEXT Module: Response or Command Description: A Fido message area command that will advance to the next message. Parameters: none Failure State: none Example: comm fido_next stateon(1) stateon(2) next ----------------------------------------------------------- - 93 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands NULL Module: Response or Command Description: A command that does nothing. Parameters: none Failure State: none Example: menu quest ''/ 'Answer the questionnaire now?'/ '(1) Yes (2) Whoops, wrong key. : ' resp quest '1' commlist(quest) main '2' null main ----------------------------------------------------------- NUMOFCALLERS Module: Response or Command Description: A command to display to the user the total number of callers to the BBS. This command sends a CRLF after the string. Parameters: none Failure State: none Example: comm info writeln("You are caller number ") numofcallers ----------------------------------------------------------- - 94 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands PAGE Module: Response or Command Description: A command that makes an annoying beeping noise on the SysOp's computer to alert them that the user wishes to chat. Parameters: none Failure State: none Example: 'BEEP' [c] page main p>=5 & hr>=12 ----------------------------------------------------------- PREV Module: Response or Command Description: A Fido message area command that will back up to the previous message. Parameters: none Failure State: none Example: comm fido_prev stateon(1) stateoff(2) prev ----------------------------------------------------------- - 95 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands QUOTE Module: Response or Command Description: Command to display an entry from the QUOTES.SOC file. This file is a text file containing quotes, or other words of wisdom, separated by a blank line. Parameters: none Failure State: none Example: comm show_a_quote stateon(1) quote ----------------------------------------------------------- RESP Module: Response Description: Identifies the start of a response module. Parameters: response module label Failure State: n/a Example: resp information 'N' [o,c] file(f:\newuls.txt) 'G' [o,c] file(\bbs\getting.txt) 'S' [o,c] file(\bbs\howsoc.txt) 'Q' [o,c] null main '?' [o] file(helpinfo.txt) '' null ----------------------------------------------------------- - 96 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands RESPOND Module: Response or Command Description: A Fido message area command that will add a reply to the current message. Parameters: none Failure State: Empty TO field in message Example: comm do_respond stateoff(3) stateon(4) respond ----------------------------------------------------------- REVERSE Module: Response or Command Description: A Socrates message area command that will back up the specified number of replies to the current subject. Parameters: number of replies to back up (user input) Failure State: none Example: resp msg_soc '' new 'N' [o,c] new 'M' [o,c] main '0' stay *#* reverse ----------------------------------------------------------- - 97 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands REVERSE1 Module: Response or Command Description: A Socrates message area command that will back up one reply to the current subject. Parameters: none Failure State: none Example: resp msg_soc '' new 'P' [o,c] reverse1 'M' [o,c] main ----------------------------------------------------------- SAVE Module: Response or Command Description: A generic message area command that will leave the current message area and save the last message read pointer. Parameters: none Failure State: none Example: RESP fido 'Q' [o,c] save no_area ----------------------------------------------------------- - 98 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHELL (commandtoexecute) Module: Response or Command Description: Shells to execute the specified command. Note that this is not a DOS shell but a direct execution of a command. The full path, filename and extension of the program to be executed must be specified. Parameters: none Failure State: errorlevel other than zero returned Example: resp files 'DIR' [c] shell(c:\command.com /c dir %d > gate%a) files -L 'DIR' [c] shell(c:\command.com /c dir %d) files L ----------------------------------------------------------- SHOW Module: Response or Command Description: A Fido message area command that will re- display the current message. Parameters: none Failure State: none Example: RESP msg_menu 'S' [o,c] show msg_menu ----------------------------------------------------------- - 99 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWACTIVETIMEBANK Module: Response or Command Description: Display the amount of time available in the Active Time Bank. Parameters: none Failure State: none Example: RESP show_banks 'A' [o,c] showactivetimebank show_banks 'P' [o,c] showpendingtimebank show_banks ----------------------------------------------------------- SHOWCHG Module: Response or Command Description: Change command to display the user's account data. Parameters: none Failure State: none Example: RESP show_user_data 'S' [o,c] showchg show_user_data ----------------------------------------------------------- - 100 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWDATA Module: Response or Command Description: Change command to display the user's account USER DATA data. Parameters: none Failure State: none Example: RESP show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- SHOWHELP display user help level Module: Response or Command Description: Change command to display the user's account help level. Parameters: none Failure State: none Example: RESP show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- - 101 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWLENGTH Module: Response or Command Description: Change command to display the user's account screen length. Parameters: none Failure State: none Example: RESP show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- SHOWMORE Module: Response or Command Description: Change command to display the user's account MORE? status. Parameters: none Failure State: none Example: resp show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- - 102 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWNAME Module: Response or Command Description: Change command to display the user's account name. Parameters: none Failure State: none Example: resp show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- SHOWPENDINGTIMEBANK Module: Response or Command Description: Display the amount of time available in the Pending Time Bank. Parameters: none Failure State: none Example: resp show_banks 'A' [o,c] showactivetimebank show_banks 'P' [o,c] showpendingtimebank show_banks ----------------------------------------------------------- - 103 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWPSWD Module: Response or Command Description: Change command to display the user's account password. Parameters: none Failure State: none Example: resp show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- SHOWTERM Module: Response or Command Description: Change command to display the user's account terminal type. Parameters: none Failure State: none Example: resp show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- - 104 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWTOFILE (filename) Module: Response or Command Description: A Fido message area command to output the current message to the specified file. Parameters: output file name Failure State: none Example: resp fido 'PRINT' [c] showtofile(lpt1) fido p=255 ----------------------------------------------------------- SHOWTOUSERFILE Module: Response or Command Description: A Fido message area command to output the current message to the file specified in the user input. Parameters: output file name (user input) Failure State: none Example: menu dumpfidomsg 'File: ' resp dumpfidomsg '' null fido *@* showtouserfile fido ----------------------------------------------------------- - 105 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SHOWWIDTH Module: Response or Command Description: Change command to display the user's account screen width. Parameters: none Failure State: none Example: resp show_user_data 'D' [o,c] showdata show_user_data 'N' [o,c] showname show_user_data 'P' [o,c] showpswd show_user_data 'W' [o,c] showwidth show_user_data 'L' [o,c] showlength show_user_data 'M' [o,c] showmore show_user_data 'H' [o,c] showhelp show_user_data 'T' [o,c] showterm show_user_data ----------------------------------------------------------- SIGNALOFF (signalnumber) Module: Response or Command Description: Command to set the specified user's signal off. Parameters: number of signal to turn off Failure State: none Example: comm read_rules file(rules.txt) signaloff(255) ----------------------------------------------------------- - 106 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SIGNALON (signalnumber) Module: Response or Command Description: Command to set the specified user's signal on. Parameters: number of signal to turn on Failure State: none Example: comm read_rules file(rules.txt) signalon(255) ----------------------------------------------------------- *SKIP* Module: Menu Description: A special code which will skip further display lines in a menu if there are pending commands stacked up. Parameters: none Failure State: n/a Example: menu information *skip* *clear* '---- Information ----'/ 'N)ew Uploads'/ 'G)etting around the BBS'/ 'S)ocrates Message Area Information'/ 'Q)uit to Main Menu'/ *force* ''/ 'Command:' ----------------------------------------------------------- - 107 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands START [(to_name)] Module: Response or Command Description: A Socrates message area command that will allow you to start a new message. If the optional (to_name) follows the command, it will be used for the TO: field. Parameters: TO: field entry (optional) Failure State: (1) empty TO: field (2) empty SUBJECT: field Example: comm do_start stateon(3) stateon(4) start or comm do_start_new stateon(3) stateoff(4) start(SysOp) ----------------------------------------------------------- STATEOFF (statenumber) Module: Response or Command Description: Command to set the specified state parameter off. Parameters: number of state parameter to turn off Failure State: none Example: comm fido_linkup tateoff(1) stateon(2) linkup ----------------------------------------------------------- - 108 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands STATEON (statenumber) Module: Response or Command Description: Command to set the specified state parameter on. Parameters: number of state parameter to turn on Failure State: none Example: comm do_start stateon(3) stateon(4) start ----------------------------------------------------------- STAY Module: Response or Command Description: A Socrates message area command that will re- display the current message. Parameters: none Failure State: none Example: resp msg_menu 'S' [o,c] stay msg_menu ----------------------------------------------------------- - 109 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands STAYTOFILE (filename) Module: Response or Command Description: A Socrates message area command to output the current message to the specified file. Parameters: output file name Failure State: none Example: resp socrates 'PRINT' [c] staytofile(lpt1) socrates p=255 ----------------------------------------------------------- STAYTOUSERFILE Module: Response or Command Description: A Socrates message area command to output the current message to the file specified in the user input. Parameters: output file name (user input) Failure State: none Example: menu dumpsocratesmsg 'File: ' resp dumpsocratesmsg '' null socrates *@* staytouserfile socrates ----------------------------------------------------------- - 110 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands *SUBJECT* Module: Menu Description: A special code which will output the current subject in the current message area. This is typically used in Socrates type message areas. Parameters: none Failure State: n/a Example: menu msg_soc ''/ *skip* '---- Message Menu ----'/ 'N)ext New Message M)ain Message'/ 'F)orward Subject B)ack Subject'/ '# Ahead/Back Messages'/ 'T)oggle Private Flag'/ 'K)ill Message'/ 'S)ubject Change'/ 'E)nter Message R)espond'/ 'A)rea Change Q)uit'/ *force* '[ ' *subject* ' ]'/ 'Message Command: ' ----------------------------------------------------------- - 111 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands SUBJLIST Module: Response or Command Description: A Socrates message area command that will display a list of the available subjects and their associated number in the current message area for all messages that the user is allowed to see. Parameters: none Failure State: none Example: resp msg_soc 'S' [O,C] *Subjlist gosubj ----------------------------------------------------------- *SUCCESSBREAK* Module: Command Description: A special code which will end the execution of the command list if the previously executed command line succeeded. The calling COMMLIST command will be returned as successfully completed. Parameters: n/a Failure State: n/a Example: comm forgotten2 stateon(3) stateoff(4) enter(SysOp) *SUCCESSBREAK* logoff ----------------------------------------------------------- - 112 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands TIMESCALLED Module: Response or Command Description: A command to display to the user the total number of times they have called the BBS. This command sends a CRLF after the string. Parameters: none Failure State: none Example: comm info writeln("Number of times you called us: ") timescalled ----------------------------------------------------------- TIMETOFILE (filename) Module: Response or Command Description: A command to write the current time to the specified file. Parameters: file to write time to Failure State: none Example: comm writetolog nametofile(callers.log) linetofile(callers.log) timetofile(callers.log) ----------------------------------------------------------- - 113 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands TOGLPRIV Module: Response or Command Description: A message area command that will toggle the Private flag in the header of the current message being read. Parameters: none Failure State: none Example: resp message 'T' [o,c] toglpriv message p=255 ----------------------------------------------------------- UNBANK Module: Response or Command Description: A command to allow the user to take the specified amount of time from the active time bank and convert it to on-line time. Parameters: time to convert (user input) Failure State: amount specified greater than amount in bank Example: menu unbanktime ''/ 'Time to UNBANK: ' resp unbanktime '' null timebank *#* UNBANK timebank ----------------------------------------------------------- - 114 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands UNBANKALL Module: Response or Command Description: A command to allow the user to take all time from the active timebank and convert it to on-line time. Parameters: none Failure State: none Example: menu unbanktime ''/ 'Time to UNBANK: ' resp unbanktime '' null timebank 'ALL' [c] UNBANKALL timebank *#* UNBANK timebank ----------------------------------------------------------- *UNFORCE* Module: Menu Description: A special code which will turn off the *FORCE* mode and skip further display lines in a menu if there are pending commands stacked up and if *SKIP* mode is active. Parameters: none Failure State: n/a Example: menu information *skip* *force* *clear* '---- Information ----'/ *unforce* 'N)ew Uploads'/ 'G)etting around the BBS'/ 'Q)uit to Main Menu'/ *force* ''/ 'Command:' ----------------------------------------------------------- - 115 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands UPLOAD Module: Response or Command Description: Shell to a specified external file transfer protocol passing user input. Parameters: External file transfer protocol command line complete with parameters passed as user input. Failure State: (1) upload problems (2) unable to execute shell Example: resp upload 'X' [o,c] null ul_xmodem 'Y' [o,c] upload(c:\programs\dsz.com port %a speed %b rb %u) 'Z' [o,c] upload(c:\programs\dsz.com port %a speed %b rz %u) '' null files ----------------------------------------------------------- USERLIST Module: Response or Command Description: A command to display the list of the users for the system. Socrates will display the list of names that match the user input. If the user input is an asterisk (*) then all users will be listed. Parameters: name fragment to match (user input) Failure State: none Example: menu userlist ''/ 'Pattern to match (* = All): ' resp userlist '' null main *@* userlist main ----------------------------------------------------------- - 116 - Socrates BBS (v1.00) APPENDIX 4 - BBS Program Commands VERSION Module: Response or Command Description: A command to display information about the Socrates version being used. Parameters: none Failure State: none Example: resp main 'V' [o,c] version main ----------------------------------------------------------- WRITE (stringtodisplay) Module: Response or Command Description: A command to display a string to the user. This command does not send a CRLF after the string. Parameters: string to display Failure State: none Example: write("This is the string to display.") ----------------------------------------------------------- WRITELN (stringtodisplay) Module: Response or Command Description: A command to display a string to the user. This command sends a CRLF after the string. Parameters: string to display Failure State: none Example: writeln("This is the string with a CRLF.") ----------------------------------------------------------- - 117 - Socrates BBS (v1.00) APPENDIX 5 - Shell Parameters APPENDIX 5 - Shell Parameters: When executing another program (using the SHELL, EDITOUTSIDE, DOWNLOAD or UPLOAD commands), you will often need to send it command line parameters. Socrates will allow you to include command line information to these programs by using shell parameters to pass the data. A parameter is a percent sign (%) followed by a key letter. When SOCRATES executes the command, it converts the parameter into the actual data it represents. The parameters are: %1 - user input %A - Port number (COMx:) %B - Baud rate %D - Download path (no trailing backslash) %U - Upload path (no trailing backslash) %% - a percent sign (%) Examples of the use of these parameters are as follows: 'DIR' [c] shell(c:\command.com /c dir %d > gate%a) files -L 'DIR' [c] shell(c:\command.com /c dir %d) files L menu dl_zmodem 'Files: ' resp dl_zmodem '' null files *@* download(d:\dsz.com port %a speed %b sz %d\%1) files resp upload 'X' [o,c] null ul_xmodem 'Y' [o,c] upload(d:\dsz.com port %a speed %b rb %u) files 'Z' [o,c] upload(d:\dsz.com port %a speed %b rz %u) files '' null files - 118 - Socrates BBS (v1.00) APPENDIX 6 - TimeBanks & Multipliers APPENDIX 6 - TimeBanks & Multipliers TimeBanks Timebanks are a subject that many SysOps are not familiar with, especially those running Fido and Opus systems. SOCRATES will support the use of timebanks (both pending and active) at the SysOp's discretion. A timebank is simply a method for rewarding the users for uploading by granting them time credits on the system based on the amount uploaded. SOCRATES supports on-line credits as well as both active and pending timebanks. The amount of time returned to the user as on-line time is controlled by the ONLINEUPLOADREFUND setting in the initialization file. This time is available to the user immediately and does not reside in a timebank. The system can also be configured to return time to the caller by placing it in an "active" timebank so that the caller can use this time at their convenience. This is controlled by the ACTIVETIMEBANKUPLOADREFUND setting in the initialization file. This extra time resides in the bank until the caller "withdraws" all or part of it. The user only has access to the active timebank. The final option is to have the system store all newly earned refund time in a "pending" timebank which is controlled by the PENDINGTIMEBANKUPLOADREFUND setting in the initialization file. This bank continues to accumulate the time credits in the pending timebank, which the users cannot access. The time credits can be rolled over into the active timebank by the SysOp or the system can automatically roll them over daily through the DAILYTIMEBANKROLLOVER setting. It should be noted that any or all of the three refund types can be used, at the SysOp's discretion. - 119 - Socrates BBS (v1.00) APPENDIX 6 - TimeBanks & Multipliers Time and File Limit Multipliers SOCRATES is configured with default session and daily time limits and session, daily and total download limits. This is done through various settings in the initialization file. These defaults can be modified through the use of multipliers. Multipliers are used to modify the defaults by first taking the product of the multiplier and the default and then dividing by twenty. The result is then the value used as the new limit. For example, a multiplier of 20 yields no change while a multiplier of 40 doubles the limit and 10 will reduce the limit by half. The nice part about this is that multipliers can be applied to the default time and file limit settings, based on set conditions using the TIMELIMIT and FILESMULT settings in the initialization file. For example, consider the following from an initialization file: dailytimelimit 60 timelimit 5 p=0 ;New Callers timelimit 30 p>=5 ;Registered Users timelimit 50 p>=10 ;Good Regular Users timelimit 60 p>=100 ;Co-SysOps The default (or baseline) daily time limit is 60 minutes. New callers are given 60 x 5 / 20 = 15 minutes, whereas registered users, good regular users and co-sysops are allowed 90 minutes, 150 minutes and 180 minutes, respectively. This same type of thing can be done for the downloading limits by using the FILESMULT setting with different conditions. - 120 - Socrates BBS (v1.00) APPENDIX 7 - FidoNet APPENDIX 7 - FidoNet The FidoNet network is a loose coalition of many different bulletin board systems. "FidoNet" and "Fido" are registered trademarks of Tom Jennings. The network is by no means limited to the Fido software; there are several "FidoNet compatible" systems and a number of network mail programs which interface with the network. A short history lesson will help in understanding FidoNet. Tom Jennings was in San Francisco, and John Madill was in Baltimore, both working on the Fido BBS software. In the spirit of finding out if it could be done, they decided to add code to the system to support a dialup connection with no human intervention during the wee hours when the sysops were sleeping and the systems were free. This quickly became a useful function, since both systems and both sysops were busy and it was a convenient method of exchanging information. From this chance beginning in May 1984, growth was phenomenal. By August 1984, there were 30 nodes; by September there were 50. By February 1985, there were 160 systems, and a group of sysops in St. Louis had taken over the administration of the list of systems. In June 1985 the network converted to a two-part addressing scheme (Net/Node) to support the growth. Today, the network has grown to over 7000 nodes around the world and a zone-based nodelist has been developed to facilitate communication with systems on other continents. All of this is held together by two documents, each published weekly. One of these is a list of every system in the network, with net/node address, telephone number, and other useful information; this is called the NODELIST. The other document is a newsletter, FidoNews. Both the nodelist changes and FidoNews are distributed using the network; once your system is up and running you will have a source for the most current information. To obtain help on FidoNet or a related software product, use FidoNet! The best source is a local sysop who has done what you want to do. - 121 - Socrates BBS (v1.00) APPENDIX 8 - Registration Form APPENDIX 8 - Registration Form ------------------------------------------------------------ Remit to: Mikronetics 2114 Weatherton Dr. Wilmington, DE 19810 United States of America ------------------------------------------------------------ Quan Item US Price ---- ---- -- ----- ___ SOCRATES Registration....... @ $40 ea $__________ (includes registration plus program and manual on disk) Add $1/copy for 3.5" disk $__________ Subtotal $__________ Shipping ($1/copy, max $10) $__________ TOTAL $__________ Name_____________________________________________________ Company_____________________________________________________ Address_____________________________________________________ _____________________________________________________ _____________________________________________________ Phone(______)________________ BBS(______)________________ Where did you hear of or obtain SOCRATES? ____________________________________________________ Comments____________________________________________________ ____________________________________________________ ____________________________________________________ ____________________________________________________ - 122 - Socrates BBS (v1.00) INDEX INDEX Condition 6, 10, 11, 14, 16, 17, 18, 22, 37, 39, %% 23, 118 68 %1 23, 118 CR-AREAS 4, 5, 10, 24 %A 23, 71, 99, 116, 118 CR-FILES 4, 5, 11 %B 23, 71, 116, 118 CR-INITS 4, 5, 9, 24 %D 23, 71, 99, 118 CR-SOC 4, 5, 12, 24 %U 23, 116, 118 CR-FILES 24 *#* 18, 61 CUTATSEENBY 8, 42 *@* 18, 61 D 38 *CLEAR* 15, 69 DAILYBYTESRATIO 8, 42 *FAILBREAK* 19, 70, 80 DAILYBYTESTHRESHOLD 8, 42 *FAILSUCCEED* 19, 81 DAILYFILESRATIO 8, 43 *FORCE* 15, 16, 83, 115 DAILYFILESTHRESHOLD 8, 43 *HIGHEST* 15, 86 DAILYTIMEBANKROLLOVER 8, *MSGNUM* 15, 86, 91 43, 119 *SKIP* 15, 16, 107, 115 DAILYTIMELIMIT 8, 44 *SUBJECT* 15, 111 DATAPROMPT 7, 44 *SUCCESSBREAK* 19, 112 DBR 38 *UNFORCE* 15, 115 DBT 37 /1 26 Delimited string 14, 36 /B 26 Delimiter 14, 16, 17, 36 /L 26 DFR 38 /O 26 DFT 37 A 38 Directories 5, 6, 9, 10, ABORT 20, 62 24 ACTIVETIMEBANKUPLOADREFUND DOWNLOAD 21, 23, 71, 118 8, 40, 119 EDITABORT 21, 71 ADD 21, 62, 72 EDITATTACH 21, 72 AHEAD 21, 63 EDITCHGSUBJ 21, 72 AHEAD1 21, 63 EDITCHGTO 21, 73 ALLOWQUOTING 8, 40 EDITCONT 21, 73 APPENDORIGIN 8, 41, 54 EDITCRASH 21, 74 AREA 20, 64 EDITDELETEFROM 21, 74 AREAS.SOC 5, 10, 24, 64 EDITDELETETO 21, 74, 75 BACK 21, 64 EDITEDIT 21, 75 BACK1 21, 65 EDITFIDONET 21, 76 BAUD 7, 41 EDITINSERT 21, 76 CHGDATA 20, 65 EDITKILLSENT 21, 77 CHGHELP 20, 66 EDITLIST 21, 77 CHGLENGTH 20, 66 EDITOUTSIDE 21, 23, 78, CHGMORE 20, 67 118 CHGNAME 20, 67 EDITPRIVATE 21, 78 CHGPSWD 20, 68 EDITSAVE 21, 79 CHGTERM 20, 68 ENDCHATMSG 8, 44 CHGWIDTH 20, 69 ENTER 20, 21, 79 CLEARBEFOREMESSAGE 8, 41 Errorlevel 27, 28, 29, 80 COMM 18, 70 EXCEEDEDDAILYTLIMCOMM 8, COMM.SOC 5, 12, 24 45 COMMINDX.SOC 5, 12, 24 EXIT 19, 27, 30, 80 COMMLIST 18, 19, 70, 80, FA 11, 38 81, 112 FIDONET 8, 45 FILE 19, 81 FILEAREA 21, 82 - 123 - Socrates BBS (v1.00) INDEX Filelist 12, 19, 23, 82, NEWUSERCOMM2 7, 51 90 NEWUSERHELP 7, 51 FILES.LST 25, 45 NEWUSERMENU 7, 51 FILES.SOC 5, 11, 24, 82 NEWUSERPRIV 7, 52 FILESLISTFILE 8, 11, 45, NEWUSERSCREENLENGTH 7, 52 89 NEWUSERSCREENWIDTH 7, 52 FILESMULT 8, 46, 120 NEWUSERSIGNALS 7, 53 FIRSTMENU 7, 46 NEXT 20, 93 FLST 22, 23, 82, 83 NODE 8, 53 FLST.SOC 5, 12, 24 NULL 19, 94 FLSTINDX.SOC 5, 12, 24 NUMOFCALLERS 19, 94 FMULT.SOC 5, 9, 24 ONLINEUPLOADREFUND 8, 53, FORCEPRIVATE 8, 46 119 FORGOTPASSWORDCOMM 7, 47 ORIGINLINE 8, 54 FORGOTPASSWORDMENU 7, 47 P 38 FORWARD 21, 84 PAGE 19, 95 FORWARD1 21, 84 PASSWORDATTEMPTS 7, 54 FOSSIL 4, 26 PENDINGTIMEBANKUPLOADREFUND GOSUBJ 21, 85 8, 54, 119 H 38 POINT 8, 55 HEADERS 20, 85 PORT 7, 55 HR 38 PREV 20, 95 INACTIVITYTIMELIMIT 8, 47 PRIVATESYSTEM 7, 55 INFO 19, 86 QUOTE 19, 96 INITS.SOC 5, 9, 24 QUOTETRK.SOC 5, 24 INTROCOMM 7, 48 READPRIVATE 8, 56 KILL 20, 87 RELOGIN 4, 5, 24, 27, 29, LASTTIMECALLED 19, 87 30 LINETOFILE 19, 88 RESP 16, 17, 96 LINKDOWN 20, 88 RESP.SOC 5, 12, 24 LINKUP 20, 89 RESPINDX.SOC 5, 12, 24 LISTFILES 21, 89 RESPOND 20, 21, 72, 97 LOGFILE 8, 48 REVERSE 21, 97 LOGOFF 19, 90 REVERSE1 21, 98 LOGONTIME 7, 48 SAVE 20, 98 M 38 SBR 38 MAIN 21, 90 SBT 37 MENU 14, 91 SESSIONBYTESRATIO 8, 56 MENU.SOC 5, 12, 24 SESSIONBYTESTHRESHOLD 8, MENUINDX.SOC 5, 12, 24 56 MODEMHANGUP 7, 49 SESSIONFILESRATIO 8, 57 MODEMINIT 7, 49 SESSIONFILESTHRESHOLD 8, MSGNUM 20, 92 57 Multipliers 40, 42, 43, SESSIONTIMELIMIT 8, 57 44, 46, 53, 54, 56, 57, SFR 38 58, 59, 120 SFT 37 NAMEPROMPT 7, 50 SHELL 19, 23, 99, 118 NAMETOFILE 19, 92 Shell parameters 118 NET 8, 50 SHOW 20, 99 NetMail 9 SHOWACTIVETIMEBANK 22, 100 NEW 21, 93 SHOWCHG 20, 100 NEW_USER1 50 SHOWDATA 20, 101 NEW_USER2 51 SHOWHELP 20, 101 NEWUSERCOMM1 7, 50 SHOWLENGTH 20, 102 - 124 - Socrates BBS (v1.00) INDEX SHOWMORE 20, 102 USERS1.SOC 5, 24, 32 SHOWNAME 20, 103 USERS2.SOC 5, 24, 32 SHOWPENDINGTIMEBANK 22, VERSION 19, 117 103 WELCOMECOMM 60 SHOWPSWD 20, 104 WELCOMEFLST 7 SHOWTERM 20, 104 WRITE 19, 117 SHOWTOFILE 20, 105 WRITELN 19, 80, 117 SHOWTOUSERFILE 20, 105 WRITEPRIVATE 8, 60 SHOWWIDTH 20, 106 ZONE 8, 60 SIGNALOFF 22, 106 SIGNALON 22, 107 SOC-AREA.TXT 5, 9 SOC-FILE.TXT 5, 10 SOC-INIT.TXT 5, 7 SOC-MSG 4, 5, 24, 29, 33, 34, 35 SOC-PROG.TXT 5, 12 SOC-SCAN 4, 5, 24, 29 SOC-USER 4, 5 SOCRATES 4, 5, 27, 29 SOCRATES.LOG 48 SOC-SCAN 35 SOC-USER 24, 32 START 21, 108 STARTCHATMSG 8, 58 STATEOFF 22, 108 STATEON 22, 109 STAY 21, 109 STAYTOFILE 21, 110 STAYTOUSERFILE 21, 110 SUBJLIST 21, 112 SysOp 1, 2, 6, 31, 32, 121 TBR 38 TBT 37 TFR 38 TFT 37 Timebanks 8, 22, 32, 40, 43, 54, 100, 103, 114, 115, 119 TIMELIMIT 8, 58, 120 TIMESCALLED 19, 113 TIMETOFILE 19, 113 TLIMS.SOC 5, 9, 24 TM 38 TOGLPRIV 20, 114 TOTALBYTESRATIO 8, 58 TOTALBYTESTHRESHOLD 8, 59 TOTALFILESRATIO 8, 59 TOTALFILESTHRESHOLD 8, 59 UNBANK 22, 114 UNBANKALL 22, 115 UPLOAD 21, 23, 116, 118 User input 18, 23, 118 USERLIST 19, 116 - 125 -