home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / PCTAG.ZIP / PCTAGS.DOC < prev    next >
Text File  |  1989-10-01  |  158KB  |  3,220 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.                                     PC-TAGS
  9.                                   User Manual
  10.  
  11.                                   Version 1.OO
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.                                 Steven Calwas
  32.                                Moderne Software
  33.                                 P.O. Box 3638
  34.                           Santa Clara, CA 95O55-3638
  35.  
  36.  
  37.                               _______
  38.                          ____|__     |               (tm)
  39.                       --|       |    |-------------------
  40.                         |   ____|__  |  Association of
  41.                         |  |       |_|  Shareware
  42.                         |__|   o   |    Professionals
  43.                       -----|   |   |---------------------
  44.                            |___|___|    MEMBER
  45.  
  46.  
  47.  
  48.  
  49.                               Copyright (C) 1989
  50.                               by Moderne Software
  51.                               All rights reserved
  52.  
  53.  
  54.           PC-TAGS, PCTAGS and RETRO are trademarks of Moderne Software.
  55.                 Other brand and product names are trademarks or
  56.                registered trademarks of their respective holders.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                Introduction
  64.                                ------------
  65.  
  66.    PC-TAGS(tm) is a DOS and OS/2 source-code retrieval system that will
  67. locate and retrieve a function or procedure definition from a text file
  68. written in C, Pascal, BASIC, dBASE, Assembly, Modula-2 or any other language
  69. (including English).  After locating the source file, PC-TAGS will load it
  70. into your editor and place the cursor at the retrieved function or
  71. procedure's beginning.
  72.  
  73.    PC-TAGS can be used in conjunction with any text editor or programming
  74. environment.  There is no need to change your current method of working.
  75. Further, if you use a MAKE facility or version-control system, PC-TAGS can
  76. be easily integrated into your current system.
  77.  
  78.    As an example of the functionality PC-TAGS provides, imagine you are in
  79. your favorite editor viewing a source file.  You see that your code calls a
  80. particular function, but you're not exactly sure what the function does.
  81. Simply place the cursor anywhere under the function's name and press a
  82. single key.  PC-TAGS will locate the source file that contains the function,
  83. load it into the editor and position the cursor at the function's beginning.
  84. If the source file had been stored in a version-control library, PC-TAGS
  85. would have extracted the file from the library before loading it into the
  86. editor.  You can now examine the function's code to determine exactly what
  87. it does.
  88.  
  89.    As previously mentioned, built into PC-TAGS is the capability to
  90. recognize function and procedure definitions written in the C, Pascal,
  91. BASIC, dBASE, Assembly and Modula-2 programming languages.  PC-TAGS will
  92. also recognize certain data structures, such as structures, records and
  93. macros, in some of the supported languages.  All existing compilers and
  94. interpreters that run under the DOS and OS/2 operating systems are
  95. supported.  This includes, but is not restricted to:
  96.  
  97.                 -- Borland Turbo C
  98.                 -- DeSmet DC88
  99.                 -- Ecosoft Eco-C88
  100.                 -- Lattice C
  101.                 -- Manx Aztec C
  102.                 -- Mark Williams C and Let's C
  103.                 -- MetaWare High C
  104.                 -- Microsoft C and QuickC
  105.                 -- Mix Power C
  106.                 -- Rational Systems Instant C
  107.                 -- Watcom C
  108.  
  109.                 -- Borland Turbo Pascal
  110.                 -- MetaWare Professional Pascal
  111.                 -- Microsoft Pascal and QuickPascal
  112.  
  113.                 -- Borland Turbo BASIC
  114.                 -- Microsoft BASIC and QuickBASIC
  115.  
  116.                 -- Ashton-Tate dBASE, all versions
  117.                 -- Fox Software FoxBASE+
  118.                 -- Nantucket Clipper
  119.                 -- All other dBASE clones
  120.  
  121.                 -- Jensen & Partners TopSpeed Modula-2
  122.                 -- Logitech Modula-2
  123.                 -- Stony Brook Modula-2 and QuickMod
  124.  
  125.                 -- Borland Turbo Assembler
  126.                 -- Microsoft Macro Assembler and QuickAssembler
  127.                 -- SLR Systems OPTASM Assembler
  128.  
  129.    Besides the languages built into PC-TAGS, other programming languages are
  130. supported indirectly.  Any line of an ASCII text file can be explicitly
  131. tagged by placing on it a comment containing the keyword "PCTAGS".  PC-TAGS
  132. will recognize those lines just as it recognizes the function definitions of
  133. the built-in languages.  Thus, PC-TAGS can be used with any programming
  134. language that supports comments.  Using the explicit tags, PC-TAGS can also
  135. be used to retrieve other types of information besides function definitions.
  136.  
  137.    When using PC-TAGS with source code files, it can extract files from any
  138. version control system available under DOS and OS/2.  This includes, but is
  139. not restricted to:
  140.  
  141.                 -- Burton Systems TLIB
  142.                 -- MKS RCS
  143.                 -- Polytron PVCS
  144.                 -- Quilt Computing SRMS
  145.                 -- Seidl Version Manager
  146.  
  147.    PC-TAGS will work with any editor, word processor or programing
  148. environment, such as Borland's Turbo and Microsoft's Quick environments.
  149. (From now on, references to "editor" include text editors, word processors,
  150. programming environments and all other types of application programs that
  151. allow the editing of ASCII files.)
  152.  
  153.    Editors that support a macro language can have the PC-TAGS retrieval
  154. operation incorporated into the editor as an extension.  Pre-written macros
  155. for the following editors are included as part of the PC-TAGS package:
  156.  
  157.                 -- American Cybernetics Multi-Edit
  158.                 -- Lugaru Software Ltd. Epsilon
  159.                 -- Magma Software Systems ME
  160.                 -- Mansfield Software Group KEDIT
  161.                 -- UnderWare, Inc. BRIEF
  162.  
  163.    PC-TAGS is distributed as shareware.  Each user is given the opportunity
  164. to evaluate the complete PC-TAGS software package for 30 days with no
  165. obligation.  After the evaluation period, if you find PC-TAGS to be a useful
  166. tool and wish to continue using it, you must register your copy with Moderne
  167. Software.
  168.  
  169.    PC-TAGS is distributed in three forms:
  170.  
  171.         -- An unregistered evaluation version which is distributed via
  172.         computer bulletin boards, disk distributors and user groups.
  173.         This version will run under the DOS operating system only.
  174.  
  175.         -- A registered version of PC-TAGS that will run under the DOS
  176.         operating system is available from Moderne Software when you
  177.         register the program.
  178.  
  179.         -- Also available is a registered version that will run under
  180.         both the DOS and OS/2 operating systems.  This version is only
  181.         available from Moderne Software by registering PC-TAGS.
  182.  
  183.    The unregistered version is fully-functional with no hidden or disabled
  184. features.  However, the unregistered version requires "special input" from
  185. the user during program operation that is not necessary in the registered
  186. versions.  This special input serves as a reminder to the user that the
  187. program is an unregistered evaluation copy and also as a prod to register.
  188.  
  189.    PC-TAGS registration is only $34.95 for the DOS version and $69.95 for
  190. the DOS-OS/2 version.  Quantity discounts are available for use by a
  191. commercial institution.  Refer to the LICENSE file for quantity discount
  192. schedules.
  193.  
  194.    A copy of the appropriate registered version will be sent to you upon
  195. receipt of your paid registration form.  A printed copy of the PC-TAGS
  196. manual is included as part of the registered versions.  Registration also
  197. entitles you to technical support and future releases at a reduced price.
  198. Considering the powerful functionality provided by PC-TAGS, this is an
  199. outstanding value.
  200.  
  201.    A PC-TAGS registration form is included in the file ORDERFRM.  Take the
  202. time to fill it out and return it.  If you would like high-quality software
  203. to continue to be made available on a try-first basis and for a reasonable
  204. cost, it is up to YOU to support such programs.  Please do.
  205.  
  206.  
  207.  
  208.                                Getting Started
  209.                                ---------------
  210.  
  211.    Using PC-TAGS is a two-step process:
  212.  
  213.         1) Creation of a diskfile containing information, or "tags," about
  214.         each function and procedure definition in a source-code file.  This
  215.         disk file is appropriately called a "tagfile."
  216.  
  217.         2) Retrieval of a specific function or procedure definition during
  218.         the editing process.
  219.  
  220.    For the sake of brevity, future uses of the word "function" will refer to
  221. both "function and procedure" unless stated otherwise.  PC-TAGS will also
  222. recognize and tag some data structures, such as typedefs, structs, records,
  223. objects and macros in some of the supported languages.  References to
  224. "function" will also refer to these data structures.  Information on the
  225. other recognized data structures is included later in this manual.
  226.  
  227.    The first step in the process, the creation of the tagfile, is performed
  228. by the PCTAGS.EXE program.  It scans through your source code files,
  229. extracting the function-definition information contained within.  This
  230. information is then stored in a disk tagfile.
  231.  
  232.    The tagfile is used later during the retrieval step.  The tagfile will be
  233. accessed to recall the tag information related to a particular definition.
  234. This information is then used to locate the function's source file and move
  235. to the line in the file where it is defined.
  236.  
  237.    Retrieval is done by the various RETRO programs.  Several different RETRO
  238. programs are provided in the PC-TAGS package.  The appropriate RETRO method
  239. you should use depends upon your text editor.  This will be discussed later
  240. in this manual.  Regardless of which editor you use, one of the versions of
  241. RETRO will work for you.
  242.  
  243.    PCTAGS and RETRO will NEVER modify your source files.  PCTAGS only reads
  244. through a file and never writes to it.  The only files modified by PCTAGS
  245. are the tagfiles which are then read by RETRO during the retrieval process.
  246. RETRO only reads tagfiles and never modifies them.
  247.  
  248.    The remainder of this manual will explain how to use the PCTAGS and RETRO
  249. programs to make your programming life a little easier.
  250.  
  251.  
  252.  
  253.                       Creating Tagfiles with PCTAGS.EXE
  254.                       ---------------------------------
  255.  
  256.    PCTAGS.EXE (from now on referred to as "PCTAGS") scans source code
  257. written in C, Pascal, BASIC, dBASE, Modula-2 and Assembly and extracts
  258. information about the function definitions contained in the file.  It is
  259. also possible to instruct PCTAGS to tag lines containing the "PCTAGS"
  260. keyword, thus allowing PCTAGS to process text files of any type.  This
  261. capability is explained later in this manual.
  262.  
  263.    Specifically, PCTAGS extracts three pieces of information for each
  264. function or keyword line:
  265.  
  266.                 1) the function name
  267.                 2) the file name, including drive and complete path
  268.                 3) the entire line on which the function is defined
  269.  
  270.    These pieces of information identify and tag a specific function and are
  271. therefore referred to as a "function tag."  Each function tag is written and
  272. saved to a disk "tagfile."  Tagfiles consist of one or more function tags.
  273.  
  274.    Tagfiles may contain function tags from one or more source files stored
  275. anywhere on your computer system.  For example, a single tagfile could be
  276. created which has all the function tags used for a particular program.  The
  277. source files for the program may be scattered over several directories and
  278. drives, but all the tag information can be combined in a single tagfile.
  279.  
  280.    Another approach would be to create a tagfile for each directory or
  281. library of source files.  Most significant programs are a combination of
  282. several libraries of routines.  For example, one library will contain all
  283. the window routines and another will have low-level operating system
  284. functions.  The source code files for each library are most likely stored in
  285. separate directories.  A separate tagfile can be created for each directory
  286. of routines.  Thus you would have a tagfile containing window function tags
  287. and another with the low-level tags.  During the function retrieval
  288. operation, both tagfiles can be searched for the desired function
  289. information.
  290.  
  291.    The organization of the tagfiles is entirely up to you.  PC-TAGS is very
  292. flexible and can be configured to work within your current file structure.
  293.  
  294.  
  295. Running PCTAGS
  296. --------------
  297.    The creation and maintenance of tagfiles is a very easy process.  Simply
  298. run the PCTAGS program and include on the command line the names of the
  299. source files PCTAGS should process.  Several command-line options are
  300. available to configure PCTAGS operation to something other than its default
  301. actions.
  302.  
  303.    The command-line syntax for PCTAGS is:
  304.  
  305.      PCTAGS [-global_options] srcfile [-options] [srcfile [-options] ...]
  306.  
  307.    Where:
  308.         "global_options" are instructions to PCTAGS on how to treat ALL of
  309.         the source files on the command line
  310.  
  311.         "srcfile" is a file specification, with optional drive and path, of
  312.         the source code file.  DOS wildcard characters are supported.
  313.  
  314.         "options" are instructions to PCTAGS on how to treat the source
  315.         file(s) to the left of the option.  These are equivalent to "local"
  316.         options and can be used to override a global option.
  317.  
  318.    If PCTAGS is invoked with no command line arguments, a usage message is
  319. displayed.
  320.  
  321.    The supported options and a discussion of global vs. local options are
  322. included a little later in this manual.
  323.  
  324.    In the unregistered version of PCTAGS, a random two-digit number will be
  325. displayed when PCTAGS first starts executing and again for every five source
  326. files it scans.  You must re-enter the displayed number in order for PCTAGS
  327. to continue its operation.  This user input is not required in the
  328. registered versions of PC-TAGS.  Its purposes are to remind you that you are
  329. running an unregistered evaluation version and to act as an impetus to
  330. register.  You can receive a registered version by sending your paid
  331. registration form contained in the file ORDERFRM to Moderne Software.
  332.  
  333.    In its simplest form, a command line to process the single file MAIN.C
  334. would be:
  335.  
  336.                 >PCTAGS main.c
  337.  
  338.    The above line instructs PCTAGS to scan the file MAIN.C and extract all
  339. function tag information from it.  PCTAGS does not alter the source file in
  340. any way; it simply accumulates tag information in its own internal tables.
  341. The tag information is then written to the default tagfile PCTAGS.TAG in the
  342. current directory of the current drive.  If PCTAGS.TAG does not already
  343. exist, it is created.  If the tagfile does already exist, it is "updated."
  344.  
  345.    Updating a tagfile is a three-step process.
  346.  
  347.            1) Remove from the tagfile all existing function tags
  348.            associated with the source file
  349.            2) Scan the source file, accumulating function tags
  350.            3) Append the function tags to the end of the tagfile
  351.  
  352.    During the update operation, any existing function tags associated with
  353. the currently-processed source file are removed from the tagfile.  For
  354. example, say the file MAIN.C contains code for a function called "main."
  355. Assume a previous run of PCTAGS extracted the tag information for "main" and
  356. stored it in the PCTAGS.TAG tagfile.  If PCTAGS processes MAIN.C a second
  357. time, the original "main" tag information is removed from the tagfile.  This
  358. is done to prevent multiple entries of a function tag from occurring in a
  359. tagfile and to eliminate potentially obsolete function tags.
  360.  
  361.    The updating of tagfiles allows you to modify tagfiles incrementally.
  362. When you change a single source file, it is only necessary to add the
  363. information for that file to the tagfile rather than recreate the entire
  364. tagfile over again.  This makes the maintenance of tagfiles quick and
  365. simple.
  366.  
  367.    Tagfile updating is done automatically by PCTAGS unless you explicitly
  368. tell it not to by specifying the -A option on the command line.  The -A
  369. option is explained in detail a little later in this manual.
  370.  
  371.    After any associated function tags are removed from the tagfile, PCTAGS
  372. scans the specified files and extracts tag information related to the
  373. functions defined in the files.
  374.  
  375.    Since each programming language defines its own syntax for declaring
  376. functions, PCTAGS must know the source language type in order to correctly
  377. process it.  PCTAGS examines the source file's file extension to determine
  378. the type of source language in the file.  The following file extensions are
  379. recognized:
  380.  
  381.                       .C      -- C source file
  382.                       .H      -- C source file
  383.                       .PAS    -- Pascal source file
  384.                       .BAS    -- BASIC source file
  385.                       .PRG    -- dBASE source file
  386.                       .MOD    -- Modula-2 source file
  387.                       .DEF    -- Modula-2 source file
  388.                       .ASM    -- Assembly source file
  389.  
  390.    If the source file has an extension other than one of the supported
  391. extensions, the source language type must be specified explicitly to PCTAGS
  392. via the -S command-line option, discussed later in this manual.
  393.  
  394.    PCTAGS will scan and recognize code which conforms to the syntactic
  395. definition of the processed language.  Source code containing syntax errors
  396. may result in incorrect identification of function definitions.  It is
  397. recommended that a source file be compiled and debugged until it does not
  398. contain any syntax errors before being sent through PCTAGS.
  399.  
  400.    As previously mentioned, the extracted tag information consists of the
  401. function's name, the complete file name, including drive and path, and a
  402. copy of the line on which the function is defined.  Additional information
  403. may be saved for each function tag depending on the options specified on the
  404. PCTAGS command line.
  405.  
  406.    Exactly what tag information PCTAGS accumulates is not important to the
  407. PCTAGS user.  It is not necessary for you to know what PCTAGS is extracting
  408. and saving.  You can safely think of PCTAGS as a program that produces
  409. output used only by the various RETRO programs.
  410.  
  411.    After scanning the source files and accumulating the function tags,
  412. PCTAGS writes the tag information to the end of the tagfile.  If the tagfile
  413. does not already exist, it is created.
  414.  
  415.    The format of the information stored in the tagfile is not important to
  416. the PCTAGS user.  For curious users, this information is documented in the
  417. "Tagfile Format" section of this manual.
  418.  
  419.    PCTAGS will accept more than one file name on its command line.  Multiple
  420. files can be specified and each may contain the standard DOS wildcard
  421. characters, '?' and '*'.  As examples, each of these command lines are
  422. valid:
  423.  
  424.                 >PCTAGS *.c e:\prog\src\*.c
  425.                 >PCTAGS prog?src.pas c:\pascal\*.pas
  426.                 >PCTAGS c:/prog/src/*.c c:\prog2\src\*.c
  427.  
  428.    In each of the above examples, PCTAGS will scan all the matching files
  429. and extract all their function tag information.  The original source files
  430. are not modified in any way.  The information accumulated by PCTAGS is then
  431. written to the PCTAGS.TAG tagfile.  The tagfile will be updated if it
  432. already existed when PCTAGS was run.  If each of the examples were run
  433. consecutively as shown above, PCTAGS.TAG would contain all the tag
  434. information for all the processed files.
  435.  
  436.    Notice from the last example that PCTAGS accepts both backslashes(\) and
  437. slashes(/) as a path separator.
  438.  
  439.  
  440. Explicit Tags
  441. -------------
  442.    In addition to function definitions, other items can be tagged by placing
  443. the keyword "PCTAGS" within the file.  Following the "PCTAGS" keyword must
  444. be the "tagname" by which the line will be retrieved.  For example, a line
  445. in a source file which defines a variable called "counter" will probably
  446. have the tag "PCTAGS counter."  The exact syntax of explicit tags is:
  447.  
  448.                                 PCTAGS tagname
  449.  
  450.    The "PCTAGS" keyword may be in upper or lower case.
  451.  
  452.    In most cases, explicit tags should be specified within a comment as
  453. defined in the file's source language.  While placing an explicit tag within
  454. a comment is not a requirement for PCTAGS, doing so is necessary to prevent
  455. confusion when the file is later processed by a compiler or interpreter.
  456.  
  457.    The following examples show explicit tags for a variety of languages.
  458.  
  459.          C:           int counter;            /* PCTAGS counter */
  460.          Pascal:      counter : INTEGER;      { PCTAGS counter }
  461.          BASIC:       DEFINT counter          ' PCTAGS counter
  462.          dBASE        PUBLIC total            && PCTAGS total
  463.          Modula-2:    counter : INTEGER;      (* PCTAGS counter *)
  464.          Assembly:    counter dw 0            ; PCTAGS counter
  465.          Cobol:       INITIALIZE_TAX_TABLE.   * PCTAGS INITIALIZE_TAX_TABLE
  466.          C++:         void ice::melt(){       // PCTAGS melt
  467.          Lisp:        (DEFUN LIBERATE         ; PCTAGS LIBERATE
  468.          Forth:       :ANARKEY CMD EDITOR     ( PCTAGS ANARKEY)
  469.          Prolog:      find_all:-              % PCTAGS find_all
  470.          ADA:         PROCEDURE test() is     -- PCTAGS test
  471.          English:     My Diary, Day 1         PCTAGS Day1
  472.          Corporate:   Quarterly Expenses ---- PCTAGS Q1Exps
  473.  
  474.    As the above examples show, explicit tags allow PCTAGS to support all
  475. programming languages and English text files, even corporate statements,
  476. which few would consider as English.
  477.  
  478.    When explicit tags are placed in a source file containing code in one of
  479. the built-in languages (C, Pascal, etc.), the file will usually need to be
  480. processed by PCTAGS twice; once to extract the function definitions and
  481. again to recognize the explicit tags.  But recall that PCTAGS will update
  482. the tagfile by first removing all tag references to the processed file.  To
  483. prevent the second pass from removing the tag information extracted by the
  484. first pass, it is necessary to repress the automatic-update operation during
  485. the second run.  This is easily done by specifying the -A option on the
  486. command line of the second pass.  The -A option is explained in further
  487. detail in the section on PCTAGS options.
  488.  
  489.    Once scanned and stored in the tagfile, explicit tag information is no
  490. different from the standard function tags.  During the retrieval operation,
  491. RETRO makes no distinction between function tags and explicit tags; they are
  492. exactly alike.
  493.  
  494.  
  495. Keep Your Tagfiles Up-to-Date
  496. -----------------------------
  497.    The information stored in the tagfiles is used by RETRO to retrieve a
  498. desired function definition.  It is important that the tag information
  499. accurately represent the current status of each function definition in each
  500. source file.  Obsolete tagfiles will cause the retrieval operation to fail.
  501.  
  502.    If function definitions are altered or moved to a different file, the
  503. tagfile must be updated.  If line numbers are stored in the tagfile instead
  504. of a copy of the definition line (explained in the -L option later in this
  505. manual), inserting or deleting a single line in a source file will often
  506. require the tagfile to be updated.
  507.  
  508.    Because PCTAGS automatically updates a tagfile, maintenance of tagfiles
  509. is not a costly or time-consuming task.  It is a good idea to get in the
  510. habit of sending your source files through PCTAGS whenever you modify them.
  511. PCTAGS is designed so that if you modify only one file of a 100-file
  512. program, only the modified file needs to be rescanned.  Thus, there is
  513. little reason to not keep your tagfiles up-to-date.
  514.  
  515.    When to perform tagfile maintenance depends upon your programming
  516. environment.  If you use a MAKE utility in your development cycle, a single
  517. line can be added which would update the tagfile for all modified source
  518. files.  Or a simple batch file can be created to do the updating.  If you
  519. employ a version-control system, the best time to update the tagfile would
  520. be when you enter the new version into the library.
  521.  
  522.    The important point is that necessary tagfile maintenance be performed on
  523. a regular basis.  The correct operation of the PC-TAGS system depends upon
  524. it.
  525.  
  526.  
  527. PCTAGS Options
  528. --------------
  529.    So far we have discussed only the default operation of PCTAGS.  Several
  530. options are provided which can be used to alter the default PCTAGS actions.
  531.  
  532.    A PCTAGS option is prefaced by a dash(-) character.  The option itself
  533. may be specified in upper or lower case.  All options are single characters,
  534. however, some require an additional argument which must appear immediately
  535. after the option with no spaces between them.  More than one option can be
  536. specified on a command line.  They may appear in any order, but each option
  537. must be separated from the others by at least one space.
  538.  
  539.    PCTAGS supports two types of options: global and local.  Global options
  540. bind to all the source files specified on the command line.  Global options
  541. must be specified on the PCTAGS command line before the first source file
  542. name.
  543.  
  544.    In the example below, -V is a global option bound to both FILE1.C and
  545. FILE2.C.
  546.  
  547.                         PCTAGS -v file1.c file2.c
  548.  
  549.    Local options bind to a single source file or, if wildcard characters are
  550. used, to a single group of source files.  Local options are specified
  551. immediately after the source file specification to which they refer.
  552.  
  553.    Here is a command line which is equivalent to the example above, but
  554. which uses local options instead:
  555.  
  556.                         PCTAGS file1.c -v file2.c -v
  557.  
  558.    Local options can be used to override a global option, as shown in this
  559. example:
  560.  
  561.                 PCTAGS -ttagmain *.c *.asm c:\lib\*.c -tlib.tag
  562.  
  563.    In the example above, the tag information for the files "*.c" and "*.asm"
  564. are written to a tagfile called "tagmain."  However, the tagfile "lib.tag"
  565. will receive the function tags from the files "c:\lib\*.c."
  566.  
  567.    All the supported options may be used as either global or local options.
  568. In other words, there are no options which can only be used as global
  569. options or which can only be used as local.
  570.  
  571.    In addition to being specified on the command line, global options may
  572. also be stored in an environment variable called "PCTAGS."  Options assigned
  573. to the PCTAGS environment variable are always interpreted as global options.
  574. They will be processed by the PCTAGS program before any command-line global
  575. options.  If conflicting options are specified in the PCTAGS environment
  576. variable and on the command line (such as specifying two different tagfile
  577. names), the command line options will override those from the environment.
  578.  
  579.    As an example, if the following PCTAGS environment variable is defined:
  580.  
  581.                 SET PCTAGS=-v -tc:\tagfiles\prog1.tag
  582.  
  583.    Then the command line:
  584.  
  585.                 PCTAGS *.c
  586.  
  587.    Will be processed as:
  588.  
  589.                 PCTAGS -v -tc:\tagfiles\prog1.tag *.c
  590.  
  591.    The PCTAGS environment variable provides a convenient location to specify
  592. global options which will be common to all or most invocations of the
  593. PCTAGS program.
  594.  
  595.    The remainder of this section describes the supported options.
  596.  
  597.  
  598. Repressing Automatic Update
  599. ---------------------------
  600.  
  601.    -A           -- Append tag information to tagfile.  No automatic update.
  602.  
  603.    As discussed in the section on PCTAGS operation, all old tag information
  604. associated with the processed file is normally removed from the tagfile to
  605. prevent the creation of duplicate and obsolete tag entries.  A few
  606. situations exist where this automatic updating is not desirable.
  607.  
  608.    For example, a source file may have to be scanned twice by PCTAGS to
  609. extract all its tag information.  This will occur when there are explicitly-
  610. tagged lines in the file in addition to the normal function definitions.
  611. For both types of tag information to be extracted and written to the
  612. tagfile, PCTAGS must process the file twice.  Normally, the second run of
  613. PCTAGS would cause the removal of the function tags extracted during the
  614. first run.  To prevent this from happening, specify the -A option on the
  615. command line for the second run of PCTAGS.  This is shown in the following
  616. command line:
  617.  
  618.                        >PCTAGS file.c file.c -A -SE
  619.  
  620.    In the above command line, the first processing of FILE.C will extract
  621. the C function definitions and add them to the tagfile, removing during the
  622. update process all tags that previously existed in the tagfile.  The second
  623. processing will not perform the update operation because the -A local option
  624. is specified.  The second time through FILE.C, PCTAGS will extract tag
  625. information for each explicitly-tagged line.  This is due to the -SE option.
  626.  
  627.    More information on processing explicitly-tagged files can be found in
  628. the discussion of the -S option.
  629.  
  630.  
  631. Retrieve Source File from Version-Control Library
  632. -------------------------------------------------
  633.  
  634.    -E           -- Execute RETROEXEC environment variable during retrieval
  635.  
  636.    Part of the tag information extracted from the source file and saved in
  637. the tagfile is the file's complete name, including drive and path.  The
  638. various RETRO programs require this name in order to retrieve the file.
  639.  
  640.    However, in many programming environments, this name will not always be
  641. valid because the file may eventually be stored in a version-control library
  642. or moved to a network file server.  In order for RETRO to locate such files,
  643. it must perform a special operation.  Basically, this special operation is a
  644. command that is assigned to an environment variable called RETROEXEC.  The
  645. RETROEXEC operation is explained in detail in the discussion of the RETRO
  646. programs later in this manual.
  647.  
  648.    RETRO will not perform its RETROEXEC retrieval operation unless it is
  649. "told" to do so by PCTAGS.  Communication between PCTAGS and RETRO is
  650. accomplished by PCTAGS embedding a special instruction among the tag
  651. information written to the tagfile.  This instruction is then interpreted by
  652. RETRO during the retrieval operation.
  653.  
  654.    The -E option instructs PCTAGS to include its special RETROEXEC
  655. instruction to the tag information accumulated for the current source file.
  656.  
  657.    If the file PCTAGS is processing will be moved or its name changed
  658. between the time PCTAGS scans it and RETRO retrieves it, the -E option must
  659. be specified.  Failure to do so may prevent RETRO from finding the file.
  660.  
  661.    The exact operation RETRO performs when it receives this instruction is
  662. documented later in this manual.
  663.  
  664.  
  665. Storing Line Numbers in the Tagfile
  666. -----------------------------------
  667.  
  668.    -L           -- Store a function definition's line number in the tagfile
  669.  
  670.    One piece of tag information normally extracted by PCTAGS is a copy of
  671. the line containing the function definition.  This line is written to the
  672. tagfile and later used by RETRO to position the cursor at the beginning of
  673. the function.
  674.  
  675.    Alternatively, PCTAGS can be instructed to save the function definition's
  676. line number to the tagfile by specifying the -L option on the command line.
  677. The line number is saved instead of a copy of the line itself.  RETRO
  678. recognizes and supports either piece of information in its retrieval
  679. operation.
  680.  
  681.    Storing line numbers instead of line contents will make the resulting
  682. tagfiles smaller and PCTAGS and RETRO will execute slightly faster.
  683. However, you must relentlessly maintain the tagfiles so they never contain
  684. obsolete information.  Adding or deleting a single line of a source file can
  685. make the tag information for that file obsolete.
  686.  
  687.    Proper maintenance of tagfiles is important regardless of whether you
  688. store line numbers or lines themselves in the tagfile.  However, its
  689. importance is increased when using line numbers.
  690.  
  691.    In order to use line number information with the resident version of
  692. RETRO (explained later), your editor must provide a "goto-line"-type
  693. operation.  If your editor does not support a "goto-line" command, you
  694. should never run PCTAGS with the -L option.  For example, the Turbo
  695. environments do not supply such an operation, thus, they are not able to use
  696. the line-number information which would be stored by the -L option.
  697.  
  698.  
  699. Recognizing Nested Comments in C Source Files
  700. ---------------------------------------------
  701.  
  702.    -N           -- Source code contains nested comments (C source only)
  703.  
  704.    The standard definition of the C programming language does not allow
  705. nested comments.  However, some vendors of C compilers have extended the
  706. language definition to support the nesting of comments, as shown in this
  707. example:
  708.  
  709.                 /* Comment  /* nested comment */  Comment */
  710.  
  711.    By default, PCTAGS does not support nested comments in C source code.
  712. However, it will recognize nested comments if the -N option is specified on
  713. the command line.  If the processed source code contains nested comments
  714. like those depicted above, the -N option is required in order for PCTAGS to
  715. scan the file correctly.
  716.  
  717.    This option is only relevant when processing C source files.  The
  718. definitions for some of the other supported languages already support nested
  719. comments, for example, Modula-2 and Pascal.  The -N option is therefore
  720. unnecessary and ignored when processing any source language other than C.
  721.  
  722.  
  723. Removing Tag Information from Tagfiles
  724. --------------------------------------
  725.  
  726.    -R           -- Remove from tagfile all function tags for specified files
  727.  
  728.    Occasionally during the course of software development, source files are
  729. moved, merged or eliminated altogether.  When this occurs, it is necessary
  730. to update the tagfile by removing the tag information related to the
  731. obsolete source file.  This is easily done by running PCTAGS with the -R
  732. command-line option.  Include the names of the source files whose tag
  733. information should be removed from the tagfile.  Wildcard file
  734. specifications are not supported when using the -R option.
  735.  
  736.    As an example, the following line will remove from the PCTAGS.TAG tagfile
  737. all tags associated with the file SOURCE.PAS:
  738.  
  739.                         >PCTAGS -r source.pas
  740.  
  741.    The specified source files do not need to exist when removing tag
  742. references.
  743.  
  744.    Remember that the complete file name, including its drive and path, is
  745. stored in the tagfile.  If a complete name is not specified on the PCTAGS
  746. command line, one will be constructed using the current drive and path.
  747. This constructed file name is then used when searching the tagfile for
  748. function tags to remove.  If the original source file was processed in a
  749. location other than the current drive and directory, no function tags will
  750. be found for the file.  To prevent this from occurring, specify a complete
  751. file name with drive and path on the PCTAGS command line.
  752.  
  753.  
  754. Explicitly Specifying the Source Language
  755. -----------------------------------------
  756.  
  757.    -Sx          -- Source language
  758.  
  759.    For PCTAGS to accurately recognize function definitions, it must be aware
  760. of the file's source language.  It can often determine this on its own by
  761. examining the file name's extension.  PCTAGS recognizes the following
  762. extensions:
  763.  
  764.                         .C   -- C source file
  765.                         .H   -- C source file
  766.                         .PAS -- Pascal source file
  767.                         .BAS -- BASIC source file
  768.                         .PRG -- dBASE source file
  769.                         .MOD -- Modula-2 source file
  770.                         .DEF -- Modula-2 source file
  771.                         .ASM -- Assembly source file
  772.  
  773.    If one of these extensions is part of the scanned file's name, PCTAGS
  774. will assume the file is written in the associated source language and
  775. interpret its contents accordingly.
  776.  
  777.    If an unrecognized extension is used, PCTAGS must be told the source
  778. language explicitly via the -S option.
  779.  
  780.    The -S option is also needed when a recognized extension is used on a
  781. file containing source code written in a language other than what PCTAGS
  782. would expect.  Such a situation would occur if the file PROG.BAS contained
  783. assembly code.
  784.  
  785.    The -S option takes a required single-character modifier to identify the
  786. source language.  The modifier must be immediately after the -S option; no
  787. spaces may separate the option from the modifier.
  788.  
  789.    The supported modifiers are:
  790.  
  791.                         A -- Assembly language
  792.                         B -- BASIC language
  793.                         C -- C language
  794.                         D -- dBASE/Clipper/FoxBASE+ language
  795.                         E -- Explicitly-tagged file
  796.                         M -- Modula-2 language
  797.                         P -- Pascal language
  798.  
  799.    As an example, to inform PCTAGS that the file SOURCE.PSC contains Pascal
  800. source code, enter the following line:
  801.  
  802.                         >PCTAGS source.psc -sp
  803.  
  804.    Often when processing an explicitly-tagged file (-SE option), it will be
  805. the file's second time through PCTAGS.  For example, a source file may
  806. contain both function definitions and explicitly-tagged lines.  When
  807. processing a file for the second time, be sure to include the -A option so
  808. the function tags from the first run will be preserved.
  809.  
  810.    This is depicted in the following two commands.  The first command
  811. extracts the C function definitons and the second saves the explicitly-
  812. tagged lines.  The resulting tagfile will contain the information extracted
  813. from both runs.
  814.  
  815.                         >PCTAGS file.c
  816.                         >PCTAGS -se -a file.c
  817.  
  818.  
  819. Specifying a Tagfile Name
  820. -------------------------
  821.  
  822.    -Tfilename   -- Write tag information to "filename"
  823.  
  824.    PCTAGS usually writes the tag information it accumulates to a disk file
  825. called PCTAGS.TAG located in the current directory of the current drive.
  826. The tag information will be saved to a different file if the -T option is
  827. specified on the command line.
  828.  
  829.    Immediately after the -T option, include the name of the desired tagfile.
  830. No spaces should separate the -T from the tagfile name.  The tagfile name
  831. may contain a drive and path specification; it may not contain DOS wildcard
  832. characters.
  833.  
  834.    For example, to save the tag information in a file called PROG.TAG in the
  835. TAGFILES directory, enter:
  836.  
  837.                 >PCTAGS -t\tagfiles\prog.tag file.bas
  838.  
  839.  
  840. Display Verbose Output
  841. ----------------------
  842.  
  843.    -V           -- Display verbose output while scanning source files
  844.  
  845.    Normally, PCTAGS displays only the name of the source file it is
  846. processing.  If the -V option is specified, it will also display the name of
  847. each function definition and explicit tag it encounters.
  848.  
  849.  
  850.  
  851. PCTAGS and Source Code Considerations
  852. -------------------------------------
  853.    Great efforts have been made so that PCTAGS will recognize all valid
  854. function definitions in the supported languages.  If you ever discover a
  855. source file that PCTAGS cannot properly process, we want to know about it.
  856. Please send the offending source file or a sample file that exhibits the
  857. problem to us at Moderne Software.  We will do what we can to rectify the
  858. matter.
  859.  
  860.    There are some special considerations to be aware of in the way in which
  861. PCTAGS scans some of the supported source languages.
  862.  
  863. C Source Code
  864. -------------
  865.    PCTAGS will interpret C source code that is compatible with the ANSI and
  866. K&R standards.  This includes almost all of the C compilers available for
  867. the DOS and OS/2 operating systems.  PCTAGS will also recognize the language
  868. extensions added by some compiler venders, for example, Microsoft C and
  869. Turbo C, among others.
  870.  
  871.    In addition to recognizing and tagging all function definitions, PCTAGS
  872. will tag all non-local "typedef," "struct," "union" and "enum" definitions.
  873. Each of these data types is considered to be non-local if it is defined
  874. outside of a function.
  875.  
  876.    PCTAGS will not produce tags for items defined by in-line assembly code.
  877. If you wish such items tagged, it is best to do so with explicit tags.
  878.  
  879.    PCTAGS does not perform a preprocessing stage during its scanning
  880. operation.  Most preprocessor directives, like #include and #define, are
  881. completely ignored.  However, PCTAGS does recognize #if, #ifdef and #ifndef
  882. directives in a limited fashion.
  883.  
  884.    When a #if, #ifdef or #ifndef directive is encountered, PCTAGS scans and
  885. processes the code after it, extracting any function definitions or explicit
  886. tags, until either a #else or #elif is found.  All code between the #else or
  887. #elif up until the ending #endif is ignored.  If the #if(ndef) block does
  888. not contain a #else or #elif, the entire block is processed.  Nested
  889. #if(ndef) directives are recognized and processed accordingly.
  890.  
  891.    The following code segment will help to illustrate this situation.
  892.  
  893.                            #if 0
  894.                                 function_one(){}
  895.                            #else
  896.                                 function_two(){}
  897.                            #endif
  898.  
  899.    During processing, PCTAGS will scan the function_one declaration and save
  900. its related tag information.  The block of code after the #else directive
  901. will be ignored until the #endif is encountered.  Thus the function_two tag
  902. information will not be saved.
  903.  
  904.    Notice that all this occurs even though the #if directive evaluates to
  905. "false" (0).  PCTAGS does not evaluate the #if expression; it assumes that
  906. #if, #ifdef and #ifndef directives always evaluate to "true" and scans the
  907. blocks of code following them accordingly.
  908.  
  909.    Be aware that when C source code is scanned as an explicitly-tagged file
  910. (-SE option), the concept of preprocessor directives does not even exist.
  911. Thus, all of the following lines would get properly scanned and entered in
  912. the tagfile:
  913.  
  914.                #define inc(x)  ++x;       /* PCTAGS inc */
  915.  
  916.                #if
  917.                    ...code...             /* PCTAGS stage1 */
  918.                #else
  919.                    ...code...             /* PCTAGS stage2 */
  920.                #endif
  921.  
  922.    Massive efforts have been expended so that PCTAGS will recognize all
  923. valid function definitions.  However, the fact that PCTAGS does not
  924. interpret preprocessor directives means that some coding practices cannot be
  925. supported.  For example, the following constant definitions will hopelessly
  926. confuse PCTAGS:
  927.  
  928.                #define BEGIN {
  929.                #define END   }
  930.  
  931.    PCTAGS cannot handle this because curly braces are an integral part
  932. of a C function definition.  Since the preprocessor directives redefining
  933. the braces are ignored, PCTAGS has no idea that "BEGIN" and "END" refer to
  934. them.  Consequently, PCTAGS will not correctly identify the related function
  935. definitions.  If definitions of this type are used in your source code, they
  936. will have to be removed before PCTAGS will successfully scan them.
  937.  
  938.  
  939. Pascal Source Code
  940. ------------------
  941.    PCTAGS will process Pascal source code for any DOS and OS/2 Pascal
  942. compiler currently available.
  943.  
  944.    This includes Turbo Pascal 5.5 and Microsoft QuickPascal 1.0 with their
  945. object-oriented extensions.  When scanning Turbo Pascal 5.5 source code,
  946. "method," "constructor" and "destructor" definitions are extracted in
  947. addition to function and procedure definitions.
  948.  
  949.    PCTAGS will also tag all global RECORDs it encounters in the TYPE section
  950. of the source code.  RECORDs defined in the VAR section will not be
  951. recognized.  To be defined "globally," the RECORD must be defined in either
  952. the INTERFACE, UNIT or PROGRAM section of a source file.  RECORDs defined
  953. locally within a function or procedure are not tagged.
  954.  
  955.    In Turbo Pascal 5.5 and QuickPascal, all global OBJECTs are also tagged.
  956.  
  957.  
  958. BASIC Source Code
  959. -----------------
  960.    PCTAGS recognizes subroutine definitions which use any of the following
  961. forms of syntax:
  962.  
  963.                               FUNCTION name
  964.                               SUB name
  965.                               DEF FNname
  966.  
  967.    Most versions of BASIC will also allow a subroutine to be defined using
  968. an explicit line number.  PCTAGS will not recognize such subroutines.
  969. However, line-number subroutines can be entered into the tagfile by
  970. explicitly tagging them with the "PCTAGS" keyword.
  971.  
  972.    PCTAGS does not include the variable-type characters $, %, &, ! or #, as
  973. part of the function name.  If your source code contains function names that
  974. differ only by the variable-type character, the tagfile will contain a
  975. "double-entry" of seemingly-identical function names.  During the retrieval
  976. operation, RETRO will retrieve the first occurence of the identical function
  977. names.  Because of this anomaly, it is strongly recommended that function
  978. names be differentiated by something other than the type character.
  979.  
  980.  
  981. dBASE Source Code
  982. -----------------
  983.    PCTAGS recognizes functions, procedures and UDF's contained in source
  984. code written for any version of dBASE, Clipper and FoxBASE+ running under
  985. the DOS and OS/2 operating systems.  There are no idiosyncrasies to be aware
  986. of.
  987.  
  988.  
  989. Modula-2 Source Code
  990. --------------------
  991.    All known Modula-2 implementations for the DOS and OS/2 environments are
  992. supported by PCTAGS.
  993.  
  994.    In addition to recognizing all procedures, PCTAGS will tag any global
  995. RECORD definitions it encounters.  A RECORD is considered to be "global" if
  996. it is defined outside of any procedure.
  997.  
  998.  
  999. Assembly Source Code
  1000. --------------------
  1001.    PCTAGS recognizes the standard MASM syntax and the Turbo Assembler IDEAL
  1002. syntax of function definitions as shown below:
  1003.  
  1004.                                name PROC
  1005.                                PROC name
  1006.  
  1007.    DOS and OS/2 assemblers also support labels as valid places to which to
  1008. call, however, PCTAGS does not accumulate tag information for such labels.
  1009. Labels may be tagged by placing an explicit tag on the label's line.
  1010.  
  1011.                   label1:                 ; PCTAGS label1
  1012.  
  1013.    In addition to functions, PCTAGS recognizes and tags STRUC, RECORD,
  1014. UNION, LABEL and MACRO definitions.  (Notice that the LABEL assembler
  1015. directive is tagged, but labels such as those shown above are not.)
  1016.  
  1017.    PCTAGS fully recognizes the syntax of both the MASM and IDEAL modes
  1018. supported by the Turbo Assembler for the above-mentioned tag items.
  1019.  
  1020.    In order to support the creation of Turbo Pascal object-oriented method
  1021. implementations, Turbo Assembler v1.01 added a new syntax to method
  1022. definitions.  In Turbo Pascal, method syntax uses a period(.) to write
  1023. qualified identifiers.  In Turbo Assembler, an at-sign(@) is used instead of
  1024. the period.  The two examples below show equivalent method definitions for
  1025. Turbo Pascal and the Turbo Assembler:
  1026.  
  1027.                 PROCEDURE Thing.Init;       <--- Turbo Pascal Method
  1028.  
  1029.                 Thing@Init PROC FAR         <--- Turbo Assembler Method
  1030.  
  1031.    To maintain consistency among method definitions, PCTAGS changes the '@'
  1032. character in an assembly method to a '.' before writing the tag information
  1033. to the tagfile.  This will allow you to retrieve a method definition by
  1034. always using a period and you will not have to be aware of the method's
  1035. source language.  (Note: PCTAGS changes only the tagname stored in the
  1036. tagfile; it does not alter the source file in any way.)
  1037.  
  1038.  
  1039.  
  1040.                 Retrieving Function Definitions with RETRO
  1041.                 ------------------------------------------
  1042.  
  1043.    RETRO is a method used to retrieve functions and explicitly-tagged lines
  1044. during an editing session.  Executing RETRO from within most editors will
  1045. cause it to load the file which contains the desired item and position the
  1046. cursor at its beginning.
  1047.  
  1048.    RETRO provides several methods of retrieval: macro, resident (TSR) and
  1049. command-line.  Each of these methods shares much of the same functionality.
  1050. Often one method will serve your needs a majority of the time.  The
  1051. appropriate method to use will depend upon your editor and situation.
  1052.  
  1053.    Each of the three RETRO methods (macro, resident and command-line) are
  1054. discussed in detail in this chapter following a brief introduction.
  1055.  
  1056.    The macro retrieval method can be implemented on text editors that
  1057. support a macro extension language.  The macro method is the most desirable
  1058. approach because it provides the most powerful and seamless functionality.
  1059. The macro method fully supports the extraction of source files from version-
  1060. control libraries.
  1061.  
  1062.    Pre-written RETRO macros are provided as part of the PC-TAGS package for
  1063. the following editors:
  1064.  
  1065.                 -- BRIEF
  1066.                 -- Epsilon
  1067.                 -- KEDIT
  1068.                 -- ME (from Magma Software Systems, not Microsoft)
  1069.                 -- Multi-Edit
  1070.  
  1071.    If you use one of the above editors, it is recommended that you use the
  1072. supplied macro.  Instructions on how to compile and incorporate the macros
  1073. into their respective editors are described later in this section.
  1074.  
  1075.    If your editor contains a macro language, but a pre-written RETRO macro
  1076. is not included with PC-TAGS, you may either write your own RETRO macro or
  1077. you may use one of the other RETRO methods explained below.  If you decide
  1078. to write your own macro, the information contained in the section "Tagfile
  1079. Format" contains important information necessary for such a task.  The macro
  1080. source code for the supported editors should also prove useful.
  1081.  
  1082.    The resident method is supported by a TSR (Terminate-and-Stay-Resident)
  1083. version of RETRO (RETRO.COM).  The TSR RETRO can be popped-up at any time
  1084. from within a text editor.  It is capable of loading a source file into the
  1085. editor and positioning the cursor on a tagged line, automatically.
  1086. Alternatively, it can simply display information about a function, such as
  1087. its source file and the line number on which it's defined.
  1088.  
  1089.    The TSR RETRO provides much of the same functionality as the macro method
  1090. except it cannot extract source files from a version-control library.
  1091.  
  1092.    The command-line method is executed from the DOS command prompt.  This
  1093. differs from the macro and resident methods which are used from within an
  1094. editing session.  The command-line method is useful when using editors that
  1095. do not support the loading of multiple files.  Also, since the command-line
  1096. method is able to extract source files from version-control libraries, it
  1097. can be used in combination with the TSR RETRO to provide capabilities
  1098. similar to the macro method.
  1099.  
  1100.    As mentioned, there is much overlapping functionality between the three
  1101. retrieval methods.  This is required because one retrieval method will not
  1102. work with every editor in every situation.  The supplied RETRO methods
  1103. provide comprehensive retrieval capabilities.  By using one or a combination
  1104. of the three supported methods, RETRO can be used with any text editor
  1105. running under the DOS or OS/2 operating systems.
  1106.  
  1107.    Use of one retrieval method does not exclude the use of another.  In
  1108. fact, it is possible to use all three methods together.  Depending upon the
  1109. editor and the particular situation, one method may prove superior to the
  1110. others.  Making the appropriate choice of retrieval methods exhibits the
  1111. craftsmanship of the user.
  1112.  
  1113.    Because of the several retrieval methods and their overlapping
  1114. functionality, it may be confusing at first to remember the operations
  1115. supported by each method.  To reduce this confusion, the end of this
  1116. section contains a table which summarily depicts the functionality of each
  1117. retrieval method.
  1118.  
  1119.  
  1120. Common RETRO Operations
  1121. -----------------------
  1122.    Many of RETRO's features are available in all three retrieval methods:
  1123. macro, resident and command-line.  Most of these shared abilities are
  1124. discussed in this section.
  1125.  
  1126.    Although the command-line retrieval method shares many of the macro and
  1127. resident operations, its concept and method of usage differs dramatically.
  1128. These differences are substantial enough that combining the discussion of
  1129. the command-line method with the other retrieval methods would be
  1130. inappropriate.
  1131.  
  1132.    For this reason, the operations discussed in this section will
  1133. concentrate exclusively on the macro and resident methods, even though the
  1134. command-line method supports many of the same capabilities.  A section
  1135. dedicated to the command-line method will be included later in this manual.
  1136.  
  1137.    Unless specified otherwise, references to "RETRO" in this section refer
  1138. to the macro and resident versions.
  1139.  
  1140.    Once RETRO is installed, two new commands are available for execution:
  1141. "pctags_auto" and "pctags_prompt."  These commands will usually be assigned
  1142. to specific keys so that they may be invoked with a single key-press.  The
  1143. key assignments are user-configurable so you can assign the two new commands
  1144. to any keys that are most convenient for you.
  1145.  
  1146.    The "pctags_prompt" command will ask for the name of the function (or
  1147. explicit tag) you wish to retrieve.  Simply enter the desired name followed
  1148. by the <Enter> key and RETRO will begin its retrieval operation.  Tagnames
  1149. may contain any alphabetic(A-Z, a-z), numeric(0-9), underscore(_) or
  1150. period(.) characters.
  1151.  
  1152.    The "pctags_auto" command does not prompt for the tagname.  Instead, it
  1153. uses the word above the cursor as the tagname to use in its retrieval
  1154. operation.  This is obviously very convenient; pressing a single key will
  1155. pop the respective function definition onscreen instantly.
  1156.  
  1157.    Except for the method used to get the tagname, pctags_auto and
  1158. pctags_prompt are identical; they both use the exact same retrieval
  1159. procedure.  For the rest of this section, references to RETRO will refer to
  1160. both commands.
  1161.  
  1162.    Extensive knowledge of the internal workings of the retrieval operation
  1163. is not necessary.  However, certain aspects of the retrieval procedure are
  1164. configurable and may affect the outcome of the operation.  These aspects
  1165. will be discussed in detail here.  Curious users interested in the finer
  1166. details of RETRO can examine the source code for the RETRO macros.
  1167.  
  1168.    After getting the tagname it is to retrieve, one of the first things
  1169. RETRO does is search through the tagfile(s) created by PCTAGS.  It scans the
  1170. tagfiles attempting to locate additional tag information associated with the
  1171. specified tagname.
  1172.  
  1173.    By default, RETRO searches through all the files with a ".TAG" extension
  1174. in the current directory of the current drive.
  1175.  
  1176.    RETRO can be directed to search other tagfiles by defining an environment
  1177. variable called "RETRO."  The RETRO environment variable should be assigned
  1178. the complete file specifications of the tagfiles you wish the RETRO program
  1179. to search.  The file specifications may contain DOS wildcard characters.
  1180. Multiple file specifications can be included by separating each spec with a
  1181. semicolon(;) character.
  1182.  
  1183.    As a simple example, defining the following environment variable will
  1184. instruct RETRO to search the single tagfile C:\PCTAGS\TAGFILES\PROG1.TAG:
  1185.  
  1186.                 SET RETRO=c:\pctags\tagfiles\prog1.tag
  1187.  
  1188.    This next example demonstrates how to inform RETRO to search all the
  1189. files having a .TAG extension in the C:\TAGS and D:\MORETAGS directories:
  1190.  
  1191.                 SET RETRO=c:\tags\*.tag;d:\moretags\*.tag
  1192.  
  1193.    If you want RETRO to search all the files in the current directory with a
  1194. TAG extension and all the files in the \PCTAGS\TAGFILES directory:
  1195.  
  1196.                 SET RETRO=*.tag;\pctags\tagfiles\*.*
  1197.  
  1198.    Notice that specifying the drive and path are optional, but the filename
  1199. is required at all times.  The following RETRO definition is not valid
  1200. because it does not include a file specification:
  1201.  
  1202.                 SET RETRO=c:\tagfiles      <---- Invalid setting
  1203.  
  1204.    When RETRO searches through a tagfile for a matching tagname, the search
  1205. performed is case-sensitive by default.  However, this can be modified so
  1206. RETRO will ignore case.  Changing the case sensitivity of the tagname search
  1207. is different for each of the RETRO retrieval methods.  Therefore,
  1208. instructions on doing so are described later in sections dedicated to each
  1209. RETRO method.
  1210.  
  1211.    As mentioned, RETRO will search all default or specified tagfiles until
  1212. it locates the tag information pertaining to the searched-for tagname.  If
  1213. all the tagfiles are searched and the tag information is not found, RETRO
  1214. cannot continue its operation.  It will display a message stating that the
  1215. tagname was not found and then terminate.
  1216.  
  1217.    If the correct tag information is found, RETRO uses it to locate the
  1218. tagname's source file.
  1219.  
  1220.    Recall from the discussion on PCTAGS that one piece of the extracted tag
  1221. information is the file's name.  RETRO retrieves that file name and then
  1222. attempts to load the file into the editor.  If the file exists, it will be
  1223. successfully loaded and RETRO will continue its operation.  (The TSR RETRO
  1224. has the option of only displaying the retrieved tag information onscreen and
  1225. not loading the file.)
  1226.  
  1227.    However, if the source file has been moved, renamed, stored in a version-
  1228. control library or its name and/or location otherwise been altered since it
  1229. was processed by PCTAGS, RETRO will not be able to find it.  At this point,
  1230. the TSR and macro versions of RETRO diverge along different paths.
  1231.  
  1232.    If the desired source file cannot be found in its original, PCTAGS-saved
  1233. location, the TSR RETRO will simply display a message stating that the file
  1234. could not be found and then terminate.
  1235.  
  1236.    The macro RETROs will do the same thing, unless the -E option was
  1237. specified on the PCTAGS command line when the source file was originally
  1238. processed.  Remember that the PCTAGS -E option embeds in the tagfile an
  1239. "instruction" to RETRO.  When RETRO cannot locate a source file, it looks to
  1240. see if that instruction is among the retrieved tag information.  If it is
  1241. not, RETRO will display the message saying it could not find the file and
  1242. then terminate.  If the instruction is present, RETRO will execute a
  1243. "special command" whose purpose is to make the source file available.
  1244.  
  1245.    This "special command" is multi-faceted and, since it is supported only
  1246. in the macro versions of RETRO (and in the command-line version), it is not
  1247. appropriate to discuss in detail here.  Suffice to say that the special
  1248. command's sole purpose is to do whatever is necessary to make available the
  1249. desired source file.  This could entail extracting the file from a version-
  1250. control library.  It is this special command that allows the PCTAGS system
  1251. to work in harmony with development systems which incorporate networks and
  1252. version-control libraries.  Details of the special command are explained in
  1253. the section "Macro-Specific RETRO Operations."
  1254.  
  1255.    Let's return to the common RETRO operations.
  1256.  
  1257.    If the file is successfully loaded into the editor, RETRO will use
  1258. additional information retrieved from the tagfile to locate the line in the
  1259. file where the tagname exists.  RETRO will place the cursor upon the tagged
  1260. line containing the desired function definition or explicit tag.  Its job
  1261. done, RETRO will then terminate.
  1262.  
  1263.  
  1264. Macro-Specific RETRO Operations
  1265. -------------------------------
  1266.    This section continues the discussion of the RETRO operation.  It
  1267. explains the operations that are available only in the macro versions of
  1268. RETRO.  The TSR RETRO is not capable of performing the tasks detailed in
  1269. this section.  However, the command-line method does support many of the
  1270. operations explained here.  More details about the TSR and command-line
  1271. RETROs are explained in subsequent sections.
  1272.  
  1273.    RETRO macros in source code form for the BRIEF, Epsilon, KEDIT, ME and
  1274. Multi-Edit editors are distributed as part of the PC-TAGS software package.
  1275. The source code for the RETRO macros is organized in the following files:
  1276.  
  1277.                    RETRO.M   -- BRIEF macro source
  1278.                    RETRO.E   -- Epsilon macro source
  1279.                    RETRO.KML -- KEDIT macro source
  1280.                    RETRO.    -- ME macro source
  1281.                    RETRO.SRC -- Multi-Edit macro source
  1282.  
  1283.    The source code for all RETRO macros is copyrighted material.  The
  1284. copyright owner, Moderne Software, gives limited permission to registered
  1285. PC-TAGS users to modify the source files for their own personal use only.
  1286. The RETRO macros may not be used, modified or distributed for any purpose
  1287. other than in conjunction with the PC-TAGS software package.
  1288.  
  1289.    Each RETRO macro provides identical functionality, thus they will be
  1290. explained together.  Any idiosyncrasies characteristic of only one of the
  1291. macros will be pointed out.
  1292.  
  1293.    Although functionally identical, the installation procedure necessary to
  1294. integrate a macro into its respective editor is different for each editor.
  1295. Special sections dedicated to a particular editor are contained later in
  1296. this manual to explain each editor's recommended RETRO installation
  1297. procedure.
  1298.  
  1299.    For the remainder of this section, references to "RETRO" will apply to
  1300. all macro versions of RETRO.  This section will also assume that RETRO has
  1301. already been installed into your editor and is available by pressing a
  1302. single keystroke.
  1303.  
  1304.    One of the main tasks RETRO performs is search through tagfiles for a
  1305. matching tagname.  By default, this search is case-sensitive.  However,
  1306. RETRO can be altered so that the search ignores a character's case.
  1307. Modifying the search operation is done by changing the initial value of one
  1308. of RETRO's variables.
  1309.  
  1310.    In the beginning of each macro (within the first 100 lines) are global
  1311. variable definitions.  The "pctags_tagname_case" variable determines the
  1312. case sensitivity of the tagname search.  As distributed by Moderne Software,
  1313. pctags_tagname_case is initialized to a value of "CASE_SENSITIVE."  Simply
  1314. change the initialization value to "CASE_INSENSITIVE."  If necessary, be
  1315. sure to compile the macro afterward so that the change can take effect.
  1316.  
  1317.    Another important operation RETRO performs is the retrieval of tag
  1318. information compiled by the PCTAGS program.  One piece of information is the
  1319. source file's name.  RETRO will attempt to load this source file into the
  1320. editor.  However, if the file has been moved, renamed or stored in a
  1321. version-control library since it was processed by PCTAGS, RETRO will not be
  1322. able to find the file.  The action RETRO performs at this point depends on
  1323. whether or not the -E option was specified on the PCTAGS command line when
  1324. the file was originally processed.
  1325.  
  1326.    Remember that the PCTAGS -E option embeds in the tagfile an "instruction"
  1327. to RETRO.  When RETRO cannot locate a source file, it looks to see if that
  1328. instruction is among the retrieved tag information.  If it is not (i.e. the
  1329. file was processed without the -E option), RETRO will display a message
  1330. stating that it could not find the file and then terminate.  If the
  1331. instruction is present (PCTAGS -E option specified), RETRO will execute a
  1332. "special command" whose purpose is to make the source file available.
  1333.  
  1334.    This "special command" is user-defined.  Making it user-defined allows
  1335. RETRO to support any kind of file organization and development system you
  1336. have set up, including version-control libraries.  The special command can
  1337. be any valid DOS command line, including execution of a batch file.
  1338.  
  1339.    The objective of the command (or batch file) is to perform whatever
  1340. actions are necessary to get the searched-for file into the directory where
  1341. RETRO expects to find it.  For example, if the file has been archived in a
  1342. version-control library, the command must extract the file.
  1343.  
  1344.    RETRO accesses the special command through an environment variable called
  1345. RETROEXEC.  You should define this variable and assign to it the command
  1346. line you wish executed.  As mentioned, the command can be any valid DOS
  1347. command line, complete with program arguments.
  1348.  
  1349.    Here is a simple example of a user-defined command which will execute a
  1350. batch file called GETFILE:
  1351.  
  1352.                           SET RETROEXEC=getfile
  1353.  
  1354.    When RETRO executes the RETROEXEC command, all the common DOS
  1355. characteristics are active.  In other words, RETRO will search for the
  1356. program in the current directory.  If the program is not found in the
  1357. current directory, the directories in the PATH environment variable are
  1358. searched.
  1359.  
  1360.    If the special command contains any of the DOS redirection characters
  1361. (e.g. '<' or '>'), the line must be bracketed with double quotation marks.
  1362. For example,
  1363.  
  1364.                        SET RETROEXEC="getfile >nul"
  1365.  
  1366.    The special program or batch file will most likely require information
  1367. about the file it is to retrieve, such as the file's name and location to
  1368. which it should be restored.  This information can be passed to the special
  1369. program in the form of command-line arguments.
  1370.  
  1371.    For example, a batch file could be created that extracts a file specified
  1372. on its command line from a version-control library.  Normal invocation of
  1373. the batch file from the DOS command prompt might look like this:
  1374.  
  1375.                            >getfile source.c
  1376.  
  1377.    The batch file GETFILE would access the SOURCE.C argument by using the
  1378. normal DOS batch-file arguments %1 through %9.
  1379.  
  1380.    This exact same command can be executed by RETRO by assigning the command
  1381. to the RETROEXEC environment variable.
  1382.  
  1383.                       SET RETROEXEC=getfile source.c
  1384.  
  1385.    The above RETROEXEC setting will work fine if RETRO will only be looking
  1386. for the file SOURCE.C all the time.  Realistically, the searched-for file
  1387. name will be different each time the special command is executed.  Such
  1388. variations require an interface that can support the processing of variable
  1389. data while the interface itself remains constant.
  1390.  
  1391.    RETRO provides several "string substitution markers" that can be used to
  1392. pass any required information from RETRO to the special program via its
  1393. command-line arguments.  Each marker consists of two characters, the first
  1394. of which is always a percent sign(%).  The second character identifies the
  1395. string that will be substituted for the marker.
  1396.  
  1397.    For example, the substitution string "%f" represents the searched-for
  1398. file name.  If "%f" is included in the RETROEXEC special command line, RETRO
  1399. will replace the marker with the name of the file for which it is currently
  1400. searching.  Any substitution is performed before the special command is
  1401. actually executed.  Thus, the following special command could be defined:
  1402.  
  1403.                         SET RETROEXEC=getfile %f
  1404.  
  1405.    Now when RETRO cannot find the SOURCE.C file, it goes to execute the
  1406. RETROEXEC command, but replaces the substitution marker so that the actual
  1407. command executed is:
  1408.  
  1409.                             getfile source.c
  1410.  
  1411.    Later, during a subsequent run of RETRO, if it cannot find the DATA.C
  1412. file, the executed command will be:
  1413.  
  1414.                              getfile data.c
  1415.  
  1416.    As can be seen, this method of passing information from RETRO to the
  1417. special command is flexible enough to handle any foreseeable situation.
  1418.  
  1419.    The supported substitution markers are described in the following list.
  1420.  
  1421.         %s      - The entire file specification of the searched-for file.
  1422.                   Includes "drive:\path\name"
  1423.  
  1424.         %d      - Drive of searched-for file.  No path or name.
  1425.  
  1426.         %p      - Path of searched-for file.  No drive or name.  When
  1427.                   combined with the %d marker, the resulting string is
  1428.                   suitable as an argument for the CD command within a batch
  1429.                   file.
  1430.  
  1431.         %f      - Name of searched-for file.  No drive or path.
  1432.  
  1433.         %c      - Current directory within the editor, including drive and
  1434.                   path.  The format is suitable as an argument for the CD
  1435.                   command within a batch file.
  1436.  
  1437.         %u      - User-defined substitution string.  RETRO will prompt for
  1438.                   the value of this marker each time the RETROEXEC special
  1439.                   command is executed.
  1440.  
  1441.         %%      - Single '%' character.
  1442.  
  1443.    All of these substitution markers are case-sensitive.  In other words, %D
  1444. is not the same as %d.
  1445.  
  1446.    Several RETROEXEC examples using the substitution markers are diagrammed
  1447. below.  They all assume that RETRO is searching for a file called
  1448. C:\SRC\INPUT.C and the current directory is D:\WORK.
  1449.  
  1450.               RETROEXEC value         Expanded command line
  1451.               ---------------         ---------------------
  1452.               get %s                  get c:\src\input.c
  1453.               get %f                  get input.c
  1454.               get %d %p %f            get c: \src input.c
  1455.               get %f %d%p             get input.c c:\src
  1456.               get %f %d%p %c          get input.c c:\src d:\work
  1457.               get %%                  get %
  1458.  
  1459.    The %u substitution marker is set by the user each time the RETROEXEC
  1460. command line is executed.   RETRO will prompt for its value during the
  1461. substitution operation.  You may enter any string, including an empty string
  1462. or strings containing other substitution markers.  If multiple %u's are in
  1463. the command line, RETRO will prompt for each one separately.
  1464.  
  1465.    The %u substitution marker is meant for the few situations where the
  1466. other markers do not provide sufficient information for the special command
  1467. or batch file to carry out its required task.  In most situations, %u should
  1468. not be necessary.
  1469.  
  1470.    As previously mentioned, RETRO is not concerned about what actions need
  1471. to be performed by the special command.  Its only concern is that at the
  1472. command's conclusion the searched-for file exists in the expected location
  1473. under the expected name.  (Remember, the expected location and name are the
  1474. values that were current when PCTAGS processed the file.)
  1475.  
  1476.    While the RETROEXEC special command is running, it may produce output
  1477. which will be displayed onscreen.  In many cases, this output will
  1478. temporarily overwrite the displayed file's text, however, the output will
  1479. NOT be entered into the file and will not corrupt the file's contents in any
  1480. way.  RETRO will always restore the original screen's contents before
  1481. terminating.
  1482.  
  1483.    After the special command completes its execution, RETRO checks one more
  1484. time to see if it can locate the desired file.  If it finds the file, RETRO
  1485. will load it into the editor and continue its operation.  If the file still
  1486. cannot be found, RETRO will display a descriptive message stating that fact.
  1487. Since there is nothing else it can do at that point, RETRO will terminate.
  1488.  
  1489.    If the tagfiles have been allowed to become obsolete so that their tag
  1490. information does not accurately represent the conditions within the source
  1491. files, RETRO may not be able to locate the correct tagline in the loaded
  1492. file.  If this occurs, RETRO will display a message suggesting that the
  1493. tagfile be updated.  If the retrieved source file was read into the editor
  1494. from the disk, RETRO will clean up after itself by removing the file from
  1495. the editor's memory.  If the retrieved file existed in the editor's memory
  1496. before RETRO began execution, it will be left in memory.  In either case,
  1497. RETRO will then terminate.
  1498.  
  1499.    The RETROEXEC capability is the main advantage the macro RETROs have over
  1500. the TSR version.  In addition, since the macros are more closely tied to the
  1501. editor, they are aware of any errors that could occur during the retrieval
  1502. operation and can recover gracefully.
  1503.  
  1504.  
  1505. Installing RETRO in BRIEF
  1506. -------------------------
  1507.    RETRO source code for the BRIEF editor is contained in the file RETRO.M.
  1508. The RETRO.M module is copyrighted material and may not be modified, used or
  1509. distributed except in conjunction with the PC-TAGS software package.
  1510. Registered PC-TAGS users are given permission to modify the RETRO source
  1511. code, however, any changes made by an individual cannot be supported by
  1512. Moderne Software.
  1513.  
  1514.    BRIEF supports several methods to incorporate macros into the editor.
  1515. The method described here is the recommended method.  Depending on your
  1516. preferences and computer environment, any of the other installation methods
  1517. may be chosen instead.  Refer to the BRIEF manuals for instructions on using
  1518. the other installation methods.
  1519.  
  1520.    The first step to installing RETRO is to compile the RETRO.M source code
  1521. with the BRIEF macro compiler, CM.EXE.  Assuming the compiler is available
  1522. in the current directory or in a directory along the PATH variable, the
  1523. correct command line is:
  1524.  
  1525.                                CM RETRO.M
  1526.  
  1527.    Compiling the source file will create a file called RETRO.CM.  This file
  1528. should be stored in a directory with other compiled macros or in a directory
  1529. specified in the BPATH environment variable.
  1530.  
  1531.    The next step is to inform BRIEF of the new commands available in the
  1532. RETRO.CM macro and assign the commands to keystrokes.  The recommended
  1533. method is to modify the "initials" macro file.  The initials file is
  1534. created by the BRIEF SETUP program when you install BRIEF.  During
  1535. installation, SETUP asks for your initials and uses them to create a macro
  1536. source file containing individualized configuration data.  For example, if
  1537. your name is Joe Collins, the name of your initials file would be JC.M.  The
  1538. initials file is the recommended location to add the RETRO installation data
  1539. because it will not get overwritten when you upgrade to new versions of
  1540. BRIEF.
  1541.  
  1542.    Load the initials file into your editor and locate the "initials macro."
  1543. The initials macro will be designated as such by comments in the file; the
  1544. macro will have the same name as your initials.  For example, Joe Collins
  1545. will have a macro called "macro JC."
  1546.  
  1547.    When you find the initials macro, add the lines specified below so that
  1548. the macro looks similar to this:
  1549.  
  1550. ;** Initials macro.
  1551. ;** Use this macro for additional customization.
  1552. (macro JC
  1553.     (
  1554.         ;** Put your changes here.
  1555.         .
  1556.         .
  1557.         .
  1558.  
  1559.         ; ************  ADD THESE LINES FOR RETRO INSTALLATION  ************
  1560.         ; PC-TAGS(tm) RETRO installation
  1561.         (autoload "retro" "pctags_auto" "pctags_prompt")
  1562.         (assign_to_key "<Ctrl-a>" "pctags_auto")
  1563.         (assign_to_key "<Ctrl-s>" "pctags_prompt")
  1564.  
  1565.         .
  1566.         .
  1567.         .
  1568.     )
  1569. )
  1570.  
  1571.    The "autoload" command will inform BRIEF of the RETRO macro file and the
  1572. two new commands in it.  You should add this line to your initials macro
  1573. exactly as it is shown above.  The first time either of the new commands is
  1574. invoked, BRIEF will load the RETRO.CM file and execute the command.  Be sure
  1575. the RETRO.CM file is in a directory specified in the BPATH environment
  1576. variable or BRIEF will not be able to find it.
  1577.  
  1578.    The two "assign_to_key" commands assign the RETRO macros to keys so that
  1579. they may be easily executed.  The example shows pctags_auto being assigned
  1580. to the <Ctrl-A> key and pctags_prompt assigned to <Ctrl-S>.  These can
  1581. easily be configured to whichever keys you prefer.  Refer to the BRIEF
  1582. manuals for further details on key assignments.
  1583.  
  1584.    After the necessary lines have been added to the initials macro, save the
  1585. initials file.  The initials file must now be compiled by the macro
  1586. compiler.  The appropriate command line is:
  1587.  
  1588.                               CM initials.M
  1589.  
  1590.    As an example, Joe Collins would execute "CM JC.M."
  1591.  
  1592.    To guarantee that the initials file will be read by BRIEF, be sure the
  1593. BFLAGS environment variable includes a "-m" option.  If it does not, you can
  1594. add it or you can specify it as an argument on the BRIEF command line.
  1595. Refer to the BRIEF manuals for further information on the -m option.
  1596.  
  1597.    Also, to make sure there will be enough memory to execute the RETROEXEC
  1598. special command, the -M option should be included in the BFLAGS environment
  1599. variable or on the BRIEF command line.  The -M option instructs BRIEF to
  1600. swap itself to either expanded memory or disk when a program is executed
  1601. from within the editor.  This will provide additional memory in which the
  1602. RETROEXEC command can run.  Check the BRIEF manuals for more information on
  1603. the -M option.  (Notice that -m and -M are two different options.)
  1604.  
  1605.    If everything has been setup correctly, the new RETRO commands will be
  1606. available at the touch of a single key the next time you run BRIEF.
  1607.  
  1608.  
  1609. Installing RETRO in Epsilon
  1610. ---------------------------
  1611.    RETRO source code for the Epsilon editor is contained in the file
  1612. RETRO.E.  The RETRO.E module is copyrighted material and may not be
  1613. modified, used or distributed except in conjunction with the PC-TAGS
  1614. software package.  Registered PC-TAGS users are given permission to modify
  1615. the RETRO source code, however, any changes made by an individual cannot be
  1616. supported by Moderne Software.
  1617.  
  1618.    There is more than one way to incorporate macros into the Epsilon editor.
  1619. The method described here is the recommended manner.  Depending on your
  1620. personal preferences and computer environment, any of the other installation
  1621. methods may be chosen as an alternative.  Refer to the Epsilon manuals for
  1622. instructions on using other installation methods.
  1623.  
  1624.    The first step in installing RETRO is to compile the RETRO.E source code
  1625. with the Epsilon EEL compiler, EEL.EXE.  There were some changes made to the
  1626. EEL macro language between Epsilon versions 3.2 and 4.0.  Some of these
  1627. changes effect the RETRO macro source.
  1628.  
  1629.    By default, RETRO.E will compile and run with Epsilon v4.0 only.  It can
  1630. easily be made to work with v3.2 by redefining the constants "V40x" and
  1631. "V32x" in the RETRO.E source file.  As shipped from Moderne Software, these
  1632. two constants are defined as:
  1633.  
  1634. #define V40x                    TRUE    /* Versions 4.00 and above */
  1635. #define V32x                    FALSE   /* Versions 3.20-3.23      */
  1636.  
  1637.    To use RETRO.E with Epsilon v3.2, simply switch the values of the
  1638. constants so they are defined as:
  1639.  
  1640. #define V40x                    FALSE   /* Versions 4.00 and above */
  1641. #define V32x                    TRUE    /* Versions 3.20-3.23      */
  1642.  
  1643.    If you make this change to RETRO.E, it must be done before compiling the
  1644. file.
  1645.  
  1646.    To successfully compile, RETRO.E requires the files EEL.H and LOWLEVEL.H
  1647. to be in the current directory.  These two files are distributed as part of
  1648. the Epsilon editor.
  1649.  
  1650.    The appropriate EEL command line to compile RETRO.E is:
  1651.  
  1652.                              EEL -s RETRO.E
  1653.  
  1654.    Compiling the source file will create a file called RETRO.B.  The -s
  1655. option will prevent debug information from being stored in the compiled file
  1656. and, therefore, make it smaller in size and faster in execution.
  1657.  
  1658.    The next step is to incorporate the RETRO.B file into the standard
  1659. Epsilon configuration.  Begin an editing session by executing Epsilon.
  1660. Execute the Epsilon "load-bytes" command which has a default key assignment
  1661. of <F3>.  When prompted for the name of the bytes file, enter "RETRO."  You
  1662. will have to include a drive and path specification if the RETRO.B file is
  1663. not in the current directory.
  1664.  
  1665.    After the RETRO file has been loaded, the "pctags_auto" and
  1666. "pctags_prompt" commands will be available for execution.  Epsilon changes
  1667. any underscore characters in a command to dashes, so the new commands will
  1668. actually be "pctags-auto" and "pctags-prompt."
  1669.  
  1670.    It will be easier to invoke the new commands if they are assigned to
  1671. keystrokes.  This can be accomplished by executing the Epsilon "bind-to-key"
  1672. command assigned by default to the <F4> key (<F1> in version 3.2).  Execute
  1673. bind-to-key once for each new command.  Pctags-auto and pctags-prompt can be
  1674. assigned to any keystrokes you wish.
  1675.  
  1676.    The new commands and their key assignments can be saved so that they will
  1677. be available in subsequent editing sessions by executing the Epsilon
  1678. "write-state" command.  Write-state does not have a default key assignment.
  1679. It can be executed by invoking "named-command" which is assigned to <F2> or
  1680. <Alt-X>.  Named-command will ask for the name of the Epsilon command you
  1681. wish to execute.  Respond with "write-state."
  1682.  
  1683.    Write-state will, in turn, prompt for the name of the disk file in which
  1684. to write the current editor state.  It is recommended that you save the
  1685. state in a file called EPSILON.STA.  This state file should be written to the
  1686. same directory in which EPSILON.EXE is stored.  Upon startup, Epsilon looks
  1687. in its home directory for a file called EPSILON.STA and loads the file
  1688. automatically if it finds it.  Saving the RETRO macros and key assignments
  1689. in the EPSILON.STA file will make them instantly available in subsequent
  1690. editing sessions.
  1691.  
  1692.  
  1693. Installing RETRO in KEDIT
  1694. -------------------------
  1695.    RETRO source code for the KEDIT editor is contained in the file
  1696. RETRO.KML.  The RETRO.KML module is copyrighted material and may not be
  1697. modified, used or distributed except in conjunction with the PC-TAGS
  1698. software package.  Registered PC-TAGS users are given permission to modify
  1699. the RETRO source code, however, any changes made by an individual cannot be
  1700. supported by Moderne Software.
  1701.  
  1702.    There is more than one way to incorporate macros into the KEDIT editor.
  1703. The method described here is the recommended manner.  Depending on your
  1704. personal preferences and computer environment, any of the other installation
  1705. methods may be chosen as an alternative.  Refer to the KEDIT manuals for
  1706. instructions on using other installation methods.
  1707.  
  1708.    The RETRO.KML file is designed to run as a KEDIT "in-memory" macro.  Each
  1709. RETRO command, pctags_auto and pctags_prompt, is invoked by pressing the key
  1710. assigned to it.  By default, pctags_auto is assigned to <Alt-T> and
  1711. pctags_prompt can be executed by pressing <Alt-P>.
  1712.  
  1713.    The <Alt-T> and <Alt-P> key assignments are built into the RETRO.KML
  1714. file.  If you have organized KEDIT so that it already uses these two
  1715. keystrokes or if you prefer to assign the RETRO commands to other keys, you
  1716. may do so by modifying the RETRO.KML source file.
  1717.  
  1718.    To change the default RETRO key assignments, locate the definition line
  1719. of the pctags_auto or pctags_prompt macros.  Each is located near the
  1720. beginning of the RETRO.KML file (within the first 200 lines) and is clearly
  1721. marked by comments within the file.
  1722.  
  1723.    The pctags_auto key assignment is performed by the RETRO.KML line:
  1724.  
  1725.                                 :alt-t
  1726.  
  1727.    The key assignment for pctags_prompt is:
  1728.  
  1729.                                 :alt-p
  1730.  
  1731.    You may modify either of these lines to any valid KEDIT key assignment.
  1732. Refer to the KEDIT manuals for information on valid key strings.
  1733.  
  1734.    The RETRO.KML file should be stored in a directory with the other KEDIT
  1735. macro files you commonly use.
  1736.  
  1737.    KEDIT is informed of the new RETRO commands in RETRO.KML by adding one
  1738. line to your PROFILE.KEX file.  KEDIT reads PROFILE.KEX every time KEDIT is
  1739. executed.  PROFILE.KEX contains configuration information that KEDIT
  1740. interprets to customize its editing environment to your preferences.  If you
  1741. do not currently use a PROFILE.KEX file, you will have to create one to
  1742. install RETRO.  Further information about PROFILE.KEX can be found in the
  1743. KEDIT manuals.
  1744.  
  1745.    The line which must be added to PROFILE.KEX will inform KEDIT of the name
  1746. and location of the RETRO.KML macro file.  It will also tell KEDIT to load
  1747. the file so that the macros contained within it will be available for
  1748. execution.  These tasks are performed by the KEDIT DEFINE command.
  1749.  
  1750.    As an argument to the DEFINE command, you must specify the file name of
  1751. the RETRO.KML file.  The file name may or may not require a drive and path
  1752. specification.  If RETRO.KML is stored in a directory that KEDIT normally
  1753. looks for macros, for example, along your 'SET MACROPATH ...' or PATH
  1754. environment settings, a drive and path will not be necessary.  But even if
  1755. the drive and path are not required, including them will not hurt.  To be
  1756. safe, go ahead and specify RETRO.KML's drive and path.
  1757.  
  1758.    The following example line tells KEDIT to load the macro file RETRO.KML.
  1759. It assumes that RETRO.KML is stored in the C:\KEDIT\MACROS directory.
  1760.  
  1761.                     'define c:\kedit\macros\retro.kml'
  1762.  
  1763.    A DEFINE command line similar to that shown above must be added to your
  1764. PROFILE.KEX file.  On your system, the drive and directory location of the
  1765. RETRO.KML file may be different than that shown above.  If so, modify the
  1766. example line so that it correctly reflects RETRO.KML's location.
  1767.  
  1768.    The single quotes which surround the DEFINE command are required and must
  1769. be included when entering the line in PROFILE.KEX.
  1770.  
  1771.    After making this change to PROFILE.KEX, RETRO will be installed
  1772. automatically every time you run KEDIT.  To execute either of the RETRO
  1773. commands, simply press the keystrokes assigned to them.
  1774.  
  1775.    One characteristic of the KEDIT RETRO macros should be mentioned.  There
  1776. must be at least two available spaces in the open-file ring for the
  1777. retrieval operation to succeed.  Since KEDIT limits the number of open files
  1778. to 15 (20 in the OS/2 version), there can be no more than 13 open files (18
  1779. in OS/2) when the RETRO macros are invoked.  If there is not enough space in
  1780. the ring, RETRO will fail gracefully, restoring the original status and
  1781. displaying an appropriate message before terminating.
  1782.  
  1783.  
  1784. Installing RETRO in ME
  1785. ----------------------
  1786.    RETRO source code for the ME editor from Magma Software Systems (not
  1787. Microsoft) is contained in the file RETRO (no extension).  The RETRO module
  1788. is copyrighted material and may not be modified, used or distributed except
  1789. in conjunction with the PC-TAGS software package.  Registered PC-TAGS users
  1790. are given permission to modify the RETRO source code, however, any changes
  1791. made by an individual cannot be supported by Moderne Software.
  1792.  
  1793.    There is more than one way to incorporate macros into the ME editor.  The
  1794. method described here is the recommended manner.  Depending on your personal
  1795. preferences and computer environment, any of the other installation methods
  1796. may be chosen as an alternative.  Refer to the ME manual for instructions on
  1797. using other installation methods.
  1798.  
  1799.    The RETRO macro supplied with PC-TAGS is designed to run with ME version
  1800. 2.20 or later.  It will work with ME versions 2.00 and 2.10, however, these
  1801. versions will not support the "%c" (current directory) substitution argument
  1802. in the RETROEXEC command line.  All other operations are identical.  The
  1803. RETRO macro will not work with versions of ME prior to 2.00.
  1804.  
  1805.    If you are going to use the RETRO macro with a version of ME prior to
  1806. 2.20, a small change must be made to the RETRO source file.  Within the
  1807. first 100 lines of the file, a constant called VER220_PLUS is defined to a
  1808. value of TRUE.  The source code line looks like this:
  1809.  
  1810. #define VER220_PLUS             TRUE
  1811.  
  1812.    Simply change the "TRUE" to "FALSE".  The resulting line should look like
  1813. this:
  1814.  
  1815. #define VER220_PLUS             FALSE
  1816.  
  1817.    There are a couple of other changes to the RETRO macro that you may wish
  1818. to make.
  1819.  
  1820.    In the init() function are the default key assignments for the two RETRO
  1821. commands.  Pctags_auto is assigned to the <Ctrl-A> key while <Ctrl-P> will
  1822. execute pctags_prompt.  If you want to reassign these commands to other
  1823. keys, you may change their assignments here.  The ME manual will explain how
  1824. to calculate the appropriate key values.
  1825.  
  1826.    Just before the RETRO macro terminates, it sets the operation of
  1827. subsequent regular-expression searches to be case-sensitive.  This may not
  1828. be what you want.  There is no method for a ME macro to determine the case
  1829. sensitivity upon its entry so it is not possible for it to reset the
  1830. original setting when finished.
  1831.  
  1832.    RETRO sets the case sensitivity by calling the ignore_case() function
  1833. near the end of the _pctags_main() function.  This is located near the very
  1834. end of the RETRO source file.  If you would prefer subsequent non-RETRO
  1835. searches to ignore case, change the argument to the ignore_case() function
  1836. from FALSE to TRUE.
  1837.  
  1838.    After you have made any changes, save the modified file.
  1839.  
  1840.    Before the ME editor can recognize and execute the RETRO commands, the
  1841. macro's source file must be compiled with the MACCOMP.EXE compiler which is
  1842. provided with the ME editor.  The correct command line to compile the RETRO
  1843. macro is:
  1844.  
  1845.                         >MACCOMP retro
  1846.  
  1847.    Compilation will create a new file called RETRO.EXM.  This file should be
  1848. placed in the same directory with any other compiled EXM files you use.
  1849. This directory should be specified in the ME environment variable.  For
  1850. example, if the executable ME program is stored in C:\ME and all your EXM
  1851. files are in C:\ME\MACROS, you should define the following environment
  1852. variable:
  1853.  
  1854.                         >SET ME=c:\me;c:\me\macros
  1855.  
  1856.    This will allow ME to locate the RETRO macro file when the editor is
  1857. powered-up.  Further details about the ME environment variable are described
  1858. in the ME manual.
  1859.  
  1860.    Finally, RETRO should be added to the list of macro files that ME
  1861. automatically loads upon startup.  These macros are specified in an
  1862. environment variable called MEMACROS.  The following environment variable
  1863. accomplishes this:
  1864.  
  1865.                         >SET MEMACROS=retro
  1866.  
  1867.    If you already have a MEMACROS variable, the RETRO macro can be added to
  1868. the existing list of preloaded macros by separating each macro with a
  1869. semicolon(;).  For example:
  1870.  
  1871.                         >SET MEMACROS=msccomp;retro
  1872.  
  1873.    After you have completed these steps, the two RETRO commands will be
  1874. available for use the next time you run ME.  They may be executed by simply
  1875. pressing the keys assigned to them.
  1876.  
  1877.  
  1878. Installing RETRO in Multi-Edit
  1879. ------------------------------
  1880.    RETRO source code for the Multi-Edit editor is contained in the file
  1881. RETRO.SRC.  The RETRO.SRC module is copyrighted material and may not be
  1882. modified, used or distributed except in conjunction with the PC-TAGS
  1883. software package.  Registered PC-TAGS users are given permission to modify
  1884. the RETRO source code, however, any changes made by an individual cannot be
  1885. supported by Moderne Software.
  1886.  
  1887.    The first step to integrating RETRO into Multi-Edit is to compile the
  1888. RETRO.SRC file with the MEMAC macro compiler.  The command line to do this
  1889. is:
  1890.  
  1891.                              MEMAC RETRO.SRC
  1892.  
  1893.    Compiling the source file produces a file called RETRO.MAC.  This file
  1894. must be placed in the directory specified in the ME_PATH environment
  1895. variable.  The ME_PATH directory should contain all the other MAC files
  1896. necessary for Multi-Edit operation, such as MEUTIL1.MAC and MESYS.MAC.  If
  1897. you do not define a ME_PATH environment variable, simply place the RETRO.MAC
  1898. file in the directory containing all the other MAC files.
  1899.  
  1900.    Informing Multi-Edit of the RETRO macros and assigning keystrokes to them
  1901. is done through Multi-Edit's Install procedure.  The Install process is
  1902. activated from within Multi-Edit through its main menu.
  1903.  
  1904.    Invoke Multi-Edit.  If you wish you may load a text file, but it is not
  1905. necessary.  Pop up the main menu by pressing the <Esc> key.  Choose the
  1906. "Install" option by either pressing <I> or using the cursor keys to
  1907. highlight the option.
  1908.  
  1909.    The Install option pops up another menu titled "Installation and Setup."
  1910. To tell Multi-Edit of the RETRO macros, we must go through the "Key mapping"
  1911. option.  Activate the "Key mapping" procedure by pressing <K>.  This will
  1912. cause Multi-Edit to display all the macros it currently recognizes and the
  1913. keystrokes assigned to them.  To this list we will add the RETRO macros
  1914. "pctags_auto" and "pctags_prompt."
  1915.  
  1916.    Using the cursor keys, place the highlighted line onto the macro you wish
  1917. listed immediately before the RETRO macros.  When Multi-Edit is told of our
  1918. new macros, it will place them immediately after the highlighted line.  You
  1919. may place the RETRO macros anywhere you want in the entire listing, however,
  1920. the "Search and Replace" or "Misc. Operations" groups are probably the most
  1921. appropriate.
  1922.  
  1923.    After you have positioned the highlighted line, press the <Ins> or <1>
  1924. key to create a new macro definition.  Multi-Edit will prompt you for the
  1925. name of the macro.  Respond with the name "PCTAGS_AUTO" and hit <Enter>.  A
  1926. "Keystroke Assignment" menu with several fields will appear.  For each of
  1927. the fields, enter the following information:
  1928.  
  1929.    "Macro:" -- This will already be filled in for you with the "PCTAGS_AUTO"
  1930.                name you entered previously.  Simply hit <Enter> to advance
  1931.                to the next field.
  1932.  
  1933.    "Parameters:" -- Neither of the RETRO macros take parameters so this
  1934.                     field should be left empty.  Hit <Enter>.
  1935.  
  1936.    "Description:" -- This is a simple description of the macro being
  1937.                      defined.  It will be used when displaying the list of
  1938.                      recognized macros and their key assignments.  You may
  1939.                      place anything you wish in this field.  As a
  1940.                      suggestion, pctags_auto may be described as "Retrieve
  1941.                      cursor tagname" and pctags_prompt can be "Retrieve
  1942.                      input tagname."  When you are finished, press <Enter>.
  1943.  
  1944.    "Primary key:"
  1945.    "Secondary key:"  -- If you wish to execute the RETRO macros by pressing
  1946.                         a single key, you must tell Multi-Edit which key
  1947.                         will invoke the macro.  This is done through the
  1948.                         Primary and Secondary key fields.
  1949.  
  1950.                         Pressing <Enter> will pop up a "Keycode" menu.
  1951.                         Choose the "Define keycode" option by pressing <D>.
  1952.                         Multi-Edit will prompt you to press the keystroke
  1953.                         you wish assigned to the macro.  You may assign any
  1954.                         key to want to the RETRO macros, provided the key is
  1955.                         recognized by Multi-Edit.  Make sure the key you
  1956.                         press is not already assigned to another macro.
  1957.  
  1958.                         After pressing the key, Multi-Edit will display it
  1959.                         in the active, highlighted field (either Primary Key
  1960.                         or Secondary Key).
  1961.  
  1962.                         You may define only a primary key or both a primary
  1963.                         and secondary key.  When you are finished, use the
  1964.                         cursor keys to move to the next field.
  1965.  
  1966.    "Function key label:" -- Multi-Edit usually displays on the last line of
  1967.                             the screen abbreviations of the macros assigned
  1968.                             to the function keys.  If you have assigned the
  1969.                             RETRO macros to function keys, you may enter in
  1970.                             this field the string you wish displayed.  Enter
  1971.                             any string you wish.  As suggestions,
  1972.                             pctags_auto may be abbreviated as "PCTAGS" and
  1973.                             pctags_prompt as "TagAsk".  Press <Enter> when
  1974.                             you are finished.
  1975.  
  1976.    "Mode:" -- The Mode field specifies the editor context in which the key
  1977.               assignments will invoke the RETRO macros.  This field should
  1978.               be set to "EDIT."  Since EDIT mode is the default, you can use
  1979.               the cursor keys to advance to the next field.
  1980.  
  1981.    "Macro file:" -- For Multi-Edit to load the RETRO macro file, it must
  1982.                     know the file's name.  Type the name "RETRO" into this
  1983.                     field and press <Enter>.
  1984.  
  1985.    After each field has been entered, press the <Esc> key.  Multi-Edit will
  1986. insert your new macro definition into its list of recognized macros.
  1987.  
  1988.    Go through the definition process again for the pctags_prompt macro by
  1989. pressing the <Ins> key.
  1990.  
  1991.    Once both of the RETRO macros have been defined and assigned keystrokes,
  1992. press the <Esc> key until you return to the "Installation and Setup" menu.
  1993. Press <Esc> again to exit the menu.  Multi-Edit will prompt you, asking if
  1994. you wish to save your changes.  Respond by pressing the <S> key for the
  1995. "Save-settings-and-exit" option.
  1996.  
  1997.    Multi-Edit will generate and compile a new initialization macro which
  1998. includes the RETRO macros and your key assignments.  The only thing that can
  1999. go wrong at this point is that Multi-Edit will not be able to find the
  2000. RETRO.MAC file if you have not placed it in the ME_PATH directory.  If this
  2001. occurs, exit Multi-Edit, copy the RETRO.MAC file into the appropriate
  2002. location and go through the installation process again.
  2003.  
  2004.    After Multi-Edit has successfully compiled the new initialization macro,
  2005. the new RETRO commands will be available for your use.  They may be invoked
  2006. by either pressing the key you assigned to them or by executing them by name
  2007. through the main menu or Run-Macro command.
  2008.  
  2009.  
  2010. TSR-Specific RETRO Operations
  2011. -----------------------------
  2012.    The resident (TSR) version of RETRO is in the file RETRO.COM.  This
  2013. version can be used with any editor.
  2014.  
  2015.    If your editor supports the loading of multiple files, RETRO can
  2016. automatically load a source file and position the cursor at the beginning of
  2017. the specified function definition.  If your editor only allows one file to
  2018. be edited at a time, RETRO can tell you the name of the source file which
  2019. contains a desired function definition and you can re-execute your editor to
  2020. load the file yourself.
  2021.  
  2022.    The TSR RETRO is written entirely in assembly language so it requires a
  2023. minimal amount of memory and will execute at near-instantaneous speed.
  2024.  
  2025.    The TSR RETRO does not support the RETROEXEC special command described in
  2026. the "Macro-Specific RETRO Operations" section.  However, it does offer some
  2027. features that are not available in the macro RETROs.  These features will be
  2028. explained in this section.
  2029.  
  2030.    The TSR RETRO is installed by executing it from the DOS command prompt or
  2031. from within a batch file.  Various command-line options are supported to
  2032. configure the RETRO retrieval operation to your personal tastes.  RETRO can
  2033. also be uninstalled, or removed from memory, by specifying a particular
  2034. option.  All the supported options are detailed in the next section,
  2035. "RETRO.COM Installation Options."
  2036.  
  2037.    In the unregistered version of RETRO, a random eight-digit number will be
  2038. displayed when it is installed.  You must re-enter the displayed number in
  2039. order for RETRO to continue its installation procedure.  This user input is
  2040. not required in the registered versions of PC-TAGS.  Its purposes are to
  2041. remind you that you are running an unregistered evaluation version and to
  2042. act as an impetus to register.  You can receive a registered version by
  2043. sending your paid registration form contained in the file ORDERFRM to
  2044. Moderne Software.
  2045.  
  2046.    Once installed, RETRO is activated by pressing one of its "hotkeys."  By
  2047. default, RETRO assigns its two commands (pctags_auto and pctags_prompt) to
  2048. the following keys:
  2049.  
  2050.               <Alt-A>  -- pctags_auto    (gets tagname above cursor)
  2051.               <Alt-P>  -- pctags_prompt  (prompts for tagname)
  2052.  
  2053.    Pressing either of these keys will cause the associated command to
  2054. execute.  If your editor already has commands assigned to these keys, you
  2055. will have to change the default RETRO hotkeys.  The RETRO hotkeys can be
  2056. reassigned via the -H installation option which will be explained later.
  2057.  
  2058.    Invoking the pctags_auto command (<Alt-A>) will execute the retrieval
  2059. operation as it is described in the "Common RETRO Operations" section.  The
  2060. word above the cursor will be used as the tagname.
  2061.  
  2062.    Invoke the pctags_prompt command (<Alt-P>) and RETRO will display a
  2063. pop-up window in the center of your screen.  You will be prompted to enter
  2064. the tagname you wish to retrieve.  Pressing <Esc> or entering an empty line
  2065. will cancel the RETRO operation.  Otherwise, enter the name of the function
  2066. or tag and press <Enter>.  RETRO will begin its retrieval operation.
  2067.  
  2068.    Besides prompting for a tagname, there are two fields displayed in the
  2069. pop-up window.  The headings on the fields are "Operation" and "Case."  Each
  2070. of these fields controls a particular aspect of the retrieval operation.
  2071.  
  2072.    The "Operation" field determines whether RETRO will actually load the
  2073. source file containing the tagged line ("Load File") or simply display the
  2074. tag information it retrieves and leave the file-loading to the user ("Show
  2075. Info").  One of the two options is always active.  The active field is
  2076. displayed in inverse video.  It is possible to toggle between the two fields
  2077. by pressing the <F1> key.
  2078.  
  2079.    The default active Operation is "Load File," but this can be changed to
  2080. "Show Info" by installing RETRO with the -I option explained in the next
  2081. section.
  2082.  
  2083.    The active Operation field is "sticky" in that it affects the execution
  2084. of all subsequent pctags_auto and pctags_prompt commands until it is
  2085. changed.
  2086.  
  2087.    The other field displayed in the pop-up window is titled "Case."  There
  2088. are two options in the Case category: "Sensitive" and "Insensitive."  These
  2089. options refer to the search operation performed when RETRO is looking for a
  2090. matching tagname in the tagfiles.  By default, RETRO performs a case-
  2091. sensitive search when looking for tag information.  This means that the case
  2092. of the tagname entered at the prompt of a pctags_prompt command or the word
  2093. above the cursor of a pctags_auto operation must match exactly to the
  2094. tagname stored in the tagfile.  If it does not, the tagname will not be
  2095. found.
  2096.  
  2097.    Like the Operation fields, one of the Case fields is always active and
  2098. displayed in inverse video.  The active Case field can be toggled by
  2099. pressing the <F2> key.  Also, like the Operation fields, the active Case
  2100. field is sticky.
  2101.  
  2102.    The default Case field can be set to "Insensitive" by specifying the -C
  2103. option on the RETRO installation line.  Further details will be explained in
  2104. the next section.
  2105.  
  2106.    The TSR RETRO loads source files and positions the cursor by invoking
  2107. editor commands.  RETRO achieves this by sending to the editor the
  2108. keystrokes the editor recognizes as command invocations.  For example, if
  2109. your editor is configured to load a file whenever the <F3> key is pressed,
  2110. RETRO would send an <F3> keystroke to the editor when it wanted to load a
  2111. source file.  When your editor would prompt for the name of the file to
  2112. load, RETRO would send it the source file name.  All this is done
  2113. automatically by RETRO as part of the retrieval process.
  2114.  
  2115.    Since every editor has its own set of keystroke assignments, RETRO must
  2116. be informed of the sequence of keystrokes that your editor recognizes to
  2117. execute certain commands.  This is done by configuring RETRO with the
  2118. RETROCON program.  RETRO must be configured with RETROCON before it can be
  2119. used to load a source file.
  2120.  
  2121.    RETROCON is included in the PC-TAGS software package.  RETROCON
  2122. instructions are contained later in this manual in the section "Configuring
  2123. the TSR RETRO with RETROCON."
  2124.  
  2125.    Some other characteristics of the TSR RETRO must first be mentioned.
  2126.  
  2127.    The TSR RETRO will not activate if the screen is in a graphics mode.
  2128. This means that if the editor is in the 43-line EGA or 50-line VGA mode,
  2129. pressing either of the hotkeys will have no effect.  RETRO can be invoked if
  2130. you switch back to the 25-line text mode.
  2131.  
  2132.    RETRO also does not support 40-column text displays.  This should not be
  2133. a problem as 40-column screens are rarely, if ever, used for text editing.
  2134.  
  2135.    In addition to popping up during an editing session, RETRO can also be
  2136. invoked from the DOS command prompt.  If RETRO is instructed to load a
  2137. source file, it will execute your editor to do so.  RETRO is smart enough to
  2138. know whether it is necessary to execute your editor or if the editor is
  2139. already running.
  2140.  
  2141.    However, RETRO will only execute your editor from a primary command-
  2142. processor prompt, not from the prompt of a secondary shell.  RETRO may be
  2143. used from a secondary shell, but only if the Operation option is set to
  2144. "Show-Info" and not "Load-File."
  2145.  
  2146.  
  2147. RETRO.COM Installation Options
  2148. ------------------------------
  2149.    The TSR RETRO recognizes several command-line options which can be used
  2150. to configure RETRO to your personal tastes and computer environment.
  2151.  
  2152.    All options are preceded by a dash(-) character.  Options may be in upper
  2153. or lower case.  Multiple options can be specified, but each must be
  2154. separated by at least one space.
  2155.  
  2156.    An example RETRO installation line with multiple options would be:
  2157.  
  2158.                              >RETRO -C -V
  2159.  
  2160.    Each of the supported RETRO options are explained in this section.
  2161.  
  2162.  
  2163. Case-Insensitive Tagname Searching
  2164. ----------------------------------
  2165.    -C        -- Default Tagname Comparison is Case-Insensitive
  2166.  
  2167.    By default, RETRO will perform a case-sensitive comparison when searching
  2168. a tagfile for a matching tagname.  This is depicted in the pop-up window by
  2169. the active Case field "Sensitive" being displayed in inverse video.
  2170.  
  2171.    Installing RETRO with the -C option will toggle the active Case field so
  2172. that RETRO will powerup with the "Insensitive" field active.  The active
  2173. field can still be toggled by pressing the <F2> key when the RETRO prompt
  2174. window is displayed.
  2175.  
  2176.  
  2177. Assign RETRO Hotkeys
  2178. --------------------
  2179.    -Hx:x:x      -- Assign Hotkey to the pctags_auto or pctags_prompt Command
  2180.  
  2181.    By default, RETRO makes the following hotkey assignments:
  2182.  
  2183.                          <Alt-A> -- pctags_auto
  2184.                          <Alt-P> -- pctags_prompt
  2185.  
  2186.    One or both of these assignments may be altered by the -H option.  If
  2187. your editor already uses one of the default hotkeys to execute an editor
  2188. command, you should reassign the RETRO hotkey to some unused keystroke.
  2189.  
  2190.    The -H option requires additional information to be specified with it.
  2191. This information must be immediately after -H with no spaces between it.
  2192. The information is specified in several parts, each part separated by a
  2193. colon(:).
  2194.  
  2195.    The first part specifies the RETRO command to which the hotkey will be
  2196. assigned, either pctags_auto or pctags_prompt.  Each command is specified by
  2197. a single character.
  2198.  
  2199.                         A -- assign hotkey to pctags_auto
  2200.                         P -- assign hotkey to pctags_prompt
  2201.  
  2202.    The RETRO command specifier is immediately followed by a colon.  Thus, if
  2203. we were assigning a new hotkey to pctags_auto, the first part of the option
  2204. would be:
  2205.  
  2206.                         >RETRO -HA:
  2207.  
  2208.    The second part of the option designates which shift keys to use in the
  2209. hotkey.  Possible shift keys are the <Alt>, <Ctrl>, <LeftShift> and
  2210. <RightShift> keys.  Shift keys are specified by a single letter.
  2211.  
  2212.                         A -- Alt
  2213.                         C -- Ctrl
  2214.                         L -- Left Shift
  2215.                         R -- Right Shift
  2216.  
  2217.    Immediately following the shift keys must be another colon.
  2218.  
  2219.    Shift keys can be combined.  For example, specifying both A(Alt) and
  2220. C(Ctrl) will require that you press both the <Alt> and <Ctrl> keys to
  2221. activate the associated command.
  2222.  
  2223.    Notice that RETRO differentiates between the Left and Right Shift keys.
  2224. Specifying both as part of the hotkey does not mean that you can press
  2225. EITHER of them to activate RETRO; it means you must press BOTH of them.
  2226.  
  2227.    There do not have to be any shift keys in a hotkey definition.  In this
  2228. case, the colon character would follow immediately after the colon which
  2229. ended the command specifier.  For example,
  2230.  
  2231.                         >RETRO -HA::
  2232.  
  2233.    To add to our original sample definition, say we want to combine the
  2234. <Alt> and <Ctrl> keys in our pctags_auto hotkey.  Our constructed option
  2235. would now look like:
  2236.  
  2237.                         >RETRO -HA:AC:
  2238.  
  2239.    The third and final part of a hotkey definition is the hotkey itself.
  2240. Valid hotkeys are:
  2241.  
  2242.                         A-Z    (case-insensitive)
  2243.                         0-9
  2244.                         F1-F12 (F11 and F12 may not work on all machines)
  2245.  
  2246.    To complete our sample definition, let's assign the hotkey <Alt>-<Ctrl>-A
  2247. to the pctags_auto command:
  2248.  
  2249.                         >RETRO -HA:AC:A
  2250.  
  2251.    To assign the <F1> key to the pctags_prompt command:
  2252.  
  2253.                         >RETRO -HP::F1
  2254.  
  2255.    Certain editors require the hotkeys to either use or not use certain
  2256. shift keys.  For example, if your editor uses the <Alt> key to activate a
  2257. menu system (as the Quick environments do) then hotkeys using the <Alt>
  2258. shift key will have an effect on the retrieval operation.
  2259.  
  2260.    Popular editors that limit the use of certain hotkeys are mentioned in
  2261. the following section.
  2262.  
  2263.    Hotkeys in the Quick Environments
  2264.    ---------------------------------
  2265.    If you will be using RETRO with one of the Microsoft Quick environments,
  2266. such as QuickC, QuickBASIC or QuickPascal, and you will be loading source
  2267. files, BOTH of your RETRO hotkeys must include the <Alt> key.  However, if
  2268. you will only be showing tag information and not loading files, it is
  2269. recommended that NEITHER hotkey include the <Alt> key.
  2270.  
  2271.  
  2272. Show Tag Information
  2273. --------------------
  2274.    -I           -- Show Tag Information, Do Not Load Source File
  2275.  
  2276.    By default, RETRO will attempt to load the relevant source file when a
  2277. tagname's tag information is found.  This is depicted in the pop-up window
  2278. by the active Operation field "Load File" being displayed in inverse video.
  2279.  
  2280.    Installing RETRO with the -I option will toggle the active Operation
  2281. field so that RETRO will powerup with the "Show Info" field active.  The
  2282. active field can still be toggled by pressing the <F1> key when the RETRO
  2283. prompt is displayed.
  2284.  
  2285.  
  2286. Keystroke Stuff Rate
  2287. --------------------
  2288.    -Kx          -- Rate at which Keystrokes Should Be Fed to Editor
  2289.  
  2290.    By default, when RETRO is trying to load a file and position the cursor,
  2291. it will send keystrokes to the editor as fast as it can.  Some editors
  2292. cannot accept keystrokes as fast as RETRO sends them.  If you find that your
  2293. editor is losing RETRO keystrokes, install RETRO with the -K option.
  2294.  
  2295.    -K takes a mandatory single-character modifier which designates the
  2296. keystroke stuff speed.  This modifier must be specified immediately after
  2297. the -K option with no spaces between them.  The supported modifiers are:
  2298.  
  2299.                         S -- Slow rate
  2300.                         M -- Medium rate
  2301.                         F -- Fast rate (default)
  2302.  
  2303.    For example, to instruct RETRO to use the medium keystroke speed:
  2304.  
  2305.                         >RETRO -KM
  2306.  
  2307.  
  2308. Remove RETRO From Memory
  2309. ------------------------
  2310.    -R           -- Remove RETRO from memory, uninstall
  2311.  
  2312.    When you are through using RETRO, it can be removed from memory by
  2313. specifying the -R option.  Thus, RETRO need only be resident when you need
  2314. it.
  2315.  
  2316.  
  2317. Prevent Snow on CGA Screens
  2318. ---------------------------
  2319.    -V           -- Display RETRO Output Without Video Snow
  2320.  
  2321.    By default, RETRO will write to the screen as fast as it can.  This will
  2322. create a snow effect on some CGA monitors.  If you experience snow with
  2323. RETRO output, install it with the -V option.
  2324.  
  2325.  
  2326.  
  2327. Configuring the TSR RETRO with RETROCON
  2328. ---------------------------------------
  2329.    Before RETRO can load a source file into your editor, it must know the
  2330. keystrokes the editor recognizes to execute certain commands.  When loading
  2331. a file and positioning the cursor, RETRO will send these keystrokes,
  2332. combined with the relevant tag information, to the editor.
  2333.  
  2334.    The RETROCON.EXE program is used to configure the TSR RETRO so that it
  2335. will send the appropriate keystrokes to your editor.  Examples of using
  2336. RETROCON to configure several popular editors and environments are described
  2337. in following sections.
  2338.  
  2339.    RETROCON will prompt you for the keystrokes your editor recognizes to
  2340. invoke the following commands:
  2341.  
  2342.                 Load-file
  2343.                 Search-for-text (non-regular expression forward search)
  2344.                 Jump- or goto-line
  2345.                 Customization commands
  2346.  
  2347.    When prompted for keystrokes to a particular editor command, you should
  2348. press those keys that you normally do when executing the command yourself
  2349. during an edit session.  When sending the keystrokes to your editor, RETRO
  2350. will combine them with the relevant file information retrieved from the
  2351. tagfile.
  2352.  
  2353.    To indicate to RETROCON that you have entered all the necessary keys for
  2354. a particular command, press <Ctrl-@>.  DO NOT PRESS <Enter> TO TERMINATE
  2355. YOUR INPUT.  The <Enter> key will simply be added to the rest of your
  2356. command keystrokes.  You must press <Ctrl-@> to terminate an input sequence.
  2357.  
  2358.    As an example, say your editor uses the <F3> key to begin a load-file
  2359. operation.  When prompted for the load-file keystrokes, simply press the
  2360. following key sequence:
  2361.  
  2362.                                <F3><Ctrl-@>
  2363.  
  2364.    The <F3> is the editor command key and the <Ctrl-@> tells RETROCON that
  2365. you have finished entering keystrokes.  (The "< >" brackets should not be
  2366. entered; they are only shown here to differentiate the keys.)
  2367.  
  2368.    Perhaps your editor requires you to activate a main menu and then pull
  2369. down a File submenu in order to load a file.  If the <Esc> key activates the
  2370. main menu, the <F> key pulls down the File submenu and <L> initiates the
  2371. load operation, the correct RETROCON input is:
  2372.  
  2373.                             <Esc><F><L><Ctrl-@>
  2374.  
  2375.    Notice that the key sequence takes the editor up to the point where it
  2376. will prompt for the name of the file to load.  You do not have to enter
  2377. anything for the file-name input; RETRO will add the file name itself during
  2378. the retrieval process.
  2379.  
  2380.    All of the editor-command keystroke prompts act in this manner.  You
  2381. should enter the keystrokes your editor requires up until the point where it
  2382. will ask you for input which is specific to an individual operation.  For
  2383. example, since the file name will change for each load operation, it is
  2384. considered "specific" to each load command.  The same is true for the line
  2385. number in a jump-to-line command and the search string in a search
  2386. operation.  RETRO will fill in the command-specific information itself.
  2387.  
  2388.    There may be some instances where executing a single editor command will
  2389. not always perform the retrieval operation correctly.  When these situations
  2390. occur, RETROCON can be used to configure RETRO so that it will execute
  2391. multiple commands.  One instance where multiple commands may be required is
  2392. described here.
  2393.  
  2394.    Some editors will not load a second copy of a file which is already
  2395. loaded.  When instructed to load a second copy, the editor will simply
  2396. switch to the window or buffer that already contains the file.  The cursor
  2397. position in the "new" window remains unchanged from its last placement.  The
  2398. QEdit text editor and the Turbo environments act in this manner.
  2399.  
  2400.    Leaving the cursor position unchanged could have an effect on the success
  2401. of the RETRO search operation.  For example, if the cursor is positioned
  2402. after the function definition that RETRO is searching for, the search
  2403. operation will not succeed.  For this reason, it may be appropriate to
  2404. precede the search command with a "Top-of-File" command.  Doing so will
  2405. guarantee that the search operation will scan the entire file and find the
  2406. function definition.
  2407.  
  2408.    When this situation occurs, it will be necessary to configure RETRO so
  2409. that it always performs a Top-of-File command just before doing its search.
  2410. This is easily done with RETROCON.
  2411.  
  2412.    Say your editor recognizes the <Ctrl-Home> key as an instruction to
  2413. position the cursor at the start of the file and <F7> to begin a search
  2414. operation.  When RETROCON prompts you for the keystrokes required for a
  2415. Text-Search, press the following keys:
  2416.  
  2417.                          <Ctrl-Home><F7><Ctrl-@>
  2418.  
  2419.    Neither RETROCON nor RETRO knows that it will be executing two editor
  2420. commands (Top-of-File and Search).  Neither program analyzes the keystrokes
  2421. you tell it to pass to the editor; they simply pass them along and assume
  2422. they will perform the desired operations.  This gives you great power in
  2423. controlling the RETRO retrieval operation, as shown in the above two-command
  2424. Top-of-File/Search command.
  2425.  
  2426.    Each editor has its own method of processing certain operations.  For
  2427. example, some editors begin a search operation immediately after entering
  2428. the search text and pressing the <Enter> key.  Other editors will prompt for
  2429. additional information, such as the case-sensitivity or direction of the
  2430. search.  Some editors use the <Esc> key instead of the <Enter> key to signal
  2431. the end of the search-string.  RETRO and RETROCON are capable of handling
  2432. this wide range of editor methods.
  2433.  
  2434.    For example, as part of instigating a search command, some editors prompt
  2435. for additional input after the search string has been entered.  As mentioned
  2436. above, the editor might ask whether the search should be case-sensitive or
  2437. in which direction the search should move.  To handle this type of
  2438. operation, RETRO and RETROCON break the search-command keystrokes into two
  2439. groups: (1) keys entered up until the search string and (2) keys entered
  2440. after the search string.  If your editor begins the search operation
  2441. immediately after entering the search string, you should simply enter a
  2442. <Ctrl-@> when prompted for the additional keystrokes.  Otherwise, you may
  2443. enter any keystrokes that your editor will recognize.
  2444.  
  2445.    Some editors do not support a jump-to-line command.  If your editor falls
  2446. in this group, enter a <Ctrl-@> when prompted for the jump-to-line command
  2447. keystrokes.  Also, be sure the PCTAGS -L option is NOT specified when you
  2448. process your source files.  The -L option places line numbers in the tagfile
  2449. and your editor will not be able to handle them if it does not support a
  2450. jump-to-line command.
  2451.  
  2452.    At the end of the RETRO retrieval operation, but before it terminates,
  2453. RETRO will send any additional editor keystrokes that you specify.  You may
  2454. use this feature to customize the RETRO operation to your particular tastes.
  2455. For example, you may wish to center the cursor line onscreen or move the
  2456. cursor to the beginning of the line.  Whatever you wish done, simply enter
  2457. the appropriate editor keystrokes when prompted for the customization keys.
  2458. If there are no additional operations you want done, press the <Ctrl-@> key.
  2459.  
  2460.    In addition to requesting editor command keystrokes, RETROCON will ask
  2461. you for the name of your editor.  This is used if RETRO is ever popped-up
  2462. from the DOS command prompt and is instructed to load a file.  In this
  2463. situation, RETRO will execute your editor automatically.  If you normally
  2464. include command-line options when executing your editor, they should be
  2465. specified along with the editor's name.
  2466.  
  2467.    Once all the required information is input, RETROCON will display its
  2468. main menu.  From here you can re-enter any command keystrokes you mistakenly
  2469. entered or save your input to the RETRO.COM program file.  If you save the
  2470. information, RETRO will use it in its retrieval operation the next time it
  2471. is installed.
  2472.  
  2473.    RETROCON can be used again in the future if you need to modify any of
  2474. your editor's command keystrokes.
  2475.  
  2476.  
  2477. Configuring RETRO for the Turbo Environments
  2478. --------------------------------------------
  2479.    This section will describe how RETROCON can be used to configure the TSR
  2480. RETRO to work with the Turbo environments, like Turbo Pascal and Turbo C.
  2481. All the keystrokes specified here use the default key configurations for the
  2482. Turbo environment.
  2483.  
  2484.    The example Turbo configuration described here works with Turbo C v2.0
  2485. and Turbo Pascal v5.5.  Other Turbo languages and versions should be
  2486. configured in a similar manner.
  2487.  
  2488.    The first input for which RETROCON will prompt is the name of the editor
  2489. with which you will be using RETRO.  This will change depending upon which
  2490. Turbo environment you'll be using.  For our example, we'll assume we will be
  2491. using Turbo C whose program name is TC.  Thus, RETROCON's prompt and our
  2492. response would look like this:
  2493.  
  2494.                 Editor name and options: tc<Ctrl-@>
  2495.  
  2496.    Notice that the end of the input was terminated by a <Ctrl-@>.  Do not
  2497. hit the <Enter> key to terminate input; all RETROCON input is terminated by
  2498. <Ctrl-@>.
  2499.  
  2500.    RETROCON will next ask for the keystrokes necessary to execute a
  2501. Load-File command.  Turbo's method of executing a "load" command will
  2502. require special handling by the resident RETRO.  During Turbo's course of
  2503. carrying out a "load" command, it checks to see if the current file has been
  2504. modified.  If it has, Turbo will ask the user if the modified file should be
  2505. saved to disk before continuing.  If the file has not been changed, the
  2506. load will occur without this additional prompting.
  2507.  
  2508.    RETRO does not have the capacity to handle this intermittent prompting.
  2509. Thus, for RETRO to work with the Turbo environments, it must be configured
  2510. in such a way as to guarantee that the "save-file" prompt never occurs.
  2511. This requires that the Load-File command be configured as a "double-
  2512. command," like that described in the previous section.
  2513.  
  2514.    So that Turbo will never prompt to ask whether it should save a modified
  2515. file, the Load-File command must be preceded by a Save-File command.  In the
  2516. default Turbo configuration, the <F2> key executes a Save-File operation and
  2517. the <F3> key will load a file.  Thus, when RETROCON asks for the keystrokes
  2518. to execute a Load-File command, the correct input is:
  2519.  
  2520.                     Load-File keystrokes: <F2><F3><Ctrl-@>
  2521.  
  2522.    RETROCON will then prompt for the keystrokes necessary to invoke a
  2523. Text-Search operation.  The characteristics of the Turbo environment require
  2524. that RETRO execute another double-command in this situation, as well.
  2525.  
  2526.    If Turbo is told to load a file that already exists in its buffers, then
  2527. it will simply "switch" to that file.  This switch leaves the cursor
  2528. position unchanged from its original location.  In most cases, the cursor
  2529. will be somewhere other than the top of the file.  If the cursor is
  2530. positioned beyond the tagged line for which RETRO will search, the search
  2531. operation will fail.  To guarantee that the search will succeed, it must
  2532. scan the entire file starting from the file's beginning.  Thus, the RETRO
  2533. Text-Search operation should be preceded by a Top-of-File command.
  2534.  
  2535.    Turbo recognizes <Ctrl-QR> as the Top-of-File command and <Ctrl-QF> to
  2536. begin a search operation.  Therefore, the appropriate RETROCON input is:
  2537.  
  2538.            Text-Search keystrokes: <Ctrl-Q><R><Ctrl-Q><F><Ctrl-@>
  2539.  
  2540.    The following input is equivalent:
  2541.  
  2542.       Text-Search keystrokes: <Ctrl-Q><Ctrl-R><Ctrl-Q><Ctrl-F><Ctrl-@>
  2543.  
  2544.    After RETRO sends the above Text-Search keystrokes to Turbo, it will send
  2545. Turbo the search-string.  The search-string will be the contents of the
  2546. tagged line.  Turbo limits the length of the search-string to 30 characters.
  2547. However, in many cases, the tagged line will be more than 30 characters.
  2548. When this occurs, Turbo will use only the first 30 characters of the tagged
  2549. line for its search.  This will not usually cause a problem.  However,
  2550. sometimes the short search-string will match a line in the file other than
  2551. the original tagged line, for example, a function prototype in the C
  2552. language.  When this happens, manually pressing the <Ctrl-L> key will cause
  2553. Turbo to find the next matching line.  In most cases, the next match will
  2554. find the desired tagline.
  2555.  
  2556.    After telling RETROCON the Text-Search keystrokes, it will ask for any
  2557. additional keys required to begin the actual search.  After receiving the
  2558. search-string, Turbo always prompts for options to customize the search.
  2559. For example, the search could be made case-sensitive or move forward or
  2560. backward through the file.  After entering any options, pressing the <Enter>
  2561. key will begin the search operation.
  2562.  
  2563.    For RETRO's purposes, the default Turbo search options are sufficient.
  2564. Thus, only the <Enter> key is required.  The proper RETROCON input is:
  2565.  
  2566.               Additional Text-Search keystrokes: <Enter><Ctrl-@>
  2567.  
  2568.    Next, RETROCON asks for the keystrokes which will invoke a Goto-Line
  2569. operation.  The Turbo environment does not provide such a command, so this
  2570. prompt can be "skipped" by simply entering <Ctrl-@>.  (Note: Because Turbo
  2571. does not support a Goto-Line command, line number information should never
  2572. by stored in the tagfiles.  Line number information is stored when PCTAGS is
  2573. executed with the -L option.)
  2574.  
  2575.    The RETROCON input when prompted for the Goto-Line keystrokes is:
  2576.  
  2577.                       Jump-to-Line keystrokes: <Ctrl-@>
  2578.  
  2579.    Finally, RETROCON will ask for keystrokes to customize the RETRO
  2580. retrieval operation.
  2581.  
  2582.    Following a Turbo search operation, the cursor is often positioned near
  2583. the bottom of the screen.  Also, the cursor is located at the end of the
  2584. search-string.  It might be nicer to move the cursor to the start of the
  2585. line (<Home> key) and move the tagged line up near the middle of the screen.
  2586. This can be done by sending several <Down> keystrokes followed by the same
  2587. number of <Up> keys to restore the cursor onto the tagged line.  Such a
  2588. customization would be entered as:
  2589.  
  2590.    Custom keystrokes: <Home><Down><Down><Down><Down><Up><Up><Up><Up><Ctrl-@>
  2591.  
  2592.    You may prefer a different customization or none at all.  It is not
  2593. important what keys are entered for this prompt (as long as it is terminated
  2594. with a <Ctrl-@>).
  2595.  
  2596.    At this point, RETRO configuration is nearly complete.  The RETROCON main
  2597. menu will be displayed and you will be able to re-enter any of the keystroke
  2598. fields or save your configuration to the RETRO.COM file.
  2599.  
  2600.  
  2601. Configuring RETRO for QEdit
  2602. ---------------------------
  2603.    This section will describe how RETROCON can be used to configure the TSR
  2604. RETRO to work with the Qedit text editor.  The example demonstrates how to
  2605. configure QEdit using its default keystroke assignments.
  2606.  
  2607.    First, RETROCON will prompt for the name of the editor.  Simply enter "Q"
  2608. and <Ctrl-@> to terminate the input.  The RETROCON prompt and your response
  2609. should look like this:
  2610.  
  2611.                 Editor name and options: <Q><Ctrl-@>
  2612.  
  2613.    Notice that the end of the input was terminated by a <Ctrl-@>.  Do not
  2614. hit the <Enter> key to terminate input; all RETROCON input is terminated by
  2615. <Ctrl-@>.
  2616.  
  2617.    Next, RETROCON will ask for the keystrokes which will cause QEdit to load
  2618. a file.  The <Alt-E> key will do this, therefore the appropriate RETROCON
  2619. input should be:
  2620.  
  2621.                 Load-File keystrokes: <Alt-E><Ctrl-@>
  2622.  
  2623.    RETROCON will then prompt for the keys that will begin a Text-Search
  2624. operation.  The <Ctrl-Q><F> keys will invoke the QEdit command, however,
  2625. this will not be enough to guarantee a successful search.
  2626.  
  2627.    When QEdit loads a file, it first checks to see if the file is already
  2628. loaded in its buffers.  If it is then QEdit simply "switches" to the file.
  2629. When the switch occurs, the cursor position remains unchanged from its
  2630. original location when the file was last accessed.  In most cases, the
  2631. cursor will not be at the beginning of the file.  If the cursor is beyond
  2632. the tagged line for which RETRO will search then QEdit will not find the
  2633. line.
  2634.  
  2635.    To guarantee that the search will succeed, QEdit must scan the entire
  2636. file.  This can be accomplished if the cursor is always at the beginning of
  2637. the file when the search is begun.  Thus, a Top-of-File command should
  2638. immediately precede the Text-Search operation.  QEdit recognizes a press of
  2639. the <Ctrl-PgUp> keys as an instruction to move the cursor to the start of
  2640. the file.
  2641.  
  2642.    The correct RETROCON input will look like this:
  2643.  
  2644.            Text-Search keystrokes: <Ctrl-PgUp><Ctrl-Q><F><Ctrl-@>
  2645.  
  2646.    When RETRO is performing its retrieval operation, it will append to the
  2647. above keystrokes the search-string for which to search.  The search-string
  2648. will be the contents of the tagged line.  After sending the search-string, a
  2649. carriage return will be sent to QEdit.
  2650.  
  2651.    Before QEdit actually begins the search, it prompts for search options.
  2652. These options control important characteristics of the search operation,
  2653. such as case-sensitivity and search direction.  After entering any options,
  2654. pressing the <Enter> key will begin the actual search.  For RETRO's
  2655. purposes, no options are the best.  When no options are chosen, the search
  2656. will be case-sensitive and perform a forward search through the file.
  2657.  
  2658.    By default, QEdit will ignore the case of the search-string when scanning
  2659. the file for a match.  This setting and any other default options can be
  2660. removed by simply pressing the <Space> key.
  2661.  
  2662.    RETROCON will ask for the additional keys required to begin the QEdit
  2663. search.  Your response should look like this:
  2664.  
  2665.          Additional Text-Search keystrokes: <Space><Enter><Ctrl-@>
  2666.  
  2667.    Next, RETROCON will prompt for the keystrokes necessary to execute a
  2668. Jump-to-Line command.  RETRO will invoke such an operation when the line
  2669. number of the tagged line is stored in the tagfile.  (This occurs when
  2670. PCTAGS is run with the -L option.)  QEdit uses the <Ctrl-J> key to invoke
  2671. the command so the correct RETROCON input is:
  2672.  
  2673.                Jump-to-Line keystrokes: <Ctrl-J><Ctrl-@>
  2674.  
  2675.    Finally, RETROCON will ask for any keystrokes RETRO should send to QEdit
  2676. at the completion of its retrieval operation.  These keys can be used to
  2677. customize the RETRO retrieval operation to your preferences.  For example,
  2678. when QEdit locates a matching search-string, the cursor will be on the top
  2679. line in the window.
  2680.  
  2681.    It might be nice to move the line a little lower so that a few lines
  2682. before the tagged line can be seen.  This is easily done by moving the
  2683. cursor up a few rows using the <Up> arrow key and then back down the same
  2684. number of rows with the <Down> arrow key to replace the cursor onto the
  2685. tagged line.
  2686.  
  2687.    The RETROCON input to achieve this is:
  2688.  
  2689.                 Custom keystrokes: <Up><Up><Down><Down><Ctrl-@>
  2690.  
  2691.    Of course, you do not have to enter the same keystrokes to customize your
  2692. retrieval operation.  Choose any keys you like or none at all.
  2693.  
  2694.    At this point, the RETRO configuration is nearly complete.  The RETROCON
  2695. main menu will be displayed and you will be able to re-enter any of the
  2696. keystroke fields or save your configuration to the RETRO.COM file.
  2697.  
  2698.  
  2699. Configuring RETRO for MicroEMACS
  2700. --------------------------------
  2701.    This section will describe how RETROCON can be used to configure the TSR
  2702. RETRO to work with the IBM version of the MicroEMACS text editor.  The
  2703. example shows how to configure MicroEMACS using its default keystroke
  2704. assignments.
  2705.  
  2706.    First RETROCON will prompt for the name of the editor.  Simply enter
  2707. "MEIBM" and <Ctrl-@> to terminate the input.  The RETROCON prompt and your
  2708. response should look like this:
  2709.  
  2710.                 Editor name and options: meibm<Ctrl-@>
  2711.  
  2712.    Notice that the end of the input was terminated by a <Ctrl-@>.  Do not
  2713. hit the <Enter> key to terminate input; all RETROCON input is terminated by
  2714. <Ctrl-@>.
  2715.  
  2716.    Next, RETROCON will ask for the keystrokes which will cause MicroEMACS to
  2717. load a file.  The <Ctrl-X><Ctrl-F> key sequence will do this, thus the
  2718. appropriate RETROCON input is:
  2719.  
  2720.               Load-File keystrokes: <Ctrl-X><Ctrl-F><Ctrl-@>
  2721.  
  2722.    RETROCON will then prompt for the keys that will begin a Text-Search
  2723. operation.  The <Ctrl-S> key will invoke the MicroEMACS command, however,
  2724. this will not be enough to guarantee a successful search.
  2725.  
  2726.    When MicroEMACS loads a file, it first checks to see if the file is
  2727. already loaded in its buffers.  If it is then MicroEMACS simply "switches"
  2728. to the file.  When the switch occurs, the cursor position remains unchanged
  2729. from its original location when the file was last accessed.  In most cases,
  2730. the cursor will not be at the beginning of the file.  If the cursor is
  2731. beyond the tagged line for which RETRO will search then MicroEMACS will not
  2732. find the line.
  2733.  
  2734.    To guarantee that the search will succeed, MicroEMACS must scan the
  2735. entire file.  This can be accomplished if the cursor is always at the
  2736. beginning of the file when the search is begun.  Thus, a Top-of-File command
  2737. should immediately precede the Text-Search operation.  MicroEMACS recognizes
  2738. a press of the <Home> key as an instruction to move the cursor to the start
  2739. of the file.
  2740.  
  2741.    The correct RETROCON input will look like this:
  2742.  
  2743.                Text-Search keystrokes: <Home><Ctrl-S><Ctrl-@>
  2744.  
  2745.    When RETRO is performing its retrieval operation, it will append to the
  2746. above keystrokes the search-string for which to search.  The search-string
  2747. will be the contents of the tagged line, including the ending carriage
  2748. return (but not the linefeed).
  2749.  
  2750.    Note: The resident RETRO program assumes that all lines in tagfiles end
  2751. with a carriage return-linefeed pair.  PCTAGS will always generate such
  2752. files.  If you manually modify a tagfile, you must be certain that each line
  2753. ends with the necessary termination pair.
  2754.  
  2755.    Before MicroEMACS will begin the search, the Meta key (<Esc>) must be
  2756. pressed.  RETRO should send this to MicroEMACS immediately after sending it
  2757. the search-string.  When RETROCON asks for any additional keys required to
  2758. begin the MicroEMACS search, the <Esc> key should be specified.
  2759.  
  2760.              Additional Text-Search keystrokes: <Esc><Ctrl-@>
  2761.  
  2762.    Next, RETROCON will prompt for the keystrokes necessary to execute a
  2763. Jump-to-Line command.  RETRO will invoke such an operation when the line
  2764. number of the tagged line is stored in the tagfile.  (This occurs when
  2765. PCTAGS is run with the -L option.)  MicroEMACS uses the <Esc>-G key sequence
  2766. to invoke the command so the appropriate RETROCON input is:
  2767.  
  2768.                Jump-to-Line keystrokes: <Esc><G><Ctrl-@>
  2769.  
  2770.    Finally, RETROCON will ask for any keystrokes RETRO should send to
  2771. MicroEMACS at the completion of its retrieval operation.  These keys can be
  2772. used to customize the RETRO retrieval operation to your preferences.  For
  2773. example, when MicroEMACS locates a matching search-string, the cursor will
  2774. be located at the end of the string.  Because the ending carriage return was
  2775. included in the search, the cursor will actually be on the line below the
  2776. tagged line.
  2777.  
  2778.    It might be nice to position the cursor at the beginning of the tagged
  2779. line.  This is easily done by moving the cursor to the start of the current
  2780. line using the <Ctrl-A> key and up one row with the <Up> arrow key.
  2781.  
  2782.    The RETROCON input to achieve this is:
  2783.  
  2784.                   Custom keystrokes: <Ctrl-A><Up><Ctrl-@>
  2785.  
  2786.    Of course, you do not have to enter the same keystrokes to customize your
  2787. retrieval operation.  Choose any keys you like or none at all.
  2788.  
  2789.    At this point, the RETRO configuration is nearly complete.  The RETROCON
  2790. main menu will be displayed and you will be able to re-enter any of the
  2791. keystroke fields or save your configuration to the RETRO.COM file.
  2792.  
  2793.  
  2794. Configuring RETRO for the Quick Environments
  2795. --------------------------------------------
  2796.    This section will describe how RETROCON can be used to configure the TSR
  2797. RETRO to work with the Quick environments, like QuickC and QuickPascal.  The
  2798. example shows how to configure QuickPascal v1.00 using its default keystroke
  2799. assignments.
  2800.  
  2801.    While all the Quick environments are similar, each has their own
  2802. characteristics.  Even the different versions of the same Quick language may
  2803. include changes that would effect RETRO's retrieval operation.  Thus, the
  2804. exact configuration for a particular Quick environment may differ from the
  2805. example configuration described here.  If you use a Quick environment other
  2806. than QuickPascal v1.00, you should use this example as a starting point, but
  2807. do not assume it will work correctly with your particular system.
  2808.  
  2809.    Another caveat must be mentioned when using RETRO to load files into a
  2810. Quick environment.  It has been found that version 1.01 of the QuickC
  2811. environment cannot be made to load a file using the resident RETRO.  This is
  2812. due to certain characteristics of that version in the loading of files and
  2813. recognition of keystrokes.  Because there are several Quick environments
  2814. available, it is impossible for us to test every version of each environment
  2815. for RETRO compatibility.
  2816.  
  2817.    We suggest that you use the example configuration described in this
  2818. section for QuickPascal v1.00 as a starting point.  This configuration does
  2819. work for that environment (however, only with limitations described below).
  2820. If it does not work in your Quick environment, try making some adjustments.
  2821. This may include using other keystrokes to invoke the editor commands or
  2822. defining hotkeys that do (or do not) use the <Alt> key.  (Depending on the
  2823. Quick version and language, pressing the <Alt> key alone may activate the
  2824. menu system.  In some environments, it may be desirable to have the menu
  2825. active during the retrieval operation.  If so, include the <Alt> key as part
  2826. of the RETRO hotkey.  Invoking RETRO will then activate the menu system at
  2827. the same time.)
  2828.  
  2829.    If you try everything and still cannot get RETRO to consistently load
  2830. files, we have two suggestions:
  2831.  
  2832.    (1) Do not use the resident RETRO to load files into the Quick
  2833.    environment.  Instead, install RETRO with the -I option.  This will cause
  2834.    the retrieval operation to simply show the retrieved tag information,
  2835.    such as the source file's name and the tagname's line number.  The file
  2836.    can then be loaded into Quick manually.  While not as useful, this is
  2837.    still faster than searching through the files using some other method.
  2838.  
  2839.    (2) Use another editor.  If you are at the point where PC-TAGS is useful
  2840.    to you, i.e. you are generating programs consisting of multiple files,
  2841.    then you have probably outgrown the Quick environment.  A stand-alone
  2842.    editor would provide many useful functions you would come to appreciate.
  2843.    Cost and the time required to learn a new editor should not be a problem.
  2844.    There are many free (public domain) and low-cost (shareware) editors
  2845.    available today and nearly all of them can be configured to use the same
  2846.    keystrokes you are accustomed to using in the Quick environment.
  2847.  
  2848.    Also, if RETRO is popped up from the DOS command prompt, it should not be
  2849. instructed to load a file into the Quick environment.  As part of Quick's
  2850. startup initialization, it clears the keyboard buffer.  Any keystrokes RETRO
  2851. had placed in the buffer up to that point are lost.  Since Quick never
  2852. receives all the keystrokes that RETRO sent to it, the retrieval operation
  2853. fails.  Quick will lose keystrokes even if RETRO is installed with the -KS
  2854. option for slow keystroke stuffing.
  2855.  
  2856.    Using QuickPascal with the configuration described below contains one
  2857. major limitation: if the source file RETRO wishes to load is already loaded,
  2858. the retrieval operation will fail.  This occurs because when an attempt is
  2859. made to load another copy of a loaded file, the Quick environment pops up a
  2860. window stating the file is already loaded.  It then waits for a user
  2861. keystroke, such as <Space> or <Enter>, before continuing.  RETRO cannot know
  2862. that the file was already loaded and, therefore, continues sending Quick the
  2863. keystrokes necessary to begin a search operation.  Quick will "eat" these
  2864. keys until either a <Space> or <Enter> is encountered, at which point it
  2865. will return to the original file.  Any additional Text-Search keys that
  2866. Quick has not eaten will be inserted into the text of the file.  You will
  2867. have to delete these characters manually.
  2868.  
  2869.    If the source file RETRO attempts to load is not already loaded, the
  2870. retrieval operation will succeed.
  2871.  
  2872.    It is understandable if, due to the serious limitations, you decide to
  2873. not use the resident RETRO to load files into the Quick environments.
  2874. However, as mentioned previously, RETRO can still prove useful by informing
  2875. you of the file containing a desired tag.
  2876.  
  2877.    The following example will describe how to use RETROCON to configure the
  2878. resident RETRO to load files using QuickPascal v1.00.
  2879.  
  2880.    The first input for which RETROCON will prompt is the name of the editor
  2881. with which you will be using RETRO.  This will change depending upon which
  2882. Quick environment you will be using.  For our example, the QuickPascal
  2883. program's name is QP. Thus, RETROCON's prompt and our response would look
  2884. like this:
  2885.  
  2886.                 Editor name and options: qp<Ctrl-@>
  2887.  
  2888.    Notice that the end of the input was terminated by a <Ctrl-@>.  Do not
  2889. hit the <Enter> key to terminate input; all RETROCON input is terminated by
  2890. <Ctrl-@>.
  2891.  
  2892.    RETROCON will next ask for the keystrokes necessary to execute a Load-
  2893. File command.  QuickPascal's method of executing a "load" command requires
  2894. some special setup of the hotkeys used to invoke the resident RETRO.
  2895. QuickPascal will load a file when the key sequence <Alt-F><O> is pressed;
  2896. the <Alt> key activating the menu structure at the top of the screen.
  2897. Unfortunately, the QuickPascal environment does not recognize an <Alt-F>
  2898. keystroke passed to it from RETRO (all non-Quick editors do recognize it).
  2899.  
  2900.    For RETRO to load a file into QuickPascal, the menu must already be
  2901. active when RETRO is invoked.  This can be achieved by including the <Alt>
  2902. key as part of the RETRO hotkey, as is the case with the default hotkeys,
  2903. <Alt-A> and <Alt-P>.  Thus, pressing the <Alt>-hotkey to invoke RETRO will
  2904. activate the Quick menu system, too.
  2905.  
  2906.    If you redefine a RETRO hotkey with the -H option, the <Alt> key MUST be
  2907. included as part of it.
  2908.  
  2909.    With the menu activated, all RETRO needs to send to Quick to load a file
  2910. are the <F> and <O> keys.  Thus, the correct RETROCON input is:
  2911.  
  2912.                    Load-File keystrokes: <F><O><Ctrl-@>
  2913.  
  2914.    Please note that if the file RETRO attempts to load is already loaded,
  2915. the retrieval operation will likely fail.  This limitation was mentioned
  2916. earlier in this section.
  2917.  
  2918.    After receiving the Load-File keystrokes, RETROCON will prompt you for
  2919. the keys necessary to invoke a Text-Search.  Although Quick Pascal will
  2920. recognize several different keystrokes as Search invocations, only <Ctrl-F3>
  2921. should be used by RETRO.  All the others are either not recognized by Quick
  2922. when RETRO sends them or they have undesirable side effects.  The correct
  2923. response to RETROCON when prompted for the Text-Search keystrokes is:
  2924.  
  2925.                 Text-Search keystrokes: <Ctrl-F3><Ctrl-@>
  2926.  
  2927.    Quick will begin the search operation immediately after receiving the
  2928. carriage return RETRO sends it at the end of the search-string.  Thus, no
  2929. additional keys need be sent to execute the search operation.  When RETROCON
  2930. asks for the additional search keys, simply enter <Ctrl-@>.
  2931.  
  2932.                 Additional Text-Search keystrokes: <Ctrl-@>
  2933.  
  2934.    RETROCON will then ask for the keys necessary to invoke a Jump-to-Line
  2935. command.  Quick does not support such an operation, so simply enter
  2936. <Ctrl-@>.
  2937.  
  2938.                     Jump-to-Line keystrokes: <Ctrl-@>
  2939.  
  2940.    Finally, RETROCON will prompt for any keystrokes you wish to send to
  2941. Quick at the completion of the retrieval operation.  Since Quick reasonably
  2942. positions the tagged line in the middle of the screen already, no real
  2943. customization is required, however, you may enter any keys here that you
  2944. wish (as long as they are terminated with <Ctrl-@>).
  2945.  
  2946.                         Custom keystrokes: <Ctrl-@>
  2947.  
  2948.    The RETRO configuration is now nearly complete.  The RETROCON main menu
  2949. will be displayed and you will be able to re-enter any of the keystroke
  2950. fields or save your configuration to the RETRO.COM file.  The next time you
  2951. run RETRO and QuickPascal, the RETRO retrieval capabilities will be
  2952. avaiable for your use.
  2953.  
  2954.  
  2955.  
  2956.                     Using RETROCL - The Command-Line RETRO
  2957.                     --------------------------------------
  2958.    The command-line method of RETRO retrieval is implemented in the
  2959. RETROCL.EXE (RETRO Command-Line) program.
  2960.  
  2961.    There are several situations in which RETROCL is useful.  For example, if
  2962. you are using an editor that does not support the loading of multiple files,
  2963. RETROCL can be used to inform you of the appropriate file to load (as can
  2964. the resident RETRO).
  2965.  
  2966.    Also, since RETROCL is able to extract source files from version-control
  2967. libraries, it is a logical companion to the TSR RETRO.  The macro RETRO
  2968. method cannot be invoked from the DOS command prompt, so RETROCL can be used
  2969. in such instances.  If you are running under the OS/2 operating system and
  2970. are using an editor that does not have RETRO macro support, RETROCL is
  2971. really the only way to go.  (The resident RETRO method is not currently
  2972. supported under OS/2.)  A copy of RETROCL that will run under both the DOS
  2973. and OS/2 operating systems is included as part of the registered OS/2
  2974. version of the PC-TAGS package.
  2975.  
  2976.    RETROCL shares much of the functionality of the macro and resident
  2977. retrieval methods.  Complete explanations of common operations have already
  2978. been described in previous sections and will not be repeated here.  Instead,
  2979. the supported command-line functions will only be mentioned.  Refer to the
  2980. earlier sections for details on each operation.
  2981.  
  2982.    As its name implies, RETROCL is executed from the DOS command prompt.
  2983. The correct syntax is:
  2984.  
  2985.                        RETROCL [-options] tagname
  2986.  
  2987.    In the unregistered version of RETROCL, a random two-digit number will be
  2988. displayed when it is first executed.  You must re-enter the displayed number
  2989. in order for RETROCL to continue its retrieval operation.  This user input
  2990. is not required in the registered versions of PC-TAGS.  Its purposes are to
  2991. remind you that you are running an unregistered evaluation version and to
  2992. act as an impetus to register.  You can receive a registered version by
  2993. sending your paid registration form contained in the file ORDERFRM to
  2994. Moderne Software.
  2995.  
  2996.    The "tagname" is the name of the function or explicit tag that you wish
  2997. to retrieve.  All the guidelines that apply to specifying a tagname using
  2998. the macro and resident retrieval methods also apply to RETROCL.  This means
  2999. that a tagname may contain alphabetic and numeric characters.  Underscore
  3000. and period characters are also supported.  By default, the tagname is case
  3001. sensitive, but that can be changed by specifying the -C option described
  3002. below.
  3003.  
  3004.    Including an "-options" argument on the RETROCL command line will alter
  3005. the default operation.  Options are not required.  If they are specified,
  3006. they must be preceded by a dash(-).  The case of the options is not
  3007. important.  A list of the recognized options and their descriptions follows.
  3008.  
  3009.    -C        -- Tagname Search is Case-Insensitive
  3010.  
  3011.                 By default, the tagname search is case-sensitive.  If the -C
  3012.                 option is specified, the search will ignore case.
  3013.  
  3014.    -V        -- Verbose Output
  3015.  
  3016.                 If the tagname is found, RETROCL will simply display the
  3017.                 name of the source file containing it.  If the retrieved tag
  3018.                 information includes the line number on which the tagname is
  3019.                 defined, the line number will be output after the source
  3020.                 file's name.  Sample output is shown below.
  3021.  
  3022.                         c:\source\prog\edit.c
  3023.                         c:\src\pascal\getline.pas 143
  3024.  
  3025.                 More wordy output can be generated by including the -V
  3026.                 option on the RETROCL command line.  No additional
  3027.                 information of any use will be displayed, but the format may
  3028.                 seem more warm-hearted.
  3029.  
  3030.    If RETROCL options are to be used, chances are that the same options will
  3031. be desired every time RETROCL is executed.  Rather than enter the same
  3032. options each time, an environment variable called "RETROCL" can be defined.
  3033. The RETROCL environment variable should be assigned those options you wish
  3034. the RETROCL program to act upon.  RETROCL will check the environment
  3035. variable every time it is executed and process the options assigned to it as
  3036. if they had been specified on the command line.
  3037.  
  3038.    Sample RETROCL environment variables are shown below.
  3039.  
  3040.                              >SET RETROCL=-c
  3041.                              >SET RETROCL=-v
  3042.                              >SET RETROCL=-c -v
  3043.  
  3044.    Like the other retrieval methods, RETROCL will search for a matching
  3045. tagname in all the files with a ".TAG" extension in the current directory of
  3046. the current drive.  Also like the other methods, RETROCL supports the
  3047. designation of tagfiles in a RETRO environment variable.  Multiple tagfiles
  3048. are separated by a semicolon and the DOS wildcard characters are supported.
  3049.  
  3050.    RETROCL supports the RETROEXEC environment variable in the same manner as
  3051. the macro method.  Details about using RETROEXEC can be found in the section
  3052. "Macro-Specific RETRO Operations."
  3053.  
  3054.    Since RETROCL is executed from the command line, it cannot load a source
  3055. file into your editor.  Also, the tagname must be explicitly specified on
  3056. the RETROCL command line; there is no support for grabbing the word above
  3057. the cursor as there is in the macro and resident versions.
  3058.  
  3059.    Because of its support for RETROEXEC, RETROCL works well with the
  3060. resident method when version-control libraries are used.  If the TSR RETRO
  3061. says that it cannot locate a file, RETROCL can be executed to scan for the
  3062. same tagname.  Provided everything is set up correctly, RETROCL will extract
  3063. the source file from the library, thereby making it available for loading by
  3064. the TSR RETRO.
  3065.  
  3066.    Examples of RETROCL invocations are:
  3067.  
  3068.                 >RETROCL get_input
  3069.                 >RETROCL -v AddNumbers
  3070.                 >RETROCL Display.String
  3071.  
  3072.  
  3073.  
  3074.                           RETRO Functionality Table
  3075.                           -------------------------
  3076.    Due to the large overlap of functionality between the various retrieval
  3077. methods, it may be initially confusing to remember the capabilities
  3078. supported by each version.  To reduce such confusion, the following table
  3079. depicts the operations supported by each retrieval method.
  3080.  
  3081.                                                       RETRO METHOD
  3082. Operation                                     Macro     Resident   Cmd-Line
  3083. --------------------------------------       --------   --------   --------
  3084. Accepts user-input tagname                     Yes        Yes        Yes
  3085.  
  3086. Uses tagname above cursor                      Yes        Yes        No
  3087.  
  3088. Multiple tagfiles specified in RETRO
  3089.   environment variable                         Yes        Yes        Yes
  3090.  
  3091. Configurable tagname case-sensitivity          Yes        Yes        Yes
  3092.  
  3093. Support for RETROEXEC environment variable     Yes        No         Yes
  3094.  
  3095. Loads source file and positions cursor         Yes        Yes        No
  3096.  
  3097. Can be invoked from DOS prompt                 No         Yes        Yes
  3098.  
  3099. Can be invoked from within editor              Yes        Yes        No
  3100.  
  3101.  
  3102.  
  3103.                                 Tagfile Format
  3104.                                 --------------
  3105.    The internal structure of tagfiles created by PCTAGS is of no concern to
  3106. the average PCTAGS and RETRO user.  Tagfiles can safely be thought of as
  3107. black boxes containing unknown mysteries in bizarre and ancient languages.
  3108.  
  3109.    However, if you use an editor that supports a macro language and a
  3110. pre-written RETRO macro is not included in the PC-TAGS software package, you
  3111. may want to write your own macro to retrieve tag information.  In this case,
  3112. an understanding of the tagfile contents will be required information.  For
  3113. such people and for those who are just plain curious, the format of
  3114. information in a tagfile is documented here.
  3115.  
  3116.    Tagfiles are made up of standard ASCII characters.  They may be examined
  3117. by most text editors.  It is not recommended that tagfiles be modified by
  3118. anyone or anything other than the PCTAGS program.  An editing mistake could
  3119. cause RETRO to fail in its retrieval operation.
  3120.  
  3121.    A tagfile contains three basic pieces of information for each function
  3122. definition and explicitly-tagged line in a source file.  These pieces of
  3123. information are:
  3124.  
  3125.         1) the function name (also called the "tagname")
  3126.         2) the complete file name of the source file
  3127.         3) either A) a copy of the line containing the tagged
  3128.                      function or
  3129.                   B) the tagged function's line number within the
  3130.                      source file (one-based)
  3131.  
  3132.    These three pieces of information are stored on a single line in the
  3133. tagfile.  A single space separates each piece of information from the
  3134. others.  A sample tagfile line would look like this:
  3135.  
  3136. TagName c:\dir\filename.ext ^PROCEDURE TagName( VAR i : INTEGER )
  3137.  
  3138.    The first piece of tag information is always the tagname.  It will always
  3139. begin in the first column of the line.  The case of the tagname will be
  3140. unchanged from that which was extracted from the source file.  In its search
  3141. operation, RETRO compares the tagname to the name that was either extracted
  3142. from above the cursor or entered by the user via the prompt.
  3143.  
  3144.    The second bit of tag information is the name of the file containing the
  3145. tagged function.  The file name always contains a drive and complete path
  3146. specification.  The path separator is always a backslash character (never a
  3147. slash).  All characters of the file name are always in lower case.
  3148.  
  3149.    The file name may contain a prefix of one or more special characters
  3150. which have meaning to RETRO.  There are currently two supported special
  3151. characters.  They are:
  3152.  
  3153.         '!'  -- instructs RETRO to execute the RETROEXEC special command if
  3154.                 the source file cannot be found.  Placed on tagline when -E
  3155.                 option is specified on PCTAGS command line.
  3156.  
  3157.         '#'  -- tells RETRO that the third piece of information in the
  3158.                 tagfile is a line number (as opposed to text).  Placed on
  3159.                 tagline when -L option is specified on PCTAGS command line.
  3160.  
  3161.    Some sample taglines containing special characters are:
  3162.  
  3163. TagName !c:\dir\filename.ext ^PROCEDURE TagName( VAR i : INTEGER )
  3164. TagName #c:\dir\filename.ext ^14
  3165. TagName !#c:\dir\filename.ext ^14
  3166.  
  3167.    The third and final piece of tag information is either a copy of the line
  3168. containing the tag definition or the definition's line number within the
  3169. source file.  The information type, either text or numeric, can be
  3170. determined by the presence or absence of the '#' prefix on the file name.
  3171. If the '#' prefix exists, the line number is specified; if the prefix does
  3172. not exist then a copy of the definition line is included.
  3173.  
  3174.    A caret(^) character marks the start of the third piece of information.
  3175. This is necessary because the first character(s) in the copied line may be
  3176. whitespace (blanks or tabs).  For example,
  3177.  
  3178. GetInput d:\prog\src\inchar.pas ^    FUNCTION GetInput()
  3179.  
  3180.    If a line number is specified in the third piece of tag information, it
  3181. will begin immediately after the caret.  Line numbers in PCTAGS-processed
  3182. source files begin with number one.  In other words, the first line in a
  3183. file is line number 1, the second line is number 2 and so on.
  3184.  
  3185.  
  3186.  
  3187.                  The Association of Shareware Professionals
  3188.                  ------------------------------------------
  3189.  
  3190.    PC-TAGS is produced by Steven Calwas, a member of the Association of
  3191. Shareware Professionals (ASP).  ASP wants to make sure that the shareware
  3192. principle works for you.  If you are unable to resolve a shareware-related
  3193. problem with an ASP member by contacting the member directly, ASP may be
  3194. able to help.  The ASP Ombudsman can help you resolve a dispute or problem
  3195. with an ASP member, but does not provide technical support for members'
  3196. products.  Please write to the ASP Ombudsman at P.O. Box 5786, Bellevue, WA
  3197. 98006 or send a CompuServe message via EasyPlex to ASP Ombudsman 70007,3536.
  3198.  
  3199.  
  3200.  
  3201.                      Send Us Your Comments and Suggestions
  3202.                      -------------------------------------
  3203.  
  3204.    We would love to hear your suggestions, comments, and enhancement ideas
  3205. concerning the PC-TAGS software package.  Please send your suggestions to:
  3206.  
  3207.                                 Steven Calwas
  3208.                                Moderne Software
  3209.                                 P.O. Box 3638
  3210.                           Santa Clara, CA 95055-3638
  3211.  
  3212.                               _______
  3213.                          ____|__     |               (tm)
  3214.                       --|       |    |-------------------
  3215.                         |   ____|__  |  Association of
  3216.                         |  |       |_|  Shareware
  3217.                         |__|   o   |    Professionals
  3218.                       -----|   |   |---------------------
  3219.                            |___|___|    MEMBER
  3220.