diff options
Diffstat (limited to 'list.c')
-rw-r--r-- | list.c | 178 |
1 files changed, 178 insertions, 0 deletions
@@ -0,0 +1,178 @@ +/* Routines to handle `listnicks' and `listchans' invocations. + * + * (C) 2003 Anope Team + * Contact us at info@anope.org + * + * Please read COPYING and README for furhter details. + * + * Based on the original code of Epona by Lara. + * Based on the original code of Services by Andy Church. + * + * $Id: list.c,v 1.5 2003/07/20 01:15:49 dane Exp $ + * + */ + +#include "services.h" + +/*************************************************************************/ + +void do_listnicks(int ac, char **av) +{ + int count = 0; /* Count only rather than display? */ + int usage = 0; /* Display command usage? (>0 also indicates error) */ + int i; + + i = 1; + while (i < ac) { + if (av[i][0] == '-') { + switch (av[i][1]) { + case 'h': + usage = -1; + break; + case 'c': + if (i > 1) + usage = 1; + count = 1; + break; + case 'd': + if (av[i][2]) { + services_dir = av[i] + 2; + } else { + if (i >= ac - 1) { + usage = 1; + break; + } + ac--; + memmove(av + i, av + i + 1, sizeof(char *) * ac - i); + services_dir = av[i]; + } + default: + usage = 1; + break; + } /* switch */ + ac--; + if (i < ac) + memmove(av + i, av + i + 1, sizeof(char *) * ac - i); + } else { + if (count) + usage = 1; + i++; + } + } + if (usage) { + fprintf(stderr, "\ +\n\ +Usage: listnicks [-c] [-d data-dir] [nick [nick...]]\n\ + -c: display only count of registered nicks\n\ + (cannot be combined with nicks)\n\ + nick: nickname(s) to display information for\n\ +\n\ +If no nicks are given, the entire nickname database is printed out in\n\ +compact format followed by the number of registered nicks (with -c, the\n\ +list is suppressed and only the count is printed). If one or more nicks\n\ +are given, detailed information about those nicks is displayed.\n\ +\n"); + exit(usage > 0 ? 1 : 0); + } + + if (chdir(services_dir) < 0) { + fprintf(stderr, "chdir(%s): %s\n", services_dir, strerror(errno)); + exit(1); + } + if (!read_config(0)) + exit(1); + load_ns_dbase(); + + lang_init(); + + if (ac > 1) { + for (i = 1; i < ac; i++) + listnicks(0, av[i]); + } else { + listnicks(count, NULL); + } + exit(0); +} + +/*************************************************************************/ + +void do_listchans(int ac, char **av) +{ + int count = 0; /* Count only rather than display? */ + int usage = 0; /* Display command usage? (>0 also indicates error) */ + int i; + + i = 1; + while (i < ac) { + if (av[i][0] == '-') { + switch (av[i][1]) { + case 'h': + usage = -1; + break; + case 'c': + if (i > 1) + usage = 1; + count = 1; + break; + case 'd': + if (av[i][2]) { + services_dir = av[i] + 2; + } else { + if (i >= ac - 1) { + usage = 1; + break; + } + ac--; + memmove(av + i, av + i + 1, sizeof(char *) * ac - i); + services_dir = av[i]; + } + default: + usage = 1; + break; + } /* switch */ + ac--; + if (i < ac) + memmove(av + i, av + i + 1, sizeof(char *) * ac - i); + } else { + if (count) + usage = 1; + i++; + } + } + if (usage) { + fprintf(stderr, "\ +\n\ +Usage: listchans [-c] [-d data-dir] [channel [channel...]]\n\ + -c: display only count of registered channels\n\ + (cannot be combined with channels)\n\ +channel: channel(s) to display information for\n\ +\n\ +If no channels are given, the entire channel database is printed out in\n\ +compact format followed by the number of registered channels (with -c, the\n\ +list is suppressed and only the count is printed). If one or more channels\n\ +are given, detailed information about those channels is displayed.\n\ +\n"); + exit(usage > 0 ? 1 : 0); + } + + if (chdir(services_dir) < 0) { + fprintf(stderr, "chdir(%s): %s\n", services_dir, strerror(errno)); + exit(1); + } + if (!read_config(0)) + exit(1); + load_ns_dbase(); + load_cs_dbase(); + + lang_init(); + + if (ac > 1) { + for (i = 1; i < ac; i++) + listchans(0, av[i]); + } else { + listchans(count, NULL); + } + exit(0); +} + +/*************************************************************************/ |