Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ cflow(CP) — System V/386 Software Development System 3.2.2b

Media Vault

Software Library

Restoration Projects

Artifacts Sought

     Name
          cflow - generate C flowgraph

     Syntax
          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(CP).  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
          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
          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 (for example, 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
          (for example, 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();
               }

          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(C), 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(CP) and cpp(CP)), 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 is a very
                 large number.  Attempts to set the cutoff depth to  a
                 nonpositive integer will be ignored.

     See Also
          as(CP),  cc(CP),   cpp(CP),   lex(CP),   lint(CP),   nm(CP),
          yacc(CP), pr(C)

     Diagnostics
          cflow complains about bad options.  It also complains  about
          multiple definitions and only believes the first one.  Other
          messages may  come  from  the  various  programs  used  (for
          example, the C-preprocessor).

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

     Standards Conformance
          cflow is conformant with:
          AT&T SVID Issue 2, Select Code 307-127;
          and The X/Open Portability Guide II of January 1987.
                                                (printed 6/18/89)



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