Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

as(1)

cc(1)

lex(1)

lint(1)

nm(1)

yacc(1)

pr(1)





   cflow(1)                  (Advanced C Utilities)                   cflow(1)


   NAME
         cflow - generate C flowgraph

   SYNOPSIS
         cflow [-r] [-ix] [-i_] [-dnum] files

   DESCRIPTION
         The cflow command analyzes a collection of C, yacc, lex, assembler,
         and object files and builds a graph charting the external function
         references.  Files suffixed with .y, .l, and .c are processed by
         yacc, lex, and the C compiler as appropriate.  The results of the
         preprocessed files, and files suffixed with .i, are then run through
         the first pass of lint.  Files suffixed with .s are assembled.
         Assembled files, and files suffixed with .o, have information
         extracted from their symbol tables.  The results are collected and
         turned into a graph of external references that is written on the
         standard output.

         Each line of output begins with a reference number, followed by a
         suitable number of tabs indicating the level, then the name of the
         global symbol followed by a colon and its definition.  Normally only
         function names that do not begin with an underscore are listed (see
         the -i options below).  For information extracted from C source, the
         definition consists of an abstract type declaration (e.g., char *),
         and, delimited by angle brackets, the name of the source file and the
         line number where the definition was found.  Definitions extracted
         from object files indicate the file name and location counter under
         which the symbol appeared (e.g., text).  Leading underscores in C-
         style external names are deleted.

         Once a definition of a name has been printed, subsequent references
         to that name contain only the reference number of the line where the
         definition may be found.  For undefined references, only <> is
         printed.

         As an example, suppose the following code is in file.c:

               int   i;
               main()
               {
                     f();
                     g();
                     f();
               }
               f()
               {
                     i = h();
               }





   7/91                                                                 Page 1









   cflow(1)                  (Advanced C Utilities)                   cflow(1)


         The command

               cflow -ix file.c

         produces the output

               1     main: int(), <file.c 4>
               2           f: int(), <file.c 11>
               3                 h: <>
               4                 i: int, <file.c 1>
               5           g: <>

         When the nesting level becomes too deep, the output of cflow can be
         piped to the pr command, using the -e option, to compress the tab
         expansion to something less than every eight spaces.

         In addition to the -D, -I, and -U options [which are interpreted just
         as they are by cc], the following options are interpreted by cflow:

         -r     Reverse the ``caller:callee'' relationship producing an
                inverted listing showing the callers of each function.  The
                listing is also sorted in lexicographical order by callee.

         -ix    Include external and static data symbols. The default is to
                include only functions in the flowgraph.

         -i_    Include names that begin with an underscore. The default is to
                exclude these functions (and data if -ix is used).

         -dnum  The num decimal integer indicates the depth at which the
                flowgraph is cut off.  By default this number is very large.
                Attempts to set the cutoff depth to a nonpositive integer will
                be ignored.

   DIAGNOSTICS
         Complains about multiple definitions and only believes the first.

   SEE ALSO
         as(1), cc(1), lex(1), lint(1), nm(1), yacc(1).
         pr(1) in the User's Reference Manual.

   NOTES
         Files produced by lex and yacc cause the reordering of line number
         declarations, which can confuse cflow.  To get proper results, feed
         cflow the yacc or lex input.








   Page 2                                                                 7/91





Typewritten Software • bear@typewritten.org • Edmonds, WA 98026