home *** CD-ROM | disk | FTP | other *** search
/ The Pier Shareware 6 / The_Pier_Shareware_Number_6_(The_Pier_Exchange)_(1995).iso / 049 / qf30s.zip / QF.DOC < prev    next >
Text File  |  1994-09-01  |  59KB  |  1,564 lines

  1. Quiet Flight Macros for TSE
  2. Copyright, COB Systems Designs, Inc.  All Rights Reserved.
  3.  
  4.  
  5. INTRODUCTION
  6. ══════════════════════════════════════════════════════════════════════
  7.  
  8. Welcome to the Quiet Flight macros written specifically for the The
  9. Semware Editor (TSE) and the productive programmer.
  10.  
  11. These macros are TSE extensions for FoxPro, dBase, & Clipper
  12. programmers. They're much more than that because they work well with C,
  13. ASM, Pascal and, of course, TSE files.
  14.  
  15. The Quiet Flight macros were created by a couple of programmers who
  16. do software development in dBASE every day.  The macros range from
  17. extremely simple ("Show Changed") to full-fledged programs ("Flow").
  18. As a whole, they provide a very powerful and efficient development
  19. environment.
  20.  
  21. Excerpt from the original Quiet Flight for BRIEF documentation:
  22.  
  23.      "By the way, the name 'Quiet Flight' might seem strange for some
  24.      BRIEF macros that speed up dBase programming.  Aren't you dtired
  25.      of dThis and dThat dnames for dBase oriented products?  We are,
  26.      so we got bold and reached back into the past and came up with a
  27.      name that would best suit our fancy.  We chose "Quiet Flight"
  28.      because it reminds us of the days when we still had the time for
  29.      fun things like an afternoon of surfing or frisbee.  Maybe one
  30.      day these macros will make us productive enough for those good
  31.      old "spare" hours of fun and leisure.
  32.  
  33.                             Peace & Joy to you!"
  34.  
  35. We still hope this is true with the TSE macros we have provided for your
  36. use.
  37.  
  38.     DREADED LEGAL, But Necessary, SECTION
  39.  
  40.     COB System Designs, Inc. hereby disclaims all warranties relating to
  41.     this software, whether expressed or implied, including without
  42.     limitation any implied warranties of merchantability or fitness for
  43.     a particular purpose. COB System Designs, Inc. will not be liable
  44.     for any special, incidental, consequential, indirect or similar
  45.     damages due to loss of data or any other reason, even if COB System
  46.     Designs, Inc. or an agent of COB System Designs, Inc. has been
  47.     advised of the possibility of such damages.  In no event shall COB
  48.     System Designs, Inc. liability for any damages ever exceed the price
  49.     paid for the license to use this software, regardless of the form of
  50.     the claim. The person using the software bears all risk as to the
  51.     quality and performance of the software.
  52.  
  53.     END OF DREADED LEGAL SECTION
  54.  
  55.  
  56. REGISTRATION
  57. ══════════════════════════════════════════════════════════════════════
  58.  
  59. If you have downloaded Quiet Flight from a BBS or obtained it from
  60. a friend, then you are using an UNREGISTERED version of Quiet
  61. Flight which is intended for evaluation purposes only.
  62.  
  63. Registering Quiet Flight entitles you to these benefits:
  64.  
  65.    - Full source code for all of the Quiet Flight macros written in
  66.      SAL (SemWare Application Language).
  67.  
  68.    - Ability to change key definitions for Quiet Flight functions.
  69.  
  70.    - Technical support via e-mail or telephone
  71.    
  72.    - Updates and Additional Macros.
  73.  
  74. Quiet Flight sells for $49.95 + $10 S/H.  
  75.  
  76. Also, until the full release of the SEMWARE EDITOR, we offer these
  77. additional discounts.  If you are a registered user of BRIEF you will 
  78. receive $10 off.  If you are a registered user of dBRIEF or Quiet Flight 
  79. for BRIEF, you can receive an additional $10 off.
  80.  
  81. To register, print out the QFREG.TXT, fill it out and send it in. 
  82. Satisfaction is guaranteed, we have a 120 day return policy. 
  83.  
  84. INSTALLATION
  85. ══════════════════════════════════════════════════════════════════════
  86.  
  87. Copy the QF macro files into your TSE macros sub-directory.  Don't worry,
  88. all of our macros start with the letters QF, so you'll be able to
  89. quickly uninstall them with a DEL QF*.*.
  90.  
  91.  
  92. It's *IMPORTANT* also to set an environment variable QFPATH to the
  93. location of the macros.  We suggest you do this in your autoexec.bat
  94. file.
  95.  
  96. Example, edit your autoexec.bat, then add this line:
  97. SET QFPATH=[Directory name]
  98.  
  99. In place of [Directory name], place the directory where you have
  100. stored the QF files.  If you've set up QF files in the C:\TSE
  101. sub-directory, then the line would look like this:
  102.  
  103. SET QFPATH=C:\TSE
  104.  
  105. This change will not take effect until you restart your system or
  106. manually type in the QFPATH statement at the DOS prompt.
  107.  
  108. Also, please make sure to copy two files: QFX.EXE and QFDBF.COM to a
  109. sub-directory in your path.  Or if you prefer, add the QF sub-directory
  110. to your path.   These two files are used by Quiet Flight to assist you
  111. with displaying your index keys and database structures - respectively.
  112.  
  113. To have the QF macros to start up automatically, you have 2 choices:
  114.  
  115.    - CHOICE 1:
  116.  
  117.      Edit TSE.S (or your own TSE configuration file), search for "proc
  118.      WhenLoaded()" and add the line ExecMacro("QF") just before the end
  119.      of the procedure.  For instance:
  120.  
  121.         proc WhenLoaded()
  122.            integer cid = GetBufferId()
  123.            pick_buffer = CreateTempBuffer()
  124.            GotoBufferId(cid)
  125.            ExecMacro("qf")                 <-- Add this line
  126.         end
  127.  
  128.    - CHOICE 2:
  129.  
  130.      Load QF from your command line using TSE's "-e" command-line
  131.      option.  For example:
  132.  
  133.         E.EXE test.prg -eQF
  134.  
  135.      You can put this inside a batch file to have TSE always load
  136.      the Quiet Flight macros.
  137.  
  138.         Example contents of a QF.BAT:
  139.         @echo off
  140.         echo.
  141.         echo Loading TSE with Quiet Flight
  142.         echo.
  143.         E.EXE %1 %2 %3 %4 %5 %6 %7 %8 %9 -eQF
  144.  
  145.         Using this file you could start the editor like this:
  146.         QF test.prg
  147.  
  148. To load QF from inside the editor:
  149.  
  150.    Access the Macro/Execute menu or press the key assigned to the
  151.    MacMenu(), default is F12.  Then enter "QF" for the macro to execute.
  152.  
  153.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  154.     │ Three Keys to Remember:                                        │
  155.     │ Alt \ will toggle Quiet Flight On and Off.                     │
  156.     │ Alt / will bring up a menu for the Quiet Flight macros.        │
  157.     │ Ctrl F1 will bring up a list of your keyword expansions for    │
  158.     │ the current file you are editing.                              │
  159.     └────────────────────────────────────────────────────────────────┘
  160.  
  161. CONFIGURING QUIET FLIGHT
  162. ══════════════════════════════════════════════════════════════════════
  163.  
  164. We have tried to make Quiet Flight as extensible and flexible as
  165. possible.  This allows for support of a multitude of programming
  166. languages and--most importantly--allows Quiet Flight to work to your
  167. tastes and preferences.
  168.  
  169.  
  170. ■ QF.CFG
  171.  
  172. The primary means of configuring Quiet Flight is through the QF.CFG
  173. file.  This file should be located in the same directory as your
  174. Quiet Flight macros.
  175.  
  176. QF.CFG is composed of several sections which dileneate related
  177. settings.  If you are familiar with how the Microsoft Windows .INI
  178. files are grouped, you will have no trouble grasping the format of
  179. QF.CFG.  The following format is used in both environments:
  180.  
  181. [Section Name]
  182. KeyName=value
  183.  
  184. The brackets ([]) are part of the section name, so must be included.
  185. A section name may be followed by an equals sign (=) and a list of
  186. extensions separated by spaces.  That means the following settings
  187. apply only to files of the named extensions.  For example, the
  188. following [GENERAL] section applies only to .C and .CPP extensions:
  189.  
  190. [GENERAL=.C .CPP]
  191.  
  192.  
  193. A KeyName is a alphanumeric string (upper or lower case), immediately
  194. followed by an equals sign (=) and the value setting.  The following
  195. example turns the QF Restore feature off for all undefined extensions,
  196. and sets the default comment string to be "**".
  197.  
  198. [GENERAL]
  199. Restore=OFF
  200. CommentStart=**
  201.  
  202. Configuration settings which require on/off values should be set to
  203. values of "ON" or "OFF" (as in the example above).  Settings which
  204. require strings or numbers should be entered as-is with NO quotation
  205. marks.
  206.  
  207. Lines which begin with a semicolon (;) are treated as comments.
  208. Comment lines are ignored by Quiet Flight.
  209.  
  210.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  211.     │  All of the Quiet Flight settings are documented within the    │
  212.     │  QF.CFG file.  Review QF.CFG and the default settings to       │
  213.     │  configure QF to your preferences.                             │
  214.     └────────────────────────────────────────────────────────────────┘
  215.  
  216.  
  217. ■ Multiple Configurations
  218.  
  219. You may be in an environment where you need to use more than one
  220. QF.CFG file.  A perfect example is if two people are sharing one
  221. machine, or TSE is being run off a network and the Quiet Flight files
  222. are stored in a common directory.
  223.  
  224. You may specify an alternate configuration file by setting the
  225. DOS environment variable QFCFG.  Quiet Flight will append the
  226. value of the variable QFCFG to "QF" to arrive at the configuration
  227. filename.  For example, if I set QFCFG=JEN, then Quiet Flight will
  228. look for a configuration file named QFJEN.CFG.
  229.  
  230. If "Mark" logs in and sets QFCFG=MARK, then Quiet Flight looks
  231. to the file QFMARK.CFG for its configuration information.
  232.  
  233.  
  234.  
  235. KEY ASSIGNMENTS
  236. ══════════════════════════════════════════════════════════════════════
  237.  
  238. SHAREWARE USERS:  Key assignments may not be changed in the shareware
  239. version of Quiet Flight.  Register Quiet Flight to receive full source
  240. code to the product, enabling the redefinition of key assignments.
  241.  
  242. Key assignments for the Quiet Flight macros are embedded in the source
  243. code.  To modify the default settings you should edit QFKEY.INC and
  244. search for "KeyDef QFKeys".  Edit the assignments as necessary and save
  245. the QFKEY.INC.  You must recompile QF.S and reload Quiet Flight for the
  246. changes to take effect.
  247.  
  248. You may also want to edit QFMENU.INC to reflect your changes on the
  249. Quiet Flight menu.
  250.  
  251. In defining the default key assignment for QF, we made every effort to
  252. choose keys which would not interfere with your current operation of TSE.
  253. The following keys are the default assignments for the Quiet Flight
  254. macros:
  255.  
  256.    <Alt />         Quiet Flight Menu
  257.    <Alt 1>         Comment/Uncomment Block
  258.    <Alt 2>         Screen Counter
  259.    <Alt 3>         Flow
  260.    <Alt 6>         Index Key List
  261.    <Alt 7>         DBF Structure
  262.    <Alt 8>         ZIP View
  263.    <Alt 9>         Directory Management
  264.    <Alt 0>         Project Manager
  265.    <Alt B>         Buffer List
  266.    <Alt F>         Display File Info
  267.    <CenterCursor>  Where Am I?
  268.  
  269.    <Spacebar>      Shorthand Expansion (if first word on line)
  270.    <Alt BackSpace> Unconditional Shorthand Expansion
  271.    <Ctrl F1>       Shorthand Expansion Help
  272.  
  273.    <Ctrl 2>        Show Changed
  274.    <Ctrl E>        Quiet Flight Load File Routine
  275.    <Ctrl K>        Kill Restore
  276.    <Ctrl N>        New Header
  277.    <Ctrl S>        Save All Modified
  278.    <Ctrl T>        Notepad
  279.    <Alt F11>       Edit QF.CFG
  280.    <Alt F12>       Reload QF.CFG
  281.    <Alt \>         Toggle Quiet Flight On/Off
  282.    <Ctrl Enter>    Save File Routine
  283.  
  284.    <Del>           Delete Character/Block
  285.    <Shift '>       Quote Pair - ""
  286.    <Shift 9>       Parenthesis Pair - ()
  287.    <Shift [>       Curly Brace Pair - {}
  288.    <[>             Brace Pair - []
  289.  
  290. If you forget any of these key assignments, there is a Quiet Flight menu
  291. to bail you out.  Press <Alt /> to bring it up.
  292.  
  293.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  294.     │  With Quiet Flight's toggle command (default Alt \), you can   │
  295.     │  have the best of both worlds.  You can have your own key      │
  296.     │  assignments and Quiet Flight's share the same keys.  By       │
  297.     │  pressing <Alt \>, you will toggle back and forth from your    │
  298.     │  key assignments and QF's.                                     │
  299.     └────────────────────────────────────────────────────────────────┘
  300.  
  301.  
  302.  
  303. ALL-PURPOSE MACROS
  304. ══════════════════════════════════════════════════════════════════════
  305.  
  306. ■ Unload/Reload QF      <Alt \>
  307.  
  308. At times you may wish to disable the Quiet Flight macros, thus
  309. recovering the key assignments used by QF.  You can do this quite
  310. easily by pressing <Alt \>.  Press <Alt \> again to return to normal
  311. Quiet Flight operation.
  312.  
  313.  
  314. ■ Quiet Flight Menu     <Alt />
  315.  
  316. If you forget the key assignment for a Quiet Flight function, press
  317. <Alt /> to pop up a menu of commands.  Every major QF function is
  318. listed, along with its corresponding key assignment.
  319.  
  320.  
  321. ■ Edit QF.CFG           <Alt F11>
  322.  
  323. This is simply a hotkey for loading the QF.CFG file.  It locates
  324. and loads QF.CFG, making it the current buffer.
  325.  
  326.  
  327. ■ Re-load QF.CFG         <Alt F12>
  328.  
  329. After you have made changes to QF.CFG, you most likely will want
  330. them to take effect without having to exit TSE.  Executing this
  331. function will force Quiet Flight to reload the changes you have
  332. made to the configuration file.
  333.  
  334.  
  335. ■ Directory Lister      <Alt 9>
  336.  
  337. Quiet Flight's Directory Lister (QFDir) makes it easy to navigate
  338. directories and maintain files.  Some of the features of the QFDir
  339. are:
  340.  
  341.    - Directory names placed at top of directory list
  342.    - Speedkey searching
  343.    - Tag multiples files to load into TSE
  344.    - Delete single/tagged files
  345.    - View modes for text files, dBASE database & index structures,
  346.      binary files, and .ZIP files
  347.    - Sort directories by name, size, extension, or date
  348.    - Set home directory
  349.  
  350. The first thing QFDir requests for upon executing is a file specification.
  351. The default is all files (*.*) in the same directory as the current file
  352. in TSE's buffer.
  353.  
  354. After entering a file specification, a list of all sub-directories
  355. and matching files are displayed in a new window.  Sub-directories are
  356. always grouped at the top.  Use the arrow keys, <Home>, <End>,
  357. <PgUp>, and <PgDn> to scroll through the directory list.  Hotkeys
  358. are defined for all actions in QFDir:
  359.  
  360.    - <F1> = Help
  361.      This present a menu of available actions.  Press <Enter> on a
  362.      menu item to execute the function, or <Esc> to exit the menu.
  363.  
  364.    - <Ctrl S> = Sort Order
  365.      You can change the sort order with this function.  QFDir
  366.      can sort files by name, date, extension, or size.
  367.  
  368.    - <Spacebar> = Toggle Tag
  369.      QFDir allows you to tag files for editing or deleting.  Press
  370.      <Spacebar> to toggle a tag on a file.  Keep in mind that tags
  371.      only exist for the current directory--you may not have tags
  372.      spanning across different directories.
  373.  
  374.    - <Ctrl T> = Tag All
  375.      Use this function to tag all files in the current directory.
  376.  
  377.    - <Ctrl U> = Untag All
  378.      Remove all tags by pressing <Ctrl U>.
  379.  
  380.    - <Ctrl R> = Reverse Tags
  381.      Reversing tags will untag all tagged files, and tag the
  382.      files which were previously untagged.
  383.  
  384.    - <Enter> = Load hilited/tagged
  385.      If the hilite bar is positioned on a directory entry, <Enter>
  386.      will automatically change directories, updating the display
  387.      to show the files in the new directory.  All tags will be
  388.      lost.
  389.  
  390.      If there are no tags defined and the hilite bar is resting on
  391.      a filename, then that file is loaded into TSE's buffer ring.
  392.      However, if there are tags defined, QFDir will prompt whether
  393.      to load the current file or the tagged files.
  394.  
  395.      QFDir quits after loading files, returning to TSE's editing
  396.      screen.
  397.  
  398.    - <Del> = Delete Current File
  399.      Press <Del> to delete the currently hilited file.  For safety,
  400.      you are prompted before QFDir performs the deletion.
  401.  
  402.    - <Ctrl D> = Delete Tagged Files
  403.      To delete all tagged files, press <Ctrl D>.  You are first
  404.      asked whether or not to confirm each deletion.  If you answer
  405.      "Yes," then QFDir will prompt you before deleting each file.
  406.      Otherwise, QFDir performs the deletions in batch without
  407.      confirmation.
  408.  
  409.    - <Ctrl V> = View File
  410.      You can view the currently hilited file without loading it by
  411.      pressing <Ctrl V>.  QFDir recognizes dBASE database/index
  412.      structures and .ZIP files, displaying them in the appropriate
  413.      format.  Some binary extensions, such as .EXE and .COM, are
  414.      also recognized as such and displayed in TSE's binary mode.
  415.  
  416.      ***VERY IMPORTANT***
  417.      In order for the specialized viewers to work, these files
  418.      must be available in the DOS path:  QFDBF.COM, QFX.EXE, and
  419.      PKWARE's PKZIP.
  420.  
  421.    - <Ctrl B> = Binary View
  422.      You can force a binary view (rather than an Ascii view) with
  423.      this function.
  424.  
  425.    - <Ctrl L> = Log New Directory
  426.      Quickly change directories or file specifications by pressing
  427.      <Ctrl L>.  For example, if you are currently listing all
  428.      files (*.*) but wish to see only your C++ files, change the
  429.      file specification to: *.CPP.
  430.  
  431.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  432.     │ The only way to log into a new drive with QFDir is through     │
  433.     │ the Log New Directory command.  Press <Ctrl L> and enter       │
  434.     │ the new drive letter and directory. ie A:\                     │
  435.     └────────────────────────────────────────────────────────────────┘
  436.  
  437.    - <Ctrl H> = Set Home Directory
  438.      You can make the directory being viewed the TSE default directory
  439.      with the Set Home Directory function.  Setting the home directory
  440.      means that TSE will default to that directory when shelling to
  441.      DOS, creating new files, etc.
  442.  
  443.    - <Esc> = Exit QFDir
  444.      If you wish to exit QFDir without loading any files, press <Esc>.
  445.  
  446. Speedkey is enabled in QFDir.  So, if you start typing a filename,
  447. it jumps to the closest match.  Precede your entry with a backslash (\)
  448. to jump to directory names.
  449.  
  450.  
  451. ■ Zip View              <Alt 8>
  452.  
  453. Quiet Flight Zip View (QFZip) allows you to maintain existing .ZIP
  454. files from within TSE.
  455.  
  456. ***VERY IMPORTANT***
  457. In order for QFZip to work, PKWARE's PKZIP and PKUNZIP must be
  458. available in the DOS path.
  459.  
  460.  
  461. The first thing QFZip requests for upon executing is a file
  462. specification. The default is all .ZIP files (*.ZIP) in the same
  463. directory as the current file in TSE's buffer.
  464.  
  465. After entering a file specification, a list of all sub-directories and
  466. matching files are displayed in a new window.  Sub-directories are
  467. always grouped at the top.  Use the arrow keys, <Home>, <End>,
  468. <PgUp>, and <PgDn> to scroll through the directory list.  Press <Enter>
  469. to select a ZIP file to view, or <Esc> to return to TSE.
  470.  
  471. The Zip View Window displays a list of the files contained in the
  472. selected ZIP file.  You may perform any of these functions on
  473. the current ZIP archive:
  474.  
  475.    - <F1> = Help
  476.      This present a menu of available actions.  Press <Enter> on a
  477.      menu item to execute the function, or <Esc> to exit the menu.
  478.  
  479.    - <Ctrl S> = Sort Order
  480.      You can change the sort order with this function.  QFZip
  481.      can sort entries by name, date, extension, or size.
  482.  
  483.    - <Spacebar> = Toggle Tag
  484.      QFZip allows you to tag entries.  Press <Spacebar> to toggle a
  485.      tag on a ZIP entry.
  486.  
  487.    - <Ctrl T> = Tag All
  488.      Use this function to tag all entries contained in the ZIP file.
  489.  
  490.    - <Ctrl U> = Untag All
  491.      Remove all tags by pressing <Ctrl U>.
  492.  
  493.    - <Ctrl R> = Reverse Tags
  494.      Reversing tags will untag all tagged entries, and tag the
  495.      entries which were previously untagged.
  496.  
  497.    - <Enter> = Extract Current File
  498.      Extract a single entry of the ZIP file by hiliting the entry
  499.      and pressing <Enter>.  You will be prompted before the extraction
  500.      is performed.
  501.  
  502.    - <Ctrl E> = Extract Tagged
  503.      You may extract multiple files from a ZIP archive by tagging
  504.      the selected entries and pressing <Ctrl E>.
  505.  
  506.    - <Ctrl A> = Extract All
  507.      Extract all files (tagged or untagged) from a ZIP archive with
  508.      this function.
  509.  
  510.    - <Ins> = Insert File(s)
  511.      Files may be inserted into a ZIP archive by pressing <Ins>.
  512.      A new directory window is displayed in which you may tag the files
  513.      to insert.  Press <Enter> when done.
  514.  
  515.    - <Del> = Delete File
  516.      Delete the hilited ZIP entry by pressing <Del>.
  517.  
  518.    - <Ctrl D> = Delete Tagged
  519.      Remove all tagged entries from the ZIP archive with the <Ctrl D>
  520.      key.
  521.  
  522.    - <Ctrl F> = Freshen Zip
  523.      Freshen the entries in the ZIP with this function.  This updates
  524.      the ZIP with any newer versions of the member files.
  525.  
  526.    - <Ctrl V> = View File
  527.      You may view a ZIP entry, without extracting it, by pressing
  528.      <Ctrl V> on the hilited file.  Keep in mind that there must
  529.      be enough free disk space to hold a temporary version of the
  530.      file being viewed.
  531.  
  532.    - <Ctrl P> = Set Password
  533.      If an entry in a ZIP has a password attached, you can still
  534.      access it with QFZip using the Set Password function.  If a
  535.      password is set using <Ctrl P>, then any files inserted with
  536.      QFZip will acquire that password as well.
  537.  
  538.    - <Ctrl O> = Toggle Overwrite
  539.      By default, PKWARE's PKUNZIP will prompt you if try to overwrite
  540.      an existing file when extracting.  You can have toggle this
  541.      safety feature on and off with QFZip's <Ctrl O> key.
  542.  
  543.    - <Esc> = Exit QFZip View mode
  544.      To close the ZIP View window and select another ZIP file to view,
  545.      press <Esc>.
  546.  
  547.  
  548. -Configuring Zip View-
  549.  
  550. If you have renamed PKZIP.EXE and/or PKUNZIP.EXE to alternate file
  551. names, you may specify the new names in QF.CFG.  Under the heading
  552. [ZIP] look for the keynames "ZipFile" and "UnZipFile" and set these
  553. to the appropriate filenames.  For example, if PKZIP.EXE is called
  554. ZIP.EXE and PKUNZIP.EXE is UNZIP.EXE on your system, the keynames
  555. would be defined as follows:
  556.  
  557. ZipFile=ZIP
  558. UnZipFile=UNZIP
  559.  
  560.  
  561. ■ Quick Commentor       <Alt 1>
  562.  
  563. The Quiet Flight commenter allows you to quickly comment/uncomment a
  564. block of code.  To use, simply mark the lines you want to comment (using
  565. either a line or character block) and press <Alt 1>.  The blocked lines
  566. are commented out, and a header is inserted documenting the time and date.
  567.  
  568. There are two ways to uncomment code commented out by the QF commenter.
  569. The easiest method is to position the cursor on the line of the comment
  570. header and press <Alt 1>.  The entire block of commented code is
  571. uncommented, and the header is removed.  The comment header looks
  572. something like this for xBASE code:
  573.  
  574.     ** Commented out 11/30/92 at 03:26 pm
  575.  
  576. However, if you wish to uncomment just a portion of the commented code,
  577. mark the lines you wish to uncomment and press <Alt 1>.  Quiet Flight will
  578. only uncomment those lines which are included in the mark.
  579.  
  580.  
  581. -Configuring Quick Commenter-
  582.  
  583. Quiet Flight provides built-in support for commenting these file types:
  584.  
  585.    C/C++         --> .C   .CPP .H
  586.    xBASE code    --> .PRG .CH .FRG .SPR .MPR .FMT
  587.    SAL Macros    --> .S   .INC
  588.    Batch/System  --> .BAT .SYS .INI
  589.  
  590. If you wish to define comment characters for a new file extension, or
  591. wish to change the default characters for a pre-defined extesion, you
  592. can do so through QF.CFG.  Beneath a [GENERAL=<extensions>] section
  593. you may add "CommentStart" and "CommentEnd" keynames.
  594.  
  595. Suppose I wished to change the comment characters for C++ files from the
  596. default // to the more traditional /*..*/.  Here is an abstract of my
  597. [GENERAL] section for .CPP files:
  598.  
  599. [GENERAL=.CPP]
  600. CommentStart=/*
  601. CommentEnd=*/
  602.  
  603.  
  604. ■ Where Am I?           <Num 5>
  605.  
  606. To find out what procedure or function you are currently positioned in,
  607. use the Where Am I function of Quiet Flight.  The procedure/function is
  608. displayed on the TSE message line.
  609.  
  610. If you keep the default key assignment (<Num 5>), keep in mind that
  611. NumLock must be turned off for this to work.
  612.  
  613.  
  614. ■ Project Manager       <Alt 0>
  615.  
  616. The Quiet Flight Project Manager allows you to group related files
  617. in order to load them together.  For example, you could create a
  618. project called SYSTEM.PRJ which automatically loads AUTOEXEC.BAT and
  619. CONFIG.SYS.
  620.  
  621. The Project Manager presents a menu with three options.  Each of these
  622. is discussed below:
  623.  
  624.    - Open Project:  Select this option to open an existing project or
  625.      create a new project.
  626.  
  627.      If the project exists, all files associated with that project
  628.      are loaded into TSE's buffer ring.  If an associated file is
  629.      not found, you are asked if that file should be removed from
  630.      the project.
  631.  
  632.      If the project does not exist, QF assumes it is a new project.
  633.      You can add files to the project through Quiet Flight's Buffer
  634.      List (detailed in the next section).
  635.  
  636.      If a project is already open when you open or create a project,
  637.      the previous project is automatically closed.
  638.  
  639.    - Close Project:  To close a project--but leave the associated
  640.      files open in the TSE ring--select this option.
  641.  
  642.    - Close Project w/Files:  A project and all associated files may
  643.      be closed using this option.
  644.  
  645.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  646.     │ You can load projects from any TSE Edit File prompt by         │
  647.     │ specifying the project name with the .PRJ extension.  This     │
  648.     │ includes loading projects from the command line.  For example, │
  649.     │ if you wanted to run TSE and load the SYSTEM project at the    │
  650.     │ same time, you would enter this DOS command: E SYSTEM.PRJ      │
  651.     │ Or, at the TSE "File(s) to edit:" prompt, enter SYSTEM.PRJ     │
  652.     │ to automatically load the project files.                       │
  653.     └────────────────────────────────────────────────────────────────┘
  654.  
  655.  
  656. -Configuring Project Manager-
  657.  
  658. The default directory for storing project files may be set in the QF.CFG
  659. file.  Look under the [GENERAL] section in QF.CFG for a keyname titled
  660. "ProjectDir".  If you do not want project files stored in the current
  661. directory, then you must set this keyname to the directory in which
  662. to store the .PRJ files.  For example, you might set it to store project
  663. files in C:\TSE\PROJECT\:
  664.  
  665. ProjectDir=C:\TSE\PROJECT\
  666.  
  667. It is highly recommended that you set this option so that project files
  668. are not strewn about your hard disk and unlocatable by the Project
  669. Manager.
  670.  
  671.  
  672. ■ Buffer List           <Alt B>
  673.  
  674. Although there is a buffer list included with TSE, Quiet Flight
  675. provides enhancements with its own buffer list.
  676.  
  677. Like TSE, Quiet Flight lists all files in the edit ring and displays a
  678. "*" next to files which have been modified but not saved.  In addition,
  679. the following keys are defined:
  680.  
  681.    - <F1> = Help
  682.      Press F1 for help when using QF's Buffer List.
  683.  
  684.    - <Enter> = Edit
  685.      To make a file the current edit buffer, hilite it and press <Enter>.
  686.  
  687.    - <Ctrl C>, <F10> = Close File & Remove from Ring
  688.      Delete the current file from the TSE buffer ring by pressing either
  689.      <Ctrl C>, <F10>.  If the file has been modified, you are asked
  690.      whether to save the changes or not before closing.
  691.  
  692.    - <Ctrl W>, <Ctrl Enter> = Write Changes
  693.      Save the changes to a buffer by pressing <Ctrl W> or <Ctrl Enter>
  694.      on the selected file.  Notice that the "*" is immediately removed,
  695.      indicating that the file no longer needs to be saved.
  696.  
  697. If a QF Project is open, the QF Buffer List displays a separate list
  698. of project files below the normal buffer list.  All project files are
  699. displayed, even if they are not currently in the TSE buffer ring.
  700. Project files not in the ring are listed in parenthesis.
  701.  
  702. In the following example, CONFIG.SYS is in the TSE ring but AUTOEXEC.BAT
  703. is not, although both are part of the SYSTEM project.  WIN.INI is also
  704. loaded in the TSE ring (and has been modified) but is *NOT* part of the
  705. project:
  706.  
  707.    ┌───────────────────── QF Buffer List ──────────────────────┐
  708.    │* WIN.INI        c:\windows\                               │
  709.    ├───────────────────── Project SYSTEM ──────────────────────┤
  710.    │ (AUTOEXEC.BAT)  c:\                                       │
  711.    │  CONFIG.SYS     c:\                                       │
  712.    └───── ENTER: Edit  F10: Close  ESC: Cancel  F1: Help ──────┘
  713.  
  714.  
  715. In addition to the keys listed above, the following keys are defined if
  716. a QF Project is open:
  717.  
  718.    - <Ins> = Insert into Project
  719.      Additions may be made to a project with this function.  When a
  720.      non-project file is hilited, press <Ins> to immediately add it to
  721.      the project list.  From then on, the selected file will be loaded
  722.      as part of the project.
  723.  
  724.    - <Del> = Delete from Project
  725.      To remove a file from the current project, hilite the project file
  726.      to remove and press <Del>.  The file is then moved to the upper
  727.      window of the QF Buffer List window and out of the project list.
  728.  
  729.    - <TAB> = Switch Windows
  730.      Quickly switch between the upper and lower halves of the Buffer
  731.      List window with the <TAB> key.
  732.  
  733.  
  734. ■ Screen Generator  (through the menu system Alt /)
  735.  
  736. The Quiet Flight Screen Generator lets you mock up a screen and let
  737. QF take care of generating the coordinates for the text.  For example,
  738. the following text:
  739.  
  740.          Full Name: ~name       City: ~city
  741.                                State: ~st
  742.  
  743. was converted to this FoxPro/dBASE IV code:
  744.  
  745.    *** Screen Generated by Quiet Flight on 08/03/93 @ 03:25 pm
  746.    DEFINE WINDOW Sample FROM 17, 6 TO 20, 43
  747.    @ 0, 2 SAY "Full Name:"
  748.    @ 0, 13 GET name
  749.    @ 0, 25 SAY "City:"
  750.    @ 0, 31 GET city
  751.    @ 1, 24 SAY "State:"
  752.    @ 1, 31 GET st
  753.    *** End of Quiet Flight Screen Code
  754.  
  755. To use the QF Screen Generator, first draw your screen within TSE.
  756. Text that should simply be displayed can be typed as-is.  For
  757. dBASE code--or any language that supports GET-type statements--put
  758. a tilde (~) preceding any GET variables.
  759.  
  760. When you get it exactly how you like it, scroll the TSE window so that
  761. the text begins at a position relative to the upper/left window border
  762. of where you want your generated window coordinates to be. Then, use a
  763. column block to draw a simulated "window" around the text.  Finally,
  764. execute the Screen Generator macro to generate the code.
  765.  
  766.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  767.     │ If you use a line block rather than a column block to mark     │
  768.     │ the text, the window definition code will not be generated.    │
  769.     └────────────────────────────────────────────────────────────────┘
  770.  
  771. You will need to experiment with the Screen Generator to determine
  772. the best spot to draw your text in order to achieve the coordinates
  773. you desire.
  774.  
  775.  
  776. -Configuring Screen Generator-
  777.  
  778. The Quiet Flight Screen Generator may be adapted for use in any language
  779. through simple modifications of the QF.CFG file.  The Screen Generator comes
  780. pre-configured for use with these file extensions: .PRG (dBASE program files)
  781. and .S (SAL macros).
  782.  
  783. Below is a list and description of [GENSCR] section keynames which must
  784. be modified in order to adapt the Screen Generator to a new language
  785. or for your personal preferences:
  786.  
  787.    - BaseOne
  788.      ON  = screen row/column coordinates start at base position 1
  789.      OFF = coordinates are base 0
  790.  
  791.    - PreCode
  792.      Code to generate before the window coordinates or @ SAY/GETS.
  793.      Full macro expansion is enabled.
  794.  
  795.    - Window
  796.      Code to define the window name & coordinates.
  797.  
  798.    - GET
  799.      Code to generate for each and every GET-type statement
  800.  
  801.    - SAY
  802.      Code to generate for each and every SAY-type statement
  803.  
  804.    - PostCode
  805.      Code to generate after everything else.
  806.  
  807. The following internal keywords are also defined:
  808.  
  809.    ##WINTOP##     = Upper row coordinate of marked window
  810.    ##WINLEFT##    = Upper column coordinate of marked window
  811.    ##WINBOTTOM##  = Lower row coordinate of marked window
  812.    ##WINRIGHT##   = Lower column coordinate of marked window
  813.    ##ROW##        = Current Row relative to the window
  814.    ##COL##        = Current Column relative to the window
  815.  
  816.  
  817. It is recommended that you try modifying one of the current [GENSCR]
  818. templates rather than trying to write one from scratch.  The examples
  819. in QF.CFG are worth a thousand words.
  820.  
  821.  
  822. ■ New Header            <Ctrl N>
  823.  
  824. We know you know what program headers are.  That's why you have
  825. the capability of adding your own header to any file you edit. Just
  826. press Ctrl N.  Here's one installed in a PRG file.
  827.  
  828. * Program....: qf.prg
  829. * Version....: 1.01
  830. * Author.....: Randy Wallin
  831. * Date.......: August 4, 1993     Last Modified: 08/04/93 @ 11:40 pm
  832. * Notice.....: Copyright (c) 1993 COB System Designs, Inc., All Rights Reserved.
  833. * QFRestore..: »0,0«
  834. * Compiler...: FoxPro 2.5
  835. * Abstract...: qf.prg
  836. * Changes....:
  837.  
  838. We also know that you have a particular style of header that you like to
  839. use.  If you'll take a minute to look through the QF.CFG file, you'll
  840. find our example headers under HEADER.  You can modify them to your own
  841. specifications.
  842.  
  843. Here's the QF.CFG fragment that's responsible for creating our PRG
  844. headers:
  845.  
  846. HEADER={
  847. * Program....: ##FILE##
  848. * Version....: ##VERSION##
  849. * Author.....: ##NAME##
  850. * Date.......: ##FILEDATE##     Last Modified: ##DATE## @ ##TIME##
  851. * Notice.....: Copyright (c) ##YEAR## ##COMPANY##, All Rights Reserved.
  852. * QFRestore..: »0,0«
  853. * Compiler...: ##PRG_COMPILER##
  854. * Abstract...: ##FILE## ~
  855. * Changes....:
  856. }
  857.  
  858. Each of the keywords is surrounded by double pound signs (##).
  859. This is a list of the keywords used in this header:
  860.  
  861.   ##FILE##       = File Name + File Ext
  862.   ##VERSION##    = Version #
  863.   ##NAME##       = Author's Name
  864.   ##FILEDATE##   = IF this is an existing file - use the last date saved
  865.                    ELSE use DATESTR
  866.   ##DATE##       = Today's Date - 11/09/92
  867.   ##TIME##       = Current Time
  868.   ##DATESTR##    = Today's Date String - November 11, 1992
  869.   ##YEAR##       = Year (for Copyright usually)
  870.   ##COMPANY##    = Company name in Copyright.
  871.  
  872. ■ Edit New File         <Ctrl E>
  873.  
  874. Being a developer means that we work in many different directories
  875. during the day.  The standard Edit File prompt in TSE always assumes you
  876. want to edit a file in the startup directory.  The QF Edit New File will
  877. assume the directory of the currently edited code as well as the current
  878. extension.
  879.  
  880. -How we use QF's Edit New File-
  881.  
  882. I start up TSE in the C:\TSE sub-directory and edit files in several of
  883. my projects directories (c:\jli\admin, c:\dmi\service, c:\marlins\scout,
  884. etc.).  When I am editing SCOUT.PRG in MARLINS\SCOUT - when I press
  885. CTRL-E and type in TEAM - QF assumes I am looking for C:\MARLINS\SCOUT\
  886. TEAM.PRG.  When I am editing c:\JLI\ADMIN\USER.DOC and press CTRL-E and
  887. enter ADMIN - QF assumes I am attempting to edit C:\JLI\ADMIN\ADMIN.DOC.
  888.  
  889. ■ Kill Restore File     <Ctrl K>
  890.  
  891. There are many times when you start editing a file and realize that
  892. you need to go back to the original file (before modifications).
  893. Normally you have to quit the file (saying NO to save changes) and
  894. then re-load the original.  With Quiet Flight's Kill Restore macro,
  895. you just press the hotkey for Kill Restore (default <Ctrl K>).  After
  896. confirmation, the changes on the current file are killed, and the file
  897. is restored to its original state.
  898.  
  899.  
  900. -How We Use Kill Restore-
  901.  
  902. We run Microsoft Windows on all of our development machines, thus
  903. allowing us to load FoxPro in one session and TSE in another.  Sometimes
  904. we end up making a change to a .PRG within FoxPro while the file is
  905. still loaded in TSE.  To update the file in TSE with the changes made
  906. in FoxPro, we simply run Kill Restore.
  907.  
  908.  
  909. ■ Save All Modified     <Ctrl S>
  910.  
  911. Quiet Flight assigns to a single key the process of saving all files
  912. without exiting TSE.  Press <Ctrl S> and all *modified* files in
  913. the edit ring are saved.  The number of saved files is displayed on the
  914. TSE message line.
  915.  
  916. ■ Display File Info     <Alt F>
  917.  
  918. Display File Info shows on the message line relevant information about
  919. the current file being edited.  This includes:  full path, modification
  920. status, original file size (as stored on disk), file date and time.
  921.  
  922.  
  923. ■ Show Changed          <Ctrl 2>
  924.  
  925. Show Changed is a simple aide for documenting changes to your source
  926. code.  Pressing <Ctrl 2> inserts a comment at the cursor line which
  927. details the date a change was made.
  928.  
  929.    ** Changed on 11/30/92
  930.  
  931. By assigning this little comment to a single keystroke, you may be more
  932. likely to document the changes to your code.
  933.  
  934.  
  935. ■ Window Size           (via QF menu)
  936.  
  937. How many times have you had a block of text and needed to insert it in
  938. a Window?  After marking the area you want measured (we suggest a
  939. Column Block), invoke the Window Size macro (default <Alt S>).  The
  940. message line will then display the Window Size.
  941.  
  942. For example, let's find the coordinates necessary to enclose
  943. the following block of text (taken from TSE's manual) in a window:
  944.  
  945.    x
  946.      PARAMETER_TYPE is the type (INTEGER or STRING) of the identifier
  947.      which follows. If VAR prefixes the type, the parameter must be a
  948.      variable (as opposed to an expression or constant), which may
  949.      possibly be altered by the command.
  950.                                                                       x
  951.  
  952. Place the cursor on the (x) above the word PARAMETER_TYPE, then begin
  953. your column mark.  End your column mark where the lower right hand
  954. corner of the Window will be (the x to the right of the last
  955. sentence).
  956.  
  957. Press <Alt S> and note the message bar looks similar to the following:
  958.  
  959.    Current Block:  Rows, Cols 6,68 *OR* FROM 2,3 TO 7,70
  960.  
  961. The Rows, Columns are Physical Size of the block (6 x 68).  The
  962. information to the right of *OR* are the window coordinates (the
  963. window coordinates will vary depending on the position of the block
  964. relative the the top/left of the TSE window).  You would use these
  965. coordinates for your window definition.  For example:
  966.  
  967.    DEFINE WINDOW <WinName> FROM 2,3 TO 7,70
  968.  
  969.  
  970. ■ Screen Counter        <Alt 2>
  971.  
  972. The screen counter establishes the correct position of an unknown
  973. position relative to a known one.  For example, the code says:
  974.  
  975.    @ 12,30 SAY "Your Choice? " GET ans PICTURE [#]
  976.  
  977. Let's say you need another prompt--"Valid choices are 1-5"--to be
  978. positioned just past the GET statement.
  979.  
  980. Place the cursor on the "Y" in "Your", invoke the screen counter
  981. (default <Alt 2>), initialize the row as 12 and the column as 30. Move
  982. your cursor key to position it where you want the coordinates and
  983. press the ESC key.
  984.  
  985. In this case, the column number would be 46.
  986.  
  987. Now you can add:
  988.  
  989. @ 12,46 SAY "Valid choices are 1-5"
  990.  
  991. You may use all the directional keys to get to the exact location for
  992. the coordinates.
  993.  
  994.  
  995. ■ Special Keys
  996.  
  997.    - To help keep you out of trouble with mismatched braces, quotes, and
  998.      parenthesis, Quiet Flight enters them as a pair.  When you enter (,
  999.      [, ", or { you will automatically get the closing ), ], ", or }.
  1000.  
  1001.    - <Spacebar> activates the QF Shorthand facility when the cursor is
  1002.      positioned immediately following the first word on a line.  To
  1003.      expand an abbreviation which is not the first word on a line, press
  1004.      <Alt Backspace>. QF always looks for an abbreviation immediately to
  1005.      the left of the cursor.
  1006.  
  1007.  
  1008. ■ Shorthand Abbreviations
  1009.  
  1010. QF.CFG is Quiet Flight's configuration file.  It should be
  1011. located in your QFPATH sub-directory.
  1012.  
  1013. Within QF.CFG you will find a place for your abbreviations, a
  1014. very powerful extension for all your programming.
  1015.  
  1016. For instance, in an xBase program file, on a new line you type in
  1017. the following:
  1018.  
  1019.    dow <Spacebar>
  1020.  
  1021. You are then prompted for the expression.  You enter:
  1022.  
  1023.    nLine=ROW()
  1024.  
  1025. The "dow" line is replaced with
  1026.  
  1027.   DO WHILE nLine=ROW()
  1028.      _ <-- this is where your cursor will be waiting for further input
  1029.   ENDDO &&* nLine=ROW()
  1030.  
  1031. You can create your own abbreviations.  They can be inline
  1032. abbreviations ( ie ACW(space) -> ACTIVATE WINDOW ) or full code
  1033. blocks, like DOW above.
  1034.  
  1035. The configuration file is setup in the following format:
  1036.  
  1037. [HEADER DESCRIPTION]
  1038. Configuration Items
  1039. Use the semicolon (;) to delimit comments
  1040.  
  1041.  
  1042. For example:
  1043.  
  1044. [EXPANSION=.SPR .PRG .MPR .QPR .FMT .CH]
  1045. ALS=ALLTRIM(STR(~))
  1046. DEW=DEACTIVATE WINDOW ~
  1047. OKL=ON KEY LABEL ~
  1048. PAR=PARAMETERS ~
  1049. PKC=PUSH KEY CLEAR
  1050. POK=POP KEY
  1051. PRI=PRIVATE ~
  1052.  
  1053. FOR={
  1054. FOR ##FOR Expression eg i=1 to 50##
  1055.     ~
  1056. ENDFOR &&* ##FOR Expression eg i=1 to 50##
  1057. }
  1058.  
  1059.  
  1060. Now, let's decipher this:
  1061.  
  1062. [EXPANSION=.SPR .PRG .MPR .QPR .FMT .CH]
  1063.  
  1064. The first line determines what file extensions will use the
  1065. following abbreviations.  In this case, we want it to be any file
  1066. with the extension of SPR, PRG, MPR, QPR, etc.
  1067.  
  1068. The subsequent lines determine what you'd like to happen when
  1069. you enter the abbreviation and press <Spacebar>.
  1070.  
  1071. ALS=ALLTRIM(STR(~))
  1072.                     QF will insert ALLTRIM(STR()) then place the
  1073.                     cursor where the tilde (~) is placed.
  1074.  
  1075. POK=POP KEY
  1076.                     QF will insert POP KEY when you type in POK
  1077.                     and press <Spacebar>
  1078.  
  1079.  
  1080. Now for the good stuff, the multi-line expansions:
  1081.  
  1082. FOR={
  1083. FOR ##FOR Expression eg i=1 to 50##
  1084.     ~
  1085. ENDFOR &&* ##FOR Expression eg i=1 to 50##
  1086. }
  1087.  
  1088. When you type in FOR<Spacebar> on a new line, you will be prompted
  1089. with "For Expression eg i=1 to 50" -- that's everything between
  1090. the double pound signs (##).
  1091.  
  1092. Type in your FOR expression and press <Enter>.  The expansion macro
  1093. will do the rest.  Let's say you enter i=1 to nCharacters, this is
  1094. the result.
  1095. FOR i=1 TO nCharacters
  1096.     - cursor would be waiting here
  1097. ENDFOR &&* i=1 TO nCharacters
  1098.  
  1099. Follow these steps to create your own abbreviations:
  1100.  
  1101.    1. Locate the EXPANSION file extension you want to place your
  1102.       abbreviations.  Or create a new [EXPANSION=<extensions>] section
  1103.       for extensions that are not already defined.
  1104.  
  1105.    2. Decide whether it will be a single or multi-line abbreviation.
  1106.  
  1107.       a. Single-Line Abbreviation
  1108.          The characters to the left of the equals sign determines
  1109.          the abbreviation--immediately followed by an equals sign (=),
  1110.          then the expansion phrase.  The following:
  1111.  
  1112.               STS=STORE STR() TO
  1113.  
  1114.          will insert "STORE STR() TO".
  1115.  
  1116.          If you add the tilde (~) between the parenthesis (), the
  1117.          cursor will return there after the expansion:
  1118.  
  1119.               STS=STORE STR(~) TO
  1120.  
  1121.       b. Multi-line Abbreviation
  1122.  
  1123.          Again, we have the first characters to the left of the equals
  1124.          to determine the abbreviation--immediately followed by =, then
  1125.          the open curly brace {.
  1126.  
  1127.          Here's an example:
  1128.  
  1129.             DON={
  1130.             DO WHILE .NOT. EOF()
  1131.                ~
  1132.             ENDDO &&* .NOT. EOF()
  1133.             }
  1134.  
  1135.           When you type in DON and press <Spacebar>, the DON will be
  1136.           replaced by the code block within the curly braces ({}).
  1137.  
  1138.           Now, to add "user" (that's you in this case) input, just
  1139.           add an Input Prompt, preceded by a dollar sign ($) and
  1140.           terminated with a period (.).
  1141.  
  1142.           Another example:
  1143.  
  1144.              DOW={
  1145.              DO WHILE ##Expression##
  1146.                 ~
  1147.              ENDDO &&* ##Expression##
  1148.              }
  1149.  
  1150.           The Input Prompt can be simple--like the one above--or more
  1151.           elaborate, like:  ##Your DO WHILE Expression, Sir##
  1152.  
  1153. There are several other special expressions you can add to
  1154. your keyboard expansion configuration file.
  1155.  
  1156.    1. If you place a variable within % (ie %VARIABLE%), Quiet
  1157.       Flight will grab that value from the DOS environment
  1158.       variable and insert it into your expansion.
  1159.  
  1160.       A simple example would be a multi-programmer shop, if each
  1161.       programmer sets their name up as a DOS environment variable
  1162.       (SET AUTHOR=STEVE), then %AUTHOR% would expand to STEVE.  On
  1163.       Patty's machine, AUTHOR would expand to PATTY.
  1164.  
  1165.    2. If you place your expansion variable in a $Variable^,
  1166.       QF will Hilite the variable, and delete it if a non-movement
  1167.       (cursor) key pressed.
  1168.  
  1169.       This is handy when you have a default answer but want the
  1170.       ability to change it on the fly.
  1171.  
  1172.          RVW=This code was reviewed by $Korie^
  1173.  
  1174.       When you expand RVW, Korie's name will be highlighted--if
  1175.       you press <Enter>, Korie's name remains.  Typing anything
  1176.       else will replace Korie's name with your input.
  1177.     
  1178.     ┌── QF TIP! ─────────────────────────────────────────────────────┐
  1179.     │  Use the Expansion Help (Ctrl F1) to bring up a list of your   │
  1180.     │  keyword expansion for the current file you are editing.       │
  1181.     └────────────────────────────────────────────────────────────────┘
  1182.  
  1183.  
  1184. dBASE/CLIPPER/FOXPRO MACROS
  1185. ══════════════════════════════════════════════════════════════════════
  1186.  
  1187. ■ Flow                  <Alt 3>
  1188.  
  1189. The Flow program will reindent and comment your source code to make
  1190. it more readable.  Features include:
  1191.  
  1192.    - Code indentation.  Reformat your .PRG files with proper
  1193.      indendation.  Handles FoxPro, dBase IV, and Clipper dialects.
  1194.  
  1195.    - Conditionals Commenting.  Puts same-line comments on all
  1196.      end-conditional statements.  For example, take the following
  1197.      code fragment:
  1198.                     DO WHILE !EOF()
  1199.                       .
  1200.                       .
  1201.                     ENDDO
  1202.  
  1203.      After processing by Flow it will look like this:
  1204.  
  1205.                     DO WHILE !EOF()
  1206.                       .
  1207.                       .
  1208.                     ENDDO && !EOF()    <-- notice the same-line comment
  1209.  
  1210.    - Error Checking.  Flow can verify that your code does not have
  1211.      mismatched conditional statements.  For example, you are notified if
  1212.      you have an ENDIF without a corresponding IF, or a DO without an
  1213.      ENDDO.
  1214.  
  1215.    - Full configuration.  You control the indentation level,
  1216.      whether to use tabs or spaces, the type of DO CASE and
  1217.      function indenting, and whether or not errors should be reported.
  1218.  
  1219.  
  1220. When invoked, Flow present a menu of actions and configuration
  1221. options. The first two options ("Procedure/Function" and "File") start
  1222. the Flow process. Select "Procedure/Function" to process the current
  1223. procedure or function the cursor is currently positioned in.  If you
  1224. are not positioned in a procedure/function, then Flow will start at
  1225. the beginning of the file and proceed until the start of a
  1226. procedure/function or end of file.
  1227.  
  1228. Select "File" to start processing an entire .PRG file.  Flow starts at
  1229. the beginning of the file and continues to the end, processing every
  1230. function and procedure along the way.
  1231.  
  1232. The rest of the options on the Flow menu are for configuration.  They
  1233. are detailed below:
  1234.  
  1235.    - Indentation:  Select this option to change the indentation level.
  1236.      For example, if you set it to 3, then three spaces will be
  1237.      inserted for each level of indentation.  If Hard Tabs (see below)
  1238.      is set to ON then this indentation level is ignored.
  1239.  
  1240.    - Function Indent:  If set to ON, code beneath a function/procedure
  1241.      is indented an additional one level.  If OFF, indentation starts
  1242.      at column 0.  The following procedure was "Flowed" with Function
  1243.      Indent OFF:
  1244.  
  1245.         PROCEDURE Hello
  1246.         PARAMETERS cMsg
  1247.  
  1248.         * Print out the message 10 times
  1249.         FOR i = 1 TO 10
  1250.            ? cMsg
  1251.         ENDFOR &&* i = 1 TO 10
  1252.  
  1253.         RETURN
  1254.  
  1255.      The same code fragment is shown with Function Indent ON:
  1256.  
  1257.         PROCEDURE Hello
  1258.            PARAMETERS cMsg
  1259.  
  1260.            * Print out the message 10 times
  1261.            FOR i = 1 TO 10
  1262.               ? cMsg
  1263.            ENDFOR &&* i = 1 TO 10
  1264.  
  1265.            RETURN
  1266.  
  1267.  
  1268.    - CASE Indent:  If you like the CASE statements beneath your DO CASE
  1269.      structures indented an extra level, set this option ON.  If you
  1270.      want your CASE statements to line up directly beneath the DO CASE,
  1271.      set it to OFF.  For example, code with CASE Indent set ON will look
  1272.      like this:
  1273.  
  1274.         DO CASE
  1275.            CASE x = 1
  1276.               ? "1"
  1277.            CASE x = 2
  1278.               ? "2"
  1279.         ENDCASE
  1280.  
  1281.      If CASE Indent is OFF, the same code would be formatted as follows:
  1282.  
  1283.         DO CASE
  1284.         CASE x = 1
  1285.            ? "1"
  1286.         CASE x = 2
  1287.            ? "2"
  1288.         ENDCASE
  1289.  
  1290.  
  1291.    - Error Check:  Flow will alert you of mismatched conditionals if you
  1292.      set this option ON.  Note that with this option turned ON, Flow
  1293.      will stop processing when an error is encountered.  With Error
  1294.      Check OFF, Flow ignores any errors.
  1295.  
  1296.    - Add Comments:  Conditional commenting is controlled with this
  1297.      option.  If you do not want Flow to override comments you have
  1298.      already put on the end conditional statement, make sure to turn
  1299.      this option OFF.
  1300.  
  1301.      The following IF/ENDIF fragment:
  1302.  
  1303.         IF cEditor == "TSE"
  1304.            WAIT WINDOW "You should be using Quiet Flight!"
  1305.         ENDIF
  1306.  
  1307.      will look like this after adding a conditional comment:
  1308.  
  1309.         IF cEditor == "TSE"
  1310.            WAIT WINDOW "You should be using Quiet Flight!"
  1311.         ENDIF && cEditor == "TSE"
  1312.  
  1313.    - Use Hard Tabs:  Set to ON if you want Flow to insert hard tabs
  1314.      rather than spaces for indentation.  This is a life-saver if you
  1315.      must work on someone else's code who did not use your preferences.
  1316.      Just run the all the .PRGs through Flow to change hard tabs to
  1317.      spaces, or vice-versa.
  1318.  
  1319.  
  1320. -How We Use Flow-
  1321.  
  1322. Flow is different than most pretty-printing programs in that you can run
  1323. it on a single procedure/function.  Combined with the fact the Flow is
  1324. blazingly FAST, running it on-the-fly is a snap. When our indenting gets
  1325. thrown off by adding or removing conditional statements, rather than
  1326. trying to re-indent the code by hand, we simply press two keys:  <Alt 3>
  1327. and <Enter>.  Voila!  The function is immediately re-indented.
  1328.  
  1329.  
  1330. -Configuring Flow-
  1331.  
  1332. The default options for Flow may be set in the QF.CFG file.  If you
  1333. look under the [FLOW] section in QF.CFG, you will see these options
  1334. (provided the default values have not been previously changed):
  1335.  
  1336.    - Indent=3
  1337.      Set this to the indentation level you wish to use.
  1338.  
  1339.    - MultiIndent=2
  1340.      Level to indent (beyond the current level) subsequent lines of
  1341.      code when a statement spans more than one line
  1342.  
  1343.    - FuncIndent=OFF
  1344.      ON  = Indent an additional level beneath function headers
  1345.      OFF = Start all indendation below header at column 0
  1346.  
  1347.    - CaseIndent=ON
  1348.      ON  = Indent an extra level beneath the DO CASE
  1349.      OFF = Indent CASE statements to same level as DO CASE
  1350.  
  1351.    - Errorcheck=ON
  1352.      ON  = Flag structural errors
  1353.      OFF = Ignore structural errors
  1354.  
  1355.    - Comment=ON
  1356.      ON  = Add conditional commenting
  1357.      OFF = No conditional commenting
  1358.  
  1359.    - CommentStr=&&*
  1360.      Specify a unique comment prefix to use for conditional comments
  1361.  
  1362.  
  1363. ■ Color Table           (via QF Menu Alt /)
  1364.  
  1365. Can you ever remember the cryptic dBASE color codes? The QF Color Table
  1366. eliminates the need to, letting you visually choose colors.  After invoking
  1367. the color table, use your cursor keys to move to the color you're
  1368. looking for.  Notice how the "Quiet Flight" heading changes to reflect
  1369. the current color.
  1370.  
  1371. Press the <B> key to toggle blinking colors on/off.
  1372.  
  1373. Press <Enter> to insert the color code into your current file.  For
  1374. example, suppose you have positioned the cursor on "Bright Cyan on Red"
  1375. and pressed <Enter>.  "BG+/R" will be inserted.
  1376.  
  1377. <Escape> will exit the QF Color Table without inserting the color code.
  1378.  
  1379.  
  1380.  
  1381. ■ DBF Structure         <Alt 7>
  1382.  
  1383. The DBF Structure macro of Quiet Flight allows you to examine the
  1384. structure of your database files "on the fly."  In addition, you can
  1385. build field lists and SQL Create Tables for insertion into your program
  1386. files.
  1387.  
  1388. When DBF Structure is invoked, a picklist of .DBF files is displayed.
  1389. Note that Quiet Flight goes to the directory of the current edit file
  1390. to retrieve database files.
  1391.  
  1392. ***VERY IMPORTANT***
  1393. The QFDBF.COM file included with Quiet Flight must be available in the
  1394. DOS path or DBF Structure will not work properly.
  1395.  
  1396.  
  1397. After selecting a database to view, a menu appears.  Each menu option is
  1398. detailed below:
  1399.  
  1400.    - Screen Output:  This option creates a file of the database
  1401.      structure and displays it in a new horizontal window.  The name of
  1402.      the structure file is <filename>.LST, where <filename> is the name
  1403.      of the .DBF file.
  1404.  
  1405.      The .LST file is not saved to disk unless you explicitly instruct
  1406.      TSE to do so.
  1407.  
  1408.    - Printer Output:  Quiet Flight will send the database structure
  1409.      immediately to the printer when this option is selected.
  1410.  
  1411.    - Build Field List:  Select this option to build a comma-delimited
  1412.      field list within the current file.  The database structure is
  1413.      shown in a pop-up window where you can tag the fields to include in
  1414.      this list.  Press <Spacebar> to toggle tagged fields on and off.
  1415.      <Enter> will begin the insertion of the selected fields at the
  1416.      cursor position, while <Esc> cancels the operation.
  1417.  
  1418.      For example, suppose you want to scatter selected fields.  You
  1419.      would first type the following in your .PRG file:
  1420.  
  1421.         SCATTER FIELDS
  1422.  
  1423.      Then, press <Alt 7> to bring up the DBF Structure program, and
  1424.      select "Build Field List".  Tag the fields you want to scatter and
  1425.      press <Enter>.  If these fields were LASTNAME, FIRSTNAME, and CITY,
  1426.      your code will now read:
  1427.  
  1428.         SCATTER FIELDS LASTNAME, FIRSTNAME, CITY
  1429.  
  1430.      The fields will always be inserted into the file, regardless of the
  1431.      insert/overwrite mode.  Long field lists will be broken at column
  1432.      80 with a semi-colon for easier reading.
  1433.  
  1434.    - Build SQL Table:  Building an SQL table operates like the "Build
  1435.      Field List" option up to the point where you press <Enter>.  After
  1436.      tagging the fields and pressing <Enter>, you will be prompted for a
  1437.      table name.  Quiet Flight will generate the code for a CREATE TABLE
  1438.      using the tagged fields and the table name specified.
  1439.  
  1440.      Suppose we tag the fields LASTNAME, FIRSTNAME, and CITY.  If we
  1441.      name our table "Accounts", the resulting output will be:
  1442.  
  1443.         CREATE TABLE Accounts ;
  1444.            (Lastname   C(30), ;
  1445.             Firstname  C(30), ;
  1446.             City       C(25))
  1447.  
  1448.  
  1449. ■ Index Key Lister        <Alt 6>
  1450.  
  1451.     This macro gives you a listing of your index keys.  It doesn't matter
  1452.     if they are FoxPro, dBase (II,III,IV) or Clipper - QF index macro will
  1453.     work for you.
  1454.  
  1455.     After you press Alt-6 or choose Index Key Lister from the QF Menu, you
  1456.     will be prompted for the location of the index files.
  1457.  
  1458.     Then you will be asked if you would like to process either all the
  1459.     indexes (Full Listing) or just one(Partial).  If you choose Partial
  1460.     you will have the opportunity to pick the index you would like a
  1461.     report on.
  1462.  
  1463.     ┌ Process All or one? ┐
  1464.     │ Full Listing        │
  1465.     │ Partial             │
  1466.     │ Cancel              │
  1467.     └─────────────────────┘
  1468.  
  1469.     The next popup will look like this:
  1470.  
  1471.     ┌──────────────────────┐
  1472.     │ Screen Output        │
  1473.     │ Printer Output       │
  1474.     │ Build Index Key List │
  1475.     ├──────────────────────┤
  1476.     │ Cancel               │
  1477.     └──────────────────────┘
  1478.  
  1479.      Choosing Screen Output will split the screen and load a listing like
  1480.      this:
  1481.  
  1482.       ALTADDR.CDX (FoxPro)
  1483.          Index tag: TRACKID   Key: TRACKID+IIF(CURRENT,"0","1")
  1484.          For: .NOT.DELETED()
  1485.  
  1486.       EMPLOYEE.MDX (dBASE IV)
  1487.          Index tag: CITY   Key: CITY
  1488.          Index tag: DEPT   Key: department+lastname+firstname+initial
  1489.          Index tag: EMP_ID   Key: emp_id
  1490.          Index tag: FIRSTNAME   Key: FIRSTNAME
  1491.          Index tag: NAMES   Key: lastname+firstname+initial
  1492.          Index tag: STATUS   Key: department+STR(salary,8,2)
  1493.          Index tag: YEARS   Key: STR(yrs_exper,4,1)
  1494.  
  1495.       CHECKREG.NDX (dBASE III)
  1496.          Key: Check_no
  1497.  
  1498.       If you had chosen Printer Output, the same screen would have been
  1499.       printed instead.
  1500.  
  1501.       The last choice, Build Index Key List is really something we use an
  1502.       awful lot.  It creates a key list that you could insert in your code.
  1503.       This is a sample of the code produced:
  1504.        *** ACTIVITY.CDX
  1505.        INDEX ON KIND TAG KIND OF ACTIVITY.CDX
  1506.        INDEX ON TRACKID TAG TRACKID OF ACTIVITY.CDX
  1507.        INDEX ON TRACKID+KIND+STR(VISITNUM)+PARCEL TAG VISITVIEW ;
  1508.              OF ACTIVITY.CDX
  1509.  
  1510.        *** ALTADDR.CDX
  1511.        INDEX ON TRACKID+IIF(CURRENT,"0","1") TAG TRACKID ;
  1512.              FOR .NOT.DELETED() OF ALTADDR.CDX
  1513.  
  1514.        *** BROKER.CDX
  1515.        INDEX ON BROKER TAG BROKER OF BROKER.CDX
  1516.        INDEX ON RTRIM(LASTNAME)+", "+FIRSTNAME ;
  1517.              TAG NAME OF BROKER.CDX
  1518.  
  1519.        *** CHECKLST.CDX
  1520.        INDEX ON LASTNAME TAG LASTNAME OF CHECKLST.CDX
  1521.  
  1522.        *** COMPANY.CDX
  1523.        INDEX ON COMPANY TAG COMPANY OF COMPANY.CDX
  1524.        INDEX ON COMPANYID TAG COMPANYID OF COMPANY.CDX
  1525.  
  1526.        *** DAILY.CDX
  1527.        INDEX ON DTOS(DAILY_DATE)+RTRIM(LASTNAME)+", "+FIRSTNAME ;
  1528.              TAG NAME OF DAILY.CDX
  1529.        INDEX ON DTOS(DAILY_DATE)+STR(DAILY_NUM,3) TAG NOTRANSFER ;
  1530.              FOR .NOT.TRANSFERED OF DAILY.CDX
  1531.        INDEX ON DTOS(DAILY_DATE)+SALESASSOC+RTRIM(LASTNAME)+;
  1532.              ", "+FIRSTNAME TAG SALESASSOC OF DAILY.CDX
  1533.        INDEX ON DTOS(DAILY_DATE)+STR(DAILY_NUM,3) ;
  1534.              TAG VISITNUM OF DAILY.CDX
  1535.  
  1536.        We think you'll agree, this is a very handy tool.
  1537.  
  1538.  
  1539.  
  1540. TECHNICAL SUPPORT
  1541. ══════════════════════════════════════════════════════════════════════
  1542.  
  1543. You may reach COB System Designs for technical support through the
  1544. following mediums:
  1545.  
  1546.    * SemWare BBS, Conference 5
  1547.      (404) 641-8968  1200/2400/9600
  1548.    
  1549.    * CIS     76557,1106
  1550.    
  1551.    * Mail  
  1552.      COB System Designs, Inc.
  1553.      206 South Hampton Drive
  1554.      Jupiter, Florida 33458-8111
  1555.  
  1556.   ╒══ REGISTERED USERS ONLY ═════════════════════════════════════════════╕
  1557.   │* FAX  (407) 744-9836                                                 │
  1558.   │                                                                      │
  1559.   │* Telephone, 8am - 5pm EST (Leave a message if we are not available)  │
  1560.   │  (407) 744-9835                                                      │
  1561.   ╘══════════════════════════════════════════════════════════════════════╛
  1562.  
  1563. All Products listed are trademarks of their respective companies.
  1564.