Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ cflow(1) — Interactive 2.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

as(1)

cc(1)

cpp(1)

lex(1)

lint(1)

nm(1)

yacc(1)

pr(1)



          CFLOW(1)             INTERACTIVE UNIX System             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 attempts to build a graph
               charting the external references.  Files suffixed with .y,
               .l, and .c are yacced, lexed, and C-preprocessed as
               appropriate.  The results of the preprocessed files, and
               files suffixed with .i, are then run through the first pass
               of lint(1).  Files suffixed with .s are assembled.  Assem-
               bled files, and files suffixed with .o, have information
               extracted from their symbol tables.  The results are col-
               lected and turned into a graph of external references which
               is displayed upon 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 defin-
               ition.  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, delim-
               ited 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 loca-
               tion 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();
                    }



          Rev. C Software Development Set                            Page 1





          CFLOW(1)             INTERACTIVE UNIX System             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 pr(1), 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  inter-
               preted  just as they are by cc(1) and cpp(1)], the following
               options are interpreted by cflow:

               -r     Reverse the ``caller:callee'' relationship  producing
                      an inverted listing showing the callers of each func-
                      tion.  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 is a very
                      large number.  Attempts to set the cutoff depth to  a
                      nonpositive integer will be ignored.

          SEE ALSO
               as(1), cc(1), cpp(1), lex(1), lint(1), nm(1), yacc(1).
               pr(1)  in  the   INTERACTIVE   UNIX   System   User's/System
               Administrator's Reference Manual.

          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).

          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.



          Rev. C Software Development Set                            Page 2



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