home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / t / tcb-201b.zip / TCB-201.DOC < prev    next >
Text File  |  1993-03-21  |  40KB  |  788 lines

  1. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  2.                      TCB [Today's Callers Bulletin] v2.01
  3.                     Robert Bingleman / February 21st, 1993
  4. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  5.             ┌───────────────────────────────────────────────────────┐
  6.             │          USR 16.8 Dual Standard / ZyXel 16.8          │
  7.             │  Ridgeway         _____.-----._____          Ontario  │
  8.             │      ___----~~~~~~. ... ..... ... .~~~~~~----___      │
  9.             │   =================================================   │
  10.             │      ~~~-----......._____________.......-----~~~      │
  11.             │       (____)          \   |   /          (____)       │
  12.             │         ||           _/   |   \_           ||         │
  13.             │          \\_______--~  //~~~\\  ~--_______//          │
  14.             │    SysOp  `~~~~---__   \\___//   __---~~~~'  FidoNet  │
  15.             │ Shawn Mazzuto       ~~-_______-~~           1:247/301 │
  16.             │                                                       │
  17.             │ Phone: (416)/894-2503 [Zyxel] or (416)/894-3012 [DS]. │
  18.             ├───────────────────────────────────────────────────────┤
  19.             │  ∙ Online Games   ∙ 1700+ Files   ∙ FidoNet Echomail  │
  20.             └───────────────────────────────────────────────────────┘
  21. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  22.        [TCB was written for Shawn Mazzuto, sysop of The Prime Directive.]
  23. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  24.  
  25. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  26. Introduction
  27. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  28.  
  29. I hadn't seen a "today's callers" program as configurable (or even remotely as
  30. confusing) as this one, so I wrote one.  This is it.
  31.  
  32. The best way to get TCB up and running is to simply set the necessary paths
  33. (via command-line parameters or directly in the supplied TCB-201.CNF) and
  34. create a bulletin.  Take a look at the results, decide what you don't like,
  35. and then look in this DOC file (or in the 132-column REF file, which you
  36. might like to print out) to find out how you can go about changing it.
  37.  
  38. Alternate configuration examples are provided in the SAMPLES directory, as a
  39. means of assisting sysops in deducing anything that's not properly explained
  40. -- in other words, everything.  These files do not represent the full extent
  41. of TCB's options: they represent the extent of my imagination and patience,
  42. the sum of which would be approximately nil at this point.
  43.  
  44. Generally speaking, the way you'll use TCB is to run it between callers,
  45. so that it can create a fresh, up-to-date bulletin for the next caller to
  46. look at (or not).  This could be done by inserting it somewhere in the batch
  47. file you use to run SuperBBS.  Under a single-node system, this is VERY
  48. simple.
  49.  
  50. A very rudimentary example:
  51.  
  52. [BBS Batch File]    [TCB-201.CNF excerpt]
  53. :LOOP               MULTINODE = FALSE
  54. TCB-201             LOGFILE   = SYSTEM.LOG
  55. BBS
  56. GOTO LOOP
  57.  
  58. Under multi-node, it becomes a bit more whacked, because of file-sharing
  59. problems that I've neither the inclination or information to resolve.  If
  60. you're not running a multi-node system, skip this bit, because it will just
  61. confuse and frighten you.
  62.  
  63. Another rudimentary example:
  64.  
  65. [Node 1 batch]                  [Node 2 batch]                 [Node 3 batch]
  66. :LOOP                           :LOOP                          ...
  67. TCB-201                         TCB-201
  68. BBS                             BBS
  69. COPY NODE01.LOG NODE01.TCB      COPY NODE02.LOG NODE02.TCB
  70. GOTO LOOP                       GOTO LOOP
  71.  
  72. [TCB-201.CNF excerpt]
  73. MULTINODE = TRUE
  74. LOGFILE   = NODE01.TCB
  75. LOGFILE   = NODE02.TCB
  76. ...
  77.  
  78. The point here is that TCB never touches a logfile that might be open; it's
  79. always working with benign copies.  The filenames you use need not be the same
  80. as in the above examples, of course; whatever suits you, so long as you use
  81. the same general idea.  If you don't, you'll find your 'tasker halted with a
  82. share violation; follow this prescription and you'll be okay.
  83.  
  84. After you get this down, you've got to create a menu option (use "Display
  85. ANS/ASC file") to allow users to display the bulletin(s).  Relatively simple.
  86.  
  87. The worst thing about this program, apart from the incomprehensible config
  88. file (read on), is the speed -- or lack thereof.  Using multiple large log
  89. files (say, around 2 or 3 100K+ logs), TCB can actually take several seconds
  90. to create bulletins.  As I've said previously, I want to do something about
  91. this, but I don't have the development software to do it.  I had a friend of
  92. mine who owns Turbo C++ compile this version for me (the pain!), but it's not
  93. really much better than MSC; I didn't expect that it would be.  What's really
  94. required here is some thoughtful re-coding of key routines in assembly, but,
  95. unfortunately, I don't have an assembler (and I'm NOT going to fight with the
  96. obnoxious inline assembler).  Please let me know if the speed is a problem for
  97. you, and I'll move this a bit higher up the priority queue.
  98.  
  99.  
  100. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  101. This DOC file...
  102. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  103.  
  104. ...has become a bit more comprehensive since the first release.  The bulk of
  105. the reference material has been removed from the default config file and is
  106. now contained in the easily printable 132 column TCB-201.REF file.  I think
  107. you'll find, though, that reading this document is your best hope if you've
  108. not yet been introduced to TCB; this runs contrary to the first version, in
  109. which the DOC file was a pseudo-humourous, ten minute knock-off.  This file,
  110. while still failing to contain any actual humour, does at least contain my
  111. best attempt to date at explaining the available options.
  112.  
  113. Before we get into that, though, there's one topic we have to deal with...
  114.  
  115.  
  116. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  117. The TCB Command Line...
  118. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  119.  
  120. Available parameters are /CNF=<name>, /LOG=<name>, /ANS=<name>, /ASC=<name>.
  121. The /CNF= switch specifies a configuration file to use; the /LOG=, /ANS=,
  122. and /ASC= parameters override, respectively, the LOGNAME, TCBANSI, and
  123. TCBASCII path/filenames provided in the configuration file.  If that's too
  124. obscure for you, you might want to bail out right about now.
  125.  
  126. If no /CNF= switch is present, TCB looks for the file TCB-201.CNF in the same
  127. directory as the executable file (NOT the current directory).  I included this
  128. as a "feature", and although I later realized that it's probably just going to
  129. confuse and frighten prospective users, I left it in.
  130.  
  131. If your configuration file is saved as TCB-201.CNF in the proper diretory,
  132. and you have the correct path/filenames set inside it, you obviously don't
  133. need to specify ANY command line parameters.  Good deal, don't you think?
  134.  
  135. If you have MULTINODE set to FALSE/NO, specifying a logfile via /LOG= will
  136. override any LOGNAME definitions in the configuration file.  Otherwise, the
  137. name specified on the command line will be prepended (?!) to the list of
  138. logfiles to process.
  139.  
  140.  
  141. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  142. Pointless 
  143. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  144.  
  145. The configuration (that's physical, not logical) of TCB can be thought of
  146. as being divided into three separate sections:
  147.  
  148.  » Operating parameters (everything at the start of the CNF file)
  149.  » Names to leave out of the logfile (the $IGNORE string block)
  150.  » String definitions (the $LABEL, $LEVEL, $SPEED, and $EVENT string blocks)
  151.  » Customized fields (the $CUSTOM string block)
  152.  
  153. The operating parameters should be worried over the most (screw them up, and
  154. you're up the proverbial creek of shit), changing the string definitions can
  155. help to pretty things up a bit, and customized fields are just something to
  156. amuse yourself with on a rainy (or, if you're really bad off, sunny) day.
  157.  
  158. Really, there are only a few specific things that you can't configure; one is
  159. my name (a shame, I know), and the others... well, they escape me.  I'm sure
  160. you'll run into them soon enough.
  161.  
  162.  
  163. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  164. Creatively Cryptic Colour Codes...
  165. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  166.  
  167. Colour is a simple concept and, as such, is represented in an abstract and
  168. confusing manner in the TCB configuration file.  To further obfuscate the
  169. subject (and I fully intend to), one colour isn't really a colour at all.  
  170.  
  171. Any time you're required or wish to supply TCB with a colour, you'll do so
  172. by specifying a colour "pair": two characters, the first of which represents
  173. the background colour, and the second which, not surprisingly, represents
  174. the foreground.
  175.  
  176. Background Values                     Foreground Values
  177. -------------------------------------------------------------------------
  178. 0  Black     8  Black, flashing     |  0  Black       8  Dark Grey
  179. 1  Red       9  Red, flashing       |  1  Red         9  Light Red
  180. 2  Green     A  Green, flashing     |  2  Green       A  Light Green
  181. 3  Brown     B  Brown, flashing     |  3  Brown       B  Yellow
  182. 4  Blue      C  Blue, flashing      |  4  Blue        C  Light Blue
  183. 5  Purple    D  Purple, flashing    |  5  Purple      D  Light Purple
  184. 6  Cyan      E  Cyan, flashing      |  6  Cyan        E  Light Cyan
  185. 7  Lt. Grey  F  Lt. Grey, flashing  |  7  Light Grey  F  White
  186. -------------------------------------------------------------------------
  187.  
  188. Say, for the sake of argument, that you wanted the border around the bulletin
  189. to be flashing light purple on brown.  Look in the first box; in this case,
  190. brown is 'B', not '3', because we want the colour to flash.  In the second
  191. box, you'll see that light purple is 'D'.  The code for flashing purple on
  192. brown is 'BD'.
  193.  
  194. These colour codes are also valid in quote-enclosed string definitions, with
  195. the exception of strings in the $IGNORE block; in such cases, they must be
  196. preceded by an '@' character.  The '@' character is used to indicate that a
  197. special code is embedded in the string.  There are only two other cases where
  198. you'll use the '@': first, if you wish to have a quotation mark '"' in a quote-
  199. enclosed string, you use @", so that the parser doesn't see that quotation
  200. mark as meaning "end of definition", and second, if you want a real '@' symbol
  201. to appear in your display string, you must use @@, for reasons that should be,
  202. but probably aren't, quite obvious.
  203.  
  204. You might want to read that last sentence (all 6 lines of it) again.
  205.  
  206. Finally, the colour code '80' is a special case; the string parser in TCB
  207. interprets this code as "don't write any ANSI codes at all."  The reason
  208. for this may or may not occur to you as you struggle with TCB; if not, don't
  209. worry, because you're not missing anything particularly good.  If anyone has
  210. a particular use for the colour '80' (flashing black on a black background),
  211. drop me a line and I'll arrange to have you brutally murdered.
  212.  
  213.  
  214. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  215. Some options you'd damn well better understand!
  216. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  217.  
  218. These options should appear at the beginning of the configuration file, before
  219. any of the string definitions (see below -- but not right now).  Although most
  220. of these options are position-insensitive (that is, nobody, especially myself,
  221. gives a hoot in hell what order they're in), a couple are a bit testy, and
  222. you'll be doing yourself a favour if you just leave them in the order they're
  223. shown here (and in the example configurations).
  224.  
  225. The format for these settings is, generally...
  226.  
  227. [LABEL] = <something>
  228.  
  229. ... where [LABEL] is the name of the configuration option, and <something> is
  230. either a string, a flag (YES/NO), a filename, or a numeric value, depending
  231. on the option.  Note that YES/NO settings can also be specified as TRUE/FALSE;
  232. good news for those with a Boolean fixation.
  233.  
  234. Label         Definition
  235. -------------------------------------------------------------------------
  236. SYSOPNAME     A quote-enclosed string that's displayed at the top of the
  237.               bulletin, provided that the bulletin is wide enough.
  238.               For example, SYSOPNAME="Shawn Mazzuto".
  239.               There is no default for this option.
  240.  
  241. BBSNAME       Same concept and use as SYSOPNAME.
  242.               Ex.  BBSNAME="The Prime Directive".
  243.               Def. -- NO DEFAULT --
  244.  
  245. MULTINODE     Should equal YES if you wish TCB to create your bulletin(s)
  246.               using multiple SuperBBS logfiles, such as might be necessary
  247.               on a system that has multiple nodes.
  248.               Ex.  MULTINODE=YES
  249.               Def. MULTINODE=NO
  250.  
  251. LOGNAME       The filename of a SuperBBS system log file.  If MULTINODE is
  252.               set to YES, you can have multiple LOGNAME= statements; if not,
  253.               such an occurance will cause an error.  The command line
  254.               option /LOG=<name> overrides this setting in a non-MULTINODE
  255.               configuration; otherwise, the logfile specified by /LOG=<name>
  256.               is used IN ADDITION TO the logfiles specified in the CNF file.
  257.               Ex.  LOGNAME=H:\SBBS\SYSTEM.LOG
  258.               Def. SYSTEM.LOG, in the same directory as TCB-201.EXE.
  259.  
  260. TCBANSI       The filename of the ANSI bulletin that TCB creates; if you
  261.               don't need an ANSI bulletin, use NONE for the name, and one
  262.               simply won't be created for you.
  263.               Ex.  TCBANSI=H:\SBBS\TEXT\LASTCALL.ANS
  264.               Def. TCB.ANS, in the current directory.
  265.  
  266. TCBASCII      The filename of the ASCII bulletin that TCB creates; same deal
  267.               as above with the NONE bit.
  268.               Ex.  TCBASCII=H:\SBBS\TEXT\LASTCALL.ASC
  269.               Def. TCB.ASC, in the current directory.
  270.  
  271. BLANKLOG      Should equal YES if you wish TCB to create a bulletin even if
  272.               no callers were found to be displayed; in such a case, the
  273.               bulletin(s) will simply say, "No Callers Found."  Set to NO,
  274.               no bulletin(s) will be created in this circumstance.
  275.               Def. BLANKLOG=NO
  276.  
  277. CALLCOUNT     The maximum number of previous callers to display; if you'd
  278.               like to display all callers in the specified logfile(s), use
  279.               the value 0.
  280.               Ex.  CALLCOUNT=21
  281.               Def. CALLCOUNT=0  (display all callers)
  282.  
  283. CALLDATE      Set to YES if only today's callers should be displayed; NO will
  284.               cause all callers in the logfile(s) to be displayed.
  285.               Def. CALLDATE=NO  (display all callers)
  286.  
  287. SECURITY      The maximum security level to display; any callers with security
  288.               levels up to and including this number will be displayed.
  289.               Ex.  SECURITY=500
  290.               Def. SECURITY=32767
  291.  
  292. LOCAL         Should equal YES if local log-ons should be displayed in the
  293.               bulletin; note that this does not override SECURITY.
  294.               Def. LOCAL=NO
  295.  
  296. HEIGHT        The height of each 'page' of the bulletin, including header/
  297.               footer/totals; basically, this is the desired display size.
  298.               A value of 0 indicates that the bulletin(s) should not be
  299.               broken into pages.
  300.               Ex.  HEIGHT=49
  301.               Def. HEIGHT=24
  302.  
  303. LABELS        Set to YES if "labels" should appear above each column.  The
  304.               actual configurable strings are defined later in the CNF file;
  305.               this flag simply dictates if they'll ever be seen.
  306.               Def. LABELS=NO
  307.  
  308. TOTALS        Set to YES if numeric-value (counter) columns should be summed
  309.               in a "totals" row at the bottom of each page; non-numeric
  310.               fields are left blank.  If set to NO, this line will not appear.
  311.               Def. TOTALS=NO
  312.  
  313. FANCY         Set to YES if the ANSI bulletin file (provided that there is
  314.               one) should use cursor-positioning and line-deleting codes to
  315.               make the bulletin look nicer and reduce transmission time.  If
  316.               set to NO, the screen is cleared between each page (<esc>2J).
  317.               Def. FANCY=YES
  318.  
  319. IGNOREQWK     Set to YES if file-transfers with the extensions "QWK" or "REP"
  320.               should be ignored (ie. not counted or displayed).
  321.               Def. IGNOREQWK=NO
  322.  
  323. OUTSIDEC      A two-digit colour code (see above, for a change) that defines
  324.               the colour of the outside border around the bulletin.
  325.               Def. OUTSIDEC=04 (black bg/dark blue fg)
  326.  
  327. INSIDEC       Same as above, but pertaining to the inside frame characters.
  328.               Def. INSIDEC=04 (black bg/dark blue fg)
  329.  
  330. OUTSIDE       Twelve (not ten, twelve) characters that are given to master-
  331.               craftspersons (izzat right?) to built a sturdy frame around your
  332.               bulletin(s).  The string is quote-enclosed, and can include
  333.               colour-control strings ('@xx').
  334.               Def. OUTSIDE="╔═╤╗╚═╧╝║╟║╟║║╢║╢║"
  335.  
  336. INSIDE        Three characters that are used by professional interior
  337.               decorators to design the "divisions" between columns inside the
  338.               bulletin.  Quote-enclosed, can include colour codes, etc.
  339.               Def. INSIDE="─┼─┼│││"
  340.  
  341. HEADERC       Colour code used for the two-line title bar.  This new item
  342.               resolves a cosmetic problem with the first version of TCB.
  343.               Def. HEADERC=4E (blue bg/lt. cyan fg)
  344.  
  345. LABELC        Colour code used for the labels above each column, if you've
  346.               got them enabled.
  347.               Def. LABELC=0F
  348.  
  349. FOOTERC       Colour code for the "Press [ENTER]" (or whatever it was I said
  350.               in it) footer that appears at the bottom of each page.
  351.               Def. FOOTERC=4E (blue bg/lt. cyan fg)
  352.               
  353. LASTULC       Colour code used for the "Last Transfer" Field Type; the colour
  354.               in the CONFIG line (below again) is used for downloads, while
  355.               this colour is used for uploads.
  356.               Def. Use same colour as downloads.
  357.  
  358. ZEROC         Colour code assigned to counter fields with a value of 0.  If
  359.               the background portion of this code (the first digit) is '8',
  360.               the background of zero-valued columns is left untouched while
  361.               the foreground changes to the specified colour.
  362.               Def. Use normal field colour from CONFIG line.
  363.  
  364. CONFIG        Defines the order, type, size, justification, and colour of
  365.               the fields that appear in your bulletin(s).  See the next
  366.               section for a thick and meaty description.
  367.               Def. -- NO DEFAULT --
  368.  
  369. RATING        The letters A to M, corresponding to the thirteen "special
  370.               events" under Field Type U (uh, look down there again).
  371.               During some (uh, most) calls, more than one "special event"
  372.               will occur, and the RATING line is the means by which you
  373.               define the precedence of the various "special events".  If
  374.               you're going to define this string, you MUST include all
  375.               characters from A to M.  If you don't want certain "events"
  376.               to appear under ANY circumstances (such as the "Sysop Hung
  377.               up on User" special event), give them a lower precedence
  378.               than the "None" event ('A').
  379.               Def. BLAMCDJIHFGEK
  380.  
  381.  
  382. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  383. Welcome to my CONFIG line.
  384. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  385.  
  386. TCB is configured using the concept of "fields" (and Field Types), as in a
  387. database program; these fields display the various parameters & statistics
  388. related to each call in the logfile(s).  Now, there can be a lot of
  389. information in one call -- far too much to pack into one eighty-column line,
  390. and inevitably more than any normal person should care about.  Accordingly,
  391. you can select exactly what information is inserted in your bulletins.  If
  392. you're still with me, that's good.  Hang in there for just a while longer.
  393.  
  394. The fields that will be included in your ANSI/ASCII lists are specified by a
  395. string of values assigned to the CONFIG variable.  The format of the CONFIG
  396. line is as follows:
  397.  
  398. CONFIG = [<Leading><|Trailing><Field Type><Width><Alignment><Colour>] [...] ...
  399.  
  400.   <Leading>        a numeric value, indicating the number of spaces to
  401.                    insert before any information in the field.  The default
  402.                    value is 0 (no leading spaces).
  403.  
  404.   <|Trailing>      a numeric value, preceded by a "|" (pipe) character to
  405.                    distinguish it from the <Leading> field, indicating the
  406.                    number of spaces to leave blank at the end of the field.
  407.                    The default is 0 (no trailing spaces).
  408.  
  409.   <Field Type>     one of the following letters, used to indicate the type
  410.                    of information to be displayed in this column.
  411.  
  412.                       A  Username
  413.                       B  Alias
  414.                       C  LogOn Time [24-hour]
  415.                       D  LogOn Time [12-hour + a/p]
  416.                       E  LogOff Time [24-hour]
  417.                       F  LogOff Time [12-hour + a/p]
  418.                       G  Date of Call [YY-MM-DD]
  419.                       H  Duration of Call
  420.                       I  User Level [Numeric]
  421.                       J  User Level [Text from $LEVEL block]
  422.                       K  Number of Downloads
  423.                       L  Number of Uploads
  424.                       M  Connect Speed [Numeric]
  425.                       N  Connect Speed [Text from $SPEED block]
  426.                       O  Sysop Page Attempts [Numeric]
  427.                       P  Sysop Page Attempt? ["Yes"/"No"]
  428.                       Q  Last File Downloaded
  429.                       R  Last File Uploaded
  430.                       S  Last File Downloaded OR Uploaded [Last Transfer]
  431.                       T  Number of Messages Written
  432.                       U  Special Events [Text from $EVENT block]
  433.                       V  Caller Number
  434.                       W  Node Number
  435.                     a-z  User-configurable [from $CUSTOM block]
  436.  
  437.   <Width>          is the number of characters to allot for the field.  Any
  438.                    excess characters will be truncated; any excess space will
  439.                    be filled with either spaces or zeros (see ALIGNMENT).
  440.  
  441.   <Alignment>      is L/R/C/Z = Left/Right/Center/padZero.  If the text to be
  442.                    inserted in the field is LARGER than the WIDTH, this is
  443.                    used to determine which side of the text to print from.
  444.                    In other words, if the field was four characters wide, but
  445.                    the string was, say, eight (for example, "SKINHEAD"), using
  446.                    'L' as your alignment would give you 'SKIN'.  Using 'R'
  447.                    would give you 'HEAD'.  In this case, C and Z are inter-
  448.                    preted the same as L.
  449.  
  450.   <Colour>         is the colour code for the field.  With Field Types J, N,
  451.                    U, and Custom Field Types a-z, you might want to use the
  452.                    colour code '80' (remember?).  This code tells TCB not to
  453.                    write any prefix ANSI codes at all; useful in avoiding
  454.                    extraneous codes in cases where text strings contain their
  455.                    own colour codes.
  456.  
  457. For example, 2|1A25C1F produces a field that has 2 leading spaces ('2'), one
  458. trailing space ('|1'), contains the user's name ('A') in a field 25 characters
  459. wide ('25').  The name is centered ('C') and the field is coloured white on
  460. red ('1F').  It's hard to believe, I know.
  461.  
  462.  
  463. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  464. CONFIG Field Types that require Thoughtful Discussion...
  465. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  466.  
  467. Only one comes to mind, apart from the custom field types (they're discussed
  468. below), and that's the Type-U [Special Event] field.
  469.  
  470. This one exists because there are quite a few (twelve that I've found) events
  471. that can occur during a call that don't really deserve their own field.  For
  472. example, although it would be nice to see if a user dropped carrier, or a
  473. fatal system error occurred while a user was on-line, there's no point in
  474. wasting precious space on fields dedicated to either of these possibilities.
  475. (To be honest, there's no point in dedicating any drive space to this program
  476. at all, but then we've already covered that, haven't we?)  Therefore, the
  477. "Special Event" Field Type can be thought of as being a grouping of some of
  478. the more esoteric event possibilities under one heading.
  479.  
  480. Actually, there is one "event" that's included here and also has its own
  481. Field Type (two of its own, even): sysop page.  I did this simply so that
  482. those who use this "special event" field need not waste space by having a
  483. Type-O or Type-P "Page?" field as well, although you'll probably want to.
  484.  
  485. Here are the events.  Make sure you don't confuse the lettering of these
  486. events with the lettering of the Field Types; these letters are used only
  487. in the RATING= configuration item, and in the $EVENT display-string block
  488. to identify which string belongs to which event.
  489.  
  490. ID Letter   Definition
  491. -----------------------------------------------------------------------
  492.     A       No special event occurred.
  493.     B       User paged the sysop.
  494.     C       Used entered invalid password.
  495.     D       Name not in userfile.
  496.     E       Password failure (access denied).
  497.     F       New user questionnaire completed.
  498.     G       User dropped carrier.
  499.     H       Calls-per-day limit exceeded.
  500.     I       User inactivity logoff.
  501.     J       User's allotted time expired.
  502.     K       Fatal system error.
  503.     L       Sysop hung up on user [Alt-H].
  504.     M       User entered invalid name, then re-entered correct name.
  505.  
  506. Unlike the Field Types, the A -> M identifiers here are not case sensitive,
  507. and can be used in lower-case with equal success.
  508.  
  509.  
  510. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  511. Block of Ignorance
  512. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  513.  
  514. New to this version is the capability to specify a bunch of users (up to 256)
  515. to exclude from the bulletin(s).  This is done quite simply:
  516.  
  517. $IGNORE
  518. "Robert Bingleman"
  519. "Price Waterhouse"
  520. "Your name here"
  521.  
  522. The '$IGNORE' label tells TCB that the next batch of strings should be 
  523. compared to names found in the logfile and, if found, these entries should
  524. be skipped entirely.  The names must be quote-enclosed, as in the example.
  525.  
  526.  
  527. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  528. String Definitions
  529. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  530.  
  531. All quote-enclosed strings can be of any reasonable length and can contain
  532. colour codes (except the $IGNORE block, above) in a format that I won't bother
  533. mentioning again.
  534.  
  535. There are limits (such as the number of strings defined, total space allotted
  536. for all strings of a certain block, and so on), but you probably won't run
  537. into them.  If you do, you'll know it -- believe me.
  538.  
  539.  
  540. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  541. String Definitions, part I: The $LABEL Block.
  542. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  543.  
  544. These are the strings that show up just under the header, if you have LABELS
  545. set to YES or TRUE.  If you don't put any colours in the strings, they
  546. default to being the same colour as the data fields they correspond to, which
  547. will probably be frighteningly ugly.  Also, one of these labels (you'll have
  548. to guess which) is displayed in the "Name" field, assuming you have one, in
  549. the Totals line, also assuming you have one.  It should probably say something
  550. along the line of "Totals...", but, if you think that the purpose of the
  551. Totals line is already too obvious, you could use "Sausages...", or some other
  552. reference that will utterly fail to get a laugh.
  553.  
  554.  
  555. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  556. String Definitions, part II: The $SPEED Block.
  557. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  558.  
  559. By defining strings in this section and using a Type-N field, you could show
  560. that a caller's speed was "Zippy", "Annoying", "Putrid", "Hellish", or
  561. "Drippy" (or whatever the hell you want) instead of the old, informative,
  562. boring numeric values that we all know.  Remember, the strings can be any
  563. reasonable length, so you could theoretically define 1200-bps callers as
  564. being "Too Effing Cheap To Buy a Decent Modem."
  565.  
  566. I really don't know why I did this; if you thought everything up to this
  567. point was stupid and useless, you must be absolutely speechless right now.
  568.  
  569.  
  570. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  571. String Definitions, part III: The $LEVEL Block.
  572. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  573.  
  574. Okay, this is a bit more useful.  When you use a Type-J field, instead of
  575. displaying the users' levels as numbers, you can define strings here to show
  576. that the user has "$Paid$", is a "Freeloader" or happens to be the "Sysop"
  577. (who usually qualifies for both of the former... ha, ha).
  578.  
  579.  
  580. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  581. String Definitions, part IV: The $EVENT Block.
  582. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  583.  
  584. Strings defined in this block to correspond to Field Type U, as discussed
  585. above.  The events and their corresponding alphabetic labels are enumerated
  586. (as much as alphabetic labels can be enumerated) above, as well as in the
  587. TCB-201.REF file, and, more briefly, in #comment lines in the supplied
  588. TCB-201.CNF configuration file.
  589.  
  590. If you knew how much I enjoyed doing that, you'd forgive me for it.
  591.  
  592.  
  593. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  594. User-Defined Field Types (a - z) : The $CUSTOM Block.
  595. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  596.  
  597. Here's where you can kludge together your own Field Types for whatever devious
  598. purposes you might have in mind.
  599.  
  600. TCB is a simple parser (actually two of them, but don't let it bother you)
  601. that scans for certain "key" strings in the log file(s), and acts upon what it
  602. finds.  What you're doing in this section is supplying TCB with your own "key
  603. strings", along with the display strings that will appear in the corresponding
  604. Field Type depending on whether or not the key string is found.  If you don't
  605. define the "Yes" and "No" display strings, the field will become a counter,
  606. just like the built-in counters for messages, xfers, etc.  In such a case, if
  607. you have a Totals line, this field will also be summed at the end of each
  608. "page" of the bulletin, whether you like it or not.
  609.  
  610. Note that defining no $CUSTOM block will speed up TCB a little bit; I won't
  611. bother explaining why, but it's good to know in any case.
  612.  
  613.  
  614. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  615. Other Thoughts...
  616. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  617.  
  618.  » Be careful with your choice of text editors; if it's a stupid one that
  619.    changes all spaces (even within quotes) to tabs when it can, you're going
  620.    to have a long, strange trip.
  621.  
  622.  » If you're having problems with memory, reduce TCB's file buffer allocation
  623.    by specifying '_BUFFER = xxxx' in the configuration file, where xxxx is
  624.    a number less than 5120 (the default value).
  625.  
  626.  » Conversely, if you have tons of memory free, you might be able to speed
  627.    TCB up a bit by increasing this same value beyond 5120.
  628.  
  629.  » The output file names can be any valid DOS device, including CON and PRN
  630.    (or LPTx).  If you had a need, you could make up a config file that had
  631.    a very decent width (ie. many fields) and send the ASCII version directly
  632.    to a printer that you've put in "compressed" mode.  The ASCII file has a
  633.    Ctrl-L (form feed, also used for clearing the screen) at the beginning of
  634.    each "screen", so you could also set the height of the list to the height
  635.    of your printer's page [66 lines is normal for dot-matrix].
  636.  
  637.  » One reason you'd want to change the characters used to form the "frame"
  638.    around and within the bulletin, apart from cosmetic, is so that you could
  639.    create pure ASCII lists (ie. using no extended characters) for non-PC
  640.    callers.
  641.  
  642.  » You could create a config file that shows who's been playing online games.
  643.    Use the name of the EXE/COM/BAT files as your "key strings" in as many
  644.    Custom Fields as you have games, and have as the CONFIG string only the
  645.    user's name (or alias, or whatever) and the Custom Fields that you've
  646.    just defined.  For example:
  647.  
  648.    (Custom Field definition, in $CUSTOM block):
  649.    a = "TW2002.BAT"   "@0FYes" "@07No"
  650.    b = "LEMONADE.BAT" "@0FYes" "@07No"
  651.  
  652.    (CONFIG string definition, in main block):
  653.    CONFIG = 1A20L0F a3R80 b3R80 [...]
  654.  
  655.  » Another use for the Custom Fields is obvious enough: there's a SuperBBS
  656.    menu option that allows you to write a string directly into the log file.
  657.    Using this idea, you could have pretty much anything show up in your
  658.    bulletin; for example, you could have a menu option, visible to all of
  659.    your users, that was displayed in your menu as something along the lines
  660.    of "Format Hard Disk C:".  Well, if you have that menu option write a
  661.    certain string to the logfile, you could check for it using a Custom Field,
  662.    and you'll soon find out which of your users have it in for you.  If you
  663.    make such a menu option and actually have it result in the formatting
  664.    of a hard drive, well, you're too stupid to have any friends anyway.
  665.  
  666.  » If you only want a "Y" or "N" for your chat field (presuming you have one),
  667.    simply set the width of the field to 1 and use 'L' alignment.  This way,
  668.    only the first character of the hard-coded "Yes" and "No" strings will
  669.    appear, giving you "Y" or "N".  Damn, am I clever or what?
  670.  
  671.  
  672. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  673. Planned upgrades...
  674. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  675.  
  676. Hmm.  Well, as I've said, I don't really want to waste more time on this
  677. program than is absolutely necessary, but I'm open to suggestions.  There
  678. are three things that I can forsee that would cause me to go back to work:
  679.  
  680. 1. Someone writes to say that they still can't extract the information from
  681.    the logfiles that they want to.  This will likely cause me to implement
  682.    the $TEMPLATE section that I was contemplating including in this version.
  683.  
  684. 2. The SuperBBS guys get off their butts and include AVATAR support, at which
  685.    time I'll gladly add an AVATAR-compatible bulletin module.
  686.  
  687. 3. I get my hands on a decent assembler, and, as I've said, I'll do a re-write
  688.    of some key routines and speed it up considerably.
  689.  
  690.  
  691. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  692. Registration?
  693. ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
  694.  
  695. <A serious bit of spleen-venting.>
  696.  
  697. It's completely free.  Anyone who wants money for simple utilities should be
  698. fed olive loaf until they puke.  Seriously, if you need money, get a job, as
  699. I had to do.  Downloading lame 200K+ Windows utilities written in Visual Basic
  700. is annoying and costly enough; asking $30+ for them (and creating "shareware
  701. reminder" screens that are about six thousand times more complex than the
  702. actual program) is beyond my comprehension.  Of course, these bloated gadgets
  703. receive glowing praise in garbage magazines like Compute; not too surprising,
  704. really, considering:
  705.  
  706. 1.  A commercial program with a price of $200 is considered "extremely
  707.     affordable" by these toe-sucking hermaphrodites.  I hardly think that
  708.     the spud-buffing reviewers who receive free copies of these programs
  709.     are qualified to make any judgements concerning "affordability".
  710.  
  711. 2.  The aforementioned huge-Windows-utility-writing slugs would give their
  712.     left nuts to have their cheesy-hunk-of-walrus-snot programs mentioned
  713.     in a kool rag such as Compute, so I'd be very surprised if any of the
  714.     so-called reviewers ever actually PAY for the shareware they "review".
  715.  
  716. 3.  A fairly recent article has nearly every contributing editor proudly
  717.     proclaiming that he uses BASIC exclusively; one slobbering moron
  718.     confides that he's switched from GW-Basic to QuickBasic because "[he]
  719.     wants to write shareware", and therefore "[needs] a compiled language."
  720.     I have several years' painful experience with C and assembly on various
  721.     systems, and I couldn't get a job painting Bill Gates's house; this wad
  722.     of organic navel-lint not only makes good money writing idiotic articles
  723.     for a popular magazine, but also asks for (and undoubtedly receives) big
  724.     bucks from computer novices who think this dork is a huge celebrity and
  725.     get warm and moist over the idea that he's actually going to read something
  726.     of theirs (even if it's only their signature on a personal check).
  727.  
  728. Of course, I'm a bit confused about one thing; most of these knuckle-walkers
  729. would have a hard time running Windows 1.0 on their CGA-equipped Osborne
  730. portables, even with the wobbly 16K Sinclair memory expansion and six eight-
  731. inch 180-K floppies they've added (using hot tips from the latest issue of
  732. Creative Computing, no doubt).
  733.  
  734.  
  735.     Whew.
  736.  
  737. <-30->
  738.  
  739. If you've got something to say to me, you might drop me a line (via netmail
  740. @ 1:247/301 or on Compu$erve as the ever-popular 73707,533).  Judging by the
  741. volume of mail I've received in the past four months, I'd get more letters if
  742. I left a message in the International Teen conference and told the pizza-faced
  743. adolescents that I'm forty-six, ride a fiery orange moped, smell like a bowl
  744. of rotten bean-dip, and have my nose- and ear-hair waxed and braided through
  745. the blistered gluteals of a screaming gibbon.
  746.  
  747. So, for the sake of my own amusement, I'm welcoming any abuse that you'd like
  748. to send my way.  If you're having a rotten life, drop me a line and tell me
  749. that you think I'm an arrogant bastard and that I should go and get stuffed as
  750. soon and as freqently as possible.  Feel free to express yourself using the
  751. means of communication you know best.
  752.  
  753. 10 LET A$="COMPUTE"
  754. 20 LET B$="IS A RAD MAGAZINE BRO DUDEZ!!!!!!!"
  755. 30 PRINT A$;" ";B$;"  ";
  756. 40 GOTO 10
  757. 50 STOP
  758.  
  759. Ciào ciào, bambinos.
  760.  
  761.  
  762. -- Robert Bingleman, February 21st, 1993.
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787. * Note: 
  788.