home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / BBS / MISC / XDOC_117.ZIP / XBBS_116.DOC < prev   
Encoding:
Text File  |  1990-12-06  |  66.7 KB  |  1,412 lines

  1.  
  2.         ╔══╗╔══╗╔═════╗╔═════╗╔════╗    ╓──╖   ╓──╖╓──────╖
  3.         ║  ║║  ║║ ┌┐  ║║ ┌┐  ║║    ║    ║  ║   ║  ║║      ║
  4.         ║  ╚╝  ║║ └┘  ║║ └┘  ║║  ╔═╝    ╙╖ ║   ╙╖ ║║ ╓──╖ ║
  5.         ╚╗    ╔╝║    ╔╝║    ╔╝║  ╚═╗     ║ ║    ║ ║╙─╜  ║ ║
  6.         ╔╝    ╚╗║ ┌┐ ╚╗║ ┌┐ ╚╗╚═╗  ║     ║ ║    ║ ║     ║ ║
  7.         ║  ╔╗  ║║ ││  ║║ ││  ║╔═╝  ║     ║ ║    ║ ║     ║ ║
  8.         ║  ║║  ║║ └┘  ║║ └┘  ║║    ║    ╓╜ ╙╖╓╖╓╜ ╙╖    ║ ║
  9.         ╚══╝╚══╝╚═════╝╚═════╝╚════╝    ╙───╜╙╜╙───╜    ╙─╜
  10.  
  11.                             Documentation for
  12.                              -=-= XBBS =-=-
  13.                                  v1.17
  14.           Copyright (c) 1989/90 by M. Kimes -- All Rights Reserved
  15.  
  16.  
  17.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  18.  
  19.                              Introduction:
  20.  
  21.             "Hey...you wanna see somethin' _really_ scary?"
  22.  
  23.    XBBS is a BBS designed for sysops who are more concerned with
  24. flexibility than ease of setup.  If you want something you can run out
  25. of the box, XBBS is not for you.  If, on the other hand, you are the
  26. kind of sysop who likes to constantly tinker, tweak and improve your
  27. setup, or if you want to do something with your BBS that no other
  28. software will allow, XBBS should be the one for which you're looking.
  29. If you're the type who wants to set something up in ten minutes and
  30. forget about it; trash XBBS and get something else.
  31.  
  32. XBBS is written in C (with a dash of assembler), and like C, provides a
  33. great deal of power and flexibility, but puts the burden of telling it
  34. what to do (and ensuring you don't make mistakes) squarely on *your*
  35. shoulders.  If you can't write a decent batch file, delete this archive
  36. immediately and download something simple, like Opus or Sapphire (no
  37. offense meant to the Penguin).  XBBS is not forgiving of novices.  It
  38. will reward you, however, if you have the time and patience to learn to
  39. use it properly. Some programming experience is a definite plus, as XBBS
  40. is basically a weird interpreted language for writing a BBS.  If you can
  41. write a batch file, you can probably use the simpler features of XBBS
  42. (i.e. make it act like a "regular" BBS).  If you can write a BASIC
  43. program, you can probably take advantage of its more sophisticated
  44. features.  Reading the documentation, studying the samples,
  45. experimenting, and plain old work are required.  If you don't like the
  46. sound of that, find a different BBS, please.
  47.  
  48. XBBS was written in an attempt to do two major things:  provide maximum
  49. flexibility and take advantage of DOS's strengths while avoiding its
  50. weaknesses.
  51.  
  52. Remember:  flexibility is a double-edged sword.  "The urge to perform is
  53. no guarantee of talent," as a wiser man than I once said (hey, it could
  54. happen).  It's very easy to make something with XBBS that no one in
  55. their right mind would want to try to use.  It takes work to make a
  56. useable system, and more work still to make an exceptional one.  This is
  57. not to say that you can't write a "maintenance free" BBS with XBBS.  You
  58. can make almost *any* BBS maintenance free with the proper utilities
  59. (despite what some purveyors will tell you as they reach for your
  60. wallet).  But there will be hard work up front, and please don't fool
  61. yourself about that.
  62.  
  63. XBBS was first published in early 1985 as a BBS program for Commodore
  64. 128's.  Since then, it's grown into a series of MS-DOS QuickBASIC and C
  65. doors and finally into an MS-DOS BBS.  It is not affilliated with a
  66. similarly named ?nix product that came out in about 1987 or 1988.  So
  67. much for the history lesson.
  68.  
  69.    Note:  The source code mentioned in this document is included in the
  70. XDEV_116 archive, along with some other goodies programmers may find of
  71. interest and/or use.  Anyone wishing to write utilities for XBBS is
  72. encouraged to do so (and <hint hint> it'd be nice if they were freely
  73. available).
  74.  
  75.  
  76.  --Hardware/Software Requirements:
  77.  
  78.    To run XBBS, you'll need an IBM or close compatible with a minimum of
  79. 256K of RAM (more recommended, especially if you want to run Doors) and
  80. a hard drive.  You'll also need a modem and phone line, and if you
  81. didn't know that, you'd better delete the archive and go back to playing
  82. games...
  83.  
  84. XBBS requires a FOSSIL driver, probably available where you got this
  85. archive.  Three that are in wide use are X00, Opus!Comm and BNU.
  86. Different FOSSILs work differently on different machines; experiment
  87. until you find the combination right for you.  A video fossil is not
  88. required or supported (though it won't hurt if you have one loaded).
  89. ANSI.SYS or similar display driver should be used to interpret escape
  90. sequences; you might want to go with something like ZANSI that doesn't
  91. support keyboard redefinition for security reasons.
  92.  
  93.  
  94. Your CONFIG.SYS file should contain statements similar to these:
  95.  
  96. Files   = 25
  97. Buffers = 15
  98.  
  99. These are recommended minimums.  You could probably slide by with less,
  100. but why be such a tightwad?
  101.  
  102.  
  103. XBBS does _not_ answer the phone; you'll need a front end, or mailer,
  104. like BinkleyTerm or FrontDoor, to get started.  XBBS is geared more
  105. toward BinkleyTerm than FrontDoor because the author uses (and loves)
  106. Bink, and because BinkleyTerm concerns itself with transport layer and
  107. not application layer, whereas FrontDoor wants to meddle in your BBS
  108. files.
  109.  
  110. XBBS has no built-in protocols.  All upload/download protocols are
  111. external.  The most useful is probably DSZ, which should be available
  112. where you got this archive.  Register it.  I understand there is also a
  113. PD package similar to DSZ called PCZ, but I have no experience with it.
  114. The reasons for this are simple:
  115.  1.  Everyone wants the latest version of <name a protocol>.
  116.  2.  It frees me from having to update my version to match the latest
  117.      version of <name a protocol>.
  118.  
  119. XBBS has no built-in text editors.  It supports a line editor,
  120. full-screen editor, local (text editor) editor, and ANSImation editor,
  121. but all must be external.  We recommend LineEd, QuickEd, QEdit and
  122. ANSIEd respectively, though others may work fine for you and we won't
  123. discontinue your non-warranty if you use something else.  Again,
  124. experiment and use what suits you best.  Change whenever the mood
  125. strikes you.  Isn't flexibility great?
  126.  
  127.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  128.  
  129.               "Could you say that again, in English?"
  130.  
  131.  --Disclaimer
  132.  
  133.    XBBS is guaranteed to do nothing more than take up space on your disk
  134.    drive until it doesn't.  We hope that it does more, but don't
  135.    guarantee it.  XBBS is _free_ and isn't necessarily worth more than
  136.    you paid for it.  Under _no_ circumstances will the author be
  137.    responsible for damages incurred from the use, misuse, abuse, overuse
  138.    or failure to use XBBS.  Or for anything else.  You're on your own,
  139.    goodnight...
  140.  
  141.    XBBS is free software.  Donations are accepted but not solicited.
  142.    All rights to this software, however, remain with the author, M.
  143.    Kimes.  I do request that anyone who decides to run the software (as
  144.    opposed to "just trying it out") drop me a line letting me know (just
  145.    want to get an idea how many and where).
  146.  
  147.       >>>>[][][]The EXCEPTIONS to the "free" rule are:[][][]<<<<
  148.  
  149. 1. The use of XBBS as a "pay-for" BBS.  If you charge your users for
  150.    access (or "full" access), you must register XBBS after a 30 day
  151.    trial period for $25.00 or discontinue its use.  If they gotta pay,
  152.    you gotta pay, and it serves you right.
  153.  
  154. 2. The use of XBBS in commercial environments.  Use on more than three
  155.    lines or for advertising, selling, etc. is generally considered
  156.    commercial.  Contact the author for terms.
  157.  
  158. 3. The use of XBBS by government organizations.  Contact the author for
  159.    terms.
  160.  
  161. 4. The use of XBBS by religious organizations (actually falls under
  162.    "commercial environments", and maybe #5 below).  Contact the author
  163.    for terms.
  164.  
  165. 5. The use of XBBS for illegal or immoral (your morals; I ain't got
  166.    none) purposes.  Contact the police for punishment or your priest for
  167.    penance.  Do not pass Go.
  168.  
  169.    XBBS may be freely distributed so long as the contents of the
  170.    archive(s) are not altered in any way (this does not include
  171.    repacking with a different archiver, though I don't much like it, but
  172.    does include removing from, adding to or changing the files in the
  173.    archive).  Do *not* put comments in the archive header.  If we wanted
  174.    comments in the damn header we would have put them there.
  175.  
  176.    You may not charge anything for distributing XBBS, including disk
  177.    fees and time charges.  *If you can't handle it, don't distribute it.*
  178.  
  179.  
  180.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  181.  
  182.  Statement of preferred policy (this is not legal stuff, just the
  183.  author's personal preference regarding the direction of XBBS):
  184.  
  185.   I would greatly prefer to see all programs which work with XBBS remain
  186.   free-for-the-asking or at least fully functional shareware (this does
  187.   not mean public domain, and it does not mean source should be
  188.   available (although source would be nice :-)).  My main concern is
  189.   that there *never* be a product *required* by XBBS that is available
  190.   *only* as a commercial product.  There should always be a free or
  191.   fully functional shareware option.  This is a hobby, right?  Are we
  192.   having fun yet?
  193.  
  194.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  195.  
  196.                           Upgrading:
  197.                           ---------
  198.   Skip this if you're installing (or thinking about installing) XBBS for
  199. the first time.
  200.  
  201.   Anytime you upgrade XBBS, follow these simple rules to avoid
  202. heartache:
  203.  
  204.     1.  ALWAYS run XConfig again and go through each screen.  I don't
  205.         usually bother to write config file converters.  You might want
  206.         to first jot down the # of calls to your system and the next
  207.         user id #, along with any other info you forget easily, from
  208.         your old config with the old XConfig.
  209.     2.  Check XBBS.TXT for added prompts.  Be prepared to have to move
  210.         some of your help prompts (this sucker just keeps growing...).
  211.     3.  Check the archive for anything named CONVERT*.EXE.  Run it if
  212.         you find it for instructions.  As an example, there was a user
  213.         file converter included with one upgrade.
  214.     4.  Run XEdit and see if there are any new fields you might want to
  215.         take advantage of.
  216.     5.  Sometimes added (new) commands don't work just right.  They
  217.         probably weren't used by anyone else to get the bugs out (there
  218.         are so many commands it's hard to actually strenuously use them
  219.         all).  Consider them lagniappe; you were getting by with just
  220.         the old stuff, remember?
  221.     6.  At least skim through COMMANDS.DOC and SPECFILE.DOC.  You should
  222.         probably check the help screens on the utilities to see if they
  223.         have new uses you can take advantage of.  Also look for new
  224.         utilities.
  225.  
  226.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  227.  
  228.                           Quick Setup:
  229.                           -----------
  230.                    "Long live the new flesh."
  231.  
  232.   If you're an impatient type, you're dying to get something running.
  233. Ok, but you don't get much with no work.  First, you'll need to create
  234. some directories.
  235.  
  236.  
  237.                         About Directories:
  238.  
  239.    As with almost any BBS software for MS/DOS machines, you're going to
  240. have to make some directories to house different parts of the BBS.  Here
  241. is the setup we recommend (the sample menus are geared toward it):
  242.  
  243. C:\XBBS             "Root" directory for the BBS
  244. C:\XBBS\MENU        Directory for *.?BS menu text files
  245. C:\XBBS\MENU\BULLS  Optional directory for intro files and Rules files
  246.                     in Bulls-mode
  247. C:\XBBS\MESS        Directory for message area files
  248. C:\XBBS\NEWS        Optional directory for news files
  249. C:\XBBS\XPORT       Optional directory for exported mailpackets for users
  250. C:\XBBS\MPORT       Optional directory for incoming mailpackets from users
  251. C:\XBBS\FORCE       See discussion under XUser.EXE
  252.  
  253. Menu files with .XBS extensions are looked for in the Menu directory
  254. (unless you include a path when you call them).  There's more in-depth
  255. information on creating directories later in this file.  If you have no
  256. idea how to make a directory with MS-DOS, you're probably not ready to
  257. run a BBS.  KEEP YOUR PATHS SHORT.  DOS command lines are limited in
  258. length.
  259.  
  260.   Next steps:
  261.  
  262. 1.  Run XConfig in the BBS root directory.  Go through each screen of
  263.     each option.  Use F1 for help.  This creates the configuration files
  264.     CONFIG.BBS and NEWUSER.BBS.
  265. 2.  Run XEdit.  This edits your external up/download protocol records,
  266.     message and file areas, creating the configuration files for each.
  267. 3.  Run LOGON (just type LOGON at the DOS prompt).  If you haven't copied
  268.     the sample menus into the menu directory, you'll get Ijit mode after
  269.     you finish your 'newuser login'.  Probably not much you can do with
  270.     an empty BBS, but you've started.  Now finish reading the docs to find
  271.     out how you can make XBBS do most anything you can envision.
  272.  
  273.  
  274.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  275.  
  276.                     "220, 221, whatever it takes."
  277.  
  278.                            Utilities First:
  279.  
  280.   Overview:
  281.   --------
  282.   XConfig is your configuration editor.  It creates the files
  283. CONFIG.BBS and NEWUSER.BBS.  CONFIG.BBS contains information about
  284. things like what your directory structure looks like, what your Fidonet
  285. address is, how you want some things in XBBS to look.  NEWUSER.BBS
  286. contains information used by the login routine; which questions to ask,
  287. what level to start a new user at, and so forth.
  288.  
  289.   XEdit edits some of the various control files that XBBS can use.  A
  290. message area look-up file, file area look-up file, and the external
  291. protocol control file are included in these.
  292.  
  293.   XUser edits your user file.  You can even edit the current (online)
  294. user with it (if you need to do in-depth editting; minor editting is
  295. available in the BBS itself).
  296.  
  297.   All the above can be installed on ALT-# keys (keys which can cause an
  298. external program to be invoked while the BBS is active).  In this way,
  299. XBBS serves as a BBS manager, creating a homogenous environment with
  300. which you can design your own uniquely tailored BBS.
  301.  
  302.   XMsg is the message base maintenance program.  It's probably best to
  303. run it once in a while in a scheduled event from your mailer, late at
  304. night.  It packs out deleted messages and maintains areas at set maximums
  305. or by date, among other things.
  306.  
  307.   Indexer should be run anytime you edit the XBBS.TXT prompt file
  308. (XBBS.TXT contains most of the 'standard' text that XBBS spits out,
  309. allowing you to totally customize or convert to foreign languages).
  310.  
  311.   XST is the XBBS Scanner Tosser for Fidonet net/echomail.  It is
  312. written by Wayne Michaels.  XST is in a separate archive!  It is freely
  313. available to non-commercial systems (read its license).
  314.  
  315. The above are the only 'required' utilities.  All the others are just to
  316. make things easier for you, or to let you do things that might be
  317. difficult or even impossible otherwise.  I have included most of the
  318. other utilities in the main archive because, frankly, if you're planning
  319. on running XBBS you must be a power sysop and will probably have need of
  320. some of the things these utilities can do for you.
  321.  
  322.  
  323.                             In Detail:
  324.  
  325.  --XConfig
  326.  
  327.    Most of the features in XConfig are self explanatory; just hit the F1
  328. key for help.  If you've got a mouse, load the rodent's driver.
  329.  
  330. The feature "Run ANSI through BIOS" is an option for people running
  331. Fansi, or some other ANSI replacement that traps BIOS routines for ANSI
  332. output. If you are using Fansi and want this option, you must specify
  333. /M=1 in the Fansi command line in Config.Sys.
  334.  
  335. XConfig should be run in the directory which will be XBBS' "home", with
  336. XConfig.HLP in the same directory or on your DOS path.  It creates two
  337. files, CONFIG.BBS and NEWUSER.BBS.  These are your standard and logon
  338. configuration files, respectively.  You can rerun XConfig to make
  339. changes anytime you want (even while someone is online, _if_ XBBS is
  340. temporarily removed from memory, as when another program is Exec'ed).
  341. For multi-node use you'll need to create CONFIG?.BBS by copying
  342. CONFIG.BBS's...a point only for the advanced.
  343.  
  344. XConfig can also be run with the argument IN or OUT to change the
  345. SysOp's status (intended for use from a batch file in conjunction with
  346. mailer events).  Source code is _not_ included, as the window library I
  347. used is from "Turbo C Memory-Resident Utilities, Screen I/O and
  348. Programming Techniques", an excellent book from MIS: Press by >>Al
  349. Stevens<<, and is not PD.  If you're interested in the source and can
  350. send me _proof_ you purchased the book, we can work something out.
  351.  
  352.  
  353.  
  354.  --XMsg
  355.  
  356.    XMsg is the program that maintains the XBBS message areas.  It must
  357. be run in the BBS' "home" directory, as it reads CONFIG.BBS to find out
  358. where the message bases are, and needs to update the last message read
  359. pointers in LASTREAD.BBS.  It is recommended that you run XMsg nightly
  360. to compact your message bases, removing deleted messages and other
  361. special functions you may want to invoke.  It's not good practice to run
  362. XMsg while anyone is online, as it'll probably mess up the last message
  363. read pointers.  Source code is included.  See CLEAN.BAT in the
  364. distribution archive for examples.  XMsg is rather spartan at this time;
  365. if you're a programmer, you might consider contributing to the cause and
  366. beefing it up.
  367.  
  368. For those who are mildly interested, XBBS keeps its message bases in two
  369. files per area: XDATA.### and XTEXT.###.  XDATA is a random file
  370. containing FidoNet-like headers.  XTEXT is a binary file containing the
  371. actual message text.  If a file gets hopelessly corrupted, the worst you
  372. can do is lose one area.  However, you do not have thousands of
  373. individual *.MSG files lying around everywhere.  Details of the
  374. structures can be found in MSG.H in the XDevelop archive.
  375.  
  376. Usage:
  377. XMsg -A<action filename>
  378. XMsg -P [LoBd#] [HiBd#] (options) Packs out deleted messages
  379. XMsg -T [LoBd#] [HiBd#] [#mess] (options) Trim to specified #
  380. XMsg -D [LoBd#] [HiBd#] [#days] (options) Delete older than # days
  381. XMsg -R [LoBd#] [HiBd#] (PRIVATE) (options) Deletes received messages
  382. XMsg -K [LoBd#] [HiBd#] (options) Kills Junk msgs by (options)
  383.  
  384. (XMsg operations take place on all boards between [LoBd#] and [HiBd#])
  385.  
  386. Options (separated by a space if more than one is used):
  387. B (delete backups after packing is complete)
  388. V (verify deleted messages present before packing)
  389. D (don't pack this pass--valid for -T, -K and -D commands only)
  390. M<message path> (Path to msg bases) *
  391. N<#LMRs> (Number of Last Message Read pointers kept in LASTREAD.BBS) *
  392. F<fromname> (From string for killing junk)
  393. T<toname> (To string for killing junk)
  394. S<subject> (Subject string for killing junk)
  395. P (check for Subject string anywhere in msg subject)
  396. A (if any kill junk criteron matches, kill it)
  397. C<#bytes> (compress message >#bytes while packing; default 1K)
  398. U<#bytes> (uncompress messages while packing)
  399.  
  400. XMsg is sensitive to the order of its arguments.
  401.  
  402. An XMsg action file will be used if the -A argument is passed.  This
  403. action file would contain lines of commands.  See sample XMSG.CTL in
  404. samples in doc archive.
  405.  
  406. BTW, the Kill junk option in XMSG (and XHMS and HeadEdit) doesn't
  407. necessarily mean I support censorship.  Remember, this is a hobby.  If
  408. someone keeps spouting crap in echoes, don't put up with it.  Delete the
  409. messages before you read them.  This will keep your temperament on an
  410. even keel and your bloodpressure down, and keep the hobby fun.  I mean,
  411. it's not like there's not plenty of stuff to read anyway, right?  Just
  412. remember *not* to delete messages before passing them up/downstream.
  413.  
  414.     * Fields optional or ignored if you have a CONFIG.BBS in current directory.
  415.       They are mainly for a HeadEdit running as a point sans XBBS.
  416.  
  417.  
  418.  --XScan
  419.  
  420.    XScan is used to import/export messages from/to your XBBS message
  421. areas from/as *.MSG files for use with things like GroupMail and UFGate
  422. that can only work with *.MSG files.  This is a "kludge".  XST should
  423. normally be used for net/echo mail processing.  XScan is
  424. application-layer-to-application-layer (X*.### to *.MSG), whereas XST is
  425. application-layer-to-transport-layer (X*.### to *.PKT (*.OUT)).
  426.  
  427. XScan requires either an -Import or -Export (or both) on the command
  428. line to function (there are other options--type XSCAN with no arguments
  429. for a list).  It also requires a configuration file in the following
  430. format:
  431.  
  432.           First line: Path_to_XBBS_message_areas
  433.     Subsequent lines: Area# Directory Area_Tag
  434.  
  435. When XScan runs, it imports all *.MSG files from 2.MSG upwards into your
  436. XBBS message bases, then exports any messages waiting to go out as *.MSG
  437. files.  You should immediately process the *.MSG files left after an
  438. export and then delete all *.MSG files in the directories, or they will
  439. be imported on the next run (not to mention wasting space).  There is a
  440. special Area_Tag *NETMAIL* which can be used to import/export a netmail
  441. board (high water marks are not skipped/deleted in that case).
  442.  
  443. XScan can fill in incomplete (read "brain-damaged type 2") message
  444. headers from kludge lines, and does so as the default.  This means XBBS
  445. will display the Zone and Point information correctly without having to
  446. read the message first, and makes processing a little faster when
  447. reading.  XScan always "treats" messages as it imports them (removes
  448. soft CR's and linefeeds, which are useless junk some brain-dead software
  449. pollutes the net with).
  450.  
  451.  
  452.  
  453.  --XUser
  454.  
  455.    XUser is your user editor.  Again, it must be run in the "home"
  456. directory.  XUser lets you change most of a user's parameters.  In
  457. addition, it has some special command line arguments that cause it to
  458. act in different ways (type XUser ? at the DOS prompt for a quick
  459. reminder).  XUser DOS will invoke XUser writing through stdout for
  460. remote usage with CTTY or GateWay.  XUser PACK will invoke XUser to pack
  461. out deleted users (intended for use from a batch file).  XUser DAYS #
  462. will pack out users who haven't called for # days (also intended for use
  463. in a batch file).  To invoke XUser in its standard local mode, just type
  464. XUser.  Source code is included so you can see how to manipulate the
  465. user files.  Take a look at CLEAN.BAT again for example of batch file
  466. usage.
  467.  
  468. You can play one fancy trick with XUser.  First, install it as an Exec
  469. from an ALT-# key.  Then, use that key while a user whose parameters you
  470. want to modify is online.  Press F6 to edit the online user (his
  471. parameters in ONLINE.XBS).  When you return to XBBS, it will reload the
  472. user's parameters from ONLINE.XBS, and the changes will become
  473. permanent.  This allows you to modify things you normally couldn't from
  474. XBBS while a user is online.  The F6 key is _only useful when a user is
  475. online and you are _out_ of XBBS_ as it writes directly to ONLINE.XBS in
  476. that case, instead of the USERS.BBS.
  477.  
  478. There's a second page for each user; hit ? while at the Command: prompt
  479. to get more info.  Note that the "User id: <8-digit hex #>.<3-digit #>"
  480. is a filename you can use to "force" messages to be read to a user at
  481. logon.  Just create a directory called FORCE off of your BBS' home
  482. directory and edit a file by the appropriate filename.  It'll be deleted
  483. after the user finishes reading it.
  484.  
  485.  
  486.  
  487.  --HeadEdit
  488.  
  489.   HeadEdit is a local message reader that uses windows and other fancy
  490. gimmicks.  It's highly recommended that all XBBS sysops get and use a
  491. copy.  Load that rodent driver...
  492.  
  493. Note that HeadEdit is for sysop-use only (or for a point).  Don't try to
  494. use it or allow its use as an offline >user< reader!  Use XHMS for that.
  495. HeadEdit allows total control over your message areas; XHMS has built-in
  496. limitations so users can't do things they're not supposed to be doing.
  497.  
  498. IT IS STRONGLY RECOMMENDED THAT YOU GET AND USE HEADEDIT.  Without it,
  499. as a sysop, you're crippled.
  500.  
  501.  
  502.  
  503.  --XPort
  504.  
  505.    XPort is a small program that eXPorts a message as a text file.  Type
  506. XPort with no arguments for a list of what you need to tell it.  Note
  507. that XPort will not overwrite an existing file.  XPort is intended to be
  508. used from within XBBS as a spawned program, but can be used from the
  509. command line.  Since XPort can create a *.MSG file from the message
  510. exported, you can utilize existing analysis utilities based on that old,
  511. slow format.  Source code is included so you can see how to manipulate
  512. the message bases.  There's another program (in source only) in the
  513. archive called XMove.  I've had no chance to test it, but some intrepid
  514. programmer out there might want to compile, check and fix it up for
  515. general use.
  516.  
  517.     Usage: XPort <directory\> <base#> <msg#> <filename> <net> <width> <MSG>
  518.  
  519.  
  520.  --XProto
  521.  
  522.    NOTE:  It's advised that you use XEdit instead of XProto, but some
  523. advanced automation routines might find XProto useful.
  524.  
  525.    Remember we said that XBBS has no built-in protocols?  XProto is the
  526. utility that will convert a text file into a PROTOCOL.CTL file, which
  527. XBBS uses to figure out what external protocols you have available, and
  528. how to call them.  Take a look at Protocol.TXT in the archive; this is
  529. the raw text file that was used to create the enclosed Protocol.CTL
  530. file, also in the archive.  Modify Protocol.TXT to your liking and run
  531. XProto on it (XProto Protocol.TXT).  Save a copy of the raw text files
  532. to facilitate making changes later.  Protocol.CTL is not easily
  533. human-editable.  The included files support DSZ, MultiLink, CLINK
  534. (SeaLink), Super8K, JModem, and others.  Source code for XProto is
  535. included for whatever use you can make of it.
  536.  
  537. Here's a typical entry in PROTOCOL.TXT with comments.  Don't include the
  538. comments:
  539.  
  540. ZModem                                    ;Protocol label
  541. Z                                         ;Key to select protocol
  542. 85                                        ;Protocol efficiency
  543. C:\XBBS\DSZ.COM port *p restrict D sz *F  ;Download string
  544. C:\XBBS\DSZ.COM port *p D rz -y *F        ;Upload string
  545. type a dozen CTRL-X's                     ;Abort string
  546. Y                                         ;Wildcards? (Y or N)
  547. Y                                         ;Multiple filenames
  548. N                                         ;Simultaneous u/d (not used)
  549. Y                                         ;Will use a "list" file
  550. Y                                         ;Filename(s) sent by remote*
  551. Y                                         ;Uses DSZLOG*
  552. N                                         ;Always N (future)
  553. N                                         ;Always N (future)
  554.  
  555.  
  556. The two items marked with an asterick (Uses DSZLOG and Filename(s) sent
  557. by remote) are implemented but not thoroughly debugged; use with care
  558. and discontinue if you run into problems.
  559.  
  560. When using DSZLOG, the DSZLOG environment variable must be set *and* the
  561. string "DSZLOG" must appear in the filename
  562. (i.e. SET DSZLOG=C:\XBBS\DSZLOG.LOG).
  563.  
  564. Note that in the above Download and Upload strings, *F gets replaced
  565. with the name(s) of the file(s) to be uploaded/downloaded.
  566.  
  567. Again, it is recommended that you use XEdit instead of XProto.  It's a
  568. hell of a lot easier for most applications.
  569.  
  570.        Usage:  XProto <file-to-convert>
  571.  
  572.  
  573.  
  574.  --XEdit
  575.  
  576.    An easier way to handle PROTOCOL.CTL is to use XEdit.  It can edit
  577. MSGAREAS.XBS, FLSEARCH.CTL, PROTOCOL.CTL and PEEKER.CTL files in an easy
  578. fashion (local use only).  It can even make message area and file area
  579. menus for you to customize (okay, if you're still here, you deserve a
  580. little encouragement; but don't let it go to your head).  Source is
  581. available in the XEDIT.LZH archive.  Don't forget you can put XEdit.HLP
  582. anywhere on your DOS Path, and XEdit can find it.
  583.  
  584. Note that PEEKER.CTL is a file used by my Peeker program, an archive
  585. viewer/disassembler.  It isn't required by XBBS itself, so don't bother
  586. making one unless you're running Peeker as a Door.
  587.  
  588.  
  589.  
  590.  --XLog
  591.  
  592.    XLog will read USERS.BBS and create the appropriate files for
  593. "instant logon".  Normally this would be for the local sysop to bypass
  594. the standard login procedure, but there are other uses.  Run from the
  595. default directory without arguments, XLog creates the files for user #1
  596. at 0 baud (local), and displays the arguments it will accept for other
  597. uses.  Note that if you pass a user name to XLog instead of a user
  598. number, you must separate the first and last names with an underline
  599. instead of a space.  XLog will then search the user file for user name
  600. (it'll put the space back in) and exit with 254 (serious error or
  601. locked-out user), 253 (couldn't find the user), or 0 (user found, files
  602. created, ready to run XBBS).  Source code is included so you can see how
  603. a user logs on, how exit files are created, etc.  Judicious use of XLog
  604. and Logon can allow you to run XBBS as a door from another BBS with a
  605. minimum of user logon time.
  606.  
  607.         Usage: XLOG <user#/user_name> <baud> <timetoevent> <other args>
  608.  
  609.  
  610.  
  611.  --MessChek
  612.  
  613.    This program is invoked each time a message is entered (if it can be
  614. found in the default directory...leave it out if you don't want to use
  615. it).  It should check the message for whatever criterion you like (I
  616. have mine check for ALL CAPS messages) and return either errorlevel 0
  617. (no errorlevel) or errorlevel 3 (failed message check).  Messages which
  618. fail the check are dumped. I have included the source for the
  619. caps-checking program.  Write your own in any language and incorporate
  620. it in your system.  You could use this hook for other purposes, too,
  621. like an online spelling checker.  Use your imagination.  Note that this
  622. program is *not* required.
  623.  
  624.  
  625.  
  626.  --Indexer
  627.  
  628.    This little program just indexes the prompt file(s) XBBS.TXT (and
  629. XBBS.GXT for ANSI users, if you use it; not really necessary).  XBBS.TXT
  630. is a file of text prompts separated by ASCII 1's (CTRL-a's).  Lines in
  631. the prompt file serve various purposes.  Lines which do not contain a
  632. special leading character (a control character from 1-17) are simply
  633. displayed (they run through the metastring translator first).  Here are
  634. how the special leading characters in XBBS.TXT affect the lines (note
  635. that XLate refers to whether or not metastring translation takes place,
  636. and Used refers to whether or not the leading character is retained in
  637. the output string):
  638.  
  639. ASCII value     Affect                                   XLate    Used
  640. ===========     =======================================  =======  ====
  641.  2              Used internally; be very careful!          no      no
  642.  3              Sent to log file                          yes      no
  643.  4              Printed local only                        yes     yes
  644.  5              Use for ANSI users only                   yes      no
  645.  6              Use for ASCII users only                  yes      no
  646. 11              Gosub to this file                        yes      no
  647. 14              Paged-read this file                      yes      no
  648. 15              Send this text to DOS (shell)             yes      no
  649. 16              Used internally; be very careful!         yes      no
  650. 17              Pause until return hit (line ignored)     n/a      n/a
  651. 18              Load a topic file (not reentrable!)       yes      no
  652. 19              Clear screen (line ignored)               n/a      n/a
  653. 20              Use only if expert flag not on            yes      no
  654. 21              Use only if twit flag is on               yes      no
  655. 22              Use only if special flag is on            yes      no
  656. 23              Read named help from file,topic           no       n/a
  657. 24              Read .MNU menu file                       no       n/a
  658. 25              Right-justify line                        yes      no
  659. 28              Center line                               yes      no
  660.  
  661. Indexer must be used to reindex this file after you have made
  662. customizing changes, which you are encouraged to do.  Be very careful
  663. with lines containing things like %s, %u, %lu, etc...you might want to
  664. leave them alone.  They are used as format strings for C functions; even
  665. changing the length of these can produce a crash.  If you've got a good
  666. knowledge of C, you'll know what to do...  Note that XBBS' help system
  667. (which can, and probably should, be customized) starts at prompt #501,
  668. and space for sysop-defined help starts at #601.
  669.  
  670.  
  671.  
  672.  --XGateKpr
  673.  
  674.    This is the GateKeeper for XHMS, the offline reader for users. XBBS
  675. will pack up netnode.MAL for the user in .\XPORT and receive
  676. netnode.RPK in .\MPORT.  XGateKpr should be run when a file is detected
  677. in .\MPORT after a user gets offline from the XBBS directory.  It gets
  678. the user's number from CONFIG.BBS and merges the replies into the BBS
  679. message bases.  Source is included.  If you'd like to write an offline
  680. reader for XBBS, feel free to use this source as a guideline (or steal
  681. it _if_ your reader is free).  Obviously, if you aren't allowing export
  682. of mail packets, you don't need XGateKpr.
  683.  
  684.  
  685.  
  686.  --XBASIC
  687.  
  688.   XBASIC is a sorta-BASIC interpreter that understands XBBS file
  689. structures.  With it you can change things that even XBBS won't let you
  690. change.  It can also handle ISAM database files.  I'd recommend this as
  691. an addition to any serious XBBS sysop.
  692.  
  693.  
  694.  
  695.  --Log
  696.  
  697.   Log makes entries to a logfile that match the way XBBS makes them.
  698. Just call
  699.             LOG <Filename> Text to go to logfile
  700. and Log makes the entry, including the time and date.
  701.  
  702.  
  703.  
  704.  --A word about text editors
  705.  
  706.   Editors should return errorlevel 1 for abort, errorlevel 2 for idle
  707. timeout, or no errorlevel if everything is fine.  This is in line with
  708. the way QuickBBS interprets returns from its editors, which means you
  709. should be able to use QuickBBS-compatible editors with XBBS (and
  710. vice-versa).  Note that *all* editors are external in XBBS, even the
  711. line editor.  This lets you change editors as new and better ones become
  712. available, or just to suit your changing fancy.
  713.  
  714. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  715.  
  716.                "Demons to some, angels to others..."
  717.  
  718.                              The Guts:
  719.  
  720.     XBBS comes in two flavors, Logon0, and Logon. Logon0 is for 808x
  721. machines; Logon is for 80x86 machines.  They are functionally
  722. equivalent, but the 80x86 version is marginally smaller and faster.
  723. Complete source code for Logon is _not_ included.  I taught myself C
  724. while writing this...
  725.  
  726. There is no longer an "XMain" program.  Logon is now overlayed.  As with
  727. all overlayed programs, installation on a RAM disk is recommended for
  728. speed since the program loads pieces of itself while running.  Also,
  729. since the overlay manager is pretty dumb, you can't rename the program
  730. unless you use a sector editor (PCTools, Debug, etc.) to change the
  731. filename embedded in the program itself.  Logon must be in the current
  732. directory or on the DOS Path to be able to find itself.  I'd suggest
  733. putting it on the Path in case you switch directories accidentally.
  734. BTW, I keep a non-overlayed version floating around here available for
  735. file request if you have extreme problems (XNON_???.LZH).
  736.  
  737.  --Arguments for Logon:
  738.  
  739.    Arguments to Logon have no preceding identifiers.  They must be given
  740. in the following order:
  741.  
  742. Baudrate (0=local, default)
  743. Time_to_event (in minutes, no event default)
  744. Node_Number (1 default)
  745.  
  746. You should ALWAYS run Logon first with these parameters!  This is where
  747. your user logs onto the BBS, and where the file ONLINE.XBS is created,
  748. which Logon uses to tell who's online and what their stats/ preferences/
  749. security clearance is.  The only exception would be if you are doing
  750. something fancy with XLOG--it's up to you to figure that out if you feel
  751. the urge.
  752.  
  753. If you rerun Logon with a -R argument, Logon assumes that there is
  754. already a user online and that a valid ONLINE.XBS exists (it will be
  755. very peeved if one doesn't).  You can also pass a -N argument if you are
  756. using -R, where a number follows the -N to indicate the node number.  To
  757. recap, when Logon is run with a -R argument, it behaves as if a user is
  758. already online:
  759.  
  760.  -R<start_menu>  Logon starts up with a text file called START.XBS.  If
  761.  you use the -R argument without <start_menu>, Logon uses MAIN.XBS as
  762.  the starting file.  If you use -R<start_menu>, Logon will start up with
  763.  <start_menu> as the starting menu file.
  764.  
  765.  -N#  Logon will assume node number # if started with this argument.
  766.  Node #1 is the default.
  767.  
  768. Any arguments beyond these initial arguments are copied into the XBBS
  769. variables starting with variable 0 and proceeding to variable 9.
  770.  
  771. Please note that although XBBS allows entry of a node number, there's no
  772. guarantee at this time that multiple nodes will get along well.  That's
  773. because I don't multitask.  Use multiple nodes at your own risk (but let
  774. me know if you encounter bugs; I'll try to fix them).  With swapping
  775. turned on, you can easily run XBBS in a 256K partition (depending on
  776. your Doors, of course).  XBBS does use SHARE-compatible file i/o and
  777. locks message areas when writing to them.
  778.  
  779.  
  780.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  781.  
  782.                "Whatever you do, don't go to sleep."
  783.  
  784.                                Setup
  785.  
  786.    In setting up, you have to decide on three paths for the BBS to find
  787. and put information. These are:
  788.  
  789.                         ---------------------
  790.  
  791.   1) Message Path -- This is where XBBS will put the messages entered on
  792. the system. Each message base is in two files, one for header information,
  793. and the other for actual message text.  Structures and sample code are
  794. in the XbbsDEVelopers archive.
  795.  
  796.   2) Menu Path -- This is where XBBS will look for its menus. Logon will
  797. startup looking for START.XBS (and switch to MAIN.XBS if it can't find
  798. START.XBS) when run with the -R parameter, but you can specify another
  799. by following the -R switch at startup (defaults to MAIN.XBS if you don't
  800. put a filename immediately after the -R).  If XBBS is looking in the
  801. menu path for a file that has a .XBS extension, and finds a .GBS of the
  802. same rootname, it will read that to ANSI users.  You might also want to
  803. create a sub-directory from this directory (should be called BULLS) for
  804. the Intro/Rules files for the message areas you create using the
  805. Bulls-mode option (see textfiles section for further explanation)
  806.  
  807.   3) BBS Path -- This just tells XBBS where it will find its files,
  808. such as the users file, config file, etc.
  809.  
  810.   Once you have these set up (in XConfig under Paths) and have made the
  811. directories, you will need to make a batch file to run XBBS.  This can
  812. be the same batch file that controls your mailer or a separate batch
  813. file just for XBBS, but remember that a mailer or front-end is required,
  814. as XBBS does not have a way of answering the phone by itself .  When the
  815. mailer exits, you must specify the baud rate to Logon.  After the user
  816. logs in, Logon will make the appropriate files to remind itself (if you
  817. exit and restart with -R) who the user is.  It also makes the
  818. USERINFO.XBS for XBBS Doors, and LASTUSEx.BBS, DORINFOx.DEF and DOOR.SYS
  819. for other Doors. The best way to set this up is have Logon get the
  820. user's name, and then jump into a loop in which Logon is called each
  821. time the loop exits with a -R argument, unless the errorlevel is 253 or
  822. greater.
  823.  
  824. -----------> Sample part of simple RUNBBS.BAT <-----------
  825. REM The front end must determine baud rate so you can use it to jump
  826. REM to the appropriate label in the batch file (in this application)
  827. REM If 2400 baud, the batch file would begin at the label 2400Baud,
  828. REM if 0 baud begin at label Local, etc.
  829.  
  830. :2400Baud
  831. REM Switch to BBS directory
  832. CD\XBBS
  833. REM Invoke Logon at 2400 baud, no event scheduled, node #1
  834. LOGON.EXE 2400
  835. REM After logon, go to the errorlevel test
  836. goto AfterX
  837.  
  838. :1200Baud
  839. CD\XBBS
  840. LOGON.EXE 1200
  841. goto AfterX
  842.  
  843. :300Baud
  844. cd\XBBS
  845. LOGON.EXE 300
  846. goto AfterX
  847.  
  848. :Local
  849. cd\XBBS
  850. LOGON.EXE 0
  851. goto AfterX
  852.  
  853. :AfterX
  854. REM Trap errorlevels 253 and higher; end program
  855. IF ERRORLEVEL 253 GOTO Start
  856. REM If errorlevel was 80 that might be your cue to run a Door
  857. REM You could have several traps here...
  858. if ERRORLEVEL 80 goto RunaDoor
  859. :Restart_X
  860. REM Restart XBBS at menu/file YOUBACK.XBS
  861. Logon.EXE -RYOUBACK.XBS
  862. REM Reloop to test after exit in case a door was Exec'd or is being
  863. REM exitted to with a specific errorlevel
  864. GOTO AfterX
  865.  
  866. -----------> End Sample <----------
  867. (There are more samples in the distribution archive)
  868.  
  869.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  870.  
  871.                              "Aw, Andy..."
  872.  
  873.                               Ijit-mode
  874.  
  875.   If you're in a hurry to see how little XBBS will do if you don't
  876. create some menus, switch to the BBS directory and type LOGON (after
  877. running XConfig and without any menus in your menu directory).  Here
  878. comes Ijit-mode...  Remember, you get what you pay for (in terms of time
  879. and labor spent working on your BBS).  If you're happy with Ijit-mode,
  880. fine; you've got a no-work, ready-to-run BBS.  But ask yourself this
  881. question: why aren't you running Opus?  It'll answer the phone and
  882. exchange mail, too...
  883.  
  884. Okay, okay, let's assume that you want to get started with XBBS right
  885. away and build your menus as you go along (not a bad idea, really), so
  886. you want to start with Ijit-mode.  First, Ijit-mode is invoked when XBBS
  887. can't find a MAIN.XBS in the menu directory.  Ijit-mode has very few
  888. commands; however, most of them lead to submenus with more commands (a
  889. tree structure).  It's designed to be simple to use, not flashy.  (Be
  890. sure you edit XBBS.TXT prompt #208 so the usual error message (Can't
  891. find MAIN.XBS) doesn't get flashed at your users.)
  892.  
  893. You can customize Ijit-mode quite a bit.  XBBS.TXT prompt #453 contains
  894. the characters used as command keys.  You can edit that prompt line to
  895. change which keys invoke which functions.  Prompts #448 and 454 may also
  896. be of interest for cosmetic changes.  Don't forget that a prompt can
  897. tell XBBS to read a menu file...
  898.  
  899. Next, the asterick [*] will read a file called IJITXTRA.XBS if it can
  900. find one, allowing you to add (a) command(s) without disturbing anything
  901. else (there are corresponding *XTRA.XBS files for Bulls-mode, Files-mode
  902. and Door-mode--see SPECFILE.DOC).  Before executing several of the
  903. built-in commands, XBBS will attempt to read a menu file that you can
  904. create; this is a way of superceding the built-in commands.  For
  905. instance (using the default XBBS.TXT prompt #453 in this discussion), if
  906. you make a file called MSGS.XBS in the menu path, XBBS will read it if
  907. the user presses [M] instead of invoking Bulls-mode (the default
  908. action).  [F] looks for FILES.XBS instead of invoking Files-mode, [D]
  909. for DOORS.XBS instead of invoking Door-mode, [C] for CONFIGUR.XBS, and
  910. [Q] for LOGOFF.XBS.  (Quick note: XEdit can create FILES.XBS and
  911. MSGS.XBS for you to customize)
  912.  
  913. Other quick customizing you can do might involve goto/gosub files.
  914. These are files that XBBS can be told to read when certain keypresses
  915. are detected (most anywhere!).  XConfig lets you setup up to ten of
  916. each.
  917.  
  918. A final, more advanced trick, is available.  Refer to the comment at
  919. XBBS.TXT prompt #453 for information.  If you get to this point, you
  920. should probably just consider breaking down and writing a MAIN.XBS like
  921. the big boys (see "Basic Menu-Making" below).
  922.  
  923.   * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  924.  
  925.             "I believe the law of conservation of momentum
  926.                    is very important...don't you?"
  927.  
  928.                         Special Local Keys:
  929.  
  930.     XBBS has several special local-only keys.
  931.  
  932.     ALT +:          Add to user's time
  933.     ALT -:          Subtract from user's time
  934.     End:            Toggle status line
  935.     Home:           Display a list of local keys
  936.                     (XBBS.TXT prompt #345)
  937.     ALT-B:          Bail out (end XBBS, don't update files)
  938.                     (XBBS.TXT prompt #2)
  939.     ALT-C:          Enter and exit cheap chat mode
  940.                     (XBBS.TXT prompts #190-191)
  941.     ALT-G:          Ring a bell on the remote's system
  942.     ALT-J:          Jump to DOS
  943.                     (XBBS.TXT prompts #3-5)
  944.     ALT-O:          Pop-up options window
  945.     ALT-U:          Pop-up user editor
  946.     CTRL-ALT-DEL:   For those really sticky situations
  947.     BRS:            When CAD just won't do.
  948.  
  949.     CTRL-HOME and CTRL-END perform the functions you might expect
  950.     HOME and END to perform in pop-up windows.
  951.  
  952.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  953.  
  954.               "Beat 'em or burn 'em; they go up pretty easy."
  955.  
  956.  --Security
  957.  
  958.   It's a fact of SysOp's lives...just as soon as you finish a great BBS
  959. system, some jerk will come along and try to crash it.  There's no way
  960. to make a BBS truly crash-proof (other than disconnecting the modem),
  961. but there are some common sense things you can do (or not do) to make
  962. things as secure as possible.
  963.  
  964. First, _never_ allow an upload from anyone other than yourself to enter
  965. the menu or BBS directories.  The reasons for this should be obvious;
  966. suppose someone uploaded a menu file and the BBS read it...XBBS will do
  967. almost anything with those embedded commands, like drop them to DOS with
  968. remote control, format your hard drive, or write a confession letter on
  969. the printer to your wife.  Not the sort of thing you want to have
  970. happen.  So play it safe and don't give anyone access to those areas.
  971.  
  972. XBBS will decline uploads of files with names beginning with "FILES." or
  973. ending with ".BBS" or ".GBS".  FILES.BBS couldn't hurt you (and
  974. FILES.GBS would be ignored), but it might allow a hacker to insult your
  975. users with "your name," so to speak, and any attempt to upload a
  976. matching file will log the user off, increase his violation count (like
  977. dropping carrier would), and leave you a note in the file.  I suggest
  978. you watch anyone who tries that like a hawk.
  979.  
  980. Never let XBBS read a file uploaded by a user unless you disable
  981. embedded commands first, or use the paged reading method.  Check any
  982. user-submitted files thoroughly before allowing reading with the
  983. interpreter, probably doing a search for ^A and eliminating any you
  984. find.  If you find any ^A sequences that just happen to be XBBS embedded
  985. command sequences, it's probably not a coincidence, and the user will
  986. bear careful watching.
  987.  
  988. Put a double password on your account if it's called remotely (just
  989. check for your name, check for a baudrate > 0, and then ask for a
  990. second password).  If someone was visiting and sneaked a peek at your
  991. primary password (the one Logon requests), the second password (via
  992. embedded commands) will stop them.  Remember to add a note to the
  993. logfile and hang up on them when they fail the test, then change both
  994. passwords (and probably lock the user out if you know who it was).
  995.  
  996. If you allow users to utilize offline readers to enter messages at home
  997. and upload them (or even if you don't), check your message areas now and
  998. then for abuse, PARTICULARLY Matrix areas.  There's only one way to
  999. really prevent someone from entering abusive messages; don't give them
  1000. access to the message areas.  Use your judgement, but don't get kicked
  1001. out of the net because you were too lenient with someone who has
  1002. demonstrated that they were not going to abide by your rules.
  1003.  
  1004. Above all else, use your common sense.  If you have extra, send me some.
  1005.  
  1006.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1007.  
  1008.           "With great power comes great responsibility."
  1009.  
  1010.  --Hints and Tips
  1011.  
  1012.   Because of the way the menus are set up, and with the commands
  1013. provided, you can simulate almost anything, and have endless unique
  1014. features that aren't in the BBS.  Doors are a breeze to implement with
  1015. XBBS...it's a "door machine."  Study the included sample menus to see
  1016. how they do what they do.  Modify and use them.  Get into the XBBS Echo
  1017. and ask questions (but at least try it yourself first).  Study the docs;
  1018. often the answers to your questions are buried in there somewhere.  The
  1019. docs are fairly technical, but then, XBBS is intended for the advanced
  1020. sysop.  If you'd like something to help get you started, take a look at
  1021. the menu MAIN2.XBS in MENU.LZH inside XDOC_*.LZH.  Nothing will replace
  1022. reading the docs and experimenting, though...
  1023.  
  1024.   If you have XBBS doing something really weird and want it to "reset"
  1025. itself, remember that you can Exec Logon -R and start clean.
  1026. This is a useful way to reset the program when you're deep into the
  1027. gosub stack with no apparent way out.
  1028.  
  1029.   When swapping is enabled, don't forget to include the extensions of
  1030. files you're spawning.  This is something commonly forgotten and can
  1031. cause you a lot of frustration if you do forget it.  Best practice is to
  1032. *always* include extensions, even if you're not swapping, so if you
  1033. change someday you won't have to be tracking down every spawn function
  1034. in every menu, config file, and so forth.  You can spawn COMMAND.COM /c
  1035. to run a batch file even though you're swapping.  Spawn searches the DOS
  1036. path for files that don't have a path specified.
  1037.  
  1038.   Sometimes certain combinations of things just don't work.  Don't let
  1039. it get you down.  For instance, I tested XBBS for a couple of weeks
  1040. under a friend's copy of DoubleDos.  Had very few problems, none that
  1041. you wouldn't expect (some doors didn't have enough memory, some insisted
  1042. on direct screen writes, etc.).  However, when I returned his copy and
  1043. he then tried to run under DoubleDos, he couldn't get swap to work,
  1044. despite the fact he was running basically the same setup I'd just
  1045. tested.  Why?  Don't know, but that's the way it happened.  The cookie
  1046. sometimes crumbles.
  1047.  
  1048.   There are many ways to run an XBBS.  One sysop I know runs the entire
  1049. BBS off of Bulls-mode.  You could also use a hypertext file-based BBS
  1050. menu structure.  An ANSI cursor menu tree would be possible, as would a
  1051. full-word entry system, hot keys, or, possibly more importantly, any
  1052. combination of these, including user-selectable interfaces of various
  1053. types(!).
  1054.  
  1055.   One thing you can do to make your life easier is utilize the @G and @'
  1056. commands to provide "fancy" menus with little effort on your part.  Use
  1057. metastrings wherever possible for things like display and completing
  1058. filenames with system paths.
  1059.  
  1060.   A disk cache (*not* required) will speed up XBBS menu reading slightly
  1061. and avoid "disk thrashing" if you utilize a lot of long branches in your
  1062. menus.  32K should be more than sufficient for most purposes.  A side
  1063. effect would be increased message reading speed due to the two-files-
  1064. per-area layout.
  1065.  
  1066.   Remember that XBBS' built-in message, file and Door modes are not only
  1067. conveniences for starting sysops, but can be alternatives for your users
  1068. who might prefer to have a variety of choices in menu topology, even
  1069. after you've "replaced" them with custom menues.
  1070.  
  1071.   A lot of ex-QuickBBS/RA sysops ask me "when do I run XST?"  Anytime
  1072. you want to.  Change your mindset; XBBS isn't like Quick/RA, so don't
  1073. try to fit it into that mold.  You'll miss all the slick stuff you could
  1074. be doing.  Don't mistake the finger for the moon to which it is
  1075. pointing.
  1076.  
  1077.   For you gamer types, XBBS can be used to set up a game (or games) with
  1078. comparative ease.  Use the user's lastarea flag to "put him back where
  1079. he was" in a maze.  Use security levels or user variables to track
  1080. "character attributes."  Use @eR to randomize action.  You can even have
  1081. users battle each other with an XBASIC program, "die" for a variable
  1082. number of days (set a variable and decrement each day; deny write access
  1083. to anyone with that variable > 0), win points, and so forth.  Your
  1084. imagination is the limit.
  1085.  
  1086.    For those of you who dabble with programming, don't forget that XBBS
  1087. can act based upon returned ERRORLEVELs of external programs, and read
  1088. files over the modem that were created by externals.  This means you can
  1089. do a lot with very little coding, letting XBBS (or XBASIC) handle the
  1090. userfile and modem i/o (Wayne Michaels' XVER user verifier uses this
  1091. principle).  Here are a couple of examples to hopefully give you ideas:
  1092.  
  1093.     1.  Use Xport to make a text file of a message the user entered.
  1094.         Use a simple GWBASIC program to read the text file and write a
  1095.         menu increasing or decreasing his security level based upon
  1096.         analysis of the message.  @J the menu when you return to XBBS.
  1097.     2.  Write a batch file using @EW to make a report from a database
  1098.         with user-specified criteria. Run the batch file, then read the
  1099.         resulting report file to the user.
  1100.  
  1101.   Since XBBS finds the message and file areas and Doors to which a user
  1102. has access from the files MSGAREAS.XBS, FLSEARCH.CTL and DOORLIST.XBS
  1103. for many commands, it's easy to create custom files for users to limit
  1104. them (or provide addtional access to them) when they log on.  You can
  1105. make a series of complicated tests one time (say, in the WELCOME.?BS
  1106. file), copy the appropriate files to MSGAREAS.XBS, FLSEARCH.CTL and
  1107. DOORLIST.XBS, and use the functions which use those files.  After that,
  1108. you don't have to worry about security checking.  MSETUP can further
  1109. refine this process.
  1110.  
  1111.   Remember, change your way of thinking!  XBBS is an environment that
  1112. can manage many diverse programs and turn them into a homogenous whole.
  1113. Try not to limit yourself to the 'old' ways of doing things; imagination
  1114. will serve you well.
  1115.  
  1116.   More hints and tips will be added as we get the time.  Feel free to
  1117. contribute your own.
  1118.  
  1119.  
  1120.  --Technical info
  1121.  
  1122.   When a protocol's "filename(s) sent by remote" flag is set, XBBS
  1123. handles uploads by creating a temporary directory off the upload
  1124. directory named for the node number.  For instance, an upload to
  1125. C:\XBBS\UPLOADS\ will first cause the creation of temporary dir
  1126. C:\XBBS\UPLOADS\001\\ (for node #1).  Then the upload will be directed
  1127. into that directory (XBBS actually switches into that directory).  The
  1128. upload is moved into C:\XBBS\UPLOADS\ as the descriptions for each file
  1129. are entered by the user (and credit given). After all files uploaded
  1130. have been commented, the temporary directory is removed.  It is possible
  1131. for a broken connection to leave files in the temporary directory.  You
  1132. can move them out manually, automatically with a batch file, or leave
  1133. them there to be wiped before the next upload.  All this allows XBBS to
  1134. figure out what a user sent without the user having to type in each
  1135. filename.  To do a "local upload" for testing or whatever, create the
  1136. directory manually, copy what you want into it, then go through the
  1137. "normal" upload procedure.  Security checks are skipped for local
  1138. uploads.  If a protocol's "uses DSZLOG" flag is set, XBBS reads DSZLOG
  1139. instead of just checking manually for files.
  1140.  
  1141.   Downloads are handled more simply.  XBBS switches to the download
  1142. directory and calls the external protocol.  If no errorlevel is returned
  1143. by the protocol, the download is considered to have been successful.
  1144.  
  1145.   External messaging (where you call the message editor to allow the
  1146. user to input a message, and XBBS imports it on return) relies on the
  1147. file MSGTMP (or, for nodes other than 1, MSGTMP#, node 2 being MSGTMP2,
  1148. node 3 being MSGTMP3, etc.).
  1149.  
  1150.   XBBS.TXT is the only file that XBBS opens *and leaves open* the entire
  1151. time XBBS is active.  It is opened in read-only mode; however, it's
  1152. *not* a good idea to mess with it if someone's online.  XBBS.TXT (and
  1153. IDX) can be on your DOS path, so you can either use separate files for
  1154. each node or a common file.
  1155.  
  1156.   XBBS considers a message to be "treated" when it's had the useless
  1157. soft CR's (ASCII 141) and linefeeds (ASCII 10) removed.  XBBS will
  1158. attempt to treat an untreated message on-the-fly whenever it reads one,
  1159. as being treated speeds up subsequent message reading and reduces disk
  1160. storage requirements (after a pack).
  1161.  
  1162.   XBBS compresses files using a method commonly referred to as LZSS.
  1163. See XSCANLZS.C in the developer's archive if you're curious as to how
  1164. it's done.  Note that not all utilities will support compressed
  1165. messages (though most do).
  1166.  
  1167.   XBBS can create its own "mail packets" for use with XHMS.  You can do
  1168. it with @r (you'll have to include a MSGAREAS.XBS with the files XBBS
  1169. makes and arc them into a self-extractor yourself), or you can let
  1170. Bulls-mode do it for you (it handles everything).  XGatekpr will import
  1171. reply packets that XHMS makes.  A utility called MSETUP.EXE (in the
  1172. executable archive) can let a user limit his file areas so that script
  1173. files can be easily used to create packets and download them without
  1174. human intervention.  If you have questions about how to do this outside
  1175. of Bulls-mode, netmail me.
  1176.  
  1177.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1178.  
  1179.          "Would you believe a boy scout and a sling-shot?"
  1180.  
  1181.  --Basic Menu-making
  1182.  
  1183.   In its simplest and most common form, a menu just present the user
  1184. with some choices, asks for a selection, then does what the user
  1185. selected.  What that may be varies; you might go to a sub menu (another
  1186. set of choices), run a Door (external program), send the user a file,
  1187. read something, etc.  The first step, displaying the choices, is simple.
  1188. Load up your word processor and type in what you'd like the user to see
  1189. in the way of your menu text (choices).  We'll write a sample menu file
  1190. here, and call it (appropriately enough) SAMPLE.XBS:
  1191.  
  1192. ----------------------------------
  1193. @~@p1@a1
  1194.   MENU:
  1195.   =====
  1196.   [Q]uit
  1197.   [R]ead
  1198.   [W]rite
  1199.  
  1200.   Enter selection: @lRem
  1201. ----------------------------------
  1202.  
  1203.   The first line (@~@p1@a1) clears the screen, then turns off pausing
  1204. and aborting.  Notice the @lRem (remember @'s are representing ASCII
  1205. 1's) at the end of the last line.  This simply causes XBBS _not_ to
  1206. print a CR/LF after "selection: ", so the cursor remains positioned a
  1207. space after the colon.  You can use "meaningless labels" to comment your
  1208. menus.  We could fancy this up a bit by putting in the time.  Add this
  1209. line between [W]rite and Enter selection:
  1210.  
  1211. @tc  @tr mins remaining.
  1212.  
  1213. That will display the current and remaining time.  You might also add a
  1214. @C before that, which will display the current message area's status.
  1215. If you need to change message areas from the default, you might need a
  1216. @M statement as the second line of the file (after the no-abort no-pause
  1217. stuff); something like:
  1218.                              v---Subop status #1
  1219. +--------------------------------+
  1220. | @MSample Area,12,50,1,999,999  |
  1221. +--------------------------------+
  1222.     ^           ^  ^  ^  ^---Subop status #0
  1223.     |           |  |  +--Board #
  1224.     |           |  +--Max # messages
  1225.     |           +--Area attributes (private(4)+public(8)=12)
  1226.     +--Area name
  1227.  
  1228. Now we have to get some input from the user.  We do it by adding this as
  1229. the next line:
  1230.  
  1231. ----------------------------------
  1232. @0I1 0 1 1 1
  1233. ----------------------------------
  1234.  
  1235.   This gets a single uppercased character, number or symbol from the user.
  1236. The input is "hot", which is to say the user doesn't have to press
  1237. [Enter] after the key (unless their "cold input" flag is on).  You can
  1238. vary how this input works; for instance, you might make it "cold" so the
  1239. user has to press [Enter], or you might make it so the user can type the
  1240. entire word representing the command (i.e. "QUIT" instead of "Q"). The
  1241. best change to make to the line above would be to limit the input to
  1242. alphabetic characters only.  (Boys and girls, can you figure out what
  1243. one number to change to do that?  I knew you could.  Where's my
  1244. sweater?)
  1245.  
  1246.   In our example, variable #0 will receive the user's input. Now that we
  1247. have the user's choice, we need to do something with it. This requires a
  1248. series of tests to see which command key was entered. If no command key
  1249. was entered, we need to cover that, too.  If you've written batch files,
  1250. you might liken this to testing the ERRORLEVEL returned by a program.
  1251. If you've written BASIC programs, you might think of it like testing the
  1252. contents of A$ for a particular character.  There are a couple of ways to
  1253. do this.  We could test for equality for each valid choice, and branch
  1254. to a label if matched.  If we fall all the way through, we'd display an
  1255. "Invalid choice" message and loop to the beginning.  Alternatively, we
  1256. could test each valid choice for _inequality_ and branch from test to
  1257. test, taking action when we finally find a match, again falling through
  1258. to an "Invalid choice" message. Here's one way we could do it:
  1259.  
  1260. -----------------+
  1261. @lRead           |<--Just a label
  1262. @0C!R            |<--If the user didn't enter R
  1263. lEnter           |<--go to this label----------------------+
  1264. ead messages     |<--else display this                     |
  1265. @r0,0            |<--and read messages                     |
  1266. @h               |<--then pause until user hits enter      |
  1267. @jSAMPLE.XBS     |<--and restart the file                  |
  1268. @lEnter          |<--branched here from above, remember?<--+
  1269. @0C!W            |<--test for W
  1270. lQuit            |<--if not, go to this label----+
  1271. rite a message   |<--if it was, print this       |
  1272. @w0,0            |<--and write a message         |
  1273. @jSAMPLE.XBS     |<--then restart the file       |
  1274. @lQuit           |<------------------------------+
  1275. @0C!Q            |<--Was it Q the user hit?
  1276. lHuh?            |<--If not (! means not) go to this label---+
  1277. uit to Main Menu |<--Display rest of "Q" message for show    |
  1278. @jMAIN.XBS       |<--Return to main menu                     |
  1279. @lHuh?           |<--User's entry didn't make sense, so<-----+
  1280.                  +--------------+<--print a blank line
  1281. I have no idea what that means! |<--Show user this and
  1282. @P1                             |<--Pause for a second
  1283. @jSAMPLE.XBS                    |<--Restart file
  1284. --------------------------------+
  1285.  
  1286.   Now, suppose you don't want to allow people with a security level #0
  1287. of less than 10 to be able to read messages in this area.  All you need
  1288. to do is add another check _after_ you've made sure they pressed R.
  1289. Therefore, the above would become:
  1290.  
  1291. @lRead
  1292. @0C!R
  1293. lEnter              -----------------------------------------------+
  1294. @S<010 lNoRead      ------------------------------------------+    |
  1295. ead messages                                                  |    |
  1296. @r0,0                                                         |    |
  1297. @h                                                            |    |
  1298. @jSAMPLE.XBS                                                  |    |
  1299. @lNoRead            <-----------------------------------------+    |
  1300.                                                                    |
  1301. Sorry, you don't have enough access to read messages here.         |
  1302. @jSAMPLE.XBS                                                       |
  1303. @lEnter             <----------------------------------------------+
  1304. ...etc....
  1305.  
  1306.   You could extend this method to checks for all sorts of things
  1307. (multiple security levels, various flags like ANSI, etc.).  You could
  1308. also do similar tests and branches when displaying the choices so that
  1309. only those who could read would see the [R]ead prompt (be awfully
  1310. friendly of you to do that...).
  1311.  
  1312.   You have just written your first menu.  There's a lot left to learn,
  1313. but it's all basically the same method to the madness.  Experimentation
  1314. won't hurt anything as long as you're sure to allow only thoroughly
  1315. debugged menus to be accessed by callers.  Don't forget the power of
  1316. batch files and external programs, either.
  1317.  
  1318.    Here's a sample skeleton for a complicated menu (THISMENU.XBS) which
  1319. shows how to combine three different menu types (ASCII, High ASCII and
  1320. ANSI) in one file.  The ^<letter> combinations refer to a control
  1321. character here; for example, ^K would be CTRL-K and ^[ would be ESCape.
  1322. Note that under @lASCIIMenu we're also differentiating between Expert,
  1323. Novice and Twit users.  This menu gives each type of user a different,
  1324. tailored menu but minimizes duplicate coding by using the same input
  1325. routines for everyone.  There are only about two dozen other ways to
  1326. accomplish basically the same thing with XBBS; this isn't necessarily
  1327. the best, but is a good exercise. :-)
  1328.  
  1329. @^[@blANSIMenu          <--ANSI users go to the ANSI menu
  1330. @^N@blHigh_ASCII        <--HighASCII users go to the High ASCII menu
  1331. @^KlBriefASCII          <--Experts jump to @lBriefASCII
  1332. @lWhichMenu2            <--We come here if the user entered ?
  1333. @^[@blANSIMenu2         <--? for ANSI users goes to their expanded menu
  1334. @^N@blHigh_ASCII2       <--Ditto for High ASCII users
  1335.                         <--Fall-thru to ASCII expanded menu
  1336. The Menu is:            <--Experts don't see this unless they enter ?
  1337. ===========
  1338. [A]...Do an A thing
  1339. [B]...Do a B thing
  1340. [C]...Do a C thing
  1341. [D]...Do a D thing
  1342. @^L@blDontOffer         <--Twits only
  1343.  
  1344. Do you need more help? (Y/n) @;
  1345. @0I1,0,1,1,5
  1346. @0C=N
  1347. lDontOffer
  1348. @JHelpIjit.XBS          <--Would contain painful detail on choices
  1349. @lDontOffer
  1350. Select: @;              <--Normal and twits see this
  1351. @blGetInput
  1352. @lBriefASCII            <--Experts get this
  1353. [A,B,C,D or ?]: @;
  1354. @lGetInput
  1355. @0I1,0,1,1,1            <--Takes input for everybody
  1356. @0=A
  1357. lDoA
  1358. @0=B
  1359. lDoB
  1360. @0=C
  1361. lDoC
  1362. @0=D
  1363. lDoD
  1364. @blWhichMenu2           <--Musta been ? (or dumb, invalid keystroke)
  1365. ...                     <--DoA...DoD would go here
  1366. @lHigh_ASCII
  1367. ...                     <--You'd display your High ASCII menu and prompt here
  1368.                         <--then branch to @lGetInput
  1369. @lANSIMenu
  1370. ...                     <--You'd display your ANSI menu and prompt here
  1371.                         <--then branch to @lGetInput
  1372.  
  1373.   In MENU.LZH inside XDOC_116.LZH there's a file called MAIN.SMP.  This
  1374. is a simple but thoroughly commented main menu file you might find
  1375. enlightening to study.  Also take a look at MAIN2.XBS which uses the
  1376. automatic functions (Bulls-mode, Files-mode, Door-mode) of XBBS.  It
  1377. more-or-less mimics Ijit-mode.
  1378.  
  1379.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1380.  
  1381.              "It's all right, maw, I'm only dyin'"
  1382.  
  1383.   I'd like to thank my long-suffering betatesters, especially Mike
  1384. Berry, Clinton Adams and Ariel Szczcupak (the Israeli phone system would
  1385. probably also like to thank Ariel), for their time, patience and help.
  1386. Thanks to TurboPower for the source to their swap routines, which were
  1387. modified and incorporated into XBBS (let's hear it for programmers who
  1388. share!  Thanks, Mike.).  The SDS gave XBBS its own distribution
  1389. area--thanks, guys (and give 'em hell, Harry!).  The BT3 wrote a great,
  1390. flexible mailer that I personally use with XBBS.  Wayne Michaels kindly
  1391. wrote a scanner-tosser for XBBS so I wouldn't have to (THANK YOU!).
  1392.  
  1393.   As with any project of this size, you may find a bug or two.  This
  1394. product was extensively betatested, but sh*t happens.  If you find a
  1395. bug, please report it with plenty of information (when it shows up, when
  1396. it doesn't, what happens before, during, after, copy of the
  1397. menu/datafiles, etc.) and a fix will be incorporated into the next
  1398. release.  Above all else, remember that the developers of XBBS and XST
  1399. are doing this as a hobby, not a business. Whatever you get out of XBBS
  1400. is more than you paid for it.  Treat us as friends or leave us alone.
  1401. Thank you, and good night.  <click>
  1402.  
  1403.  
  1404. M. Kimes (XBBS)
  1405. 1:380/16
  1406. (318)222-3455 data
  1407. 542 Merrick
  1408. Shreveport, LA  71104
  1409.  
  1410. Wayne Michaels (XST)
  1411. 1:380/100
  1412.