version 1.1, 1995/10/18 08:46:27 |
version 1.2, 1996/01/29 01:02:19 |
|
|
/* $NetBSD: tsort.c,v 1.10 1995/08/31 22:06:22 jtc Exp $ */ |
/* $NetBSD: tsort.c,v 1.11 1996/01/17 20:37:53 mycroft Exp $ */ |
|
|
/* |
/* |
* Copyright (c) 1989, 1993, 1994 |
* Copyright (c) 1989, 1993, 1994 |
|
|
#if 0 |
#if 0 |
static char sccsid[] = "@(#)tsort.c 8.3 (Berkeley) 5/4/95"; |
static char sccsid[] = "@(#)tsort.c 8.3 (Berkeley) 5/4/95"; |
#endif |
#endif |
static char rcsid[] = "$NetBSD: tsort.c,v 1.10 1995/08/31 22:06:22 jtc Exp $"; |
static char rcsid[] = "$NetBSD: tsort.c,v 1.11 1996/01/17 20:37:53 mycroft Exp $"; |
#endif /* not lint */ |
#endif /* not lint */ |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
|
|
|
DB *db; |
DB *db; |
NODE *graph, **cycle_buf, **longest_cycle; |
NODE *graph, **cycle_buf, **longest_cycle; |
int debug, longest; |
int debug, longest, quiet; |
|
|
void add_arc __P((char *, char *)); |
void add_arc __P((char *, char *)); |
int find_cycle __P((NODE *, NODE *, int, int)); |
int find_cycle __P((NODE *, NODE *, int, int)); |
|
|
int bsize, ch, nused; |
int bsize, ch, nused; |
BUF bufs[2]; |
BUF bufs[2]; |
|
|
while ((ch = getopt(argc, argv, "dl")) != EOF) |
while ((ch = getopt(argc, argv, "dlq")) != EOF) |
switch (ch) { |
switch (ch) { |
case 'd': |
case 'd': |
debug = 1; |
debug = 1; |
|
|
case 'l': |
case 'l': |
longest = 1; |
longest = 1; |
break; |
break; |
|
case 'q': |
|
quiet = 1; |
|
break; |
case '?': |
case '?': |
default: |
default: |
usage(); |
usage(); |
|
|
for (n = graph; n != NULL; n = n->n_next) |
for (n = graph; n != NULL; n = n->n_next) |
if (!(n->n_flags & NF_ACYCLIC)) |
if (!(n->n_flags & NF_ACYCLIC)) |
if (cnt = find_cycle(n, n, 0, 0)) { |
if (cnt = find_cycle(n, n, 0, 0)) { |
warnx("cycle in data"); |
if (!quiet) { |
for (i = 0; i < cnt; i++) |
warnx("cycle in data"); |
warnx("%s", |
for (i = 0; i < cnt; i++) |
longest_cycle[i]->n_name); |
warnx("%s", |
|
longest_cycle[i]->n_name); |
|
} |
remove_node(n); |
remove_node(n); |
clear_cycle(); |
clear_cycle(); |
break; |
break; |
|
|
void |
void |
usage() |
usage() |
{ |
{ |
(void)fprintf(stderr, "usage: tsort [-l] [file]\n"); |
(void)fprintf(stderr, "usage: tsort [-lq] [file]\n"); |
exit(1); |
exit(1); |
} |
} |