diff options
author | Michael Czigler <37268479+mcpcpc@users.noreply.github.com> | 2020-09-23 16:01:35 -0400 |
---|---|---|
committer | mcpcpc <michaelczigler@icloud.com> | 2020-09-24 22:48:02 -0400 |
commit | 05aebf593fff9f225e4ccf1264db3722acf8468e (patch) | |
tree | 2c9e886e9a202170ae10d332b99fd2fdb921475e /kirc.c | |
parent | bump version to 0.1.1 (diff) | |
download | kirc-05aebf593fff9f225e4ccf1264db3722acf8468e.tar.gz kirc-05aebf593fff9f225e4ccf1264db3722acf8468e.tar.bz2 kirc-05aebf593fff9f225e4ccf1264db3722acf8468e.tar.xz kirc-05aebf593fff9f225e4ccf1264db3722acf8468e.tar.zst kirc-05aebf593fff9f225e4ccf1264db3722acf8468e.zip |
squash commits to address README and defaults
Update README.md
update logo
Update README.md
add multi-channel join argument option
simplify printw()
return after channel join
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Add files via upload
Delete googled3f6f6cc852fad22.html
Add files via upload
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
Update README.md
increase chan variable size
Delete test
remove fixed chan buffer size
Diffstat (limited to 'kirc.c')
-rw-r--r-- | kirc.c | 85 |
1 files changed, 41 insertions, 44 deletions
@@ -21,12 +21,13 @@ [-w columns] [-W columns] [-o path] [-h|v|V]" static int conn; /* connection socket */ +static char chan_default[MSG_MAX]; /* default channel for PRIVMSG */ static int verb = 0; /* verbose output (e.g. raw stream) */ static size_t cmax = 80; /* max number of chars per line */ static size_t gutl = 20; /* max char width of left column */ -static char chan[CHA_MAX] = "kirc"; /* channel */ static char * host = "irc.freenode.org"; /* irc host address */ static char * port = "6667"; /* server port */ +static char * chan = NULL; /* channel(s) */ static char * nick = NULL; /* nickname */ static char * pass = NULL; /* server password */ static char * user = NULL; /* server user name */ @@ -117,24 +118,10 @@ connection_initialize(void) { } static void -printw(const char *format, ...) { +message_wrap(char *line, size_t offset) { - va_list argptr; - char *tok, line[MSG_MAX]; - size_t i, wordwidth, spaceleft = cmax, spacewidth = 1; - - va_start(argptr, format); - vsnprintf(line, MSG_MAX, format, argptr); - va_end(argptr); - - if (olog) log_append(line, olog); - - for (i = 0; line[i] == ' '; ++i) { - putchar(line[i]); - } - - //spaceleft -= i - 1; - spaceleft -= i - 1 - 9; /* _temporary_ fix */ + char *tok; + size_t wordwidth, spaceleft = cmax - gutl - offset, spacewidth = 1; for(tok = strtok(line, " "); tok != NULL; tok = strtok(NULL, " ")) { wordwidth = strlen(tok); @@ -151,45 +138,55 @@ printw(const char *format, ...) { } static void -raw_parser(char *usrin) { +raw_parser(char *string) { - if (verb) printf(">> %s\n", usrin); + if (verb) printf(">> %s\n", string); - if (!strncmp(usrin, "PING", 4)) { - usrin[1] = 'O'; - raw("%s\r\n", usrin); + if (!strncmp(string, "PING", 4)) { + string[1] = 'O'; + raw("%s\r\n", string); return; } - if (!strncmp(usrin, "AUTHENTICATE +", 14)) { + if (!strncmp(string, "AUTHENTICATE +", 14)) { raw("AUTHENTICATE %s\r\n", auth); return; } - if (usrin[0] != ':') return; + if (string[0] != ':') return; + + if (olog) log_append(string, olog); - char *prefix = strtok(usrin, " ") + 1, *suffix = strtok(NULL, ":"), + char *tok, *prefix = strtok(string, " ") + 1, *suffix = strtok(NULL, ":"), *message = strtok(NULL, "\r"), *nickname = strtok(prefix, "!"), *command = strtok(suffix, "#& "), *channel = strtok(NULL, " "); int g = gutl, s = gutl - (strlen(nickname) <= gutl ? strlen(nickname) : gutl); + size_t offset = 0; - if (!strncmp(command, "001", 3)) { - raw("JOIN #%s\r\n", chan); + if (!strncmp(command, "001", 3) && chan != NULL) { + for (tok = strtok(chan, ",|"); tok != NULL; tok = strtok(NULL, ",|")) { + strcpy(chan_default, tok); + raw("JOIN #%s\r\n", tok); + } return; } else if (!strncmp(command, "90", 2)) { raw("CAP END\r\n"); } else if (!strncmp(command, "QUIT", 4)) { - printw("%*s<-- \x1b[34;1m%s\x1b[0m", g - 3, "", nickname); + printf("%*s<-- \x1b[34;1m%s\x1b[0m\n", g - 3, "", nickname); + return; } else if (!strncmp(command, "JOIN", 4)) { - printw("%*s--> \x1b[32;1m%s\x1b[0m", g - 3, "", nickname); + printf("%*s--> \x1b[32;1m%s\x1b[0m\n", g - 3, "", nickname); + return; } else if (!strncmp(command, "PRIVMSG", 7) && strcmp(channel, nick) == 0) { - printw("%*s\x1b[43;1m%-.*s\x1b[0m %s", s, "", g, nickname, message); - } else if (!strncmp(command, "PRIVMSG", 7) && strstr(channel, chan) == NULL) { - printw("%*s\x1b[33;1m%-.*s\x1b[0m [\x1b[33m%s\x1b[0m] %s", s, "", \ - g, nickname, channel, message); - } else printw("%*s\x1b[33;1m%-.*s\x1b[0m %s", s, "", g, nickname, message); + printf("%*s\x1b[43;1m%-.*s\x1b[0m ", s, "", g, nickname); + } else if (!strncmp(command, "PRIVMSG", 7) && strstr(channel, chan_default) == NULL) { + printf("%*s\x1b[33;1m%-.*s\x1b[0m [\x1b[33m%s\x1b[0m] ", s, "", \ + g, nickname, channel); + offset += 12 + strlen(channel); + } else printf("%*s\x1b[33;1m%-.*s\x1b[0m ", s, "", g, nickname); + message_wrap((message ? message : " "), offset); } -static char message_buffer[MSG_MAX + 1]; +static char message_buffer[MSG_MAX + 1]; static size_t message_end = 0; static int @@ -243,15 +240,15 @@ handle_user_input(void) { if (usrin[0] == '/') { if (usrin[1] == '#') { - strcpy(chan, usrin + 2); - printf("new channel: #%s\n", chan); + strcpy(chan_default, usrin + 2); + printf("new channel: #%s\n", chan_default); } else if (usrin[1] == '?' && msg_len == 3) { - printf("current channel: #%s\n", chan); + printf("current channel: #%s\n", chan_default); } else { raw("%s\r\n", usrin + 1); } } else { - raw("privmsg #%s :%s\r\n", chan, usrin); + raw("privmsg #%s :%s\r\n", chan_default, usrin); } } @@ -259,7 +256,7 @@ static int keyboard_hit() { struct termios save, tp; - int byteswaiting; + int byteswaiting; tcgetattr(STDIN_FILENO, &tp); save = tp; @@ -280,8 +277,6 @@ main(int argc, char **argv) { switch (cval) { case 'V' : verb = 1; break; case 's' : host = optarg; break; - case 'w' : gutl = atoi(optarg); break; - case 'W' : cmax = atoi(optarg); break; case 'p' : port = optarg; break; case 'r' : real = optarg; break; case 'u' : user = optarg; break; @@ -289,8 +284,10 @@ main(int argc, char **argv) { case 'o' : olog = optarg; break; case 'n' : nick = optarg; break; case 'k' : pass = optarg; break; - case 'c' : strcpy(chan, optarg); break; + case 'c' : chan = optarg; break; case 'x' : inic = optarg; break; + case 'w' : gutl = atoi(optarg); break; + case 'W' : cmax = atoi(optarg); break; case 'v' : printf("kirc %s\n", VERSION); return EXIT_SUCCESS; case 'h' : printf("usage: %s\n", USAGE); return EXIT_SUCCESS; case '?' : return EXIT_FAILURE; |