


      CFLOW(1)                    (UNIX 5.2)                   CFLOW(1)



      NAME
           cflow - generate C flow graph

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

      DESCRIPTION
           Cflow analyzes a collection of C, YACC, LEX, and assembler
           files and attempts to build a graph charting the external
           references. Files with the .y, .l, .c, and .i extensions are
           YACC'd, LEX'd, and C-preprocessed (bypassed for .i files) as
           appropriate and then run through the first pass of lint(1).
           (The -I, -D, and -U options of the C-preprocessor are also
           understood.) Files with the .s extension are assembled and
           information is extracted from the symbol table.  A graph of
           all external references is produced and displayed on the
           standard output.

           Each output line consists of a reference number (a line
           number), appropriate indentation to indicate its level, the
           name of the global (normally only a function not defined as
           an external or beginning with an underscore; see below for
           the -i inclusion option), a colon, and its definition. 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, given the following in file.c:

                int  i;

                main()
                {
                     f();
                     g();
                     f();
                }

                f()
                {
                     i = h();
                }



      Page 1                                          (73 A2 02MT REV1)






      CFLOW(1)                    (UNIX 5.2)                   CFLOW(1)



           the command

                cflow file.c

           produces the 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  -e  option  of
           pr(1) can be used to compress the tab expansion to something
           less than every eight spaces.

           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 flow graph.

           -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  flow graph is cut off. By default this is a very
                  large number.  Do not  set  the  cutoff  depth  to  a
                  nonpositive integer.

      DIAGNOSTICS
           Complains  about  bad  options.   Complains  about  multiple
           definitions and only believes the first.  Other messages may
           come  from  the  various  programs  used   (e.g.,   the   C-
           preprocessor).

      SEE ALSO
           as(1), rc(1), lex(1), lint(1), nm(1), pr(1), yacc(1).

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







      Page 2                                          (73 A2 02MT REV1)



