+/* irssistats */
+#define VERSION "0.44"
+#define URL "http://royale.zerezo.com/irssistats/"
+
+/* Counters */
+#define D_SMILE 0
+#define D_FROWN 1
+#define D_EXCLAM 2
+#define D_QUESTION 3
+#define D_ME 4
+#define D_TOPIC 5
+#define D_MODE 6
+#define D_KICK 7
+#define D_KICKED 8
+#define D_URL 9
+#define D_JOIN 10
+#define D_NICK 11
+#define D_MONOLOGUE 12
+#define NBCOUNTERS 13
+char *counters[NBCOUNTERS]={"C_SMILE","C_FROWN","C_EXCLAM","C_QUESTION","C_ME","C_TOPIC","C_MODE","C_KICK","C_KICKED","C_URL","C_JOIN","C_NICK","C_MONOLOGUE"};
+
+/* Languages */
+#define NBLANGUAGES 6
+#define NBKEYS 38
+char *keys[NBLANGUAGES][NBKEYS+1][2]= /* first key used for language name and abbreviation */
+{
+ { /* English language */
+ { "English", "en" },
+ { "HEADER", "Statistics for %s by %s" },
+ { "LEGEND", "Legend" },
+ { "LASTDAYS", "Lastdays statistics" },
+ { "TOPHOURS", "Hourly statistics" },
+ { "TOPUSERS", "Most active people" },
+ { "OTHERS", "There are %d left not ranked..." },
+ { "NBLINES", "lines" },
+ { "NICK", "nick" },
+ { "AVGLETTERS", "letters/lines" },
+ { "HOURS", "hours" },
+ { "QUOTE", "random message" },
+ { "TOPUSERSTIME", "Most active people by time of day" },
+ { "RANDTOPICS", "Some topics" },
+ { "CHANGEDBY", "changed by" },
+ { "NEWTOPIC", "new topic" },
+ { "RANDURLS", "Some URLs" },
+ { "POSTEDBY", "posted by" },
+ { "POSTEDURL", "URL" },
+ { "TOPWORDS", "Most used words" },
+ { "WORD", "word" },
+ { "OCCURRENCES", "occurrences" },
+ { "BIGNUMBERS", "Some big numbers..." },
+ { "NUMBERS", "numbers" },
+ { "TIME", "%d lines (%d days) parsed in %d seconds" },
+ { "FOOTER", "Statistics generated by" },
+ { "C_SMILE", "is often happy :)" },
+ { "C_FROWN", "is often sad :(" },
+ { "C_EXCLAM", "yells a lot !" },
+ { "C_QUESTION", "asks a lot of questions ?" },
+ { "C_ME", "likes /me command" },
+ { "C_TOPIC", "often changes the topic" },
+ { "C_MODE", "often changes the modes" },
+ { "C_KICK", "likes to /kick" },
+ { "C_KICKED", "is often kicked" },
+ { "C_URL", "posts many URLs" },
+ { "C_JOIN", "doesn't know wether to stay or quit" },
+ { "C_NICK", "often changes his nick" },
+ { "C_MONOLOGUE", "speaks a lot of monologues" }
+ },
+ { /* French language */
+ { "French", "fr" },
+ { "HEADER", "Statistiques de %s par %s" },
+ { "LEGEND", "Légende" },
+ { "LASTDAYS", "Statistiques des derniers jours" },
+ { "TOPHOURS", "Statistiques horaires" },
+ { "TOPUSERS", "Personnes les plus actives" },
+ { "OTHERS", "Il reste %d personnes non classées..." },
+ { "NBLINES", "lignes" },
+ { "NICK", "nick" },
+ { "AVGLETTERS", "lettres/lignes" },
+ { "HOURS", "heures" },
+ { "QUOTE", "message aléatoire" },
+ { "TOPUSERSTIME", "Personnes les plus actives par période de la journée" },
+ { "RANDTOPICS", "Quelques topics" },
+ { "CHANGEDBY", "changé par" },
+ { "NEWTOPIC", "nouveau topic" },
+ { "RANDURLS", "Quelques URLs" },
+ { "POSTEDBY", "postée par" },
+ { "POSTEDURL", "URL" },
+ { "TOPWORDS", "Mots les plus utilisés" },
+ { "WORD", "mot" },
+ { "OCCURRENCES", "occurrences" },
+ { "BIGNUMBERS", "Quelques grands nombres..." },
+ { "NUMBERS", "nombres" },
+ { "TIME", "%d lignes (%d jours) traitées en %d secondes" },
+ { "FOOTER", "Statistiques générées par" },
+ { "C_SMILE", "est souvent heureux :)" },
+ { "C_FROWN", "est souvent triste :(" },
+ { "C_EXCLAM", "hurle beaucoup !" },
+ { "C_QUESTION", "pose beaucoup de questions ?" },
+ { "C_ME", "aime la commande /me" },
+ { "C_TOPIC", "change souvent le topic" },
+ { "C_MODE", "change souvent les modes" },
+ { "C_KICK", "aime la commande /kick" },
+ { "C_KICKED", "est souvent kické" },
+ { "C_URL", "poste beaucoup d'URLs" },
+ { "C_JOIN", "ne sait pas s'il doit rester ou partir" },
+ { "C_NICK", "change souvent de nick" },
+ { "C_MONOLOGUE", "parle beaucoup de monologues" }
+ },
+ { /* German language */
+ /* contributed by Valentin Gelhorn <valentin.gelhorn@web.de> */
+ { "German", "de" },
+ { "HEADER", "Statistiken für %s von %s" },
+ { "LEGEND", "Legende" },
+ { "LASTDAYS", "Statistik der letzten Tage" },
+ { "TOPHOURS", "Stündliche Statistik" },
+ { "TOPUSERS", "Die aktivsten Personen" },
+ { "OTHERS", "Es bleiben noch %d uneingetragene" },
+ { "NBLINES", "Zeilen" },
+ { "NICK", "Nick" },
+ { "AVGLETTERS", "Buchstaben/Zeile" },
+ { "HOURS", "Stunden" },
+ { "QUOTE", "Zufällig ausgewaehlte Zitate" },
+ { "TOPUSERSTIME", "Die aktivsten Personen zur bestimmten Tageszeit" },
+ { "RANDTOPICS", "Ein paar Topics" },
+ { "CHANGEDBY", "Gesetzt von" },
+ { "NEWTOPIC", "Neues topic" },
+ { "RANDURLS", "Ein paar URLs" },
+ { "POSTEDBY", "Geschrieben von" },
+ { "POSTEDURL", "URL" },
+ { "TOPWORDS", "Am häufigsten benutze Wörter" },
+ { "WORD", "Wort" },
+ { "OCCURRENCES", "Vorkommen" },
+ { "BIGNUMBERS", "Ein paar grosse Zahlen" },
+ { "NUMBERS", "Zahlen" },
+ { "TIME", "%d Zeilen (%d Tage) analysiert in %d Sekunden" },
+ { "FOOTER", "Statistiken wurden erstellt von" },
+ { "C_SMILE", "ist oft glüklich :)" },
+ { "C_FROWN", "ist oft traurig :(" },
+ { "C_EXCLAM", "schreit oft !" },
+ { "C_QUESTION", "stellt viele Fragen ?" },
+ { "C_ME", "mag /me'en" },
+ { "C_TOPIC", "aendert oft das Topico" },
+ { "C_MODE", "aendert oft die Modes" },
+ { "C_KICK", "mag /kick'en" },
+ { "C_KICKED", "wird oft gekickt"},
+ { "C_URL", "schreibt viele URLs"},
+ { "C_JOIN", "kann sich nicht entscheiden ob er bleiben oder gehen soll" },
+ { "C_NICK", "ändert oft seinen Nick" },
+ { "C_MONOLOGUE", "spricht oft Monologe" }
+ },
+ { /* Spanish language */
+ /* contributed by Alex <ainaker@gmx.net> */
+ { "Spanish", "es" },
+ { "HEADER", "Estadísticas de %s por %s" },
+ { "LEGEND", "Leyenda" },
+ { "LASTDAYS", "Estadísticas de los últimos días" },
+ { "TOPHOURS", "Estadísticas por horas" },
+ { "TOPUSERS", "Los que más escriben" },
+ { "OTHERS", "Hay %d más que no llegaron..." },
+ { "NBLINES", "líneas" },
+ { "NICK", "nick" },
+ { "AVGLETTERS", "letras por línea" },
+ { "HOURS", "horas" },
+ { "QUOTE", "Frase aleatoria" },
+ { "TOPUSERSTIME", "Los que más escriben según la hora" },
+ { "RANDTOPICS", "Algunos topics" },
+ { "CHANGEDBY", "Puestos por" },
+ { "NEWTOPIC", "topic" },
+ { "RANDURLS", "Algunas URLs" },
+ { "POSTEDBY", "puestas por" },
+ { "POSTEDURL", "URL" },
+ { "TOPWORDS", "Palabras más usadas" },
+ { "WORD", "Palabra" },
+ { "OCCURRENCES", "Frecuencia" },
+ { "BIGNUMBERS", "Algunos datos..." },
+ { "NUMBERS", "Número de veces" },
+ { "TIME", "%d lineas (%d días) procesadas en %d segundos" },
+ { "FOOTER", "Estadísticas generadas por" },
+ { "C_SMILE", "Suele estar felíz :)" },
+ { "C_FROWN", "Suele estar triste :(" },
+ { "C_EXCLAM", "Grita mucho !" },
+ { "C_QUESTION", "Hace muchas preguntas ?" },
+ { "C_ME", "Abusa del comando /me" },
+ { "C_TOPIC", "Suele cambiar el topic" },
+ { "C_MODE", "Cambia a veces los modos del canal" },
+ { "C_KICK", "Le gusta patear" },
+ { "C_KICKED", "Es pateado con frecuencia" },
+ { "C_URL", "Pone muchas URLs" },
+ { "C_JOIN", "No sabe si irse o quedarse" },
+ { "C_NICK", "Cambia mucho de nick" },
+ { "C_MONOLOGUE", "Habla solo" }
+ },
+ { /* Polish language */
+ /* contributed by Piotr Jarmuz <coreupper@yahoo.com> */
+ { "Polish", "pl" },
+ { "HEADER", "Statystyki dla %s przez %s" },
+ { "LEGEND", "Legenda" },
+ { "LASTDAYS", "Statystyki z ostatnich dni" },
+ { "TOPHOURS", "Statystyki godzinne" },
+ { "TOPUSERS", "Najaktywniejsi ludzie" },
+ { "OTHERS", "Zostalo jeszcze %d nie sklasyfikowanych..." },
+ { "NBLINES", "linie" },
+ { "NICK", "nick" },
+ { "AVGLETTERS", "litery/linie" },
+ { "HOURS", "godziny" },
+ { "QUOTE", "przypadkowa wiadomosc" },
+ { "TOPUSERSTIME", "Najaktywniejsi ludzie wedlug czasu dnia" },
+ { "RANDTOPICS", "Pare tematow" },
+ { "CHANGEDBY", "zmienione przez" },
+ { "NEWTOPIC", "nowy temat" },
+ { "RANDURLS", "Pare URL-i" },
+ { "POSTEDBY", "wyslane przez" },
+ { "POSTEDURL", "URL" },
+ { "TOPWORDS", "Najczestsze slowa" },
+ { "WORD", "slowo" },
+ { "OCCURRENCES", "wystapienia" },
+ { "BIGNUMBERS", "Pare wielkich liczb..." },
+ { "NUMBERS", "liczby" },
+ { "TIME", "%d linii (%d dni) sparsowanych w %d sekund" },
+ { "FOOTER", "Statystyki wygenerowane przez" },
+ { "C_SMILE", "jest czesto szczesliwy :)" },
+ { "C_FROWN", "jest czesto smutny :(" },
+ { "C_EXCLAM", "duzo krzyczy !" },
+ { "C_QUESTION", "zadaje duzo pytan ?" },
+ { "C_ME", "lubi /mnie polecenie" },
+ { "C_TOPIC", "czesto zmienia temat" },
+ { "C_MODE", "czesto zmienia tryb" },
+ { "C_KICK", "lubi /kopac" },
+ { "C_KICKED", "czesto go wykopuja" },
+ { "C_URL", "wysyla duzo URL-i" },
+ { "C_JOIN", "nie wie czy zostac czy wyjsc" },
+ { "C_NICK", "czesto zmienia swojego nicka" },
+ { "C_MONOLOGUE", "czesto mowi monologiem" }
+ },
+ { /* Finnish language */
+ /* contributed by Antti Huopana <ahuopana@ratol.fi> */
+ { "Finnish", "fi" },
+ { "HEADER", "Kanavan %s tilastot - %s" },
+ { "LEGEND", "Merkkien selitykset" },
+ { "LASTDAYS", "Viime päivien tilastot" },
+ { "TOPHOURS", "Tilastot tunneittain" },
+ { "TOPUSERS", "Aktiivisimmat ihmiset" },
+ { "OTHERS", "Jäljelle jäi %d joita ei listattu..." },
+ { "NBLINES", "rivit" },
+ { "NICK", "nikki" },
+ { "AVGLETTERS", "kirjainta/rivi" },
+ { "HOURS", "tunnit" },
+ { "QUOTE", "satunnainen viesti" },
+ { "TOPUSERSTIME", "Vuorokauden ajan mukaan aktiivisimmat" },
+ { "RANDTOPICS", "Joitakin aiheita" },
+ { "CHANGEDBY", "vaihtaja" },
+ { "NEWTOPIC", "aihe" },
+ { "RANDURLS", "Joitakin URLeja" },
+ { "POSTEDBY", "lähettäjä" },
+ { "POSTEDURL", "URL" },
+ { "TOPWORDS", "Eniten käytettyjä sanoja" },
+ { "WORD", "sana" },
+ { "OCCURRENCES", "käytetty" },
+ { "BIGNUMBERS", "Joitakin isoja lukuja..." },
+ { "NUMBERS", "luvut" },
+ { "TIME", "%d riviä (%d päivää) parsittu %d sekunnissa" },
+ { "FOOTER", "Tilastot on generoinut" },
+ { "C_SMILE", "on usein iloinen :)" },
+ { "C_FROWN", "on usein surullinen :(" },
+ { "C_EXCLAM", "möykkää paljon !" },
+ { "C_QUESTION", "kyselee liikaa ?" },
+ { "C_ME", "pitää itsestään" },
+ { "C_TOPIC", "vaihtaa usein aihetta" },
+ { "C_MODE", "haluaa elää muuttuvassa maailmassa" },
+ { "C_KICK", "pitää potkimisesta" },
+ { "C_KICKED", "tykkää tulla potkituksi" },
+ { "C_URL", "surffailee liikaa" },
+ { "C_JOIN", "ei tiedä ollakko vai eikö olla" },
+ { "C_NICK", "kärsii identiteettiongelmista" },
+ { "C_MONOLOGUE", "höpöttää paljon itsekseen" }
+ }
+};
+
+int language;
+
+char *L(char *key)
+{
+ int i;
+ for (i=1;i<=NBKEYS;i++) if (strcmp(key,keys[language][i][0])==0) return(keys[language][i][1]);
+ fprintf(stderr,"unknown language key: %s\n",key);
+ return("");
+}
+
+/* Themes */
+#define NBTHEMES 6
+#define NBCOLORS 9
+char *colors[NBTHEMES][NBCOLORS+1][2]= /* first key used for theme name/description and abbreviation */
+{
+ { /* Default theme */
+ { "White background", "default" },
+ { "BGCOLOR", "#FFFFFF" },
+ { "TEXT", "#000000" },
+ { "LINK", "#0000EE" },
+ { "VLINK", "#551A8B" },
+ { "ALINK", "#FF0000" },
+ { "TITLE1", "#000000" },
+ { "TITLE2", "#000000" },
+ { "BGTABLE", "#EEEEEE" },
+ { "BGTITLE", "#FFEEEE" }
+ },
+ { /* Dark theme */
+ { "Black background", "dark" },
+ { "BGCOLOR", "#000000" },
+ { "TEXT", "#FFFFFF" },
+ { "LINK", "#AAAAFF" },
+ { "VLINK", "#CCCCDD" },
+ { "ALINK", "#FFAAAA" },
+ { "TITLE1", "#AAAAFF" },
+ { "TITLE2", "#FFAAAA" },
+ { "BGTABLE", "#225522" },
+ { "BGTITLE", "#552222" }
+ },
+ { /* zeRezo theme */
+ { "Green theme...", "zerezo" },
+ { "BGCOLOR", "#000000" },
+ { "TEXT", "#FFFFFF" },
+ { "LINK", "#14F024" },
+ { "VLINK", "#0CBA18" },
+ { "ALINK", "#FFFFFF" },
+ { "TITLE1", "#0CBA18" },
+ { "TITLE2", "#84DB8C" },
+ { "BGTABLE", "#085D10" },
+ { "BGTITLE", "#0B810B" }
+ },
+ { /* tit-namour theme */
+ { "Purple and Pink", "namour" },
+ { "BGCOLOR", "#9933CC" },
+ { "TEXT", "#DDAAFF" },
+ { "LINK", "#CC99FF" },
+ { "VLINK", "#999999" },
+ { "ALINK", "#FFC8C8" },
+ { "TITLE1", "#FFC8C8" },
+ { "TITLE2", "#FFC8C8" },
+ { "BGTABLE", "#7711AA" },
+ { "BGTITLE", "#550088" }
+ },
+ { /* zeDuel theme */
+ { "Orange theme...", "zeduel" },
+ { "BGCOLOR", "#FFFFFF" },
+ { "TEXT", "#000000" },
+ { "LINK", "#FF7700" },
+ { "VLINK", "#C05A00" },
+ { "ALINK", "#FF9A41" },
+ { "TITLE1", "#C05A00" },
+ { "TITLE2", "#FF7700" },
+ { "BGTABLE", "#FFEEEE" },
+ { "BGTITLE", "#FF7700" }
+ },
+ { /* Blue theme */
+ { "Blue theme...", "blue" },
+ { "BGCOLOR", "#FFFFFF" },
+ { "TEXT", "#000000" },
+ { "LINK", "#4444FF" },
+ { "VLINK", "#8888FF" },
+ { "ALINK", "#CCCCFF" },
+ { "TITLE1", "#8888FF" },
+ { "TITLE2", "#AAAAFF" },
+ { "BGTABLE", "#EEEEFF" },
+ { "BGTITLE", "#CCCCFF" }
+ }
+};
+
+int theme;
+
+char *T(char *color)
+{
+ int i;
+ for (i=1;i<=NBCOLORS;i++) if (strcmp(color,colors[theme][i][0])==0) return(colors[theme][i][1]);
+ fprintf(stderr,"unknown theme color: %s\n",color);
+ return("");
+}
+
+/* Variables */
+
+char *channel;
+char *maintainer;
+
+struct