home *** CD-ROM | disk | FTP | other *** search
/ Boston 2 / boston-2.iso / DOS / HILFEN / MODEM / SALES / MISC.XXX / TX2MB220.ZIP / TXT2MSG.DOC < prev    next >
Text File  |  1991-03-10  |  52KB  |  991 lines

  1.  
  2. TXT2MSG 2.20                                                          Page 1
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.                                   T X T 2 M S G
  10.  
  11.                  (fondly referred to as "Tex" by the FTL users)
  12.  
  13.  
  14.                   Textfile to PCBoard 14.x MessageBase Utility
  15.                               Release Version 2.20
  16.  
  17.  
  18.                       Copyright 1988,90,91 Robert Vostreys
  19.                                All Rights Reserved
  20.  
  21.  
  22.  
  23.  
  24.  
  25.                             (revised: Tue Mar 5, 1991)
  26.  
  27.  
  28.  
  29.  
  30.  
  31.                                 Table of Contents
  32.  
  33.      What is TXT2MSG?  . . . . . . . . . . . . . . . . . . . . . . . .    2
  34.  
  35.      Distribution File Contents  . . . . . . . . . . . . . . . . . . .    3
  36.  
  37.      Shareware Distribution  . . . . . . . . . . . . . . . . . . . . .    3
  38.  
  39.      TXT2MSG Operation . . . . . . . . . . . . . . . . . . . . . . . .    4
  40.           Commandline Parsing  . . . . . . . . . . . . . . . . . . . .    4
  41.           Default Operation  . . . . . . . . . . . . . . . . . . . . .    5
  42.           Commandline Switches . . . . . . . . . . . . . . . . . . . .    5
  43.           Script Questionnaire Processing  . . . . . . . . . . . . . .    9
  44.           Example SQ2MSG Processing  . . . . . . . . . . . . . . . . .   10
  45.           TXT2MSG Environment Variable . . . . . . . . . . . . . . . .   10
  46.           By Conference Number . . . . . . . . . . . . . . . . . . . .   11
  47.           Textfile Control of Message Header . . . . . . . . . . . . .   12
  48.           Notes and Limits of Operation  . . . . . . . . . . . . . . .   13
  49.  
  50.      Contacting the Author . . . . . . . . . . . . . . . . . . . . . .   14
  51.  
  52.      The Future of TXT2MSG . . . . . . . . . . . . . . . . . . . . . .   15
  53.  
  54.      PCBoard 14.x Messagebases . . . . . . . . . . . . . . . . . . . .   16
  55.           Message Insertion Logic  . . . . . . . . . . . . . . . . . .   16
  56.           Structure of Messagebases  . . . . . . . . . . . . . . . . .   16
  57.  
  58. TXT2MSG 2.20                                                          Page 2
  59.  
  60.                                 What is TXT2MSG?
  61.  
  62.      TXT2MSG is  a Sysop utility  for use with PCBoard  14.x based Bulletin
  63.      Board  Systems.   TXT2MSG  allows you  to insert  textfiles  into your
  64.      PCBoard  messagebases  from  the  DOS  commandline  or  from within  a
  65.      batchfile.   Starting with version 2.10, TXT2MSG also incorporates and
  66.      replaces  the  widely used  SQ2MSG  which  takes Script  Questionnaire
  67.      ANSWERx files and  CALLERx logs and imports  them into a  messagebase.
  68.      Version 2.20 adds ProDoor ZIPM and PCBoard Capture file processing.
  69.  
  70.      TXT2MSG becomes  very useful  when used  with  your event  processing,
  71.      giving you:  reports of  operations,  netmail traffic,  packing  logs,
  72.      abnormal user logoffs, script questionnaire answers, callers logs  for
  73.      a  list of  users, etc.    TXT2MSG also  allows your  users to  upload
  74.      messages using a protocol transfer (such as Xmodem or Zmodem) and then
  75.      have the message inserted into the appropriate conference.  See sample
  76.      batchfiles for examples of uses.
  77.  
  78.      This  utility  is entirely  commandline  driven.   All  operations and
  79.      parameters are  specified to TXT2MSG on the commandline and optionally
  80.      the DOS environment via SET TXT2MSG=[options].
  81.  
  82.      TXT2MSG has been written for speed and functionality in Borland TurboC
  83.      with several assembly  subroutines.  Complete DOS 3.1  network support
  84.      is implemented  and TXT2MSG  will correctly  recover when in  conflict
  85.      with another process.  You should have no problems operating in multi-
  86.      tasking and LAN/Network environments.
  87.  
  88.      If some critical error occurs, TXT2MSG will abort and display an error
  89.      and errorlevel  that can  be tested for  in batch files.   A  table of
  90.      errors and errorlevels appears later and in QuickRef.DOC.
  91.  
  92.  
  93.                          Copyrights and Acknowledgments
  94.  
  95.      Special thanks to these folks for their initial support of TXT2MSG:
  96.  
  97.           Roger Sligar        The Right Place<tm>         404-476-2607
  98.           Tim Farley          SemWare/QEdit Support       404-641-8968
  99.           NASA Huntsville     SpaceLink Educational       205-895-0028
  100.           David Hellwege      Access In Melbourne      (61) 3-592-3338
  101.  
  102.      Copyright, Trademark, and Servicemark notices:
  103.  
  104.           TurboC         Copyright <c> 1987,1989-91 Borland International
  105.           PKZIP          Copyright <c> 1989-90 Phil Katz
  106.           PCBoard        Copyright <c> 1985-91 Clarke Development (CDC)
  107.           SQ2MSG         Copyright <c> 1987-88 Robert Vostreys
  108.           RNET           Copyright <c> 1989-91 Robert Vostreys
  109.           TXT2MSG        Copyright <c> 1988,1990-91 Robert Vostreys
  110.           MS-DOS         Trademark of MicroSoft Corporation
  111.           PC-DOS         Trademark of IBM Corporation
  112.  
  113.      References otherwise not documented:
  114.  
  115.           FTL            Refers to FTL BBS, home of TXT2MSG, 404-292-8761
  116.           ILink          Refers to the ILink International Network
  117.           RIME           RelayNet International Message Exchange
  118.           DOS            Refers to MS-DOS and/or PC-DOS
  119.  
  120. TXT2MSG 2.20                                                          Page 3
  121.  
  122.                            Distribution File Contents
  123.  
  124.      TXT2MSG  is  usually distributed  using  the  Phil Katz  PKZIP  (.ZIP)
  125.      packing utility but also may appear as a .PAK or .LHZ or whatever. All
  126.      references to the distribution file will be termed 'Zipfile'.
  127.  
  128.      The Zipfile used  to distribute TXT2MSG is  named using the  following
  129.      naming convention:
  130.  
  131.           TX2Mvvvx.zzz        vvv  = version release number (ie '200')
  132.                               x    = alpha/beta version code ('a'-'n')
  133.                                      registered version code ('r')
  134.                                      unregistered version ('u')
  135.                                      general release version (none)
  136.                               zzz  = packing method extension ('ZIP')
  137.  
  138.           TX2MBvvv.zzz may also be used occasionally.
  139.  
  140.      Please take the time to  examine the contents of the TXT2MSG  Zipfile.
  141.      You should find the files listed below and perhaps a couple additional
  142.      example batch files (late additions):
  143.  
  144.           TXT2MSG .EXE   -    The actual TXT2MSG program
  145.           TXT2MSG .DOC   -    The documentation you are now reading
  146.           QUICKREF.DOC   -    Quick reference information/listings
  147.           REGISTER.DOC   -    Registration form and information
  148.           CHANGES .ver   -    List of changes (history files)
  149.           SAMPLE  .MSG   -    Example textfile showing header control
  150.           ABNORMAL.BAT   -    Example batchfile (abnormal logoff rpt)
  151.           LOGMAIL .BAT   -    Example batchfile (mailrun process rpt)
  152.           NASAMAIL.BAT   -    Example batchfile (multi-file example)
  153.           EVENTSYS.BAT   -    Example batchfile (event process report)
  154.           SCRIPTS .BAT   -    Example batchfile (SQ2MSG processing)
  155.           TRACKUSR.BAT   -    Example batchfile (watching users rpt)
  156.  
  157.      The only file needed is the actual program itself  (TXT2MSG.EXE).  All
  158.      of the other included files are provided only for your information and
  159.      understanding.   If you come up  with an interesting  use for TXT2MSG,
  160.      please pass on the batchfile for the benefit of others.
  161.  
  162.  
  163.                              Shareware Distribution
  164.  
  165.      Shareware is a unique method of product marketing.  Shareware products
  166.      are easily obtained from most larger Bulletin Board Systems around the
  167.      world.  This method of distribution uses  the honor system for product
  168.      distribution,  meaning, you may use the  product for a trial period to
  169.      determine if it  is of use to you.  If  you continue using a shareware
  170.      product  you  are  expected to  send  the registration  once  you have
  171.      determined the product fits your needs.
  172.  
  173.      Please feel free to test and use TXT2MSG to determine if it suits your
  174.      needs.   If  you  continue using  it, complete  the  registration form
  175.      (REGISTER.DOC) and mail that with the registration fee ($10 suggested)
  176.      to the address on the form.   In exchange, you will be kept up to date
  177.      on all new versions as available, get timely support as needed, and be
  178.      able to access and use the beta versions.  There also may be 'special'
  179.      versions of TXT2MSG only available to those folks who have registered.
  180.      Your timely registration will encourage further development of TXT2MSG
  181.      and other BBS Sysop shareware utilities!
  182.  
  183. TXT2MSG 2.20                                                          Page 4
  184.  
  185.                                 TXT2MSG Operation
  186.  
  187.                                Commandline Parsing
  188.  
  189.  
  190.      TXT2MSG will  accept  options and  file  specifications in  any  order
  191.      EXCEPT that the first file specification seen will be assumed  to be a
  192.      PCBoard messagebase file (or conference number, see below).  Any other
  193.      file specifications,  which may include @list  and wildcard filenames,
  194.      are  considered  text files  for  processing  (exception: See  "Script
  195.      Questionnaire Processing" below).
  196.  
  197.      Options (switches) may be intermixed in any order using the '/' or '-'
  198.      switch characters.  You may combine all single switch  options under a
  199.      single switch character.  You could, for example, combine -r, -z,  and
  200.      -i as simply -rzi.
  201.  
  202.      The basic commandline syntax for TXT2MSG is represented as:
  203.  
  204.           TXT2MSG [options] d:\dir\msgs [@list] [files...]
  205.  
  206.      The Conference Number commandline syntax is represented as:
  207.  
  208.           TXT2MSG [options] ## [@list] [files...]
  209.  
  210.      Both  the basic  and Conference  Number  syntax can  be used  with the
  211.      Script  Questionnaire/Tracking  operation.   Note  that  the files  to
  212.      process  (including those found in @list  files) are treated as caller
  213.      log files to search, not textfiles  to process.  The script ANSWERx or
  214.      user tracking list files are designated by the -q switch:
  215.  
  216.           TXT2MSG [options] d:\dir\msgs -qANSWERx [@list] [callers...]
  217.           TXT2MSG [options] ## -qd:\dir\ANSWERx [@list] [callers...]
  218.  
  219.      Examples of valid commandlines:
  220.  
  221.           TXT2MSG d:\conf\1\msgs e:\textfile.doc
  222.  
  223.           TXT2MSG d:\conf\1\msgs -rz e:\textfile.doc
  224.  
  225.           TXT2MSG d:\conf\1\msgs @e:\listfile e:\textfile.* -rz
  226.  
  227.           TXT2MSG d:\conf\1\msgs /nzbm e:\textfile.doc /ri f:\*.*
  228.                     (switches -n, -z, -b, -m, -r and -i)
  229.  
  230.      Additional commandline  examples  are  shown  under  the  headings  of
  231.      "Script Questionnaire Processing" and "By Conference Number" below.
  232.  
  233.      If you  invoke TXT2MSG without any  parameters, you will  be shown the
  234.      version,  compile  date,  copyright,  commandline  syntax,  and  valid
  235.      commandline switches to remind you of TXT2MSG operation.
  236.  
  237.      Likely, TXT2MSG will  be able to parse  most any commandline  sequence
  238.      you care to give it.   If it gets confused or lost,  you will be shown
  239.      the offending switch(s) as it aborts operation with a DOS errorlevel.
  240.  
  241.      Wildcard filenames  are accepted both  on the  commandline and in  any
  242.      @list  file  lists.   You  may  use  absolute  or  relative  directory
  243.      references as long as they are valid DOS file specifications.
  244.  
  245. TXT2MSG 2.20                                                          Page 5
  246.  
  247.                                 Default Operation
  248.  
  249.           Full multi-node insertion and directory flushing.
  250.           Direct screen writes for pop-up windows.
  251.           Current date/time for message entry date/time.
  252.           Local (non-ECHO).
  253.           Accept instructions (header modifications) within textfile body.
  254.           TO: "ALL" if public (-p),  "SYSOP" if R/O (-r) message.
  255.           FROM: "SYSOP (TXT2MSG PROCESS)".
  256.           FROM: username in script (if using the -q switch).
  257.           SUBJECT: "TXT: filename.ext" (the base filename being imported).
  258.           SUBJECT: "SQ: filename.ext" (if the -q switch is used).
  259.           Unlimited number of messages created to fit entire textfile.
  260.           Only a single message generated per script if using -q switch.
  261.  
  262.  
  263.                               Commandline Switches
  264.  
  265.                          Message Header Control Switches
  266.  
  267.      Note that  the following switches  may be  overridden by special  text
  268.      within the textfile body if -n has NOT been specified and/or if -h HAS
  269.      been specified.   Each entry below has its "Override:"  entry for your
  270.      quick  reference.   Please  note that  the quotes  ("") should  NOT be
  271.      included  and the override must be  flush left in all capital letters.
  272.      See "Textfile Control of Message Header" for more information.
  273.  
  274.      If  two  commandline  switches  conflict,  the  LAST  one  will   take
  275.      precedence.  This allows you to override any environment settings.
  276.  
  277.           -p   Public message to "ALL".
  278.                Override: "PUBLIC:"
  279.                Override: commandline "-r".
  280.  
  281.           -r   Receiver-Only to "SYSOP".
  282.                Override: "PRIVATE:"
  283.                Override: commandline "-p".
  284.  
  285.           -e   Echo message.
  286.                Use -e if the message is to be 'echoed' to another BBS via a
  287.                netmail package such as RNet.
  288.                Override: "NOECHO:"
  289.                Override: commandline "-l".
  290.                Override: message subject starting with "NE:".
  291.  
  292.           -l   Local message.
  293.                The reverse of the -e switch.  The message is "local only".
  294.                Override: "ECHO:"
  295.                Override: commandline "-e".
  296.                Override: message subject starting with "E:".
  297.  
  298.           -s   Message SUBJECT.
  299.                Use  the -s  switch to  designate what  the message  subject
  300.                should be set to.   You must either place  the entire switch
  301.                in quotes (such as "-sTHIS IS A SUBJECT") or use underscores
  302.                (such as -sTHIS_IS_A_SUBJECT) for -s, -t, and -f switches to
  303.                accept  multiple words.   Any  and all  underscores will  be
  304.                replaced with spaces automatically.
  305.                Override: "SUBJECT: This is a subject"
  306.  
  307. TXT2MSG 2.20                                                          Page 6
  308.  
  309.           -f   Message FROM.
  310.                Use this switch to specify who the  message is to be "from".
  311.                See -s above for usage of quotes and underscores.
  312.                Override: "FROM: firstname lastname".
  313.                Override: commandline "-u".
  314.  
  315.           -t   Message TO.
  316.                Use the -t switch to specify  who the message is to be "to".
  317.                See -s above for usage of quotes and underscores.
  318.                Override: "TO: firstname lastname".
  319.                Override: commandline "-v".
  320.  
  321.           -u   Use PCBOARD.SYS for FROM field.
  322.                Use -uD:\DIR\PCBOARD.SYS to specify that the message  should
  323.                be "from" the username found in the PCBOARD.SYS file.
  324.                Override: "FROM: firstname lastname".
  325.                Override: commandline "-f".
  326.  
  327.           -v   Use PCBOARD.SYS for TO field.
  328.                The -vD:\DIR\PCBOARD.SYS  tells TXT2MSG  to use  the current
  329.                username found in the PCBOARD.SYS file for the "to" field.
  330.                Override: "TO: firstname lastname".
  331.                Override: commandline "-t".
  332.  
  333.           -d   Use filedate for message date/time.
  334.                TXT2MSG defaults  to using the current  system date/time for
  335.                the date/time used on the message.   However, specifying the
  336.                -d switch will make the date/time of the message the same as
  337.                the date/time stamp found on the file.
  338.                Override: "DATE: mm-dd-yy".
  339.                Override: "TIME: hh:mm".
  340.  
  341.           -h   Header modifications allowed (TXT file control).
  342.                TXT2MSG allows you to specify the header information for the
  343.                message  within the  message text.   This  switch re-enables
  344.                header control within the textfile if disabled by -n.
  345.  
  346.           -n   Header modifications NOT allowed (commandline control only).
  347.                If you do not want the text within the textfile to be parsed
  348.                for  header control (such as "TO:  name") use the -n switch.
  349.                If importing from  an unknown source or document file the -n
  350.                switch is nearly always recommended.  The reverse is -h.
  351.  
  352.  
  353.                          Other Message Control Switches
  354.  
  355.           -a   Alter low-ASCII characters.
  356.                The -a  switch will enable TXT2MSG's  filtering operation to
  357.                correct  (convert)  low  ASCII  characters.    This includes
  358.                handling  the  ESC  code used  in  ANSI sequences.    The -g
  359.                (graphics) switch is the reverse.
  360.  
  361.           -g   Allow low-ASCII characters (graphics).
  362.                This  switch will disable  the low-ASCII  filter.   You will
  363.                need  to include  this  switch if  you want  to  import ANSI
  364.                graphic sequences into messages.
  365.  
  366. TXT2MSG 2.20                                                          Page 7
  367.  
  368.           -i   Identify/tagline.
  369.                If  you include  the  -i  switch,  TXT2MSG  will  append  an
  370.                identification tagline  (and tearline) to the  bottom of all
  371.                messages.  The  tagline uses the  block (254) character  and
  372.                appears similar to:  " ■ TXT2MSG  v.vvx [sysdate  systime]".
  373.                If  you  want to  change  the  tagline  use the  environment
  374.                TAGLINE= (this is the same environment variable ProDoor uses
  375.                for its tagline).  If the -i switch is enabled, TXT2MSG will
  376.                also "pack" any  existing taglines in the source text.  This
  377.                is very useful if importing "joint" messages from a  ProDoor
  378.                ZIPM or PCBoard Capture file.
  379.  
  380.           -x   Specify the maximum number of messages per source textfile.
  381.                Use -x#  (# = 0 to  9) to specify how  many messages TXT2MSG
  382.                can  make  when  a textfile  is  longer then  96  lines.   A
  383.                "(continued)" line is added to the bottom of a split message
  384.                and  to the beginning of the next  message.  If any messages
  385.                are  split because of  length, the "message  number" will be
  386.                placed in the 25th position of the subject field ("1" on the
  387.                first  message, "5" on the fifth,  etc).  Specify -x0 (which
  388.                is  default) if you want TXT2MSG to make as many messages as
  389.                needed (up to 9999 messages) to  import the entire textfile.
  390.                This has no effect during script questionnaire (-q) or joint
  391.                (-j) file processing.
  392.  
  393.           -z   Single-node fast multi-message insertion.
  394.                The  -z  (zippy)  switch  tells  TXT2MSG  not to  flush  the
  395.                directory structure when inserting multiple messages.   This
  396.                option is basically used for single-node systems or when you
  397.                know there  are no users accessing  a particular messagebase
  398.                during message insertion.  Backup logic, for safety reasons,
  399.                still  forces   a  DOS3  LOCK  on   the  messagebase  during
  400.                insertions.    This switch  has  no  true  effect on  single
  401.                message insertions.
  402.  
  403.           -q   Script Questionnaire processing (SQ2MSG).
  404.                Use  -q to  specify the  location and  filename of  a script
  405.                questionnaire ANSWERx  file to process.   This should appear
  406.                something  like: "-qD:\PCB\MAIN\ANSWER1".   Do  not  put any
  407.                spaces between the  -q switch and  the filename to  process.
  408.                When this switch is in effect, TXT2MSG uses  different rules
  409.                for the FROM  field and processes the other  files specified
  410.                much  differently.   See  "Script  Questionnaire Processing"
  411.                below for more information.
  412.  
  413.           -j   Joint (multimessage) sourcefile processing.
  414.                Specify the  joint switch when  you are importing  a ProDoor
  415.                ZIPM or PCBoard Capture file.  This also works with straight
  416.                terminal program  "logs"  of  a  R;S;NS  of  a  messagebase.
  417.                Useful for  translating an older or  non-PCBoard messagebase
  418.                to  PCBoard 14.x format.  Each message within the sourcefile
  419.                will  be  processed  into  a  message  in  the   destination
  420.                messagebase.   You will  need  to execute  TXT2MSG  multiple
  421.                times  if importing multiple  joint source files.   In other
  422.                words, TXT2MSG  only accepts the first textfile  when the -j
  423.                switch is included.
  424.  
  425. TXT2MSG 2.20                                                          Page 8
  426.  
  427.                             Screen/Interface Switches
  428.  
  429.           -b   BIOS screen writes.
  430.                This switch will force TXT2MSG to use BIOS writes for screen
  431.                displays.   This is likely  unneeded unless  using an  older
  432.                multi-tasker  or  a  not-so-compatible  computer.    TXT2MSG
  433.                should detect most of the more common multi-tasking  systems
  434.                and enable this option automatically.  If the auto-detection
  435.                fails, use this switch to force BIOS screen operations.
  436.  
  437.           -c   CGA snow reduction.
  438.                Use  this switch  if  you get  'snow' on  the  screen during
  439.                direct  screen writes and would rather  not see it.  TXT2MSG
  440.                should automatically detect if you have an older CGA display
  441.                and enable this automatically.  If this automatic  detection
  442.                fails and you desire snow reduction use this switch.
  443.  
  444.           -m   Monochrome/LCD display colors.
  445.                This switch  will force  the  output for  best operation  on
  446.                monochrome  and LCD  displays.   TXT2MSG will  automatically
  447.                detect most monochrome and mono-graphic display adapters  as
  448.                well as supporting the current screen MODE setting.  If this
  449.                automatic detection fails, this switch will force the issue.
  450.  
  451. TXT2MSG 2.20                                                          Page 9
  452.  
  453.                          Script Questionnaire Processing
  454.  
  455.      TXT2MSG  and SQ2MSG  have, until  this time,  been separate  programs.
  456.      They  have been  combined into  one program  (TXT2MSG) since  the code
  457.      between  the two programs was basically  being duplicated.  The SQ2MSG
  458.      code  added only  about 1K  bytes to  the final  TXT2MSG.EXE  size and
  459.      eliminated the 20K separate program of SQ2MSG.EXE.
  460.  
  461.      The idea behind  SQ2MSG is to process new script questionnaire answers
  462.      into  a message addressed from  the user completing  the script.  This
  463.      gives the  Sysop (or Sysop  helpers) the ability  to do a  (F)ind when
  464.      reading the message to easily upgrade or edit that users record.  Once
  465.      you start reading scripts  in the messagebase instead of going  out to
  466.      disk you'll wonder how you survived without it!
  467.  
  468.      Another feature which is important to SQ2MSG is that commonly you want
  469.      to check that  the new  user read the  required bulletins, or  perhaps
  470.      want  to check  if they  tried to  download files  right off  the bat.
  471.      SQ2MSG will, optionally,  append users' callers log entries to the end
  472.      of their  script answer  message!   You can now,  simply by  reading a
  473.      single message, see new users'  script questionnaire answers and their
  474.      callers log entries.  If  they did what was required (or not), you can
  475.      simply use the (F)ind command to edit their user record.
  476.  
  477.      In addition, this  implementation of SQ2MSG gives  you the ability  to
  478.      create a list  of users to "watch".   Users in this special  list will
  479.      have their  callers log entries placed in a message for you to examine
  480.      to see  what they might  be up to.   This is explained  further in the
  481.      example batch files TRACKUSR.BAT and TRACKONE.BAT.
  482.  
  483.      SQ2MSG processing  is  slightly  different  than  the  normal  TXT2MSG
  484.      processing.  General operation is exactly the same, except:
  485.  
  486.           The -f  (from) switch  will no  longer work.   The  messages will
  487.           always be addressed from the user who answered the script.
  488.  
  489.           You must specify the script questionnaire answer file to  process
  490.           with the -q  switch.  This would  normally looks something  like:
  491.           -qD:\PCB\MAIN\ANSWER1.  Do  not put any spaces between the -q and
  492.           the filename  to process.   The inclusion  of the -q  switch (and
  493.           filename) tell  TXT2MSG that you  wish SQ2MSG processing  not the
  494.           normal TXT2MSG processing.
  495.  
  496.           The questionnaire  answer  file  is  processed  differently  than
  497.           TXT2MSG normally  processes  text files.    The file  is  scanned
  498.           looking for  "From: username,".   When found,  it takes all  text
  499.           between that point and the next "From: " (or the end of the file)
  500.           and inserts it as a message.
  501.  
  502.           No message header modifications via textfile are permitted (ie, a
  503.           -n switch is assumed).
  504.  
  505.           All other files  specified (via wildcard,  @list, or  explicitly)
  506.           are treated as callers logs.  The specified files will be scanned
  507.           for caller  log entries from the username  completing the script.
  508.           These files  are not imported (as normal TXT2MSG processing would
  509.           do) - only  the text/log entries  which are  from the given  user
  510.           are.   This  allows you to  easily determine  if a  user read the
  511.           required bulletins or tried to download files or whatever.
  512.  
  513. TXT2MSG 2.20                                                         Page 10
  514.  
  515.                             Example SQ2MSG Processing
  516.  
  517.           (see also the SCRIPTS.BAT example batchfile)
  518.  
  519.           TXT2MSG c:\pcb\main\msgs -qc:\pcb\main\answer1 d:\logs\caller? -r
  520.  
  521.      The above example  shows perhaps the most common usage  for the script
  522.      questionnaire processing abilities  of TXT2MSG (SQ2MSG).   The  answer
  523.      file  c:\pcb\main\answer1 is scanned  and entered  as messages  to the
  524.      c:\pcb\main\msgs (main  board) messagebase.    Messages will  be  R/O,
  525.      addressed to SYSOP (-r), and have any callers log entries found in the
  526.      d:\logs\caller? files appended.   You need one of these statements for
  527.      each of  your script ANSWERx files  (if you have more  than one) since
  528.      TXT2MSG only accepts a single -qANSWERx statement.
  529.  
  530.           TXT2MSG 21 -qc:\conf\1\answer5 -pil -tALL -sConf_21_Application
  531.  
  532.      This second example  shows how you might  have a script  questionnaire
  533.      (which produces c:\conf\1\answer5) for requesting access to a  private
  534.      (adult)  conference.    The script  answer  messages  are  placed into
  535.      conference 21 and are addressed to ALL in a public message.  The other
  536.      conference members could  then review this script answers to decide if
  537.      they wanted this person to join  their party.  Note that no additional
  538.      files are specified  (only 21 and c:\conf\1\answer5 files) -- thus, no
  539.      callers log entries will be included in the message.
  540.  
  541.  
  542.                           TXT2MSG Environment Variable
  543.  
  544.      TXT2MSG will search  for the environment TXT2MSG=  before it does  any
  545.      commandline parsing.  You may specify any options you wish  TXT2MSG to
  546.      use as defaults.   If any switches are found  on the commandline which
  547.      conflict  with the environment, the commandline takes precedence.  For
  548.      example, your AUTOEXEC.BAT might have:
  549.  
  550.           SET TXT2MSG=-mbiz -fSYSOP -l
  551.  
  552.      This would  set the default  operation to  use Monochrome color  (-m),
  553.      BIOS writes (-b),  include a tear and tagline (-i), override directory
  554.      flushing for faster  operation (-z), messages  will be addressed  from
  555.      SYSOP (-fSYSOP), and will be "local" (-l).  If another -f was found on
  556.      the commandline, it would override the -fSYSOP in the environment.  As
  557.      well, if a -e was found on the commandline it would override the -l.
  558.  
  559.      If you have a batch file with several calls to TXT2MSG, you might want
  560.      to include a SET TXT2MSG statement to  avoid having to repeat yourself
  561.      on each invocation.
  562.  
  563.      If you  find that the commandline  for TXT2MSG is too  long (either by
  564.      the DOS limitation of  127 bytes or for aesthetic reasons) simply move
  565.      some of it to the TXT2MSG environment.
  566.  
  567.      Use the TXT2MSG environment to specify those switches you find you are
  568.      always using  in TXT2MSG commandlines.   If you  are running a  single
  569.      node system you might wish to  use SET TXT2MSG=-z to force  high-speed
  570.      insertion  at all  times.   Or,  perhaps during  event  processing you
  571.      always  send  the messages  to a  special conference  you might  use a
  572.      statement of SET TXT2MSG=d:\conf\special\msgs in your EVENT.SYS file.
  573.  
  574.      The TXT2MSG environment is NOT required for TXT2MSG to operate.
  575.  
  576. TXT2MSG 2.20                                                         Page 11
  577.  
  578.                               By Conference Number
  579.  
  580.      You may use a conference number in place of the conference messagebase
  581.      file specification IF one of RNETCONF, CONFINFO, or CNAMES environment
  582.      variables exist or  if RNETCONF, CONFINFO,  CNAMES.$$$, or  CNAMES.@@@
  583.      files exist in the current directory.
  584.  
  585.      When TXT2MSG parses the messagebase file from the commandline it looks
  586.      to see if it exists.  If the file specified does not exist (presumably
  587.      because you  specified a number in  place of a filename)  and what you
  588.      specified was a number, TXT2MSG then looks for RNETCONF, CONFINFO, and
  589.      CNAMES environments (in  that order).  It will then  expand the search
  590.      if  not found  to look  for  one of  the needed  files in  the current
  591.      directory.   If it finds the file  it needs (via environment or in the
  592.      current  directory), TXT2MSG will  open the appropriate  file and find
  593.      the messagebase filename based on the number specified.
  594.  
  595.      The RNETCONF environment  should point to the location and filename of
  596.      RNet  1.05+'s conference information  file (most  commonly, RNETCONF).
  597.      This generic conference  specification file is  normally generated  by
  598.      PCBCONF.EXE and/or PROCONF.EXE  for the 32765  conference support  for
  599.      RNet QWK-packet based echoconferences.
  600.  
  601.           Example:  SET RNETCONF=D:\RNET\RNETCONF
  602.  
  603.      Found on most PCBoard systems, the CONFINFO environment should specify
  604.      the location and  filename of ProDoor 2.9+'s  CONFINFO file.   TXT2MSG
  605.      supports both  the 255 and the  2040 conference variants.   If you are
  606.      running ProDoor on your system, this environment is already set.
  607.  
  608.           Example:  SET CONFINFO=D:\PROD\CONFINFO
  609.  
  610.      If you  have neither the RNETCONF  or CONFINFO files to  work with you
  611.      may use  the CNAMES environment variable.   Since this is  an uncommon
  612.      environment you  might wish to set  it before and reset  it (erase it)
  613.      after calling TXT2MSG.  To use the CNAMES environment variable, set it
  614.      to point  to the  location and filename  of your  PCBoard 14.x  CNAMES
  615.      file.   TXT2MSG will search for  CNAMES.$$$ and CNAMES.@@@  but do NOT
  616.      specify an extension  in the environment.  TXT2MSG does support CNAMES
  617.      up to 65534 conferences (PCBoard 14.5+).
  618.  
  619.           Example:  SET CNAMES=D:\PCB\MAIN\CNAMES
  620.  
  621.      As  long as any one or more of  these environment variables are set or
  622.      one  of the files needed  is in the  current directory, you  may use a
  623.      conference number  in place of the  messagebase name.  If  you were to
  624.      move a  conference (say, to a  different drive) you would  not have to
  625.      worry about changing your TXT2MSG batch files.
  626.  
  627.      Example TXT2MSG commandlines using Conference Number:
  628.  
  629.           TXT2MSG 0 c:\gen\blt11 -tALL -fSYSOP -sBulletin_11 -piln
  630.                (conf 0, blt11 inserted as public message, from Sysop)
  631.  
  632.           TXT2MSG 15 -r -tSYSOP "-sUpload list" c:\pcb\main\download.txt
  633.                (conf 15, R/O to Sysop, download.txt inserted as message) 
  634.  
  635.           TXT2MSG 99 -r -qc:\main\answer1 c:\main\caller? -SScript_Answers
  636.                (conf 99, R/O to Sysop, SQ2MSG process answer1 & callers)
  637.  
  638. TXT2MSG 2.20                                                         Page 12
  639.  
  640.                        Textfile Control of Message Header
  641.  
  642.           See QUICKREF.DOC for a quick reference to these options.
  643.  
  644.      One  of the  most  useful  features  of  TXT2MSG  is  that  it  allows
  645.      modification of  the  message header  from  specific text  within  the
  646.      textfile itself.   This allows you (or the person/program creating the
  647.      textfile) to have control over the header without having to modify the
  648.      commandline  switches.   This operation  may be  disabled with  the -n
  649.      switch (see  above) if this is  not desired.  This  operation is semi-
  650.      automatic in script  questionnaire processing and  fully automatic  in
  651.      join message processing.
  652.  
  653.      Each "keyword"  which is accepted  by TXT2MSG  within the textfile  is
  654.      listed with a description  and comments below.   Please note that  all
  655.      keywords MUST be flush left, in all capital letters, with the appended
  656.      colon and space.   Anything  not matching exactly  will be treated  as
  657.      text and inserted  into the message body.  Accepted  keyword lines are
  658.      NOT inserted into the message text itself unless -n is used.
  659.  
  660.           TO: firstname lastname
  661.           FROM: firstname lastname
  662.           SUBJECT: subject text here
  663.  
  664.                These keywords are  pretty much self documenting.  Note: The
  665.                space after the colon is REQUIRED.  Examples: "FROM: SYSOP",
  666.                "SUBJECT: HELLO WORLD!".
  667.  
  668.           ECHO:
  669.           NOECHO:
  670.  
  671.                Use ECHO: and  NOECHO: to specify if the message should have
  672.                the Net/Echo  flag turned on  or off.   Most inter-bbs  mail
  673.                packages  honor the echo status flag.   Specify ECHO: if the
  674.                message is to be  sent to other systems, and NOECHO:  if the
  675.                message is to remain local only.
  676.  
  677.           PUBLIC:
  678.           PRIVATE:
  679.  
  680.                PUBLIC: forces  the message to  be public (readable  by all)
  681.                while PRIVATE: forces the message to be Receiver Only.
  682.  
  683.           CC: firstname lastname
  684.           CC: !d:\dir\filename.lst
  685.  
  686.                CC:  (carbon copy)  names are  additional names to  send the
  687.                message to.  You can use this to specify a "group" of people
  688.                to send a given message to.  If the first character of a CC:
  689.                name is an "!" the rest of  the line is assumed to be a file
  690.                specification pointing to  a textfile with a list  of names.
  691.                This is useful to send messages to a  list of users produced
  692.                with grep  or a similar utility.   You may specify a maximum
  693.                of 100 total  CC: names including any names found in !files.
  694.                All other aspects of the "cc" message will be the same.
  695.  
  696.           DATE: mm-dd-yy
  697.           TIME: hh:mm
  698.  
  699. TXT2MSG 2.20                                                         Page 13
  700.  
  701.                           Notes and Limits of Operation
  702.  
  703.      TXT2MSG  will only process  a total of  250 files.   This includes all
  704.      files found via  wildcard and @list specifications.  The actual number
  705.      of messages inserted might be more.   A single 5000 line textfile with
  706.      100 carbon copy names would generate over 5000 [5000/95*100] messages!
  707.      The number of  messages generated by a script questionnaire ANSWERx or
  708.      ZIPM/CAP joint source file is basically unlimited.
  709.  
  710.      The TO, FROM, and SUBJECT fields of a PCBoard 14.x message are limited
  711.      to 25 characters  (each).  If you specify anything  longer, it will be
  712.      truncated to  25.  Note that  if multiple messages are  being inserted
  713.      from the same textfile (a file with over 95 lines of text) the subject
  714.      length will actually be shorter to make room for the message counter.
  715.  
  716.      Textfiles are broken  into multiple messages (max 9999) if they exceed
  717.      95 lines.  You may specify the maximum number of messages which may be
  718.      created from a single textfile with the -x# switch (0-9).  Setting -x0
  719.      will enable TXT2MSG to insert unlimited messages from a single source.
  720.  
  721.      Any leading  blank lines on  messages are  removed automatically.   If
  722.      more than two blank lines are found sequentially, any in excess of two
  723.      will be  ignored (not  imported).   Message line  lengths over  79 are
  724.      chopped  to 79  characters.   Joint (-j)  message processing  does not
  725.      strip  excessive blank  lines, thus,  inserting the  messages  as they
  726.      appeared origionally.
  727.  
  728.      Special  and  dangerous  ASCII characters  (such  as ^S,  ^Q,  ^X) are
  729.      filtered out of the message text and replaced with a period (".").  If
  730.      you are expecting  to do extensive importing of textfiles with problem
  731.      characters, I  recommend using a  translation utility  such as the  PD
  732.      TRANSLAT.COM to clean-up the textfiles before passing them to TXT2MSG.
  733.      You may enable/disable the low ASCII  filter with the -g (enable)  and
  734.      -a (disable) switches
  735.  
  736.      All files (messagebases, textfiles,  script questionnaire answerx, and
  737.      callers logs) are opened using DOS3/NetBIOS SHARE.  TXT2MSG will retry
  738.      DOS3 SHARE locks  for 30 seconds and then abort  with an errorlevel if
  739.      it fails.
  740.  
  741.      Files  without CR (carriage return) such  as those generated under the
  742.      UNIX  operating  system  and files  using  the Macintosh  soft  CR are
  743.      correctly  supported.   This is  useful for  non-PC folks  to protocol
  744.      upload  messages  which  TXT2MSG can  then  process for  them.   Amiga
  745.      formatted soft-CR textfiles are also supported.
  746.  
  747.      TXT2MSG  should correctly  detect when  it is  running under  a multi-
  748.      tasker such as  OmniView or DesqView.  If  it this autodetection fails
  749.      or  if you  have a strange  multi-tasker, use  the -b  switch to force
  750.      TXT2MSG to operate at the BIOS level for screen writes.
  751.  
  752.      TXT2MSG will not enter the very first message into a  messagebase.  If
  753.      you create a new  messagebase and try to use it with TXT2MSG before it
  754.      has  had _any_ messages in it, TXT2MSG will abort with "Message number
  755.      questionable" and errorlevel==7.  Packed messagebases work just fine.
  756.  
  757.      You  need about  128K free for  TXT2MSG to  run.  At  most (when doing
  758.      script questionnaires and callers log scanning), TXT2MSG requires  93K
  759.      to operate.   DOS requires about  another 32K for itself.   I can  cut
  760.      down the memory usage at the cost of processing speed.
  761.  
  762. TXT2MSG 2.20                                                         Page 14
  763.  
  764.                          Error Messages and ErrorLevels
  765.  
  766.      TXT2MSG  might  abort  with any  of  the following  error  messages or
  767.      conditions.  You may use "IF ERRORLEVEL..." statements in a batch file
  768.      to trap  these conditions as  you see fit.   Remember to  always check
  769.      errorlevels  in REVERSE order,  since the DOS  IF ERRORLEVEL==x always
  770.      assumes equal to or greater than x.
  771.  
  772.      ErrorLevel     Message/meaning
  773.      ----------     -------------------------------------------------
  774.            0        Normal Termination (no error)
  775.            1        Window, Internal, or Memory allocation error
  776.            2        Error accessing @LIST file [filename]
  777.            3        Memory allocation error
  778.            4        Error accessing Messagebase [filename] {DOS Error}
  779.            5        Error accessing file [filename] {DOS Error}
  780.            6        Nothing to do! (No text files found)
  781.            7        Trashed message or NDX file! [filename]  Repack!
  782.            8        Unknown command switch [switch]
  783.            9        User requested abort!
  784.           10        Invalid PCBOARD.SYS file [filename]
  785.           11        Error accessing ANSWERx file [filename]
  786.           12        Error accessing CALLERx file [filename]
  787.           13        Unexpected DOS Error [file] {DOS Error}
  788.  
  789.      [filename] refers to the file in question with the problem.
  790.  
  791.      {DOS Error}  will be replaced with  the actual DOS error  text such as
  792.      "Invalid Filename", "No such directory", "Invalid Drive", etc.
  793.  
  794.      [switch] shows the commandline switch where TXT2MSG got confused.
  795.  
  796.      If an error occurs, the errorlevel  itself is also displayed for  your
  797.      reference as "TXT2MSG ERRORLEVEL==xx: {error text}" to STDERR.
  798.  
  799.  
  800.                               Contacting the Author
  801.  
  802.      I  am always interested in hearing  your comments, suggestions and bug
  803.      reports such that they may be handled quickly.   If you need to get in
  804.      contact with me, address all correspondence to "ROBERT  VOSTREYS" via:
  805.  
  806.           BBS:
  807.  
  808.                Faster-Than-Light   404-292-8761 / 404-299-3930   [HST 1440]
  809.                The Right Place<tm> 404-476-2607                  [HST 1440]
  810.  
  811.           EchoConference:
  812.  
  813.                ILink               Sysops, MM-RNet, or ILink conferences.
  814.                RIME                Sysops or Admin conferences.
  815.                Atlanta             AtlSysops or NetLanta conferences.
  816.  
  817.           US Mail:
  818.  
  819.                Robert Vostreys, FTL Sysop
  820.                Post Office Box 2315
  821.                Stone Mountain, GA  30086-2315
  822.  
  823. TXT2MSG 2.20                                                         Page 15
  824.  
  825.                               The Future of TXT2MSG
  826.  
  827.      The future of TXT2MSG will be based on the  comments, suggestions, and
  828.      registration of the Sysops who use it.  If you have need for a feature
  829.      or ability for TXT2MSG, drop me a note!
  830.  
  831.      If you use TXT2MSG, you should register it.  TXT2MSG  is Shareware and
  832.      inexpensive Shareware  at that!   With the  features and abilities  of
  833.      TXT2MSG,  it should be useful  to any Sysop who  wants to know what is
  834.      going on his/her system.
  835.  
  836.      The latest version  of TXT2MSG can always  be downloaded from  Faster-
  837.      Than-Light, The  Right Place (see  above for  numbers), Salt Air,  and
  838.      most  of the larger public access  PCBoard systems.  If any registered
  839.      or beta  versions are made available they will be made on both Faster-
  840.      Than-Light and The Right Place for download via password protection.
  841.  
  842.      TXT2MSG 2.xx  is a complete rewrite  of the previous 1.xx  version for
  843.      testing of new  message insertion routines written  in TurboC.   These
  844.      new insertion routines,  as they are  "proved", will soon  be used  in
  845.      RNet (a utility for QWK-packet EchoConferencing for PCBoard 14.x).
  846.  
  847.      Version  2.10 was  upgraded to  use the  TurboC++ compiler  while also
  848.      adding the conference number and SQ2MSG support.
  849.  
  850.      Version  2.20 was  an  upgrade to  allow processing  ProDoor  ZIPM and
  851.      PCBoard Capture sourcefiles.  This  version also revamped the  filter,
  852.      tagline packing, and  insertion processing for  greater speed.   Joint
  853.      sourcefile insertion of 500 messages (with -z) takes about 50 seconds!
  854.  
  855.      If you would  like more information  on the other utilities  which are
  856.      available  or have ideas or needs for additional sysop utilities, I am
  857.      always ready  to listen -- Sysops need all the help and utilities they
  858.      can get!
  859.  
  860.      If you come up with some interesting applications for  TXT2MSG I would
  861.      be interested in seeing what you have done.  TXT2MSG has the power and
  862.      ability to  do  many  fancy  things never  before  thought  of  which,
  863.      hopefully, helps take  some of the load off  the Sysop.  Pass  on your
  864.      batch files and ideas so other Sysops may benefit!
  865.  
  866.           Above all else, enjoy the wild wonderful world of BBSing!
  867.  
  868. TXT2MSG 2.20                                                         Page 16
  869.  
  870.                             PCBoard 14.x Messagebases
  871.  
  872.                              Message Insertion Logic
  873.  
  874.      TXT2MSG is designed  to dependably and quickly operate on PCBoard 14.x
  875.      messagebases.   You may safely insert messages concurrently with other
  876.      nodes/processes  as all of the required  DOS3 and PCBoard 14.x message
  877.      insertion rules are fully implemented and extensively tested.
  878.  
  879.      Logic behind PCBoard 14.x message insertion routines:
  880.  
  881.           Compose and prepare the message in memory.
  882.  
  883.           Check valid messagebase header and for non-overflowed NDX.
  884.           Check for the 'LOCKED' flag/DOS3 lock in the messagebase header.
  885.           If locked, wait one second and try again (30 retries).
  886.           Issue DOS3 LOCK on the 'lock' header field for ourselves.
  887.           Get the high message number and increment by one.
  888.           Seek to end of file (save (LOF/128) for NDX pointer).
  889.           Write message header and body to messagebase.
  890.           Update NDX pointer to message header location (LOF/128).
  891.           Update messagebase header values, remove DOS3 LOCK.
  892.           Flush(*) directory/buffers to force DOS3 network update.
  893.  
  894.      (*) -  you may override  the flush operation  to force  faster message
  895.      insertion speed in single node operations.  This will usually only  be
  896.      of interest  if  inserting multiple  messages since  a single  message
  897.      insertion  will  be flushed  automatically  when the  file  is closed.
  898.      Disabling directory  structure flushing  in multi-node  operations may
  899.      result  in  "lost" messages  if  concurrent  entry is  encountered  --
  900.      unlikely, but why take the chance?  Thus, the default is to flush.
  901.  
  902.  
  903.                             Structure of Messagebases
  904.  
  905.      A  PCBoard 14.x  Messagebase  is composed  of a  fixed field  128 byte
  906.      record file and accompanying fixed field 4 byte NDX pointer file.
  907.  
  908.      The  first record of the messagebase is  the messagebase header.  This
  909.      record  is used  to store the  low message  number (start  of NDX file
  910.      offset), high message number (last inserted message), total  number of
  911.      currently  active  messages, and  number  of  system  callers (in  the
  912.      conference 0 messagebase).   The lock field is used  to allow multiple
  913.      nodes concurrent  access  when  entering  a message.    The  128  byte
  914.      messagebase header block uses the following 'C' structure:
  915.  
  916.         struct
  917.          {
  918.            unsigned char high_msg_num[4];    /* MBF single */
  919.            unsigned char low_msg_num[4];     /* MBF single */
  920.            unsigned char num_messages[4];    /* MBF single */
  921.            unsigned char num_callers[4];     /* MBF single */
  922.            unsigned char lock[6];            /* DOS3 LOCK area */
  923.            unsigned char unused[128-22];
  924.          }  pcb14base_header;
  925.  
  926.      MBF (MicroSoft Binary  Format) numbers are the native format of BASCOM
  927.      1.0 which  was used  as  the base  for the  PCBoard  BBS software  for
  928.      versions previous to 14.5.  Failure to properly support the BASCOM MBF
  929.      format will result in corrupted messagebases.
  930.  
  931. TXT2MSG 2.20                                                         Page 17
  932.  
  933.      Each  message within  a messagebase  is composed  of a  message header
  934.      block  and one or  more message  body blocks.   The header is  used to
  935.      store the message number, status (security), to, from, date, and other
  936.      such fields.  The layout is shown in the following 'C' structure:
  937.  
  938.         struct
  939.          {
  940.            unsigned char stat_flag;          /* security status byte...
  941.                                                ' ' = public, unread
  942.                                                '-' = public, read
  943.                                                '*' = r/o, unread
  944.                                                '+' = r/o, read
  945.                                                '~' = comment, unread
  946.                                                '`' = comment, read
  947.                                                '!' = group pwd, all
  948.                                                '#' = group pwd, unread
  949.                                                '$' = group pwd, read
  950.                                                '%' = sender pwd, unread
  951.                                                '^' = sender pwd, read    */
  952.            unsigned long msg_number;         /* MBF single               */
  953.            unsigned long ref_number;         /* MBF single               */
  954.            unsigned char block_count;        /* number of body blocks+1  */
  955.            unsigned char msg_date[8];        /* MM-DD-YY                 */
  956.            unsigned char msg_time[5];        /* HH:MM                    */
  957.            unsigned char msg_to[25];         /* left, padded with spaces */
  958.            unsigned char reply_info[10];     /* "has reply" information  */
  959.            unsigned char msg_from[25];       /* left, padded with spaces */
  960.            unsigned char msg_subject[25];    /* left, padded with spaces */
  961.            unsigned char msg_password[12];   /* left, padded with spaces */
  962.            unsigned char active_flag;        /* (225)=good, (226)=killed */
  963.            unsigned char echo_flag;          /* 'E' = echo, ' ' = local  */
  964.            unsigned char reserved[5];        /* used by e-mail packages  */
  965.            unsigned char host_tag_flag;      /* '*' = has host tagline   */
  966.          }  pcb14msg_header;
  967.  
  968.      The text  body itself is composed  of (block_count - 1)  blocks of 128
  969.      bytes.   Each 'line' of text  is terminated with a (227)  and does not
  970.      contain any  CRLF's.  A  standardized maximum of  99 lines is  used to
  971.      maintain compatibility  with older messagebase utilities and echo-mail
  972.      packages.
  973.  
  974.      The NDX file associated with  a PCBoard 14.x messagebase is a  file of
  975.      fixed  length (4 byte) records.  Each  record is a MBF single pointing
  976.      to  a record number within the messagebase.   This is a pointer to the
  977.      message header  record within the messagebase  file.  Record 1  in the
  978.      NDX will usually  have a MBF  value of 2  since the first  messagebase
  979.      block is  used by the  messagebase header and  thus the  first message
  980.      actually  starts at block  2.  The  NDX record numbers  (position) are
  981.      based  as an offset from the low_message_number.   Record 1 in the NDX
  982.      points to  the low_message_number  header offset  x 128  bytes.  If  a
  983.      message  has been  deleted (and  thus might  no longer  be within  the
  984.      messagebase file) the NDX value is a negative pointer value.
  985.  
  986.      For  example, Say you have a  messagebase with a low_message_number of
  987.      1000.   To look  up the  position of message  1015 you  would read NDX
  988.      record  16 (message_desired  - low_msg_number  + 1).   This  MBF would
  989.      yield the record number (NDX  MBF value * 128 byte offset)  within the
  990.      messagebase where message 1015's header block is located.
  991.