 
One of the easiest and possibly the most obvious ways to customize or
personalize your BBS is to change the look of the menus. Menus are merely ASCII
text files (with optional ctrl-a codes or ANSI escape sequences) stored in the
TEXT\MENU directory. The filenames are descriptive of the menu subject and
the extensions represent the content of the file. The possible extensions and
their meanings are:
RIP     Contains RIPscrip escape sequences for use with RIPterm
WIP     Contains WIP escape sequences for use with DC-Term
ANS     Contains ANSI escape sequences suitable for color display
MON     Contains ANSI escape sequences suitable for monochrome display
ASC     Contains no ANSI
All of the above file types can contain ctrl-a codes, and only the ASC file
must exist. If a user has color ANSI, the ANS file will be displayed; if it
doesn't exist the ASC file will be displayed. If a user has monochrome ANSI,
the MON file will be displayed; if it doesn't exist the ANS file will be
displayed; and if it doesn't exist the ASC file is then displayed.
A user without ANSI will always be displayed the ASC file.
To edit files with ANSI escape sequences, it is usually preferable to use a
utility designed for such a task. TheDraw is quite popular for this use.
To edit files with ctrl-a codes, you can use any editor that allows the input
of ctrl characters, but you won't see the attributes till you view the file
within Synchronet. You can, however, use the Synchronet internal editor (;EDIT
from the main menu) and it will display the attributes as you edit the file.
The Synchronet editor limits the line length to 79 characters which may not be
sufficient for lines with multiple ctrl-a codes.
The best way to edit files with Ctrl-A codes is to first convert them to ANSI
with MSG2ANS.EXE (see the Utility reference for more information). Then edit
with an ANSI editor (such as TheDraw). Then convert back to Ctrl-A format
using ANS2MSG.EXE (see the Utility reference for more information).
Menu Files	Description
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ALLMAIL         Sysop's reading all mail on system menus
ATTR            Ctrl-A code menu for use within the Synchronet internal editor
BATCHXFR        Batch transfer menu
BATDPROT        Batch download transfer protocols
BATFLAG         Batch flag command key menu
BATUPROT        Batch upload transfer protocols
BIPROT          Bidirectional transfer protocols
CHAT            Chat section menu
DLPROT          Download transfer protocols
E-MAIL          E-mail section menu
EDITOR          Synchronet internal editor commands and line editing keys
EXEMPT          Exemption flag descriptions for use within User Edit
FLAGS1          Flag set #1 descriptions for use within User Edit
FLAGS2          Flag set #2 descriptions for use within User Edit
FLAGS3          Flag set #3 descriptions for use within User Edit
FLAGS4          Flag set #4 descriptions for use within User Edit
LOGOFF          Logoff ('O' command) screen
LOGON           Logon screen (LOGON2, LOGON3, ... LOGON9 also supported)
MAILREAD        Reading mail menu
MAIN            Main section menu
MAINCFG         Main configuration menu
MAININFO        Main information menu
MSGSCAN         Message reading/scanning menu
MULTCHAT        Multinode chat menu
PRIVCHAT        Private node-to-node chat menu
QWK             QWK Packet menu
RESTRICT        Restriction flag descriptions for use within User Edit
SENTMAIL        Reading sent mail menu
SYSMAILR        Sysop additional commands while reading mail
SYSMAIN         Sysop additional commands for main section
SYSMSCAN        Sysop additional commands while message reading/scanning
SYSSMAIL        Sysop additional commands while reading sent mail
SYSXFER         Sysop additional commands for transfer section
TEMPXFER        Temporary directory commands menu
TRANSFER        Transfer section menu
UEDIT           User Edit menu
ULPROT          Upload transfer protocols
WFC             Waiting for call menu
XFERCFG         Transfer section configuration menu
XFERINFO        Transfer section information menu
Optional Menus
The following files must be created in the TEXT\MENU directory if you wish to
use them.
GRPS            Message Group listing
SUBSx           Message Sub-board listing, 'x' is the group number
LIBS            File Library listing
DIRSx           File Directory listing, 'x' is the library number
XTRN_SEC        External Program Sections
XTRNx           External Program listing, 'x' is the section number
TEXT_SEC        Text File Section listing
TEXTx           Text File listing, 'x' is the text file section number
CHAN            Multinode Chat Channels
TMESSAGE        Displays when the user enters the transfer section
TPOLICY         Transfer policy (&T transfer section command)
Other Optional Message Files
If you want to have an information file displayed for sub-boards when using
the 'I' scanning command and 'IS' main menu command, create a file for the
sub-board in the DATA\SUBS directory using the internal code for that sub-board
as the name and .MSG as the extension. Example:
DATA\SUBS\GENERAL.MSG
If you want to create in information file for file directories to be displayed
with the 'ID' transfer section command, create a file for the directory in
the DATA\DIRS directory using the internal code as the name and .MSG as the
extension. Example:
DATA\DIRS\GAMES.MSG
If you want to create a custom file listing header for a file directory, create
a file in the DATA\DIRS directory using the internal code as the name and .HDR
as the extension. Example:
DATA\DIRS\GAMES.HDR
Colors
To modify some of colors of the BBS you can edit the ATTR.CFG file which is
located in the CTRL directory. The file contains one color per line and is
commented as to the use of the color. The colors are represented with ctrl-a
code attribute letters/numbers. The number of colors you can change with this
method is very small.
Text Files
There are some text files that are displayed to users at different points
in the system. The locations and descriptions follow (* indicates optional):
TEXT\ANSWER.ANS         Answer message for ANSI users
TEXT\ANSWER.ASC         Answer message for non-ANSI users
TEXT\ANSWER.RIP         Answer message for RIP users
TEXT\SYSTEM.MSG         Description of the system and its configuration
TEXT\NEWUSER.MSG        Displayed to new users (usually system rules)
TEXT\FEEDBACK.MSG       Displayed before new users write validation feedback
TEXT\NUPGUESS.MSG      *Displayed to callers attempting to guess the NUP (after
                        failing to guess correctly)
TEXT\TOOSLOW.MSG       *Displayed to users logging onto a node at less than the
                        minumum configured connect rate for that node
TEXT\BADCID.MSG        *Displayed to users calling from a number contained in
                        CID.CAN
TEXT\BADNAME.MSG       *Displayed to new users trying to use a name contained
                        in NAME.CAN
TEXT\BADPHONE.MSG      *Displayed to new users using a number contained in
                        PHONE.CAN
TEXT\BADFILE.MSG       *Displayed to user trying to upload filename contained
                        in FILE.CAN
TEXT\QWK\HELLO         *Included in QWK packets
TEXT\QWK\BBSNEWS       *Included in QWK packets
TEXT\QWK\BLT-0.?       *Included in QWK packets (? must be number)
Logon Message Flow Chart
Displayed filenames are in upper case.
(Note: LOGON*.* are not displayed for local logons)
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º TEXT\ANSWER.* º
ÈÍÍÍÍÍÍÍÑÍÍÍÍÍÍͼ
ÚÄÄÄÄÄÄÄÁÄÄÄÄÄÄ¿
³ Logon Prompt ³
ÀÄÄÄÄÄÄÄÂÄÄÄÄÄÄÙ
  ÚÄÄÄÄÄÁÄÄÄÄÄ¿ ÚÄÄÄÄÄ¿ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
  ³ New User? ÃÄ´ Yes ÃĶ TEXT\SBBS.MSG ÇĶ TEXT\SYSTEM.MSG º
  ÀÄÄÄÄÄÂÄÄÄÄÄÙ ÀÄÄÄÄÄÙ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍͼ
     ÚÄÄÁÄ¿                               ÉÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍ»
     ³ No ³                               º TEXT\NEWUSER.MSG º
     ÀÄÄÂÄÙ                               ÈÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍͼ
        ³                                ÚÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ¿
        ³                                ³ Password Selection ³
        ³                                ÀÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÙ
        ³                               ÚÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄ¿
        ³                               ³ Default Configuration ³
        ³                               ÀÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÙ
        ³  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÚÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ¿
        ³  º TEXT\FEEDBACK.MSG ÇÄ´ Yes ÃÄ´ Feedback Required? ³
        ³  ÈÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍͼ ÀÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÙ
        ³    ÚÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄ¿                  ÚÄÄÁÄ¿
        ³    ³ Send Feedback ³                  ³ No ³
        ³    ÀÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÙ                  ÀÄÄÂÄÙ
        ³  ÚÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄ¿                   ³
        ³  ³ New User Event(s) ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
        ³  ÀÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÙ
        ³  ÉÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍ»
        ÀÄĶ TEXT\MENU\LOGON.* º
           ÈÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍͼ
          ÉÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍ»
          º TEXT\MENU\LOGON2.* º
          ÈÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍͼ
          ÉÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍ»
          º TEXT\MENU\LOGON3.* º
          ÈÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍͼ
                    ...
          ÉÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍ»
          º TEXT\MENU\LOGON9.* º
          ÈÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍͼ
            ÚÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄ¿
            ³ Logon Event(s) ³
            ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Virtually all the text and color that the BBS displays is stored in the file
TEXT.DAT in the CTRL directory. The syntax of this file is VERY specific and
extreme caution should be taken when editing it. Knowledge of the C language
would be very helpful in producing the desired results. If all you want to
do is change colors of a certain text line, take care not to disturb the
arrangement of the other characters on the line. Ctrl-a codes can be preceded
by an embedded ctrl-a character (usually a black happy face) or by a '\1' 
(the printf() equivalent of ctrl-a).
The syntax of the characters between the double quotations is identical to 
the C language printf() format string with one exception: \xxx where x are
digits (0-9) represents a decimal number, not an octal number. The range is
0 to 255. If you wish to set a background color using \1 for the ctrl-a code, 
you may need to pad the attribute number with zeros. For example; to set the 
background to blue, you might try to use the sequence "\14" which won't work.
You could either embed the actual ctrl-a character (which is preferred) or
use "\0014".
Some of the strings have characters preceded by a tilde ('~'). These strings
are referred to as mnemonics. The tilde precedes a character that is to be
highlighted for users supporting ANSI and enclosed in parenthesis for non-ANSI
users. Usually used for prompt strings that contain the valid key commands.
The colors to use for the highlighted characters, normal characters, and the
command character are specified in the CTRL\ATTR.CFG file.
The order of the % specifiers (if they exist) in a TEXT.DAT line cannot be
altered. The display of %s specifiers can be suppressed by changing the '%s' to
'%.0s'. Another way to suppress the display of specifiers is to enclose them
between Ctrl-A( and Ctrl-A). Any text between Ctrl-A( and Ctrl-A) would only
be displayed to users of level 90 or higher. To suppress the display to all
users, put the text/specifiers between Ctrl-ACtrl-Z and Ctrl-A) (assuming
that the Z flag from flag set #1 is not set on any user accounts).
** WARNING **
Make a backup of the TEXT.DAT file before you edit it. If you damage the file
syntax when editing it, Synchronet may execute erroneously or even fail to
initialize.
The node action text can be over-ridden by editing the NodeAction lines in the TEXT.DAT file (see previous section for details on TEXT.DAT). The node action text is what is displayed on the node status line when a node is in use. (i.e. instead of "Node 1: So-and-so uploading at 14400bps", you could make it say whatever you like). You can also include the following optional specifiers (in this order): %s User's name or alias %u User's security level %u User's age %c User's sex (gender, M or F) %s User's computer type %s User's note %s Date user was first online %u Auxiliary value (chat channel, door number, paged node, etc) %u Connection rate (in bps) If you include any of the above specifiers, you must also include any of the specifiers above it. The order of the specifiers cannot be changed. If you wish to suppress the display of a %s specifier, use "%.0s" instead of "%s". To suppress other specifiers, see the previous section for details.
Trash can files are used to be able to reject text during certain sequences on the BBS. For example, if you don't want a user to be able to log on with a certain name or use a certain phone number, you would place the information you don't want them to use into the appropriate trash can file. Synchronet looks for trash can files in the \SBBS\TEXT directory, certain ones may already exist, others will need to be created if you wish to use them. The names of the various trash can files and their function are as follows: TEXT\CID.CAN You MUST have caller ID capabilities in your area (as well as a modem which can support those capabilities) in order to use this file. When a call comes in to the BBS who's caller ID phone number matches a phone number in this file, the call will be rejected. TEXT\NAME.CAN When a user attempts to use a name contained in this file as the name for their user account, they will be told that s/he cannot use that name. If the file TEXT\BADNAME.MSG exists, this will be displayed to the user. TEXT\FILE.CAN When a user uploads a file to the transfer section who's filename matches one of the names contained in this file, the user will be told that s/he cannot upload the file. If the file TEXT\BADFILE.MSG exists, this will be displayed to the user. TEXT\PHONE.CAN When a user attempts to use a phone number contained in this file as a phone number for their user account, they will be told that s/he cannot use that phone number. This file can also be used by the Synchronet Callback Verifier program. If the file TEXT\BADPHONE.MSG exists, this will be displayed to the user. The trash can files also allow special key characters to be used within them, the tilde '~' character means "contained within" the carrot '^' character means "beginning with", the '!' character means "negate the match logic"e; and the '*' character means "e;begins with or ends with" depending on the position in the line. For example: sysop in the name.can would mean users could not use the name "sysop". sysop^ or sysop* would mean users could not use names beginning with the word "sysop", like "sysopa" or "sysops" etc. *sysop or sysop* would mean users could not use names ending with the word "sysop", like "thesysop" or "your_sysop" etc. sysop~ would mean users could not use names that have the word "sysop" anywhere in them, like "imthesysop" or "mesysophere". !sysop~ would mean users must use names that have the word "sysop" anywhere in them, like "imthesysop" or "mesysophere". These key characters can be used in any of the trash can files.
Using Message Variables
Message Variables (also called @-Codes) are a way to customize text files in
Synchronet to display information about the user online or the BBS.
If Synchronet encounters an @-Code in a text file (i.e.: TEXT.DAT, menus, etc.),
it will replace the @-Code in the file with the information that it corresponds
with. @-Codes in e-mail messages and posts will only be expanded if they were
posted locally (not networked) by user #1. TEXT.DAT lines that have %
specifiers will not expand @-Codes unless the % specifiers are removed.
For example, placing the following line in a text file displayed to a user
named Fred Jones living on 100 Maple Street:
	Hi @ALIAS@, you live at @ADDR1@ don't you?
Would result in the user seeing:
	Hi Fred Jones, you live at 100 Maple Street don't you?
It's that simple.  The following is a list of the @-Codes that Synchronet will
recognize. Remember that the Code NAME must begin and end with an @ symbol.
The two columns after the description of the @-Code show which other BBS
programs also support that @-Code (either PCBoard or Wildcat).
The @-Codes with "[...]" following the name indicate that you can have the
variable displayed with padding. If the @-Code name ends in "-L" the variable
will be left justified and "-R" indicates it will be right justified. If for
example, the user's name is Bob, the text string "___@NAME-L@___" would display
to the user as "___Bob     ___" and the text string "___@NAME-R@___" would
display to as "___     Bob___". If you want the string to be padded longer, you
can add extra characters to the end of the @-Code name and before the
terminating '@' sign. So for example, "___@NAME-L#####@___" would display as
"___Bob          ___" (the "___" segments of the above text examples are only
to demonstrate where the padding begins and ends).
*** Synchronet Supported @-Codes ***
( * Indicates Synchronet specific )
Note: All codes must be uppercase and sandwiched between @ symbols
      (e.g. @USER@).
System Information
Code Description Ver --------------------------------------------------------------------------- BBS Name of BBS BOARDNAME Name of BBS CONF Name of current Group and Sub-board CONFNUM Number of current Group and Sub-board CONN Connection description (modem type, "Telnet", "Local") 2.3c DATE Current system date DIR Current file directory short description DIR-L[...] " " padded and left justified DIR-R[...] " " padded and right justified DIRL Current file directory long description DIRL-L[...] " " padded and left justified DIRL-R[...] " " padded and right justified DN Number of current file directory DL " " padded and left justified (4 chars wide) DR " " padded and right justified (4 chars wide) FIDOADDR System's primary FidoNet address 2.3c FREESPACE Free disk space available for uploads GRP Current message group short description GRP-L[...] " " padded and left justified GRP-R[...] " " padded and right justified GRPL Current message group long description GRPL-L[...] " " padded and left justified GRPL-R[...] " " padded and right justified GN Number of current message group GL " " padded and left justified (4 chars wide) GR " " padded and right justified (4 chars wide) INETADDR System's Internet Address (as configured in SCFG) 2.3c LASTCALLERNODE Name of user last on this node LASTCALLERSYSTEM <same as LASTCALLERNODE> LIB Current file library short description LIB-L[...] " " padded and left justified LIB-R[...] " " padded and right justified LIBL Current file library long description LIBL-L[...] " " padded and left justified LIBL-R[...] " " padded and right justified LN Number of current file library LL " " padded and left justified (4 chars wide) LR " " padded and right justified (4 chars wide) LOCAL-IP System's IP address 3.0b LOCATION System location (city, state) 2.3c NOACCESS Why user was denied access (last false ARS) NODE Number of current node NODE### Status of node number ### NUMCALLS <same as STATS.LOGONS> NUMDIR Number of current library and directory PREVON <same as LASTCALLERNODE> QUESTION Current Yes/No question (for TEXT\MENU\YESNO.*) QWKID System's QWK BBS-ID 2.3c REV Software revision (single letter) STATS.LOGONS Total logons during history of system 3.0b STATS.LTODAY Total logons today 3.0b STATS.TIMEON Total time used during history of system (in minutes) 3.0b STATS.TTODAY Total time used today (in minutes) 3.0b STATS.ULS Total uploads today 3.0b STATS.ULB Total bytes uploaded today 3.0b STATS.DLS Total download today 3.0b STATS.DLB Total bytes downloaded today 3.0b STATS.PTODAY Total posts today 3.0b STATS.ETODAY Total e-mails sent today 3.0b STATS.FTODAY Total feedbacks sent today 3.0b STATS.NUSERS Total number of new users today 3.0b SUB Current message sub-board short description SUB-L[...] " " padded and left justified SUB-R[...] " " padded and right justified SUBL Current message sub-board long description SUBL-L[...] " " padded and left justified SUBL-R[...] " " padded and right justified SN Number of current message sub-board SL " " padded and left justified (4 chars wide) SR " " padded and right justified (4 chars wide) SYSDATE Current system date SYSOP Name of System Operator SYSTIME Current system time TCALLS Total number of logons for system TFILE Total number of files on system TIME Current system time TMSG Total number of messages on system TNODE Total number of nodes on system TUSER Total number of user slots on system VER BBS version number WHO Display status of all active nodes
User Information Code Description Ver --------------------------------------------------------------------------- ADDR1 User's street address ALIAS User's name or alias BAUD User's connect rate (DCE) in bps BDATE User's birthdate (MM/DD/YY) BPS <same as BAUD> BYTELIMIT User's free credits per day BYTESLEFT User's total credits CALLS Total number of logons for user CID Caller's Caller-ID info or IP address 2.3c CITY User's city COMPANY User's company name or real name CPU User's computer type (v2.x) or hostname (v3.x) DATA <same as PHONE> DATAPHONE <same as PHONE> DAYBYTES Number of free credits used today by user DLBYTES Total bytes downloaded by user DLFILES Total files downloaded by user DLKLIMIT User's total credits (in kilobytes) DOWNK Total kilobytes downloaded by user DOWNS <same as DLFILES> EXDATE User's expiration date (MM/DD/YY) EXPDATE <same as EXDATE> EXPDAYS Days left before user expires FIRST User's first name/alias FIRSTREAL User's first real/company name FROM User's location (City, State) HANDLE User's chat handle HOMEPHONE <same as PHONE> HOST <same as CPU> 2.3c IP <same as CID> 2.3c KBLEFT User's total credits (in kilobytes) KBLIMIT User's free credits per day (in kilobytes) LAST User's last name (alias) LASTDATEON Date of user's last logon (MM/DD/YY) LASTNEW Date of user's last new file scan (MM/DD/YY) LASTON Date and time of user's last logon LASTTIMEON Time of user's last logon (HH:MM am) LASTREAL User's last real/company name LEFT <same as MINLEFT> MAILW Number of mail messages waiting for current user MAILW:x Number of mail messages waiting for current user #x MAILP Number of pending mail messages sent by current user MAILP:x Number of pending mail messages sent by current user #x MAXDK <same as KBLIMIT> MEMO Date of user's last password modification MEMO1 User's note MEMO2 <same as COMPANY> MINLEFT User's time left in minutes MSGLEFT Total number of messages posted by user MSGREAD Number of messages read by user this call MSGSLEFT <same as MSGLEFT> NAME User's name or alias NAME-L[...] User's name (padded and left justified) NAME-R[...] User's name (padded and right justified) NEWFILETIME Date and time of user's last new file scan NUMTIMESON <same as CALLS> PHONE User's phone number (###-###-####) REAL User's real first name SEC User's security level SECURITY <same as SEC> SINCE Date of user's first call (MM/DD/YY) STATE User's state (from location) TIMELEFT <same as MINLEFT> TIMELIMIT Maximum time per call in minutes TIMEON Time used this call in minutes TIMEUSED <same as TIMEON> TLEFT Time left (H:MM:SS) TPERC Time allowed per call (H:MM:SS) TPERD Time allowed per day (H:MM:SS) TUSED Time used this call (H:MM:SS) UPBYTES Total bytes uploaded by user UPFILES Total files uploaded by user UPK Total kilobytes uploaded by user UPS <same as UPFILES> USER User's name or alias (same as ALIAS) ZIP User's zip/postal code
Display Code Description Ver --------------------------------------------------------------------------- AUTOMORE Toggle automatic pausing BEEP Generate a beep BELL <same as BEEP> CLS Clear screen CRLF Carriage return/line-feed pair 3.0b MENU:filename Display a menu file (from TEXT\MENU directory) MSGREPLY Command key to reply to last message 3.0b MSGREREAD Command key used to re-read last message 3.0b NOPAUSE <Same as POFF> MORE <same as PAUSE> PAUSE Immediately produces a [Hit a key] prompt PON Toggles automatic screen pause for everyone POFF Toggles automatic screen pause for everyone TYPE:filename Display a specific filename UP Move cursor up one row (ANSI) 3.0b UP:n Move cursor up n rows (ANSI) 3.0b DOWN Move cursor down one row (ANSI) 3.0b DOWN:n Move cursor down n rows (ANSI) 3.0b RIGHT Move cursor right one column (ANSI) 3.0b RIGHT:n Move cursor right n columns (ANSI) 3.0b LEFT Move cursor left one column (ANSI) 3.0b LEFT:n Move cursor left n columns (ANSI) 3.0b GOTOXY:x,y Move cursor to x/y (1-based) (ANSI) 3.0b PUSHXY Save current cursor position (ANSI) 3.0b POPXY Restore saved cursor position (ANSI) 3.0b
Miscellaneous
There a few special Synchronet specific @-Codes which require a parameter (following the colon and before the terminating @ symbol):
Code Description --------------------------------------------------------------------------- HANGUP Immediately disconnect user SETSTR:STR Sets the current Baja command string to STR EXEC:MODNAME Execute a loadable (Baja) module, EXEC\MODNAME.BIN TYPE:FILENAME Display a specific filename (must specify path and file ext.) MENU:FILENAME Display a menu file (from TEXT\MENU with automatic file ext.) Synchronet command line specifiers may be used in the FILENAME parameter to the TYPE: @-Code allowing symbolic replacment for specific Synchronet directories (%!, %z, %k, %j, etc). Examples: @EXEC:MYMOD@ @TYPE:%zSYSTEM.MSG@ @MENU:YESNO@
Synchronet supports six different Color Code formats.  When Synchronet
encounters one of these Color Codes in a message, it changes the text following
the Color Code to the specified color.	Support of the formats which are not
native to Synchronet (WWIV, Celerity, Renegade, PCBoard, and Wildcat) can be
toggled on and off from the Synchronet Configuration utility (System->Message
Options->Extra Attribute Codes). The non-Synchronet color codes (Extra
Attribute Codes) only affect the text that is displayed on the SAME LINE.  When
using Synchronet color codes, the new color is retained from line to line until
another color code is processed or the end of the text is reached.
Synchronet Format
The native Synchronet Color Code format (preferred) consists of a Control-A
followed by a singe character.	The following is a list of valid Control-A
Color Codes:
	Foreground	Background
	----------	----------
Black       K		    0
Red         R		    1
Green       G		    2
Yellow      Y		    3
Blue        B		    4
Magenta     M		    5
Cyan        C		    6
White       W		    7
	Attribute	Description
	---------	-----------
High        H		High Intensity
Blink       I		Blinking
Normal      N		No Special Attributes (Normal)
Pause       P		Insert a Pause Prompt into message
Pause Reset Q		Reset the line counter for the auto screen-pause
Delay       ,		Insert a Tenth Second Delay into message
Delay       ;		Insert a Half Second Delay into message
Delay       .		Insert a Two Second Delay into message
Date        D		Display the system date
Time        T		Display the system time
Cls         L		Insert a Form Feed (Ctrl-L, Clear Screen) into message
Clreol      >		Clear to End of Line (leave cursor in current position)
Bckspc      <		Non-destructive backspace (Ctrl-H)
CR          [		Carriage return (Ctrl-M)
LF          ]		Line feed (Ctrl-J)
Ctrl-A      A		Send an actual Ctrl-A character
Sync        S		Synchronize output with remote system
EOF         Z		End of displayable text in this file
Normal      -		Same as 'N' but only sends ANSI codes if the
         (minus)        High Intensity, Blinking, or Background attribute is
			set.
Normal      _		Same as 'N' but only sends ANSI codes if the
       (underscore)     Blinking or Background attribute is set.
Synchronet also supports Special Control-A codes used to hide text from users
not meeting certain criteria (i.e.: Security Level or Flags from Flag Set #1).
The following is a list of Special Control-A codes, and a brief description
of each code's usage:
Code		Description
-------------------------------------------------------------------------------
^A thru ^Z	Only display the following text to users with the corresponding
		flag A through Z turned on (from Flag Set #1).
 !		Toggle the text display off/on for users of less than level 10.
 @		"                                                         " 20.
 #		"                                                         " 30.
 $		"                                                         " 40.
 %		"                                                         " 50.
 ^		"                                                         " 60.
 &		"                                                         " 70.
 *		"                                                         " 80.
 (		"                                                         " 90.
 )		Restore the displaying of text to ALL users.
 "<filename>    Display contents of <filename> (from your TEXT directory) 
High Bit	(greater than ASCII 127) Used for cursor right positioning.
WWIV Format
Synchronet also supports Color Codes which are native to WWIV BBS software.
These codes consist of a Control-C followed by a number (0 through 7):
Code		Color
----		-----
 0		Normal
 1		High Intensity Cyan
 2		High Intensity Yellow
 3		Normal Magenta
 4		High Intensity White with Blue Background
 5		Normal Green
 6		High Intensity Blinking Red
 7		High Intensity Blue
 8		Low Intensity Blue
 9		Low Intensity Cyan
Celerity Format
Synchronet also supports Color Codes which are native to Celerity BBS software.
These codes consist of a pipe symbol '|' followed by a letter (case sensitive):
Code		Color (foreground)
----		------------------
 k		Normal Black
 b		Normal Blue
 g		Normal Green
 c		Normal Cyan
 r		Normal Red
 m		Normal Magenta
 y		Brown
 w		Normal White
 d		High Intensity Black
 B		High Intensity Blue
 G		High Intensity Green
 C		High Intensity Cyan
 R		High Intensity Red
 M		High Intensity Magenta
 Y		Yellow
 W		High Intensity White
 S	      * Swap foreground and background
Example: "|b|S|W" would set the current color to high intensity white on a
	 blue background.
Note:	 Due to conflicting escape sequences (namely, the pipe character),
	 Celerity color codes are not supported when using RIP terminal mode.
Renegade Format
Synchronet also supports Color Codes which are native to Renegade BBS software.
These codes consist of a pipe symbol '|' followed by a number (0-23):
Code		Color
----		-----
 0		Normal Black
 1		Normal Blue
 2		Normal Green
 3		Normal Cyan
 4		Normal Red
 5		Normal Magenta
 6		Brown
 7		Normal White
 8		High Intensity Black
 9		High Intensity Blue
 10		High Intensity Green
 11		High Intensity Cyan
 12		High Intensity Red
 13		High Intensity Magenta
 14		Yellow
 15		High Intensity White
 16		Background Black
 17		Background Blue
 18		Background Green
 19		Background Cyan
 20		Background Red
 21		Background Magenta
 22		Background Brown
 23		Background White
Example: "|15|17" would set the current color to high intensity white on a
	 blue background.
Note:	 Due to conflicting escape sequences (namely, the pipe character),
	 Renegade color codes are not supported when using RIP terminal mode.
PCBoard/Wildcat Format
Two of the Color Code formats which Synchronet supports (PCBoard and Wildcat)
use similar, yet cryptic, methods of displaying colors.  The PCBoard method
uses the format "@X<Background><Foreground>", and Wildcat uses the format
"@<Background><Foreground>@".  The following is a list of the Background and
Foreground choices available:
<Background>    Color   Attribute       <Foreground>    Color   Attribute
------------    -----   ---------       ------------    -----   ---------
      0         Black   Normal                0         Black   Normal
      1         Blue      "                   1         Blue      "
      2         Green     "                   2         Green     "
      3         Cyan      "                   3         Cyan      "
      4         Red       "                   4         Red       "
      5         Magenta   "                   5         Magenta   "
      6         Brown     "                   6         Brown     "
      7         White     "                   7         White     "
      8         Black   Blinks Foreground     8         Black   High Intensity
      9         Blue      "                   9         Blue      "
      A         Green     "                   A         Green     "
      B         Cyan      "                   B         Cyan      "
      C         Red       "                   C         Red       "
      D         Magenta   "                   D         Magenta   "
      E         Brown     "                   E         Yellow    "
      F         White     "                   F         White     "
Example: "@1F@" in Wildcat format and "@X1F" in PCBoard format would set the
	 current color to high intensity white on a blue background.
An automatic new user SIF questionnaire can be specified in SCFG->System.
If a newuser SIF is specified, all users who logon and don't have a copy of
the answered questionnaire data in their user file will be given the
questionnaire upon logon. The sysop can view the answered questionnaire from
User Edit with the '#' command. For convenience, the sysop can create a second
(abbreviated) SIF file for his own use in viewing user's answers. The two SIF
files (input and output) should be identical with the exception of what is
in the 'text' portion.
format:
<STX>text<ETX>mode[mod][l][r][x][.n]["str"]
element descriptions:
STX     is the ASCII code for start of text (ASCII 2 / Ctrl-B)
ETX     is the ASCII code for end of text   (ASCII 3 / Ctrl-C)
text    is any number of ASCII characters - Synchronet Ctrl-A codes supported
mode    text input mode desired for this field. Possible mode values are:
                c       single character
                s       string of characters
mod     optional mode modifier. Possible mode modifiers are:
                n       numeric characters only
                u       input converted to uppercase
                f       forced word capitalization ('s' mode only)
l       input line will be displayed (inverse bar of maximum input length)
r       a carriage return / line feed pair will be appended to this field
        in the data buffer. Only use this field if you want the data buffer
        or file to be more readable. All data is on one line otherwise.
x       maximum string length allowed (required for non-template 's' mode)
n       minimum string length allowed (only applicable with 's' input mode)
str  1: in 's' modes, a template string that defines what will be displayed
        at the prompt and what type of characters the user can input. All
        characters other than 'N', 'A' or '!' are printed at the prompt.
        Occurances of 'N', 'A' or '!' define which type of character the user
        can input for each character position. 'N' allows the user only to
        enter a numeric character, 'A' allows only alphabetic, and '!' allows
        any character. Popular templates are "NNN-NNN-NNNN" for phone number
        input or "NN/NN/NN" for date input.
     2: in 'c' modes, a string that defines which characters the user will
        be allowed to input (not case sensitive), usually used for multiple
        choice answers. Most common allowed characters are "ABCD..." or
        "1234...". If this string is specified in 'c' input mode, 'u' and 'n'
        have no effect and input will be converted to uppercase automatically.
                                   
Example 1:
| <BOT> Enter string: <EOT>sulr8.3 | 
Prints the prompt, "Enter string: ", then a line of 8 blue spaces (an input bar, if you like), would convert all of user's input to uppercase, allow the user to input a maximum of eight characters, a minimum of three and append a CRLF onto the end of the data field. Example 2:
| <BOT> A> First Answer B> Second Answer C> Third Answer Which: <EOT>c"ABC" | 
Prints "A> First Answer" "B> Second Answer" etc... then allows the user to input one character, either A,B, or C. No other characters will be accepted as input. Example 3:
| <BOT> Enter phone number: <EOT>s"NNN-NNN-NNNN" | 
Prints "Enter phone number: ", then allows the user to input only numbers in the 'N' character positions, and automatically skips over the '-' characters. See EXAMPLE.SIF in the SBBS\TEXT directory for more information.
The Synchronet Guru is an artificial intelligence engine that users can chat with for entertainment or educational purposes. You may wish to fool the users into believing the guru is a live human, or tell them up-front that it's just a program. You may have up to 500 different guru available to chat with on your BBS, each with its own "personality" and "intelligence". You add additional gurus in SCFG->Chat Options->Artificial Gurus. You can specify access requirements (see the ARS chapter for details) for each guru, allowing you to have specific gurus for different groups of users or allow users to choose which guru they want to chat with. The gurus of your BBS can be "taught" to respond to keywords and phrasing that your users use when chatting with him. The default guru's "brain" is a file named GURU.DAT that is kept in the CTRL directory. It is a special data file that contains logic expressions and lists of responses. Before you edit the GURU.DAT file, be sure you understand exactly what you are doing, as the neuro system that interprets the GURU.DAT file does not handle syntax errors very well. The basic structure of the GURU.DAT is as follows: (expression) response response (expression) response response () response response response You may include as many Expression/Response sets as you like, as long as the file size does not exceed 64k or the amount of available memory. Each expression contains one or more string of characters that The Guru may respond to and logic operators. The string must be in all uppercase and may not contain the following characters: ~^|&() If the expression just contains one string (e.g. (HELLO)) and that string is used in the users input, The Guru will pick a random response from the list that follows that expression. The Guru will only use one response for each line input by the user, so as soon as a "true" expression is encountered, a response is made and the evaluation of the user's line is complete. All expressions are evaluated from the top of the file down, so if a true expression is encountered toward the top of the file, all of the remaining expressions are ignored until the next evaluation. Notice that the last set of responses is preceded by a pair of empty parenthesis. This is an "always true" expression and should always be the last expression in the file. Omitting this fall-through expression is a syntax error. If all the previous expressions are evaluated as false, then a response will be picked from the set following the fall-through expression. The simplest form of an expression is just a string of uppercase letters (with or without spaces). If the string is followed by a tilde '~', the string will be evaluated as true even if the string is embedded in another string (e.g. if the user types "XhelloX", an expression of (HELLO) would evaluate as false, but an expression of (HELLO~) would evaluate as true). You can also specify that the string must be the beginning of the users input line by following the string with a caret '^'symbol (e.g. if the user types "I said, Hello!", an expression of (HELLO) would evaluate to true, but an expression of (HELLO^) would be false). An expression can contain multiple strings connected with logic symbols. The valid logic symbols are & (and) and | (or) (e.g. if you have the expression (HELLO&GURU) the user must type both "hello" and "guru" in the input line in order for the expression to be true. If you have the expression (HELLO|HI), it will be evaluated as true if the users includes either "hello" or "hi" in his input string). Nested evaluations are supported (e.g. the expression, (GURU&(HELLO|HI)) will evaluate as true if the user inputs either "guru" and "hello", or "guru" and "hi"). Expressions may also contain AR strings within square brackets ([ and ]). The expression (HELLO&GURU&[LEVEL 20]) would evaluate as TRUE only if the user typed the words "HELLO" and "GURU" and had a level of 20 or higher. See the ARS chapter for details on the AR string syntax and possible keywords. RESPONSES: Each expression can be followed by up to 100 responses and each response can be up to 512 bytes long. Responses can not contain the characters ( or ) and may only span several lines if the last character of each continued line is a back-slash '\'. Responses are picked at random from the group below the first expression that is evaluated as true. The more responses you have to each expression, the less likely The Guru is to repeat himself. The Guru can also respond with information about the current user or perform an action. To initiate these special responses, you must precede a valid response variable with a back-quote (`) character. The valid response variables and their definitions are as follows: A User's alias (name, if Aliases not allowed) B User's birth date C User's computer type D User's download bytes G Guru's name H Hang up on the user (immediately) I System's QWK ID J Current day of the month L User's security level M Current month N User's note (location, if Aliases not allowed) O Sysop's name P User's phone number Q Quit chat R User's real name (address, if Aliases not allowed) S System name T Current time U User's upload bytes W Current day of the week Y Current year Z User's zip/postal code $ User's credits # User's age ! Toggle The Guru's typing mistakes Off/On _ Pause in response Three of the above response variables only have effect when the user is chatting with The Guru in the "Local" mode and not from multinode chat. These are the 'Q'uit chat (which is the only means of the exiting without hitting Alt-G locally), '!' Toggle typing mistakes, and '_' pause in response. e.g. The expression/response pair: (HELLO) Hello there, `a... would display "Hello there, Joey..." if Joey were to say "hello" to The Guru. See CTRL\GURU.DAT for more detailed examples of GURU.DAT programming.
Copyright © 2000 by  Rob Swindell
Synchronet BBS Software    (Synchronet)
Version 3 is comprised of several documentation,
library, executable, and source code 
files, all of which are covered by the
GNU General Public License  with the exception of the following portions
covered by
the GNU Lesser General Public License:
SMBLIB and XSDK.
Synchronet Version 2 (for DOS and OS/2) and its source code was released to the
Public Domain  by Digital Dynamics 
in 1997 and remains Public Domain software today.
Synchronet Version 3 is not Public Domain software.
Rob Swindell
PO Box 501
Yorba Linda, CA 92885
http://www.synchro.net
For the complete Copyright Information please read the Copyright Documentation .