home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / progrmng / qhcompil.lzh / QHCOMPIL.DOC < prev    next >
Text File  |  1988-04-30  |  34KB  |  676 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.                   QHCOMPIL - The Help File Compiler for QHELP
  7.                          Help File Programmer's Guide
  8.  
  9.  
  10.  
  11.                                   Written by
  12.  
  13.                                 Mark VanKekerix
  14.                                  2035 J Apt 6
  15.                               Lincoln, NE  68510
  16.                                 (402) 475-0601
  17.  
  18.  
  19.  
  20.          QHELP and QHCOMPIL software Copyright 1988 by Mark VanKekerix
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.                                TABLE OF CONTENTS
  28.  
  29.      License
  30.      Introduction
  31.      Writing Help Files for QHELP
  32.           Overview
  33.           Reserved Characters (and How to Use Them)
  34.           Defining a Default Screen
  35.           General Guidelines and Restrictions
  36.      Using QHCOMPIL (the Help File Compiler)
  37.           Overview
  38.           Changing the Hot Key
  39.           Changing the Display Attributes
  40.           Changing Case Sensitivity
  41.           Changing the Description Indentation
  42.           Setting the Identifier Characters
  43.           Updating Header Information (on an Existing File)
  44.           Reading Header Information (from an Existing File)
  45.           Compiling a Help File
  46.           Uncompiling a Help File
  47.           Compiler Errors and Warnings
  48.      Acknowledgements
  49.  
  50.  
  51. NOTE:     It is assumed in this manual that you are reasonably familiar with 
  52.           the use of QHELP.  If you have never used QHELP before, read the 
  53.           QHELP Users Guide and try running QHELP to familiarize yourself 
  54.           with it before writing any help files.  There should be a sample 
  55.           help file distributed with QHELP that is already compiled and ready 
  56.           for you to use.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                     LICENSE
  64.  
  65. Users of the QHELP system are granted a limited license for personal use.  No 
  66. part of the QHELP system can be distributed for profit without a specific 
  67. written agreement (this includes distribution within a company or 
  68. corporation, "bundling" with other software, etc.).  These limitations apply 
  69. to QHELP, QHCOMPIL (the help file compiler), and any help files created with 
  70. QHCOMPIL.
  71.  
  72. What this means is you are free to use QHELP and any help files you have 
  73. created yourself or obtained from bulletin boards, etc., but if you want to 
  74. package QHELP with another program you are selling for profit, contact me for 
  75. written permission to do so (I will ask for a small fee for such a license).
  76.  
  77. The limitation on "bundling" QHELP with other programs applies only if the 
  78. program is being sold for profit.  If you have developed a public domain 
  79. program and would like to use QHELP and a help file you have written as the 
  80. program's help system, please feel free to do so.
  81.  
  82. If you have written a help file for any program (public domain or otherwise) 
  83. that you think other people would find helpful, I encourage you to make it 
  84. part of the public domain (along with a copy of QHELP).
  85.  
  86. I also encourage you to upload QHELP and QHCOMPIL to all of your favorite 
  87. bulletin boards, copy it for your friends, etc., as long as you don't violate 
  88. the above restrictions.
  89.  
  90. QHELP may be distributed by itself (without QHCOMPIL) subject to the above 
  91. restrictions.  If you are going to distribute QHELP in such a manner, please 
  92. make sure the QHELP Users Guide and at least one compiled help file are 
  93. included.  If you are going to distribute the full QHELP system, please make 
  94. sure that ALL the files you recieved (including the Users Guide and this 
  95. document) are included in your distribution.
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.                                  INTRODUCTION
  103.  
  104. This manual is going to assume that you are already familiar with the use of 
  105. QHELP, and that you would now like to write some of your own help files.  
  106. Before reading further you should know a couple of terms that this manual 
  107. will use.
  108.  
  109. A "source file" is the file you will create with your text editor.  It will 
  110. contain all the help information you want in your help file, organized in a 
  111. such a way that QHCOMPIL understands how you want the information displayed 
  112. by QHELP.  Creating source files is discussed in the section "Writing Help 
  113. Files".
  114.  
  115. A "help file" is the file created by QHCOMPIL from your source file.  It 
  116. consists of several parts.  First, a header record that defines the hot key, 
  117. text colors, and several other things.  Second, a list of the keywords 
  118. defined in your source file along with pointers to where the keyword 
  119. descriptions are located in the file (this allows QHELP to access help 
  120. information quickly even if the help file is very large).  Last, and most 
  121. important, the actual descriptions for the keywords along with some 
  122. information on how to properly display it in the QHELP window.  You don't 
  123. really need to fully understand the help file structure because QHCOMPIL 
  124. takes care of all the messy details of creating it.
  125.  
  126. "Reserved characters" are characters that you will use in your source file to 
  127. tell QHCOMPIL how to define the keywords and how you want descriptions for 
  128. the keywords displayed.  The reserved characters that QHCOMPIL uses are 
  129. described in the section on "Writing Help Files".
  130.  
  131. A "default screen" is the display that appears when QHELP can't find a 
  132. keyword at the cursor position, or when you press the <F1> key while QHELP is 
  133. popped up.  This is often a simple list of the available keywords, but it can 
  134. be more complex (and more useful) if you define it properly.
  135.  
  136. "Related keywords" are simply other keywords that relate to a given keyword.  
  137. Related keywords are displayed in a highlighted color in keyword 
  138. descriptions, and the user is allowed to select a related keyword while 
  139. viewing the keyword description.
  140.  
  141. Any text editor can be used to create source files, as long as the file 
  142. created is a simple text file (so it doesn't contain any sort of "formatting" 
  143. characters, such as tabs, etc.).  Most word processors have either a "non-
  144. document" mode (that results in the same sort of simple text file) or a 
  145. utility to convert a document to a simple text, or ASCII, file.
  146.  
  147. To obtain a sample source file, try using the "Uncompile" option of QHCOMPIL 
  148. on the sample help file included with QHELP.
  149.  
  150.  
  151.  
  152.                               WRITING HELP FILES
  153.  
  154. Overview
  155.  
  156.      There are two types of reserved characters:  Those that are recognized 
  157.      only when they appear at the begining of a line, and those that are 
  158.      recognized anywhere within a line.  If a reserved character that is only 
  159.      recognized at the beginning of a line appears anywhere else, it is 
  160.      simply treated as part of the text describing a keyword.  If you must 
  161.      have a reserved character as part of your text in a position where it 
  162.      would be used by the compiler, simply put two such characters in that 
  163.      place.  Any pair of reserved characters signals QHCOMPIL that the 
  164.      character must appear there as text, and QHCOMPIL will place ONE of the 
  165.      characters correctly.
  166.      
  167.      The following are the reserved characters:
  168.          Name               Character     Position
  169.            Define Keyword       :           Beginning of line
  170.            Page End             !           Beginning of line
  171.            Comment              @           Beginning of line
  172.            Define Title         #           Beginning of line
  173.            Reference Keyword    ~           Anywhere
  174.      
  175.      The format of the source file is fairly simple.  You simply define a 
  176.      keyword on a line starting with the Define Keyword character ':', and 
  177.      any lines that follow (up to the next Define Keyword line or the end of 
  178.      the source file) will be the description for that keyword.
  179.      
  180.  
  181. Reserved Characters (and How to Use Them)
  182.  
  183.      The Define Keyword character ':' must appear at the beginning of a line, 
  184.      and the keyword to define MUST immediately follow (no spaces between the 
  185.      ':' and the keyword).  Null keywords (a ':' with no keyword behind it) 
  186.      are not allowed.  All text on the lines following a keyword definition 
  187.      up to the next keyword definition or the end of the file comprise the 
  188.      description for that keyword.
  189.      
  190.      If the description is longer than the QHELP window size, QHCOMPIL will 
  191.      break the description into pages that will fit in QHELP's window.  If 
  192.      you have a long description that you know will be paged and you want to 
  193.      define the page endings yourself, use the Page End character '!'.  This 
  194.      character must appear at the beginning of a line, and all text behind 
  195.      the '!' on that line is completely ignored (not included in the 
  196.      description).  When QHCOMPIL reaches the end of a description (the next 
  197.      keyword definition or end of file) it automatically ends the current 
  198.      page, so don't add a Page End character at the end of your description 
  199.      or you will be rewarded with a blank page.
  200.      
  201.      If your source file is very long, it might be wise to add some comments 
  202.      to it to help you remember its organization when you later try to change 
  203.      it.  Comments are simply lines that begin with the Comment character 
  204.  
  205.      '@'.  This character must appear at the beginning of the line, and all 
  206.      text behind it is ignored.  Comments can appear anywhere in the source 
  207.      file.
  208.      
  209.      The Define Title character '#' defines a title for the help file that 
  210.      appears on the top line of the QHELP window when popped up.  The first 
  211.      20 characters following the Define Title character are used to form the 
  212.      title.  The Define Title character also defines the default screen; The 
  213.      next keyword definition following a Define Title line is taken as the 
  214.      "default keyword" for the file.  This means that the display defined for 
  215.      the "default keyword" is the one that appears when QHELP can't find a 
  216.      keyword at the cursor, or when the <F1> key is pressed while QHELP is 
  217.      popped up.  For more information on defining a default screen, see the 
  218.      subsection "Defining a Default Screen" later in this section.  Only the 
  219.      first occurence of a Define Title line is valid; further occurences are 
  220.      ignored and treated as comments.
  221.      
  222.      The Reference Keyword character '~' is perhaps the most useful reserved 
  223.      character.  This character can appear anywhere in a keyword 
  224.      description.  Immediately following this character should be a word that 
  225.      is or will be defined as a keyword.  When QHCOMPIL sees this character, 
  226.      it assumes that the word following it is a keyword related to the 
  227.      keyword being described, and QHCOMPIL will insert into the help file the 
  228.      proper information for QHELP to display this word in a highlighted color 
  229.      and allow it to be selected.  The word following the Reference Keyword 
  230.      character MUST be defined as a keyword at some point in the source file, 
  231.      or errors will result when the file is compiled.  However, the 
  232.      referenced keyword does not have to be defined before it is referenced 
  233.      (its definition may appear later in the source file).
  234.      
  235.  
  236. Defining a Default Screen
  237.  
  238.      When the first occurence of a Define Title line is found, the NEXT 
  239.      keyword definition is taken as the "default keyword" for the help file, 
  240.      and the keyword description for it becomes the default screen.  The 
  241.      default screen appears when QHELP can't find a keyword at the cursor or 
  242.      when the <F1> key is pressed while QHELP is popped up.  The default 
  243.      screen is defined the same way any other keyword description is defined, 
  244.      however you should make sure that the user will know that this is the 
  245.      default screen.
  246.      
  247.      One possibility for a default screen is a simple message that no keyword 
  248.      was found at the cursor, and that the user should press <ESC>.
  249.      
  250.      A better idea is a complete list of keywords, with each keyword in the 
  251.      list defined as a referenced keyword.  This presents a list of 
  252.      highlighted and selectable keywords to the user when no keyword is found 
  253.      at the cursor.  For example:
  254.      
  255.           #Title For File
  256.           :KEYWORDLIST
  257.           Available keywords
  258.                ~KEY1
  259.                ~KEY2
  260.                ~KEY3
  261.                ~KEY4 
  262.      
  263.  
  264.      Placing these lines at the top of your source file will create a default 
  265.      screen consisting of a list of four keywords that the user can select 
  266.      from.  Note that "~KEYWORDLIST" does not appear in the list; While this 
  267.      is a valid reference (there is nothing preventing a keyword description 
  268.      from referencing itself) it is pointless, since selecting this keyword 
  269.      will simply cause the list to reappear.
  270.      
  271.      If the list of keywords is very long, QHCOMPIL will break it into pages 
  272.      that will fit in the QHELP window (or you can create the pages yourself 
  273.      with the Page End character).
  274.      
  275.      Another idea for a default screen is to create a "menu" structure by 
  276.      defining keywords that contain (as their description) sub-lists of the 
  277.      complete list of keywords.  In this way, you can break down the list of 
  278.      keywords into logical groups.  For example:
  279.      
  280.           #Title For File
  281.           :MAINMENUKEY
  282.           Select a Group
  283.                ~GROUP1
  284.                ~GROUP2
  285.                ~GROUP3
  286.           :GROUP1
  287.           Select a Keyword
  288.                ~KEY1
  289.                ~KEY2
  290.           :GROUP2
  291.           Select a Keyword
  292.                ~KEY3
  293.                ~KEY4
  294.                ~KEY5
  295.           :GROUP3
  296.           Select a Keyword
  297.                ~KEY6
  298.                ~KEY7
  299.      
  300.      Placing these lines at the top of your source file will define a simple 
  301.      menu structure that breaks down the list of keywords into three groups.  
  302.      By selecting a group from the default screen, the user is presented with 
  303.      a list of keywords from that group, and can then select the keyword 
  304.      he/she was after.  There is no limit to how "deep" such a menu structure 
  305.      can go.
  306.      
  307.      Notice that the group names are also defined as keywords, so you should 
  308.      choose as your group names words that are not likely to be found at the 
  309.      cursor.
  310.      
  311.  
  312. General Guidelines and Restrictions
  313.  
  314.      All keywords that are referenced with the Reference Keyword character 
  315.      '~' MUST be defined at some point in the source file.  Failure to define 
  316.      a keyword that is referenced will result in a compiler error.
  317.      
  318.      
  319.  
  320.      Keywords can't be defined more that once; If your source file 
  321.      "redefines" a keyword, QHCOMPIL will generate a error.
  322.      
  323.      No more than ten pages of text are allowed for any keyword description.  
  324.      If a description has too many pages, QHCOMPIL will generate an error.  
  325.      Each page can be up to fifteen lines long.
  326.      
  327.      No more than 100 keywords can be referenced by any keyword description.  
  328.      Having too many references results in a compiler error.  Note that the 
  329.      100 references can appear on any page of the description or be split 
  330.      among the pages, but there can't be more than 100 in the entire 
  331.      description.
  332.      
  333.      No more than 500 keywords can be defined in a single help file.  
  334.      Defining too many keywords generates a compiler error.
  335.      
  336.  
  337.  
  338.  
  339.  
  340.  
  341.                     USING QHCOMPIL (THE HELP FILE COMPILER)
  342.  
  343. Overview
  344.  
  345.      Once you have created your source file, you will need to compile it with 
  346.      QHCOMPIL.  QHCOMPIL allows you to define the header information for the 
  347.      help file, compile and "un"-compile help files, and update the header of 
  348.      a help file without re-compiling it.  The header information consists of 
  349.      several parts:  
  350.           1)   The "hot key" for popping up QHELP
  351.           2)   The colors, or "attributes", of the text in the QHELP window
  352.           3)   Whether the search for keywords at the cursor is case-
  353.                sensitive
  354.           4)   The indentation for displaying description lines
  355.           5)   Which characters (if any) besides letters and numbers can be 
  356.                considered a part of a "word". 
  357.      
  358.      To run the help file compiler give the following command at the DOS 
  359.      prompt:
  360.                QHCOMPIL
  361.      
  362.      The QHCOMPIL menu will appear at the left side of the screen, and on the 
  363.      right side will be the current settings for the header and an example of 
  364.      the current attributes.  To make selections from the menu, use the up 
  365.      and down arrow keys on the numeric keypad to move a highlight bar to the 
  366.      option you want, then press <ENTER>.
  367.      
  368.      To exit QHCOMPIL, simply select the "Exit to Operating System" option 
  369.      from the menu.
  370.      
  371.  
  372. Changing the Hot Key
  373.  
  374.      To change the "hot key" that will pop QHELP up, select the "Change Hot 
  375.      Key" option from the QHCOMPIL menu.  The hot key is defined in two 
  376.      parts:  The shift status and the scan code.  The shift status is the 
  377.      state that the four shift keys must be in (the four shift keys are the 
  378.      <Alt> key, the <Ctrl> key, the left <Shift> key, and the right <Shift> 
  379.      key).  The scan code identifies the key (other than the shift keys) that 
  380.      must be pressed when the shift status matches what QHELP is looking for.
  381.      
  382.      When the "Change Hot Key" option is selected, a small window will appear 
  383.      at the bottom of the screen that allows you to set the shift status.  
  384.      The four shift keys and their status for the current hot key will be 
  385.      shown.  To change settings, move the highlight bar (with the arrow keys) 
  386.      to the shift key whose status you want to change, and press <Enter>.  
  387.      When you are finished setting the shift status, press <ESC>.
  388.      
  389.      After setting the shift status, a window will appear that lists the 
  390.      "names" of the keys on the keyboard that generate scan codes that QHELP 
  391.      can use (these names are laid out to match the 84-key AT keyboard 
  392.  
  393.      layout).  At the bottom of the window you will be asked for the name of 
  394.      the key.  You can enter the name of any key listed, or "NONE" if want to 
  395.      pop up QHELP with a combination of only shift keys.  After entering the 
  396.      name of the key you will be returned to the QHCOMPIL menu and the window 
  397.      at the upper right of the screen will be updated to show the hot key 
  398.      combination that you just entered.
  399.      
  400.      Note that in order for QHELP to pop up, the hot key combination must be 
  401.      pressed EXACTLY.  For example, if the hot key is [Alt]-F1, then the user 
  402.      must press and hold ONLY the <Alt> key, then tap the <F1> key.  If the 
  403.      user were to press the [Alt]-F1 combination while holding down the 
  404.      <Ctrl> key, QHELP would not pop up.  The advantage to making the hot key 
  405.      match exactly is that you have many more unique key combinations to 
  406.      choose your hot key from.
  407.      
  408.      Note also that by choosing "NONE" for a scan code you can pop QHELP up 
  409.      with a combination of just shift keys.  For example, you can set your 
  410.      hot key to be [Alt][Ctrl][LShft], and QHELP will pop up whenever these 
  411.      three keys (and no others) are pressed at the same time.
  412.      
  413.  
  414. Changing the Display Attributes
  415.  
  416.      When the "Change Attributes" option is selected, a small menu will 
  417.      appear at the lower right of your screen listing the QHELP window 
  418.      attributes that you can change.  Select the option whose attribute you 
  419.      want to change (using the arrow keys to move the highlight bar) and 
  420.      press <Enter>.  A large window will appear at the left side of your 
  421.      screen that has a table of x's in it, each one displayed in a different 
  422.      attribute combination.  One of the x's will have a box around it.  This 
  423.      is the current attribute for the option you selected.  Using the arrow 
  424.      keys you can move the box around the window, and as you move the box, 
  425.      the attribute example window on the right side of your screen will 
  426.      change to show the option you selected in the attribute combination 
  427.      given by the box.  Pressing the <Enter> key selects the attribute in the 
  428.      box for the given option and returns you to the list of options.  If you 
  429.      have moved the box but decided you don't want to change anything, press 
  430.      the <ESC> key and the original attribute will be restored and you will 
  431.      be returned to the list of options.
  432.  
  433.      Note that the attributes you define for a help file apply only when
  434.      QHELP detects that the system is running in a color mode.  If the system
  435.      is running in a black and white mode or is not capable of displaying
  436.      colors, QHELP's default black and white color scheme is used for
  437.      displaying the QHELP window.
  438.      
  439.      When you are finished changing attributes, press the <ESC> key and you 
  440.      will be returned to the QHCOMPIL menu.
  441.      
  442.  
  443. Changing Case Sensitivity
  444.  
  445.      Case sensitivity affects how QHELP compares the word it finds at the 
  446.      cursor to keywords in the help file.  For example, with case sensitivity 
  447.      on, the words "Define" and "define" are considered DIFFERENT words.  If 
  448.      case sensitivity is off, "Define" and "define" are considered the same 
  449.      word.  The current state of case sensitivity is shown in the current 
  450.      settings window at the upper right of your screen.  Selecting the 
  451.      "Change Case Sensitivity" option of the QHCOMPIL menu will "toggle" the 
  452.      case sensitivity on and off.
  453.      
  454.  
  455.  
  456. Changing the Description Indentation
  457.  
  458.      The description indentation is the number of spaces inserted at the 
  459.      beginning of each line of a description when it is displayed in the 
  460.      QHELP window.  Selecting the "Change Indentation" option from the 
  461.      QHCOMPIL menu will cause a small window to appear on your screen that 
  462.      asks you for the indentation.  Enter the number of spaces to indent and 
  463.      press <ENTER>.  An indentation of 2 or 3 is usually good enough (this is 
  464.      just enough to move the text away from the edge of the window).  After 
  465.      entering the indentation, you will be returned to the QHCOMPIL menu.
  466.      
  467.  
  468. Setting the Identifier Characters
  469.  
  470.      Identifier characters are characters other than letters and numbers that 
  471.      QHELP considers part of words.  For example, it is common in some 
  472.      computer programming languages to use the underline character as part of 
  473.      identifier names, as in "_status" (which might be a variable name).  To
  474.      change the list of characters that QHELP will use in determining what is 
  475.      and isn't a word, select the "Set Identifier Characters" option from the 
  476.      QHCOMPIL menu.  A small window will appear that asks for a list of 
  477.      identifier characters.  Type in ALL the characters you want in this list 
  478.      (if you simply want to add to the list that already appears in the 
  479.      current settings window, you must retype all the characters that are 
  480.      there in addition to the one you want to add).  When entering these 
  481.      characters do NOT put spaces between them (if you do, the space 
  482.      character will be added to the list also).  When the list is complete, 
  483.      press <Enter> and you will be returned to the QHCOMPIL menu with the 
  484.      current settings window updated to reflect the new list.  Up to 10
  485.      additional identifier characters may be defined.
  486.      
  487.  
  488. Updating Header Information (on an Existing File)
  489.  
  490.      If your goal is simply to change the header information on an existing 
  491.      help file, you don't need to recompile the source file.  Change the 
  492.      header information in the current settings window to match what you want 
  493.      for the help file using the first five options on the QHCOMPIL menu,
  494.      then choose the "Update Help File Header" option.  A small window will 
  495.      appear that asks you for the help file to update.  Enter the help file 
  496.      name without an extension (".QHP" is assumed) and press <Enter>.  If 
  497.      QHCOMPIL can't find the help file, a message to that effect will 
  498.      appear.  If the help file exists, you will be warned that updating the 
  499.      header will permanently change the help file, and you will be asked to 
  500.      confirm that you want this done.  Press 'Y' to confirm, 'N' to abort the 
  501.      operation.  You will then be returned to the QHCOMPIL menu.
  502.      
  503.  
  504. Reading Header Information (from an Existing File)
  505.  
  506.      This option is useful if you are making a single change to the header 
  507.      information of a help file and don't want to re-enter all the other 
  508.      header information or if you are developing a large help file and will 
  509.  
  510.      be compiling it several times and you don't want to re-enter all the 
  511.      header information every time.  What this option does is loads the 
  512.      header information from an existing help file and changes all the 
  513.      settings in the current settings window to match that header 
  514.      information.
  515.      
  516.      Select the "Read Help File Header" option from the QHCOMPIL menu.  A 
  517.      small window will appear that asks for the name of the help file from 
  518.      which to get the header information.  Enter the help file name without 
  519.      extension (".QHP" is assumed) and press <Enter>.  If QHCOMPIL can't find 
  520.      the help file, a message to that effect will appear, otherwise you will 
  521.      be returned to the QHCOMPIL menu with the current settings changed to 
  522.      match the specifed help file header.
  523.      
  524.  
  525. Compiling a Help File
  526.  
  527.      This option is the heart of QHCOMPIL.  When the "Compile Help File" 
  528.      option is selected, a large window appears on your screen.  You are 
  529.      first prompted for the name of the source file.  When entering the 
  530.      source file name, you must include the extension (no extension is 
  531.      assumed for source files).  If QHCOMPIL can find the source file, it 
  532.      asks for the name of the help file to create.  When entering the help 
  533.      file name, do NOT include the extension (".QHP" is assumed).
  534.      
  535.      After both filenames are entered, QHCOMPIL will begin compiling the 
  536.      source file.  As the compiler works, you will see messages in the window 
  537.      that tell you what it is doing.  If an error occurs, compilation will 
  538.      halt and an error message will appear in the window, along with some 
  539.      information on where in the source file the error occured.  You may also 
  540.      see some warnings, but these will not halt the compilation process.
  541.      
  542.      When compilation is complete or when an error occurs you will be asked 
  543.      to press <ESC>.  This will return you to the QHCOMPIL menu.
  544.      
  545.  
  546. Uncompiling a Help File
  547.  
  548.      Uncompiling a help file is the reverse of compiling a source file; it 
  549.      takes a help file and creates a source file from it.  When the 
  550.      "Uncompile Help File" option is selected, you will be asked for the name 
  551.      of the help file to uncompile.  Enter this name without an extension 
  552.      (".QHP" is assumed).  You are then asked for the name of the source file 
  553.      to uncompile to.  Enter this file name WITH an extension (no extension 
  554.      is assumed for source files).
  555.      
  556.      After both filenames have been entered, QHCOMPIL will begin uncompiling 
  557.      the help file.  When the process is complete, you will be returned to 
  558.      the QHCOMPIL menu.
  559.      
  560.      The source files that result from uncompiling a help file will not 
  561.      exactly match the original source file, since the help files don't store 
  562.      things like comments, etc.  However, the resulting source file can be 
  563.      recompiled to obtain exactly the same help file.  Also, the uncompile 
  564.      option will place several comments at the beginning of the resulting 
  565.      source file that indicate the settings of the header information for the 
  566.      help file.
  567.  
  568.      
  569.  
  570. Compiler Errors and Warnings
  571.  
  572.      When compiling a help file QHCOMPIL may generate warning messages.  
  573.      These warnings do not stop compilation, but you should be aware of 
  574.      them.  QHCOMPIL will generate a warning for every keyword that is 
  575.      defined but not used as a reference by some other keyword (that is, the 
  576.      keyword description is only available by popping QHELP up with that word 
  577.      under the cursor, and it will never appear as a highlighted word in 
  578.      another keyword description or a keyword list).  This is perfectly 
  579.      legal, but it isn't always a good idea.  If you have created a list of 
  580.      keywords as your default keyword description, you should take note of 
  581.      these warnings (note that the default keyword itself will appear in this 
  582.      list of warnings, but it can be safely ignored since it is not intended 
  583.      to be referenced).
  584.      
  585.      QHCOMPIL may also encounter errors in the source file.  Any error will 
  586.      halt the compilation process, and a message will be printed describing 
  587.      the error, along with some information to help you locate the error in 
  588.      your source file.  QHCOMPIL will only "see" the first error in a source 
  589.      file; If other errors exist, you will need to fix the current error and 
  590.      recompile the source file to find the next one.
  591.      
  592.      The following is a list of QHCOMPIL error messages.  Most of these 
  593.      messages are self-explanatory, but where appropriate some additional 
  594.      information is given.  The number at the left is the internal QHCOMPIL 
  595.      error number, so the numbering may have gaps but this list is complete.
  596.      
  597.      2)   Error writing output file.
  598.      
  599.      3)   Unable to resolve keyword reference.
  600.                This error occurs when you have referenced a keyword with the 
  601.                Reference Keyword character '~' but have not defined the 
  602.                keyword being referenced anywhere else in the source file. 
  603.      
  604.      4)   Unable to open input file.
  605.                This error may occur if the source file exists but has been 
  606.                locked by some other program. 
  607.      
  608.      5)   No title screen defined.
  609.                QHCOMPIL didn't find a Define Title line anywhere in the 
  610.                source file, and therefore can't define a default screen. 
  611.      
  612.      12)  Keyword too long in line XX
  613.                The keyword being defined exceeds the maximum keyword length 
  614.                of 15 characters. 
  615.      
  616.      13)  Maximum keywords exceeded in line XX
  617.                You have tried to define more than 500 keywords in the source 
  618.                file. 
  619.      
  620.  
  621.      14)  Not enough available memory in line XX
  622.      
  623.      15)  Line too long in line XX
  624.                The description line is too long to fit in the QHELP window.  
  625.                Note that the indentation defined as part of the header is 
  626.                added to the beginning of each line as it is compiled, so the 
  627.                line may LOOK like it will fit, but adding the indentation 
  628.                makes it too long. 
  629.      
  630.      16)  Too many keyword references in line XX
  631.                You have tried to reference more than 100 keywords in a 
  632.                keyword description. 
  633.      
  634.      17)  Too many pages for description in line XX
  635.                The keyword description exceeds 10 pages. 
  636.      
  637.      18)  Text not associated with keyword in line XX
  638.                This error will occur at the beginning of a source file if 
  639.                QHCOMPIL sees what appears to be part of a description but no 
  640.                keyword has been defined yet. 
  641.      
  642.      19)  Null keywords not allowed here in line XX
  643.                A Define Keyword character appears with no keyword behind it. 
  644.      
  645.      20)  Keyword redefinition in line XX
  646.                This error occurs when QHCOMPIL sees a keyword definition for 
  647.                a keyword that was defined earlier in the source file. 
  648.      
  649.      XX)  Unknown error XX in line XX
  650.                This error occurs when an internal QHCOMPIL error is generated 
  651.                that QHCOMPIL doesn't recognize.
  652.  
  653.  
  654.  
  655.                                 ACKNOWLEDGMENTS
  656.  
  657.  
  658. I would like to thank Borland International both for its outstanding "C" 
  659. compiler, TurboC, and for the excellent help system in TurboC's integrated 
  660. development environment which inspired me to write QHELP.
  661.  
  662. I would also like to thank Al Stevens for his article "Writing Terminate-and-
  663. Stay-Resident Programs (Part 1: TSRs in TurboC)" in Computer Language 
  664. magazine (February 1988 issue).  In that article Mr. Stevens gave complete 
  665. listings for the shell of a resident program, and these are the residency 
  666. routines that QHELP uses (with some minor modifications).  Anyone interested 
  667. in trying his/her hand at writing resident programs (in "C" or otherwise) 
  668. would do well to read Mr. Stevens' article.
  669.  
  670. Also, special thanks go out to my roommate, Dave Steiner.  Since he is an
  671. experienced "C" programmer and has also written many resident programs (in
  672. several languages), I pestered him with endless questions and he somehow
  673. managed to answer them all.  Oh, and I used a "C" library written by Dave
  674. for all the menus and windows in QHCOMPIL.
  675.  
  676.