home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-03-16 | 102.8 KB | 2,451 lines |
-
- ╔══╗╔══╗╔═════╗╔═════╗╔════╗ ╓──╖ ╓──╖ ╓────╖
- ║ ║║ ║║ ┌┐ ║║ ┌┐ ║║ ║ ║ ║ ║ ║ ║ ┌┐ ║
- ║ ╚╝ ║║ └┘ ║║ └┘ ║║ ╔═╝ ╙╖ ║ ╙╖ ║ ║ └┘ ║
- ╚╗ ╔╝║ ╔╝║ ╔╝║ ╚═╗ ║ ║ ║ ║ ╙╖ ╓╜
- ╔╝ ╚╗║ ┌┐ ╚╗║ ┌┐ ╚╗╚═╗ ║ ║ ║ ║ ║ ╓─╜ ╙─╖
- ║ ╔╗ ║║ ││ ║║ ││ ║╔═╝ ║ ║ ║ ║ ║ ║ ┌──┐ ║
- ║ ║║ ║║ └┘ ║║ └┘ ║║ ║ ╓╜ ╙╖╓╖╓╜ ╙╖║ └──┘ ║
- ╚══╝╚══╝╚═════╝╚═════╝╚════╝ ╙───╜╙╜╙───╜╙──────╜
-
- "For he knew no words in the language of the Damned..."
-
- --Text Files, the driving force behind XBBS:
-
- XBBS is controlled entirely by text files. There are no "menus" like
- QuickBBS sysops are used to using. You write a text file (with your
- favorite ASCII text editor or word-processor in ASCII or non-document
- mode) containing embedded text commands, and these commands tell XBBS to
- do certain things. You are, in effect, writing a program in which any
- non-command is printed. This results in free-flowing "menus" with
- almost total control in your hands.
-
- XBBS's embedded text commands are _always_ preceded by a Control-A,
- sometimes written as ^A or ^a or CTRL-A. This is ASCII 1, and is
- represented on most clones as an open smiley-face. BASIC programmers
- know it as CHR$(1), C programmers know it as '\x1', and I don't know
- what the heck Pascal programmers call it. Most text editors will insert
- one if you hold down the ALT key and type '001' on the numeric keypad.
- In the following discussion of embedded text commands, we'll replace the
- ^A character with the @ sign just to make things easier to look at.
-
- Since ^A is the only ASCII character that XBBS considers "proprietary,"
- you may use the rest of the ASCII/High ASCII character set as you would
- normally. The ASCII and any ANSI character strings will have much the
- same effect that they would in a text file or in a screen display: ASCII
- character #8 is a backspace, and ANSI cursor sequences will cause the
- cursor to move to wherever you tell it to, change colors, and so forth
- (as in ANSI animation).
-
- The character that immediately follows the ^A determines what the command
- is. This following character is Case Sensitive (when it's an alphabetic
- character). After this character there may be additional characters
- which give more information to XBBS. Hopefully, someday there will be a
- "precompiler" to make writing XBBS menus a little easier (hint, hint).
-
- Remember, text files ending with .XBS are assumed to be in the Menu
- directory unless you include a path in the name you call (i.e. there's a
- backslash or colon in there somewhere). If the user has ANSI graphics
- enabled, XBBS will try to find a file ending with .GBS first, and go
- with it if found, although it's fairly simple to mix ANSI and ASCII in
- the same .XBS file.
-
- XBBS has several replaceable arguments (metastrings) you can use in
- the arguments to many calls. Metastrings are prefaced by * (i.e. *B
- translates to baudrate):
-
- *A Arq (Reliable Conn) *B Baudrate *C Credit
- *D D/L Path\ *E Menu path *F First Name Handle
- *G Graphics *H Errorlevel as hex *I Data from ^aINFO:
- kludge line
- *L Last Name Handle *M(0-9) Current Msg. Data: Fm/To/Subj/Date
- /Orig/Dest/Times/Cost/Attr/XBBS_Attr
- *N Real Name *O<args> (see @O) *P Commport
- *Q Unique user id (as a filename) *R User number
- *S Special Flag *T Time Remaining *U U/L Path\
- *V# User string vars *Z Zone:Net/Node *a Age
- *c Associated File *d D/L Path *e Errorlevel
- *f Flag2 word *g Last u/d filestring *h BBS Home path
- *k Key message *l Screen Length *m Message Area #
- *n Node ID # *o Total system calls *p Commport+1
- *r Last caller's handle *s# Security *t Time Left-2
- *u U/L Path *v# User numeric vars *w Screen Width
- *z Alt Zone:Net/Node *0...*9 Variables *! City
- *@ State *: Current msg path *% Date/Time string
- *& Message area attr *$ Fileboard name ** Message area name
- *^ Fidonet-style date *( User's last calldate *) User's last calltime
- *#<#> User's phone #'s *| CR/LF *~ CR
- *{variable name} Named variable *` Just an asterick
- *+number+ ANSI color; see table at @G (+ 256 to clear screen)
-
-
- Notes: In *s#, # determines which security level is used. For
- instance, *s0 would use security level 0, *s9 would use
- security level 9, etc. Same sort of setup for phone #'s (*#)
- and message header fields (*M#). *O should be the last thing
- on a line, as nothing more will be translated after one is
- encountered. It's more for getting the strings into a
- variable with @#= than for passing arguments to programs. *{
- will skip over an intervening space used as a delimiter
- ("*{THISVAR *F *L" (note 2 spaces) would produce "Hi Joe
- Blow" (note single space) if THISVAR contained "Hi" and
- username was "Joe Blow"). However, "*{THISVAR*s" will produce
- the expected results (* being a non-alphanumeric character
- will 'terminate' the variable name). *{THISVAR} will also
- behave as might be expected (the closing curly brace can be
- used in place of an extra space).
-
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
- "The ice cream lady wet her drawers to see you in the Passion Play."
-
- --XBBS Embedded Text File Commands:
-
- Following is a brief listing of the XBBS commands, together with
- brief samples. This stuff is technical. For more in-depth coverage,
- see the sample "menus" in the distribution archive. Also see the
- section after this, "Basic Menu Making". Remember, @ == ^A unless
- specifically referred to as "the commercial 'at' sign".
-
-
- A...Add string to logfile. Metastrings are translated.
-
- @AUser entered File Area #1
-
-
- B...Break connection (hang up) Flushes FOSSIL send buffer first
-
- @B
-
-
- C...Check message board statistics
-
- @C0
- Output format: Area #<#>: Board Name * # messages New messages
- (see XBBS.TXT prompt #27)
-
- @C1lLabel
- Outputs as @C0, branches to lLabel if there are new messages
-
- @C2lLabel
- No output, just the branch
-
-
- D...Set label to seek to on abort
-
- @DlLabelname
- Useful for ensuring that an input is not skipped even though
- prefacing text output may be.
- Example:
- Skip to lSkipHere and restart if file is aborted with "S"
- @DlSkipHere
-
-
- E...External command
-
- There are a variety of ways to run external programs.
- Metastrings are translated here.
-
- S...Spawn
- @ESProgram.EXE arg1 arg2 etc.
- (XBBS stays in memory, very fast, but you cannot run a
- batch file or intrinsic DOS command with this...see D
- or use @ESCOMMAND.COM /c Program.EXE etc.)
-
- E...Exec
- @EEProgram.EXE arg1 arg2 etc.
- (Removes XBBS from memory, very fast)
-
- D...DOS (through COMMAND.COM (COMSPEC))
- @EDDothis.BAT arg1 arg2 etc.
- (Runs batch files or executes DOS commands and
- keeps XBBS in memory, not quite as fast as spawn)
-
- X...Exit with ERRORLEVEL
- @EX25
- (Would exit to calling batch file with ERRORLEVEL 25)
-
- B...Write a batch file and exit with ERRORLEVEL
- @EB25 arg1 arg2 etc.
- (arg1 arg2 etc. would be written to XBBS.BAT and then
- XBBS would exit to calling batch file with ERRORLEVEL 25)
-
- W...Write a string to a file (doesn't exit, but does replace
- parameters in the string before writing)
- @EWXBBS.LOG arg1 arg2 etc.
- (arg1 arg2 etc. would be written to XBBS.LOG)
-
- w...Write a string to a file, no *replacement.
-
- I...Spawn with Swap. Forces swapping if swapping is not enabled
- in Config.BBS. Remember that the executable's extension
- *must* always be included when swapping. If you have XBBS
- set to swap normally, this command is reversed and will
- _not_ swap.
- @EIProgram.EXE arg1 arg2 etc.
-
- O...Spawn with FOSSIL hot.
- @EOProgram.EXE arg1 arg2 etc.
-
- s...Same as Spawn above, but updates CONFIG.BBS and ONLINE.XBS
- before exit and rereads upon return. *You only need to use
- this if a Door author tells you that you should.*
-
- d...Same as DOS above, but updates CONFIG.BBS and ONLINE.XBS
- before exit and rereads upon return. *You only need to use
- this if a Door author tells you that you should.*
-
-
-
- F...Set up file area
-
- @FArea Name,Drive:\DownloadPath\,Drive:\UploadPath\,Flags,Leech%
- The Area Name should not contain commas, which are used as the
- delimiter. Area names are limited to 48 characters, paths to
- 80 characters. Leech% determines what u/d percentage, if any,
- is required to be maintained in order to download from the
- area. For instance, 10 would mean a 10% u/d ratio would have
- to be met before allowing download. 0 disables. It's
- calculated like this: if Leech% < downloadK/uploadK disallow
- download. Therefore, if Leech% is 9 and the user has uploaded
- 10K and downloaded 100K, his ratio is 10 (100/10) and he can't
- download (9 is less than 10). If he's uploaded 20K and
- downloaded 100K, he can (100/20=5). Actually, what happens is
- this: first, no check is made at all if the user's
- ignoreratio bit is set or the number of files specified in the
- configuration haven't been downloaded yet. Then the u/dK
- ratio is calculated. Then the #uploads/#downloads ratio is
- calculated. If both fail, the download is disallowed. Clear
- as mud?
-
- Flags can have the following values or combination thereof:
-
- 1......Track number of downloads by timestamp
- 2......Free file area
- 4......Is Associated with message area
- See notes at @M.
-
- There is no built-in limit on the number of file areas you may
- have.
-
-
- G...Graphic Menu
-
- @GG<prompt,option 1,option 2,option3,...,option n>EOL
- or
- @GG@<varnum>EOL
-
- Performs special ANSI-only top-line input. Returns selected
- option number in errorlevel. 0 indicates an abort (by ESCape
- or CTRL-K).
-
- Example:
-
- @GGRead msgs,Write msgs,Quit to Main
-
- @GA<prompt,option 1,option 2,option3,...,option n>EOL
- or
- @GA@<varnum>EOL
- Performs rolling or top-line menu depending on user's
- settings.
-
- @GS<number>
- Set color for above to <number>
-
- @G<var#><color><truncate><prompt_1 prompt_2 ... prompt_33) Sets
- up a point-and-press menu for ANSI users. Variable # is
- 0-9...the selection will be returned in this variable for
- examination. Color is an Avatar/IBM-PC style number...the
- current selection is highlighted with highvideo, others are
- lowvideo. Truncate is 0 if you want the entire prompt
- (uppercased, with spaces instead of underlines) returned on
- selection, ORed with 1 if you want only the first letter of
- each prompt. Prompts are strings with underlines instead of
- spaces (true spaces are delimiters). XBBS replaces the
- underlines with spaces when displaying the line. Users select
- input with the arrow keys and [Enter]. For convenience's
- sake, non-ANSI users will get a menu of sorts if they run
- through this command, and ANSI users who have the ANSI cursor
- menus bit off will get one with a little color, but no cursor
- movement. If you set the truncate parameter, the ANSI cursor
- users can select an option by its first letter (so make them
- unique). This is not really meant as something to write the
- whole BBS with, it's just a little flash. You can change up
- the way this command returns values by ORing <truncate> with
- 4, which will cause values to be returned as the number of the
- entered option's position. You can OR <truncate> with 2 to
- force the no-graphic style of input.
-
- The color number is the same as attributes used by IBM PCs:
-
- bit value: (128)(64)(32)(16)(8) (4) (2) (1)
- --- -- -- -- - - - -
- bit: 7 6 5 4 3 2 1 0
- - - - - - - - -
- | | | | | |
- | | | | | |
- | +---+---+ | +---+---+
- | | | |
- | | | text color
- | | |
- | | bright text
- | |
- | background color
- |
- blink
-
- Three bits can contain the numbers 0 to 7. Here are what
- those values mean:
-
- 0 black
- 1 blue
- 2 green
- 3 cyan
- 4 red
- 5 magenta
- 6 brown
- 7 gray (i.e. non-intense white)
-
- As an example, 7 sets the current text attribute to light
- grey text on a black background, and 15 sets the current
- text attribute to white text on a black background.
-
-
- H...Set up hot keys
-
- @HlLableName <hotkeylist>
- There can be up to 36 hotkeys entered (i.e. ABCDEF123)
- XBBS will check for a hotkey between each line printed and
- branch to lLablename if one is encountered. This should be the
- first statement in a menu. Input or finding a key clears the
- hotkey "register". The hotkey hit will be entered into the
- first XBBS variable (variable #0) for testing at lLablename.
-
-
- I...Scan Nodelist
-
- @I<partial or complete address>
-
- If the address is zone:0, all hosts (0-nodes) in the net will be
- listed. If the address is zone:net, all nodes in the net will be
- listed. More than that and only one node gets listed. All this
- assumes the nodes are there to be found and listed, of course...
-
-
- J...Gosub to another file
-
- @JFilename.ext
- If the filename ends in .XBS and is in the menu area (i.e.
- there is no path given), this gives no warning if the file is
- not found. You can use this to your advantage by having
- external processes write a menu dynamically which XBBS will
- interpret when it hits this command _if_ the menu exists. For
- a hairbrained example, suppose you got input from the user
- that requested that a file be extracted from an archive. You
- then exitted to a batch file which would try to extract the
- file. If the extract was successful, the batch file could
- then dynamically build (or copy in) an XBBS download menu with
- a certain name. On return from the batch file, XBBS would
- attempt to gosub (@J) to that menu to allow the download. If
- there was a problem with the extraction, the menu would not
- exist and the gosub would not be performed. If Filename.ext
- is a digit (i.e. @J0), the contents of the appropriate
- variable will be used as the filename.
-
-
- K...Upload/Download commands
-
- @Ku (Upload a file to the current file area's upload dir)
-
- @KV<filename.ext> (Upload named file to the current file area's
- upload dir. If filename begins with @
- (commercial at sign, not ^a) it is assumed to
- be a file containing a list of files to be
- uploaded. How you write the list file is up
- to you.)
-
- @Kv<#>,[key] (Upload file named in variable # to the current
- file area's upload dir. List files apply. If
- [key] follows, it will be used to find the
- protocol with the matching key-to-select (i.e. Z
- would find ZModem's protocol entry if ZModem was
- normally selected by the user via the Z key))
-
- @Kd (Download a file from the current file area's download dir
- Any file in the directory, whether listed in FILES.BBS or
- not, can be downloaded if the user enters the proper name.
- You could, for instance, put all your downloads in one
- directory and read different FILES.BBS-style files to make
- it appear to be multiple areas, and this would allow
- downloading of any file in any area from a single download
- prompt.)
-
- @KD<NULL or drive:path/filename.ext>,<seclvl>,<flsearch.ctl>
- (DL a specific file OR DL a file from a scan of areas
- Generally speaking, give NULL for a filename to get XBBS
- to prompt the user for a filename. Give the name of a
- FLSEARCH.CTL-style file if you want XBBS to scan
- directories for a match. seclvl is used to determine if
- a user has access to a given directory. seclvl is 0-9
- to indicate one of XBBS's security levels to use for
- the comparison. List files apply here, but don't try to
- use a list with the FLSEARCH option; it won't work.)
-
- @Kk#,<seclvl>,<flsearch.ctl>,[key] (D/L a specific file named
- in variable #...same notes. [key] works as with @Kv
- above. The leech% figure you pass with @F will *not*
- affect this command; check with @Lk and @L# if desired.
-
- @KU# (Add u/l credits for file named in variable # (wildcards
- accepted, list file applies))
-
- @KK# (Set download credits for file named in variable #
- (wildcards accepted, list files apply))
-
- @Ka# (Set upload K today to saved errorlevel #)
-
- @KA# (Set download K today to saved errorlevel #)
-
- @Kl#<Filename.EXT> (Print a list of file areas to which the user
- has access from a FLSEARCH.CTL-type file. #
- is the user's security level # (0-9) to use
- for the access test.)
-
- @Kn#<Filename.EXT> (Find the next file area to which the user
- has access from a FLSEARCH.CTL-type file. If
- wraparound occurs (after EOF), the internal
- ERRORLEVEL is set. # is the user's security
- level # (0-9) to use for the access test.)
-
- @KN#<Filename.EXT> (Reset the FLSEARCH.TXT file to the start of
- file for @Kn calls as described above. The
- arguments are dummies.)
-
- @Km<Filename.EXT> (Hah, hid one from you. Like @Kn# for
- message areas, except you don't need the
- security level # (XBBS uses seclvl #0 for
- msgs).)
-
- @KM<Filename.EXT> (Like @KN# except it's for message areas.)
-
-
- Note: FLSEARCH.CTL-type files have the following format (one
- entry per line):
-
- D:\PATH\ SECLVL# Name_of_area <flags> <D:\upload_path\> <Description>,<age>,<userflags>
-
- For example: C:\XBBS\ 9 XBBS_Programs 3 C:\XBBS\UPLOADS\
- Note that a "true" FLSEARCH.CTL-type file does not contain the
- <flags> parameter or an upload path, but it should be ignored
- by well-behaved programs that do not use it. XBBS won't choke
- if you don't include the extra parameters (the ones between
- the <>), except that @Kl won't list areas properly without
- them. Note that parameters after <Description> are separated
- by commas instead of a space.
-
-
- L...Branch on user parameters
-
- @LMlLabel (Branch if user's ARQ flag set)
- @LTlLabel (Branch if user's Twit flag set)
- @LGlLabel (Branch if user has ANSI Graphics on)
- @LNlLabel (Branch if user's NoKill flag set)
- @LSlLabel (Branch if Special flag is set)
- @LElLabel (Branch if Expert flag is set)
- @LHlLabel (Branch if Ignore Hours flag is set)
- @LDlLabel (Branch if Deleted flag is set)
- @LRlLabel (Branch if Ignore Ratio flag is set)
- @LglLabel (Branch if Full Screen Editor flag is set)
- @LslLabel (Branch if Screen Clear flag is set)
- @LAlLabel (Branch if ANSI cursor menus are on)
- @LnUser Name,lLabel (Branch if user's name=User Name)
- @LhHandle,lLabel (Branch if user's handle=Handle)
- @LC<arg><type>,lLabel
- Branch on user's computer type
- If arg is !, branch if not equal
- If arg is =, branch if equal
- @Lk<arg><ratio>,lLabel
- Branch on user's u/d kilobyte ratio (the percentage of
- kilobytes uploaded to kilobytes downloaded)
- If arg is <, branch if less than ratio%
- If arg is >, branch if greater than ratio%
- Takes into account the starting # of downloads set in
- Config.BBS
- Ratio is a whole number representing a percentage (i.e.
- 10=10%)
- See sample menus for more info.
- @L#<arg><ratio>,lLabel
- Branch on user's u/d number ratio
- If arg is <, branch if less than ratio%
- If arg is >, branch if greater than ratio%
- Same notes as above for @Lk
- @Lb<arg><baud>,lLabel
- Branch on user's baudrate
- If arg is <, branch if baud is less than user's baudrate
- If arg is >, branch if baud is greater than user's baudrate
- @Lv<arg><#violations>,lLabel
- Branch on number of user violations
- Arg can be < or >
- @Lw<arg><#cols>,lLabel
- Branch on user's screen width
- Arg can be < or >
- @Ll<arg><#lines>,lLabel
- Branch on user's screen length
- Arg can be < or >
- @La<arg><age>,lLabel
- Branch on user's age
- Arg can be < or >
- @Lu<arg><#>,lLabel
- Branch on user's upload kilobytes for the day
- Arg can be < or >
- @Ld<arg><#>,lLabel
- Branch on user's download kilobytes for the day
- Arg can be < or >
- @LF<arg>,lLabel
- Arg is 1 to 16, one of the sysop-defined user flags
- @Lf<arg>,lLabel
- Arg is 1 to 3, one of the general flags
-
- Note: for some of these commands it is much easier to use more
- specific commands like @ESC to skip a line if the user doesn't
- have graphics on. The @ESC line could contain a branch
- (@blLabel) command, thereby giving you a branch-if-graphics-on.
-
-
-
- M...Set up message area
-
- @MArea Name,Attribute,Maximum,Number,SubStat0,SubStat1,ForceTo,MinimumWriteAccess
-
- Area Name should not contain commas, which are used as
- delimiters. Maximum refers to the maximum number of messages
- you want to allow in the area; overwrite will occur when the
- area is full. Number is the number associated with the area,
- and should normally be unique for each area. SubStat0 and
- SubStat1 refer to the security levels #0 and 1 required for
- XBBS to consider a user a subop in a given area. ForceTo is
- the name of the user you want to Force an entered message to
- be addressed to. MinimumWriteAccess is the minimum access the
- user must have in security level #0 to post.
-
- Attribute can be one or more of the following (add the values
- together to get multiple attributes):
-
- 1 No Origin or tear in this echomail conference
- Use this with care, as almost all echomail conferences
- today require a tear line and an origin line.
- 2 ANSI Graphics
- 4 Private
- 8 Public
- 16 Echo
- 32 Net
- 64 MCI
- MCI is a way for users to enter some of the more
- harmless special print routines that you have available
- as SysOp in the text files.
- MCI Commands:
- ^H# (print # backspaces)
- ^U# (print name...#=0=full name, #=1=first, #=2=last)
- ^B (print a bell)
- ^T (print the current time)
- ^D (print the current date)
- ^R (print user's remaining time in minutes)
- ^S (slow-print this line)
- ^A# (change screen colors and attributes for ANSI users.
- Possible values for #, and results:
- 0...restore normal attributes (bright green on black)
- 1...bright
- 2...dim
- 3...flash on
- 4...reverse on
- 5...red
- 6...green
- 7...yellow
- 8...blue
- 9...magenta
- A...cyan
- )
- 128 ReadOnly
- 256 Alternate Net Area
- 512 Alternate Echo Area
- 1024 Anonymous
- 2048 Real Names
- 4096 Is Associated with file area
- If both the current message area and the current file
- area have the Associated flag set, when a user uploads a
- file, the user is given the opportunity to post a
- descriptive message as well as give the description for
- FILES.BBS. This message a ^AASSOC: FileName.EXT kludge
- line prepended to it. When this message is read later,
- an extra [V]iew option pops up at end-of-message. If
- selected, this begins reading VIEWFILE.XBS. This can
- call Peeker, allow a download, or whatever else you can
- think of. See sample menu XBBS.XBS for an idea of how
- to implement this.
- 8192 Gives Extern prompt
- As with the Associated flag, this causes a new prompt to
- pop up at end-of-message: [E]xtra. This will read
- EXTRAMSG.XBS with KeyMess set to the message's number.
- You could then use XPort to get the message as an ASCII
- file and easily write a simple program to extract
- information from it. Possible uses might be to provide
- more information about the user who posted the message
- or the node that an echomail message originated from.
- 16384 Causes message to be forced to force-to name even in
- Bulls-mode. Use with care; may make it impossible to
- reply to a user's message without addressing it to
- yourself.
- 32768 Messages in this area may be compressed using the LZSS
- compression method. Messages must also meet or exceed
- the length specified in CONFIG.BBS (wouldn't do much
- good to compress a 12 byte message). Message
- compression takes up a lot of memory, so you might not
- want to activate it if you're operating under RAM-tight
- circumstances like multi-tasking. How XBBS compresses
- messages: First, the length of the original message is
- stored as an ASCII number. This is followed by a
- carriage return. Then, the relevant portion of any
- MSGID string is stored, followed by another CR.
- Finally, the relevant portion of any REPLYID and a final
- CR. CR's are always present even if MSGID and REPLYID
- fields weren't available. Following all this is the
- compressed message. This allows XBBS to thread using
- MSGID/REPLY without having to uncompress the messages
- first.
-
-
- Area names are limited to 48 characters. Note that you can
- multiply identify the same area, if you can think of a reason
- to do so, and treat the area differently at different times
- (private, public, etc.)
- Note that XBBS can have up to 4095 message areas (1-4095).
-
-
- N...Loop read through all message areas
-
- @N<msgareas.xbs-style file>,<type of read>,<newonly>,<abortok>,<startat>
- @NMSGAREAS.001,2,1,1,1 (Type 2 read through eligible areas
- listed in MSGAREAS.001, stop for
- new only, allow aborting, start at
- area #1)
-
-
- O...Set system variables
-
- Examples: @O1,Joe Blow
- @1AJane Smith
- @O2,@1
-
- 0: Message header subject
- 1: Message header to
- 2: Message header from
- 3: Message header date
- 4: Message header Fidonet attribute
- 5: Message header XBBS extended attribute
- 6: Message header times-read
- 7: Message header cost
- 8: Message header origin node
- 9: Message header origin net
- 10: Message header origin zone
- 11: Message header origin point
- 12: Message header destination node
- 13: Message header destination net
- 14: Message header destination zone
- 15: Message header destination point
- 16: Message header date (YY/MM/DD, YY=year-1989)
- 17: Config system name
- 18: Config sysop name
- 19: Config logfile name
- 20: Config commport
- 21: Config node
- 22: Config net
- 23: Config zone
- 24: Config alternate node
- 25: Config alternate net
- 26: Config alternate zone
- 27: Config BBS directory
- 28: Config menu directory
- 29: Config message directory
- 30: Config idleseconds
- 31: Config number of pages allowed
- 32: Config sysop in
- 33: Config touchup filedates
- 34: Config return upload time
- 35: Config return download time
- 36: Config use direct video
- 37: Config use bios video
- 38: Config use bios writes for ANSI
- 39: Config debug mode
- 40: Config ANSI available?
- 41: Config status line #
- 42: Config say prompts #'s?
- 43: Config fullscreen editor string
- 44: Config line editor string
- 45: Config local editor string
- 46: Config minimum baud for ANSI
- 47: Config quote string
- 48: Config number of system calls
- 49: Config last caller's name
- 50: Config netmail board
- 51: Config alternate netmail board
- 52: Config default origin line
- 53: Config number of carbons
- 54: Config jumpfiles (requires 3 args, second is jumpfile #,
- third is jumpfile string, i.e. @O54,1,THATFILE.XBS)
- 55: Config jumpkeys (requires 3 args, second is jumpfile #,
- third is jumpfile key (first char of string))
- 56: Config subfiles (requires 3 args, second is subfile #,
- third is subfile string)
- 57: Config subkeys (requires 3 args, second is subfile #,
- third is subfile key (first char of string))
- 58: Config number of LMRs
- 59: Config current position in indexed quote file
- 60: Config name of indexed quote file
- 61: Config number of downloads at which to start enforcing
- 62: Config number of computer types to track
- 63: Config ANSI Graphics editor string
- 64: Config number of comment lines for uploads
- 65: Config maximum purgebaud
- 66: Config generic phone input?
- 67: Config generic state/zip field?
- 68: Config use Share file locking?
- 69: Config use fast ANSI output?
- 70: Config log menu changes?
- 71: Config log file listings?
- 72: Config log areas when messages read?
- 73: Config log text files when read?
- 74: Config nodelist directory
- 75: Config last user's record number
- 76: Config letter of swapdisk
- 77: Config use LIMEMS for swap?
- 78: Config swap?
- 79: User's name
- 80: User's handle
- 81: User's birthdate (4 args required, 2=month, 3=day, 4=year
- i.e. @O81,12,23,1955)
- 82: User's password
- 83: User's city
- 84: User's state
- 85: User's zipcode
- 86: User's phone number1
- 87: User's phone number2
- 88: User's screen length
- 89: User cold input?
- 90: User's screen width
- 91: User ANSI?
- 92: User fullscreen editor default?
- 93: User screen clearing?
- 94: User special flag
- 95: User expert flag
- 96: User more flag
- 97: User ignore hours flag
- 98: User ignore ratio flag
- 99: User nokill flag
- 100: User deleted flag
- 101: User arq flag
- 102: User twit flag
- 103: User ansimenu flag
- 104: User gen1 flag
- 105: User gen2 flag
- 106: User gen3 flag
- 107: User attribute2 flags (unsigned integer)
- 108: User security levels (3 args, 2=stat# to set, 3=level)
- 109: User upload K
- 110: User download K
- 111: User upload #
- 112: User download #
- 113: User # posts
- 114: User credit
- 115: User violations
- 116: User lastdate (4 args required, 2=month, 3=day, 4=year)
- Example: @O116,01,01,1980
- 117: User logondate (4 args required, 2=month, 3=day, 4=year)
- 118: User lasttime (4 args required, 2=hour, 3=min, 4=sec)
- 119: User logontime (4 args required, 2=hour, 3=min, 4=sec)
- 120: User total calls
- 121: User calls per day
- 122: User time per call
- 123: User total time per day
- 124: User calls today
- 125: User time today
- 126: User computer type
- 127: User upload K today
- 128: User download K today
- 129: User string variable (3 args req'd, 2=var #, 3=var string)
- 130: User numeric variable (3 args req'd, 2=var #, 3=var)
- 131: Message area name
- 132: Message area force-to name
- 133: Message area attribute
- 134: Message area maximum
- 135: Message area number
- 136: Message area security 0
- 137: Message area security 1
- 138: File area name
- 139: File area flags
- 140: File area download directory
- 141: File area upload directory
- 142: User number
- 143: Baud
- 144: Pages
- 145: Age
- 146: Timer off/on
- 147: XBBS variables (3 args req'd, 2=var #, 3=var string)
- 148: XBBS events (4 args req'd, 2=event #, 3=filename, 4=secsleft)
- 149: Lastread (3 args req'd, 2=area, 3=msg #)
- 171: Current message directory
- 172-223: same as 79-130 for other user structure (see FINDAUSER
- and UPDATE)
- 235: same as 142 for other user number
- 236: RESERVED
- 237: Configuration Domain
- 238: Alternate Domain
- 239: Next msg's "To" Domain
- 240: Number of current node (for multitaskers)
- 241: User's unique id #
- 242: Nodenumber user initially logged onto
- 243: Other user's unique id #
- 244: Nodenumber other user initially logged onto
- 245: Next unique user id to be assigned
- 246: 1 if RBBS-style DORINFO?.DEF is made, else 0
- 247: Can user take high-ASCII characters? (1=yes)
- 248: Can shadow user take high-ASCII?
- 253: Last INFO: encountered while reading msgs
- Also used to make INFO: when writing a msg
- 254: Last ASSOC: encountered while reading msgs
- Also used to make ASSOC: when writing a msg
- 255: Last msg area user was in last call
- 256: Last msg area for shadow user
- 257: User's point id#
- 258: Shadow user's point id#
-
- UTSL
-
-
- P...Pause # seconds
-
- @P2 (Pause 2 seconds)
-
-
- Q...Query user's list
-
- @Q0 (List handles)
- @Q1 (List real names)
- @Q4 (List user in msg.from field) *
- @Q8 (List user in msg.to field) *
-
- *Be sure something valid is in the msg fields (i.e. a message
- has been read). Messages not locally entered will cause an
- abort; the user isn't on your system. Handles or Real Names
- are searched according to the message board attribute.
-
-
- R...Restart file at a label
-
- @RlLabelname
-
- If you're branching backwards (to a point above where the branch
- occurs), this is faster and more reliable than @blLabel.
-
-
- S...Security level branching
-
- @S<06 lLabelname (Branch to @lLabelname if seclvl #0 < 6)
- @S>399 lLabelname (Branch to @lLabelname if seclvl #3 > 99)
-
-
- T...Slow printing.
-
- @T5 Hi there.
- @T@3 (uses contents of variable 3 as a number)
- @Te2 (uses saved errorlevel 2)
-
- Delays printing of each letter by the number of clock ticks (apx.
- 18.2/sec) specified. You have to manually turn it off with @T0.
- If you have text behind the @T#, you must follow it with a space
- which XBBS uses to find the end of the following number. See sample
- menu NEWUSER.XBS.
-
-
- U...Update user's record in USERS.BBS
-
- @U0 (Updates user record)
- @U1 (Reloads LMRs)
- @U2 (Saves LMRs)
-
- There's normally no reason to use this command.
-
-
- V...Variables. Named variables (see *{ and @e=$<variable name>)
-
- Assignment:
- @VA<variable name>=<string>
- @Va<variable name>=<converted string>
- Delete variable:
- @VD<variable name>
- Free (remove) all variables:
- @VF
- Print variable:
- @VP (Unconverted)
- @Vp (converted)
- Save variables:*
- @Vk<filename>
- Load variables:*
- @VK<filename>
-
-
- Notes: Named variables must use only alpha and/or numeric
- characters.
- Internal errorlevel is set accordingly:
- NOERR 0 's cool, m'man
- NOVARS 1 No variables
- NOTVAR 2 Name given isn't a variable
- NOMEM 3 Out of memory
- NOFILE 4 Can't read, write or open a file
- SYNTAX 5 Syntax error
- IDIOT 65535
-
- * Saves and retrieves ALL variables: named, 0-9 and stored
- errorlevels. 0-9 and stored errorlevels are overwritten when
- loaded, as are existing named variables. Nonexistent named
- variables are created. .VAR extension added to <filename>.
- <filename>.VAR is deleted before saving if it exists. You'll
- probably want to kill *.VAR during your recycle batch. This can
- be used as a method to quickly preload variables, or to store
- them before a restart.
-
-
-
- W...Mark Where you are or return to a marked spot
-
- @W<0=Return, 1=Mark><Mark ID, 0-9>
-
- See sample menu CONFIGUR.GBS for example usage. This is an
- extremely fast way to do branching.
-
-
- X...Write Exit files
-
- @X0 (Writes USERINFO.XBS, DORINFO1.DEF, LASTUSER.BBS and
- DOOR.SYS using Real Name in name field)
- @X9600 (Does the same, but uses 9600 as baud rate in exit files
- unless local, for high-speed modem usage with Doors
- that can't accept unsigned integers as baud rates or
- whatever other use you can think of.)
- @X0 1 (Does the same as first example, but uses Handle in name
- field)
-
-
- Y...Cancel Embedded Commands for file being read
-
- @Y
-
-
- Z...Set file to read next or top file or reset nextfile pointer
-
- @Z0 (Unset nextfile pointer)
- @Z1Filename.ext (Set nextfile pointer to Filename.ext)
- @Z2Filename.ext (Set topfile pointer to Filename.ext)
-
-
- a...Turn file aborting on/off
-
- @a0 (Turn aborting on)
- @a1 (Turn aborting off)
-
-
- b...Branch down to a label in current file
-
- @blLabelname (Branch down to @lLabelname)
- This can be useful to form the "ELSE" in an IF...THEN...ELSE
- type of menu paragraph. It can also be used to skip a block
- of comments (see also @;):
-
- @blSkipComments--------+
- This is a comment. |
- More comments. |
- @lSkipComments<--------+
-
- @0AlLabel
- @b@0 (Branch to label lLabel)
-
- @b#0 (If saved errorlevel pos #0 = 50, would branch
- to label l50)
-
- An example of using @b to form the "ELSE" in an IF...THEN...
-
- +----- @LF1 lFlag1On (Branch to label lFlag1On if flag 1 is on)
- | +-- @blFlag1Off (else branch to label lFlag1Off)
- +--|-> @lFlag1On
- | (do stuff here)
- +--|-- @blSkipFlag1Off (skip else code)
- | +-> @lFlag1Off
- | (do stuff here)
- +----> @lSkipFlag1Off
-
- See also @R
-
-
-
- c...Chat request
-
- @c Reads the file CHAT.XBS in the Menu directory if you're
- In, or NOCHAT.XBS if you're Out.
- If the user has paged more times than allowed in XConfig,
- GETLOST.XBS is read instead. NOTE: XBBS does _not_ produce
- a default bell or page tone.. you will have to create your
- own "pager" either with a series of ASCII 7 (Ctrl-G)
- characters, or with a spawn to a simple program that sounds
- the bells and "whistles" (even a GWBASIC program will do).
-
-
- d...Date printing/branching/checking
-
- @dc (Print current date in ANSI C standard format)
- @dw (Print day of week as Monday, Tuesday, etc.)
- @dd<arg> lLabel (Branch if day of week is equal to <arg> (Sun-Sat))
- @da# lLabel (Branch if day of month not equal to #)
- @dm# lLabel (Branch if month not equal to #)
- @dl (Set internal errorlevel to # days since user's last call)
-
-
- e...Errorlevel branching
-
- @e=<###> or <@#> or <$<variable name> (Set errorlevel to <###>.
- If <###> begins with @ (the commercial at sign, not
- ^a), assigns the number represented by variable <#>.
- If <###> begins with $, assigns the number represented
- by named variable <variable name>.
- Examples: @e=55 (Errorlevel is set to 55)
- @9A45[Enter] (Var 9 is set to "45")
- @e=@9 (Errorlevel is set to 45)
- @e=$KEEPTHIS
- @e-- (Decrement errorlevel by 1)
- @e++ (Increment errorlevel by 1)
- @e-#<#> (Decrement saved errorlevel <#> by 1)
- @e+#<#> (Increment saved errorlevel <#> by 1)
- @e~ Errorlevel = NOT errorlevel
- @et Errorlevel = time remaining (in minutes)
- @eR Errorlevel = random # (0-32767)
- @eU Errorlevel = Upload K
- @eu Errorlevel = # of uploads
- @eD Errorlevel = Download K
- @ed Errorlevel = # of downloads
- @eK Errorlevel = Download K for today
- @ek Errorlevel = Upload K for today
- @eL Errorlevel = Lastread in current area
- @el Lastread for current area = Errorlevel
- @eE Errorlevel = #minutes spent in last spawn/shell
- @eV<#> Errorlevel = user numeric variable <#>
- @eS<#> User numeric variable <#> = Errorlevel
- @en Errorlevel = # of calls for this user
- @eF Errorlevel = user flag word
- @ef user flag word = Errorlevel
- @eP Errorlevel = # user posts ('ware the wraparound!)
- @ea Errorlevel = last message area user was in on previous call
- @em Errorlevel = # msgs in current area
- @eM Minimum write access (for msgs curr. area) = Errorlevel
- @eO Errorlevel = # of shadow user (0 if none)
- @e0 Errorlevel = scroll lock status
- @e<+-/*|&% or ^><e or @(at sign)><# or constant>
- Perform numeric computations (result in errorlevel)
- Examples: @e+5 (Add 5 to errorlevel)
- @9A45 (Put "45" in var 9)
- @e/@9 (Divide errorlevel by 45)
- @e=8 (Errorlevel = 8)
- @es1 (Save in position 1)
- @e&e1 (Errorlevel = errorlevel AND 8)
- @e? (Errorlevel=last XBBS.TXT prompt # accessed)
- @es<#> (Save errorlevel in save position <#> (0-9) )
- @er<#> (Retrieve errorlevel from save position <#> (0-9) )
- @e0 (Zero internal errorlevel)
- @e@<#> (Set errorlevel to len of variable <#> (0-9))
- @e==3 (Branch if ERRORLEVEL == 3)
- @e<1 lLabelname (Branch if ERRORLEVEL < 1)
- @e>253 lLabelname (Branch if ERRORLEVEL > 253)
- This is useful for branching on the returned ERRORLEVEL of a
- Spawned program. Some internal functions, like
- write-a-message, findfirst, findnext, etc. also return an
- ERRORLEVEL. Syntax @e<e# should also work.
-
-
- f...Files.BBS reading, raw directory, read-any, read-new, read-text, etc.
-
- @ff<type> <filename> <datestring> <searchstring>
- Read file <filename> FILES.BBS-style
- Values for <type>:
- 0=download dir
- 1=upload dir
- OR with 2=new d/l
- OR with 4=use <searchstring>
- OR with 8=if D hit at paged prompt, return
- with errorlevel 3. This lets you "ask" the
- user if he's seen a file he wants to download
- after every page if you're feeling ingenious.
- OR with 16=if M hit at paged prompt, read file
- MARKFILE.XBS. Lets you do anything you want,
- and resumes reading FILES.BBS where you left
- off when finished.
- <datestring> is used for new file searches, and
- defaults to the user's lastdate if no string is
- passed. <datestring> must be in mm/dd/yyyy format.
- See sample menus FILES.XBS and IBMCOM.XBS
- <searchstring> is used as the mask (usually user
- input) if type is ORed with 4. If the file is not
- read all the way through (aborted), the internal
- ERRORLEVEL is set to 1. If no files are listed
- (weren't any in FILES.BBS or none new), the
- internal ERRORLEVEL is set to 2. A return of 3
- indicates that [D] was pressed at the paged prompt
- line. A return of 4 means there wasn't any file to
- list (bogus, dude). See sample menus FILES.XBS and
- IBMCOM.XBS
-
- @fr<type (0-2)> <directory(\mask)>
- Raw directory. If <type> is greater than 1, don't
- ask for a mask (mask included in <directory>
- string) and don't display the file's extension. If
- <type> is 1, allow directory+filename mask. If
- <type> is 0, allow only filename mask.
- Example:
- Display directory of all files in C:\XBBS\NEWS
- matching "*.NWS":
- @fr2 C:\XBBS\NEWS\*.NWS
-
- @fa<directory> <extension (optional)> <type>
- Read any file in a directory
- Passing an extension limits files that can be read
- to files having that extension
- If <type> is not 0, use paged read, otherwise use
- embedded command read.
- Example:
- Allow reading of any file in C:\XBBS\NEWS that has
- a ".NWS" extension:
- @fa .NWS C:\XBBS\NEWS\
-
- @fn<directory\mask> <type>
- Read new files in directory (newer than last call)
- If <type> is not 0, use paged read, otherwise, use
- embedded command read.
- Example:
- Read any new files in C:\XBBS\NEWS matching *.NWS:
- @fnC:\XBBS\NEWS\*.NWS
-
- @fd
- Output file description of last file found
- (see @0...@9 and sample menu BIMODEM.XBS)
-
- @fD<drive><arg>
- Branch if space on <drive> is less than <arg>
- See sample menu IBMCOM.XBS
-
- @ft<var #> or @ft<filename>
- Paged read of the file named in variable #, or of
- filename
- See sample menu HELP-.XBS
-
-
- g...Assign following string to *g return (last u/d filestring)
-
- @gFilename.EXT
-
-
-
- h...Pause until [Enter] pressed (prints prompt from XBBS.TXT #194,
- then #273 after Enter pressed)
- @h
-
-
- i...File input/output
-
- @i<o[@# or filename], c<i or w>, r, a or m[@# or filename],
- w[# or text] or i[#]>
- You have one input file and one output file available.
-
- @iofilename.ext or @# (at sign+variable #)
- Open filename.ext for input (SHARE-compatible). If a file is
- already open, it's closed first. Return 0 in internal
- errorlevel if opened without error, otherwise return 1.
- @ic<i or w>
- Close an open file. If <i>, close input file else close output
- file.
- @ir
- Reposition an open input file to the start of the file. Returns
- 0 on success, non-zero on error.
- @ii#
- Input from open file into variable #. If successful, internal
- errorlevel is 0, otherwise it's 1 (usually file not open or EOF).
- Up to 80 chars may be read or until a CR/LF is encountered (not
- retained).
- @imfilename.ext or @# (at sign+variable #)
- Create filename.ext for output (deny write to other processes).
- If a file is already open, it's closed first. Returns 0 on
- success, 1 on error.
- @iafilename.ext or @#
- Open a file for append (seek to end after opening. Must exist.)
- @iw@# or @iwText to write
- Write variable # to file created with @im, followed by a CR/LF.
-
-
- j...Jump to another file (GOTO)
-
- @jFilename.ext (Close current file and begin reading Filename.ext)
- @jFilename.ext lLabelName (Same, but starts at lLabelName)
- @j0 lLabelName (Same, but reads filename in variable #0)
- @j01 (Same, but starts in label contained in variable #1)
-
-
- k...Stuff/clear key macro buffer
-
- @kc (Clear macro buffer)
- @ka<text or @var#> (Append to macro buffer)
-
- XBBS will attempt to access the macro buffer for keypresses
- whenever an input is called for. If the macro buffer contains
- keys, they are used as if entered by the user. You can use this
- feature to create macros. The character '|' (vertical pipe) is
- translated to a carriage return (usually end-of-input).
-
-
- l...Label (marker)
-
- @lLabelname Label names must always be CTRL-A followed by
- lowercase "l" followed by label name. They are
- ignored when file is being read except when they
- are the object of a branch-to. Labels must start
- at beginning of a line and be only object on
- line...EXCEPTION: you can put a @lFakeName at the
- end of a line to suppress CR/LF for that line. You
- can use "meaningless" labels to comment your menus
- (see @; for a better way to do comments).
-
-
- m...Manipulate user file (shadow user)
-
- @m<User Name> (Find User Name -- internal errorlevel set if
- not found)
- @m0<#> (Load user <#>)
- @m1<#> (Save user <#>)
- @m2 (Save *current user's* last message read pointers)
- @m3 (Load *current user's* last message read pointers
- This could be used to refresh a user's LMRs
- after an extract or whatever.)
-
-
- n...Run a .MNU file
-
- @nC:\XBBS\MNU\MENU.MNU
-
- If XBBS finds no MAIN.XBS but does find a MAIN.MNU, it invokes
- Mijit-mode (so called because you can't do as much with a
- menu-based BBS as the 'standard' XBBS) by processing it as if
- it was called with this command.
-
- UTSL (Use the Source, Luke).
-
-
- o...Advanced ANSI interface
-
- @o<###>,<params>
-
- @o1,text
- Display an error message window. Pause until a key is pressed.
- @o2,text
- Display an error message window. Pause until a key is
- pressed or two minutes elapse.
- @o3,text
- Display an error message window. Pause one second.
- @o4,text
- @o5,text
- @o6,text
- Display a note message window.
- @o7,title,text
- @o8,title,text
- @o9,title,text
- Display a generic one-line window.
- @o10,filename,topic
- @o11,filename,topic
- @o12,filename,topic
- Display a help window.
- @o13,<var#>,title,prompt,mask,default,foreground color,background
- color,top-left x,top-left y,type
- Display an input window and accept input. Variable <var#> gets
- the returned string. Errorlevel is set if user ESCapes out
- of the window without entering anything. Colors are:
-
- RED 4
- GREEN 2
- BLUE 1
- WHITE 7
- YELLOW 6
- AQUA 3
- MAGENTA 5
- BLACK 0
-
- The mask string should be composed of underlines (_) where you
- want user input. Other characters may be included; they serve
- as delimiters in the input field, but are not included in the
- returned string. A sample for USA phone numbers: (___)___-____
-
- The type should be one of the following:
- A...Uppercased anything-goes
- a...Anycased anything-goes
- N...Numeric
- D...Date field with auto-validation (USA format, sorry)
- Z...Zero-filled numeric
- C...Cash
- O...X or - (bit field)
-
- @o14,x,y,h,w,keys
- Treats what's on the screen as a pick-list. x,y is the top
- left corner of the 'window' (from 0,0 for the top left corner
- of the screen), and h,w are the height and width of the 'window'.
- The internal errorlevel is set to indicate the selection (0
- means ESCape or CTRL-K aborted; HOME, PGUP, PGDN, CTRL-HOME
- and CTRL-END return their values--left and right arrows
- return 203 and 205 respectively). keys is a list of keys
- that XBBS will allow for quick selection (not necessarily
- the first letter of the text on the screen); if one is
- pressed, its order in the list is returned.
- @o255,
- Invoke the built-in user editor in remote mode (for what
- it's worth).
- @o254,
- Invoke the other-options menu in remote mode (for what it's
- worth).
-
-
- p...Pause mode on or off
-
- @p0 (Pausing allowed)
- @p1 (Pause not allowed)
-
-
- q...Quit reading (close) file being read. If a nextfile pointer has
- been set, the nextfile will be read; otherwise, the topfile will
- be read. If the topfile doesn't exist for some reason, MAIN.XBS
- gets read. If that doesn't exist, Ijit-mode is invoked.
-
- @q
-
-
- r...Read a message
-
- @r0,0 (Read anything public and personal)
- @r1,0 (Read only personal)
- @r2,0 (Quiet check for personal messages)
- @r4,0 (Non-stop read)
- @r8,0 (Selective read, preset)
- @r16,0 (Selective read)
- @r64,0 (Extract instead of read)
- @r128,0 (Scan instead of read)
-
- You can add values together to get the desired effect (though
- obviously not all additions will be practical)
-
- You can also pass a non-zero number as the second parameter (or @#
- or e#) to bypass the "Start at #:" prompt and begin reading at a
- specified location.
-
-
- s...Get message header
-
- @s<msg#>
-
- This gets the header for <msg#> in the current message area.
- You can then display/analyze with *M#. If an error occurs,
- internal errorlevel is set; otherwise, it's 0.
-
- Examples:
- @s12 (Get msg header for msg #12)
- @s@0 (Get msg header for msg #<numeric value of var 0>)
- @se3 (Get msg header for msg #<saved errorlevel 3>)
-
- Note: This command was once an undocumented "scan messages" command.
- If you have used it in that manner, replace with @r128,...
-
-
- t...Time printing/branching/checking
-
- @tc (Echos current time)
- @tr (Echos minutes remaining)
- Example: @tr mins remaining.
- @to (Controls system timer)
- (0=off & save, 1=on & restore, 2=on)
- @tl (Sets internal errorlevel to # minutes since last call to system)
- @texx:xx:xx yy:yy:yy lLabel
- (Should branch to label during offhours...maybe)
- @t<operator><[@(at sign) or e][#]minutes> (Set/branch on time remaining)
- Examples:
- @t=30 would set the user's timelimit to 30 minutes
- @t+30 would add 30 minutes to user's time
- @t-30 would subtract 30 minutes from user's time
- @t<30lLabel would branch to lLabel if the user had less than
- 30 minutes remaining.
- @t>30lLabel would branch to lLabel if the user had more than
- 30 minutes remaining.
- @t=@0 would set user's timelimit to whatever # was
- represented by the string in variable #0
- @t-e4 would subtract saved errorlevel position #4 from
- the user's time.
-
-
- u...Display user parameters (see also metastrings)
-
- @uf (First name handle)
- @ul (Last name handle)
- @uw (Whole handle)
- @uN (Real name)
- @un (Number of total calls)
- @um (Number of calls today)
- @uo (Number of calls remaining)
- @up (Number of calls allowed per day)
- @uc (Time allowed per call)
- @ut (Total time allowed per day)
- @us (Last call date)
- @ua (Last call time)
- @uF (Time used so far today)
- @uu (# of uploads)
- @uU (Uploaded Kb)
- @ud (# of downloads)
- @uD (Downloaded Kb)
- @uA (Age)
- @uL (Lastread message pointer for current message area)
- @uC (City)
- @uS (State)
- @uZ (Zipcode)
-
-
- v...Set user parameters
-
- @vp (Change password)
- @vh (Change handle)
- @vl (Change screen length)
- @vw (Change screen width)
- @v1 (Change phone #1)
- @v2 (Change phone #2)
- @vz (Change zipcode)
- @vs (Change state)
- @vc (Change city)
- @vC (Change Computer Type)
- @vg (Toggle ANSI)
- @vf (Toggle ANSI Fullscreen editor preference)
- @vm (Toggle More?)
- @vr (Toggle Screen Clearing)
- @vx (Toggle Expert bit)
- @vo (Toggle Special bit)
- @vt (Toggle Twit bit)
- @vM (Toggle ARQ bit)
- @vk (Toggle Deleted bit)
- @vn (Toggle NoKill bit)
- @vR (Toggle IgnoreRatio bit)
- @vH (Toggle IgnoreHours bit)
- @vA (Toggle ANSI cursor menu bit)
- @vu<arg> (Add <arg> to number of uploads)
- @vd<arg> (Add <arg> to number of downloads)
- @vU<arg> (Add <arg> to uploaded kilobyte total)
- @vD<arg> (Add <arg> to downloaded kilobyte total)
- @vF<arg> (Arg is 1 to 16, a sysop-defined flag, or 17, cold
- input flag, or 18, hi-ASCII flag)
- @vG<arg> (Arg is 1 to 3, one of the general flags)
- @vK Adds k from last @0D to user's download k
- @vL Adds # of files from last @0D to user's download #
-
-
- w...Write a message
-
- @w<type1> <type2>
- Where type1 is one of the following:
- 0=normal (ask for info, write message, import to message
- base)
- 1=ask and write message but don't import*
- 2=ask but don't write or import*
- 4=import MSGTMP? to message base*
- and type2 has one of the following values:
- 0=Standard first-posting
- 1=is a reply
- 2=Force to message board's Force-to name
- 4=Upload message to BBS via XModem (Can be ORed with any
- type2)
- 8=Not used, reserved
- 16=Offer private as default option
-
- *Not yet fully implemented
-
- Note that for the upload option to work, you must have a batch
- file in the default directory named MSGUL.BAT (see XBBS.TXT
- prompt #322) which accepts the following parameters:
- *B *p *P *T <filename, usually MSGTMP>
- The batch file can rearrange these parameters as required, and
- is expected to download <filename> into the default directory
- via XModem (usually with DSZ). Note that XModem is used as it
- will not allow the filename to be changed during the download,
- as could happen with ZModem and other protocols. The line
- editor is invoked after the upload for minor touch-ups.
- See FDBK.XBS sample menu for examples.
-
-
- x...Logoff current user
-
- @x or @x0 (logoff and drop DTR if remote)
- @x1 (logoff, leave DTR high, for use as Door)
- @x2 (logoff, set baud to 0, don't terminate XBBS...can be
- used to run clean-up menu)
-
-
- y...Print system parameters (see also metastrings)
-
- @yl (print name of last caller)
- @ys (print sysop's name)
- @yn (print system's name)
- @y# (print number of messages in current message area)
- @yc (print total system calls)
- @ydA (print free bytes on drive A: substitute letter of desired
- drive)
- @yM (print name of current message area)
- @yF (print name of current file area)
-
-
- z...Print a quote from a quote file
-
- @z#,<filename.ext> (if # is other than 0, if a random number
- between 1 and 10 is less that #, a quote is
- printed; otherwise, it is not. If # is 0, a
- quote is always printed)
- Examples:
- @z0,QUOTES.BBS (print a quote from QUOTES.BBS)
- @z5,QUOTES.XBS (about 50% chance a quote will be output)
-
- Note: Quote file is "standard" format with blank line between
- quotes.
-
-
- 0-9...Variable manipulation/input/output/testing & Events
-
- @0A<string>[Enter]
- Assigns <string> to variable #0.
-
- @0=<letter/symbol> Assign a system variable to a user variable
- All the metastring letters/symbols are available.
- Examples (quote marks are for clarity only):
- @0=B (If caller is 2400 baud, puts "2400" in var 0
- @0=r (If last caller's handle was George, puts "George" in
- var 0)
-
- @0C<operand><string>[Enter]<lLabelName>[Enter]
- Compare variable #0 to <string>. If <operand> is ! then branch
- if variable #0 is not equal to <string>. If <operand> is =
- then branch if variable _is_ equal to <string>.
- Examples:
- If variable #0 is not equal to "^" branch to lANSIMESS:
- @0C!^
- lANSIMESS
- If variable #0 is equal to "READ MESSAGES" branch to lRead:
- @0C=READ MESSAGES
- lRead
-
- @0S<string>[Enter]<lLabel>
- Branch if string is equal to variable #0. Only the length of
- string is compared (for instance, if variable #0 contained
- ALUMINUM, @0SALUM[Enter]lLabel would branch to lLabel.
-
- @0P
- Prints variable #0.
-
- @0I#<length>,<pword>,<caps>,<hot>,<type>
- Inputs into variable #0 up to <length-1> characters (80 max),
- masks echo if <pword> is not 0, forces input to uppercase if
- <caps> is not 0, is "hot" (doesn't need [Enter] to terminate)
- if <hot> is not 0, and is of one of the following types (<type>):
- 1=ALL (all printable chars)
- 2=ALPHA (alphabetical chars)
- 3=NUM (decimal digits)
- 4=ALPHANUM (alpha and digits)
- 5=YESNO (Y or N)
- 6=FILE SPEC
- 7=FILE SPEC w/ PATH
- 8=FILE SPEC w/ WILDCARDS
- 9=FILE SPEC w/ PATH & WILDCARDS
- 10=NAME (2 words, both capitalized)
- 11=NEAT (first char of each word capitalized)
- 12=PHONE (a phone number, with mask if conf.genphone=NO)
- 13=DATE (a date, with mask)
- 14=SUBJECT (first char capitalized)
- 15=YESNO (no echo)
- 16=FILE SPEC no extension
- 17=[reserved]
- 18=ANSIIN (cursor keys inc/dec # represented by var)
- 19=Set default for ANSIIN (see sample CONFIGUR.GBS)
- 20=FILE SPEC (BATCH)
- 21=FILE SPEC (BATCH w/ WILDCARDS)
- 22=FILE SPEC (BATCH w/ WILDCARDS & PATH)
- 23=FILE SPEC (BATCH w/ PATH)
- 24=TRUEANSI (cursor key sequences, i.e. ESC[1C)
- 25=WORD (no spaces, alpha only)
- 26=WORDNUM (no spaces alpha or digit)
- 27=BITS (- or X)
- 28=ANY (anything)
- 29=ANYNOECHO (same, no echo)
- 30=HYPER (Used by hypertext reader)
- 31=THRU (INKEY$-like)
- 32-64=[Reserved]
- 65=YESNOQ (Y N or Q)
- 66-127=[Reserved]
- 128=RECORD (or any type with 128, input *won't* use macro buff)
- 129-255=[Reserved]
- Examples:
- Input a single uppercased character "hot":
- @0I1 0 1 1 1
- Input a word up to 32 characters long:
- @0I33 0 0 0 2
- Input a filespec:
- @013 0 1 0 6
-
- @0F<U,D or N>
- Do a FindFirst on the file spec in variable #0. Set
- Errorlevel variable if not found; otherwise, return actual
- filename in variable #0. If extra arg is U, searches Upload
- path. If D, searches Download path. If N, no path is
- prepended. See BIMODEM.XBS sample menu for examples.
-
- @0f
- Do a FindNext and react as for @0F. See BIMODEM.XBS sample
- menu for example.
-
- @0+
- Increment the time stamp of all files matching the file spec
- in variable #0 in the current download path by 1 (the # of
- downloads pointer). See BIMODEM.XBS sample menu for example.
-
- @0c<arg>
- Copy the contents of variable #0 into variable #<arg>.
-
- @0t<arg1> <arg2>
- Test the string in variable #0 as a number. If less than
- <arg1> or greater than <arg2> it will fail the test, and the
- errorlevel variable will be set. This can be tested with @e.
-
- @0T<lLabel1>,<lLabel2>,...<lLabel255>
- Does an "ON...GOTO" based on the number represented by the
- string in variable #0. If variable #0 is "1", lLabel1 would
- be sought, and so forth. Don't exceed 255 character width per
- line.
- Example:
- @0TlNull,lPass1,lLen1,lWid1,lGra1,lMore1,lFull1,lScrn1,lComp1
- (See sample menu CONFIGUR.GBS)
-
- @0D
- Lists the files as contained in variable name (works with
- batches and wildcards). If the user doesn't have enough time
- to download everything, internal errorlevel is set to 2. If
- no files were found, internal errorlevel is set to 1.
-
- @0a1
- Parse through variable 0 one character at a time with
- character copied to variable 1 (in this case). For instance,
- if variable 0 contained "Hello", the first call would result
- in variable 0 containing "ello" and variable 1 containing "H";
- the second call would produce "llo" and "e", etc.
-
- @0p1<delimiters>
- Parse through variable 0 by delimiter string. For instance,
- if variable 0 contained "Here,There" and "@0p1 ," was called,
- variable 0 would contain "There" and variable 1 would contain
- "Here".
-
- @0s
- Strip leading and trailing blanks from variable 0.
-
- @0|<#>
- Concatenate variable 0 with variable <#>.
-
- @0/<[e]#>[[e]#]
- Return in variable 0 the string currently in variable 0
- starting at position <#> for [#] characters. If <#> is out of
- range, the internal errorlevel is set and no change is made to
- the variable. If [#] is missing or out of range, the
- remainder of the string is returned. If # is preceded by the
- letter e, the corresponding saved errorlevel is used.
-
- @0V<#><lLabel>
- Branch to <lLabel> if variable 0 exactly matches variable <#>.
-
- @0Z<string>[Enter]<lLabel>
- Branch to <lLabel> if <string> is found within variable 0.
- The internal errorlevel is set to the position within variable
- 0 where <string> starts.
-
- @0i<#><lLabel>
- Branch to <lLabel> if variable <#> is found within variable 0.
- The internal errorlevel is set to the position within variable
- 0 where variable <#> starts.
-
- @0e<#>
- Assign string representing saved errorlevel #<#> to variable 0.
-
- @0U<#>
- Copy variable 0 into user string variable #.
-
- @0d<#>
- Print variable 0 after converting any metastrings contained in
- it.
-
- @0l
- Lowercase variable 0.
-
- @0u
- Uppercase variable 0.
-
- @0k
- Copy contents of keyboard macro buffer into variable 0.
-
- @0g<environment_variable or @#>
- Copy value of environment variable into variable 0. Can be
- used to make menus for distribution portable.
-
- @0b
- Copy value of variable 0 into the associated filename. Can be
- used to be sure associated filename is cleared before posting
- a non-associated message in an associated area.
-
- Note that 0 could have been any digit between 0 and 9 in the
- above, and would have affected the variable represented by the
- changed digit.
-
- Events:
-
- There is one additional @<#> command that relates to Events
- instead of variables. Events are set up with this command, and
- XBBS tracks the event and executes the named file when the
- timelimit drops to below what you specify with this command.
- Format:
- @<#>E<seconds>,<filename.ext>
- Example:
- @0E360,THRMIN.XBS (would gosub to THRMIN.XBS at the earliest
- possible moment after 360 seconds remaining to the user...event
- #0) To turn an event off, set <seconds> to 0. Events are
- automatically turned off after they occur.
-
-
- ~...Clear screen if user parameter allows screen clearing in either
- graphics or ASCII mode
-
- @~
-
-
- ESC...(an actual escape character, 0x01b or 27 decimal) Send text to
- ANSI users
-
- Example:
- @ESCESC[0;1;32m (Set green text on black background if user
- has ANSI graphics enabled...otherwise ignore)
-
- Text followed by the @ is ignored by XBBS if the user is _not_
- in ANSI graphics mode. Text files with ANSI codes in them (i.e.
- the "pretty" or "sharp" screens and menus you might want your users
- to see) can be easily edited with ANSI editors (like TheDraw or
- PCCrayon) and integrated into your menus, if you like. Note that
- the ESC directly behind the @ is *not* sent (different as of 1.14)!
-
- You can set color/graphics attributes by entering: ESC[#;#;#m
- where the first number is normal, bold or dim, the second number is
- the desired foreground attribute or color, and the third is the
- desired background color. Here are some suggested attributes and
- colors
-
- 0 Normal (white against black background)
- 1 Bold/intensity ON (bright foreground)
- 2 Bold/intensity OFF (normal foreground)
-
- 30 black foreground 40 black background
- 31 red foreground 41 red background
- 32 green foreground 42 green background
- 33 yellow foreground 43 yellow background
- 34 blue foreground 44 blue background
- 35 magenta foreground 45 magenta foreground
- 36 cyan foreground 46 cyan background
- 37 white foreground 47 white background
-
- You can position the cursor at a particular position on the screen
- with ESC[#;#H (i.e. ESC[1;1H to put the cursor at the top left
- corner of the screen).
-
- For more details on ANSI graphics attributes, as well as ANSI
- cursor movement sequences, you should consult your DOS user's
- guide or technical reference manual. You would be amazed at
- all the things you can do with ANSI sequences. See the sample
- menus for more examples and usages. Don't overlook the fact
- that you can do @ESC@blIfANSI
-
-
- !...Turn FOSSIL carrier detect watchdog on/off
-
- @!
- Be very careful using this function with Opus!Comm. OCOM_530 has
- a bug that doesn't allow the watchdog to be turned on. OCOM_531
- has a bug that doesn't allow the watchdog to be turned back off.
- This means your computer will reboot at carrier loss at any time
- after turning watchdog on, possibly even before XBBS can finish
- updating the user file during a normal logoff! BNU should work
- reliably for you if you need the watchdog, or there are external
- programs to do the job (WATCHBIRD purports to force a return to
- DOS instead of a reboot).
-
-
- $...Miscellaneous control functions
-
- @$0Filename.Ext[Enter]
- Set name of startfile and quit current file (back up a gosub
- then goto)
- @$1Filename.Ext[Enter]
- Set name of startfile and restart XBBS from the beginning
- Don't use this until logon is complete!
- @$2<0 or 1>
- Turn on/off gosubfile keys
- Please note that you should be careful with Gosub files.
- You should not use them in a situation where you will not
- return to them! Stack space will be eaten and your BBS would
- probably crash.
- @$3<0 or 1>
- Turn on/off gotofile keys
- Please note that you should be careful with Goto files. It is
- still possible to get into a situation that can only be cleared
- up by reexecuting LOGON with a suitable -R<filename> argument.
-
-
- @...Set up Selected Read search strings (for @r type 8)
-
- @@<#><var # or text> (where we're talking about ctrl-a+@)
- @@0 (Resets all search strings to null)
- @@1<var # or text> (Copies var # or text to the From: search
- string)
- @@2<var # or text> (Set the To: search string)
- @@3<var # or text> (Set the Subj: search string)
- @@4<var # or text> (Set the Msg. Body: search string)
- Examples:
- @@10 (Copy contents of variable #0 into the From: search string
- When a type 8 read is executed, messages From: whatever
- is in the search string will be read; others will be
- skipped.)
- @@3IBM (Copy "IBM" into Subj: search string)
-
-
- &...Look up message area or file area
-
- @&<arg><Filename.EXT or var #>,<Area Name or var #>[,Security level #]
- @&M<Filename.EXT>,<Area Name> looks up Area Name in the
- MSGAREAS.XBS-style file designated by Filename.EXT.
- The internal errorlevel is set if there is no match.
- If the area is found, the message board structure is
- set up with the information from the file. Security
- information works the same way it does in Bulls-mode, i.e.
- no access (a no-match) if seclvl #0<substat1 for that area.
-
- @&m<Filename.EXT>,<var #> looks up Area Number in var # in the
- MSGAREAS.XBS-style file designated by Filename.EXT. Other
- than using area # instead of area name, works as above.
- Note you must use a variable with this version of the
- command.
-
- @&F<Filename.EXT>,<Area Name>,<Security level #> looks up
- Area Name in the FLSEARCH.CTL-style file designated by
- Filename.EXT (with extended fields Flags and Upload path).
- The internal errorlevel is set if there is no match.
- If the area is found, the file board structure is set up
- with the information from the file. The user's security
- level #<Security level #> is tested against the area's
- security and access is denied (no-match) if too low.
- (There is no corresponding @&f because file areas don't
- have numbers. However, you can have XBBS search for a
- file area by number if the Area Name begins with a # sign.
- KEEP IN MIND: The number can be different for every user,
- as it hinges on both the file used to look up the areas
- and the user's security number. For instance, if the user
- has access to the first and fourth areas listed, the
- fourth area will be #2 to him. Therefore, this should be
- used only for user input and not relied upon in
- programming.)
-
- @&L<Filename.EXT> lists all msg areas to which the user has
- access; Area #, Area Name, Area Description
-
- @&l<Filename.EXT>,,<Security level #> lists all file areas to
- which the user has access; Area #, Area Name, Area
- Description
-
-
- Examples:
- @&FFLSEARCH.CTL,XBBS Programs,0
- @&MMSGAREAS.XBS,XBBS Echo
- @&mMSGAREAS.XBS,5
- @&LMSGAREAS.XBS
- @&lFLSEARCH.CTL,,0
-
- See also sample menus AREAMSFL.XBS, SETAREA.XBS and
- FILEMESS.XBS
-
-
- +...Change current filename and restart or just restart
-
- @+Filename.Ext
- @+
- In the first example, the current filename is changed to
- Filename.Ext and the file is closed then restarted. In the
- second example, the current filename is unaffected, but the
- file is still closed and restarted.
-
-
- -...Change user's security level
-
- @-<arg1><arg1>
- Sets user's security level #<arg1> to <arg2>.
-
-
- *...Go to Bulls-mode
-
- @*Drive:\Path\Filename.Ext
- @*
- @*Drive:\Path\Filename.Ext 1
- @*Drive:\Path\Filename.Ext 2
- @*Drive:\Path\Filename.Ext 3
- In the first example, areas would be read from Filename.Ext. Areas
- are kept in the same basic format as an @M line (without the
- leading @M, and with a few extra optional parameters--just use
- XEdit, okay?). In the second example, the default MSGAREAS.XBS
- would be used (in the current message directory). In the third
- example, the [U]pload message command will be active. In the
- fourth example, the [X]tract option is active, and in the fifth
- example, both [U]ploading and [X]tracting are permissible.
- Bulls-mode approximates the style of the XBBS Bulls door, allowing
- users to read messages in any of the listed areas. One thing is
- slightly different: The first security level for each area
- determines whether the user will have access to that area (see @M
- entry). Therefore, if SubStat0 is greater than the user's security
- level 0, that area will be ignored. You must set the starting
- area with an @M statement before entering Bulls-mode. A sample
- MSGAREAS.XBS file can be found in HEADEDIT.PAK in the distribution
- archive. If you are allowing Xtraction, you must set up the file
- area before invoking Bulls-mode. The file area directories should
- be .\MPORT for incoming reply packets and .\XPORT for outgoing
- mail packets (append node number if other than 1).
-
-
- \...Change Alternate Zone:Net/Node
-
- @\Zone:Net/Node@Domain
- Example: @\1:380/16@FidoNet
-
- Note that XBBS insists on a fully qualified address including
- domain (except for point designator. XBBS will not function as
- a point (it's always .0, or the boss). HeadEdit will.) and
- doesn't bother checking to see if you messed it up, so use this
- carefully.
-
-
- :...Change message directory
-
- @:Drive:\Path\
- Example: @:D:\XBBS\MESS\
-
-
- @...(Control-a) Turn "Cold Input" option on/off
-
- @@0 turns cold keys off
- @@1 turns cold keys on
-
-
- ^B...(Control-b) Display line if and only if the user's Special flag is
- set
-
- @^B^V^Y@; (Emit an Avatar sequence if Special flag is set.
- For information on Avatar, see FSC-0037)
-
-
- ^C...(Control-c) Put the contents of a variable into the input stream
- and process as if it was a line in the .?BS file.
-
- @0A@r0,0
- @^C0 (Reads a message)
-
-
- ^D...(Control-d) Display line locally only after translating any
- metastrings
-
-
- ^E...(Control-e) Display line normally after translating any
- metastrings
-
-
- ^F...(Control-f) Set the prompt number to be displayed when the help
- key (CTRL-T) is pressed. Numbers should be from 601-???. XBBS
- will display that prompt when CTRL-T is pressed at an input
- point. Set to 0 to disable help ("Sorry, no help" is displayed)
- or 65535 to completely disable (only a beep is sent if the help
- key is pressed). Note help won't work with ansi cursor menues
- (it'd destroy the display), so build it in if you need it.
-
-
- ^K...(Control-k) Display line if and only if user's expert flag is
- set.
-
-
- ^L...(Control-l) Display line if and only if user's twit flag is set.
-
-
- ^N...(Control-n) Display line if and only if user can receive high
- ASCII characters (either high-ASCII or graphics set)
-
-
- ^O...(Control-o) Display line if and only if flag x (1-16) is set:
- @^O<##>,line_to_display
-
-
- ^P...(Control-p) Display line if and only if user cannot receive high
- ASCII characters (neither high-ASCII nor graphics set)
-
-
- ^Q...(Control-q) Display line if and only if user has high-ASCII
- set
-
- ^R...(Control-r) Display line if and only if user arq flag is set
-
-
- ^S...(Control-s) Display line if and only if user generic flag x (1-3)
- is set
- @^S<#>,line_to_display
-
- ^T...(Control-t) Send line to modem; do not echo locally. CR/LF is
- stripped but may be added with metastring.
- @^T<-[6n (Send ANSI DSR to remote without local echo)
-
-
- ^U...(Control-u) Set/Reset/Test/Clear user variable as a bit field
-
- @^Us112 (Set bit 12 in user variable #1)
- @^Ur044 (Reset bit 44 in user variable #0)
- @^Ut044 (Test bit 44 in user variable #0--return in internal
- errorlevel)
- @^Uc1 (Reset all bits in user variable #1)
-
- Remember that user strings are 76 bytes long (total) with 8 bit
- 'flags' in each byte. There are 5 user strings (0-4). This
- function does no error checking, so don't screw up.
-
-
- ^X<option>...Invoke an automatic mode.
-
- Possible values for <option>:
-
- B...Bulls
- C...Configure user
- D...Doors
- F...Files
- f...File area list/pick
- L...Library
- M...Macros
- m...Message area list/pick
- N...Scan nodelist
- n...News
- S...Select a file (must follow with var num,
- directory and mask)
- Example: @^X0c:\files *.txt
- V...View archive (must follow with filename,
- d/l path assumed if none given)
- X...Ijit
- x...Ijit w/ pulldown menus (warning: variables 0-9 will be wiped)
-
- Note XBBS' Ijit defaults are used in all cases where defaults
- are applicable, except for Library and News which will accept
- the name of the directory (including trailing backslash)
- following, and file and message area list/pick:
- @m[optional msgareas.xbs-style file filename]
- @f<mandatory security level #, 0-9>------------.
- .-->[optional flsearch.ctl-style file filename] |
- | ,
- `------------------------------------------------
-
-
-
- ^W...Escape ^a's
-
- Escapes ^a's so they can be displayed if necessary
-
-
- ;...Put a comment in your .?BS file. This is skipped (not displayed).
- You could also use @l, but this is less likely to cause confusion
- later (is it a label or a comment?)
-
-
- ?...Random branching.
- @?5lLabel0,lLabel1,lLabel2,lLabel3,lLabel4,lLabel5
-
- Branch randomly to one of the following labels.
-
-
- /<c or #>...Keyboard recording buffer (for use w/ macros)
- @/c...Clears keyboard recording buffer
- @/#...Copies keyboard recording buffer into variable #
-
-
- =<@# or text>...Assign text to msginfo variable
- @=Delete
- @=@1
-
- If the msginfo variable has information in it before a msg is
- written, it will be inserted into the next msg written as a ^aINFO:
- <variable><cr> kludge line. When a msg with a ^aINFO: kludge line
- is read, the information is placed into the msginfo variable
- (however, replying to the msg zeros the variable). This can allow
- you to place special hidden information in a msg for use by
- after-msg functions like EXTRAMSG.XBS and VIEWFILE.XBS. Note that
- text after a ^aINFO: line, although hidden, can be "found" when
- searching the msg body while Selected Reading.
-
-
- '<title color>,<color>,<title>,<top prompt bar>[,<top pos>,[<down pos>],[<helpfile>]]
- @'37,36,CHOOSE,Read_Msg Write_Msg Quit<cr>
-
- Make a crude pull-down menu. Variables are assumed to hold the
- pull-down prompts (var #0 would hold prompts for first selection,
- var #1 for second, etc. If var is empty, choice alone is
- sufficient). Returns (in internal errorlevel) selection #*10 if top
- choice with no var prompts is selected, selection #*10+pull down
- choice, or 0 (aborted with ESC or CTRL-K). Screen is cleared on
- abort, not on valid selection. ANSI graphics are required for this
- function, so test the user's ANSI before calling it. See sample
- file PULLDOWN.XBS. Note that this probably shouldn't be used with
- speeds below 2400 baud (and might be too slow for that, too...).
- The pull-down menus are a compromise between speed and looks, but
- they don't look all that bad. They use positive cursor positioning
- in an attempt to minimize bad screens caused by line noise.
-
- As of XBBS 1.12, there is a variation on the pull-down menus (just a
- tree-structured menu) which can be sent to ASCII users, so you don't
- have to worry too much about blocking non-ANSI users from this.
-
- As of XBBS 1.14, you can pass a top-position and a down-position for
- the menu to start at. These fields are optional to maintain
- backward compatibility.
-
- Again, it's not really intended that you write your entire BBS using
- pulldown menus, but it does add some flash.
-
- About the helpfile parameter: XBBS will used named help to try to
- help the user out if you pass this. How it works:
- If the user has pulldowns, hitting ? or the coniguration help
- key on any item gets help for that item by its name; for
- example, if the user is on a top-line item "Msgs", XBBS will try
- to find a help entry "Msgs" in the helpfile. If the user is on
- a pulldown item under "Msgs" called "Read", XBBS tries to find a
- help entry "Msgs|Read". It works a little differently for
- non-graphics users (using the ASCII tree-menu instead of the
- pulldown). Since the tree-menu isn't "on" a particular item,
- just either at the main prompt or a subtree, what you get is
- either topic "@Main" if the user is at the main prompt or, for
- example, "Msgs" if in the "Msgs" subtree. Clear as mud?
-
-
- "...Clear to end of screen from current cursor position
-
- ANSI is obviously required.
-
-
-
- .(a period)<sec lvl #><Filename.EXT>
- Invoke XBBS' built-in Door-mode. Uses DOORLIST.XBS (or as indicated
- in XBBS.TXT) and security level 3 as a default. DOORLIST.XBS should
- have the following format (one entry per line):
-
- Security_level Name Type<Errorlevel> String_to_spawn/exec Description_Text
-
- Types can be:
-
- S=Spawn
- E=Exec
- X=Exit
- D=Dos
- d=Dos - write/read exit files
- s=Spawn - write/read exit files
- I=Spawn reverse swapsetting
- H=Spawn leave FOSSIL hot
-
- For example:
-
- 5 Peeker S PEEKER.EXE_B*B_C*P_AFLSEARCH.CTL_D:\XBBS\ Archive_Door
- 6 Maze X15 Nothing Messages_and_Adventure
-
- With this, users with a security level 5 could run Peeker but not
- Maze, which would require 6 or greater. Peeker is spawned, Maze is
- exitted to with an ERRORLEVEL of 15. Note the String_to_spawn/exec
- is not used with exit types, but you must put something there if you
- want to have a description. Descriptions are optional.
-
- Example: @.3DOORLIST.XBS
-
-
- ,<sec lvl #><Filename.EXT>
- Invoke XBBS' built-in Files-mode. Uses FLSEARCH.CTL as the default
- (or as indicated in XBBS.TXT) and security level #2.
-
-
-
- `...'Rolling' prompt
- @`Text_one Text_two Text_n
- XBBS replaces the underlines with spaces and displays the first
- 'word' of text. Cursor keys cause the next/previous word of text
- to be shown. [Enter] selects. Internal errorlevel is set to
- indicate the selection. First character of a 'word' can also be
- pressed to select.
-
-
- [<variable #>,<title>,<filename>,<color>
- Invoke an ANSI-only list-pick screen. Displays all lines of file
- (21 per page) and allows user to position a reversed video bar atop
- a line and strike [Enter] to select it. Returns the string selected
- in the variable # specified. Internal errorlevel is set on error or
- abort by [ESCape/CTRL-K].
-
-
- ]<0 or 1, append if 1>,<filename>,<mask>,<path to include>
- Invoke a function that makes a list of filenames that can be used
- with @[ above. If <path to include> is not nul, prepends that
- string to each entry. Internal errorlevel is set if the file cannot
- be opened.
-
-
- {<0 or 1, append if 1>,<title>,<filein>,<color>,<fileout>,<prepend>
-
- Invoke an ANSI-only list-mark screen. Displays all lines of filein
- (21 per page) and allows user to position a reversed video bar atop
- a line and strike [Enter] to mark it. When all entries desired are
- marked, the user can strike [CTRL-K] to create fileout containing
- only the marked entries. If prepend is not nul, it is prepended to
- each line of fileout as it is written. Internal errorlevel is set
- on error or abort by [ESCape]. Note that this function preloads all
- lines into memory (up to 4096 lines), so it can use a lot of RAM.
- It can quite possibly require more with very large lists than you
- have available. Beware.
-
- Example:
- @;Make a file to select from
- @]0,temp.,*.*,
- @;Let user mark files from temp and create temp2
- @{0,Pick a file; any file,temp.,,temp2.
-
-
- }<filename>,<topic>
-
- Looks up a topic in a file and reads all lines under that topic until
- the next topic. Topics are delimited by <> brackets (flush left).
- A topic name <end> indicates no more topics are available. Example
- of a named help file:
-
- <hi>
- Hello.
- <bye>
- Goodbye.
- Come again.
- <end>
-
-
- ><area#><starting#>...Fidonet export
-
- Export messages from area <area#> starting at message <starting#> to
- a Fidonet(tm) packet. The packet is created in the Xport directory
- with a filename of <4-digit-net-in-hex><4-digit-node-in-hex>.PKT. It
- is *not* archived; you'll probably want to archive it into a filename
- 00000000.MO? to sorta follow Fidonet conventions.
-
- If the area# parameter is 0, all areas are exported from
- sequentially. The currently defined message area is used if the
- area# parameter is non-zero. If starting# is zero, export begins
- from the first new message. If a packet exists, it is appended to,
- so don't leave packets from users laying around in the Xport
- directory after a user logs off.
-
- All messages will have the MSGAREAS.XBS name in them as an AREA: tag.
-
- A few notes on this type of extraction:
-
- Advantages:
- 1. You don't have packets for all your points lying around taking
- up disk space until they pick them up.
- 2. Points don't need a mailer.
- 3. Points can use any point message reading software (HeadEdit,
- MsgEd, GoldEd, etc.) and message base format they choose and
- upload reply packets in Fidonet format for you to import with
- your echomail import software (probably XST).
-
- Disadvantages:
- 1. The user has to wait while messages are extracted. It's a
- pretty fast process, but not instantaneous.
- 2. You lose security. You can't be sure what the user's software
- will let him put into messages, or that the user can properly
- handle his software.
- 3. Messages sent to local areas will have origin lines unless the
- user's software allows originless echos (HeadEdit does).
-
- Local areas do not have to be marked as echos on your system for
- XBBS to export from them. They probably *do* have to be marked as
- echoes on the point's system so that replies can be exported back to
- you. This could result in local messages with tear/origin lines
- unless the user's software allows him to turn tear/origin lines off
- on a conference-by-conference basis.
-
- A user cannot use this function unless you've assigned him a point
- number with XUser.
-
- Note that if you intend to forward echo messages returned from
- points by this process your MSGAREAS.XBS-type file must contain the
- AREA: tag of the echo in the name field. This is because other echo
- mail processors down the line won't understand some arbitrary name
- you decide to give to an area. For instance, if you're pointing the
- NET_DEV echo out, name it NET_DEV, not The Network Developer's Echo
- Conference or NET_FLAME (however appropriate it might be).
-
-
- |#<args>...Hypertext links
- @|0<name of hypertext (topic) file>
- This loads the hypertext file index. The internal
- errorlevel is set if this fails. A variable may be used for
- the filename as @|0*0
- @|1<topic name>
- This sets the first topic for a hypertext read. The
- internal errorlevel is set if this fails to find the topic.
- A variable may be used for the topic name as above.
- @|2<#>
- This reads the hypertext file (be sure you set it up as
- above first!). <#> is mandatory and determines which
- security level (0-9) will be used to regulate access to
- various topics in the file if you are using the security
- function. XBBS.TXT-spawned hypertext reads always use
- security level 0. Hypertext files are *not* reentrable,
- that is you can't run one, then call another from an
- XBBS.TXT prompt or menu file and return to the one you left
- and expect the world as we know it to continue.
- @||
- Frees hypertext buffers.
-
- About hypertext formats:
- Hypertext files have the following format:
-
- Topic line 1
- Text...
- Topic line 2
- Text...
- ...
- Topic line 100
- Text...
- <end>
-
- Here's a breakdown of a topic line:
-
- ┌───Topic name (up to 22 characters)
- │
- ┌┬┬┬┬┼┬┬┬┐┌───Literal '>' character
- │││││││││││
- <topic name> K### min### flags###
- │ ││││ ││││││ ││││││││
- │ │└┴┤ └┴┴┴┴┤ └┴┴┴┴┴┴┴───(Future) flags req'd
- │ │ │ │
- │ │ │ └───Minimum security req'd (0-65535)
- │ │ │
- │ │ └───Type of link (0-15)
- │ │
- │ └───The key that selects this topic
- │
- └───Literal `<' character flush left
-
- The 16 types of links currently supported are:
-
- 0. Displays text, doesn't run through metastring converter
- 1. Displays text, does run through metastring converter
- 2. Send command on first text line to DOS
- Link to topic on second text line
- 3. Load new hypertext file named on first text line
- Start at topic on second text line
- 4. Place text from first text line into menu file input stream
- Point to topic on second text line
- Return to menu file called from
- 5. Switch start menu file to name on first text line
- Point to topic on second text line
- Begin reading new menu file
- 6. Paged-read text file named on first text line
- Link to topic on second text line
- 7. Gosub to menu named on first text line
- Link to topic on second text line
- 8. Spawn string on first text line
- Link to topic on second text line
- 9. Exec string on first text line
- 10. Send string on first text line to DOS
- Link to topic on second text line
- 11. Exit at errorlevel indicated on first text line
- 12. Spawn string on first text line, leave FOSSIL hot
- Link to topic on second text line
- 13. Spawn string on first text line, swap if swap is off (reverse
- swap setting)
- Link to topic on second text line
- 14. Spawn string on first text line, save & reload ONLINE.XBS
- Link to topic on second text line
- 15. Send string on first text line to DOS, save & reload ONLINE.XBS
- Link to topic on second text line
-
- Text lines for type 0 and 1 can contain link text in {} brackets which
- will cause it to be reverse highlighted when read to ANSI users (don't
- use the brackets for types 2+). Text lines ending with ; will not be
- cr/lf terminated. "Invisible" links may be put into topic text by
- putting the topic name within [] brackets on a line by themselves, flush
- left.
-
- Additionally, as with XBBS.TXT lines, a leading control character on a
- text line can change its effect:
-
- ASCII value Effect XLate Used
- =========== ======================================= ======= ====
- 2 Put text in menu buffer no no
- 3 Sent to log file yes no
- 4 Printed local only yes yes
- 5 ANSI users only yes no
- 6 ASCII users only yes no
- 11 Gosub to this file yes no
- 14 Paged-read this file yes no
- 15 Send this text to DOS (shell) yes no
- 16 Put text in menu buffer yes no
- 17 Pause until return hit (line ignored) n/a n/a
- 18 Set a new topic and go to it no no
- 19 Clear screen (line ignored) n/a n/a
- 20 Say a prompt no no
- 21 Use line only if twit flag is on yes no
- 22 Use line only if special flag is on yes no
- 23 Read named help from file,topic no n/a
- 24 Read a .MNU menu file no n/a
- 25 Right-justify line no no
- 28 Center line no no
-
- Here's a brief, simple, meaningless sample:
-
- -------------------Cut---------------------
- <Start> S0
- Well, this is the start of the whole thing. From here,
- you can go to the {Middle} or the {End}.
- <Middle> M0
- [Link]
- This here is the middle. You can go to the {Start} or
- the {End}.
- <End> E0
- And, finally, this is the end. You can get back to
- the {Start} or just to the {Middle} from here.
- <Link> L3
- tester2.tpc
- Middle
- <end>
- -------------------Cut---------------------
-
- Hypertext files can contain a maximum of 100 topics. If you don't pass a
- path with the hypertext filename, XBBS figures you put them in
- (BBS's homepath)\HYPER, and if you didn't, it won't read them.
-
- If you're interested in more flexible hypertext files, look for
- XHYPER*.*, written by Ariel Szczcupak of 2:4177/1. This is a
- sophisticated hypertext system written in XBASIC, including source.
-
-