From 126c07b70a7f3217845ffbdf2a001af355755d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sun, 10 Aug 2014 00:47:26 +0200 Subject: [PATCH] kike: generate replies from a single text file It became a bit difficult to maintain two separate lists. Besides, the inverse generation of a message catalog from source code was a bit strange. --- .gitignore | 1 + Makefile | 15 ++-- kike-extract-messages.sh | 15 ---- kike-gen-replies.sh | 28 +++++++ kike-replies | 72 +++++++++++++++++ kike.c | 161 +-------------------------------------- 6 files changed, 110 insertions(+), 182 deletions(-) delete mode 100755 kike-extract-messages.sh create mode 100755 kike-gen-replies.sh create mode 100644 kike-replies diff --git a/.gitignore b/.gitignore index 57cf17a..6d7c37d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /zyklonb /kike /kike.msg +/kike-replies.c # Qt Creator files /ZyklonB.* diff --git a/Makefile b/Makefile index 55b236a..ed73294 100644 --- a/Makefile +++ b/Makefile @@ -8,19 +8,20 @@ CFLAGS = -std=c99 -Wall -Wextra -Wno-unused-function \ LDFLAGS = `pkg-config --libs libssl` -lpthread .PHONY: all clean +.SUFFIXES: targets = zyklonb kike kike.msg all: $(targets) clean: - rm -f $(targets) + rm -f $(targets) kike-replies.c -zyklonb: src/zyklonb.c src/common.c src/siphash.c - $(CC) src/zyklonb.c src/siphash.c -o $@ $(CFLAGS) $(LDFLAGS) +zyklonb: zyklonb.c common.c siphash.c + $(CC) zyklonb.c siphash.c -o $@ $(CFLAGS) $(LDFLAGS) +kike: kike.c common.c siphash.c kike-replies.c + $(CC) kike.c siphash.c -o $@ $(CFLAGS) $(LDFLAGS) -kike: src/kike.c src/common.c src/siphash.c - $(CC) src/kike.c src/siphash.c -o $@ $(CFLAGS) $(LDFLAGS) -kike.msg: src/kike.c - $(SHELL) kike-extract-messages.sh < $< > $@ +kike-replies.c kike.msg: kike-replies + $(SHELL) kike-gen-replies.sh < $< > $@ diff --git a/kike-extract-messages.sh b/kike-extract-messages.sh deleted file mode 100755 index 9438695..0000000 --- a/kike-extract-messages.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -LC_ALL=C exec awk ' - BEGIN { - print "$quote \""; - print "$set 1"; - } - /^\tIRC_(ERR|RPL)_[A-Z]+ *= *[0-9]+,?$/ { - match($3, /^[0-9]+/); - id[$1] = substr($3, RSTART, RLENGTH); - } - /^\t\[IRC_(ERR|RPL)_[A-Z]+\] *= *".*",?$/ { - z = substr($1, 2, length($1) - 2); - match($0, /".*"/); - print id[z] " " substr($0, RSTART, RLENGTH); - }' diff --git a/kike-gen-replies.sh b/kike-gen-replies.sh new file mode 100755 index 0000000..7318608 --- /dev/null +++ b/kike-gen-replies.sh @@ -0,0 +1,28 @@ +#!/bin/sh +LC_ALL=C exec awk ' + BEGIN { + # The message catalog is a byproduct + msg = "kike.msg" + print "$quote \"" > msg; + print "$set 1" > msg; + } + /^[0-9]+ *IRC_(ERR|RPL)_[A-Z]+ *".*"$/ { + match($0, /".*"/); + ids[$1] = $2; + texts[$2] = substr($0, RSTART, RLENGTH); + print $1 " " texts[$2] > msg + } + END { + printf("enum\n{") + for (i in ids) { + if (seen_first) + printf(",") + seen_first = 1 + printf("\n\t%s = %s", ids[i], i) + } + print "\n};\n" + print "static const char *g_default_replies[] =\n{" + for (i in ids) + print "\t[" ids[i] "] = " texts[ids[i]] "," + print "};" + }' diff --git a/kike-replies b/kike-replies new file mode 100644 index 0000000..b5f4674 --- /dev/null +++ b/kike-replies @@ -0,0 +1,72 @@ +1 IRC_RPL_WELCOME ":Welcome to the Internet Relay Network %s!%s@%s" +2 IRC_RPL_YOURHOST ":Your host is %s, running version %s" +3 IRC_RPL_CREATED ":This server was created %s" +4 IRC_RPL_MYINFO "%s %s %s %s" +221 IRC_RPL_UMODEIS "+%s" +251 IRC_RPL_LUSERCLIENT ":There are %d users and %d services on %d servers" +252 IRC_RPL_LUSEROP "%d :operator(s) online" +253 IRC_RPL_LUSERUNKNOWN "%d :unknown connection(s)" +254 IRC_RPL_LUSERCHANNELS "%d :channels formed" +255 IRC_RPL_LUSERME ":I have %d clients and %d servers" +301 IRC_RPL_AWAY "%s :%s" +302 IRC_RPL_USERHOST ":%s" +303 IRC_RPL_ISON ":%s" +305 IRC_RPL_UNAWAY ":You are no longer marked as being away" +306 IRC_RPL_NOWAWAY ":You have been marked as being away" +311 IRC_RPL_WHOISUSER "%s %s %s * :%s" +312 IRC_RPL_WHOISSERVER "%s %s :%s" +313 IRC_RPL_WHOISOPERATOR "%s :is an IRC operator" +315 IRC_RPL_ENDOFWHO "%s :End of WHO list" +317 IRC_RPL_WHOISIDLE "%s %d :seconds idle" +318 IRC_RPL_ENDOFWHOIS "%s :End of WHOIS list" +319 IRC_RPL_WHOISCHANNELS "%s :%s" +322 IRC_RPL_LIST "%s %d :%s" +323 IRC_RPL_LISTEND ":End of LIST" +324 IRC_RPL_CHANNELMODEIS "%s +%s" +331 IRC_RPL_NOTOPIC "%s :No topic is set" +332 IRC_RPL_TOPIC "%s :%s" +346 IRC_RPL_INVITELIST "%s %s" +347 IRC_RPL_ENDOFINVITELIST "%s :End of channel invite list" +348 IRC_RPL_EXCEPTLIST "%s %s" +349 IRC_RPL_ENDOFEXCEPTLIST "%s :End of channel exception list" +351 IRC_RPL_VERSION "%s.%d %s :%s" +352 IRC_RPL_WHOREPLY "%s %s %s %s %s %s :%d %s" +353 IRC_RPL_NAMREPLY "%c %s :%s" +366 IRC_RPL_ENDOFNAMES "%s :End of NAMES list" +367 IRC_RPL_BANLIST "%s %s" +368 IRC_RPL_ENDOFBANLIST "%s :End of channel ban list" +372 IRC_RPL_MOTD ":- %s" +375 IRC_RPL_MOTDSTART ":- %s Message of the day - " +376 IRC_RPL_ENDOFMOTD ":End of MOTD command" +391 IRC_RPL_TIME "%s :%s" +401 IRC_ERR_NOSUCHNICK "%s :No such nick/channel" +402 IRC_ERR_NOSUCHSERVER "%s :No such server" +403 IRC_ERR_NOSUCHCHANNEL "%s :No such channel" +404 IRC_ERR_CANNOTSENDTOCHAN "%s :Cannot send to channel" +409 IRC_ERR_NOORIGIN ":No origin specified" +411 IRC_ERR_NORECIPIENT ":No recipient given (%s)" +412 IRC_ERR_NOTEXTTOSEND ":No text to send" +421 IRC_ERR_UNKNOWNCOMMAND "%s: Unknown command" +422 IRC_ERR_NOMOTD ":MOTD File is missing" +423 IRC_ERR_NOADMININFO "%s :No administrative info available" +431 IRC_ERR_NONICKNAMEGIVEN ":No nickname given" +432 IRC_ERR_ERRONEOUSNICKNAME "%s :Erroneous nickname" +433 IRC_ERR_NICKNAMEINUSE "%s :Nickname is already in use" +441 IRC_ERR_USERNOTINCHANNEL "%s %s :They aren't on that channel" +442 IRC_ERR_NOTONCHANNEL "%s :You're not on that channel" +445 IRC_ERR_SUMMONDISABLED ":SUMMON has been disabled" +446 IRC_ERR_USERSDISABLED ":USERS has been disabled" +451 IRC_ERR_NOTREGISTERED ":You have not registered" +461 IRC_ERR_NEEDMOREPARAMS "%s :Not enough parameters" +462 IRC_ERR_ALREADYREGISTERED ":Unauthorized command (already registered)" +467 IRC_ERR_KEYSET "%s :Channel key already set" +471 IRC_ERR_CHANNELISFULL "%s :Cannot join channel (+l)" +472 IRC_ERR_UNKNOWNMODE "%c :is unknown mode char to me for %s" +473 IRC_ERR_INVITEONLYCHAN "%s :Cannot join channel (+i)" +474 IRC_ERR_BANNEDFROMCHAN "%s :Cannot join channel (+b)" +475 IRC_ERR_BADCHANNELKEY "%s :Cannot join channel (+k)" +476 IRC_ERR_BADCHANMASK "%s :Bad Channel Mask" +481 IRC_ERR_NOPRIVILEGES ":Permission Denied- You're not an IRC operator" +482 IRC_ERR_CHANOPRIVSNEEDED "%s :You're not channel operator" +501 IRC_ERR_UMODEUNKNOWNFLAG ":Unknown MODE flag" +502 IRC_ERR_USERSDONTMATCH ":Cannot change mode for other users" diff --git a/kike.c b/kike.c index f3c4f17..c390715 100644 --- a/kike.c +++ b/kike.c @@ -22,6 +22,7 @@ #define PROGRAM_VERSION "alpha" #include "common.c" +#include "kike-replies.c" #include // --- Configuration (application-specific) ------------------------------------ @@ -861,166 +862,6 @@ client_set_ping_timer (struct client *c) // --- IRC command handling ---------------------------------------------------- -enum -{ - IRC_RPL_WELCOME = 1, - IRC_RPL_YOURHOST = 2, - IRC_RPL_CREATED = 3, - IRC_RPL_MYINFO = 4, - - IRC_RPL_UMODEIS = 221, - IRC_RPL_LUSERCLIENT = 251, - IRC_RPL_LUSEROP = 252, - IRC_RPL_LUSERUNKNOWN = 253, - IRC_RPL_LUSERCHANNELS = 254, - IRC_RPL_LUSERME = 255, - - IRC_RPL_AWAY = 301, - IRC_RPL_USERHOST = 302, - IRC_RPL_ISON = 303, - IRC_RPL_UNAWAY = 305, - IRC_RPL_NOWAWAY = 306, - IRC_RPL_WHOISUSER = 311, - IRC_RPL_WHOISSERVER = 312, - IRC_RPL_WHOISOPERATOR = 313, - IRC_RPL_ENDOFWHO = 315, - IRC_RPL_WHOISIDLE = 317, - IRC_RPL_ENDOFWHOIS = 318, - IRC_RPL_WHOISCHANNELS = 319, - IRC_RPL_LIST = 322, - IRC_RPL_LISTEND = 323, - IRC_RPL_CHANNELMODEIS = 324, - IRC_RPL_NOTOPIC = 331, - IRC_RPL_TOPIC = 332, - IRC_RPL_INVITELIST = 346, - IRC_RPL_ENDOFINVITELIST = 347, - IRC_RPL_EXCEPTLIST = 348, - IRC_RPL_ENDOFEXCEPTLIST = 349, - IRC_RPL_VERSION = 351, - IRC_RPL_WHOREPLY = 352, - IRC_RPL_NAMREPLY = 353, - IRC_RPL_ENDOFNAMES = 366, - IRC_RPL_BANLIST = 367, - IRC_RPL_ENDOFBANLIST = 368, - IRC_RPL_MOTD = 372, - IRC_RPL_MOTDSTART = 375, - IRC_RPL_ENDOFMOTD = 376, - IRC_RPL_TIME = 391, - - IRC_ERR_NOSUCHNICK = 401, - IRC_ERR_NOSUCHSERVER = 402, - IRC_ERR_NOSUCHCHANNEL = 403, - IRC_ERR_CANNOTSENDTOCHAN = 404, - IRC_ERR_NOORIGIN = 409, - IRC_ERR_NORECIPIENT = 411, - IRC_ERR_NOTEXTTOSEND = 412, - IRC_ERR_UNKNOWNCOMMAND = 421, - IRC_ERR_NOMOTD = 422, - IRC_ERR_NOADMININFO = 423, - IRC_ERR_NONICKNAMEGIVEN = 431, - IRC_ERR_ERRONEOUSNICKNAME = 432, - IRC_ERR_NICKNAMEINUSE = 433, - IRC_ERR_USERNOTINCHANNEL = 441, - IRC_ERR_NOTONCHANNEL = 442, - IRC_ERR_SUMMONDISABLED = 445, - IRC_ERR_USERSDISABLED = 446, - IRC_ERR_NOTREGISTERED = 451, - IRC_ERR_NEEDMOREPARAMS = 461, - IRC_ERR_ALREADYREGISTERED = 462, - IRC_ERR_KEYSET = 467, - IRC_ERR_CHANNELISFULL = 471, - IRC_ERR_UNKNOWNMODE = 472, - IRC_ERR_INVITEONLYCHAN = 473, - IRC_ERR_BANNEDFROMCHAN = 474, - IRC_ERR_BADCHANNELKEY = 475, - IRC_ERR_BADCHANMASK = 476, - IRC_ERR_NOPRIVILEGES = 481, - IRC_ERR_CHANOPRIVSNEEDED = 482, - - IRC_ERR_UMODEUNKNOWNFLAG = 501, - IRC_ERR_USERSDONTMATCH = 502 -}; - -static const char *g_default_replies[] = -{ - [IRC_RPL_WELCOME] = ":Welcome to the Internet Relay Network %s!%s@%s", - [IRC_RPL_YOURHOST] = ":Your host is %s, running version %s", - [IRC_RPL_CREATED] = ":This server was created %s", - [IRC_RPL_MYINFO] = "%s %s %s %s", - - [IRC_RPL_UMODEIS] = "+%s", - [IRC_RPL_LUSERCLIENT] = ":There are %d users and %d services on %d servers", - [IRC_RPL_LUSEROP] = "%d :operator(s) online", - [IRC_RPL_LUSERUNKNOWN] = "%d :unknown connection(s)", - [IRC_RPL_LUSERCHANNELS] = "%d :channels formed", - [IRC_RPL_LUSERME] = ":I have %d clients and %d servers", - - [IRC_RPL_AWAY] = "%s :%s", - [IRC_RPL_USERHOST] = ":%s", - [IRC_RPL_ISON] = ":%s", - [IRC_RPL_UNAWAY] = ":You are no longer marked as being away", - [IRC_RPL_NOWAWAY] = ":You have been marked as being away", - [IRC_RPL_WHOISUSER] = "%s %s %s * :%s", - [IRC_RPL_WHOISSERVER] = "%s %s :%s", - [IRC_RPL_WHOISOPERATOR] = "%s :is an IRC operator", - [IRC_RPL_ENDOFWHO] = "%s :End of WHO list", - [IRC_RPL_WHOISIDLE] = "%s %d :seconds idle", - [IRC_RPL_ENDOFWHOIS] = "%s :End of WHOIS list", - [IRC_RPL_WHOISCHANNELS] = "%s :%s", - [IRC_RPL_LIST] = "%s %d :%s", - [IRC_RPL_LISTEND] = ":End of LIST", - [IRC_RPL_CHANNELMODEIS] = "%s +%s", - [IRC_RPL_NOTOPIC] = "%s :No topic is set", - [IRC_RPL_TOPIC] = "%s :%s", - [IRC_RPL_INVITELIST] = "%s %s", - [IRC_RPL_ENDOFINVITELIST] = "%s :End of channel invite list", - [IRC_RPL_EXCEPTLIST] = "%s %s", - [IRC_RPL_ENDOFEXCEPTLIST] = "%s :End of channel exception list", - [IRC_RPL_VERSION] = "%s.%d %s :%s", - [IRC_RPL_WHOREPLY] = "%s %s %s %s %s %s :%d %s", - [IRC_RPL_NAMREPLY] = "%c %s :%s", - [IRC_RPL_ENDOFNAMES] = "%s :End of NAMES list", - [IRC_RPL_BANLIST] = "%s %s", - [IRC_RPL_ENDOFBANLIST] = "%s :End of channel ban list", - [IRC_RPL_MOTD] = ":- %s", - [IRC_RPL_MOTDSTART] = ":- %s Message of the day - ", - [IRC_RPL_ENDOFMOTD] = ":End of MOTD command", - [IRC_RPL_TIME] = "%s :%s", - - [IRC_ERR_NOSUCHNICK] = "%s :No such nick/channel", - [IRC_ERR_NOSUCHSERVER] = "%s :No such server", - [IRC_ERR_NOSUCHCHANNEL] = "%s :No such channel", - [IRC_ERR_CANNOTSENDTOCHAN] = "%s :Cannot send to channel", - [IRC_ERR_NOORIGIN] = ":No origin specified", - [IRC_ERR_NORECIPIENT] = ":No recipient given (%s)", - [IRC_ERR_NOTEXTTOSEND] = ":No text to send", - [IRC_ERR_UNKNOWNCOMMAND] = "%s: Unknown command", - [IRC_ERR_NOMOTD] = ":MOTD File is missing", - [IRC_ERR_NOADMININFO] = "%s :No administrative info available", - [IRC_ERR_NONICKNAMEGIVEN] = ":No nickname given", - [IRC_ERR_ERRONEOUSNICKNAME] = "%s :Erroneous nickname", - [IRC_ERR_NICKNAMEINUSE] = "%s :Nickname is already in use", - [IRC_ERR_USERNOTINCHANNEL] = "%s %s :They aren't on that channel", - [IRC_ERR_NOTONCHANNEL] = "%s :You're not on that channel", - [IRC_ERR_SUMMONDISABLED] = ":SUMMON has been disabled", - [IRC_ERR_USERSDISABLED] = ":USERS has been disabled", - [IRC_ERR_NOTREGISTERED] = ":You have not registered", - [IRC_ERR_NEEDMOREPARAMS] = "%s :Not enough parameters", - [IRC_ERR_ALREADYREGISTERED] = ":Unauthorized command (already registered)", - [IRC_ERR_KEYSET] = "%s :Channel key already set", - [IRC_ERR_CHANNELISFULL] = "%s :Cannot join channel (+l)", - [IRC_ERR_UNKNOWNMODE] = "%c :is unknown mode char to me for %s", - [IRC_ERR_INVITEONLYCHAN] = "%s :Cannot join channel (+i)", - [IRC_ERR_BANNEDFROMCHAN] = "%s :Cannot join channel (+b)", - [IRC_ERR_BADCHANNELKEY] = "%s :Cannot join channel (+k)", - [IRC_ERR_BADCHANMASK] = "%s :Bad Channel Mask", - [IRC_ERR_NOPRIVILEGES] = ":Permission Denied- You're not an IRC operator", - [IRC_ERR_CHANOPRIVSNEEDED] = "%s :You're not channel operator", - - [IRC_ERR_UMODEUNKNOWNFLAG] = ":Unknown MODE flag", - [IRC_ERR_USERSDONTMATCH] = ":Cannot change mode for other users", -}; - // XXX: this way we cannot typecheck the arguments, so we must be careful static void irc_send_reply (struct client *c, int id, ...)