home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_PAS / SCANH326.ZIP / SCANHELP.DOC < prev    next >
Text File  |  1994-01-22  |  29KB  |  717 lines

  1. SCANHELP - Utility to produce help files from TP source code.
  2.  
  3.     Version 3.26 - update by D.J. Murdoch to TurboPower's utility.
  4.  
  5.     This update is copyright (c) 1991,1994 D.J. Murdoch.  It contains
  6.     public domain code written by TurboPower Software, and code licensed
  7.     from TurboPower and Borland.
  8.  
  9. SYNTAX
  10.  
  11.     SCANHELP [options] filespec [filespec...]
  12.  
  13.      Parses the interface section of Turbo Pascal 4.0 to 7.0 units to
  14.      produce a help file summarizing the public methods, procedures, and
  15.      functions.
  16.  
  17.      SCANHLPX (available to registered users) uses the same syntax, but
  18.      runs in DOS protected mode.
  19.  
  20.     Filespec:  list of input files.  May contain wildcards.  If
  21.     non-units are included, they'll be scanned for Uses statements to
  22.     use in conjunction with the /U option.
  23.  
  24.     Options:
  25.        /D sym       define symbol for conditional compilation
  26.        /FB          write Borland .TPH format
  27.        /FH          write HELPC .HDF format
  28.        /FP          write MAKEHELP .TXT format
  29.        /FT          write TeX .TEX format
  30.        /I dirs      search list for include files
  31.        /L           set temporary topic buffer to disk
  32.        /O filename  output filename
  33.        /S           sort the "See also" tables
  34.        /T nn        set tabs to nn columns (default 8)
  35.        /U dirs      search list for used units
  36.        /V size      set virtual memory swap file size in Kbytes
  37.                     (SCANHLPX only)
  38.        /$A+, etc    compiler switches for conditional compilation
  39.  
  40. SUMMARY
  41.  
  42.     SCANHELP is designed to produce help files from Turbo Pascal source
  43.     code.  These are good enough to use for your own reference, and
  44.     should serve as a good base for help files that you write for
  45.     others.
  46.  
  47.     Version 3.26 can produce four kinds of help files:  *.TXT files, for
  48.     use as input to TurboPower Software's MAKEHELP utility; *.TPH files,
  49.     for use with Borland's THELP 3.0 or Pascal 7.0+ IDE; *.TEX files,
  50.     for input to Knuth's TeX text processor (using the LaTeX macro
  51.     package); and *.HDF files, for use with version 10 or higher of Ron
  52.     Loewy's Help Development Kit. The first two give you instantaneous
  53.     keyword searches; the third gives a professional-looking indexed
  54.     manual, and the last gives you input files that will work with help
  55.     compilers for Windows 3.0 and 3.1, OS/2, and DESQview/X, among
  56.     others.
  57.  
  58. REQUIREMENTS
  59.  
  60.     *.TXT:  The TurboPower MAKEHELP utility is needed to compile the
  61.     help file, and their POPHELP utility is needed to view them.
  62.     Contact TurboPower Software at 800-333-4160 or 719-260-9136 for
  63.     details on how to obtain these.
  64.  
  65.     *.TPH:  These files work directly with the version 7.0 Borland
  66.     Pascal IDEs, and may work with current BC++ IDEs.  You can also use
  67.     version 3.0 (or later?) of the THELP utility for access outside the
  68.     IDE.
  69.  
  70.     *.TEX:  You'll need a copy of the TeX text processor, the LaTeX
  71.     macro package, and if you want an index, the MakeIndex (or MAKEINDX)
  72.     utility.  There are several good free implementations of this; I
  73.     recommend emTeX, by Eberhard Mattes.  It comes with drivers for
  74.     screen previewers and Postscript, Laserjet, or dot-matrix output.
  75.  
  76.     *.HDF:  This format is designed for use with version 10.0 of Ron
  77.     Loewy's Help Development Kit, HDK10?.ZIP.  For most of the target
  78.     formats, you'll also need a separate help compiler:  HC or HC31 for
  79.     Windows, the IPFC compiler for OS/2, DVXHLP10.ZIP for DESQview/X.
  80.  
  81.     SCANHLPX requires a DPMI server and Borland's run-time manager.
  82.     These are supplied as the files DPMI16BI.OVL and RTM.EXE with
  83.     Borland Pascal 7.0; I'll include them on the disk I send if you
  84.     register SCANHELP.
  85.  
  86. AIMS
  87.  
  88.     SCANHELP version 1 was one of TurboPower's Help Tools, released to
  89.     the public domain in January 1990.  It was designed to create an
  90.     outline for a help database describing the interface to a Turbo
  91.     Pascal unit; the assumption was that the user would make major
  92.     modifications to the outline to produce a polished help system.
  93.  
  94.     I wanted something different:  I wanted documentation for myself,
  95.     and I wanted it to be easy to produce.  I've found that it's too
  96.     easy for printed documentation to get out of synch with the source
  97.     code when the code is under development; even my online
  98.     documentation kept falling behind, because it was just too much
  99.     trouble to go to the *.TXT file and correct the documentation when I
  100.     made a small change.
  101.  
  102.     The design aim for SCANHELP 2 was thus to produce complete *.TXT
  103.     files, suitable for input to MAKEHELP.  These were to be good enough
  104.     for internal use without any manual editing.  It was possible to
  105.     customize them by working within the original *.PAS source code;
  106.     duplicate documentation was not necessary.
  107.  
  108.     SCANHELP 3 has the same aim, but I've added *.TPH capability to give
  109.     it a wider audience.  The *.TEX capability makes it much easier to
  110.     proofread help screens; you don't have to hope that you go through
  111.     every topic, you can print them as a book and read through.
  112.  
  113.     Some other things I've attempted to do, with varying success:
  114.  
  115.      - produce documentation for *every* interfaced symbol
  116.  
  117.      - have a minimal impact on the source code, i.e. existing source
  118.      code should produce reasonable help files without substantial
  119.      changes
  120.  
  121.      - handle multiple source files, so cross references to other units
  122.      are possible
  123.  
  124.      - work with Pascal scoping rules, so that cross references are
  125.      easy.
  126.  
  127. DETAILS of TOPIC CREATION
  128.  
  129.     SCANHELP is used to create help systems for program libraries. The
  130.     input is one or more Turbo Pascal source code files; the output is
  131.     some form of help file.  This section defines the source files and
  132.     generalities applying to all help file types; below the specifics of
  133.     each are given.
  134.  
  135.     SCANHELP creates help topics for every interfaced identifier in a
  136.     program: object, method, procedure, function, variable, constant.
  137.     The text of each help topic has several parts:
  138.  
  139.       - the declaration of the identifier
  140.  
  141.       - the comments following the declaration, up until the next
  142.       declaration begins.
  143.  
  144.       - (for identifiers that define a scope, e.g. record or object
  145.       types), abbreviated copies of the declarations of the identifiers are
  146.       added to the help topic to serve as cross-references.
  147.  
  148.       - a "See also" list, if you use the #X directive (see below).
  149.  
  150.     Most references to other identifiers in the declaration are also
  151.     used to form cross references; for example, if a function has
  152.     declaration
  153.  
  154.       function MyFunc(a: MyType):MyOtherType;
  155.  
  156.     it will generally be given cross-references on both the MyType and
  157.     MyOtherType identifiers.  It's also possible to create
  158.     cross-references within the text of a comment by surrounding a name
  159.     with "#" marks.
  160.  
  161.     Often there will be several different uses of the same identifier in
  162.     a program.  For example, "Init" is commonly used as an object
  163.     constructor name.  SCANHELP uses approximately Pascal scoping rules
  164.     in determining what you're referencing:
  165.  
  166.       - in a record or object declaration, the local fields/methods are
  167.       in scope
  168.  
  169.       - if the name isn't found there, then the interfaced identifiers
  170.       are searched
  171.  
  172.       - if it's still not found, the uses list is searched (in reverse
  173.       order, just like TP does)
  174.  
  175.       - if not found here, TP would give a compiler error, but SCANHELP
  176.       continues on for one more step:  other units in the library are
  177.       also searched, even if the unit doesn't use them.
  178.  
  179.     The other difference between the TP search and SCANHELP's search is
  180.     that SCANHELP can resolve forward references.  You can have things
  181.     like
  182.  
  183.       function FirstFunction:Integer;
  184.       { This is the first function; you should see #SecondFunction#! }
  185.  
  186.       function SecondFunction:Integer;
  187.       { This is the second function; you should see #FirstFunction#! }
  188.  
  189.     and SCANHELP will know what both # references are talking about.
  190.     This will occasionally lead to errors, if you have such abominations
  191.     as
  192.  
  193.       type
  194.         integer = word;
  195.         word = integer;
  196.  
  197.     which are likely to confuse SCANHELP (and you!).
  198.  
  199.     If you want to override the search possibility, then you can use a
  200.     qualified name.  For example, #TBase.Init# is fine as a
  201.     cross-reference, provided the usual search rules can find TBase.
  202.  
  203. DIRECTIVES
  204.  
  205.     SCANHELP has several directives for customizing its behaviour.
  206.     Directives are placed in the source code before running SCANHELP.
  207.  
  208.     All directives have the format {#L...} where:
  209.       {  }   are normal comment braces
  210.       #      signals that this is a SCANHELP directive
  211.       L      is a command letter
  212.       ...    are one or more parameters for the directive
  213.  
  214.     #F
  215.  
  216.      This directive toggles fixed format mode.  In fixed format mode,
  217.      word wrapping doesn't apply to comments.  Note that word wrapping
  218.      always applies to the declaration of the object.
  219.  
  220.     #M
  221.  
  222.      This directive toggles "marked text mode".  The behaviour of this
  223.      depends on the particular help format chosen, but generally
  224.      speaking, it should be used to mark examples of usage.  Note that
  225.      #F can be used to start fixed format within marked text, but text
  226.      marking shouldn't be started within fixed format.
  227.  
  228.     #T Topic [comment]
  229.  
  230.      This directive creates a new topic and a new identifier in the
  231.      current scope.  SCANHELP parses it as a new declaration.
  232.      For example:
  233.  
  234.       type Myrec = record
  235.         { this comment will go into the Myrec topic }
  236.         a : word;
  237.         { this comment will go into the Myrec.a topic }
  238.         {#T about_myrec}
  239.         { this comment will go into a Myrec.about_myrec topic, with
  240.           an embedded cross-reference to #a#. }
  241.         b : word;
  242.         { this comment will go into the Myrec.b topic, with cross
  243.           references to the other two topics. }
  244.         {#X about_myrec a}
  245.       end;
  246.  
  247.      You can use #X directives after #T; this will create See Also
  248.      entries in the #T topic.  Other #X directives can refer to the #T
  249.      topic, using the topic name, as shown after the Myrec.b comment
  250.      above.
  251.  
  252.     #X [Object.]Topic [[Object.]Topic...]  Include cross-reference
  253.  
  254.      This directive specifies that Topic is to be included in the "See
  255.      also" list for the current symbol.
  256.  
  257.      You can have as many topics in one #X directive as you like. Or,
  258.      you can specify multiple #X directives.  For example, the following
  259.      are equivalent:
  260.  
  261.        {#X TopicA TopicB TopicC}
  262.  
  263.      and
  264.  
  265.        {#X TopicA}
  266.        {#X TopicB}
  267.        {#X TopicC}
  268.  
  269.     #Z+ / #Z-   Toggle Private
  270.  
  271.      This directive controls what symbols are included in the help text.
  272.      The default is all interfaced objects, methods, procedures and
  273.      functions. If you want to exclude one or more these symbols, then
  274.      place a {#Z+} directive in front of them and a {#Z-} directive
  275.      following. The Z+ signals that all following symbols are private
  276.      and should not be included in the help text. The Z- turns off the
  277.      "private" attribute.
  278.  
  279.  
  280.  
  281. COMMAND LINE OPTIONS
  282.  
  283.     Some of SCANHELP's behavior is customized from the command line.
  284.     Here is the command line format:
  285.  
  286.       SCANHELP [options] unitname [unitname...]
  287.  
  288.     Options:
  289.  
  290.       /D sym   Define symbol for conditional compilation
  291.  
  292.         This option is the equivalent of placing {$D sym} at the start
  293.         of the source code of each unit being parsed.  SCANHELP will
  294.         use the $IFDEF and $IFNDEF directives to select which parts of
  295.         the text to parse.
  296.  
  297.       /FP  Make POPHELP database
  298.       /FB  Make Borland .TPH database [default]
  299.       /FT  Make TeX help file
  300.       /FH  Make HELPC .HDF format
  301.  
  302.         By default, SCANHELP will produce a compiled .TPH file.  If you
  303.         want to use the output with POPHELP, use /FP, and then
  304.         compile the output with TurboPower's MAKEHELP utility.
  305.  
  306.       /I dirs    Search list for include files
  307.  
  308.         If your files have $I directives to include other source,
  309.         SCANHELP will use the directories specified here to find it.
  310.  
  311.       /L   Set link buffer to disk
  312.  
  313.         SCANHELP normally writes an uncompressed version of the helpfile
  314.         to expanded or extended memory.  Use this option to force it to
  315.         write the buffer to disk, if you find it runs out of memory on
  316.         large runs.
  317.  
  318.       /O file[.TPH|.TXT|.TEX]   Output filename
  319.  
  320.         SCANHELP normally names the output filename the same as the
  321.         first unit it scans.  Use this directive to override that
  322.         behaviour.  The default extension is .TXT for a MAKEHELP input
  323.         file, .TPH for Borland help files, .TEX for a TeX file, and
  324.         .HDF for a HELPC source file.
  325.  
  326.       /S  sort cross-references
  327.  
  328.         The default behavior for the cross-reference table (the See
  329.         also's) is to present the cross-references in the same order
  330.         they appear in the #X directives in the source code. The /S
  331.         options gives the list in sorted order.
  332.  
  333.       /T nn  set tab size to nn columns
  334.  
  335.         By default, SCANHELP expands tab characters to every 8 columns.
  336.         This option changes the tab size; e.g. "/T 3" sets the tab size
  337.         to 3 columns.  Use "/T 0" to suppress tab expansion.
  338.  
  339.       /U dirs  set search list for used units
  340.  
  341.         SCANHELP will always scan any files you list explicitly.  If you
  342.         use this option, it will also use Uses statements to find other
  343.         units in other directories.  For example,
  344.  
  345.             /U \bp\rtl\dos;\bp\rtl\common
  346.  
  347.         will pull in the DOS unit, the OBJECTS unit, and the VALIDATE
  348.         unit if any of the explicitly mentioned source files use them.
  349.         If no /U option is given, "." is assumed, so used files in the
  350.         current directory will be included.  To scan *only* the explicitly
  351.         listed files, use /U-.
  352.  
  353.       /V size  set virtual memory swap to size kilobytes (SCANHLPX only)
  354.  
  355.         For large projects, SCANHELP may run out of memory.  If you have
  356.         lots of extended memory, SCANHLPX is likely to go further, but
  357.         on a very large project, it too will run out of memory.  The
  358.         first thing to try is the /D option, but if that doesn't work,
  359.         try both the /D and /V options.  For example,
  360.  
  361.           SCANHLPX /D /V 4096 /O bighelp *.pas
  362.  
  363.         will set up 4 megabytes of virtual memory on disk.  This
  364.         "memory" is *very* slow, so it's always worthwhile using the /D
  365.         option first.  The maximum allowed virtual memory is 16
  366.         megabytes; if "/D /V 16384" didn't work for your project, you'd
  367.         be out of luck.  However, I've never found a project that even
  368.         required the /V option on my 4 Meg machine, so I doubt this will
  369.         be a real problem.
  370.  
  371.       /$A+ etc compiler switches for conditional compilation
  372.  
  373.         This option is the equivalent of placing compiler switch
  374.         directives like {$A+} at the start of the source code of each
  375.         unit being parsed.  SCANHELP will use the $IFOPT directives in
  376.         the source code to select which parts of the text to parse.
  377.  
  378.  
  379.  
  380. MAKEHELP/POPHELP SPECIFICS
  381.  
  382.     The help file created by SCANHELP will create an index entry for
  383.     every identifier, and will have hypertext links for jumping between
  384.     all cross-references.  The text width will be set to 78 characters
  385.     by a directive at the beginning of the file; when MAKEHELP compiles
  386.     it, all line breaks will be fixed in place at that width.  A single
  387.     topic called Contents will be created in the first place in the
  388.     index, with a list of all documented units.
  389.  
  390.     The #F directive will stop MAKEHELP from word wrapping, and the #M
  391.     directive will mark the block with ^C characters.  In the default
  392.     POPHELP colour scheme, this changes the text colour to dark blue
  393.     from black.
  394.  
  395.     The standard process for creating a MAKEHELP help text is as
  396.     follows:
  397.  
  398.      1. Annotate source listings with # directives.
  399.  
  400.      2. Run SCANHELP on all files (wildcards ok) with the /FP option,
  401.      and probably a /O option to give the output filename.
  402.  
  403.      3. Run MAKEHELP to compile the output file into a POPHELP database.
  404.  
  405.      4. Run POPHELP to load itself as a TSR to use the database.
  406.  
  407.     For example:
  408.  
  409.          SCANHELP *.pas /Omyhelp /FP
  410.          MAKEHELP myhelp
  411.          POPHELP myhelp
  412.  
  413.  
  414. BORLAND .TPH SPECIFICS
  415.  
  416.     The help file created by SCANHELP will create an index entry for
  417.     every identifier, with a subtitle from the enclosing scope (i.e. the
  418.     unit name, record type, or object type).  The subtitles will only
  419.     show up in the IDE (THELP ignores them) when there are collisions
  420.     between the names---then there will be a single index entry, with
  421.     multiple subtitles shown below.
  422.  
  423.     The .TPH will have hypertext links for jumping between all
  424.     cross-references.  Only record and object displays will have fixed
  425.     width unless the #F directive is used; the IDE or THELP will re-wrap
  426.     all other lines to fit in the visible window. A single topic called
  427.     Contents will be created, with a list of all documented units.  It
  428.     will be the first topic that THELP displays.
  429.  
  430.     The #F directive will stop comment lines from wrapping, and will
  431.     preserve any leading spaces in the comments.
  432.  
  433.     The #M directive will mark text as a code example, so that the IDE
  434.     will insert it into your text.  Use the Help window local menu
  435.     (Alt-F10 brings this up) to get the option to copy the text to your
  436.     clipboard, then use the usual Shift-Insert command to insert it into
  437.     your edit buffer.
  438.  
  439.     The standard process for creating a Borland help file is as
  440.     follows:
  441.  
  442.      1. Annotate source listings with # directives.
  443.  
  444.      2. Run SCANHELP on all files (wildcards ok) with the /FB (or no /F)
  445.      option, and probably a /O option to give the output filename.
  446.  
  447.      3.(a) Run THELP with the /Ffilename option to load the database as a
  448.      TSR, or
  449.  
  450.      3.(b) Load the help database into the IDE by using the /Help Files New
  451.      dialog.  Be sure to hit the OK button (or type K); if you hit Esc, your
  452.      request will be ignored.
  453.  
  454.     For example:
  455.  
  456.          SCANHELP *.pas /Omyhelp
  457.          THELP myhelp
  458.  
  459.  
  460. TeX SPECIFICS
  461.  
  462.     The output file produced with the /OT option is meant to be run as a
  463.     single document under the LaTeX macro package.  The SCANHELP.STY
  464.     file is used to define the appearance of the document.  If you make
  465.     no changes to it, then the style will be very similar to the style
  466.     used in the Reference sections of Borland manuals:  major topics
  467.     will be set off with lines, and fields and methods will be shown
  468.     within the major topic defining their type. The index will contain a
  469.     bold face index entry for the definition of every identifier, and a
  470.     standard entry for all cross-references. TeX will fill lines to fit
  471.     your page width.
  472.  
  473.     The #F directive tells LaTeX to put a line break after every line.
  474.     The #M directive marks a block as an example, with a note in the
  475.     margin the way the Borland manuals do it.
  476.  
  477.     The standard process for creating a TeX help document is as follows:
  478.  
  479.      1. Annotate source listings with # directives.
  480.  
  481.      2. Run SCANHELP on all files (wildcards ok) with the /FT
  482.      option, and probably a /O option to give the output filename.
  483.  
  484.      3. Run TeX with LaTeX on the output file.  How to do this will
  485.      depend on your local installation; on mine, it's just
  486.  
  487.         LATEX filename
  488.  
  489.      4. Run the MakeIndex program to compile the document index.  With
  490.      the emTeX version of TeX, this is done by
  491.  
  492.         MAKEINDX filename
  493.  
  494.      where the filename is your help filename *without the extension*.
  495.  
  496.      5. Run LATEX again on your file; this time the index will be
  497.      incorporated into the document.
  498.  
  499.      6. Print the .DVI file using a driver suitable for your printer;
  500.      for example,
  501.  
  502.         lpr -d filename.dvi
  503.  
  504.      is the method that works on our network or on many Unix machines.
  505.  
  506.     For example:
  507.  
  508.          SCANHELP *.pas /Omyhelp /FT
  509.          LATEX myhelp
  510.          MAKEINDX myhelp
  511.          LATEX myhelp
  512.          LPR -d myhelp.dvi
  513.  
  514.  
  515. HelpDK Specifics
  516.  
  517.     SCANHELP will produce one indexed help topic for each identifier.
  518.     While HelpDK does produce input files for both Borland's help
  519.     compiler and TurboPower's, you'll probably get better results using
  520.     those specific options (/FB and /FP) rather than this generic one.
  521.  
  522.     Both #F and #M directives are supported.  #F makes every line into a
  523.     separate paragraph, and #M marks text by putting it in font 8, which
  524.     is normally a fixed width Courier style.
  525.  
  526.     The general procedure to use is as follows.
  527.  
  528.      1. Annotate your source listings with # directives.
  529.  
  530.      2. Run SCANHELP on all files (wildcards ok) with the /FH option,
  531.         and probably a /O option to give the output filename.
  532.  
  533.      3. Run HELPC with the option specific to your target database:
  534.  
  535.          /PX+ or /MT+ - for HelpDK's own help engine
  536.          /W30 or /W31 - for Windows 3.0/3.1 source
  537.          /TH+         - for Borland THELP source
  538.          /QH+         - for Microsoft QuickHelp source
  539.          /TV+         - for Borland TVHC source
  540.          /PH+         - for TurboPower POPHELP source
  541.          /XD+         - for DESQview/X source
  542.          /OS2         - for OS/2-IPF Source
  543.          /TXT         - Generate printable .TXT file
  544.          /RTF         - for RTF output
  545.          /MMV         - for Microsoft MultiMedia Viewer 2.0 source
  546.  
  547.      4. See the instructions in the HelpDK file HLPDK.DOC for the final
  548.         compile step suitable to each target.
  549.  
  550.     For example, for Windows 3.1 the steps would be:
  551.  
  552.          SCANHELP *.pas /Omyhelp /FH
  553.          HELPC /W31 myhelp
  554.          HC31 myhelp
  555.  
  556.     where SCANHELP is in this package, HELPC is in the HLPDK70.ZIP
  557.     package, and HC31 is in Microsoft's SDK, or other Windows
  558.     programming packages like Borland Pascal or Turbo Pascal for
  559.     Windows.
  560.  
  561.  
  562. FILES
  563.  
  564.     SCANHELP.EXE    The executable
  565.     SCANHELP.DOC    This file
  566.     SCANHELP.STY    The TeX style file for help documents
  567.     HELPFILE.PAS    One of the source files to SCANHELP
  568.     HELPFILE.PS     Postscript copy of TeX output from
  569.                       SCANHELP helpfile /u- /ft
  570.                     Print this if you want to see whether it's worth
  571.                     getting TeX.
  572.     HELPFILE.HLP    Windows 3.0/3.1 help file produced by
  573.                       SCANHELP helpfile /u- /fh
  574.                       HELPC helpfile
  575.                       HC helpfile
  576.                     Browse through this in Windows if you want to see
  577.                     whether it's worth getting Ron Loewy's HelpDK.
  578.     CONTENTS.TXT    A list of other utilities sent to registered users.
  579.  
  580.     With the registered version, the following files are also included:
  581.  
  582.     SCANHLPX.EXE    The protected mode executable, for huge help files.
  583.     DPMIUSER.DOC    Documentation for using the programs below.
  584.     RTM.EXE         The protected mode run time manager.
  585.     RTMRES.EXE      A small program to force RTM loading.
  586.     DPMI16BI.OVL    A DPMI server.
  587.     DPMIINST.EXE    Install program for DPMI16BI.OVL.
  588.     DPMILOAD.EXE    Borland's DPMI loader.
  589.  
  590. CHANGE HISTORY
  591.  
  592.     1.01  10-8-90
  593.         SCANHELP - Changed .Z to #Z to agree with documentation
  594.  
  595.     1.02  3-7-91
  596.         SCANHELP - Fixed "xref line too long" bug
  597.  
  598.     2.00Alpha  1-Dec-91
  599.           Major changes by DJM.
  600.  
  601.     2.00Alpha2 Added /O option.
  602.  
  603.     2.00Alpha3 Added embedded cross-references.
  604.  
  605.     2.03  2.00Alpha3 with a more reasonable name. :-)
  606.  
  607.     2.04  Fixed bug - #Z+ was being ignored by comment saver
  608.  
  609.     3.00  Added Borland .TPH file and TeX support, changed a lot of the
  610.           formatting, internal structure, and symbol table methods, and
  611.           deleted a lot of the old options.
  612.  
  613.     3.10  Added .HDF file support, and #F and #M directives, and fixed
  614.           bugs:  SCANHELP no longer asks for a numeric coprocessor; long
  615.           identifiers don't cause trouble.
  616.  
  617.     3.12:  Fixed bug on #Z+, increased speed for .TPH files.
  618.  
  619.     3.13:  Fixed bug in fixed line handling.
  620.  
  621.     3.14:  Fixed bugs in read-only files and in POPHELP format output.
  622.  
  623.     3.15:  Fixed bugs in long lines of special characters in TeX mode,
  624.            handling of "export" modifier
  625.  
  626.     3.16:  Fixed handling of directives as names
  627.  
  628.     3.17:  Fixed cross-reference bug in Pophelp file creation; added
  629.            DPMI capability and /D and /V options; changed memory
  630.            management; can now create *gigantic* help files
  631.  
  632.     3.21:  Changed record and object output format; allowed nested variant
  633.            records
  634.  
  635.     3.23:  Fixed handling of directives and dynamic methods; fixed error
  636.            messages; added "overrides" line to method topics.
  637.  
  638.     3.26:  Added tab expansion, object descendant lists, /D option,
  639.            ability to handle non-units, /U option, improved TeX and HDK
  640.            output formats, fixed $ifdef bug, fixed nested record
  641.            handling, added /$A+ etc.
  642.  
  643. LICENSE
  644.  
  645.     This program is shareware, not public domain.  It contains public
  646.     domain code written by TurboPower Software, and makes use of
  647.     copyright libraries by Borland International and TurboPower
  648.     Software, but the majority of the code is written by and belongs to
  649.     Duncan Murdoch.
  650.  
  651.     You are licensed to distribute this program unchanged, provided you
  652.     charge no more than reasonable distribution costs, and in no case
  653.     more than $10 (US) for it.
  654.  
  655.     You are also licensed to use it personally at no charge.  This means
  656.     that you may compile and use help files on any number of computers,
  657.     but only if you are their only reader:  you may not distribute them
  658.     to other people.  (Of course, if you distribute your source code to
  659.     other people, you can give them instructions on how to use SCANHELP
  660.     to produce their own personal help files.)
  661.  
  662.     If you want to distribute help files produced by SCANHELP, you must
  663.     register the program with me.  Registered users will receive
  664.     SCANHLPX, the protected mode version of SCANHELP.  Depending on how
  665.     much RAM you have installed on your system (it can use up to 32
  666.     megabytes), you can process truly colossal help files with SCANHLPX.
  667.     I've yet to hit the limit, though the files it produces through
  668.     HELPC may be too large for Microsoft's Windows help compiler to
  669.     handle.
  670.  
  671.     An additional benefit of registration is that I will send you a
  672.     diskette containing a number of other utilities I've written to help
  673.     with Turbo Pascal programming, DOS and Windows.  One of them that is
  674.     not currently available elsewhere is FINDHELP; it searches Borland
  675.     help files for keywords that aren't indexed.  Please tell me your
  676.     preferred diskette format.  A sample listing is included in the
  677.     CONTENTS.TXT file.
  678.  
  679.     Registration costs $25.  You can register directly with me by
  680.     sending a cheque or money order for that amount to
  681.  
  682.       Duncan Murdoch
  683.       337 Willingdon Ave.
  684.       Kingston, Ontario, Canada.
  685.       K7L 4J3
  686.  
  687.     I accept cheques in either US dollars drawn on a US bank or Canadian
  688.     dollars drawn on a Canadian bank (at par).
  689.  
  690.     Source code to SCANHELP is available to registered users for an
  691.     additional $25 (i.e. $50 total).  Recompiling SCANHELP will require
  692.     TurboPower's Object Professional library together with their Turbo
  693.     Analyst package; however, the Borland help file unit requires only
  694.     simple data manipulation routines from Object Professional.
  695.  
  696.     You can also register or order source code from the Public
  697.     (software) Library (PsL) using MC, Visa, AmEx, or Discover card:
  698.      - by calling 800-242-4775 (US only)
  699.      - by calling 713-524-6394
  700.      - by faxing your order to 713-524-6398
  701.      - by sending your order by Compuserve to 71355,470.
  702.      - by sending your order by Internet to 71355.470@compuserve.com
  703.     PsL only accepts payment in US dollars.
  704.  
  705.     The PsL numbers are for ordering only.  I *cannot* be reached at the
  706.     PsL numbers.  To contact me for information about dealer pricing,
  707.     volume discounts, site licensing, the status of shipment of the
  708.     product, the latest version number or for technical information
  709.     write to me at the address above or at one of the email addresses
  710.     below.  I'd especially like to hear any suggestions for
  711.     improvements.
  712.  
  713.      Fidonet:    DJ Murdoch at 1:249/99.5
  714.      Internet:   dmurdoch@mast.queensu.ca
  715.      Compuserve: 71631,122
  716.  
  717.