diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2005-03-19 11:54:08 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2005-03-19 11:54:08 +0000 |
commit | 10c08b51c954106e42a5e42c7f726834a7787fc6 (patch) | |
tree | 55b183b997c9c418a0aa660ad7adcd4c0a0c1847 | |
parent | e6b82b1e33b2a61353cd87b1a99b46ff05b93f5c (diff) | |
download | cflow-10c08b51c954106e42a5e42c7f726834a7787fc6.tar.gz cflow-10c08b51c954106e42a5e42c7f726834a7787fc6.tar.bz2 |
Added to the repository
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | Makefile.am | 23 | ||||
-rw-r--r-- | NEWS | 37 | ||||
-rw-r--r-- | THANKS | 0 | ||||
-rw-r--r-- | configure.ac | 65 | ||||
-rw-r--r-- | doc/Makefile.am | 20 | ||||
-rw-r--r-- | src/Makefile.am | 22 | ||||
-rw-r--r-- | src/gnu.c | 93 | ||||
-rw-r--r-- | src/posix.c | 81 |
9 files changed, 342 insertions, 0 deletions
@@ -0,0 +1 @@ +Sergey Poznyakoff <gray@gnu.org> diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..97a3207 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,23 @@ +# This file is part of GNU cflow +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# Written by Sergey Poznyakoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +AUTOMAKE_OPTIONS = gnits 1.8 dist-bzip2 +ACLOCAL_AMFLAGS = -I m4 + +SUBDIRS = src elisp doc @@ -0,0 +1,37 @@ +GNU cflow NEWS -- history of user-visible changes. 2005-03-19 +Copyright (C) 2005 Sergey Poznyakoff +See the end of file for copying conditions. + +Please send mailutils bug reports to <gray@gnu.org>. + + +Version 0.2: + +* Added autoconf suite. +* Added POSIX output support. + + +Version 0.1: + +Initial version restored from 1997 snapshots. + + +---------------------------------------------------------------------- +* Copyright information: + +Copyright (C) 2005 Sergey Poznyakoff + + Permission is granted to anyone to make or distribute verbatim copies + of this document as received, in any medium, provided that the + copyright notice and this permission notice are preserved, + thus giving the recipient permission to redistribute in turn. + + Permission is granted to distribute modified versions + of this document, or of portions of it, + under the above conditions, provided also that they + carry prominent notices stating who last changed them. + +Local variables: +mode: outline +paragraph-separate: "[ ]*$" +end: diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..083a6e5 --- /dev/null +++ b/configure.ac @@ -0,0 +1,65 @@ +# This file is part of GNU cflow +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# Written by Sergey Poznyakoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +AC_PREREQ(2.59) +AC_INIT([GNU cflow], [0.2], [gray@gnu.org]) +AC_CONFIG_SRCDIR([src/cflow.h]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE +AC_CONFIG_HEADER([config.h]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_LEX + +# Checks for libraries. +# FIXME: Replace `main' with a function in `-ll': +#AC_CHECK_LIB([l], [main]) + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdlib.h string.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_FUNC_OBSTACK + +# Checks for library functions. +AC_FUNC_ERROR_AT_LINE +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_FUNC_STAT +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([memmove memset strdup strerror strtol]) + +### Check for Emacs site-lisp directory +AM_PATH_LISPDIR + +if test "$EMACS" != "no"; then + lisp_LISP='$(LISPSRC)' +fi +AC_SUBST(lisp_LISP) + +AC_SUBST(LEXDIR) +LEXDIR="$datadir/$PACKAGE_VERSION" + +AC_CONFIG_FILES([Makefile + doc/Makefile + elisp/Makefile + src/Makefile]) +AC_OUTPUT diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..a0b8960 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,20 @@ +# This file is part of GNU cflow +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# Written by Sergey Poznyakoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +EXTRA_DIST = cflow.txt
\ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..55880f2 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,22 @@ +# This file is part of GNU cflow +# Copyright (C) 2005 Free Software Foundation, Inc. +# +# Written by Sergey Poznyakoff +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +bin_PROGRAMS = cflow +cflow_SOURCES = main.c rc.c parser.c c.l output.c symbol.c cflow.h version.h parser.h gnu.c posix.c +AM_LEXFLAGS=-dbvppl diff --git a/src/gnu.c b/src/gnu.c new file mode 100644 index 0000000..2e90bf6 --- /dev/null +++ b/src/gnu.c @@ -0,0 +1,93 @@ +/* This file is part of GNU cflow + Copyright (C) 1997,2005 Sergey Poznyakoff + + GNU cflow is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + GNU cflow is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU cflow; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include <cflow.h> + +/* Print current tree level + */ +static void +print_level(int lev, int last) +{ + int i; + + if (print_levels) + fprintf(outfile, "%4d ", lev); + fprintf(outfile, "%s", level_begin); + for (i = 0; i < lev; i++) + fprintf(outfile, "%s", level_indent[ level_mark[i] ]); + fprintf(outfile, "%s", level_end[last]); +} + +void +print_function_name(Symbol *sym, int has_subtree) +{ + fprintf(outfile, "%s()", sym->name); + if (sym->v.func.type) + fprintf(outfile, " <%s at %s:%d>", + sym->v.func.type, + sym->v.func.source, + sym->v.func.def_line); + if (sym->active) { + fprintf(outfile, " (recursive: see %d)", sym->active-1); + return; + } + if (sym->v.func.recursive) + fprintf(outfile, " (R)"); + if (!print_as_tree && has_subtree) + fprintf(outfile, ":"); +} + + +static void +print_symbol(FILE *outfile, int line, struct output_symbol *s) +{ + if (s->direct) { + print_level(s->level, s->last); + print_function_name(s->sym, s->sym->v.func.callee != NULL); + + if (brief_listing) { + if (s->sym->expand_line) + fprintf(outfile, " [see %d]", s->sym->expand_line); + else if (s->sym->v.func.callee) + s->sym->expand_line = line; + } + } else { + print_level(s->level, s->last); + print_function_name(s->sym, s->sym->v.func.caller != NULL); + } +} + +void +gnu_output_handler(cflow_output_command cmd, + FILE *outfile, int line, + void *data, void *handler_data) +{ + switch (cmd) { + case cflow_output_begin: + case cflow_output_end: + break; + case cflow_output_newline: + case cflow_output_separator: + fprintf(outfile, "\n"); + break; + case cflow_output_text: + fprintf(outfile, "%s\n", data); + break; + case cflow_output_symbol: + print_symbol(outfile, line, data); + } +} diff --git a/src/posix.c b/src/posix.c new file mode 100644 index 0000000..9d1b4c9 --- /dev/null +++ b/src/posix.c @@ -0,0 +1,81 @@ +/* This file is part of GNU cflow + Copyright (C) 1997,2005 Sergey Poznyakoff + + GNU cflow is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + GNU cflow is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU cflow; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include <cflow.h> + +static void +print_symbol(FILE *outfile, int line, struct output_symbol *s) +{ + if (s->direct) { + fprintf(outfile, "%d %*s%s: ", \ + line, + 3*s->level, "", + s->sym->name); + + if (s->sym->v.func.type) { + char *p = s->sym->v.func.type; + + while (*p) { + char *q = p; + + /* Skip whitespace */ + while (*q && isspace (*q)) + q++; + + if (*q == '(') { + /* Do not print function name */ + p = q; + break; + } + + /* Skip identifier */ + while (*q && !isspace (*q)) + q++; + + for (; p < q; p++) + fputc(*p, outfile); + } + + fprintf(outfile, "%s, <%s %d>", + p, + s->sym->v.func.source, + s->sym->v.func.def_line); + } else + fprintf(outfile, "<>"); + } +} + +void +posix_output_handler(cflow_output_command cmd, + FILE *outfile, int line, + void *data, void *handler_data) +{ + switch (cmd) { + case cflow_output_begin: + case cflow_output_end: + break; + case cflow_output_newline: + case cflow_output_separator: + fprintf(outfile, "\n"); + break; + case cflow_output_text: + fprintf(outfile, "%s\n", data); + break; + case cflow_output_symbol: + print_symbol(outfile, line, data); + } +} |