═══ 1. Introduction ═══ ═══ 2. System usage ═══ ═══ 2.1. Command line entering ═══ ═══ 3. FOSS setup ═══ ═══ 3.1. CMD files ═══ A number of .CMD files are used by FOSS to different tasks, they are: Command file Description AREA.CMD is used to start external areas from FOSS with use of the S(elect) command DOOR.CMD is used to start external door programs from FOSS with use of the Op(en) command RING.CMD is called each time your modem sends a RING signal to the BBS, may play a tune on your SoundBlaster or something REMOTE.CMD is called by the D(osShell) command in the SysOp menu YELL.CMD is called instead of the beeping done by the Y(ell) command, may yell by playing a .WAV ═══ 4. Script language ═══ FOSS contains a very powerful script language which allow the SysOp to modify or enhance the system in many ways. The FOSS script language are described in this chapter. ═══ 4.1. Files ═══ All script files should be located in the SCRIPTS sub-directory of your FOSS-root. They should have no extension or a spesific language key as the only extension. There are a number of predefined script hooks inside FOSS which will execute spesific scripts if they exists. Some of these scripts may return values to the system by use of the @return command, the default return value is allways 0. Standard script hooks Script name Called ... B!BYE.l before a user is logged off A!DNYUSR.l after a user was denied access because she/he matched a line in the MAIN\DENYUSER.LST file A!DOWN.l after a file-download has completed B!DOWN.l before a file-download is started A!LOGIN.l after the login procedure has completed B!LOGIN.l before the login procedure starts I!LOGIN.l within the login procedure A!OPEN.l after a door has closed B!OPEN.l before a door is opened A!REG.l after a new user has registered B!REG.l before a new user registers A!SELECT.l after area change A!UP.l after a file-upload has completed B!UP.l before a file-upload is started A!WHO.l after W(ho) display B!WHO.l before W(ho) display EXTRACMD.l when users enters a command unknown to FOSS internally. Note: l should be blank or language key. ═══ 4.2. Commands ═══ Here are all the script commands available in the script language of FOSS. Rules to remember when writing scripts o Commands are case-sensitive o Commands must be entered from the start of each line o Enter only one command on each line o Variables may be used on command lines ═══ 4.2.1. @+ ═══ @+ [target] [1st#] [2nd#] Parameters target Name of script variable for calculcated value 1st# First value to add 2st# Second value to add Function description [target] = [1st#] + [2nd#] See also @-, @/, @*, @math., @mod ═══ 4.2.2. @- ═══ @- [target] [1st#] [2nd#] Parameters target Name of script variable for calculcated value 1st# Value to subtract from 2st# Value to subtract from [1st#] Function description [target] = [1st#] - [2nd#] See also @+, @/, @*, @math., @mod ═══ 4.2.3. @/ ═══ @/ [target] [1st#] [2nd#] Parameters target Name of script variable for calculcated value 1st# Value to divide 2st# Value to divide [1st#] on Function description [target] = [1st#] / [2nd#] See also @+, @-, @*, @math., @mod ═══ 4.2.4. @* ═══ @* [target] [1st#] [2nd#] Parameters target Name of script variable for calculcated value 1st# First value to multiply 2st# Second value to multiply Function description [target] = [1st#] * [2nd#] See also @-, @+, @/, @math., @mod ═══ 4.2.5. @beep ═══ @beep [freq] [length] Parameters freq Frequenze in Hz of wanted sound length Requested duration of sound Function description Play a sound with the given frequency for the given duration See also none ═══ 4.2.6. @call ═══ @call [scrname] Parameters scrname Name of script to call Function description Start another script, when called script are completed the current script will continue executing See also @run, @rundos ═══ 4.2.7. @Case ═══ @Case [var] Parameters var Script variable selected Function description Convert the text in script variable [var] to nice-case See also @CASE ═══ 4.2.8. @CASE ═══ @CASE [var] Parameters var Script variable selected Function description Convert the text in script variable [var] to upper-case See also @Case ═══ 4.2.9. @debug ═══ @debug {vardump} Parameters vardump Display listing of all users defined script variables. Function description If no parameters are given: continue script in debug mode. In debug mode all lines of the script are logged into the MAIN\USAGELOG.SYS file. See also none ═══ 4.2.10. @delay ═══ @delay [seconds] {[char]} Parameters seconds Number of seconds to delay char Character to print echo second Function description Stop the executing of the script for [seconds] seconds and print [char] each second See also none ═══ 4.2.11. @command ═══ @command [commands] Parameters commands String of FOSS commads to execute Function description Execute the given FOSS commands See also none ═══ 4.2.12. @delfile ═══ @delfile [filename] Parameters filename Name(s) of file(s) to delete from your harddisk Function description Delete the listed files from your harddisk See also none ═══ 4.2.13. @exit ═══ @exit {[commands]} Parameters commads FOSS commands to execute after leaving the script Function description End current script and place [commands] in command que See also none ═══ 4.2.14. @file ═══ @file [filename] Parameters filename Name of file to open Function description Open the given file for output from the @write and @writeln See also @readln, @write, @writeln ═══ 4.2.15. @getfirst ═══ @getfirst [varinto] [varfrom] Parameters varinto Script variable to return first word into varform Script variable to take a word from Function description Return first word from variable [varfrom] in [varinto]. The word is removed from the [varfrom] variable See also @ifcommand ═══ 4.2.16. @goto ═══ @goto [label] Parameters label Name of label to jump to Function description Jump to given label and continues script execution from there See also none ═══ 4.2.17. @if (text) ═══ @if [s1] [s2] [label] Parameters s1 First string to compare s2 Second string to compare label Name of label to jump to Function description If string [s1] and string [s2] are equal jump to [label] See also @if (number), @ifcommand @iffile ═══ 4.2.18. @if (number) ═══ @if [#1] <=> [#2] [label] Parameters #1 First value to compare #2 Second value to compare label Name of label to jump to Function description Compare the two given values and jump to [label] if argument is true. See also @if (text), @ifcommand @iffile ═══ 4.2.19. @ifcommand ═══ @ifcommand [s1] [command] [label] Parameters s1 String to check against [command] command Command to check for in FOSS format label Name of label to jump to Function description Check if [s1] matches [command] and jump to [label] if true See also @if (number), @if (text), @iffile ═══ 4.2.20. @iffile ═══ @iffile [filename] [label] Parameters filename Name of file to check label Name of label to jump to Function description Check if [filename] exists and jump to [label] if it does See also @if (number), @if (text), @ifcommand, ═══ 4.2.21. @input ═══ @input [Var#] [prompt] Parameters Var# Script variable to return input to prompt Text prompt for the data entry Function description Allow the user to input a text in [Var#] See also @select ═══ 4.2.22. @log ═══ @log [log-text] Parameters log-text Text to write to log file Function description Write a line of text to current nodes log file. If [log-text] starts with a $ symbol the text if written to the SysOp logfile displayed to SysOp when he/she logs in See also none ═══ 4.2.23. @math ═══ @math [var] [expr] Parameters var Script variable to return result into. expr Mathematic expression Function description Simple calculator supporting +, -, / and *. See also @+, @-, @/, @*, @mod ═══ 4.2.24. @mod ═══ @mod [var] [1st#] [2nd#] Parameters var Return calculated value to given script variable. 1st# Number to divide 2st# Number to divide [1st#] on Function description [var] = [1st#] mod [2nd#] See also @+, @-, @/, @*, @math ═══ 4.2.25. @readln ═══ @readln [fileline] [intovar] {[fileline] [intovar] ...} Parameters fileline Line number to read intovar Return line read into give script variable Function description Read a line of text from the current file (specified by the @file command) into the given script variable number. More lines can be read by entering more line numbers and var-numbers. See also @file, @write, @writeln ═══ 4.2.26. @receive ═══ @receive [filename] {protocol} Parameters filename Name of file to receive protocol Identifier of protocol to transfer file with Function description Receive a file user the given protocol See also @send ═══ 4.2.27. @return ═══ @return [returnvalue] {commands} Parameters returnvalueValue to return from script commads Commands to insert into the command que Function description Ends script execution and returns the given value and commads See also @exit ═══ 4.2.28. @run ═══ @run [command] {Parameters} Parameters commands Program to run ParametersParameters to pass to the program Function description Run an external OS/2 executable See also @rundos, @call ═══ 4.2.29. @rundos ═══ @rundos [command] {Parameters} Parameters command Program to run ParametersParameters to pass to the program Function description Run an external executable through the OS/2 command shell See also @run, @call ═══ 4.2.30. @select ═══ @select "[keys]" [prompt] Parameters keys String of keys prompt Text prompt for input operation Function description Let the user select one of the given keys in answer to a question. Example @select "~Yes_do ~No_don't" Should I delete this file? @Y File is about to being deleted! @delfile test.txt @exit @N File was not deleted! See also @input ═══ 4.2.31. @send ═══ @send [filename] {[protocol]} Parameters filename Name of file to send protocol Protocol to use when sending Function description Send a file to the user using the given protocol See also @receive ═══ 4.2.32. @set ═══ @set [var] [value] Parameters var Name of variable to set value Value to set [var] to Function description var Possible selections menu Select a internal menu directly, available menu selections are: M for Main menu, U for Utility menu, B for Bulletion menu, C for Chat/Node menu, $ for SysOp menu, F for File menu and R for Message menu output Select if the none-command lines in script are to be displayed on screen, available selections are: ON or OFF 1000sep Select if numbers are to be displayed with or without 1000-separators as default all other Allocate and set named script variable, if no value given, remove and deallocate variable. See also none ═══ 4.2.33. @show ═══ @show [filename] Parameters filename Name of file to display Function description Display the named file to screen See also none ═══ 4.2.34. @splitpath ═══ @splitpath [path] [varfordir] [varforname] Parameters path Path to split up varfordir Var to put directory part in varfornameVar to put name part in Function description Split a complete path string (dir+name) into directory and name parts. See also none ═══ 4.2.35. @write ═══ @write [text] Parameters text Text to write to file Function description Writes the given text to the file opened by the @file command See also @file, @readln, @writeln ═══ 4.2.36. @writeln ═══ @writeln [text] Parameters text Text to write to file Function description Writes the given text to the file opened by the @file command and adds a CR/LF sequece See also @file, @readln, @write ═══ 4.3. Variables ═══ FOSS referes to variable as either system or script variables. System variables are defined by the system, and can usually not be deleted or altered. Script variables are defined by scripts made by the SysOp. All variable are defined with a name which can be used in scripts, bulletins and menus. To use the value of a variable the variable name is surrounded by two percent signs (%). This insert the variable value instead of the variable name in the line before the line is processed. In such way, the variable value can be accessed by bulletins and menus as well as scripts. To access the variable you should only use the variable name. This way of accessing variables are only used in scripts. An example: The variable "Test" is given the value "This is a test" by the script command "@set Test This is a test". Then "This is %Test%" will write "This is This is a test" at your screen. If you now enter the command "@set %Test% Hello" you would not set the "Test" variable but you'll set a variable called "This" with the value of "is a test Hello". Most of the variables may be displayed using different masks by entering a : and a mask number after the variable, but before the ending %. All variable defaults to mask 0. To list the previous example with mask 1 (gives it a leeding zero) you'll have to enter: "Today's date is %cur_day:1%". ═══ 4.3.1. %cur_date% ═══ Returns current date ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_date% │Date string │1st January 1990 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.2. %cur_day% ═══ Returns current day of month ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_day% │Current day of month │7 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_day:1% │Current day with leading zero │07 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.3. %cur_hour% ═══ Returns current hour ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_hour% │Hour │5 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_hour:1% │Hour with leading zero │05 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.4. %cur_min% ═══ Returns current min ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_min% │Min │5 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_min:1% │Min with leading zero │05 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.5. %cur_month% ═══ Returns current month of year ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_month% │Current month │1 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_month:1% │Current month with leading zero │January │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_month:2% │Name of current month │01 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.6. %cur_sec% ═══ Returns current second ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_sec% │Second │5 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_sec:1% │Second with leading zero │05 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.7. %cur_time% ═══ Returns current time ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_time% │Hour and minute │11 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_time:1% │Hour, minute and second │11 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.8. %cur_year% ═══ Returns current year ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_year% │Current year, two digits │94 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%cur_year:1% │Current year, all four digits │1994 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.9. %sys_area_code% ═══ Returns current area code ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_code% │Current area code │MAIN │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_code:1% │Current file code │MAIN │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_code:2% │Current door code │MAIN │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_code:3% │Current bull code │MAIN │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.10. %sys_area_last% ═══ Returns current number of last message in area ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_last% │Last message │1000 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_last:1% │Last message with 1000-separators │1,000 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.11. %sys_area_lastread% ═══ Returns current number of last message read by current user in area ┌─────────────────────────┬────────────────────────────────────────┬───────────────┐ │Variable │Description │Example output │ ├─────────────────────────┼────────────────────────────────────────┼───────────────┤ │%sys_area_lastread% │Last message read │1000 │ ├─────────────────────────┼────────────────────────────────────────┼───────────────┤ │%sys_area_lastread:1% │Last message read with 1000-separators │1,000 │ └─────────────────────────┴────────────────────────────────────────┴───────────────┘ ═══ 4.3.12. %sys_area_name% ═══ Returns current area name ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_name% │Current area name │Main Board │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.13. %sys_area_new% ═══ Returns current number of new message in area ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_new% │Number of new messages │1000 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_new:1% │Number of new messages with │1,000 │ │ │1000-separators │ │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_new:2% │Number of new messages for current user │1000 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_area_new:3% │Number of new messages for current user │1,000 │ │ │with 1000-separators │ │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.14. %sys_cmd% ═══ Returns current command line. ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_cmd% │Current command line │Select Mail │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.15. %sys_com% ═══ Returns current com handle, port# or device name ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_com% │Com handle in hex │000E │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_com:1% │Com handle in dec │14 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_com:2% │Com port number │1 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_com:3% │Com device name │COM1 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.16. %sys_menu% ═══ Returns current menu ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_menu% │Current menu character │R │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ Menu characters are: ┌──────────┬────────────────────────────────────────┐ │M │Main menu │ ├──────────┼────────────────────────────────────────┤ │R │Read menu │ ├──────────┼────────────────────────────────────────┤ │F │File menu │ ├──────────┼────────────────────────────────────────┤ │$ │SysOp menu │ ├──────────┼────────────────────────────────────────┤ │C │Chat menu │ ├──────────┼────────────────────────────────────────┤ │B │Bulletin menu │ ├──────────┼────────────────────────────────────────┤ │U │Utility menu │ └──────────┴────────────────────────────────────────┘ ═══ 4.3.17. %sys_node% ═══ Returns current node number ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_node% │Current node number │1 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_node:1% │Current node number prefilled with 0's │001 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.18. %sys_speed% ═══ Returns current communication speed ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_speed% │CONNECT speed │28800 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_speed:1% │Init speed │56700 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.19. %sys_vers% ═══ Returns current system version ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_vers% │Version string │FOSS/2 v1.0с │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%sys_vers:1% │Version number │1.0с │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.20. %usr_acc% ═══ Returns users access level ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_acc% │Access level │2 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.21. %usr_acc_x% ═══ Returns the access status for x in current area. x should be a valid access string. (RWUDOAS) ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_acc_x% │Returns 1 if accesses are present or 0 │1 │ │ │if not │ │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_acc_x:1% │Returns Y if accesses are present or N │Y │ │ │if not │ │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_acc_x:2% │Returns Yes if accesses are present or │Yes │ │ │No if not │ │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_acc_x:3% │Returns the given access string if │RWUD │ │ │present, nothing is return if no access │ │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.22. %usr_addr% ═══ Returns users address. ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_addr% │User city │Trondheim │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_addr:1% │User street address │Boks 455 Sentrum │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_addr:2% │User post code │7001 Trondheim, │ │ │ │Norway │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.23. %usr_dls% ═══ Returns download status ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_dls% │Number of files downloaded │13 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_dls:1% │Number of KB downloaded │1200 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.24. %usr_logon% ═══ Returns various logon information ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_logon% │Number of logons │32 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_logon:1% │First logon, string │12 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_logon:2% │Last logon, string │12 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.25. %usr_name% ═══ Returns current users name ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_name% │Full user name │Terje Flaaronning │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_name:1% │User first name │Terje │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_name:2% │User last name │Flaaronning │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.26. %usr_phone% ═══ Returns users phone numbers ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_phone% │Home phone │+47-92254444 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_phone:1% │Work phone │+47-92103444 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.27. %usr_read% ═══ Returns number of message read by user ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_read% │Messages read │100 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.28. %usr_time% ═══ Returns users different time information ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_time% │Time left today in minutes │10 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_time:1% │Time allowed each day in minutes │60 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_time:2% │Minutes since logon │15 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_time:3% │Total time used in minutes │1200 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.29. %usr_uls% ═══ Returns upload status ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_uls% │Number of files uploaded │13 │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_uls:1% │Number of KB uploaded │1200 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 4.3.30. %usr_written% ═══ Returns number of message written by user ┌────────────────────┬────────────────────────────────────────┬────────────────────┐ │Variable │Description │Example output │ ├────────────────────┼────────────────────────────────────────┼────────────────────┤ │%usr_written% │Messages written │100 │ └────────────────────┴────────────────────────────────────────┴────────────────────┘ ═══ 5. Greetings ═══ Herve Lefebvre running a FOSS Beta BBS and the maker of the French language support for FOSS. Raymond L. Gwinn who has supported me with info about SIO and the OS/2-API concerning async-communcation. (Developer of the SIO driver for OS/2). Jan-Morten Havstein who has been helping with with a lot of the testing some time ago. XBoard developers who was the first to add native FOSS support to an offline reader Stian Seeberg who ran a FOSS BBS for some time. Rune Kjellberg who is running a FOSS Beta BBS My mother who has paid quite a few large phonebills the last years ═══ 6. ---------------------- ═══ ═══ 7. B&BSETUP old doc's ═══ 3 The Bits & Bytes Bulletin Board System/2 B&BSYS/2 Version 1.0с1 By Terje FlaarЫnning SETUP.DOC By Stian Seeberg 16.02.94 Table of contents&: Welcome to B&BSYS/2 1 What you need to set up B&BSYS/2 1 First time installation 2 Unpacking the distribution files 2 Running SETUP.CMD 3 First time startup 3 Welcome to B&BSYS/2 You are about to set up one of the easiest, yet most advanced BBS-systems for OS/2. It is based on a database-structure so advanced other much larger systems can only aspire to compete with it! There is almost no limit as to how large your BBS can become. What you need to set up B&BSYS/2 Obviously you will need a computer (running OS/2 2.1 or better). This computer will need to meet the minimum hardware requirements for running OS/2, that being a 386 with 6MB of RAM. However we feel that for any kind of performance a 486sx with 6MB of RAM is the minimum. In addition a modem is required, and it should support Hayes й AT-commands. The speed of the modem is something that you will have to adress, but the UNREGISTRED version of B&BSYS/2 only supports speeds up to 9600 BPS. And last but not least you will need B&BSYS/2...... First time installation This will cover unpacking the datafiles and setting up the system for the very first time. Unpacking the distribution files The program itself comes in the ZIP-files B&BS10с1.ZIP and B&BN10с1.ZIP. These files contain the system files, and the Norwegian language files. These will have to be unzipped using PkWare's PkUnzip, InfoZip's UnZip or a compatible utility into a subdirectory (default is d&:\BBS, where "d" is the drive letter). It is very important that the files be UnZipped WITH THE DIRECTORY STRUCTURE INTACT! This is accomploshed with the "- d" swich in PkWare's PkUnzip, and is default in InfoZip's UnZip. The following directories are stored in the *.ZIP-files, and will be created on your HardDrive&: b&broot\API b&broot\BULLETS b&broot\MENUS b&broot\SCRIPTS b&broot is the Drive-letter and Subdirectory you place B&BSYS/2's files in. It is usually "C&:\BBS", but can be changed if you wish. The API subdirectory contains the datastructures, and API interface for application programmers. The BULLETS subdirectory contains the Bulletins that are supplied with B&BSYS/2, and is alse where you will place other bulletins and files that you create (this will be covered later in this document) The MENUS subdirectory contains the Menu's that are supplied with B&BSYS/2. These should not be modified! Any modifications will be made by the author and the files will be made available to all users in a ZIP-file. The SCRIPTS subdirectory contains the scripts that are supplied with B&BSYS/2, and is where your own scripts should be placed. For information on creating scripts see SYSOP.DOC! Besides these subdirectories there are a few that are created in the SETUP process. These subdirectories are&: b&broot\MAIN og b&broot\MAIN\AREA b&broot\TEMP.xxx b&broot\UPLOADS The MAIN and MAIN\AREA subdirectories contain all the datafiles that are necessary to run the system. None of these files should be tampered with! A copy of all the files in this directory-tree, and the file B&BSYS.CFG found in b&broot should be made. If any of these files become corrupted all the files in this backup must be restored! For more information on this see SYSOP.DOC. The TEMP.xxx subdirectories represent the temprary storage area for the nodes on your BBS. The letters "xxx" represent a number from "000" to "999", depending on the number of nodes in your BBS. The system will automatically create TEMP.000 and TEMP.001, as the B&BSYS/2 ShareWare version only supports 2 nodes, one Local, and one eksternal node! These can be placed on a RAM-disk if you have one, and the procedure for that is discussed in SYSOP.DOC. The UPLOADS subdirectory is the default upload directory for B&BSYS/2. This can be changed from within B&BSYS/2, but that is discussed in SYSOP.DOC. Now that you have unpacked the files, and understand what subdirectories are created and why, you are ready to begin installation of B&BSYS/2! Running SETUP.CMD Your next task will be to run the OS/2 command file SETUP.CMD. This is done from the OS/2 commandline, and the only paramaters are your HardDrive letters. It might look something like this&: [C&:\BBS] SETUP.CMD CDE Where CDE are the drives C, D and E if they are present on your system. Setup will then set up the system, searching the entire computer for the necessary programs (communication protocols and archivers). If B&BSYS/2 finds any of the following they will be autodetected, and set up with the appropriate configuration&: DSZ.EXE (or *.COM) which is a file that includes the common X, Y and Zmodem protocols. HSLINK.EXE which is a bi-directional file transfer protocol ZIP.EXE which is InfoZip's ZIP utility (completely compatible with PK's popular ZIP- utility, but made for OS/2) UNZIP.EXEWhich is InfoZip's UnZip (companion to ZIP.EXE) ARJ.EXE The popular DOS archiver doesn't have an OS/2 counterpart, so the DOS version is used. LHA.EXE This is also a DOS archiver, and is often preferred by Amigaй users. It also lacks an OS/2 version. If for any reason these files are not detected, or do not reside on your system at the time of running SETUP.CMD they can be added later. Please note that although you may use PkWare's PkUnzip to unzip the distribution files it is not used by B&BSYS/2. For your BBS to have ZIP/UNZIP available you will have to aquire InfoZip's ZIP/UNZIP or a fully compatible OS/2 utility. If you use a compatible utility the files MUST be named ZIP.EXE and UNZIP.EXE! First time startup The first time you start your new BBS you will need to run the file BBS.CMD, which is found in the b&broot. BBS.CMD should be run with only one parameter, and that being the node number. Node 0 is the default Local Node, and so the system should be started with the command&: [C&:\BBS] BBS.CMD 0 When you are prompted for a username use "Sysop Sysop", and specify your personal logon password. You have now entered the BBS! You may wish to og to the Utilities menu to change your name on the system (which at this time is "Sysop Sysop") to match your real name. The utilities menu can be reached by typing UTilities (only the capital letters need to be typed), and then chosing Name. You will then see the current username "Sysop Sysop", and can change it to your name, pressing ENTER when done. You are now ready to configure your BBS. For detailed information on the Configuration of B&BSYS/2 you should read SYSOP.DOC, which is a detailed description of the system and all commands that are available! ═══ 8. B&BSYSOP old doc's ═══ 25 * SysOp Documentation for * Frog Online Services System for OS/2 Frog OSS/2 FOSS/2 * This documenation file is updated with version 1.0с3 which is the first release since B&BSYS changed name to FOSS. * All included material is copyright 1991-94 by&: Terje FlaarЫnning * TOC... 1 INTRODUCTION TO FOSS/2 2 1.1 THE HISTORY BEHIND FOSS/2 2 1.2 FOSS/2 VS. OTHER BBS-SYSTEMS 2 1.3 FIRST TIME FOSS/2 SETUP 2 1.4 THE PEOPLE BEHIND FOSS/2 3 1.5 GREETINGS 3 2 CONFIGURATION OF FOSS/2 3 2.1 CONFIGURATION WITH THE U(til) Co(nfig) COMMAND 3 2.2 The Configure menu 4 General 4 Path names 5 File protocols 5 Archive programs 6 Nodes (comms) 7 Timed events 8 Net-links 9 Areas 9 Return to BBS 12 DOOR.CMD 12 MENU BY MENU IN THE FOSS/2 INTERFACE 13 GLOBAL MENU FUNCTIONS 13 MAIN MENU 14 MESSAGE MENU 14 FILE MENU 15 BULLETIN MENU 16 CHAT MENU 16 UTILITIES MENU 17 SYSOP MENU 18 CREATING THE BBS-SPECIFIC FILES 20 Creating a list of confrences 20 Creating lists of file areas 20 Creating a list of bulletins 20 Creating bulletins 20 SCRIPTS THAT NEED TO BE MADE 21 SCRIPT LANGUAGE 21 SCRIPTS CALLED 21 SCRIPT VARIABLES 22 SCRIPT COMMANDS 23 TECHNICAL INFO 25 SYSTEM REQURIEMENTS 26 FILE STRUCTURES 26 1 INTRODUCTION TO FOSS/2 Welcome to the wonderful world of FOSS/2, the next generation of BBS's that runs under OS/2. 1.1 THE HISTORY BEHIND FOSS/2 My first meeting with modem-communications was in the summer of 1989 when I realised there were telephone connectors in the back of my PC (a old ITT XTRA from 1984). I managed to connect to a local BBS and became a frequent user there. But unfortunately my local BBS had to close down and I had to start calling long distance which was not cheap. After a short while I got the idea of starting my own BBS. My first BBS was started using the MBBS (╕ Mike Robertson) BBS-system and I was online from early 1990. I connected to national networks and since I got more and more conferences the MBBS system became to limited, it only supported 75 conferences. Therefore I started making my own BBS-system which is known as "The Bits & Bytes Bulletin Board System" or FOSS for short. Have to add something here, late in 1993 I heard about the OS/2 patches for Borland Pascal, and this was the start of FOSS/2. FOSS will no longer be developed in a DOS-version. 1.2 FOSS/2 VS. OTHER BBS-SYSTEMS FOSS/2 is in many way like other BBS-systems. The main difference that it is almost unlimited as to how big your system may become. FOSS/2 consist of a database-structure so advanced that many bigger systems can just dream about matching it. This system is not just another program but it does follow all major software development rules. FOSS/2 has a user friendly interface and it is almost impossible to "break" the system by using bad commands or the like. 1.3 FIRST TIME FOSS/2 SETUP FOSS/2 is easy to setup, and if you follow these few steps it should be up and running in minutes. · Unpack the main archive (FOSS*.ZIP) to your BBS directory (C&:\BBS for example). Remember to unpack with the directory- structure intact! · Be sure til place your .KEY file in your BBS directory from now on called B&B-root. This file is supplied directly from me upon registering. · Execute the SETUP.CMD file and follow the on-screen directions. · Now, start FOSS/2 by typing BBS 0 (0 is your local SysOp node) and with the name "Sysop Sysop". Use your own password. · When you are on FOSS/2 command line, type UTIL NAME to change your from Sysop Sysop to the real one. · Now you may start to explore and configure your FOSS/2 BBS. · ... but before you do all this, print out these instructions or write them down. That's all, now you should configure your FOSS/2 BBS the way you want it by using the Co(nfig) command in the SysOp menu. Good luck. A more detailed explanation of the setup-procedure is available in SETUP.DOC, which is found in the same directory as this file. 1.4 THE PEOPLE BEHIND FOSS/2 The main system FOSS/2 is entirely written by Terje Flaaronning during late evenings the last two-three years. Thomas Stenhaug is writing QWK-support, and сeta-version are now being tested. 1.5 GREETINGS The following people have be supporting me under the development of FOSS/2. · Raymond L. Gwinn (Developer of the SIO drivers for OS/2) who has supported me with info about SIO and the OS/2-API concerning async-communication. · Jan-Morten Havstein (Running the main сeta board for FOSS/2) who has to live with all the bugs in the preсeta versions of FOSS/2. · Thomas Stenhaug who is currently working on QWK support routines for FOSS/2, I suspect he have something ready when you read this. · Эyvind L. Eggen (Developer of the XBoard offline reader) who made support for the FOSS/2 grab format in XBoard. The grab format has changed today, but I hope that coming versions of XBoard will support the new format. Now Erik Mogensen is writing the new XBoard and greetings to him also. · Stian Seeberg who wrote this and all the other DOC's available for FOSS/2 (and is also running a сeta-test board). Well I've wrote most of it myself, but Stian have been helping a lot. · My mother who has paid quite a few large phonebills the last couple of years. &:-) 2 CONFIGURATION OF FOSS/2 2.1 CONFIGURATION WITH THE U(til) Co(nfig) COMMAND To configure FOSS/2 you will first have to enter the SysOp menu. It is from here all system wide changes are made. This menu is entered by typing $ (for $ysOp), and pressing ENTER. You will then see the following menu&: v1.0с1 >>> SYSOP MENU <<< v1.0с1 Co nfigure your BBS EF Edit file PA Pack area L og, Show logfile AF Add files (install) DU Delete user (kill) Us er editor DF Delete file CF Classify file Mem ory/system info D os shell/command SF Sort files B ulletin command R ead (messages) comm. T ransfer scratchpad C hat/Node command S elect a new area No de message (send) F ile transfer command U tility command Com ment to SysOp Q uit to main command O pen a external door G oodbye (logoff) The lower part of this menu consists of the systemwide commands. These can be invoked from anywhere in the BBS. The top half of the menu is the $ysOp menus special commands. These will be covered in detail in SYSOP.DOC. 2.2 The Configure menu The command we are intrested in for the time being is COnfigure your BBS. This command brings up the following menu again&: Configure System General Path names File protocols Archive programs Nodes (Comms) Timed events Net-links Areas Return to BBS You select an area by moving the highlight up/down with the arrow-keys on your keyboard, and pressing ENTER. We will now cover these areas in detail. General This is where the general configuration of your BBS is done. The screen looks like this&: Configure General Use&: Esc Letters Board name&: Your boards name SysOp name (you)&: Your name Location of system&: Main phone Number&: Max inactivity time&: 180 seconds New users&: Access level&: 1 Time limit&: 60 Response time&: 10 The boards name you will have to enter yourself. It should match the name you have chosen for your BBS. Your name is autodetected, however if there are several people who have SysOp access any of these can be entered in this field. A user without SysOp axess will not be allowed entered in this field however. The location and phonenumber of your BBS will also have to be entered by you manually. Max inactivity time is the number of seconds a user may remain online without being ejected from the BBS. This is useful if the user falls asleep while online, or simply forgets that he/she is online. It prevents not only that your system remains busy, but saves the user from a rather large phonebill! Access level is the level of access given new users. This will determine what areas of your system they will be allowed to enter. More about the different areas later, in the Areas submenu. Time limit is the number of minutes a new user is given online. Response time is how fast the system reacts to input from the user. The default value of 10 should be acceptable for most systems. Path names This is where you chose the different paths for your temporary files. The menu looks like this&: Configure Path Names Use&: Esc Letters Digits RAM disk temp dir&: F&: Scratch-pad path&: E&:\BBS\MAIN\SCRATCH. CD-ROM drive letters&: 1 - [ ] 2 - [ ] 3 - [ ] 4 - [ ] 5 - [ ] 6 - [ ] 7 - [ ] 8 - [ ] If you do not have a RAM disk then leave the field empty. The scratch-pad should be placed on your fastest hard drive, or preferably on a RAM disk. This should only be done however if the RAM drive is large (at least 2MB for a single node system). If your system has any CD-ROM drives, and you wish to make the files on it (them) available to the users, then place the drive letter in the chechbox(es) that match your system. File protocols This is where you configure your file protocols. The screen looks like this&: Configure File Protocols Use&: Esc Letters Arrows Letter&: Z Name&: ZModem OkErr&: 0 Type&: B_A Path&: E&:\BBS\MAIN\DSZ.COM Upload&: port & p speed &s ha both rz &u Download&: port &p speed &s ha both sz &l AutoRec&: "**"#24 Z - ZModem &p com port Y - YModem Batch &s speed X - XModem &l send list 1 - XModem-1k &n node number H - HS/Link &u upload directory &t minutes left &b base addr (com3+) &i irq (com3+) &h com handle These are autodetected, and unless you wish to install a protocall that is not autodetected, you will not need to change any of these settings. If you should have to enter any protocols that are not autodetected, you will have to fill out the following things&: Letter is the letter of the alphabet that represents this protocol in the list of available protocols that are presented to the user in the PRotocol part of the UTilities menu. Name is the name of the protocol. This is also shown to the user in the PRotocol part of the UTilities menu. *OkErr *Type has three possible switches; B, B and A. These stand for ?, Bi-directional and Autodetect ???? Path is the path to the file, including the filename and extention. Upload is the command string sendt to the program to start the upload process. Download is the command string sendt to the program to start the download process. AutoRec is the string the program should look for when autodetecting an upload. Archive programs This is where you set the different archive programs. The supported programs are ZIP, UNZIP, ARJ, ARC and LHA. These are all autodetected, and selfconfiguring, but you may need to specify the programs if FOSS/2 does not find them for one reason or another. The screen should look something like this&: Configure Archive programs Use&: Esc UNZIP.EXE path (used to view/unpack *.ZIP archives)&: E&:\OS2\UNZIP\UNZIP.EXE ZIP.EXE path (used to create *.ZIP archives)&: E&:\OS2\ZIP\ZIP.EXE PKXARC.COM path (used to view/unpack *.ARC archives)&: PKXARC.EXE PKARC.EXE path (used to create *.ARC archives)&: PKARC.EXE LHA.EXE path (used to view/unpack/create *.LZH/*.LHA archives)&: D&:\TOOLS\LHA.EXE ARJ.EXE path (used to view/unpack/create *.ARJ archives)&: D&:\TOOLS\ARJ241\ARJ.EXE All you have to do here is to specify the path to the file in question. If you fail to do so (like this system has in the case of PKXARC), the file will be highlighted in red on a grey background, and only the filename the system searched for is entered as opposed to the other fields which have a path and filename entered. Nodes (comms) This is where you specify the nodes your system has, and also set up the modem. The screen looks like this&: Configure Nodes and Communications Use&: Esc Arrows Letters Del 1 Com Port&: COM1 Init baud rate&: 38400 Lock baud rate&: Y Type of login &: Wait for RING/CONNECT Ring before answer&: 0 IO device&: COM1 Modem command strings&: Init&: ATxxxxxxxxxxxxx Answer&: ATA Off hook&: ATH1 On hook&: ATH0 1 indicates the number of the node that is being configured. You can have as many nodes as you wish in the registered version, but the $hareWare version only supports nodes 0, and 1. Node 0 is the default Local Node, and can not be configured for modem-use. Com Port is the port that the modem is connected to at the back of the macine. Init baud rate is the speed that the system will communicate with the modem at. In the $hareWare version this is set so that it can not exceed 9600. For v32bis modems 38400 is recomended. Lock baud rate can be set to either Y(es) or N(o), but Y(es) is recomended. This determines wheter or not the rate of data transfer between the computer and the modem should be locked, or be dictated by the connect baud rate. Type of login can be set to several different types of logins, however for an eksternal node (one where people can call in via a modem) the setting is&: Wait for RING/CONNECT ... the BBS waits until it recives a RING signal from the modem, sends the answer string (covered below) and waits until it recived a CONNECT message from the modem. The user is then allowed to log in. The other possibilities are&: Direct local login ... for purely local nodes (like node 0) Direct login ... don't know really??????? Wait for DCD (0-Modem) ... used for logins directly from another computer without the use of a modem. A so-called 0- Modem cable is used to connect the computers. Rings before answer tells the BBS how many rings it should wait until it answers the call. This defaults to 0, but can be set to any number. IO Device is the device that provides the data Input and Output. This is generally the same as the COM port. The modem commands are different for each node, as each node has its own modem. These commands varey from modem to modem, and you will have to consult your modems users manual for the correct settings for your modem. However we have included some tips on what might be included (although the commands for these settings can be different from modem to modem!) in the init at the end of this document. See Apendix A&: Init strings. Init is sendt to your modem to set it in the correct state for recieving calls. All commands that need to be sendt to the modem should be present on this line. It is sendt to the modem each time FOSS/2 is started up, and after every caller has hung up. If the resultcode from the modem is OK, then FOSS/2 will go into a state of "Waiting for RING/CONNECT" in the case of external nodes. Answer is the answer string for your modem. Usually this is ATA, and this is what FOSS/2 defaults to. Off hook is the command string that instructs your modem to take the phone off the hook. This is usually ATH1, and this is what FOSS/2 defaults to. On hook is the command string that instructs your modem to put the phone on the hook. This is usually ATH0, and this is what FOSS/2 defaults to. Timed events FOSS/2 is capable of running events at given times of the day/week. Her mЖ jeg ha hjelp, da jeg ikke aner hvordan det funker.... Net-links FOSS/2 BBS's all have the capabilities to become members of a network called bNet. This network consists of FOSS/2 BBS's only, and they exchange messages at given intervals. To become a member of bNet all you have to do is to register your copy of FOSS/2. You will then be given a number, indicating which BBS you are, and be given a HUB that you can connect to. This HUB will take care of all the message-transfers. As of this day, the bNet and Net-links part of FOSS/2 are not perfected, and as souch they have not been implemented. You are therefor strongly advised to not use this feature of FOSS/2, until an upgrade is available. Areas This is where you configure the diffrent confrences, file areas and bulletin areas. The screen looks like this&: Configure Areas Use&: Esc Arrows Letters Del Info from Bnet Area name&: Mail Box Main Board B&B Support Area type&: Local area Main Board Area code&: MAIN File code&: MAIN Door code&: MAIN Bull code&: MAIN Other&: # of old msg to read&: 100 Area flags&: New user autojoin Message type&: Public messages Area host&: Not a bNet area Access levels -> Directories -> These are the areas that are preconfigured with FOSS/2&: Info from bNet Mail box B&B support Main Board You may add as many as you wish. The following things have to be configured for each new area&: Area name is the name of the area in the areas list. This area list has to be made by you, the SysOp. This will be covered later in this document. Area type will usually be a Local area, as bNet areas are not fully supported as of yet. Area code is a code of up to four letters, that specifies the area as a message area. NO two areas may share the same area code! If you enter an areaname, but omit the areacode "MAIN" will be entered automatically. If this is done you WILL NOT BE ABLE TO CHANGE IT!! You may therfore be wise in filling this in first, and leaving the name blank until this has been taken care of. A change is to come here, making it impossible to have two areas with the same code! File code is also a code of up to four letters. Areas are allowed to share the same file code, and if you intend the files to be available to all users it may be wise to set this file code to MAIN. This is done because users need to be in the area that the file code is set for to be able to list and download the files in that area. If all files that are to be available to the users are kept in the file code MAIN, users will not need to change areas to see all files available to them. This also provides you with an easy way of shielding some users from certain files (typically adult pictures, or private files). You merely place those files in an area with a diffrent file code, and change ( raise) the access level needed to enter that area! (This will be covered in Access levels.) Door code is also a code of up to four letters, and all the limitations that apply to the file codes are in effect here as well. You may wish to make certain doors available to only a limited number of users, and therefor specify a code that is different from MAIN, which is the default. Bull code is the same code of up to four letters, but it controlls the bulletins that are available in a certain area. MAIN is the default here as well, and like the File and Door areas you will only need to change the default if the bulletins should be hidden from scertain users. # of old messages to read is the limit for how many old messages a new user should read in that perticular area. This number can be set as high (or low) as you wish. However new users may not wish to read trough several hundred messages to become up to date, so set the number with care. Area flags are certain limitations, or restrictions that pertain to that perticular area. The flags are as follows&: External area&: used about bNet areas New user autojoin&: a new user is automatically a member of this confrence No resign&: users may not resign from this confrence New user autojoin; No resign&:a new user automatically joins this confrence, and may not resign from it. The space can also be left blank, in which case no restrictions apply. This is the case for most local areas, and is also the default! Message type lists the type of messages that are allowed in an area. The valid choices are&: Public messages&: all messages are public, and can be read by all Private messages&: all messages are private, and can only be read by the author of the message, the recipiant of the message and the SysOp. Public/Private messages&: messages can either be public or private. Please note that the SysOp can read all messages, even those marked as private! It is up to the SysOp how much privacy is to be expected on any given BBS. Area host is used for bNet areas, and as such has not been activated yet. Access levels have to be set for any area to become active. There are two very important things to remember when setting access levels. The first is to whom you wish to give access to this perticular area. This is up to you, but you should keep in mind that all users have at least the minimum access level, and if the data in the area is sensitive (adult pictures are one type of files that should be shielded from some users) you should specify a higher access level. Specifying the access level is done by entering the letter that corresponds to the level you wish to give that area. You then enter a code for what users with that access level may do. The codes for this are&: R ead W rite U pload D ownload O pen All users with a higher access level will recieve the same privelages as the first level you specify. This is only natural, and FOSS/2 will fill the remaining access levels to save you the work. You may of course specify that some users will only be allowed to read messages, and perhaps write them in certain areas, and only users with a higher access level are given up/download privelages. The variations on this (and openness on your system) are up to you to decide! In addition to these five codes comes the second of the very important things to remember. That is to place an S (for SysOp) at level 15 (the letter P). This is to ensure that you are given SysOp access in this area, and as souch have all messages routed to you as well as the intended recipiant. This also grants you the option of killing messages that are deemed not appropriate by you, either morally or legally. Please remember that as a SysOp you are responsible for the files and messages that appear on your system! Directories is where you speciy which directories are assigned to each area. The screen looks like this&: Configure Directories Use&: Esc Arrows Letters Del PgUp DgDn Directory name&: Disk directory&: Directory flags&: The field for directory name is the name that will be listed in FOSS/2 as the directory. This name should have some connection with the files in that specific directory. You may use spaces in the name, and any alphanumerical combination. Disk directory is the directory that is on the hard drive. This does not have to have any connection to the directory name, but it MUST be exclusive. Two directory names can not share the same disk directory! Directory flags are really only used for the Upload directories, but can be used in the other directories as well. The flags that are available are&: Uploaddir&: the specified directory is the upload directory for that file code Show uploader&: the name of the person that uploaded a file is shown along with the file description Uploaddir;Show uploader&: the specified directory is the upload directory for that file code, and the name of the uploader is shown along with the file description. There must be an Upload directory for every file code! If there is not one, then an error code will be recorded in the Log! After configuring an area it may be wise to move the highlight up a few notches to see if the changes have taken effect, and exit the area menu before entering a new area or changing an existing one. This is to ensure that all changes have been saved to disk, in case of a disaster, like a power outage or a hanging of the computer. Return to BBS This returns you to the BBS. You can also press Esc to exit the COnfigure menu. All changes will be saved regardless! MENU BY MENU IN THE FOSS/2 INTERFACE GLOBAL MENU FUNCTIONS There are several global menu functions that are already built into FOSS/2. In addition to these you can create scripts that provide a global functions for your particular system. This is useful for customising your system. The global functions that are present in FOSS/2 are as follows&: B ulletin command R ead (messages) comm. T ransfer scratchpad C hat/Node command S elect a new area No de message (send) F ile transfer command U tility command Com ment to SysOp Q uit to main command O pen a external door G oodbye (logoff) In addition to these that are available to everyone there is one that is reserved the SysOp. That is the $-function that lets you enter the SysOp menu. This has it's own set of commands that will be covered later in this document. MAIN MENU The main menu has it's own functions that can only be evoked from within this menu. These are&: L ist users Ti me left/used X pert mode(on/off) List users will either list all the users that are registered to your BBS, or only the users whose names match the string of letters the user enters. Time left/used shows the user how much of the time he/she is allowed on the system is left and how long he/she has been on the BBS today. Xpert mode toggles whether or not the user sees the "(? for menu)" MESSAGE MENU It is from within this menu that you read and write messages. The functions that are available for reading messages are&: # read that message . review last read < Read last in chain + read next message +# skip # forewrd, read > Read reply to this - read previous message -# skip # back, read The following functions are used for the area as a whole&: E nter message Sh ow area status Ki ll message R eply to message V iew messages in area Un kill message M ark messages Ed it message (change) D ump message(s) Res ign from area Mo ve message (n/a) When you write a message you have a choice of either a line- based editor or a full-screen editor that is built into FOSS/2. This full screen editor allows you to move around using the arrow keys on your keyboard or using the standard WordStar keys you may be used to from other systems. When you R(eply) to a message you get the option of quoting the previous message. Quoting a message means that everything that was in the previous message will be added to the top of the message you are about to write, whit the initials of the author and a vertical line in front of every line of text. This ensures that everyone knows who wrote what. You are also asked if the message should be marked as private (given that private messages are allowed in that perticular area!). This assures you that only the intended recipiant of the message (and the SysOp who can read anything!) can read it. You are also given the choice of editors. You can M(ark) messages in different ways, giving you full control over messages to you. This is practical when you want to dump a number of messages to the scratchpad and download them for reading offline. D(ump)ing messages to the scratchpad allows you to download these messages as a file and read them offline, thus saving you valuable time online. Dumping messages allows you to read messages, however you will have to go back online to reply to the ones meant for you. There are offline-readers that allow you to read messages and reply to them offline, and then upload the replys automatically next time you log on, but as of yet none of these support FOSS/2's messageformat. However QWK- support is to be built into FOSS/2 allowing you to both read and reply to messages offline, using a QWK-compatible mail- reader. Users can search for unread messages either by pressing ENTER until they have read all messages, or they can get a list of unread messages in the different areas by using the Sh(ow area) function. This will tell you how many messages are in an area, and how many of these are for you. The SysOp can define whether or not users will be allowed to R(esign) from certain areas. This is useful for having areas where you can be certain all the members of your BBS will get a message you have posted to ALL users! This is done in the $ysOp COnfigure AREA menu, as described above under CONFIGURATION WITH THE U(til) Co(nfig) COMMAND. K(illing) of messages can only be done by the SysOp and the originator of that message. If the message has been read by anyone the "killer" will be given a message to that effect. FILE MENU This is where the user will find files for Download and (hopefully) Upload. The functions that are used are as follows&: Up load a file L ist files available K eyword file search D ownload file(s) N ew files scan (date) V iew an archived file W ild-char file search The user can Up(load) files using the upload command. The user is told to begin the upload at his/her end. FOSS/2 will then autodetect the file(s) being sendt, and also place the file in the appropriate upload-area depending on which area the user was in at the time she was in at the time. The user is then asked to type a simple description of the file. This description may be as long as 110 letters, including spaces, devided into two lines of 55 characters each! D(ownload) allows the user to specify filenames until he/she enters a blank space and the file(s) are then sent using the protocol defined in the Ut(ilities) Pr(otocol) menu. There are several commands that can be evoked from within the D(ownload) command. These are&: ? Show available commands /a Abort download /l List tagged files /r Remove a file from the list of tagged files Tagging files for download can be accomplished in one of two ways. The user can either specify a wildchard, and all files matching that wildchard will be tagged, or the user may specify one file at a time. V(iew)ing a file causes FOSS/2 to give the user a complete list of files in an archived file (ZIP, ARJ, ARC or LHA), or in the case of GIF-files the resolution and number of colours (It will NOT display the picture itself). L(ist)ing files will give the user a complete list of the files in the area he/she is in at the time, or one of the directories only. For a list of the available directories the "?" command is used. FOSS/2 will NOT create a list of available directories. That has to be done manually by the SysOp. W(ild-char) searching is done by specifying a wild-chard for FOSS/2 to search for matches to. It searches through the filearea(s) and lists the files that mach the specified search- criteria. The common wild-chards "*" and "?" may be used. The difference between these two is that while "*" can represent one or more letters "?" can replace one letter only. K(eyword) searching is more time-consuming but also more effective if you don't know the name of the file you are looking for, because it also searches the description of the files for a match. DO NOT use wild-cards in this search, as it is case-sensitive!!! BULLETIN MENU The bulletins that are to be a part of any BBS must of course be made by the SysOP, and the SysOp must also make a bulletin list to be named areaLIST.* where "area" is the four-letter code used for that spesific bulletin-area in the configuration. The file areaLIST.* is to reside in the BULLETS subdirectory. The bulletins are numbered according to the name of the files they represent. The bulletins themselves are named areaxxx.* where xxxx is the number of that perticular bulletin. The first bulletin in the MAIN area would be called MAIN0001.*. These files also reside in the BULLETS subdirectory. The functions in this area are&: # read that bulletin D ownload a bulletin # represents the number of the bulletin the user wants to read. The user may also D(ownload) a bulletin if he/she wishes, and will be prompted for the number of that bulletin. The download will be completed using the default protocol for that user. CHAT MENU There is the possibility of chatting with other nodes on a multinode BBS or with the SysOp on a single node system. If the SysOp has made himself available he will receive a warning by the machine beeping that someone wants to talk to him/her. The same goes for other nodes, they will be notified with either a message on the screen or a message and a beep if their system allows it. The functions for this menu are&: W ho is online Sy sOp chat (request) A vailability (on/off) Ch at with another node W(ho) gives the user a list of active users on the different nodes and if the SysOp is available or not. If the SysOp is available there will be a red message to that affect at the bottom of the list of active nodes. If the SysOp is not available no message will be at the bottom of said list. Sy(sOp) will call the SysOp if he/she has set him/herself available. If the SysOp is not available the user will be asked to leave a Com(ment) instead. The SysOp can answer a chat request by making the window that node is in active and pressing Alt-C. The chat-session is ended by the SysOp by pressing Alt-C again. The user can set himself available for chat or turn this function off using the A(vailability) function. Ch(at) is used in conjunction with the number of the node the user wishes to chat with, or he/she is prompted for the node- number. The user on the node that recives the chat request can answer by entering Ch(at) followed by the number of the node. The number of the node that initiated the chat-request is listed to the reciever of that request along with the request- message. UTILITIES MENU This menu allows the user to update his personal preferences and change his personal data and password. The functions are&: V iew user profile N ame change AN SI graphics toggle Ar chive format A ddress change IB M chars toggle Pr otocol change P hone number change Cl ear scr. toggles Use ANSI toggles Pa ssword change La nguage selection To ggle switches Li nes on screen Ta sk Manager (on/off) V(iew) gives the user a list of his/her active configuration. It is then easy to identify which things need to be changed to suit the users preferences. Ar(chive format) tells the system which archiver (ZIP, ARJ, ARC and LHA are available) that the user would prefer used for the files to be archived using (this format is used for the messages that the user grabs and the bulletins that are downloaded, NOT the archived files on the system that are free for download!). Pr(otocol) tells the system which transfer protocol the user would like to use as a default. The system will then use this protocol instead of prompting the user every time. Use ANSI toggles whether the system should display ANSI graphics in menus, bulletins and messages. To(ggle) is used to decide whether or not to display message status at logon. N(ame) allows you to change the name you will be using on the BBS. This can be used to change your Alias on boards that allow this, or if your name has changed for whatever reason. This will NOT redirect messages adressed to your new name, but users will be given a message that as your old name is no longer be a part of that BBS's user-list! It will be up to the user to announce the name-change!! A(dress) allows you to change the adress you have listed to the system. Your old adress will be displayed, and you can press ENTER if you do not wish to make any changes. This should be changed if you move however, as it allows the SysOp to get in touch with you should there ever be a need for it. P(hone number) allows you to change the phone number you have listed. The number for your Home and Work numbers are both changable from this menue. If you do not wish to change the number that is highlighted, then press ENTER, and the next number will be highlighted. These numbers should be changed to reflect your current numbers, as it allows the SysOp to get in touch with you should there ever be a need for it. Pa(ssword) allows you to change your password used during login. You are prompted for your old password once and your new password twice (to ensure you typed it correctly!). This new password will be used for all consequent logins. Li(nes) sets the number of lines the system will let scroll across the screen before the user gets a --more-- message. Set this to 0 and the system will not stop scrolling. The AN(SI) function toggles whether ANSI should be used at all (useful if the user doesn't have ANSI-capabilities in his/her communications-package) IB(M) toggles the IBM extended ASCII text mode. Cl(ear) toggles whether or not to clear the screen before showing messages, bulletins or menus. La(nguage) toggles between English and Norwegian language in menus and functions. Ta(sk) toggles whether or not you want to allow background execution of tasks. SYSOP MENU This is where you change the look and feel of your BBS! You can make changes even while users are logged on to your system, allowing you to make changes without having to shut down!! This is a major improvement over several of the larger BBS-systems that are on the market. If one of the changes you make forces the BBS to reset because of an error the user is not logged off, but is instead given the opportunity to log on again without having to call back. No extra cost is forced upon him/her by your mistake (even though a mistake is unlikely!). Co nfigure your BBS EF Edit file PA Pack area L og, Show logfile AF Add files (install) DU Delete user (kill) Us er editor DF Delete file CF Classify file Mem ory/system info D os shell/command SF Sort files Co(nfigure) is used to change the basics of the BBS. This is covered in detail in the section of this file called "CONFIGURATION WITH THE U(til) Co(nfig) COMMAND". This section was placed at the beginning of this document because it is neccesary for the proper configuration of FOSS/2, and as souch was covered as early as possible. L(og) shows the user log for the node you specify. This contains a list of new users and files that have been uploaded, and to where. It also contains a list of the different errors that have occured on the system. Us(er editor) is used to grant users higher access levels or unkill an unintentionally killed user. You can also grant the user higher timelimits if you so wish. The Mem(ory) function gives you a list of system information. EF allows you to edit the description of a file or a list of files, depending on how you specified the file(s). The file(s) to be edited can be listed with wild-chards to increase the flexibility of the editing process. However if the SysOp plans to edit several files the CF command is superior! AF adds files to the filearea the SysOp specifies. The areaname is to be used, and not the directoryname! The files in the directory specified for that filearea that do not have a description will be shown to the SysOp and he/she will have to type in a description. If one is not addes the file will not be added to the filelist. The SysOp can specify a file that contains a list of the files that are to be added, and their descriptions. This allows ease of installation if the files come with a description file, or one can be made ahead of time. The default description file name is DESCRIPT.ION, which is the file used by 4DOS (4OS2) and NDOS for attaching long descriptions to files. This can be changed however to match any filename. The files that are to be added can have filenames that are up to 16 characters long (including periods!) on HPFS disks. FAT-disks have the familiar 8.3 filename restrictions. DF will delete a file or several files (using wild-chards) from the filelist and the harddrive. D(os shell) allows you to execute a DOS-command or run a file, either from within the BBS, or after you shell to the command line! PA allows you to pack an area for storage, saving all the messages in that area for later refrence. DU allows you to kill a user so that he/she is not allowed back onto the BBS. This can be done for different reasons, but be careful! They are gone for ever!! CF is a full screen file editor. It allows the SysOp to change the description of a file, move a file (with the description intact!) to a different filearea or delete files form the filelist and the harddrive. The files are tagged using the insert key, and may then be edited in the above mentioned ways. SF sorts the files in the filearea you specify. This can be time-consuming if you have a large number of files, but it is recommended that you do this often, so that the file index is updated, and the searches will go faster. Files will also be placed in alphabetical order, which makes it easier to find files even without the search tools. You are given the option to update the 4DOS (4OS2) or NDOS DESCRIPT.ION files as well, allowing 4DOS (4OS2) or NDOS users to see the descriptions when using the DIR command at the commandline. Creating the BBS-specific files As your BBS is different from every other BBS it is essencial that you create files that reflect this. There are several files that help users find their way around your system. These will have to be created by you using an ANSI drawing utility like TheDrawй. The files that are most important are the lists of the different confrences, and the different file areas. In addition it may be wise to create bulletins that contain information that are of interest to your users. Creating a list of confrences The confrence list comes up every time a user trys to Select an area but does not specify which area that should be. The file should be called AREALIST.* and should contain all confrences on your system, members only included. This because it gives the user an easily accessible way of learnign what the system has to offer. It might be a good idea to include information on the confrence, like who is in charge of it or if it is for members only (what the access level is to enter). There is a sample file that comes with FOSS/2, and contains the pre- installed areas. Creating lists of file areas You have to create your own list of file areas that is consistent with your BBS. These files are generally ANSI files (made in an ANSI-drawing utility like TheDrawй) that FOSS/2 displays when a user asks for them (by specifying that "?" should be listed). The file should be called DIRSarea.* where "area" is the four letter file code. You will have to make one for every single file area that has a seperate file code. Creating a list of bulletins To make a list of the bulletins you create the file areaLIST.* where "area" is the four letter Bull code. Creating bulletins Bulletins generally contain information that is of interest to the user. The files are called areaxxxx.* where "area" is the name of the Bull code, and "xxxx" is the number of the bulletins starting with 0001. Scripts that need to be made There are several scripts that need to be created, to give the user a more pleasant time when logging on to your system. These scripts will be covered in detail, as to when they are executed, and hints to what they might contain. TECHNICAL INFO SYSTEM REQURIEMENTS This program runs under OS/2, and as a result you are forced to live with it's demands on your hardware. We feel that for any type of performance a 386dx with 8 MB of RAM is the minimum, although OS/2 (and therefore FOSS/2) will run on any 386 with over 4MB of RAM. (er dette riktig?????) In addition you will of course need a modem and a telephone line! The ShareWare version of FOSS/2 has certain features that are limited. The one thing you will notice is that it is not capable of exceeding 9600 baud, and you are limited to 20 users on the system. This means that the 21. person who logs on to your system will overwrite the 20. person...... so if you plan to start your own BBS this program can get you started, but if you are serious about it the small fee the author asks is not that excessive! Si ifra hvis dette ikke stemmer...har jo bare prЫvd pЖ en 486dx 33 med 20MB RAM ;-) FILE STRUCTURES The structures of all system files may be obtained directly from me. ═══ ═══ The AREA.CMD file is used to start external areas from FOSS with the use of the S(elect) command. Parameters 1. Node number, unformatted 2. Node number, prefilled with zeros to length of 3 characters 3. Current com port 4. Current com speed divided with 100 5. External areas area code ═══ ═══ The DOOR.CMD file is used to start external door programs from FOSS with the use of the Op(en) command. Parameters 1. Node number, unformatted 2. Node number, prefilled with zeros to length of 3 characters 3. Current com port 4. Current com speed divided with 100 5. Door name/number 6. Current door code ═══ ═══ The RING.CMD file is called each time your modem sends a RING signal to the BBS, may play a tune on your SoundBlaster or something. There are no parameters passed to this command file. ═══ ═══ The REMOTE.CMD file is called by the D(osShell) command in the SysOp menu if the user/SysOp wants to shell to dos. Parameters 1. Node number, unformatted 2. Node number, prefilled with zeros to length of 3 characters 3. Current com port 4. Current com speed divided with 100 ═══ ═══ The YELL.CMD file is called instead of the beeping done by the Y(ell) command, may yell by playing a .WAV Parameters 1. Node number, unformatted 2. Node number, prefilled with zeros to length of 3 characters 3. Current com port 4. Current com speed divided with 100 ═══ ═══ The B!DOWN.l script is run before a file-download is started What to return 1. should be returned if there should be no download ═══ ═══ The EXTRACMD.l script is run each time FOSS reaches an unknown command. This script should (if present) allways remove the first command from the command que by executing a "@getfirst curcmd sys_cmd" command.