diff options
Diffstat (limited to 'contrib/ncurses/progs/toe.c')
-rw-r--r-- | contrib/ncurses/progs/toe.c | 220 |
1 files changed, 106 insertions, 114 deletions
diff --git a/contrib/ncurses/progs/toe.c b/contrib/ncurses/progs/toe.c index f2c5c5e..afdf379 100644 --- a/contrib/ncurses/progs/toe.c +++ b/contrib/ncurses/progs/toe.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright (c) 1998-2000 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -43,41 +43,57 @@ #include <dump_entry.h> #include <term_entry.h> -MODULE_ID("$Id: toe.c,v 0.19 1998/03/08 01:02:46 tom Exp $") +MODULE_ID("$Id: toe.c,v 1.22 2000/03/11 21:47:35 tom Exp $") + +#define isDotname(name) (!strcmp(name, ".") || !strcmp(name, "..")) const char *_nc_progname; static int typelist(int eargc, char *eargv[], bool, - void (*)(const char *, TERMTYPE *)); + void (*)(const char *, TERMTYPE *)); static void deschook(const char *, TERMTYPE *); #if NO_LEAKS #undef ExitProgram -static void ExitProgram(int code) GCC_NORETURN; -static void ExitProgram(int code) +static void +ExitProgram(int code) GCC_NORETURN; + static void ExitProgram(int code) { - _nc_free_entries(_nc_head); - _nc_leaks_dump_entry(); - _nc_free_and_exit(code); + _nc_free_entries(_nc_head); + _nc_leaks_dump_entry(); + _nc_free_and_exit(code); } #endif -int main (int argc, char *argv[]) +static char * +get_directory(char *path) +{ + if (path != 0) { + struct stat sb; + if (stat(path, &sb) != 0 + || (sb.st_mode & S_IFMT) != S_IFDIR + || access(path, R_OK | X_OK) != 0) + path = 0; + } + return path; +} + +int +main(int argc, char *argv[]) { - bool direct_dependencies = FALSE; - bool invert_dependencies = FALSE; - bool header = FALSE; - int i, c, debug_level = 0; - int code; + bool direct_dependencies = FALSE; + bool invert_dependencies = FALSE; + bool header = FALSE; + int i, c; + int code; - if ((_nc_progname = strrchr(argv[0], '/')) == NULL) + if ((_nc_progname = strrchr(argv[0], '/')) == 0) _nc_progname = argv[0]; else _nc_progname++; while ((c = getopt(argc, argv, "huv:UV")) != EOF) - switch (c) - { + switch (c) { case 'h': header = TRUE; break; @@ -85,8 +101,7 @@ int main (int argc, char *argv[]) direct_dependencies = TRUE; break; case 'v': - debug_level = atoi(optarg); - _nc_tracing = (1 << debug_level) - 1; + set_trace_level(atoi(optarg)); break; case 'U': invert_dependencies = TRUE; @@ -96,14 +111,12 @@ int main (int argc, char *argv[]) putchar('\n'); ExitProgram(EXIT_SUCCESS); default: - (void) fprintf (stderr, "usage: toe [-huUV] [-v n] [file...]\n"); + (void) fprintf(stderr, "usage: toe [-huUV] [-v n] [file...]\n"); ExitProgram(EXIT_FAILURE); } - if (direct_dependencies || invert_dependencies) - { - if (freopen(argv[optind], "r", stdin) == NULL) - { + if (direct_dependencies || invert_dependencies) { + if (freopen(argv[optind], "r", stdin) == 0) { (void) fflush(stdout); fprintf(stderr, "%s: can't open %s\n", _nc_progname, argv[optind]); ExitProgram(EXIT_FAILURE); @@ -111,52 +124,45 @@ int main (int argc, char *argv[]) /* parse entries out of the source file */ _nc_set_source(argv[optind]); - _nc_read_entry_source(stdin, (char *)NULL, - FALSE, FALSE, - NULLHOOK); + _nc_read_entry_source(stdin, 0, FALSE, FALSE, NULLHOOK); } /* maybe we want a direct-dependency listing? */ - if (direct_dependencies) - { - ENTRY *qp; + if (direct_dependencies) { + ENTRY *qp; for_entry_list(qp) - if (qp->nuses) - { - int j; + if (qp->nuses) { + int j; - (void) printf("%s:", _nc_first_name(qp->tterm.term_names)); - for (j = 0; j < qp->nuses; j++) - (void) printf(" %s", (char *)(qp->uses[j].parent)); - putchar('\n'); - } + (void) printf("%s:", _nc_first_name(qp->tterm.term_names)); + for (j = 0; j < qp->nuses; j++) + (void) printf(" %s", qp->uses[j].name); + putchar('\n'); + } ExitProgram(EXIT_SUCCESS); } /* maybe we want a reverse-dependency listing? */ - if (invert_dependencies) - { - ENTRY *qp, *rp; - int matchcount; + if (invert_dependencies) { + ENTRY *qp, *rp; + int matchcount; - for_entry_list(qp) - { + for_entry_list(qp) { matchcount = 0; - for_entry_list(rp) - { + for_entry_list(rp) { if (rp->nuses == 0) continue; for (i = 0; i < rp->nuses; i++) - if (_nc_name_match(qp->tterm.term_names,(char*)rp->uses[i].parent, "|")) - { + if (_nc_name_match(qp->tterm.term_names, + rp->uses[i].name, "|")) { if (matchcount++ == 0) (void) printf("%s:", - _nc_first_name(qp->tterm.term_names)); + _nc_first_name(qp->tterm.term_names)); (void) printf(" %s", - _nc_first_name(rp->tterm.term_names)); + _nc_first_name(rp->tterm.term_names)); } } if (matchcount) @@ -170,29 +176,25 @@ int main (int argc, char *argv[]) * If we get this far, user wants a simple terminal type listing. */ if (optind < argc) { - code = typelist(argc-optind, argv+optind, header, deschook); + code = typelist(argc - optind, argv + optind, header, deschook); } else { - char *by_env, *home, *eargv[3]; - int j; + char *home, *eargv[3]; + char personal[PATH_MAX]; + int j; j = 0; - if ((by_env = getenv("TERMINFO")) != (char *)NULL) - eargv[j++] = by_env; - else - { - if ((home = getenv("HOME")) != (char *)NULL) - { - char personal[PATH_MAX]; - struct stat sb; - + if ((eargv[j] = get_directory(getenv("TERMINFO"))) != 0) { + j++; + } else { + if ((home = getenv("HOME")) != 0) { (void) sprintf(personal, PRIVATE_INFO, home); - if (stat(personal, &sb) == 0 - && (sb.st_mode & S_IFMT) == S_IFDIR) - eargv[j++] = personal; + if ((eargv[j] = get_directory(personal)) != 0) + j++; } - eargv[j++] = TERMINFO; + if ((eargv[j] = get_directory(TERMINFO)) != 0) + j++; } - eargv[j] = (char *)NULL; + eargv[j] = 0; code = typelist(j, eargv, header, deschook); } @@ -200,12 +202,13 @@ int main (int argc, char *argv[]) ExitProgram(code); } -static void deschook(const char *cn, TERMTYPE *tp) +static void +deschook(const char *cn, TERMTYPE * tp) /* display a description for the type */ { const char *desc; - if ((desc = strrchr(tp->term_names, '|')) == (char *)NULL) + if ((desc = strrchr(tp->term_names, '|')) == 0) desc = "(No description)"; else ++desc; @@ -213,85 +216,74 @@ static void deschook(const char *cn, TERMTYPE *tp) (void) printf("%-10s\t%s\n", cn, desc); } -static int typelist(int eargc, char *eargv[], - bool verbosity, - void (*hook)(const char *, TERMTYPE *tp)) +static int +typelist(int eargc, char *eargv[], + bool verbosity, + void (*hook) (const char *, TERMTYPE * tp)) /* apply a function to each entry in given terminfo directories */ { - int i; + int i; - for (i = 0; i < eargc; i++) - { - DIR *termdir; + for (i = 0; i < eargc; i++) { + DIR *termdir; struct dirent *subdir; - if ((termdir = opendir(eargv[i])) == (DIR *)NULL) - { + if ((termdir = opendir(eargv[i])) == 0) { (void) fflush(stdout); (void) fprintf(stderr, - "%s: can't open terminfo directory %s\n", - _nc_progname, eargv[i]); - return(EXIT_FAILURE); - } - else if (verbosity) + "%s: can't open terminfo directory %s\n", + _nc_progname, eargv[i]); + return (EXIT_FAILURE); + } else if (verbosity) (void) printf("#\n#%s:\n#\n", eargv[i]); - while ((subdir = readdir(termdir)) != NULL) - { - size_t len = NAMLEN(subdir); - char buf[PATH_MAX]; - char name_1[PATH_MAX]; - DIR *entrydir; + while ((subdir = readdir(termdir)) != 0) { + size_t len = NAMLEN(subdir); + char buf[PATH_MAX]; + char name_1[PATH_MAX]; + DIR *entrydir; struct dirent *entry; strncpy(name_1, subdir->d_name, len)[len] = '\0'; - if (!strcmp(name_1, ".") - || !strcmp(name_1, "..")) + if (isDotname(name_1)) continue; - (void) strcpy(buf, eargv[i]); - (void) strcat(buf, "/"); - (void) strcat(buf, name_1); - (void) strcat(buf, "/"); + (void) sprintf(buf, "%s/%s/", eargv[i], name_1); chdir(buf); entrydir = opendir("."); - while ((entry = readdir(entrydir)) != NULL) - { - char name_2[PATH_MAX]; - TERMTYPE lterm; - char *cn; - int status; + while ((entry = readdir(entrydir)) != 0) { + char name_2[PATH_MAX]; + TERMTYPE lterm; + char *cn; + int status; len = NAMLEN(entry); strncpy(name_2, entry->d_name, len)[len] = '\0'; - if (!strcmp(name_2, ".") - || !strcmp(name_2, "..")) + if (isDotname(name_2)) continue; status = _nc_read_file_entry(name_2, <erm); - if (status <= 0) - { + if (status <= 0) { (void) fflush(stdout); (void) fprintf(stderr, - "toe: couldn't open terminfo file %s.\n", - name_2); - return(EXIT_FAILURE); + "toe: couldn't open terminfo file %s.\n", + name_2); + return (EXIT_FAILURE); } /* only visit things once, by primary name */ cn = _nc_first_name(lterm.term_names); - if (!strcmp(cn, name_2)) - { + if (!strcmp(cn, name_2)) { /* apply the selected hook function */ - (*hook)(cn, <erm); + (*hook) (cn, <erm); } if (lterm.term_names) { free(lterm.term_names); - lterm.term_names = NULL; + lterm.term_names = 0; } if (lterm.str_table) { free(lterm.str_table); - lterm.str_table = NULL; + lterm.str_table = 0; } } closedir(entrydir); @@ -299,5 +291,5 @@ static int typelist(int eargc, char *eargv[], closedir(termdir); } - return(EXIT_SUCCESS); + return (EXIT_SUCCESS); } |