home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / 676 / CEXPLORE / CFT_CST.DOC next >
Text File  |  1993-10-07  |  161KB  |  3,844 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.                   CXT       (TM) C EXPLORATION TOOLS
  13.  
  14.  
  15.  
  16.                   CFT       (TM) C FUNCTION TREE GENERATOR
  17.                   CFT386    (TM) C FUNCTION TREE GENERATOR
  18.  
  19.  
  20.                   CST       (TM) C STRUCTURE TREE GENERATOR
  21.                   CST386    (TM) C STRUCTURE TREE GENERATOR
  22.  
  23.  
  24.                   CFTN      (TM) C FUNCTION TREE NAVIGATOR
  25.                   CSTN      (TM) C STRUCTURE TREE NAVIGATOR
  26.  
  27.  
  28.                   Version 2.12, July 1993
  29.  
  30.  
  31.                   Copyright (C) Juergen Mueller (J.M.) 1988-1993,
  32.                   Federal Republic of Germany (GER).
  33.                   All rights reserved world-wide.
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.                                       - 1 -
  62.  
  63.  
  64.                              DISCLAIMER OF WARRANTY
  65.  
  66.         THIS  SOFTWARE  AND  ACCOMPANYING  WRITTEN  MATERIALS  (INCLUDING
  67.         INSTRUCTIONS FOR USE) IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF
  68.         ANY  KIND,   EITHER  EXPRESS  OR  IMPLIED,   INCLUDING,   WITHOUT
  69.         LIMITATION,  THE IMPLIED WARRANTIES OF MERCHANTIBILITY OR FITNESS
  70.         FOR  A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE RESULTS AND
  71.         PERFORMANCE OF THE SOFTWARE IS WITH YOU.
  72.  
  73.         IN NO EVENT WILL THE AUTHOR AND COPYRIGHT HOLDER  BE  LIABLE  FOR
  74.         DAMAGES,  INCLUDING  ANY  LOST  PROFITS,  LOST  MONIES,  OR OTHER
  75.         DIRECT,  INDIRECT,  GENERAL,  SPECIAL,  INCIDENTAL,  EXEMPLARY OR
  76.         CONSEQUENTIAL  DAMAGES  ARISING  IN  ANY  WAY  OUT  OF THE USE OR
  77.         INABILITY TO USE THIS PROGRAM (INCLUDING,  BUT  NOT  LIMITED  TO,
  78.         PROCUREMENT   OF   SUBSTITUTE   GOODS   OR   SERVICES,   BUSINESS
  79.         INTERRUPTION,  LOSS OF DATA OR DATA BEING RENDERED INACCURATE  OR
  80.         LOSSES  SUSTAINED  BY  YOU  OR  THIRD PARTIES OR A FAILURE OF THE
  81.         PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) AND ON ANY THEORY  OF
  82.         LIABILITY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR
  83.         FOR ANY CLAIM BY ANY OTHER PARTY.
  84.  
  85.  
  86.                                  ACKNOWLEDGEMENT
  87.  
  88.         BY  USING  THIS  SOFTWARE YOU ACKNOWLEDGE THAT YOU HAVE READ THIS
  89.         LIMITED WARRANTY AND ACCOMPANYING  REMARKS,  UNDERSTAND  IT,  AND
  90.         AGREE  TO  BE  BOUND BY ITS TERMS AND CONDITIONS.  YOU ALSO AGREE
  91.         THAT THIS IS THE COMPLETE AND EXCLUSIVE  STATEMENT  OF  AGREEMENT
  92.         BETWEEN   THE  PARTIES  AND  SUPERSEDE  ALL  PROPOSALS  OR  PRIOR
  93.         AGREEMENTS, ORAL OR WRITTEN, AND ANY OTHER COMMUNICATIONS BETWEEN
  94.         THE PARTIES  RELATING  TO  THE  SUBJECT  MATTER  OF  THE  LIMITED
  95.         WARRANTY.
  96.  
  97.  
  98.         You  are expressly prohibited from selling this software or parts
  99.         of it in any form,  circulate it in any  incomplete  or  modified
  100.         form,  distribute  it  with another product (except on CD-ROM) or
  101.         removing this notice.  No one may modify  or  patch  any  of  the
  102.         executable  files  in  any  way,  including,  but not limited to,
  103.         decompiling,  disassembling or otherwise reverse engineering this
  104.         software in whole or part.
  105.  
  106.         This software and documentation is Copyright (C) by
  107.  
  108.                        Juergen Mueller
  109.                        Aldingerstrasse 22
  110.                        D-70806 Kornwestheim
  111.                        Federal Republic of Germany (GER)
  112.  
  113.         The  documentation  may be distributed verbatim,  but changing is
  114.         not allowed. The informations and specifications in this document
  115.         are subject to change without notice.
  116.  
  117.         THIS  VERSION  OF  THE  DOCUMENTATION,   SOFTWARE  AND  COPYRIGHT
  118.         SUPERSEDES ALL PREVIOUS VERSIONS.
  119.  
  120.  
  121.  
  122.                                       - 2 -
  123.  
  124.  
  125.                                      LICENCE
  126.  
  127.         This  version  of  CFT  and  CST  is  NOT  public  domain or free
  128.         software, but is being distributed as SHAREWARE.
  129.  
  130.         Non-registered users of  this  software  are  granted  a  limited
  131.         license  for  a 30-day evaluation period starting from the day of
  132.         the first use to make an evaluation copy for trial  use  for  the
  133.         express  purpose of determining whether this software is suitable
  134.         for their needs.  At the end of  this  trial  period  you  should
  135.         either  register your copy or discontinue using CFT and CST.  The
  136.         use of unregistered copies  of  this  software,  outside  of  the
  137.         initial  30-day  trial,  by  any person,  business,  corporation,
  138.         government agency or any other entity is strictly prohibited.
  139.  
  140.         This means that if you use this software, then you should pay for
  141.         your  copy.  This  software  is  NOT  free,   but  you  have  the
  142.         opportunity  to try it before you buy it.  Either pay for it,  or
  143.         quit using it.  A registration entitles you to use your  copy  of
  144.         this software on any and all computers available to you. If other
  145.         people  have  access  to  this  software  or  may  use  it,  then
  146.         additional copies or a site licence should be purchased.
  147.  
  148.         All users are granted a limited licence to copy CFT and CST  only
  149.         for the trial use of others and subject to the above limitations.
  150.         This licence does NOT include distribution, selling or copying of
  151.         this  software  package  in  connection with any other product or
  152.         service or for distribution in any incomplete or  modified  form.
  153.         Operators  of  electronic  bulletin  board  systems  and software
  154.         servers (like INTERNET FTP-Servers) are encouraged  to  post  CFT
  155.         and  CST  for  downloading  by their users,  as long as the above
  156.         conditions are met.
  157.  
  158.         This package is expected  to  be  distributed  by  shareware  and
  159.         freeware channels, but the fees paid for "distribution" costs are
  160.         strictly exchanged between the distributor and the recipient, and
  161.         the  author  makes  no  express  or  implied warranties about the
  162.         quality  or  integrity  of  such  indirectly   acquired   copies.
  163.         Distributors  and  users may obtain the package directly from the
  164.         author by following the ordering procedures in  the  REGISTER.DOC
  165.         file.
  166.  
  167.                               REGISTRATION REMINDER
  168.  
  169.         Unregistered  copies  of  CXT  programs  like CFT or CST are 100%
  170.         fully functional.  I make them this way so that you  can  have  a
  171.         real look at them, and then decide whether they fit your needs or
  172.         not.  This work depends on your honesty.  If you use it, I expect
  173.         you to pay for it.  When you pay for the shareware you like,  you
  174.         are voting with your pocketbook, and will encourage me and others
  175.         to develop more of these kinds of products.
  176.  
  177.         THANK YOU FOR SUPPORTING THE SHAREWARE CONCEPT
  178.  
  179.  
  180.  
  181.  
  182.  
  183.                                       - 3 -
  184.  
  185.  
  186.                   TABLE OF CONTENTS
  187.  
  188.                   1    INTRODUCTION
  189.                   2    PROGRAM DESCRIPTION
  190.                   3    C-LANGUAGE IMPLEMENTATION AND C-PREPROCESSOR
  191.                   4    C++ SOURCE CODE
  192.                   5    ASSEMBLER SOURCE CODE
  193.                   6    DATABASE GENERATION
  194.                   7    PROGRAM LIMITATIONS
  195.                   8    IMPROVING EXECUTION SPEED
  196.                   9    COMMAND LINE SYNTAX DESCRIPTION
  197.                   10   OUTPUT DESCRIPTION AND INTERPRETATION
  198.                   11   INTEGRATION INTO PROGRAMMING ENVIRONMENTS
  199.                   12   TOOLS FOR DATABASE PROCESSING
  200.                   13   TROUBLE SHOOTING
  201.                   14   REFERENCES
  202.                   15   TRADEMARKS
  203.  
  204.                   APPENDIX 1: PRECOMPILER DEFINES
  205.                   APPENDIX 2: RESERVED KEYWORDS
  206.                   APPENDIX 3: EFFICIENCY
  207.                   APPENDIX 4: SYSTEM REQUIREMENTS
  208.                   APPENDIX 5: INSTALLATION
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.                                       - 4 -
  245.  
  246.  
  247.         1    INTRODUCTION
  248.  
  249.         CFT  and  CST and their 32 bit protected mode versions CFT386 and
  250.         CST386  are  powerful  program   development,   maintenance   and
  251.         documentation  tools.  They provide the programmer the ability to
  252.         analyse the C source code of applications,  no matter how big  or
  253.         complex  they  are.  CFT  and CST are also very useful to explore
  254.         unknown source code  and  to  get  complete  overview  about  its
  255.         internal structure. The re-engineering of old and/or undocumented
  256.         source  code  becomes an easy task with CFT and CST.  These tools
  257.         help the programmer to analyse,  identify,  locate and access all
  258.         parts  of  a large software system.  They are designed to support
  259.         software reuse, maintenance and reliability.
  260.  
  261.         By preprocessing,  scanning  and  analysing  the  entire  program
  262.         source  code  as a single unit,  these programs build an internal
  263.         representation of the function call hierarchy (CFT)  and  of  the
  264.         data structure relations (CST). The resulting output shows from a
  265.         global   perspective   the   interdependencies  and  hierarchical
  266.         structure between the functions or data types of the whole, multi
  267.         file,  software project.  Several features and options allow  the
  268.         user  to  customize the generated hierarchy tree chart output and
  269.         to get a large set of useful informations about the source  code.
  270.         The hierarchy structure is always up-to-date because it relies on
  271.         the  original  source  code as the primary source of information.
  272.         Written software  documentation  often  differs  from  that  what
  273.         really has been coded,  so the source code itself is the ultimate
  274.         documentation.
  275.  
  276.         An important feature is the database generation.  It  allows  the
  277.         recalling  of  informations without reprocessing the source code.
  278.         The database can again be read in  by  CFT  and  CST  to  produce
  279.         different  outputs  or to add new files to the database.  Special
  280.         recall programs called CFTN and CSTN  allow  fast  searching  for
  281.         items  in  the  database.  These  programs can be used within any
  282.         environment,  for example on the DOS command line or from  inside
  283.         editors  like  BRIEF,  QEDIT or MicroEMACS (DOS and WINDOWS),  to
  284.         provide a full software project management system with access  to
  285.         all  functions  and  data  types  with  just  a keystroke.  These
  286.         features make a comfortable "hypertext source  code  browser  and
  287.         locator"  system  out  of  your  editor.  A project consisting of
  288.         several  files  appears  to  the  developer  as  if  it  were   a
  289.         'whole-part' of software.
  290.  
  291.         A  list  of  all  functions/data  types  and  source files can be
  292.         written as formatted ASCII text files and can be  used  as  input
  293.         for   other   programs   like   word  processors  or  spreadsheet
  294.         calculators.
  295.  
  296.         A useful option of CST is the possibility to  generate  a  source
  297.         file   with   which   size   and  byte  offset  calculations  for
  298.         structures/unions and their members can be performed. This option
  299.         is useful especially to support any kind of  error  searching  or
  300.         hardware  debugging,   for  example  with  an  ICE,  or  if  data
  301.         structures  have  to  be  exchanged  between  different  hardware
  302.         platforms.
  303.  
  304.  
  305.                                       - 5 -
  306.  
  307.  
  308.  
  309.         CFT  can  also  be used to analyse "C"-like languages as they are
  310.         used  by  several  commercial  programs.  The  macro  programming
  311.         languages of the BRIEF, EPSILON and ME editors are such languages
  312.         and can be handled by CFT.
  313.  
  314.         CFT  and  CST  have  been  used  and tested since 1989 in several
  315.         projects with applications ranging from single source files  over
  316.         medium  sized  projects  (like CFT and CST themselves) up to very
  317.         large software projects with hundreds of source and include files
  318.         (mixed C and assembler code), more than 6 MB of source code, more
  319.         than 200000 lines, 2000 functions and 500 data types.
  320.  
  321.         A lot of public available sources  (e.g.  GNU-C  compiler,  GNU-C
  322.         library,   GNU-EMACS,   MicroEMACS,   NCSA  TCP/IP  communication
  323.         software package, SUIT - The Simple User Interface Toolkit, NIHCL
  324.         - The  National  Institute  of  Health  C++  class  library,  F2C
  325.         Fortran-to-C translator,  several projects from Dr. Dobbs Journal
  326.         like  DFLAT,   BOB,   XSCHEME)  were  processed  (with  sometimes
  327.         surprising results!) during the development and have been used to
  328.         test   and  improve  the  features,   reliability,   correctness,
  329.         robustness and execution speed of  CFT,  CST  and  their  related
  330.         utilities.
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.                                       - 6 -
  367.  
  368.  
  369.         2    PROGRAM DESCRIPTION
  370.  
  371.         CFT  builds  a  hierarchy  tree  chart of every function with the
  372.         called functions in it's own function block.  These functions are
  373.         again  used  as  a starting point for subsequent function blocks.
  374.         Starting the tree chart with the "main"-function it will  display
  375.         the  complete  function  flow  chart  and  the function hierarchy
  376.         dependency  of  the  whole  application  with  all  user  defined
  377.         functions and the called library functions.  Prototyped but never
  378.         defined or called functions are also detected. Recursive calls of
  379.         functions are recognized and displayed,  even over  several  call
  380.         levels.  Repeated  calls of previously displayed functions in the
  381.         output tree chart are detected and a message will be given with a
  382.         reference to their first appearance.  This prevents the output of
  383.         complete subtrees displayed earlier. Overloaded C++ functions and
  384.         operators  are  recognized  and  displayed  with  the  number  of
  385.         overloadings.
  386.  
  387.         CST acts similar to CFT but it works on  data  types  like  basic
  388.         types,  structures,  unions,  enumerations  and C++ classes.  CST
  389.         builds a hierarchy tree chart of every structure and  union  data
  390.         type  with  their internal elements and their related data types.
  391.         If these data types are again structures, unions or classes,  the
  392.         substructures will again be displayed.  CST recognizes data types
  393.         defined by 'typedef' and derived from other data types.  The type
  394.         names  corresponding  to the same basic type are displayed in the
  395.         output file as 'alias' names for their  common  basic  data  type
  396.         name.  Every  feature  of  CFT  like  the  detection of recursive
  397.         declared  structures  and  unions,   references   to   previously
  398.         displayed data types and others are available and act similar.
  399.  
  400.         Every  function  (CFT)  and data type (CST) can be displayed with
  401.         the name of the source file and  the  line  number  where  it  is
  402.         defined.  The  output can be customized to display the tree chart
  403.         as a call-tree ("CALLER-CALLEE"-relation: "WHO CALLS WHOM") or as
  404.         a  caller-tree  ("CALLEE-CALLER"-relation:  "WHO  IS  CALLED   BY
  405.         WHOM"). This feature allows the user to determine which functions
  406.         are  called  from  a  specific  function  or  which functions are
  407.         callers of a specific function.
  408.  
  409.         The function and data type extraction from  the  source  code  is
  410.         done  by scanning and parsing the source.  There is absolutely no
  411.         need for the programmer  to  mark  functions  or  data  types  of
  412.         interest,   for  example  with  special  keywords,  starting  the
  413.         definitions at the  beginning  of  a  line  or  to  use  comments
  414.         containing  special  marks,  as  it is necessary for other source
  415.         code analysers and browsers.  CFT  and  CST  do  not  need  these
  416.         work-arounds,  any  source code can be processed without previous
  417.         work.  These tools are also compiler independent because they can
  418.         be customized to support any kind of compiler.
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.                                       - 7 -
  428.  
  429.  
  430.         Several  useful  informations  and  software  metrics  about  the
  431.         processed source code and the included  files  can  be  generated
  432.         like
  433.  
  434.         -    file size and comment size in bytes for every file,
  435.         -    number of source code lines for every file,
  436.         -    number of included files for every source file,
  437.         -    total  effective number of scanned bytes and lines for every
  438.              source file and its included files,
  439.         -    for every defined function the number of lines, the code and
  440.              comment size in bytes,  the number of bytes  per  line,  the
  441.              number  of  functions  called,  the  number  of flow control
  442.              statements (if,  else,  for,  while,  case,  default,  goto,
  443.              return,  exit),  the  maximum brace nesting level and if the
  444.              function is used only inside the file,
  445.         -    for  every  defined  structure/union  the  total  number  of
  446.              elements  and  the  number  of elements which are themselves
  447.              structures/unions,
  448.         -    file function or data type reference list for every file,
  449.         -    total number of displayed,  defined,  undefined or  multiple
  450.              defined functions and data types,
  451.         -    location of all multiple defined functions and data types,
  452.         -    location of all overloaded C++ functions,
  453.         -    source  file  -  include  file dependencies for every source
  454.              file,
  455.         -    final statistical summary for all files,
  456.         -    cross reference of every occurrence for  every  function  or
  457.              data type,
  458.         -    parent/children  relationship  for  every  function and data
  459.              type,
  460.         -    critical function call path/structure nesting  with  deepest
  461.              non-recursive nesting level (unlimited tree depth),
  462.         -    C++ class inheritance graph,
  463.              and much more ...
  464.  
  465.         The resulting hierarchy structure chart is another representation
  466.         for  a  directed  call  graph.  A directed call graph consists of
  467.         nodes (functions or data types) and connections (call  relations)
  468.         between  these  nodes.  The number of nodes and connections which
  469.         are necessary to transform the hierarchy structure chart  into  a
  470.         directed  call  graph  will  also  be calculated as an additional
  471.         information about the system complexity.
  472.  
  473.         A large number of options to control the  program  execution  and
  474.         the  output  generation  are  available and can be defined on the
  475.         command line,  by  command  files  or  by  defining  them  in  an
  476.         environment variable used by the program.
  477.  
  478.         CFT  and  CST  can  be  directly  invoked  from inside editors or
  479.         integrated development environments like  the  Borland  C++  IDE.
  480.         Detailed  examples  for  the  integration together with necessary
  481.         macro or batch files are given.
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.                                       - 8 -
  489.  
  490.  
  491.         CFT and CST are  command  line  driven  programs,  there  are  no
  492.         interactive  menu  driven  versions  available.  For this kind of
  493.         applications command line versions are the best choice,  I think.
  494.         There  are  several reasons for this decision.  SAA-like versions
  495.         would add too much overhead and use memory which  can  better  be
  496.         used  in  other ways by the programs.  Another reason is that CFT
  497.         and CST have also been designed for running in  batch  mode  e.g.
  498.         from within editors or MAKE files to automate analysing.
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.                                       - 9 -
  550.  
  551.  
  552.         3    C-LANGUAGE IMPLEMENTATION AND C-PREPROCESSOR
  553.  
  554.         The  current  ANSI  C  language standard X3.159-1989-ANSI C resp.
  555.         ISO/IEC 9899:1990 (E) as described in  several  books  about  the
  556.         C-language  (see references) was used as a development base.  The
  557.         reserved keywords being recognized  are  not  only  the  original
  558.         ANSI  C  keywords  but  were  also  taken  from  several compiler
  559.         implementations like Microsoft,  Borland or  GNU  and  their  own
  560.         special  language  extensions.  The  books  "The  C++ Programming
  561.         Language" and "The Annotated C++ Reference Manual" (ARM) together
  562.         with informations about the work of the ANSI C++ committee  X3J16
  563.         resp.  the  ISO/IEC working group SC22 WG21 were used for the C++
  564.         keywords. Another major source was also the AT&T C++ release 2.1.
  565.         Compiler  specific  extensions  especially  from  GNU  are   also
  566.         recognized.  Proposed  extensions to C++ like additional keywords
  567.         (e.g.  wchar_t) and the so called 'digraphs' will be supported if
  568.         they are introduced into the C++ language standard.
  569.  
  570.         A  complete  list of all reserved keywords is show in appendix 2.
  571.         The large set of keywords may lead to  some  slight  problems  in
  572.         situations  where  a  keyword  is  not  used  as itself but as an
  573.         identifier name,  for example a C++ keyword used as an identifier
  574.         in C.
  575.  
  576.         During a normal file scan,  precompiler defines are, if possible,
  577.         handled as if a real precompiler would be present,  but this  can
  578.         cause  some  trouble  with '#if',  '#ifdef' and other precompiler
  579.         controls which are not evaluated.  Also the block nesting  level,
  580.         which  will be supervised by the source code scanner,  may not be
  581.         at level 0 at the end of the file  because  of  such  precompiler
  582.         controls.  To avoid such things, a built-in C-preprocessor allows
  583.         the complete preprocessing of the source code and  include  files
  584.         for several compiler types as an additional option (-P).
  585.  
  586.         Preprocessing or not is a little bit controversial because it can
  587.         either  result  in  a  loss  of information if macros are used to
  588.         change the program behaviour and hide function calls, it can lead
  589.         to errors during file scanning or it can change the function  and
  590.         data  type  informations  obtained  from  the  code which may not
  591.         exactly correspond to the visible source code.  Preprocessing can
  592.         be an advantage or not, so the user has to decide whether he does
  593.         it or not.
  594.  
  595.         The  preprocessor  handles  the  defines  for  Microsoft  C  5.1,
  596.         Microsoft C/C++ 7.0, Turbo C++ 1.0, Borland C++ 2.0,  Borland C++
  597.         3.1,  GNU-C  and  Intel 80960 C compiler iC960 3.0 and all memory
  598.         models (not necessary for GNU-C and I960)  or  CPU  architectures
  599.         for the Intel 80960 32 bit RISC processor (KA,  KB,  SA,  SB, MC,
  600.         CA).  Other compiler types can be customized with the -B and  the
  601.         -D  options.  The  default  ANSI  C predefined macros '__FILE__',
  602.         '__LINE__',    '__DATE__',    '__TIME__'   are   generated    for
  603.         preprocessing.   The   macro  '__STDC__'  is  NOT  defined  (some
  604.         compilers test with '#ifndef __STDC__'),  so  that  non  standard
  605.         ANSI  C  extensions  in the processed code are allowed.  Defining
  606.         '-D__STDC__=1' forces ANSI C conforming output (if  used  by  the
  607.         scanned  source  code,  of  course!).  A  list of the precompiler
  608.  
  609.  
  610.                                      - 10 -
  611.  
  612.  
  613.         defines for the supported compiler types is shown in appendix  1.
  614.         Features  like  the replacing of trigraphs and the recognition of
  615.         C++ comments '//...' are also treated by the preprocessor.
  616.  
  617.         The precompiler recognizes several errors or possible sources for
  618.         problems like
  619.  
  620.         -    the use of undefined variables in precompiler controls,
  621.         -    misbalanced '#if...' control block(s)  including  the  exact
  622.              location (file, line) where the failing block started,
  623.         -    recursive called include files,
  624.         -    wrong number of macro arguments (missing ones or too many)
  625.  
  626.         and displays diagnostic messages with an exact description of the
  627.         error or warning reason and its location in the source file.
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.                                      - 11 -
  672.  
  673.  
  674.         4    C++ SOURCE CODE
  675.  
  676.         Although  CFT and CST were initially not developed to process C++
  677.         code it is possible  to  do  so.  In  that  case,  however,  some
  678.         restrictions and limitations should be considered.
  679.  
  680.         The  recognition  of  C++  classes  by CST is limited because the
  681.         handling of the internal class structure items is too complex  to
  682.         fit  in  the CST program.  So classes are only referenced by name
  683.         but their internal structure will not be scanned  and  displayed.
  684.         The  C++ class inheritance relationships are recognized and shown
  685.         in a class hierarchy graph listing (option -b). Structures in C++
  686.         with function names as structure members will  not  be  processed
  687.         correctly.
  688.  
  689.         The  use  of  overloaded functions with equal names but different
  690.         parameters  in  C++  programs  may  lead  to  incorrect   calling
  691.         relationships.  A  correct  handling  of  this feature requires a
  692.         complete C++ source code analyser to keep track of the  different
  693.         calling parameters.
  694.  
  695.         If more precise informations about C++ code is needed,  utilities
  696.         like 'class hierarchy browsers' or  'class  viewers',  which  are
  697.         usually (or should be) part of C++ compiler environments,  should
  698.         be used instead.
  699.  
  700.         Because of the above described reasons, some care should be taken
  701.         if C++ code is processed and displayed.
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.                                      - 12 -
  733.  
  734.  
  735.         5    ASSEMBLER SOURCE CODE
  736.  
  737.         As an additional feature,  CFT can process assembler source  code
  738.         for the Intel 80x86 processors (MASM 5.1, TASM) and for the Intel
  739.         80960  RISC  processors  (or any other "AT&T UNIX-like assembler"
  740.         like GNU) to  get  information  about  assembler  procedures  and
  741.         functions  being  called  from  the  assembler source files.  The
  742.         assembler source code scanner also detects and handles  calls  of
  743.         include  files.   This  feature  is  useful  for  mixed  language
  744.         programming. The processing of assembler macros, however,  is not
  745.         supported, the preprocessing option (-P) works only with C source
  746.         code.  Assembler  source  files  are  recognized  by  their  file
  747.         extensions '.ASM' and '.S', there is no other way to force a file
  748.         being processed as an assembler file.
  749.  
  750.         The following naming convention is  used:  For  '.ASM'  assembler
  751.         files  (MASM,  TASM) all identifiers are treated case-insensitive
  752.         and will be transformed to lower case characters, but identifiers
  753.         in '.S' (GNU,  I960) assembler files are treated  case-sensitive.
  754.         This  means,  that  an  assembler  function 'func1' defined in an
  755.         '.ASM' file can be called  from  C-source  by  'func1',  'FUNC1',
  756.         'Func1'  or any other lower and upper case character combination.
  757.         If 'func1' is defined in  an  '.S'  file,  the  name  must  match
  758.         exactly.  The first leading underscore of a function name will be
  759.         removed to get exact naming matches.  Type modifiers in C  source
  760.         code  like  'cdecl' or 'pascal' will not be considered.  Remember
  761.         these conventions when processing C and assembler files.
  762.  
  763.         Assembler code statements (inline code) inside C source code will
  764.         not be processed and will be skipped, because it is too difficult
  765.         to handle the several kinds of syntax being used for this    like
  766.         'asm  ...',  'asm "..."' or 'asm(...)' and the different keywords
  767.         ('asm', '_asm', '__asm', '__asm__', ...) used by various compiler
  768.         implementations.
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.                                      - 13 -
  794.  
  795.  
  796.         6    DATABASE GENERATION
  797.  
  798.         One of the most important features provided by CFT and CST is the
  799.         database generation which can be enabled with the -G  option.  It
  800.         is   performed   after  writing  the  output  file  to  save  all
  801.         informations  about  the  processed  files  in  a  set  of  dBASE
  802.         compatible database files (extension '.DBF') for later use. These
  803.         database  files  contain all necessary informations like function
  804.         or data type names,  the location where they are  defined,  their
  805.         caller/callee  relationship,  all  scanned  files  with statistic
  806.         informations, include files and so on.  It was tried to store the
  807.         informations in the most compact and effective database structure
  808.         to  save  disk  space.  Note that if the contents of the database
  809.         files is manipulated by external tools like  dBASE  or  something
  810.         else,  the  internal  consistency  will be corrupted and wrong or
  811.         unexpected results will happen!
  812.  
  813.         The database can be used to recall informations,  for example  to
  814.         find  out,  if  and  in  which  file and on which line a specific
  815.         function or data type is defined. A previously generated database
  816.         can be read into CFT and CST (option -g) to add new files  to  it
  817.         and/or  to  produce  another  output  file with new configuration
  818.         options,  for example with the reverse call tree or only  with  a
  819.         special  selected  item  of  interest  to  be displayed.  Such an
  820.         incremental database generation is also useful if large  projects
  821.         can  be  divided  into  a  set of commonly used files and project
  822.         specific files.  A good example for this is the GNU  C  compiler,
  823.         which  consists  of a set of language independent files and three
  824.         language dependent file sets  for  C,  C++  and  Objective-C.  To
  825.         analyse  this software with CFT or CST,  the language independent
  826.         part can be stored into a database which is later reused for  the
  827.         language   dependent   parts   to   build  the  complete  set  of
  828.         informations.
  829.  
  830.         The ability to retrieve informations about the sources  from  the
  831.         database  is  quite useful in many cases.  Recalling informations
  832.         from a database is much faster than processing  all  the  sources
  833.         again to find a specific item of interest.  The documentation and
  834.         maintenance of large software projects is much more effective and
  835.         easier to do if the developer has a tool to navigate through  the
  836.         source  code  and  that  helps  him  in  his comprehension of the
  837.         program and its internal structure. It is also useful for reverse
  838.         engineering of source code to get an  overview  of  the  internal
  839.         program structure.  Together with user programmable editors it is
  840.         possible to offer the user a source code browser with a hypertext
  841.         like feeling by integrating database recalling functions into the
  842.         editors.
  843.  
  844.         Two  utility  programs,   called  CFTN  and  CSTN  to,   retrieve
  845.         informations from databases, are available with supporting macros
  846.         for their integration into the BRIEF, QEDIT or MicroEMACS editor,
  847.         which are described in another section later in this manual.
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.                                      - 14 -
  855.  
  856.  
  857.         7    PROGRAM LIMITATIONS
  858.  
  859.         First  of all,  CFT and CST cannot replace a compiler or a syntax
  860.         checker like 'LINT' to detect errors in  the  source  code.  This
  861.         means  that  it  should  be  possible  to compile the source code
  862.         without fatal,  catastrophic errors  before  it  is  possible  to
  863.         analyse it with CFT and CST, otherwise the processing results may
  864.         be incorrect.
  865.  
  866.         However,  there  are  some  situations  where  CFT and CST can be
  867.         useful to detect bugs and inconsistencies in the source code like
  868.  
  869.         -    multiple definitions of functions or data types,
  870.         -    different function return types,
  871.         -    implicit declared functions with no prototype,
  872.         -    function definitions used as prototype,
  873.         -    recursive,  nested,  hidden and frequent  calls  of  include
  874.              files,
  875.         -    unclosed strings or character constants,
  876.         -    nested comments,
  877.         -    misbalanced braces,
  878.         -    unexpected end-of-file characters inside files,
  879.         -    illegal characters in the source code,
  880.         -    wrong number of macro arguments,
  881.         -    missing macro arguments,
  882.         -    misbalanced '#if...' control blocks.
  883.  
  884.         These   code   checks   are   done  on  multiple  files  so  that
  885.         inconsistencies  between  different  files  can  be   found   and
  886.         displayed.  This  is  a  capability  which conventional compilers
  887.         working only on a single file at a time cannot provide  and  will
  888.         miss  therefore  (maybe  the  linker  will  find  some  of  these
  889.         inconsistencies).
  890.  
  891.         Some statistical informations about the source code  may  not  be
  892.         correct  if  preprocessing  is  enabled  (-P).  This  affects all
  893.         options which do statistics like the -p or -s option. The size of
  894.         the 'pure' source code may not be correct due to macro  expansion
  895.         or  removing  of  unnecessary blanks.  However,  the file size is
  896.         always correct because it will be taken from the source file.
  897.  
  898.         Most of the program limitations are given by the  limited  number
  899.         of  available memory.  This means that the more conventional main
  900.         memory you have, the better it is.  The real mode versions of CFT
  901.         and CST do not use expanded or extended memory, no virtual memory
  902.         management  or  disk  file  swapping,  so  keep your conventional
  903.         memory free of memory consuming TSR programs and other  utilities
  904.         if  you  want  to  process  a  large number of files.  The use of
  905.         operating systems like  MS-DOS  5.0  or  DR-DOS  6.0  and  memory
  906.         managers like QEMM or 386MAX to get more free conventional memory
  907.         may help to handle big applications with a large number of files.
  908.         If  memory  problems  still occur during processing,  there is an
  909.         easy way to break the memory limits: use  the  32  bit  protected
  910.         mode  versions  of CFT and CST,  called CFT386 and CST386.  These
  911.         programs are running in protected mode and so they have no memory
  912.         limitations and are faster than the real mode versions.
  913.  
  914.  
  915.                                      - 15 -
  916.  
  917.  
  918.  
  919.         The number and the sizes of  files  to  be  processed  is  nearly
  920.         unlimited  with  2^14  files  and 2^31 bytes maximum file length.
  921.         Each file can have 2^16 lines.  The number of functions and  data
  922.         types  being  handled is limited to 2^14.  Note that these values
  923.         are given for the real mode versions, the protected mode versions
  924.         exceed them.  These limitations should be  enough  even  for  the
  925.         biggest projects that could be mentioned.
  926.  
  927.         The  calling  of nested include files is limited by the number of
  928.         files which can be opened simultaneously (operating system  resp.
  929.         compiler dependent).  The ANSI C minimum for include file nesting
  930.         levels is 8, this demand will be fulfilled by CFT and CST.
  931.  
  932.         The integrated C-preprocessor limits the size of expanded  macros
  933.         to  6  Kbytes.  The  number  of  macros simultaneously defined is
  934.         unlimited (ANSI:  1024)  and  only  affected  by  the  number  of
  935.         available memory. The number of macro parameters is limited to 31
  936.         (ANSI:  31)  and there are up to 31 significant characters (ANSI:
  937.         31) recognized.  The conditional compilation  nesting  levels  of
  938.         '#if...' control blocks is limited to 32 (ANSI: 8).
  939.  
  940.         The  line  length  is unlimited (ANSI: logical line length is 509
  941.         characters).  The number of characters  in  a  string  (including
  942.         '\0')  is  2048  (ANSI:  509).  The  number  of  members  in  one
  943.         structure/union  is  unlimited  (ANSI:  127),   the   number   of
  944.         structure/union nesting levels is unlimited (ANSI: 15).
  945.  
  946.         The  calculation  depth  of  the  critical  function call path or
  947.         structure nesting level  is  unlimited.  The  calculation  is  an
  948.         extremely   recursive function and was tested up to more than 110
  949.         nesting levels (protected mode version).
  950.  
  951.         CFT cannot recognize and reference a function if it is used  with
  952.         its  pure name,  without parentheses.  This happens if a function
  953.         name is assigned to a function pointer  variable  or  used  as  a
  954.         function  pointer  argument  in  a  function  call.  CFT  will be
  955.         confused in some rare cases by extensive type-casting  operations
  956.         like  'void  __based(void)  *  __cdecl  ...  ()' and will display
  957.         unexpected messages.  A function prototype declaration  inside  a
  958.         function block ('function given scope') will not be recognized by
  959.         CFT.   In  assembler  source  code,  some  definitions  of  local
  960.         variables seem to look like a function or a label definition  and
  961.         are  treated  by CFT like that although this may be wrong in some
  962.         cases. It is also not always possible to detect a call of a local
  963.         label correctly.  CFT sometimes displays warning  messages  about
  964.         'return type mismatch' though this may be correct in that special
  965.         case  because  the  different  types  are  earlier  defined  by a
  966.         'typedef' declaration.  The reason is  simply  that  CFT  doesn't
  967.         recognize  these  'typedef's  (but CST does!),  it looks only for
  968.         function names.
  969.  
  970.         An often requested feature for CST  is  the  integration  of  the
  971.         calculation   of   structure/union   sizes   with   byte   offset
  972.         informations for every structure/union member.  This  feature  is
  973.         not  implemented  in CST although it would be possible to do this
  974.  
  975.  
  976.                                      - 16 -
  977.  
  978.  
  979.         because all necessary informations are  present.  The  reason  is
  980.         that  there  would  be  too  much  overhead  for CST to treat the
  981.         various compiler implementations with their different basic  type
  982.         sizes (sizeof(int),  sizeof(long double)) for different processor
  983.         types (16 bit,  32 bit,  64 bit,  ...) and  data  type  alignment
  984.         requirements  (by default and also controlled with #pragma's like
  985.         'align' or 'pack').  It would be possible to do this for just one
  986.         selected  compiler implementation or processor type but not for a
  987.         great  number  of  them.   Especially  compilers   for   advanced
  988.         architectures  like  RISC  processors  have very complicated type
  989.         alignments rules depending on the data types,  alignment pragmas,
  990.         compiler  switches,  type  sizes,  available  register number and
  991.         register  sizes  and  resulting  structure/union/class  sizes  to
  992.         generate  highly  optimized  code.   This  includes  usually  the
  993.         insertion of 'fill' bytes inside a structure/union and  sometimes
  994.         'padding  bytes' at the end of a structure/union to force aligned
  995.         sizes on specific byte boundaries (For examples see the reference
  996.         manual of the Intel 80960 C-Compiler iC960, release 3.0). Because
  997.         of these reasons,  an integrated 'byte offset calculation' is not
  998.         implemented in CST.  Instead,  you can generate a source file for
  999.         selected  data  types  with  option  -O,   that  performs   these
  1000.         calculations,  if  you  compile  the  generated  file with your C
  1001.         compiler. For further informations see the description for option
  1002.         -O.
  1003.  
  1004.         SUMMARY
  1005.  
  1006.         The above described limitations can lead in  some  situations  to
  1007.         misinterpretations  or loss of informations of the scanned source
  1008.         code. The only way to avoid these lacks would be the inclusion of
  1009.         parts of a 'real compiler' to handle the  complete  C  (and  C++)
  1010.         syntax in any possible situation.  But this was not the intention
  1011.         when the developing of these programs as 'little' and easy to use
  1012.         programming supporting tools began.  Although I hope that CFT and
  1013.         CST  will in most cases be powerful development and documentation
  1014.         tools!
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.                                      - 17 -
  1038.  
  1039.  
  1040.         8    IMPROVING EXECUTION SPEED
  1041.  
  1042.         CFT and CST are disk storage based programs  because  the  source
  1043.         and  include  files,  the  intermediate  precompiler file and the
  1044.         output file must be read from and  written  to  hard  disk.  This
  1045.         means that the execution speed of CFT and CST depends at first on
  1046.         the  speed  of  the physical storage medium and not (only) on the
  1047.         speed of the CPU.  There are several ways to improve the  program
  1048.         performance:
  1049.  
  1050.         -    install a RAM-disk and
  1051.              a)   start  CFT  and CST from there so that the intermediate
  1052.                   file and the resulting output file will be stored there
  1053.                   (but don't forget to copy the output file to  the  hard
  1054.                   disk before power-off), or
  1055.              b)   use  the  -v  option  to  redirect only the precompiler
  1056.                   output file (scanner input file) to the  RAM-disk  from
  1057.                   anywhere  the  program is started (the RAM-disk must be
  1058.                   large enough to hold  the  largest  possible  temporary
  1059.                   file, otherwise a disk-write error will occur),
  1060.         -    use a hard disk cache program like SmartDrive,  HyperDisk or
  1061.              PC-Cache,
  1062.         -    use a faster hard disk,
  1063.         -    and finally, of course, use a faster and more powerful CPU.
  1064.  
  1065.         The most effective combination is option -v with  a  RAM-disk  as
  1066.         destination  path and hard disk caching together with a fast hard
  1067.         disk drive. If the disk cache is large enough to hold most of the
  1068.         frequently called include files, the execution speed is about 2.5
  1069.         to 3 times faster than without.  This is a  significant  speed-up
  1070.         especially  for  projects  with  a large number of files and many
  1071.         included files in each source file.
  1072.  
  1073.         During program execution with preprocessing (option -P),  most of
  1074.         the time will be consumed to preprocess the given input files and
  1075.         the related include files and to generate the preprocessor output
  1076.         file.  The scanning for functions (CFT) or data types (CST) takes
  1077.         only a small amount of time. The function/data type relations are
  1078.         computed while the output is generated and written to disk, there
  1079.         is no precomputing necessary.
  1080.  
  1081.         The function  for  critical  call  path/nesting  level  detection
  1082.         depends  only on the number of functions or structures and not on
  1083.         the call/declaration nesting complexity. The execution time grows
  1084.         linear with the number of items (functions/structures) to process
  1085.         and is very fast!
  1086.  
  1087.         Be aware of the fact that the processing of  a  large  number  of
  1088.         files  can  take  quite  a  long time (from several minutes up to
  1089.         hours on lower performance machines!),  especially if  option  -P
  1090.         for preprocessing is enabled.
  1091.  
  1092.         The  generation  of  the output file and writing to disk can also
  1093.         take some time if the number of items to display is large and the
  1094.         nesting structure is complex or if there is  no  cross  reference
  1095.         option  enabled  (see -x and -r for further information).  If the
  1096.  
  1097.  
  1098.                                      - 18 -
  1099.  
  1100.  
  1101.         number of items is very large,  one of the  most  time  consuming
  1102.         options is the function/data type file reference (option -z). The
  1103.         writing  and  reading  of  the database files (options -G and -g)
  1104.         takes also some  time  due  to  the  large  number  of  different
  1105.         informations.
  1106.  
  1107.         Don't  panic  if  there  seems  to be no disk access for a longer
  1108.         time,  the reason is  just  that  there  may  be  time  consuming
  1109.         computations  and  that the output will be buffered internally to
  1110.         reduce the number of disk accesses and  therefore  speed  up  the
  1111.         output!
  1112.  
  1113.         For  more  detailed informations about the program efficiency see
  1114.         appendix 3.
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157.  
  1158.  
  1159.                                      - 19 -
  1160.  
  1161.  
  1162.         9    COMMAND LINE SYNTAX DESCRIPTION
  1163.  
  1164.         CFT and CST are command-line driven programs.  This section gives
  1165.         a  complete  overview  about  all  command line options and their
  1166.         syntax.  It gives also remarks for their use  and  shows  several
  1167.         examples  with  detailed  descriptions.  There are no differences
  1168.         between the real mode and the protected mode  versions  of  these
  1169.         programs.  This  section of the documentation should be read very
  1170.         careful by all users to get a complete  overview  about  all  the
  1171.         features which are provided by CFT and CST.
  1172.  
  1173.         SYNTAX:   CFT [options [$cmdfile]] <[+]file> <@filelist>
  1174.                   CST [options [$cmdfile]] <[+]file> <@filelist>
  1175.  
  1176.         OPTIONS:  (valid for)
  1177.  
  1178.         -R        (CFT, CST)
  1179.         By default,  CFT and CST generate the hierarchy tree chart of the
  1180.         called function/data type ("CALLER:CALLEE relation",  "WHO CALLES
  1181.         WHOM").  The  -R  option produces an inverted listing showing the
  1182.         callers/users of each function/data type. It generates the output
  1183.         as the function/data type hierarchy member  list  tree  chart  in
  1184.         reverse  order as a list of calling items of the referenced basic
  1185.         item ("CALLEE:CALLER relation",  "WHO IS CALLED BY  WHOM").  This
  1186.         option  is  useful  to  get  the relations between functions/data
  1187.         types and their callers/users.
  1188.  
  1189.         -x        (CFT, CST)
  1190.         Cross reference in case of multiple use.  Every function and data
  1191.         type   will  be  given  a  unique  reference  number  which  will
  1192.         furthermore be used as an identifying reference  number  for  the
  1193.         function or data type if it is again displayed.
  1194.  
  1195.         -r        (CFT, CST)
  1196.         This  is  almost  the  same as option -x,  but an additional file
  1197.         reference  with  the  file  name  and  the  line  number  of  the
  1198.         declaration will be given (includes -x).
  1199.  
  1200.         The  -r  or  the  -x option is strictly recommended and should be
  1201.         used as a default option, because without it, every function/data
  1202.         type will be completely  redisplayed,  including  the  underlying
  1203.         subtree  of  functions  or data types,  whenever it occurs in the
  1204.         output tree chart and so the  resulting  output  file  will  grow
  1205.         immense,  up to several megabytes,  if there is enough disk space
  1206.         to write the output file.
  1207.  
  1208.         -m[name]  (CFT)
  1209.         Start the function tree chart dump with function 'main'  (-m)  or
  1210.         'name' (-mname), name is case sensitive. If -m+ is specified, the
  1211.         output  starts  with  the topmost function,  this is the function
  1212.         which is in the highest level of the  hierarchy  tree  chart.  If
  1213.         this  option is not set,  the default is lexicographical order of
  1214.         the displayed functions.
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.                                      - 20 -
  1221.  
  1222.  
  1223.         Usually,  the complete function tree chart should start with  the
  1224.         'main'  function  so  that every subfunction is a (sub-)member of
  1225.         'main'.  This option is useful for windows programs to start  the
  1226.         output with the initial 'WinMain' function (-mWinMain) instead of
  1227.         'main'.  It can also be used to start the output with the initial
  1228.         assembler start-up code being executed before the 'main'-function
  1229.         is called.
  1230.  
  1231.         -mtype    (CST)
  1232.         Start the data type tree chart with data  type  'type'  (-mtype).
  1233.         If  -m+  is  specified,  the  output starts with the topmost data
  1234.         type,  this is the data type which is in the highest level of the
  1235.         hierarchy  tree  chart.  The default output is in lexicographical
  1236.         order  of  the  displayed  data  types.   Useful  if  a  selected
  1237.         structure/union  should  be  displayed  at  the  beginning of the
  1238.         output file.
  1239.  
  1240.         -a        (CFT, CST)
  1241.         List  every  function/data  type,   also  previously   referenced
  1242.         functions/data  types.  This  generates  a complete list of every
  1243.         function/data type in lexicographical order  with  references  to
  1244.         their first location.
  1245.  
  1246.         -f        (CFT, CST)
  1247.         Generate   an   output   list  in  short  form,   only  with  the
  1248.         function/data type names,  no further description of the internal
  1249.         function/data type elements.
  1250.  
  1251.         -iname    (CFT)
  1252.         Ignore  function member 'name' in output tree chart.  It will not
  1253.         be displayed and will be skipped instead if found as  a  function
  1254.         member.  This option can be useful if, for example, functions are
  1255.         used only for test purposes and are of no  further  interest  for
  1256.         the user and should be ignored in the output tree chart.
  1257.  
  1258.         -u        (CFT)
  1259.         List  undefined  functions.  These functions are probably library
  1260.         functions,  defined in other files which have not been scanned or
  1261.         are unresolved externals found by the linker.
  1262.  
  1263.         -V        (CFT)
  1264.         List  prototyped  functions  which are neither called nor defined
  1265.         (option -a and -u). This option is useful to find unused function
  1266.         prototypes which could be removed from the source code.
  1267.  
  1268.         -l        (CFT)
  1269.         List a function only once in case of repeated consecutive  calls.
  1270.         If  a  function  is  called  more than one time inside a function
  1271.         without any other  call  in  between,  there  will  be  only  one
  1272.         reference  of  that function call in the output tree chart.  This
  1273.         option results in shorter output files.
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.                                      - 21 -
  1282.  
  1283.  
  1284.         -n[a]     (CFT, CST)
  1285.         Display the most critical function call path respectively display
  1286.         the data structure/union with  the  maximum  nesting  level.  The
  1287.         modificator  'a' is used to display every function/structure with
  1288.         its users/callers.  This option helps to determine the complexity
  1289.         of   the   function   call/data  structure  hierarchy  and  finds
  1290.         recursions  over  several  call/nesting  levels.  Note  that  for
  1291.         functions  the maximum call path being displayed is the result of
  1292.         the static source code analysis.  During  program  execution  the
  1293.         call  path  can be even deeper if functions are called indirectly
  1294.         with function pointers.
  1295.  
  1296.         -c[s]     (CFT, CST)
  1297.         Display the number of calls to each function/data type, 's' sorts
  1298.         by the number of calls (default order:  lexicographical).  Useful
  1299.         to  find  out  which  functions/data  types are never called/used
  1300.         (maybe unnecessary and deletable) and which  ones  are  the  most
  1301.         frequently  called/used (together with profiler results a subject
  1302.         for further optimization efforts).
  1303.  
  1304.         -Z[s]     (CFT, CST)
  1305.         Display every caller and member for each function/data type,  's'
  1306.         sorts  by  the  number of calls (default order: lexicographical),
  1307.         this is an extension of the -c  option.  This  option  shows  the
  1308.         relations in the following form:
  1309.  
  1310.              List of parent functions/data types:
  1311.              1. caller (reference #) <# of calls from>
  1312.              ...
  1313.              n. caller ...
  1314.         function/data  type (reference #) <# of calls from parents,  # of
  1315.         calls to children>
  1316.              List of child functions/data types:
  1317.              1. called member (reference #) <# of calls to>
  1318.              ...
  1319.              m. called member ...
  1320.  
  1321.         This compact form lists all callers and members with  the  number
  1322.         of their calls, recursions are detected and displayed.
  1323.  
  1324.         -z        (CFT, CST)
  1325.         Generate  a  function/data  type call cross reference table.  For
  1326.         every function/data type the location of  its  definition  (file,
  1327.         line)  and  a  complete  list of its calls/references,  sorted by
  1328.         files and line numbers is given in the following form:
  1329.  
  1330.         1. function/data type (reference #) [file #], line #
  1331.              [file #]: line #, ...
  1332.              ...
  1333.  
  1334.         2. ...
  1335.              ...
  1336.  
  1337.         The functions/data types are displayed in lexicographical  order.
  1338.         At the end of the section is the cross reference file list.
  1339.  
  1340.  
  1341.  
  1342.                                      - 22 -
  1343.  
  1344.  
  1345.         -b        (CST)
  1346.         Display  the  C++  class  inheritance relationships.  This option
  1347.         generates two listings.  The first one displays the complete  C++
  1348.         class  hierarchy  graph(s).  The  second one shows for each class
  1349.         first the superclasses from which  the  class  inherits  and  the
  1350.         access restrictions (public,  protected, virtual, ...) and second
  1351.         the subclasses which inherit from  the  given  class,  also  with
  1352.         access  restrictions.  This  option  is useful to find out things
  1353.         like the class dependencies or multiple inheritance.
  1354.  
  1355.         -C[s]     (CFT, CST)
  1356.         List the function/data type contents for  every  processed  file,
  1357.         's' sorts by line numbers (default order: lexicographical). There
  1358.         are  additional  informations  possible  with the option -s.  CFT
  1359.         informs if none of the functions defined in a file is called from
  1360.         functions  defined  in  other  files  (internal  versus  external
  1361.         linkage). Functions for which no external caller outside the file
  1362.         is found will be marked [INTERNAL], such functions are candidates
  1363.         for defining them as 'static'. Attention: Calling a function by a
  1364.         function pointer won't be noticed!  This information is useful to
  1365.         find out whether the contents of a file is  unnecessary  for  the
  1366.         project  so  that the file must not be linked.  This option gives
  1367.         useful informations about source code metrics for  every  defined
  1368.         function.
  1369.  
  1370.         -y        (CFT, CST)
  1371.         Display  cross  link  list of files which contain referencing and
  1372.         referenced functions/data types  of  functions/data  types  of  a
  1373.         specific  file.  This option shows the relations in the following
  1374.         form:
  1375.  
  1376.              1. referencing file
  1377.              ...
  1378.              n. referencing file
  1379.         file
  1380.              1. referenced file
  1381.              ...
  1382.              m. referenced file
  1383.  
  1384.         This  option  is  useful  if  you  want  to  find  out  the  file
  1385.         relationsships.  This information can be used to isolate specific
  1386.         files from a project,  e.g.  library files.  It is also useful if
  1387.         you  want  to  separate  a  function and want to know which other
  1388.         files are needed because they contain called functions.
  1389.  
  1390.         -S[..]    (CFT, CST)
  1391.         Specify  name  (-Sname)  or  file  with  names  (-S@namelist)  of
  1392.         functions/data types to search for and to dump if present,  names
  1393.         are case sensitive.  These items are listed first in  the  output
  1394.         tree chart file. By using -S on the command line, it is necessary
  1395.         to  surround  a  data  type  name that consists of two words with
  1396.         double quotation marks like "struct _iobuf" to  connect  the  two
  1397.         words.  This is not necessary inside a list file, but there every
  1398.         search name must be on a separate line.
  1399.  
  1400.  
  1401.  
  1402.  
  1403.                                      - 23 -
  1404.  
  1405.  
  1406.         -D[..]    (CFT, CST)
  1407.         Specifies macro name(s) (-Dname or -Dname1=name2)  or  file  with
  1408.         macro names (-D@namelist) of functions/data types which should be
  1409.         predefined and linked together,  also used as preprocessor define
  1410.         if the integrated preprocessor is called (-P).  The defined names
  1411.         are case sensitive and trigraph translation is performed on them.
  1412.  
  1413.         The  definition  of  a  string as replacement for a macro name is
  1414.         different on the command line and inside a macro definition  file
  1415.         or  command  file  (marked  with '$').  On the command line,  the
  1416.         double quotation marks must be 'escaped' and the string  must  be
  1417.         quoted  like  '-DXYZ="\"123\""'  (similar  to  C strings) to work
  1418.         correctly,  the reason is  the  DOS  wildcard  expansion  of  the
  1419.         command  line.  Inside  a  macro definition or command file,  the
  1420.         double quotation marks need not be 'escaped',  so the  definition
  1421.         can be written like '-DXYZ="123"'.  This option cannot be used in
  1422.         environment defines if the equal sign '=' is  used  because  this
  1423.         produces  a syntax error for DOS when trying to store a 'SET=...'
  1424.         command with a second equal sign in one line.  If a  define  item
  1425.         consists  of  two  words  see  the  notes  at  option  -S  for  a
  1426.         description.  Keep these differences and exceptions  in  mind  to
  1427.         avoid unexpected results using the -D option.
  1428.  
  1429.         -U[..]    (CFT, CST)
  1430.         Specifies   a   predefined  macro  name  (-Dname)  or  file  with
  1431.         predefined  macro  names  (-U@namelist)  to  be   undefined   for
  1432.         preprocessing.  Note  that  the  default  predefined  macro names
  1433.         '__FILE__',   '__LINE__',   '__DATE__',   '__TIME__'  cannot   be
  1434.         undefined.  All  other  predefined names for the various compiler
  1435.         types can be undefined.  Like for -D,  the names  are  considered
  1436.         case-sensitive, but trigraph translation is not performed because
  1437.         the internal representation cannot contain trigraphs.
  1438.  
  1439.         -O[..]    (CST)
  1440.         Specifies  name(s)  (-Oname)  or file with names (-O@namelist) of
  1441.         data types for which the  calculation  of  structure/union  sizes
  1442.         with  byte  offset informations for every data type member should
  1443.         be performed.  Additionally specifying -O+ sets a  flag  for  the
  1444.         recursive collection of sub-structures during expansion which are
  1445.         displayed  without  specifying  them by -O.  This means that if a
  1446.         structure/union consists of members which are also structures  or
  1447.         unions,  and so on, it is not necessary to specify all these data
  1448.         type names with -O to enable them for  byte  offset  calculation.
  1449.         Instead,  you have to specify only the top most data type with -O
  1450.         and additionally -O+ to force CST to select all related sub-types
  1451.         for displaying.  If -O+ is set but no names  are  specified,  all
  1452.         structures and unions will be used for byteoffset calculations.
  1453.  
  1454.         As  the  result  of  this option,  CST generates a C source file,
  1455.         called 'CST_OFFS.C'.  This file needs some additional editing  to
  1456.         declare necessary include files,  data types,  defines or pragmas
  1457.         before it can be compiled with the C compiler for which the  file
  1458.         was generated (be sure to use the same includes!).  The resulting
  1459.         executable prints  for  every  structure/union  member  the  byte
  1460.         offset  relative to the beginning of the structure/union (decimal
  1461.         and hexadecimal) and the  size  of  each  member,  the  resulting
  1462.  
  1463.  
  1464.                                      - 24 -
  1465.  
  1466.  
  1467.         structure/union    size   and   also   informations   whether   a
  1468.         structure/union member has been  aligned  (=  compiler  dependent
  1469.         insertion   of   fill   bytes  before  that  member)  or  if  the
  1470.         structure/union was padded with fill bytes at the end  of  it  to
  1471.         align the size to a specific length.
  1472.  
  1473.         To   get   these   informations  and  to  perform  the  necessary
  1474.         calculations  therefore,   the  source  file  'CST_OFFS.C'  makes
  1475.         extensive use of the C macro programming capabilities,  which may
  1476.         lead in some rare cases to an error in  the  compilation  of  the
  1477.         resulting  file  due  to  the  internal  limitations  of  some  C
  1478.         compilers.
  1479.  
  1480.         The -O option is very useful if you  need  detailed  informations
  1481.         about structures/unions in case of error searching and debugging,
  1482.         especially for hardware debugging with an ICE.  It is also useful
  1483.         for finding out the differences  in  the  internal  layout  of  a
  1484.         structure/union  in  the  case  of  porting C source code between
  1485.         different  compilers  and/or  operating  systems   or   if   data
  1486.         structures  are  exchanged  between different hardware platforms,
  1487.         for example with  data  communication.  You  can  verify  if  the
  1488.         expected  structure/union  layout  and size is really produced by
  1489.         the target compiler.
  1490.  
  1491.         -I[path]  (CFT, CST)
  1492.         This option enables the scanning of include files  declared  with
  1493.         '#include  "..."' or '#include <...>'.  The required path for the
  1494.         include files is taken  from  the  INCLUDE  environment  variable
  1495.         (default) or can be user defined by 'path'. Paths defined with -I
  1496.         will  be  searched  before any other paths taken from environment
  1497.         variables specified by -E or -P,  so care should  be  taken  with
  1498.         that  option.  Using  the  -I  or -E option without -P allows the
  1499.         scanning of the  source  file  and  the  included  files  without
  1500.         preprocessing. In that case, preprocessor controls like '#if ...'
  1501.         are not evaluated and can lead to unexpected results.
  1502.  
  1503.         -Ename    (CFT, CST)
  1504.         Almost the same as -I, but the path for the include files will be
  1505.         taken  from  the  environment  variable 'name'.  Typing -EINCLUDE
  1506.         would produce the same results as -I alone.
  1507.  
  1508.         -P[name]  (CFT, CST)
  1509.         Run the integrated C preprocessor before the file scan.  In  this
  1510.         case   the  default  include  path  is  taken  from  the  INCLUDE
  1511.         environment variable,  from the user defined  'name'  environment
  1512.         and  additional paths from -I and -E option are used.  If special
  1513.         paths should be searched before the default paths,  they must  be
  1514.         specified  by  the  -I path or the -E environment option and they
  1515.         must be placed on the command line before the  -P  option  to  be
  1516.         processed first.  The -D, -U preprocessor defines and -T type and
  1517.         memory model and -B size infos are also  used,  if  defined.  The
  1518.         path  for the preprocessor output file can be specified by the -v
  1519.         option,  the  default  is  the  current  working  directory.  The
  1520.         comments in the source and included files will remain until -q is
  1521.         defined to remove them. The comments are used for statistics with
  1522.  
  1523.  
  1524.  
  1525.                                      - 25 -
  1526.  
  1527.  
  1528.         option -p. If option -C++ is set, the macro '__cplusplus' will be
  1529.         predefined  before  preprocessing  to  enable  C++ macros and C++
  1530.         comment recognition.
  1531.  
  1532.         If you are using a compiler which is not supported by CFT and CST
  1533.         or the build-in preprocessing doesn't satisfy your needs  because
  1534.         the results seem to be different from your preprocessor,  you can
  1535.         do the following: preprocess the files you want to  analyse  with
  1536.         your  own  compiler preprocessor and use these preprocessed files
  1537.         as input for CFT and CST.
  1538.  
  1539.         -Ttype,m  (CFT, CST)
  1540.         Use this  option  to  set  the  compiler  type  for  source  code
  1541.         preprocessing to one of the following types:
  1542.  
  1543.              MSC51     Microsoft C 5.1
  1544.              MSC70     Microsoft C/C++ 7.0
  1545.              TC10      Borland Turbo C++ 1.0
  1546.              BC20      Borland C++ 2.0
  1547.              BC31      Borland C++ 3.1
  1548.              GNU       GNU-C
  1549.              I960      Intel 80960 iC960 3.0
  1550.  
  1551.         The  supported  memory  models  are T(iny) (valid only for MSC70,
  1552.         TC10, BC20, BC31), S(mall), M(edium), C(ompact), L(arge), H(uge),
  1553.         'L' is assumed as default if no model  is  specified.  GNU-C  and
  1554.         Intel  iC960  do  not  need  a  memory model because they compile
  1555.         really 32 bit code,  but the Intel iC960  compiler  requires  the
  1556.         definition  of the 80960 RISC processor architecture which is one
  1557.         of KA, KB, SA,  SB,  MC,  CA (default is KB).  This option causes
  1558.         several  compiler  dependent  preprocessor  macros  (if they were
  1559.         known to me,  however) to be defined before preprocessing starts.
  1560.         This option can only be used with the -P option, otherwise it has
  1561.         no effect.
  1562.  
  1563.         If your compiler is not supported,  you can perform the following
  1564.         steps: Find out which preprocessor defines are necessary (manual,
  1565.         help file)  and  declare  them  with  option  -D,  then  declare,
  1566.         depending on the selected memory model or processor architecture,
  1567.         the type sizes with option -B.
  1568.  
  1569.         -Bsizes   (CFT, CST)
  1570.         Redefine  the basic type sizes and pointer type sizes (all values
  1571.         must be declared in bytes) for conditional preprocessor  controls
  1572.         with  the  'sizeof()'  keyword like '#if sizeof(int) == 4'.  This
  1573.         option is only valid with the -P option.
  1574.  
  1575.         The required format for this option is
  1576.  
  1577.              -Bv,c,s,i,l,f,d,ld*data,code
  1578.                                |
  1579.              (delimiter between data and pointer sizes is '*')
  1580.  
  1581.         with the following types and their respective default  data  size
  1582.         values in bytes (the pointer type sizes are model dependent):
  1583.  
  1584.  
  1585.  
  1586.                                      - 26 -
  1587.  
  1588.  
  1589.         v    :    void (sizeof(void) is usually 0, but for GNU-C it is 1)
  1590.         c    :    char (1 byte)
  1591.         s    :    short (by definition 2 bytes, hardware independent)
  1592.         i    :    integer (hardware dependent, 2 or 4 bytes)
  1593.         l    :    long (4 bytes)
  1594.         f    :    float (4 bytes, IEEE format)
  1595.         d    :    double (8 bytes, IEEE format)
  1596.         ld   :    long  double  (10  bytes,  IEEE format,  some compilers
  1597.                   assume long double == double (= 8  bytes),  some  CPU's
  1598.                   and their compilers have special alignment requirements
  1599.                   like  the Intel 80960,  where sizeof(long double) is 16
  1600.                   bytes due to register and  memory  access  requirements
  1601.                   and structure alignment)
  1602.         data :    data pointer (type pointers, 2 or 4 bytes, memory model
  1603.                   dependent)
  1604.         code :    code pointer (function pointers,  2 or 4 bytes,  memory
  1605.                   model dependent)
  1606.  
  1607.         The sizes of signed and unsigned types of the  same  basic  types
  1608.         are considered equal, this means that, for example, the following
  1609.         expression is true:
  1610.  
  1611.              sizeof(unsigned int) == sizeof(signed int) == sizeof(int)
  1612.  
  1613.         The  sizes of type pointers to data and function pointers to code
  1614.         are also considered equal,  this means  that,  for  example,  the
  1615.         following expressions are true:
  1616.  
  1617.              sizeof(int *) == sizeof(float *)
  1618.              sizeof(int (*)()) == sizeof(float (*)())
  1619.  
  1620.         A  64 bit (8 bytes) integer type like 'long long' or 'bigint' (or
  1621.         something else) is not supported because there are no C compilers
  1622.         known to me which use such a type although  some  (co-)processors
  1623.         and  their  assemblers  are  able  to  handle it (see Intel 80960
  1624.         assembler manual for examples).
  1625.  
  1626.         If the -B option is not set,  the default values for the  various
  1627.         memory  models  and  compiler types (as they are known to me) are
  1628.         used,   the  assumed  target  hardware   has   an   Intel   80x86
  1629.         microprocessor.  Note that during preprocessing type modificators
  1630.         like "near" or "far" are not recognized.
  1631.  
  1632.         If the -B and the -T options are  not  set,  the  sizes  of  data
  1633.         pointers and code pointers are always considered equal:
  1634.  
  1635.              sizeof(int *) == sizeof(int (*)())      (= 4, large model)
  1636.  
  1637.         For   example,   -B0,1,2,2,4,4,8,10*4,4   would  be  the  correct
  1638.         declaration for MS-C  7.0,  large/huge  memory  model,  with  the
  1639.         values for data types (void = 0,  char = 1,  short = 2,  int = 2,
  1640.         long = 4, float = 4,  double = 8 and  long double = 10 bytes) and
  1641.         pointers  to  data  types  and  function  pointers  (all values 4
  1642.         bytes).  These values are set automatically by defining -TMSC70,L
  1643.         (or  -TMSC70,H) as compiler type and memory model description for
  1644.         preprocessing.
  1645.  
  1646.  
  1647.                                      - 27 -
  1648.  
  1649.  
  1650.  
  1651.         -q        (CFT, CST)
  1652.         Remove comments from preprocessed files, default is don't remove.
  1653.         This option is only valid with option -P,  it also affects the -p
  1654.         option because counting comments is not possible and calculations
  1655.         on them cannot be done.
  1656.  
  1657.         -M        (CFT, CST)
  1658.         This option generates a source file/include file dependency table
  1659.         for every processed file.  This table shows the dependent include
  1660.         files of a source file and can be used to build a MAKE  file.  It
  1661.         is  also useful to check if the included files are taken from the
  1662.         correct directories.
  1663.  
  1664.         -p        (CFT, CST)
  1665.         Calculate the program code/file size ratio  for  every  file  and
  1666.         make  a  final summary.  This option gives a short overview about
  1667.         the 'real' file contents versus complexity. The computed value is
  1668.         in the range from 0.000 (only comment,  no code) to  1.000  (only
  1669.         code,  no comment). Used together with -P, the results may not be
  1670.         absolutely correct because of the macro expanding and removing of
  1671.         parts  of  the  source  code  by  '#if...'  control  blocks.   If
  1672.         preprocessing -P is enabled, comment byte count in included files
  1673.         will not be performed. If option -q is set, -p will not calculate
  1674.         values related with comments.
  1675.  
  1676.         -s        (CFT, CST)
  1677.         Used with -C,  this option gives additional informations. For CFT
  1678.         for every function: the number of lines for  the  function  body,
  1679.         the  maximum  brace levels,  the number of bytes for the function
  1680.         body and the number of comment bytes inside  the  function  body.
  1681.         The  average  values  for  every  source  file  are  computed and
  1682.         displayed.  For CST for every data type: number of type elements,
  1683.         number of subelements (nested structures/unions).
  1684.  
  1685.         -dn       (CFT, CST)
  1686.         Set the maximum function/structure/union nesting level for output
  1687.         generation  to  'n'  (the  maximum  value  of  n = 999 is used as
  1688.         default).  This means that the request for  displaying  a  deeper
  1689.         level  will  be  rejected  and  the  output  tree  chart  will be
  1690.         truncated at the given level.
  1691.  
  1692.         -vpath    (CFT, CST)
  1693.         Set a specific path for the intermediate precompiler output file.
  1694.         This option is useful  to  speed  up  execution  speed  when  the
  1695.         intermediate file can be stored on a RAM-disk so that file access
  1696.         to  the  precompiled  file  is  much  faster than on a hard disk.
  1697.         Environment variables like 'TMP' or 'TEMP' to set  the  path  for
  1698.         temporary files are not evaluated.
  1699.  
  1700.         -ofile    (CFT, CST)
  1701.         Write the generated analysis results to file 'file'.  The default
  1702.         file  names  are  'CFT.LST'  for  CFT/CFT386  and  'CST.LST'  for
  1703.         CST/CST386.  Possible overwriting of an existing output file with
  1704.         the same name other than the default one  will  be  detected  and
  1705.         prompted  for user reconfirming.  The resulting output file is an
  1706.  
  1707.  
  1708.                                      - 28 -
  1709.  
  1710.  
  1711.         ASCII text file  with  no  formatting  characters  which  can  be
  1712.         printed with every printer,  viewed and/or edited with every text
  1713.         editor and taken as input to word  processors,  for  example  for
  1714.         documentation purposes.
  1715.  
  1716.         -N        (CFT, CST)
  1717.         Disable the writing of an output file.  This option can be useful
  1718.         if, for example,  only a database (option -G) should be generated
  1719.         with CFT or CST and no output file is required.  In that case the
  1720.         sometimes very time consuming process of output file  writing  is
  1721.         skipped.  Note  that  for CST the writing of the byte offset file
  1722.         "CST_OFFS.C" will not be affected by this option.
  1723.  
  1724.         -L[L][+]  (CFT, CST)
  1725.         Redirect the screen output to  a  file,  called  'CFT.LOG'  resp.
  1726.         'CST.LOG'.  If  '+' is set,  the output is both written to screen
  1727.         and redirected to the log file so that the  output  messages  can
  1728.         both  be viewed as they appear and later analysed.  Finally,  -LL
  1729.         resp.  -LL+ appends the output to an existing file,  this can  be
  1730.         useful if CFT and CST run in batch jobs.
  1731.  
  1732.         -Wlevel   (CFT, CST)
  1733.         Set  error  and  warning  message  level.  Higher  warning levels
  1734.         include lower ones. Possible levels are:
  1735.  
  1736.         0 :  all  error  and  warning  messages  are  suppressed   except
  1737.              absolutely catastrophic fatal errors,
  1738.         1 :  display serious errors or warnings,
  1739.         2 :  includes level 1 plus additional errors and warnings,
  1740.         3 :  includes level 2 plus errors/warnings/remarks,
  1741.         4 :  includes  level  3  plus  warnings  about  implicit declared
  1742.              functions and lacks of type or storage class.
  1743.  
  1744.         The following levels affect only preprocessing:
  1745.  
  1746.         5 :  includes  level  4   plus   warnings   and   errors   during
  1747.              preprocessing   (non-fatal   errors   and   warnings  during
  1748.              preprocessing are otherwise not displayed,  preprocessor  is
  1749.              running in 'silent mode'),
  1750.         6 :  includes   level   5  plus  remarks/slight  warnings  during
  1751.              preprocessing.
  1752.  
  1753.         The output format for messages during file scan is
  1754.  
  1755.              file name(line): error: description
  1756.              file name(line): warning: description
  1757.  
  1758.         and during preprocessing (warning levels 5 and 6)
  1759.  
  1760.              preprocessor: file name(line): error: description
  1761.                   source line
  1762.              preprocessor: file name(line): warning: description
  1763.                   source line
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.                                      - 29 -
  1770.  
  1771.  
  1772.         -C++      (CFT, CST)
  1773.         Enable C++ source code processing.  This includes the handling of
  1774.         C++  comments  '//...',  the  recognition of C++ keywords and the
  1775.         definition of the macro name '__cplusplus' for preprocessing.  If
  1776.         a   supported   compiler  defines  additional  macro  names  like
  1777.         '__TCPLUSPLUS__' for Turbo-C they will  also  be  defined  before
  1778.         preprocessing.  Option  -C++  is strictly required to process C++
  1779.         code correct.
  1780.  
  1781.         -X        (CFT, CST)
  1782.         Assume a UNIX-style text file: no CR,  only LF.  The default is a
  1783.         DOS-style text file with CR+LF.  Any other combination like CR in
  1784.         UNIX-files, CR without following LF or LF without preceding CR in
  1785.         DOS-files will cause a warning message.  This option is useful to
  1786.         detect  possible  conversion  errors  between different operating
  1787.         systems or incorrect editor configuration settings.
  1788.  
  1789.         -Y        (CFT, CST)
  1790.         Ignore CR+LF checks.  This option disables all checks  which  are
  1791.         done  for unexpected CR+LF combinations in DOS or UNIX files.  If
  1792.         option -Y is set,  option -X will be ignored.  This option can be
  1793.         useful  if there would be too many messages concerning that error
  1794.         or if this message would be of no interest for the user.
  1795.  
  1796.         -F        (CFT, CST)
  1797.         Use only ASCII characters for the tree chart  output  instead  of
  1798.         the default semigraphic characters.  This option is useful if the
  1799.         generated output file should be printed on a printer  which  does
  1800.         not  support  semigraphic characters like they are defined in the
  1801.         IBM character set. It can also be used to prepare the output file
  1802.         for use in a WINDOWS application like MicroEMACS if there  is  no
  1803.         font with semigraphics available.
  1804.  
  1805.         -e[char]  (CFT, CST)
  1806.         Generate  formatted ASCII text files with function/data type list
  1807.         and file list.  All entries are separated by the optional  'char'
  1808.         character,  if 'char ' is not defined, the tabulator character is
  1809.         used. If spaces are wanted as separating characters,  you have to
  1810.         write -e" ". Such prepared files can be used directly as input to
  1811.         other programs like word processors (e.g. MS-WORD for WINDOWS) or
  1812.         spreadsheet   calculators  (e.g.   MS-EXCEL),   for  example  for
  1813.         documentation purposes. The following files are created:
  1814.  
  1815.         CFTITEMS.TXT:
  1816.         Contents: function name, return type, file name, line #,  total #
  1817.         of  function  bytes,  # of function comment bytes,  # of function
  1818.         lines, # of control statements, # of brace levels
  1819.  
  1820.         CSTITEMS.TXT:
  1821.         Contents: data type name, file name line #
  1822.  
  1823.         CFTFILES.TXT and CSTFILES.TXT:
  1824.         Contents: file name, # of lines, file size in bytes, # of comment
  1825.         bytes, # of functions/data types
  1826.  
  1827.  
  1828.  
  1829.  
  1830.                                      - 30 -
  1831.  
  1832.  
  1833.         -G[name]  (CFT, CST)
  1834.         Generate a database with the complete set of  informations  about
  1835.         the processed sources.  The additional parameter 'name' (path and
  1836.         file name) is used as an unique base name for the set of database
  1837.         files (up to 6 significant characters), a default name ('CXT') is
  1838.         used if no  name  is  specified.  The  generated  database  files
  1839.         (extension '.DBF') are dBASE compatible. There are two additional
  1840.         files  created,  one  with  the  command  line options (extension
  1841.         '.CMD') and one with  a  list  of  the  source  files  (extension
  1842.         '.SRC')  being  use for database generation.  They can be used as
  1843.         command line definition files with '$'  (command  list)  and  '@'
  1844.         (file list).
  1845.  
  1846.         As  a result of the database generation you will find files named
  1847.         'CXTxy.ext' (default name 'CXT') respectively 'namexy.ext'  (user
  1848.         defined 'name'), where 'x' will be 'F' for CFT or 'S' for CST and
  1849.         'y'  is  replaced  by  an  internally  used character to mark the
  1850.         different database files and their contents.
  1851.  
  1852.         -g[name]  (CFT, CST)
  1853.         Read  a  previously  generated  database  (see  option  -G).  The
  1854.         additional  parameter  'name'  (path and file name) is used as an
  1855.         unique base  name  for  the  set  of  database  files  (up  to  6
  1856.         significant  characters),  a  default  name ('CXT') is used if no
  1857.         name is specified.  Every source file will be tested for  changes
  1858.         of file creation time and file size and a warning message will be
  1859.         given to inform the user.
  1860.  
  1861.         -?        (CFT, CST)
  1862.         -h[elp]
  1863.         -H[elp]
  1864.         Shows  the  command  line syntax and gives a short,  but complete
  1865.         help information about the accepted commands and their syntax.
  1866.  
  1867.         cmdfile   (CFT, CST)
  1868.         Specifies a file with (additional)  command  line  options.  This
  1869.         might  be useful if the command line would be too long because of
  1870.         the number of options and files declared or if  you  are  usually
  1871.         using  the  same  options  which  can then be stored in a command
  1872.         file.  The initial '$'-character is required to  mark  a  command
  1873.         file.
  1874.  
  1875.         [+]file   (CFT, CST)
  1876.         The name of a source file to be processed. More than one file can
  1877.         be specified on the command line.  The default assumption for the
  1878.         given files is that they contain C source code.  Assembler source
  1879.         files  are  only  recognized  by the file extension '.ASM' (80x86
  1880.         MASM/TASM) and '.S' (Intel 80960, GNU).
  1881.  
  1882.         The '+' sign indicates that,  starting from the given  directory,
  1883.         all  subdirectories  should be searched recursively for the given
  1884.         file name search pattern.  This addition is  useful  if  a  large
  1885.         software  project  is  divided into several modules with separate
  1886.         subdirectories for each module.  In that case only  the  starting
  1887.  
  1888.  
  1889.  
  1890.  
  1891.                                      - 31 -
  1892.  
  1893.  
  1894.         (root-)directory with the requested file name search pattern must
  1895.         be   specified   to   search   the   current  directory  and  all
  1896.         subdirectories.
  1897.  
  1898.         If the file name or the include file specification inside a  file
  1899.         contains a relative path ('./',  '.\', '../' or '..\') it will be
  1900.         translated into  an  absolute  path  starting  from  the  current
  1901.         working directory respectively in case of include files depending
  1902.         on  the  path of the parent file.  Command line wildcards '*' and
  1903.         '?' are possible and will be accepted.
  1904.  
  1905.         filelist  (CFT, CST)
  1906.         A file with a list of source file(s) to be  processed,  wildcards
  1907.         are  accepted.  The  list file should have every file on a single
  1908.         line.  The rules for files containing  assembler  code  and  path
  1909.         translation  are  described  above.  The initial '@'-character is
  1910.         required to mark a filelist file.  The '+' sign for  subdirectory
  1911.         processing is also possible inside the filelist file.
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.                                      - 32 -
  1953.  
  1954.  
  1955.         REMARKS ON USING OPTIONS
  1956.  
  1957.         None  of  the above described options is predefined so it's up to
  1958.         the user himself to customize his preferred processing and output
  1959.         style by adding control options needed therefore.  This seems  to
  1960.         be the best way to give the users the freedom of making their own
  1961.         decisions  about  the  features  they really need for doing their
  1962.         work.
  1963.  
  1964.         Some of the above described options should be regarded  and  used
  1965.         as 'default' options to generate a readable,  complete and useful
  1966.         output file without  unexpected  side  effects.  So  the  minimum
  1967.         default command lines should be
  1968.  
  1969.              CFT -m -ra <files>
  1970.              CST -ra <files>
  1971.  
  1972.         Both  command  sets  generate  a  complete listing containing all
  1973.         items with file name and line reference and a cross reference  id
  1974.         for repeated use (options -ra).  The option -m for CFT forces the
  1975.         output  to  start  with  the  'main'  function  (if  found).  The
  1976.         precompile  option  -P is not strictly necessary though for exact
  1977.         results it should also be set together with the  -T  option.  The
  1978.         standard default command line might be
  1979.  
  1980.              CFT -m -rauspMP -T<type> -cs -Cs -na -Zs -G <file[s]>
  1981.              CST -rapMP -T<type> -cs -Cs -na -Zs -G <file[s]>
  1982.  
  1983.         If you start using CFT and CST for your own business,  take these
  1984.         options as a basic set and try other options to get a feeling for
  1985.         what they are useful and how they affect the output.
  1986.  
  1987.         The large number of options may be confusing  for  beginners  but
  1988.         this  is  the  only  way  to  give  the  users the flexibility of
  1989.         customising their own output. Therefore,  take some time to learn
  1990.         about CFT and CST and their features,  read this manual carefully
  1991.         and make your own experiences with this software.
  1992.  
  1993.         It is possible to declare more than one source file, command file
  1994.         and list file on the command line.  In that  case  they  will  be
  1995.         processed  in  the  order  they appear.  Files and options can be
  1996.         placed  in  mixed  order  on  the  command  line,   there  is  no
  1997.         recommended order for them because all options (also those inside
  1998.         command  files!)  will  be processed before any source files were
  1999.         scanned.
  2000.  
  2001.         The maximum command line length for DOS  is  127  characters,  so
  2002.         this  is  a  system dependent 'natural' limit for the options and
  2003.         file names being declared.  If you have more  items  to  declare,
  2004.         place them into command list files and file list files,  which do
  2005.         not have such limitations.
  2006.  
  2007.         Options can also be defined by the environment variables CFT  and
  2008.         CST (also used for CFT386 and CST386) like
  2009.  
  2010.  
  2011.  
  2012.  
  2013.                                      - 33 -
  2014.  
  2015.  
  2016.              SET CFT=...
  2017.              SET CST=...
  2018.  
  2019.         To separate single options in the environment string,  spaces are
  2020.         required.  See also the description for the -D option for remarks
  2021.         on environment variable definitions.
  2022.  
  2023.         The rules for the interpretation of options is
  2024.  
  2025.         1.   if  defined,  all  options  in the environment variables CFT
  2026.              (for CFT and CFT386) or CST (for CST  and  CST386)  will  be
  2027.              taken,
  2028.         2.   the  command  line  options  and  the  option  files will be
  2029.              interpreted in the order they appear.
  2030.  
  2031.         If an option is declared different more than once  then  previous
  2032.         declarations will be overwritten by the newer one.
  2033.  
  2034.         If  options  are  represented  by  a  single  character  with  no
  2035.         additional optional values possible like -r or -a,  they  can  be
  2036.         grouped together with a single leading '-' in front like '-rasM',
  2037.         which is the same as '-r -a -s -M'.  The last option however, can
  2038.         have  additions,   for  example  '-rasMmWinMain'  which  can   be
  2039.         evaluated  to  '-r -a -s -M -mWinMain'.  If an option can have an
  2040.         additional parameter,  the parameter must be specified without  a
  2041.         space between the option character. Leaving this space means that
  2042.         no additional parameter is given for this option.
  2043.  
  2044.         File names being composed of drive letter,  directory name,  file
  2045.         name and file extension,  in the  following  referred  simply  as
  2046.         'path  name',  are  treated by some special procedures to force a
  2047.         unique style of their internal representation:
  2048.  
  2049.         -    path names are always  considered  not  case  sensitive,  so
  2050.              there  is no difference in upper case,  lower case and mixed
  2051.              case path names (the reason is that DOS does  not  make  any
  2052.              difference),
  2053.         -    path names containing './', '.\', '../' and '..\' (so called
  2054.              'relative paths') are expanded and transformed into absolute
  2055.              paths,
  2056.         -    the recommended directory delimiter is '/' (UNIX-style),  if
  2057.              a '\' (DOS-style) is recognized in a path name,  it will  be
  2058.              replaced by '/',
  2059.         -    path  names  are  always  expanded  and transformed into the
  2060.              default style
  2061.  
  2062.                   <DRIVE LETTER>:<DIRECTORY PATH>/<FILE NAME>
  2063.  
  2064.              to get a unique representation for every file name that must
  2065.              be handled during processing.
  2066.  
  2067.         These  actions  are  done  with  every  path  name  during   file
  2068.         processing.  File  names  given  on  the  command  line  are also
  2069.         transformed.
  2070.  
  2071.  
  2072.  
  2073.  
  2074.                                      - 34 -
  2075.  
  2076.  
  2077.         If you want  to  perform  database  generation  (option  -G)  for
  2078.         different  projects,  you  are  responsible  to separate them and
  2079.         avoid overwriting of existing databases.  This can be done either
  2080.         by  giving  the  databases  different  names so that the database
  2081.         files can be placed all in the same directory,  or every database
  2082.         must be written into its own directory. If you want to access the
  2083.         databases  be  sure  to  use  the correct name and/or path,  also
  2084.         within the BRIEF or MicroEMACS editors.
  2085.  
  2086.  
  2087.         COMMAND LINE EXAMPLES
  2088.  
  2089.         1.   CFT -m -rau *.c
  2090.         This program invocation of  CFT  processes  all  files  with  the
  2091.         extension  ".c"  in the current directory and generates an output
  2092.         file starting with the "main"-function (option -m) for the output
  2093.         tree.  Every function will be displayed with file and line number
  2094.         reference and a cross reference number (option -r). All functions
  2095.         will be shown in lexicographical order (-a),  also undefined ones
  2096.         (-u).
  2097.  
  2098.         2.   CFT -mWinMain -rausMP -TMSC70,L -Id: -cs -Cs -na  -ve:  -C++
  2099.              *.c ..\*.c *.cpp
  2100.         This  invocation  is similar to the one described above with some
  2101.         extensions.  The source files from the current (*.c,  *.cpp)  and
  2102.         from  the  parent  (..\*.c) directory,  they will be preprocessed
  2103.         (-P) with MS-C 7.0 defines for large  memory  model  (-TMSC70,L),
  2104.         the include file path will be taken from the environment variable
  2105.         "INCLUDE"  (default for -P) and the path "d:" (-Id:) will also be
  2106.         searched for.  The precompiler output  is  stored  in  path  "e:"
  2107.         (-ve:).  C++  extensions  and keywords will be recognized if they
  2108.         occur (-C++).  The output will start with the  "WinMain"-function
  2109.         (-mWinMain).  There  will  be a sorted call statistic (-cs) and a
  2110.         function summary for every scanned  file  (-Cs)  with  additional
  2111.         informations for every function (-s).  The critical function call
  2112.         path for all functions will be calculated and displayed (-na) and
  2113.         the included files of every source file will be shown (-M).
  2114.  
  2115.         3.   CST -S"struct _test" -r *.h -W2 -C++
  2116.         Start CST to  scan  all  files  in  the  current  directory  with
  2117.         extension  ".h" for data types.  They will be displayed with file
  2118.         name and line number reference and cross reference  number  (-r).
  2119.         The  output  should  be  done  for  the  data type 'struct _test'
  2120.         (-S"struct _test"). The warning level is set to "2" (-W2).
  2121.  
  2122.         4.   CFT y.c -R -Dmain=main_entry z.c -P x.c
  2123.         Start CFT to produce a reverse calling tree (-R) of the functions
  2124.         found in  the  files  "x.c",  "y.c"  and  "z.c"  in  the  current
  2125.         directory.  The files will be preprocessed (-P) before file scan,
  2126.         the  name  "main"  will  be  replaced  by   "main_entry"   during
  2127.         preprocessing (-Dmain=main_entry).
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.                                      - 35 -
  2136.  
  2137.  
  2138.         5.   CST $cst1.cmd $cst2.cmd -ve\tmp: @cstfiles +*.h -olist.v1a
  2139.         This  invocation  of  CST  receives  its options from the command
  2140.         files "cst1.cmd"  and  "cst2.cmd"  and  stores  the  preprocessor
  2141.         output in path "e:\tmp" (-ve:\tmp). The files being processed are
  2142.         defined  in  the  source  list file "cstfiles" and on the command
  2143.         line by  "+*.h".  The  "+*.h"  file  specification  searches  the
  2144.         current  directory  and  all  subdirectories  for  files with the
  2145.         extension  ".h".   The  output  file  will  be  named  "list.v1a"
  2146.         (-olistv1a).
  2147.  
  2148.         6.   CFT -ra -PGNUINC -TGNU -M c:\gnu\src\*.c c:\gnu\src\*.s -d10
  2149.         CFT scans all files with extension ".c" and ".s" in the directory
  2150.         "c:\gnu\src". They will be preprocessed with an include file path
  2151.         defined  in environment variable "GNUINC" (-PGNUINC) for compiler
  2152.         type "GNU" (-TGNU).  The output contains all functions (-a)  with
  2153.         complete  reference  information  (-r) and a list of all included
  2154.         files for every  source  file  (-M).  The  output  tree  will  be
  2155.         truncated if the nesting level is higher than 10 (-d10).
  2156.  
  2157.         7.   CST *.c
  2158.         CST  processes  all  files  with  extension  ".c"  in the current
  2159.         working directory.  There are no options specified,  so only  the
  2160.         options set by the environment variable 'CST',  if present,  will
  2161.         be used to customize the program execution.  As  an  example  the
  2162.         command  line  options  used  in  example  6.  can  be defined as
  2163.         environment variable CST by 'SET CST=-raMKPGNUINC -TGNU -d10'.
  2164.  
  2165.         8.   CFT -ra -PI960INC -TI960,KB *.c *.s
  2166.         CFT scans all files with extension ".c" and ".s" in  the  current
  2167.         directory.  They  will  be preprocessed with an include file path
  2168.         defined  in  environment  variable  "I960INC"   (-PI960INC)   for
  2169.         compiler type "I960",  'KB' architecture (-TI960,KB).  The output
  2170.         contains all functions (-a) with complete  reference  information
  2171.         (-r).
  2172.  
  2173.         9.   CFT -rRM -gproj40 -Gproj41
  2174.         CFT reads the database named 'proj40' (-g) and produces as output
  2175.         the  reverse  function  call  tree  (-R)  with complete reference
  2176.         information (-r), the (include) file interdependencies (-M) and a
  2177.         new database named 'proj41'.
  2178.  
  2179.         10.  CST -g -Gnew -N
  2180.         CST reads the  default  database  (-g)  and  produces  as  output
  2181.         another  database  named  'new' (-Gnew).  No other output file is
  2182.         generated (-N).
  2183.  
  2184.         11.  CST -N -OTEST -O+ test.h
  2185.         CST reads the file "test.h", generates no output file (-N), but a
  2186.         byte offset calculation file for data type  'TEST'  (-OTEST)  and
  2187.         its enclosed type members (-O+).
  2188.  
  2189.  
  2190.  
  2191.  
  2192.  
  2193.  
  2194.  
  2195.  
  2196.                                      - 36 -
  2197.  
  2198.  
  2199.         10   OUTPUT DESCRIPTION AND INTERPRETATION
  2200.  
  2201.         This section gives an overview about the files being generated by
  2202.         CFT  and  CST  and  the interpretation of the results.  Different
  2203.         files are produced as output depending on the options  being  set
  2204.         by  the  user.  Usually,  if -N is not set,  all informations are
  2205.         written to the default output file CFT.LST or CST.LST or  to  the
  2206.         file specified by the -o option.  The internal structure of these
  2207.         files  and  their  meanings  are  described  below.  If  database
  2208.         generation is enabled with option -G, several files are produced.
  2209.         They  all  have a common database name to identify the files that
  2210.         are related with a project.  The file extension '.DBF' marks  the
  2211.         dBASE  compatible  database  files,  the  file with the extension
  2212.         '.CMD' contains the command line options and the  file  with  the
  2213.         extension  '.SRC'  contains all source files that were processed.
  2214.         For further informations refer to the  corresponding  section  in
  2215.         the syntax description.
  2216.  
  2217.  
  2218.         CFT OUTPUT
  2219.  
  2220.         The  output  file  is divided into several sections.  Some of the
  2221.         sections listed are generated by default (-), others are optional
  2222.         (o) and only displayed if they are  enabled  by  a  command  line
  2223.         option.  Also,  the default sections can be customized to produce
  2224.         the desired output.  The sections generated for CFT are  (in  the
  2225.         order they appear):
  2226.  
  2227.         -    file header
  2228.         -    function calltree/called-by hierarchy listing (-r,  -R,  -x,
  2229.              -a, -m, -f, -dn, -V, -l)
  2230.         -    function summary
  2231.         -    multiple defined  functions  and  their  location  (only  if
  2232.              detected)
  2233.         -    overloaded functions and their location (only if detected)
  2234.         o    undefined functions (-u)
  2235.         o    function call statistics (-c[s])
  2236.         o    function caller/member relations (-Z[s])
  2237.         o    function call cross reference table (-z)
  2238.         o    critical function call path (-n[a])
  2239.         o    source file - include file dependency (-M)
  2240.         o    function tables for source files (-C[s], -s, -q)
  2241.         -    file information summary (-p, -q)
  2242.  
  2243.         Each function is displayed like:
  2244.  
  2245.              int test()  (1) <DMPCA> <TEST.C, 100>
  2246.  
  2247.         with the following meanings
  2248.  
  2249.              - int          : function return type
  2250.              - test()       : function name
  2251.              - (1)          : function reference number
  2252.  
  2253.  
  2254.  
  2255.  
  2256.  
  2257.                                      - 37 -
  2258.  
  2259.  
  2260.              - <DMPCA>      : found as (one or more of)
  2261.                                  D = definition,
  2262.                                  M = macro,
  2263.                                  P = prototype,
  2264.                                  C = function call,
  2265.                                  A = assembler function
  2266.              - <TEST.C, 100>: file name, line number
  2267.  
  2268.         The  line  number is the line where the function definition block
  2269.         starts with its initial '{' and not the line where  the  function
  2270.         name  resides.  I think that this is the best solution because it
  2271.         is the point where we go really inside the function  block.  This
  2272.         convention  is also used by source level debuggers which point on
  2273.         the line with the opening brace on function entry.
  2274.  
  2275.  
  2276.         CST OUTPUT
  2277.  
  2278.         The output file is divided into several  sections.  Some  of  the
  2279.         sections listed are generated by default (-), others are optional
  2280.         (o)  and  only  displayed  if  they are enabled by a command line
  2281.         option.  Also,  the default sections can be customized to produce
  2282.         the  desired  output.  The sections generated for CST are (in the
  2283.         order they appear):
  2284.  
  2285.         -    file header
  2286.         -    data structure calltree/called-by hierarchy listing (-r, -R,
  2287.              -x, -a, -m, -f, -dn)
  2288.         -    data type summary
  2289.         -    multiple defined data types  and  their  location  (only  if
  2290.              detected)
  2291.         o    data type call statistics (-c[s])
  2292.         o    data type caller/member relations (-Z[s])
  2293.         o    data type call cross reference table (-z)
  2294.         o    maximum data type nesting (-n[a])
  2295.         o    source file - include file dependency (-M)
  2296.         o    data type tables for source files (-C[s], -s, -q)
  2297.         -    file information summary (-p, -q)
  2298.  
  2299.         Each data type is displayed like:
  2300.  
  2301.              struct _test  (1) <BSUCE> <TEST.C, 90> <TEST.C, 60>
  2302.  
  2303.         with the following meanings
  2304.  
  2305.              - struct _test : type specifier
  2306.              - (1)          : reference number
  2307.              - <BSUCE>      : data type (one/none of):
  2308.                                  B = basic type (void, char, int, ...),
  2309.                                  S = struct,
  2310.                                  U = union,
  2311.                                  C = class,
  2312.                                  E = enum
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.                                      - 38 -
  2319.  
  2320.  
  2321.              - <TEST.C, 90> : file name, line number of type definition
  2322.                               (only printed if necessary)
  2323.              - <TEST.C, 60> : file name, line number of basic type
  2324.                               definition
  2325.  
  2326.         The two locations for the data type can occur if the data type is
  2327.         first  defined  and  later assigned via 'typedef' or by '#define'
  2328.         (if -P is not set) to another data type name:
  2329.  
  2330.         test.c:   ...
  2331.         line 60:  struct xyz {...};
  2332.                   ...
  2333.         line 90:  typedef struct xyz struct _test;
  2334.                   ...
  2335.  
  2336.         Their definition is on different lines but both data  type  names
  2337.         refer to the same data structure.
  2338.  
  2339.         Like  the  convention used for functions,  the line number is the
  2340.         line where  the  structure,  union,  enumeration  or  class  type
  2341.         definition  block  starts  with  its initial '{' and not the line
  2342.         where the type name resides.
  2343.  
  2344.         For an example session and more detailed informations  about  the
  2345.         generated output of CFT and CST see the file EXAMPLE.DOC.
  2346.  
  2347.  
  2348.         OUTPUT INTERPRETATION
  2349.  
  2350.         Besides the hierarchical structure chart of the function and data
  2351.         type relationships,  the resulting output contains several useful
  2352.         informations  about  the  program   which   can   be   used   for
  2353.         optimization, reuse or maintenance purposes. Identifying the most
  2354.         frequently  called functions is a good way to find candidates for
  2355.         further optimization.  Low-level functions with many callers  but
  2356.         no  called  subfunctions  are ideal for reuse.  Functions with no
  2357.         callers may be useless if the function is  also  not  called  via
  2358.         function  pointers and can be discarded therefore.  The chance to
  2359.         find errors in complex functions with many lines of source  code,
  2360.         many  called  functions  and  a lot of control statements is much
  2361.         bigger than in simple functions.
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.                                      - 39 -
  2380.  
  2381.  
  2382.         11   INTEGRATION INTO PROGRAMMING ENVIRONMENTS
  2383.  
  2384.         Invoking CFT and CST directly from inside editors  or  integrated
  2385.         programming  environments (IDE) and displaying the results can be
  2386.         a very useful feature during program development.  With  advanced
  2387.         IDE's  like  that of Borland C++ or Microsoft PWB this is an easy
  2388.         task.
  2389.  
  2390.         The Borland IDE has in its system menu a section  with  'transfer
  2391.         items.  It  contains programs that can be invoked from inside the
  2392.         IDE like TASM or GREP. To add CFT and CST as new entries you have
  2393.         to go to the OPTIONS menu and open 'TRANSFERS...'.  Choose a free
  2394.         entry  in  the  table and select EDIT.  A window will open with 3
  2395.         edit lines.  In first line called 'Program Title' you must  write
  2396.         'C~FT'  resp.  'C~ST' as the name being displayed in the transfer
  2397.         section. The '~' prepends the hot-keys 'F' and 'S'. In the second
  2398.         line  called  'Program  Path'  you  must  write  'CFTIDE'   resp.
  2399.         'CSTIDE',  maybe with the complete path,  if necessary.  'CFTIDE'
  2400.         and 'CSTIDE' are two batch files which perform the invocation  of
  2401.         CFT  resp.  CST together with the necessary options.  These batch
  2402.         files are part of the CXT package,  you can  change  the  options
  2403.         defined  there  if you need other ones.  In the third line called
  2404.         'Command Line' you must write the macro commands '$EDNAME $NOSWAP
  2405.         $CAP EDIT'.  These macros transfer the file name in  the  current
  2406.         edit window ($EDNAME) to the batch file, suppress window swapping
  2407.         ($NOSWAP)  and  capture  the  processing  results  in an own edit
  2408.         window ($CAP EDIT). The last step is to save these entries,  then
  2409.         the  integration  is  completed and CFT and CST can be used as if
  2410.         they were built-in functions. The processing results are shown in
  2411.         an edit window which can be scrolled, resized or moved. By adding
  2412.         CFT and CST to the IDE it is much easier for  the  programmer  to
  2413.         use these tools.
  2414.  
  2415.  
  2416.  
  2417.  
  2418.  
  2419.  
  2420.  
  2421.  
  2422.  
  2423.  
  2424.  
  2425.  
  2426.  
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.                                      - 40 -
  2441.  
  2442.  
  2443.         12   TOOLS FOR DATABASE PROCESSING
  2444.  
  2445.         To  access  informations  stored  in  a  database,  the following
  2446.         utilities are available for 'CFT' and 'CST':
  2447.  
  2448.              CFTN      C Function Tree Navigator
  2449.              CSTN      C Structure Tree Navigator
  2450.  
  2451.         They can be used to recall the file name and  line  number  of  a
  2452.         specific  item (function or data type) from the database.  If the
  2453.         requested item is found in the database,  it  will  be  displayed
  2454.         with  its  location  where it is defined or where it is found for
  2455.         the  first  time  if  there  was  no  definition   found   during
  2456.         processing.
  2457.  
  2458.         As  an  additional  feature editors like BRIEF 3.0,  QEDIT 2.1 or
  2459.         MicroEMACS 3.11 can be invoked directly with the informations  to
  2460.         open the target file and to move the cursor to the line where the
  2461.         searched  item  is  located.  For  BRIEF there are several macros
  2462.         available to perform searching inside  the  editor.  A  new  edit
  2463.         window  with  the file at the location of the requested item will
  2464.         be opened if the search  was  successful.  Also  both  MicroEMACS
  2465.         editor versions for DOS and WINDOWS are supported.  Some of these
  2466.         actions are also possible for QEDIT,  with slight limitations due
  2467.         to the macro programming capabilities.
  2468.  
  2469.         Other user programmable editors which should be able to work with
  2470.         CFTN  and  CSTN are EPSILON,  ME,  KEDIT,  Multi-Edit,  GNU-EMACS
  2471.         portations like DEMACS or  OEMACS,  the  Microsoft  editor  M  or
  2472.         integrated development environments like Borland or Microsoft PWB
  2473.         (this  list  may not be complete).  You can try to integrate CFTN
  2474.         and CSTN  into  these  systems  by  using  the  BRIEF,  QEDIT  or
  2475.         MicroEMACS  macro  files  as  examples  for  your own integration
  2476.         development.
  2477.  
  2478.         PRECOMPILED SOURCE FILES
  2479.  
  2480.         Sometimes,  if the precompile option -P was used to  process  the
  2481.         source  files related with the database,  the results of searches
  2482.         seem to be wrong.  This can happen if an identifier in the source
  2483.         code  is in fact defined as a macro and has been exchanged during
  2484.         preprocessing so that  the  resulting  source  processed  by  the
  2485.         analyser  is  different  from  the original source and the cursor
  2486.         will point to an obviously  wrong location  or  the  search  will
  2487.         fail.  An identifier which is in fact a macro name is unknown and
  2488.         not accessible after precompiling.  It is also  possible  that  a
  2489.         function  being used in the original source could not be found in
  2490.         the database.  The reason is that  the  function  is  in  fact  a
  2491.         'function  like' macro and was replaced during preprocessing.  If
  2492.         different named macros are defined equal,  a search for  an  item
  2493.         may  point  to  another  location  than the requested.  If the -P
  2494.         option is not set,  the same item can have several 'alias'- names
  2495.         due to macro defining. If the source code contains explicit #line
  2496.         numbers,  searching for a specific line may also fail. Keep these
  2497.         exceptions in mind for a correct interpretation the results  when
  2498.         using the database.
  2499.  
  2500.  
  2501.                                      - 41 -
  2502.  
  2503.  
  2504.  
  2505.         IMPORTANT NOTICE
  2506.  
  2507.         Recalling  informations  from  the  database  may not be valid if
  2508.         files being processed by CFT or CST were edited and changed after
  2509.         the database generation has been  performed.  Errors  can  result
  2510.         like  pointing  to  wrong files and/or lines if source lines have
  2511.         been deleted or inserted,  failed searches if names have  changed
  2512.         or failed accesses to files which may have been renamed, moved or
  2513.         deleted.  To avoid these errors, a consistency check for the file
  2514.         creation date/time and file size will be performed  by  CFTN  and
  2515.         CSTN.  If  inconsistencies  are  recognized,  the  user  will  be
  2516.         informed that the  database  is  not  up-to-date  and  should  be
  2517.         updated by processing the source files again.
  2518.  
  2519.  
  2520.         SYNTAX:   CFTN [options] pattern
  2521.                   CFTN [options] pattern
  2522.  
  2523.         OPTIONS
  2524.  
  2525.         -Eeditor
  2526.         Specifies  the editor command line for option -e,  overwrites the
  2527.         default  and  the  environment  values.  See  the  section  about
  2528.         environment variables for further informations about the required
  2529.         format.
  2530.  
  2531.         -F
  2532.         Print  all  file names which are related with the database.  This
  2533.         option is useful to get a complete overview about  all  files  of
  2534.         the project.
  2535.  
  2536.         -a
  2537.         Print all function/data type names.  Useful to generate a list of
  2538.         items, for example as input to other programs.
  2539.  
  2540.         -B
  2541.         Same as -a,  but prints additionally the internal database record
  2542.         number. Used by BRIEF macros.
  2543.  
  2544.         -bform
  2545.         Run search in batch-mode,  this means that, if the requested item
  2546.         was found,  the location will be displayed on a  single  line  as
  2547.         "file name line number" (default style),  otherwise there will be
  2548.         no output that the search failed. The output style can be changed
  2549.         by specifying 'form' to overwrite the  default  style.  Like  for
  2550.         option -E you can specify the exact locations where the file name
  2551.         and  line  number  should be inserted by defining a format string
  2552.         with  %s  and  %d  (See  also  the  section   about   environment
  2553.         variables).  For  example,  the format to generate a command line
  2554.         for invoking BRIEF, QEDIT or MicroEMACS would look like
  2555.  
  2556.              cstn -b"b -m\"goto_line %d\" %s" ...         (BRIEF)
  2557.              cstn -b"q %s -n%d" ...                       (QEDIT)
  2558.              cstn -b"me -G%d %s"                          (MicroEMACS)
  2559.  
  2560.  
  2561.  
  2562.                                      - 42 -
  2563.  
  2564.  
  2565.         This option gives you a great flexibility in generating an output
  2566.         for your own purposes,  for example to write a batch file or  for
  2567.         further use in other programs.
  2568.  
  2569.         -e
  2570.         If  the  requested  item  is found,  an editor will be invoked to
  2571.         display the file containing the requested item.  There are  three
  2572.         different  ways  to specify the editor command line (evaluated in
  2573.         that order):
  2574.  
  2575.         1)   use option -E,
  2576.         2)   define  the  environment  variables  CFTNEDIT,  CSTNEDIT  or
  2577.              CXTNEDIT,
  2578.         3)   if  nothing  is  specified,  BRIEF as the default editor (if
  2579.              present) will be invoked with the file name and line  number
  2580.              of the item to move the cursor to its location.  Ensure that
  2581.              the PATH environment variable is  set  correctly,  including
  2582.              the path for the BRIEF directory.
  2583.  
  2584.         -fname
  2585.         Use  'name' as base name (path and file name) for database files.
  2586.         It is also  possible  to  use  environment  variables  (CFTNBASE,
  2587.         CSTNBASE,  CXTNBASE) for the definition of the database names. If
  2588.         -f and environment variables are not set,  a default name will be
  2589.         used  (see  also  option -G from CFT and CST syntax description).
  2590.         This  allows  the  use  of  different  databases,   for  example,
  2591.         generated  for  different  projects.  See  also the section about
  2592.         environment variables for further information.
  2593.  
  2594.         -r#
  2595.         This option prints the location for a selected item with matching
  2596.         pattern and record number #.  This option requires  -b.  Used  by
  2597.         BRIEF macros.
  2598.  
  2599.         -Ritem
  2600.         Print  a  cross reference list of every occurrence of 'item' with
  2601.         complete file name and line number.
  2602.  
  2603.         -Dfile
  2604.         Print a list with the contents of 'file'.
  2605.  
  2606.         pattern
  2607.         The item to search for in the database.  This  can  either  be  a
  2608.         function name (CFTN) or a data type name (CSTN).  There are three
  2609.         different ways of searching depending how 'pattern' is given:
  2610.  
  2611.         pattern        exact search,
  2612.         pattern*       the beginning of the item must match with pattern
  2613.         *pattern       a substring must match with pattern
  2614.  
  2615.         If the item  to  search  for  consists  of  more  than  one  word
  2616.         (contains  spaces),  the  search  pattern  must  be 'quoted' like
  2617.         "struct _iobuf" to ensure that these  words  are  interpreted  as
  2618.         single pattern.
  2619.  
  2620.  
  2621.  
  2622.  
  2623.                                      - 43 -
  2624.  
  2625.  
  2626.         RETURN VALUES
  2627.  
  2628.         The  following  values are returned to DOS or the calling program
  2629.         to report the result of the database search:
  2630.  
  2631.         -    0    searched item not found,
  2632.         -    1    searched item found,
  2633.         -    2    searched item found,  but the source file may have been
  2634.                   changed  (creation date and/or file size are not equal)
  2635.                   since the creation of the  database  (database  is  not
  2636.                   up-to-date).
  2637.  
  2638.         The  returned  value  can be used to decide what action should be
  2639.         done for different results,  for example,  if the database is not
  2640.         up-to-date.
  2641.  
  2642.  
  2643.         ENVIRONMENT VARIABLES
  2644.  
  2645.         CFTNEDIT, CSTNEDIT, CXTNEDIT:
  2646.         The  editor  to  invoke  can be defined either by option -e or by
  2647.         defining the environment variables CFTNEDIT (for CFTN),  CSTNEDIT
  2648.         (for  CSTN) or the commonly used variable CXTNEDIT (for both CFTN
  2649.         and CSTN) with the format string of the editor  of  your  choice.
  2650.         The format string can be used to specify the place where the file
  2651.         name  and  the  line number should be inserted to give additional
  2652.         informations to the editor.  Use %s for the file name and %d  for
  2653.         the  line  number.  For  example,  the  invocation of the default
  2654.         editor BRIEF could be defined like
  2655.  
  2656.              SET CFTNEDIT=b -m"goto_line %d" %s
  2657.              SET CSTNEDIT=b -m"goto_line %d" %s
  2658.              SET CXTNEDIT=b -m"goto_line %d" %s
  2659.  
  2660.         where 'b' is the BRIEF editor,  '-m' specifies  the  macro  being
  2661.         invoked  when BRIEF starts,  the macro name 'goto_line' with '%d'
  2662.         as the place to insert the line number and '%s' as the place  for
  2663.         the  file  name.  Note  that  this  example cannot be used on the
  2664.         command line with -E option because of the quotes. It is possible
  2665.         to change the order of %d and %s if another editor is used.
  2666.  
  2667.         Here are additional  configuration  examples  for  other  popular
  2668.         editors (examples are given for CFTN, similar for CSTN):
  2669.  
  2670.         EDIT (MS-DOS 5.0):  SET CFTNEDIT=edit %s  or  -E"edit %s"   or
  2671.                             SET CFTNEDIT=edit     or  -Eedit
  2672.  
  2673.         VDE 1.62:           SET CFTNEDIT=vde %s   or  -E"vde %s"    or
  2674.                             SET CFTNEDIT=vde      or  -Evde
  2675.  
  2676.         QEDIT 2.1:          SET CFTNEDIT=q %s -n%d   or   -E"q %s -n%d"
  2677.  
  2678.         MicroEMACS 3.11:    SET CFTNEDIT=me -G%d %s  or   -E"me -G%d %s"
  2679.  
  2680.  
  2681.  
  2682.  
  2683.  
  2684.                                      - 44 -
  2685.  
  2686.  
  2687.         The described notation allows the user to customize CFTN and CSTN
  2688.         with  his  preferred  editor  and  to  perform additional actions
  2689.         during invocation. If your editor supports macro programming like
  2690.         BRIEF you are free to write your own macros to do similar  things
  2691.         like  the CXT.CM macro given for BRIEF 3.0 does.  I think this is
  2692.         the most flexible way to give users control about this option and
  2693.         to help them working with their preferred programming environment
  2694.         and development tools.
  2695.  
  2696.         CFTNBASE, CSTNBASE, CXTNBASE:
  2697.         These environment variables can be used to specify  the  name  of
  2698.         the  database.  Similar  to  the  editor  environment  variables,
  2699.         CFTNBASE and CSTNBASE are related to CFTN and CSTN  and  CXTNBASE
  2700.         is  used for both.  For example,  to specify the database 'proj1'
  2701.         located in directory 'd:\develop\projects' type
  2702.  
  2703.              SET CFTNBASE=d:\develop\projects\proj1
  2704.              SET CSTNBASE=d:\develop\projects\proj1
  2705.  
  2706.         for a separate definition or
  2707.  
  2708.              SET CXTNBASE=d:\develop\projects\proj1
  2709.  
  2710.         for a common definition of the database name.
  2711.  
  2712.  
  2713.         COMMAND LINE EXAMPLES
  2714.  
  2715.         1)   CFTN *
  2716.         Displays all functions in lexicographical order with their return
  2717.         types, file names and line numbers.  Gives a short overview about
  2718.         all functions being found.
  2719.  
  2720.         2)   CSTN -e *
  2721.         Edit  all data types in lexicographical order,  use default or by
  2722.         environment variable CSTNEDIT or CXTNEDIT defined editor.
  2723.  
  2724.         3)   CFTN -fproject1 -Evde -e main
  2725.         Search database named 'project1' for  function  'main'  and  edit
  2726.         with editor 'vde'.
  2727.  
  2728.         4)   CSTN -b "union REGS"
  2729.         Search for data type 'union REGS' and display, if found, the file
  2730.         name and line number
  2731.  
  2732.         5)   CSTN -e -E"q %s -n%d" -fcft tmbuf
  2733.         Search database 'cft' for data type 'tmbuf' and invoke, if found,
  2734.         the editor 'q' (QEDIT V2.1) with the file name and line number
  2735.  
  2736.  
  2737.  
  2738.  
  2739.  
  2740.  
  2741.  
  2742.  
  2743.  
  2744.  
  2745.                                      - 45 -
  2746.  
  2747.  
  2748.         SEARCHING INSIDE BRIEF (Version 3.0)
  2749.  
  2750.         This  feature  is  one  of the most powerful enhancements for the
  2751.         BRIEF editor and offers the user full control over  the  complete
  2752.         source  code  of software projects no matter how big they are and
  2753.         how many files they include.  It extends the BRIEF  editor  to  a
  2754.         comfortable hypertext source code browser and locator system. The
  2755.         browser  allows  its  user  to  find  and  read various important
  2756.         program constructs like functions and data types in several files
  2757.         simultaneously and moving between them. The complete project with
  2758.         several source  and  include  files  appears  as  if  it  were  a
  2759.         'whole-part'. The browser helps the programmer to learn about the
  2760.         existing  program  structures  and supports him in developing new
  2761.         and  maintaining  existing  code.  The  programmer  can  use  the
  2762.         generated  output files CFT.LST or CST.LST (or the one he created
  2763.         with the -o option) to walk along the hierarchy tree chart and to
  2764.         select from there the  function  or  data  type  that  should  be
  2765.         displayed in detail.
  2766.  
  2767.         The following features are implemented as macros:
  2768.  
  2769.         -    searching for a specific item, tagged or marked
  2770.         -    building menus of all defined items
  2771.         -    building menus of all references to a specific item
  2772.         -    building menus of all processed files
  2773.         -    building menus of all items defined in the current file
  2774.         -    searching for a specific item cross reference number
  2775.         -    changing the database name
  2776.  
  2777.         Every  function  and  data  type  can  be  accessed  with  just a
  2778.         keystroke by moving the cursor on it ("tagging") and executing  a
  2779.         macro  to  locate  the  item  and  zoom into the file where it is
  2780.         defined.  The user does no longer have to remember the file names
  2781.         and  locations where the functions and data types are defined nor
  2782.         does he have to change  the  files,  directories  and  drives  to
  2783.         access the files manually.
  2784.  
  2785.         It  is  possible  to  build  interactive  dialog  menus  with all
  2786.         functions or data types in lexicographical order and to select an
  2787.         item to display.  This is very useful to  get  a  quick  overview
  2788.         about  all  accessible  functions  and  data  types  of the whole
  2789.         project.  It is also possible to build an interactive dialog menu
  2790.         with  all file names in lexicographical order which are stored in
  2791.         the database and to select one file to open for edit. Other menus
  2792.         are available for file contents lists and item cross  references.
  2793.         All  informations  to  perform  these  actions  are stored in the
  2794.         databases generated by processing  the  files  related  with  the
  2795.         project.
  2796.  
  2797.         To invoke CFTN and CSTN inside BRIEF,  the macro file CXT.CM must
  2798.         be loaded (with <F9> CXT.CM),  which makes the implemented macros
  2799.         available. These macros are
  2800.  
  2801.  
  2802.  
  2803.  
  2804.  
  2805.  
  2806.                                      - 46 -
  2807.  
  2808.  
  2809.              MACRO NAME          KEY ASSIGNMENT (defined in CXTKEYS.CM)
  2810.  
  2811.              cft                 Shift F1
  2812.              cftmenu             Shift F2
  2813.              cftxrefmenu         Shift F3
  2814.              cftxrefmenuagain    Shift F4
  2815.              cftdefmenu          Shift F7
  2816.              cftfilemenu         Shift F8
  2817.              cftfind             Shift F11
  2818.              cftbase             Shift F12
  2819.  
  2820.              cst                 Ctrl F1
  2821.              cstmenu             Ctrl F2
  2822.              cstxrefmenu         Ctrl F3
  2823.              cstxrefmenuagain    Ctrl F4
  2824.              cstdefmenu          Ctrl F7
  2825.              cstfilemenu         Ctrl F8
  2826.              cstfind             Ctrl F11
  2827.              cstbase             Ctrl F12
  2828.  
  2829.              cxtbase             Alt Tab
  2830.              cxtsearchxref       Ctrl Tab
  2831.              cxthelp             <unassigned>
  2832.  
  2833.         This  macro key assignment list is also available within BRIEF as
  2834.         a help screen which can be invoked by the  macro  'cxthelp'.  The
  2835.         CXT help information is not part of the BRIEF help system because
  2836.         this would need modifications of the original BRIEF help files.
  2837.  
  2838.         Instead  of  loading  the  file CXT.CM and typing the macro names
  2839.         manually,  you can load the macro file CXTKEYS.CM which  performs
  2840.         automatic  loading  of the CXT.CM file if any of the above listed
  2841.         macros is invoked with a hot-key.  To simplify working with  this
  2842.         package,  the CXTKEYS.CM macro file also contains key assignments
  2843.         for  the  macros.  These  hot-keys  offer  a  "point  and  shoot"
  2844.         hypertext like feeling. The macro source file CXTKEYS.CB contains
  2845.         the  source  code  for  CXTKEYS.CM  so  that you are able to make
  2846.         changes like the key assignments for your personal  needs  or  to
  2847.         move the initialization function to the BRIEF start-up macro file
  2848.         (For  further  informations  about  BRIEF  macros  see  the BRIEF
  2849.         manuals).  To load these macros and to  execute  CFTN  and  CSTN,
  2850.         which are invoked from inside BRIEF, be sure to set the directory
  2851.         path correctly. It is also necessary to allow access to the macro
  2852.         file  DIALOG.CM  which  contains  the  functions  for dialog menu
  2853.         building and processing.
  2854.  
  2855.         A search can be started by simply moving the cursor on  the  item
  2856.         to  search  for or by marking a block with the item (necessary if
  2857.         search pattern contains more than one word like 'struct xyz') and
  2858.         then running one of the following macros (or press hot-keys):
  2859.  
  2860.              <F10> cft                     (function search)
  2861.              <F10> cst                     (data type search)
  2862.  
  2863.         It is also possible to type the name of the item  to  search  for
  2864.         manually. To do this you must run one of the following macros:
  2865.  
  2866.  
  2867.                                      - 47 -
  2868.  
  2869.  
  2870.  
  2871.              <F10> cftfind <item>          (function search)
  2872.              <F10> cstfind <item>          (data type search)
  2873.  
  2874.         If  the  search  was  successful,  a  new  window  with  the file
  2875.         containing the item will be opened and the cursor will be  placed
  2876.         at  the  line where the item is located.  If inconsistencies have
  2877.         been detected,  the user will be informed.  If the requested item
  2878.         or  the  source file containing the item is not found,  a message
  2879.         will be given. The macros for building the function and data type
  2880.         dialog menu are
  2881.  
  2882.              <F10> cftmenu                 (function menu)
  2883.              <F10> cstmenu                 (data type menu)
  2884.  
  2885.         You can scroll through the  entries  and  select  an  item  which
  2886.         should  be displayed.  To access databases other than the default
  2887.         ones, there are two ways to change the base names:
  2888.  
  2889.         1)   Set the environment variables CFTNBASE, CSTNBASE or CXTNBASE
  2890.              (see description above).  By loading the macro  file  CXT.CM
  2891.              these variables will be used for initialization.
  2892.  
  2893.         2)   To change the base names from inside BRIEF,  there are three
  2894.              macros to do this.  They overwrite the initial values  given
  2895.              by the environment variables:
  2896.  
  2897.              <F10> cftbase     change base name for function search
  2898.              <F10> cstbase     change base name for data type search
  2899.              <F10> cxtbase     change both CFT and CST base name
  2900.  
  2901.         With  these features it is possible to set default values for the
  2902.         database files or to change between different  databases  without
  2903.         leaving BRIEF which gives the user a maximum of flexibility.  You
  2904.         can display a menu list with all source files being  scanned  for
  2905.         the database by typing
  2906.  
  2907.              <F10> cftfilemenu             (CFT file menu)
  2908.              <F10> cstfilemenu             (CST file menu)
  2909.  
  2910.         With  this  feature  you can get a quick overview about all files
  2911.         related with the database.  Other menu driven options concern the
  2912.         displaying  of all cross references to a specific item (see macro
  2913.         'cst' for informations about marking) with the macros
  2914.  
  2915.              <F10> cftxrefmenu             (CFT cross reference menu)
  2916.              <F10> cftxrefmenuagain        (show previous menu again)
  2917.              <F10> cstxrefmenu             (CST cross reference menu)
  2918.              <F10> cstxrefmenuagain        (show previous menu again)
  2919.  
  2920.         and the displaying of a file contents list for the actual  source
  2921.         file with the macros
  2922.  
  2923.  
  2924.  
  2925.  
  2926.  
  2927.  
  2928.                                      - 48 -
  2929.  
  2930.  
  2931.              <F10> cftdefmenu              (CFT file menu)
  2932.              <F10> cstdefmenu              (CST file menu)
  2933.  
  2934.         To  search for the first appearance of a specific cross reference
  2935.         number like '(123)' in a CFT or CST output listing file, move the
  2936.         cursor to the reference number and type
  2937.  
  2938.              <F10> cxtsearchxref           (search cross reference)
  2939.  
  2940.         The macro extracts the complete number and searches for its first
  2941.         occurrence by starting from the beginning  of  the  output  file.
  2942.         With  this  macro  you can move quickly from any reference to its
  2943.         initial description.
  2944.  
  2945.         All the above described macro functions are defined in the  BRIEF
  2946.         macro file CXT.CB. These macros make extensive use of the several
  2947.         options  of  CFTN  resp.  CSTN,  which  are  described earlier in
  2948.         detail.
  2949.  
  2950.  
  2951.  
  2952.  
  2953.  
  2954.  
  2955.  
  2956.  
  2957.  
  2958.  
  2959.  
  2960.  
  2961.  
  2962.  
  2963.  
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974.  
  2975.  
  2976.  
  2977.  
  2978.  
  2979.  
  2980.  
  2981.  
  2982.  
  2983.  
  2984.  
  2985.  
  2986.  
  2987.  
  2988.  
  2989.                                      - 49 -
  2990.  
  2991.  
  2992.         SEARCHING INSIDE QEDIT (Version 2.1)
  2993.  
  2994.         The popular shareware editor QEDIT  with  its  macro  programming
  2995.         capabilities  allows,  like  the  BRIEF editor,  the searching of
  2996.         functions and data types from inside the  editor.  The  following
  2997.         examples for QEDIT macros act,  with slight limitations, like the
  2998.         BRIEF macros 'cft' and 'cst':
  2999.  
  3000.         CFT function searching, assigned to <SHIFT F9>:
  3001.  
  3002.         #f9  MacroBegin MarkWord Copy Dos 'cftn -b ' Paste '>tmp'  Return
  3003.              Return   EditFile  'tmp'  Return  AltWordSet  MarkWord  Copy
  3004.              DefaultWordSet EditFile Paste Return EditFile  'tmp'  Return
  3005.              EndLine  CursorLeft  MarkWord  Copy  Quit  NextFile GotoLine
  3006.              Paste Return
  3007.  
  3008.         CST data type searching, assigned to <SHIFT F10>:
  3009.  
  3010.         #f10 MacroBegin MarkWord Copy Dos 'cstn -b ' Paste '>tmp'  Return
  3011.              Return   EditFile  'tmp'  Return  AltWordSet  MarkWord  Copy
  3012.              DefaultWordSet EditFile Paste Return EditFile  'tmp'  Return
  3013.              EndLine  CursorLeft  MarkWord  Copy  Quit  NextFile GotoLine
  3014.              Paste Return
  3015.  
  3016.         These  QEDIT  macro  definitions   can   be   placed   into   the
  3017.         'qconfig.dat'  configuration  file  and added to 'q.exe' with the
  3018.         'qconfig.exe' configuration utility (For additional details about
  3019.         QEDIT macro programming see the  QEDIT  documentation).  The  two
  3020.         macros  perform  the  following  actions:  mark the current word,
  3021.         execute the CFTN or CSTN database search for the marked word  via
  3022.         dos and redirect the output to file 'tmp',  read target file name
  3023.         from 'tmp' and open target file,  read line number from 'tmp' and
  3024.         go to the selected line.
  3025.  
  3026.         These macros are working almost similar to those used from BRIEF,
  3027.         but  they have some limitations in their functionality due to the
  3028.         limited capabilities of the QEDIT macro programming language:
  3029.  
  3030.         -    there is no error check for a correct cursor location,
  3031.         -    the searched item must always be a single word  like  'main'
  3032.              or  'size_t',  a combined pattern like 'struct iobuf' cannot
  3033.              be searched,
  3034.         -    there is no error check if  the  search  was  successful  or
  3035.              failed or the database is not up-to-date,
  3036.         -    if the target file is the same as that from which the search
  3037.              started and other additional files are also open (QEDIT ring
  3038.              buffer), probably a wrong file will be accessed,
  3039.         -    the name of the database cannot be changed, the searches are
  3040.              performed  either with the default database or those defined
  3041.              by the environment variables.
  3042.  
  3043.  
  3044.  
  3045.  
  3046.  
  3047.  
  3048.  
  3049.  
  3050.                                      - 50 -
  3051.  
  3052.  
  3053.         SEARCHING INSIDE MicroEMACS (Version 3.11, DOS & WINDOWS)
  3054.  
  3055.         The latest editor which is now supported with macros for database
  3056.         access is MicroEMACS 3.11. The macro file is named CXT_ME.CMD and
  3057.         should be place in the  MircoEMACS  directory.  This  macro  file
  3058.         works with the DOS and the WINDOWS version of MicroEMACS 3.11.
  3059.  
  3060.         The following macros are available:
  3061.  
  3062.         -    cft       function search for tagged item
  3063.         -    cst       data type search for tagged item
  3064.         -    cftmark   function search for marked item
  3065.         -    cstmark   data type search for marked item
  3066.         -    cftfind   function search for user defined item
  3067.         -    cstfind   data type search for user defined item
  3068.         -    cftfile   list of all CFT files
  3069.         -    cstfile   list of all CST files
  3070.         -    cftbase   set CFT database name
  3071.         -    cstbase   set CST database name
  3072.         -    cxtbase   set both CFT and CST database name
  3073.  
  3074.         They can be invoked by loading the macro file CXT_ME.CMD with
  3075.  
  3076.              ESC CTRL+S CXT_ME.CMD
  3077.  
  3078.         and running the macro with
  3079.  
  3080.              ESC CTRL+E <macro name>
  3081.  
  3082.         If  the macros are used with the MicroEMACS WINDOWS version,  you
  3083.         may have to change the DOSEXEC.PIF file,  which is  part  of  the
  3084.         MicroEMACS  3.11  distribution  package.  During  the  CXT  macro
  3085.         execution,  the shell command may stop after execution and  waits
  3086.         for  the  <return>  key  pressed  to  continue.   To  avoid  this
  3087.         interruption,  you can enable it by  editing  the  PIF  file  and
  3088.         select "Close window after execution".  The environment variables
  3089.         CFTNBASE,  CSTNBASE and CXTNBASE are used in the same way  as  in
  3090.         the  BRIEF version.  Key-assignments to macro procedure names are
  3091.         not performed,  if you prefer hot-keys,  you are free to do  this
  3092.         for yourself.
  3093.  
  3094.         In the MicroEMACS WINDOWS version,  however,  the user accessible
  3095.         macros can be integrated into the "Miscellaneous" pull-down  menu
  3096.         (thanks  to  the  incredible  macro  programming  capabilities of
  3097.         MicroEMACS!).   To  view  the  generated  output  file  with  its
  3098.         semigraphic  frames,  change the font type and select for example
  3099.         the 'TERMINAL'  font  from  the  OEM  font  list  which  supports
  3100.         semigraphic characters.
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106.  
  3107.  
  3108.  
  3109.  
  3110.  
  3111.                                      - 51 -
  3112.  
  3113.  
  3114.         13   TROUBLE SHOOTING
  3115.  
  3116.         This section contains informations about problems and the several
  3117.         reasons  which  may  occur  during the use of CFT,  CFT386,  CST,
  3118.         CST386,  CFTN and CSTN.  It is strictly  recommended  that  users
  3119.         should  read the complete documentation to have an overview about
  3120.         the features before they start using CFT and CST and run into any
  3121.         unexpected troubles.  See also  the  chapter  about  'PROGRAMMING
  3122.         LIMITATIONS'.
  3123.  
  3124.         THE CFT AND CST PROGRAMS CANNOT BE EXECUTED
  3125.         The  program  path  is  not specified in the environment variable
  3126.         PATH,  the programs  are  not  yet  installed  in  the  specified
  3127.         directory, attempt to start the 386 protected mode versions on an
  3128.         non 386 computer.
  3129.  
  3130.         EXECUTION STOPPED WITH MESSAGE "OUT OF MEMORY"
  3131.         An  attempt  to  allocate  memory  has  failed.   Try  to  remove
  3132.         unnecessary memory resident TSR programs  or  use  the  protected
  3133.         mode  versions CFT386 and CST386 if you have an 386/486.  If this
  3134.         message happens for the protected mode  versions,  there  is  not
  3135.         enough  free  disk  space  for  the swap file.  Set the temporary
  3136.         directory,  defined by 'TMP' resp.  'TEMP' environment variables,
  3137.         to another drive, if possible.
  3138.  
  3139.         WRITING THE CFT AND CST OUTPUT FILE TAKES A LONG TIME
  3140.         A  large number of informations must be handled,  option -x or -r
  3141.         is not set and so the output tree chart is very large,  slow  CPU
  3142.         and/or harddisk.  Use option -v to redirect intermediate files to
  3143.         a faster RAM-disk (if such is present).
  3144.  
  3145.         THE RESULTING OUTPUT IS DEEPLY NESTED AND EXCEEDS THE SCREEN SIZE
  3146.         Two reasons: Use the -r or -x option if not already specified  or
  3147.         the source code/data types are indeed deeply nested.
  3148.  
  3149.         THE BRIEF MACROS CANNOT BE EXECUTED
  3150.         The macro file is not loaded, other macros with the same names or
  3151.         assigned keys already exist.
  3152.  
  3153.         THE BRIEF OR MICROEMACS MACROS CANNOT BE LOADED
  3154.         The  path  to  the  macro  file  location  must be specified when
  3155.         loading the macros,  if they are not in the default directory for
  3156.         the editor.
  3157.  
  3158.         THE BRIEF MACROS DO NOT FIND ANY FUNCTIONS OR DATA TYPES
  3159.         There  is  no  access  to  CFTN  and  CSTN  due to incorrect path
  3160.         specification,  no database is present,  the path to the database
  3161.         files is incorrect, the database name is incorrect.
  3162.  
  3163.         THE BYTE OFFSET CALCULATION FILE "CST_OFFS.C" CANNOT BE COMPILED
  3164.         Several  reasons:  Necessary  data types or include files are not
  3165.         specified or the CST processing was done with include files other
  3166.         than those being used for compiling.  If the number of data  type
  3167.         informations  is  too  large,  some  compilers cannot compile the
  3168.         large number of statements in a single file  generated  from  CST
  3169.         ('out of heap space',  'code segment too large' or other messages
  3170.  
  3171.  
  3172.                                      - 52 -
  3173.  
  3174.  
  3175.         like that).  In that case you may have to  split  the  file  into
  3176.         several  smaller  files  or  reduce  the  number of data types to
  3177.         display.
  3178.  
  3179.         LOCATING ITEMS IN THE BRIEF EDITOR POINTS TO WRONG PLACES
  3180.         Searching items from within the  BRIEF  editor  points  to  wrong
  3181.         lines,  the requested item is not present there or the file seems
  3182.         to be corrupted.  This can have several reasons: The file is  not
  3183.         up-to-date  and has been changed since the database generation so
  3184.         that the line references are no longer valid.  Another reason can
  3185.         be that the source file has explicit #line numbers as it is usual
  3186.         for  files  produced by source code generators like YACC/BISON or
  3187.         LEX/FLEX.  A third  reason  may  be  that  the  source  file  was
  3188.         generated  on an UNIX system and has therefore only LF instead of
  3189.         CR+LF as end-of-line delimiter so that BRIEF cannot  display  the
  3190.         file correctly, the file seems to be written in a single line.
  3191.  
  3192.         UNEXPECTED RESULTS WHILE RUNNING CFT AND CST UNDER WINDOWS 3.1
  3193.         The  386  versions  of  CFT and CST cannot run under Windows 3.1,
  3194.         they are using the CPU exclusive and can therefore  not  co-exist
  3195.         with  Windows,  only  the  real  mode  versions  can.  In Windows
  3196.         enhanced  mode   (virtual   386   mode),   CFT/CST   cannot   run
  3197.         simultaneously  in  several  independent  DOS-windows if they are
  3198.         working  in  the  same  directory  or  use  the  same   temporary
  3199.         directory,  because the temporary intermediate files may have the
  3200.         same names and will conflict due to multiple accesses to the same
  3201.         file. This may also happen if the same files are scanned.
  3202.  
  3203.         MICROEMACS FOR WINDOWS SEEMS TO HANG DURING DATABASE ACCESS
  3204.         The reason is simple: The shell call to DOS  through  DOSEXEC.PIF
  3205.         waits  for  a  keystroke  to  continue execution and to return to
  3206.         WINDOWS. You may change this behaviour by editing the DOSEXEC.PIF
  3207.         file (see MicroEMACS section for further information).
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.                                      - 53 -
  3234.  
  3235.  
  3236.         14   REFERENCES
  3237.  
  3238.         Brian  W.  Kernighan,  Dennis  M.  Ritchie:  "The  C  Programming
  3239.         Language", Prentice Hall, Englewood Cliffs, Second Edition 1988
  3240.  
  3241.         Samuel P.  Harbison,  Guy L. Steele Jr.: "C: A Reference Manual",
  3242.         Prentice Hall, Englewood Cliffs, Third Edition 1991
  3243.  
  3244.         Bjarne    Stroustrup:    "The    C++    Programming    Language",
  3245.         Addison-Wesley, Second Edition 1992
  3246.  
  3247.         Margaret  A.   Ellis,   Bjarne  Stroustrup:  "The  Annotated  C++
  3248.         Reference Manual" (ARM), Addison-Wesley, Second Edition 1991
  3249.  
  3250.         "Working Paper for  Draft  Proposed  International  Standard  for
  3251.         Information  Systems  -  Programming  Language C++",  AT&T,  ANSI
  3252.         committee X3J16, ISO working group WG21, January 28, 1993
  3253.  
  3254.         Bjarne Stroustrup, Keith Gorlen, Phil Brown, Dennis Mancl, Andrew
  3255.         Koenig: "UNIX System V - AT&T C++ Language System,  Release 2.1 -
  3256.         Selected Readings", AT&T, 1989
  3257.  
  3258.         Goldberg,  A.: "Programmer as Reader",  IEEE Software,  September
  3259.         1987
  3260.  
  3261.         L.W. Cannon, R.A.  Elliot,  L.W.  Kirchhoff,  J.H.  Miller,  J.M.
  3262.         Milner,  R.W. Mitze, E.P. Schan, N.O. Whittington, H. Spencer, D.
  3263.         Keppel,  M.  Brader: "Recommended C Style and Coding  Standards",
  3264.         Technical Report,  in the Public Domain,  Revision 6.0, July 1991
  3265.         (revised and updated version  of  the  'AT&T  Indian  Hill  style
  3266.         guide',  can be obtained via anonymous FTP from cs.washington.edu
  3267.         in '~ftp/pub/cstyle.tar.Z')
  3268.  
  3269.         A. Dolenc, A. Lemmke, D. Keppel,  G.V.  Reilly: "Notes on Writing
  3270.         Portable Programs in C",  Technical Report, in the Public Domain,
  3271.         Revision 8, November 1990 (can be obtained via anonymous FTP from
  3272.         cs.washington.edu in '~ftp/pub/cport.tar.Z')
  3273.  
  3274.         M.  Henricson,  E.  Nyquist:  "Programming  in  C++,   Rules  and
  3275.         Recommendations",   Technical  Report,   in  the  Public  Domain,
  3276.         Ellemtel Telecommunication Systems  Laboratories,  Alvsjo/Sweden,
  3277.         Document No. M 90 0118 Uen, Rev. C (can be obtained via anonymous
  3278.         FTP from various sites as 'rules.ps.Z' or 'c++rules.ps.Z')
  3279.  
  3280.         Compiler  reference  manuals and related documentations (language
  3281.         references, language implementations and extensions):
  3282.         -    Microsoft C 5.1
  3283.         -    Microsoft C 6.0
  3284.         -    Microsoft C/C++ 7.0
  3285.         -    Microsoft C for SCO UNIX System V Rel. 3.2
  3286.         -    Microsoft Macro Assembler MASM 5.1
  3287.         -    Borland Turbo C++ 1.0
  3288.         -    Borland C++ 2.0
  3289.         -    Borland C++ 3.1
  3290.         -    Borland Turbo Assembler TASM 2.0
  3291.         -    Intel 80960 C-Compiler (ic960, ec960)
  3292.  
  3293.  
  3294.                                      - 54 -
  3295.  
  3296.  
  3297.         -    Intel 80960 Assembler (asm960)
  3298.         -    Intel 80860 Metaware High C i860 APX (UNIX-hosted)
  3299.         -    GNU-960 Tools (UNIX-hosted)
  3300.         -    GNU-C Compiler 2.2.2 (C, C++, Objective-C)
  3301.         -    GNU Assembler
  3302.         -    AT&T C++ 2.1 CFRONT (C++  to  C  translator)  for  SCO  UNIX
  3303.              System V Rel. 3.2
  3304.         -    IBM  C-Compilers  (CC,  XLC)  for IBM RS 6000 RISC stations,
  3305.              AIX 3.15
  3306.         -    HP C-Compilers (CC,  C89) for HP Apollo 9000 RISC  stations,
  3307.              HP-UX 9.0
  3308.         -    VAX C
  3309.  
  3310.  
  3311.  
  3312.         15   TRADEMARKS
  3313.  
  3314.         All  brand  or  product  names  are trademarks (TM) or registered
  3315.         trademarks (R) of their respective owners.
  3316.  
  3317.         The following  products  and  names  are  Copyright  (C)  Juergen
  3318.         Mueller  (J.M.),  Federal  Republic of Germany (GER),  all rights
  3319.         reserved world-wide:
  3320.  
  3321.              CXT (TM) C EXPLORATION TOOLS
  3322.              CFT (TM) C FUNCTION TREE GENERATOR
  3323.              CFT386 (TM) C FUNCTION TREE GENERATOR
  3324.              CST (TM) C STRUCTURE TREE GENERATOR
  3325.              CST386 (TM) C STRUCTURE TREE GENERATOR
  3326.              CFTN (TM) C FUNCTION TREE NAVIGATOR
  3327.              CSTN (TM) C STRUCTURE TREE NAVIGATOR
  3328.  
  3329.         The name 'CXT' is used as the summary  term  for  all  the  above
  3330.         described  C-tools  (and maybe some more in the future ...).  The
  3331.         CXT tools itself are part of the
  3332.  
  3333.              PXT (TM) PROGRAM EXPLORATION TOOLS
  3334.  
  3335.         which provide a similar set of  functionalities  for  the  source
  3336.         code analysis of different programming languages.
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.  
  3354.  
  3355.                                      - 55 -
  3356.  
  3357.  
  3358.         APPENDIX 1: PRECOMPILER DEFINES
  3359.  
  3360.         The   following  list  shows  the  precompiler  defines  for  the
  3361.         supported compiler types. It contains the default defines and the
  3362.         optional memory model and architecture defines.
  3363.  
  3364.         Other default compiler defines which are usually declared by some
  3365.         of the compilers are not automatically defined by the -T  option.
  3366.         These  are  defines  for  compilation like WINDOWS,  __WINDOWS__,
  3367.         _Windows,  DLL or __DLL__,  for optimization like __OPTIMIZE__ or
  3368.         __FASTCALL__  or  others  like  those  about  target (operating-)
  3369.         systems like NT, MIPS,  UNIX,  unix,  __unix__,  i386,  __i386__,
  3370.         GNUDOS,  BSD,  VMS, USG, DGUX or hpux. Other sometimes predefined
  3371.         macros are __STRICT_ANSI__,  __CHAR_UNSIGNED__ or  __TIMESTAMP__.
  3372.         If  necessary,  they can be user defined on the command line with
  3373.         the -D option.
  3374.  
  3375.         The macro name __cplusplus will be defined if  the  command  line
  3376.         option '-C++' is set to enable C++ processing.
  3377.  
  3378.         1.   MSC51 (Microsoft C 5.1):
  3379.         Default defines:         MSDOS, M_I86
  3380.         C++ specific defines:    (none)
  3381.         Memory model defines:    M_I86SM, M_I86MM, M_I86CM, M_I86LM,
  3382.                                  M_I86HM
  3383.  
  3384.         2.   MSC70 (Microsoft C/C++ 7.0):
  3385.         Default defines:         MSDOS, M_I86, _MSC_VER (=700)
  3386.         C++ specific defines:    (none)
  3387.         Memory model defines:    M_I86TM, M_I86SM, M_I86MM, M_I86CM,
  3388.                                  M_I86LM, M_I86HM
  3389.  
  3390.         3.   TC10 (Borland Turbo C++ 1.0):
  3391.         Default defines:         __MSDOS__, __TURBOC__
  3392.         C++ specific defines:    __TCPLUSPLUS
  3393.         Memory model defines:    __TINY__, __SMALL__, __MEDIUM__,
  3394.                                  __COMPACT_, __LARGE__, __HUGE__
  3395.  
  3396.         4.   BC20 (Borland C++ 2.0):
  3397.         Default defines:         __MSDOS__, __BORLANDC__ (=0x0200),
  3398.                                  __TURBOC__ (=0x0297)
  3399.         C++ specific defines:    __BCPLUSPLUS__ (=0x0200),
  3400.                                  __TCPLUSPLUS__ (=0x0200)
  3401.         Memory model defines:    __TINY__, __SMALL__, __MEDIUM__,
  3402.                                  __COMPACT_, __LARGE__, __HUGE__
  3403.  
  3404.         5.   BC31 (Borland C++ 3.1):
  3405.         Default defines:         __MSDOS__, __BORLANDC__ (=0x0410),
  3406.                                  __TURBOC__ (=0x0410)
  3407.         C++ specific defines:    __BCPLUSPLUS__ (=0x0310),
  3408.                                  __TCPLUSPLUS__ (=0x0310)
  3409.         Memory model defines:    __TINY__, __SMALL__, __MEDIUM__,
  3410.                                  __COMPACT_, __LARGE__, __HUGE__
  3411.  
  3412.  
  3413.  
  3414.  
  3415.  
  3416.                                      - 56 -
  3417.  
  3418.  
  3419.         6.   GNU (GNU C 2.2.2):
  3420.         Default defines:         __GNUC__ (=2)
  3421.         C++ specific defines:    __GNUG__ (=2)
  3422.         Memory model defines:    (not necessary)
  3423.  
  3424.         7.   I960 (Intel iC960 3.0):
  3425.         Default defines:         __i960
  3426.         C++ specific defines:    (none)
  3427.         Memory model defines:    (not necessary)
  3428.         Architecture defines:    __i960KA, __i960KB, __i960SA, __i960SB,
  3429.                                  __i960MC, __i960CA
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436.  
  3437.  
  3438.  
  3439.  
  3440.  
  3441.  
  3442.  
  3443.  
  3444.  
  3445.  
  3446.  
  3447.  
  3448.  
  3449.  
  3450.  
  3451.  
  3452.  
  3453.  
  3454.  
  3455.  
  3456.  
  3457.  
  3458.  
  3459.  
  3460.  
  3461.  
  3462.  
  3463.  
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.                                      - 57 -
  3478.  
  3479.  
  3480.         APPENDIX 2: RESERVED KEYWORDS
  3481.  
  3482.         The following list shows the keywords being recognized by CFT and
  3483.         CST,   the  standard  C  keywords,   the  C++  keywords  and  the
  3484.         non-standard keywords which are compiler dependent extensions  to
  3485.         the C or C++ language. Standard C keywords are also C++ keywords,
  3486.         always!  The C++ keywords are recognized only if option '-C++' is
  3487.         set, otherwise they are treated as identifiers. This list may not
  3488.         be complete or correct  due  to  upcoming  new  releases  of  the
  3489.         supported  compilers  with  new  extensions  or extensions to the
  3490.         language standard.  C++,  for which till now no  'real'  language
  3491.         standard exists (except the AT&T CFRONT implementation),  differs
  3492.         among  several  implementations,   especially   for   the   newly
  3493.         introduced  exception and template concepts (try,  catch,  throw,
  3494.         template).   Undocumented  but   (obviously)   present   keywords
  3495.         especially  in  GNU  C  (e.g.  __alignof,  __classof,  ...) or in
  3496.         Microsoft C/C++ 7.0 are ignored (even if they are listed here).
  3497.  
  3498.         KEYWORDS       Standard       compiler-specific extension
  3499.                        C    C++       MSC TC/BC GNU C
  3500.                                       7.0 3.0   2.2.2
  3501.         asm            x
  3502.         auto           x
  3503.         break          x
  3504.         case           x
  3505.         catch               x                   x
  3506.         cdecl                         x    x
  3507.         char           x
  3508.         class               x
  3509.         classof                                 x
  3510.         const          x
  3511.         continue       x
  3512.         default        x
  3513.         delete              x
  3514.         do             x
  3515.         double         x
  3516.         dynamic                                 x
  3517.         else           x
  3518.         enum           x
  3519.         except                                  x
  3520.         exception                               x
  3521.         extern         x
  3522.         far                           x    x
  3523.         float          x
  3524.         for            x
  3525.         fortran                       x    x
  3526.         friend              x
  3527.         goto           x
  3528.         huge                          x    x
  3529.         if             x
  3530.         inline              x
  3531.         int            x
  3532.         interrupt                     x    x
  3533.         long           x
  3534.         near                          x    x
  3535.         new                 x
  3536.  
  3537.  
  3538.                                      - 58 -
  3539.  
  3540.  
  3541.         operator            x
  3542.         overload                           x    x
  3543.         pascal                        x    x
  3544.         private             x
  3545.         protected           x
  3546.         public              x
  3547.         register       x
  3548.         return         x
  3549.         short          x
  3550.         signed         x
  3551.         sizeof         x
  3552.         static         x
  3553.         struct         x
  3554.         switch         x
  3555.         template            x
  3556.         this                x
  3557.         throw               x
  3558.         try                 x                   x
  3559.         typedef        x
  3560.         typeof                                  x
  3561.         union          x
  3562.         unsigned       x
  3563.         virtual             x
  3564.         void           x
  3565.         volatile       x
  3566.         while          x
  3567.         __alignof                               x
  3568.         __alignof__                             x
  3569.         __asm                         x         x
  3570.         __asm__                                 x
  3571.         __attribute                             x
  3572.         __attribute__                           x
  3573.         __based                       x
  3574.         __cdecl                       x
  3575.         __classof                               x
  3576.         __classof__                             x
  3577.         __const                       x         x
  3578.         __const__                               x
  3579.         __emit                        x
  3580.         __except                      x
  3581.         __export                      x
  3582.         __extension__                           x
  3583.         __far                         x
  3584.         __fastcall                    x
  3585.         __finally                     x
  3586.         __fortran                     x
  3587.         __headof                                x
  3588.         __headof__                              x
  3589.         __huge                        x
  3590.         __inline                                x
  3591.         __inline__                              x
  3592.         __interrupt                   x
  3593.         __label__                               x
  3594.         __loadds                      x
  3595.         __near                        x
  3596.         __saveregs                    x
  3597.  
  3598.  
  3599.                                      - 59 -
  3600.  
  3601.  
  3602.         __segment                     x
  3603.         __segname                     x
  3604.         __self                        x
  3605.         __signed                                x
  3606.         __signed__                              x
  3607.         __stdcall                     x
  3608.         __syscall                     x
  3609.         __try                         x
  3610.         __typeof                                x
  3611.         __typeof__                              x
  3612.         __volatile                              x
  3613.         __volatile__                            x
  3614.         _asm                          x
  3615.         _based                        x
  3616.         _cdecl                        x
  3617.         _emit                         x
  3618.         _export                       x    x
  3619.         _far                          x
  3620.         _fastcall                     x
  3621.         _fortran                      x
  3622.         _huge                         x
  3623.         _interrupt                    x
  3624.         _loadds                       x    x
  3625.         _near                         x
  3626.         _pascal                       x
  3627.         _saveregs                     x    x
  3628.         _seg                               x
  3629.         _segment                      x
  3630.         _segname                      x
  3631.         _self                         x
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.  
  3659.  
  3660.                                      - 60 -
  3661.  
  3662.  
  3663.         APPENDIX 3: EFFICIENCY
  3664.  
  3665.         To provide some values about the speed and the efficiency of  the
  3666.         programs,  tests  were  performed with CFT386 running on a 33 MHz
  3667.         80486 with 8 MB RAM,  256 KB cache and a 15 ms hard disk (no disk
  3668.         cache or RAM-disk installed).
  3669.  
  3670.         The  source code for the first test was the C++ part of the GNU-C
  3671.         compiler (version 2.2.2),  which is  the  largest  of  the  three
  3672.         compiler parts (C,  C++, Objective-C). The following results have
  3673.         been found:
  3674.  
  3675.         -    139 files (71 source files and 68 include files)  have  been
  3676.              scanned
  3677.         -    a  total  number of 2330 functions has been found from which
  3678.              2248 functions were defined in the 71 source files
  3679.         -    the directed call graph would  have  2314  nodes  and  10301
  3680.              connections
  3681.         -    the  critical function call path has a maximum nesting level
  3682.              of 115
  3683.         -    the total size of the 139 files is 6.54 MB with 209100 lines
  3684.              (about 35 bytes/line),  source  code/filesize  ratio  0.739,
  3685.              average function size is 1951 bytes resp. 63 lines
  3686.         -    the  effective  size  of the preprocessed and scanned source
  3687.              code (source files and their included  files)  is  20.71  MB
  3688.              with 591000 lines
  3689.         -    the  resulting output file (options -m -rauspP -TGNU -cs -Cs
  3690.              -n) has about 3.94 MB and 36100 lines
  3691.         -    the resulting 6 database files have a size of 727 KB (source
  3692.              code/database ratio is about 9 : 1)
  3693.         -    inside BRIEF,  a database  search  for  the  location  of  a
  3694.              function is performed in less than 4 seconds
  3695.         -    the  total  time  for  the  complete  processing was 36'40''
  3696.              minutes with 32'20'' for analysis,  2'50'' for  output  file
  3697.              writing and 1'30'' for database writing
  3698.         -    the  average  analysis  speed for this source code was about
  3699.              641 KB/min. respectively 18300 lines/min.
  3700.  
  3701.         The CFT386 results for a large commercial project are:
  3702.  
  3703.         -    190 files (132 source files (C and assembler) and 58 include
  3704.              files) have been scanned
  3705.         -    a total number of 1223 functions has been found  from  which
  3706.              1177  functions  were  defined  in  the  132 source and in 3
  3707.              include files (some include files contain inline functions)
  3708.         -    the directed call graph  would  have  1223  nodes  and  2366
  3709.              connections
  3710.         -    the total size of the 190 files is 6.22 MB with 145550 lines
  3711.              (about  42  bytes/line),  source  code/filesize ratio 0.533,
  3712.              average function size is 1805 bytes resp. 66 lines
  3713.         -    the effective size of the preprocessed  and  scanned  source
  3714.              code  (source  files  and  their included files) is 48.42 MB
  3715.              with 959100 lines
  3716.         -    the resulting output file (options -m -rauspP -cs  -Cs  -na)
  3717.              has about 907 KB and 24700 lines
  3718.  
  3719.  
  3720.  
  3721.                                      - 61 -
  3722.  
  3723.  
  3724.         -    the resulting 6 database files have a size of 306 KB (source
  3725.              code/database ratio is about 20 : 1)
  3726.         -    the  total  time  for  the  complete  processing was 35'25''
  3727.              minutes with 34'15'' for analysis,  0'45'' for  output  file
  3728.              writing and 0'25'' for database writing
  3729.         -    the  average  analysis  speed for this source code was about
  3730.              1.41 MB/min. respectively 28000 lines/min.
  3731.  
  3732.         To get some efficiency values for CST386,  the include files from
  3733.         another commercial project were analysed for data types:
  3734.  
  3735.         -    54 include files have been scanned
  3736.         -    a  total number of 589 data types have been found from which
  3737.              568 structures/unions were defined in 43 of the  54  include
  3738.              files
  3739.         -    the  directed  call  graph  would  have  589  nodes and 1787
  3740.              connections
  3741.         -    the total size of the 54 files is 1.389 MB with 25600  lines
  3742.              (about 54 bytes/line), source code/filesize ratio 0.343
  3743.         -    the  resulting  output  file  (options -rasp -cs -Cs -n) has
  3744.              about 299 KB and 8580 lines
  3745.         -    the resulting 6 database files have a size of 326 KB (source
  3746.              code/database ratio is about 4.3 : 1)
  3747.         -    the total  time  for  the  complete  processing  was  1'22''
  3748.              minutes  with  0'47''  for analysis,  0'20'' for output file
  3749.              writing and 0'15'' for database writing
  3750.         -    the average analysis speed for this source  code  was  about
  3751.              1.77   MB/min.   respectively   32600  lines/min  (note:  no
  3752.              preprocessing performed!).
  3753.  
  3754.         One can see that the calculated average values for  the  analysis
  3755.         speed  differ  due  to the effective size of the 'really' present
  3756.         source code in relation to the size of the comments which can  be
  3757.         seen by the code/filesize ratio. The speed values do not consider
  3758.         that,  if the preprocessing option -P is set,  the source code is
  3759.         first preprocessed to a temporary file and  then  analysed  in  a
  3760.         second step so that large parts of the source code are read twice
  3761.         (original  and  preprocessed code) and written once (preprocessor
  3762.         output).
  3763.  
  3764.         With these facts in mind, the analysis speed of CFT and CST seems
  3765.         to be quite acceptable!
  3766.  
  3767.  
  3768.  
  3769.  
  3770.  
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  
  3776.  
  3777.  
  3778.  
  3779.  
  3780.  
  3781.  
  3782.                                      - 62 -
  3783.  
  3784.  
  3785.         APPENDIX 4: SYSTEM REQUIREMENTS
  3786.  
  3787.         Real mode versions CFT, CST, CFTN, CSTN:
  3788.         -    IBM-AT or 100% compatible with Intel 80286 or higher, 512 KB
  3789.              RAM, hard disk, DOS 3.3 or higher
  3790.  
  3791.         Protected mode versions CFT386 and CST386:
  3792.         -    IBM-AT or 100% compatible with Intel 80386+80387 or  higher,
  3793.              2 MB RAM, hard-disk, DOS 3.3 or higher
  3794.  
  3795.  
  3796.  
  3797.         APPENDIX 5: INSTALLATION
  3798.  
  3799.         To  install this software copy all files into one directory,  for
  3800.         example into your own 'utility'-directory or any other directory,
  3801.         for example 'C:\CXT', and add this directory to your system path.
  3802.         This is necessary so that you can invoke  the  programs  directly
  3803.         from other directories.  Note that especially for using the BRIEF
  3804.         macros this path must be set to access CFTN and  CSTN.  You  must
  3805.         also  copy  the  BRIEF  macro  files CXT.CM and CXTKEYS.CM to the
  3806.         BRIEF macro directory so that you can use the  autoload  function
  3807.         from  CXTKEYS.CM  and must not specify the complete path when you
  3808.         want to load the macros.  The same procedure is necessary for the
  3809.         MicroEMACS macro file CXT_ME.CMD.
  3810.  
  3811.  
  3812.  
  3813.  
  3814.                           (THIS DOCUMENT HAS 63 PAGES)
  3815.  
  3816.  
  3817.  
  3818.  
  3819.  
  3820.  
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.  
  3833.  
  3834.  
  3835.  
  3836.  
  3837.  
  3838.  
  3839.  
  3840.  
  3841.  
  3842.  
  3843.                                      - 63 -
  3844.