Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

as(1)

cc(1)

cpp(1)

lex(1)

lint(1)

nm(1)

pr(1)

yacc(1)



CFLOW(1-SysV)       RISC/os Reference Manual        CFLOW(1-SysV)



NAME
     cflow - generate C flowgraph

SYNOPSIS
     cflow [ -r ] [ -ix ] [ -i_] [ -d num ] [ -g file ] [ -f file
     ] file...

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 yacc, lex, 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.  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 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();



                         Printed 1/15/91                   Page 1





CFLOW(1-SysV)       RISC/os Reference Manual        CFLOW(1-SysV)



          }

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

     -d num 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.

     -g file
            Use the named file as the temporary file  instead  of
            the  default.  This is useful when temporary space is
            low.

     -f file
            Use the named language source file as input,  but  do
            not preprocess the file.

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-



 Page 2                  Printed 1/15/91





CFLOW(1-SysV)       RISC/os Reference Manual        CFLOW(1-SysV)



     preprocessor).

SEE ALSO
     as(1),  cc(1),  cpp(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.













































                         Printed 1/15/91                   Page 3



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