Introduction
Introduction Statistics Contact Development Disclaimer Help
applied 3 additional patches by Dimitris - sic - simple irc client
git clone git://git.suckless.org/sic
Log
Files
Refs
README
LICENSE
---
commit 6703fe45923e62fdad4ebdcc25c7df7dddbe1db8
parent 5eaa0fff0d2d5c4b3f875add16894d53a7da9c45
Author: Anselm R Garbe <[email protected]>
Date: Fri, 14 Nov 2014 16:06:28 +0100
applied 3 additional patches by Dimitris
Diffstat:
M Makefile | 2 +-
A arg.h | 63 +++++++++++++++++++++++++++++…
M sic.c | 64 +++++++++++++++++------------…
3 files changed, 99 insertions(+), 30 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -34,7 +34,7 @@ clean:
dist: clean
@echo creating dist tarball
@mkdir -p sic-${VERSION}
- @cp -R LICENSE Makefile README config.mk sic.1 sic.c util.c sic-${VERS…
+ @cp -R LICENSE Makefile README config.def.h config.mk sic.1 sic.c util…
@tar -cf sic-${VERSION}.tar sic-${VERSION}
@gzip sic-${VERSION}.tar
@rm -rf sic-${VERSION}
diff --git a/arg.h b/arg.h
@@ -0,0 +1,63 @@
+/*
+ * Copy me if you can.
+ * by 20h
+ */
+
+#ifndef ARG_H__
+#define ARG_H__
+
+extern char *argv0;
+
+/* use main(int argc, char *argv[]) */
+#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
+ argv[0] && argv[0][1]\
+ && argv[0][0] == '-';\
+ argc--, argv++) {\
+ char argc_;\
+ char **argv_;\
+ int brk_;\
+ if (argv[0][1] == '-' && argv[0][2] == '\0') {\
+ argv++;\
+ argc--;\
+ break;\
+ }\
+ for (brk_ = 0, argv[0]++, argv_ = argv;\
+ argv[0][0] && !brk_;\
+ argv[0]++) {\
+ if (argv_ != argv)\
+ break;\
+ argc_ = argv[0][0];\
+ switch (argc_)
+
+/* Handles obsolete -NUM syntax */
+#define ARGNUM case '0':\
+ case '1':\
+ case '2':\
+ case '3':\
+ case '4':\
+ case '5':\
+ case '6':\
+ case '7':\
+ case '8':\
+ case '9'
+
+#define ARGEND }\
+ }
+
+#define ARGC() argc_
+
+#define ARGNUMF(base) (brk_ = 1, estrtol(argv[0], (base)))
+
+#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
+ ((x), abort(), (char *)0) :\
+ (brk_ = 1, (argv[0][1] != '\0')?\
+ (&argv[0][1]) :\
+ (argc--, argv++, argv[0])))
+
+#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
+ (char *)0 :\
+ (brk_ = 1, (argv[0][1] != '\0')?\
+ (&argv[0][1]) :\
+ (argc--, argv++, argv[0])))
+
+#endif
diff --git a/sic.c b/sic.c
@@ -8,8 +8,10 @@
#include <time.h>
#include <unistd.h>
+#include "arg.h"
#include "config.h"
+char *argv0;
static char *host = DEFAULT_HOST;
static char *port = DEFAULT_PORT;
static char *password;
@@ -133,40 +135,44 @@ parsesrv(char *cmd) {
}
}
+
+static void
+usage(void) {
+ eprint("usage: sic [-h host] [-p port] [-n nick] [-k keyword] [-v]\n",…
+}
+
int
main(int argc, char *argv[]) {
- int i, c;
struct timeval tv;
const char *user = getenv("USER");
+ int n;
fd_set rd;
strlcpy(nick, user ? user : "unknown", sizeof nick);
- for(i = 1; i < argc; i++) {
- c = argv[i][1];
- if(argv[i][0] != '-' || argv[i][2])
- c = -1;
- switch(c) {
- case 'h':
- if(++i < argc) host = argv[i];
- break;
- case 'p':
- if(++i < argc) port = argv[i];
- break;
- case 'n':
- if(++i < argc) strlcpy(nick, argv[i], sizeof nick);
- break;
- case 'k':
- if(++i < argc) password = argv[i];
- break;
- case 'v':
- eprint("sic-"VERSION", © 2005-2012 Kris Maglione, Ans…
- default:
- eprint("usage: sic [-h host] [-p port] [-n nick] [-k k…
- }
- }
+ ARGBEGIN {
+ case 'h':
+ host = EARGF(usage());
+ break;
+ case 'p':
+ port = EARGF(usage());
+ break;
+ case 'n':
+ strlcpy(nick, EARGF(usage()), sizeof nick);
+ break;
+ case 'k':
+ password = EARGF(usage());
+ break;
+ case 'v':
+ eprint("sic-"VERSION", © 2005-2014 Kris Maglione, Anselm R. G…
+ break;
+ default:
+ usage();
+ } ARGEND;
+
/* init */
- i = dial(host, port);
- srv = fdopen(i, "r+");
+ srv = fdopen(dial(host, port), "r+");
+ if (!srv)
+ eprint("fdopen:");
/* login */
if(password)
sout("PASS %s", password);
@@ -181,13 +187,13 @@ main(int argc, char *argv[]) {
FD_SET(fileno(srv), &rd);
tv.tv_sec = 120;
tv.tv_usec = 0;
- i = select(fileno(srv) + 1, &rd, 0, 0, &tv);
- if(i < 0) {
+ n = select(fileno(srv) + 1, &rd, 0, 0, &tv);
+ if(n < 0) {
if(errno == EINTR)
continue;
eprint("sic: error on select():");
}
- else if(i == 0) {
+ else if(n == 0) {
if(time(NULL) - trespond >= 300)
eprint("sic shutting down: parse timeout\n");
sout("PING %s", host);
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.