home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / XBBS_118.ZIP / DOCS.ZIP / XBBS_118.DOC < prev   
Encoding:
Text File  |  1992-04-04  |  68.9 KB  |  1,515 lines

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