summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux2012-03-25 10:41:07 +0200
committerQuentin Carbonneaux2012-03-25 10:41:07 +0200
commita10ff13d00eb7fa816a3771b2c4ae7265627a024 (patch)
treebf2f61a74dcaa8fdbbf27aad5b3cdc1c2fe22289
parent9ec61b4072285e36baeab8f1ac6d819f9445b56c (diff)
Added option parsing.
This commit allows users to customize their IRC user name, nick name, and server. The user name, if not specified, is taken from the environment variable USER. The nick name, if not specified, is taken from IRCNICK. The nick name cannot exceed 63 chars (which is way more than what is currently accepted by most IRC servers).
-rw-r--r--irc.c42
1 files changed, 35 insertions, 7 deletions
diff --git a/irc.c b/irc.c
index 872388f..40c52df 100644
--- a/irc.c
+++ b/irc.c
@@ -25,11 +25,12 @@
#define SCROLL 15
#define DATEFMT "%H:%M"
#define PFMT "%-12s < %s"
+#define SRV "chat.freenode.org"
+#define PORT 6667
enum { ChanLen = 64, LineLen = 512, MaxChans = 16, BufSz = 2048, LogSz = 4096 };
char nick[64];
-char prefix[64];
int quit, winchg;
int sfd; /* Server file descriptor. */
struct {
@@ -536,17 +537,44 @@ treset(void)
}
int
-main(void)
+main(int argc, char *argv[])
{
const char *user = getenv("USER");
-
- if (!user) user="Unknown";
+ const char *ircnick = getenv("IRCNICK");
+ const char *server = SRV;
+ unsigned short port = PORT;
+ int o;
+
+ while ((o=getopt(argc, argv, "hn:u:s:p:"))>=0)
+ switch (o) {
+ case 'h':
+ case '?':
+ usage:
+ fputs("Usage: irc [-n NICK] [-u USER] [-s SERVER] [-p PORT] [-h]\n", stderr);
+ exit(0);
+ case 'n':
+ if (strlen(optarg)>=sizeof nick) goto usage;
+ strcpy(nick, optarg);
+ break;
+ case 'u':
+ user = optarg;
+ break;
+ case 's':
+ server = optarg;
+ break;
+ case 'p':
+ if (!(port=strtol(optarg, 0, 0))) goto usage;
+ break;
+ }
+ if (!nick[0] && ircnick && strlen(ircnick)<sizeof nick)
+ strcpy(nick, ircnick);
+ if (!nick[0]) goto usage;
+ if (!user) user = "Unknown";
tinit();
+ sfd = dial(server, port);
chadd("*server*");
- strcpy(nick, "_mpu");
- sfd = dial("chat.freenode.org", 6667);
sndf("NICK %s", nick);
- sndf("USER brebi 8 * :%s", user);
+ sndf("USER %s 8 * :%s", user, user);
sndf("MODE %s +i", nick);
while (!quit) {
fd_set rfs, wfs;