Change log file for irssistats
+version 0.70 (2005-06-01)
+ * Makefile was improved to easily build packages
+ * Windows binaries are now available
+ * patch to make parsing more robust and dutch translation updated (thank you Wouter Horré)
+ * added an option to display pictures for the users
+ * added the irssistats logo with an option to hide it
+ * expand the "~" character in configuration file to the home directory
+ * added 3 themes : biseau, damier and niflheim
+ * gcc optimization to speed up irssistats
+
version 0.62 (2004-05-03)
* estonian support (thank you Martin Vool)
+VER = 0.70
PRE = /usr/local
BIN = $(PRE)/bin
DAT = $(PRE)/share/irssistats/data
MAN = $(PRE)/share/man/man1
irssistats:irssistats.c
- gcc -o irssistats irssistats.c
+ gcc -O2 -o irssistats irssistats.c
clean:
- rm -f irssistats
+ rm -f irssistats irssistats.exe
+ rm -f build-stamp configure-stamp debian/irssistats.substvars debian/files
+ rm -rf debian/irssistats rpm/BUILD rpm/SPECS rpm/SOURCES rpm/SRPMS rpm/RPMS
install:irssistats
mkdir -p $(BIN) $(DAT) $(DOC) $(MAN)
rm -f $(BIN)/irssistats
rm -rf $(DAT) $(DOC)
rm -f $(MAN)/irssistats.1
+
+tar: clean
+ cd .. && tar zcvf irssistats-$(VER).tar.gz irssistats-$(VER)
+
+rpm: tar
+ mkdir -p rpm/BUILD rpm/SPECS rpm/SOURCES rpm/SRPMS rpm/RPMS
+ rpm -ta ../irssistats-$(VER).tar.gz --define "_topdir `pwd`/rpm"
+ cp rpm/*/*.rpm rpm/*/*/*.rpm ..
+
+deb: clean
+ dpkg-buildpackage -us -uc -rfakeroot
+
+win: irssistats.c
+ i586-mingw32msvc-gcc -O2 -o irssistats.exe irssistats.c
+ cd .. && zip -r irssistats-$(VER).zip irssistats-$(VER)/{irssistats.exe,README,CHANGELOG,COPYING,irssistats.sgml,sample.configfile,sample.nickfile,data}
+
+dist: tar rpm deb win
\ No newline at end of file
-irssistats 0.62
+irssistats 0.70
site: http://royale.zerezo.com/irssistats/
mail: royale@zerezo.com
The <NULL> final nick will remove matching nicks from all statistics, except from "Some URLs" and "Some topics"...
You can also take a look at the "sample.nickfile" in this package.
+photofile:
+Since version 0.70 of irssistats, you can use a photofile to display pictures for users.
+Each line of the photofile contains the final nick and an URL for the image.
+Examples :
+ royale http://royale.zerezo.com/chat/faces/happy40.png (a full address)
+ sektor ../chat/faces/happy40.png (a relative address)
+
links:
-http://torus.lnet.lut.fi/ircstats/
+http://tnsp.org/fisg.php
http://pisg.sourceforge.net/
-http://users.pandora.be/becquart/cisg/
http://netti.nic.fi/~mauvinen/mircstats/
--- /dev/null
+/* "biseau" theme from Pronostiks.com */
+
+body {
+ background: #ddddee;
+ text-align: center;
+}
+
+#irssistats * {
+ font-family: tahoma;
+ font-size: 9pt;
+}
+
+#irssistats {
+ width: 89%;
+ margin: auto;
+}
+
+#irssistats h1, #irssistats h2 {
+ font-weight: bold;
+ padding-left: 5px;
+ margin: 0;
+}
+
+#irssistats h1 {
+ color: #6b78a4;
+ font-size: 18pt;
+}
+
+#irssistats h2 {
+ color: #ffffff;
+ font-size: 10pt;
+ height: 18px;
+ background: #6b78a4 url('biseau_corner1.gif');
+ background-repeat: no-repeat;
+ background-position: top right;
+ padding-right: 8px;
+}
+
+#irssistats_legend td {
+ text-align: left;
+}
+
+#irssistats_legend, #irssistats_lastdays, #irssistats_tophours, #irssistats_topusers, #irssistats_topuserstime, #irssistats_randtopics, #irssistats_randurls, #irssistats_topwords, #irssistats_bignumbers {
+ background: #ffffff;
+ margin: 10px;
+ text-align: center;
+ border-bottom: 2px #6b78a4 solid;
+}
+
+#irssistats table {
+ width: 100%;
+ border-left: 6px #6b78a4 double;
+ border-right: 2px #6b78a4 solid;
+ margin: 0;
+ padding: 15px;
+}
+
+#irssistats_topusers td, #irssistats_topuserstime td, #irssistats_randtopics td, #irssistats_randurls td, #irssistats_topwords td, #irssistats_bignumbers td {
+ border: 1px #6b78a4 solid;
+ text-align: center;
+}
+
+#irssistats th {
+ height: 18px;
+ background: #ddddee url('biseau_corner4.gif');
+ background-repeat: no-repeat;
+ background-position: top right;
+ padding-right: 8px;
+ border: 0;
+}
+
+#irssistats_legend p, #irssistats_lastdays p, #irssistats_tophours p, #irssistats_topusers p, #irssistats_topuserstime p, #irssistats_randtopics p, #irssistats_randurls p, #irssistats_topwords p, #irssistats_bignumbers p {
+ border-left: 6px #6b78a4 double;
+ border-right: 2px #6b78a4 solid;
+ margin: 0;
+ padding: 15px;
+}
+
+#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 0;
+}
+
+#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 0;
+}
+
+#irssistats div.h1, #irssistats div.v1 {
+ background: #6b78a4;
+}
+
+#irssistats div.h2, #irssistats div.v2 {
+ background: #8899cc;
+}
+
+#irssistats div.h3, #irssistats div.v3 {
+ background: #aabbdd;
+}
+
+#irssistats div.h4, #irssistats div.v4 {
+ background: #ddddee;
+}
+
+#irssistats div.hm, #irssistats div.vm {
+ background: #888888 url('biseau_corner4.gif');
+ background-repeat: no-repeat;
+ background-position: top right;
+}
+
+#irssistats A {
+ color: #5a658a;
+ text-decoration: none;
+}
+
+#irssistats A:hover {
+ text-decoration: underline;
+}
+
+#irssistats img {
+ border: 0;
+}
+
+#irssistats small {
+ font-size: 7pt;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
+}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #000000;
- margin: 0;
+ margin: 0;
}
#irssistats A {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
color: #8888FF;
}
#irssistats h2 {
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
color: #AAAAFF;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
background: #CCCCFF;
}
#irssistats td {
- font-size: 9pt;
+ font-size: 9pt;
background: #EEEEFF;
}
}
#irssistats small {
- font-size: 7pt;
+ font-size: 7pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('h1.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('h2.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('h3.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('h4.png');
}
#irssistats div.hm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('hm.png');
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('v1.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('v2.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('v3.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('v4.png');
}
#irssistats div.vm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('vm.png');
+}
+
+#irssistats div.logo {
+ background: url('irssistats_white.png');
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ padding: 0;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
--- /dev/null
+/* "damier" theme from Pronostiks.com */
+
+body {
+ background: url('damier_background.gif');
+ text-align: center;
+}
+
+#irssistats * {
+ font-family: verdana;
+ font-size: 9pt;
+}
+
+#irssistats {
+ width: 860px;
+ margin: auto;
+}
+
+#irssistats h1 {
+ font-size: 20pt;
+}
+
+#irssistats h2 {
+ font-weight: bold;
+ background: url('damier_title.png');
+ background-repeat: no-repeat;
+ border-bottom: 1px black solid;
+ padding-left: 5px;
+ margin: 0;
+}
+
+#irssistats_legend td {
+ text-align: left;
+}
+
+#irssistats_legend, #irssistats_lastdays, #irssistats_tophours, #irssistats_topusers, #irssistats_topuserstime, #irssistats_randtopics, #irssistats_randurls, #irssistats_topwords, #irssistats_bignumbers {
+ background: #ffffff;
+ border: 1px black solid;
+ -moz-border-radius-topright: 20px;
+ -moz-border-radius-bottomleft: 20px;
+ -moz-border-radius-bottomright: 20px;
+ margin-bottom: 20px;
+}
+
+#irssistats A {
+ color: #a35800;
+ text-decoration: none;
+}
+
+#irssistats A:hover {
+ text-decoration: underline;
+}
+
+.box_content {
+ padding: 10px;
+ text-align: center;
+}
+
+#irssistats table {
+ width: 800px;
+ margin: auto;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+#irssistats_topusers td, #irssistats_topuserstime td, #irssistats_randtopics td, #irssistats_randurls td, #irssistats_topwords td, #irssistats_bignumbers td {
+ border: 1px #aaaaaa solid;
+ text-align: center;
+ -moz-border-radius: 4px;
+}
+
+#irssistats th {
+ border: 1px black solid;
+ background: url('damier_title.png');
+ background-repeat: no-repeat;
+}
+
+#irssistats img {
+ border: 0;
+}
+
+#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 0;
+}
+
+#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 0;
+}
+
+#irssistats div.h1, #irssistats div.v1 {
+ background: #fbc282;
+}
+
+#irssistats div.h2, #irssistats div.v2 {
+ background: #fbcf9b;
+}
+
+#irssistats div.h3, #irssistats div.v3 {
+ background: #fddbb3;
+}
+
+#irssistats div.h4, #irssistats div.v4 {
+ background: #fde7ce;
+}
+
+#irssistats div.hm, #irssistats div.vm {
+ background: #dddddd;
+}
+
+#irssistats small {
+ font-size: 5.5pt;
+}
+
+#irssistats .logo {
+ padding: 10px;
+ background: #ffffff url('irssistats_white.png');
+ background-repeat: no-repeat;
+ background-position: center;
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ border: 3px black double;
+ -moz-border-radius: 20px;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
+}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #FFFFFF;
- margin: 0;
+ margin: 0;
}
#irssistats A {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
color: #AAAAFF;
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
}
#irssistats h2 {
color: #FFAAAA;
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
background: #552222;
- border: 1px #774444 solid;
+ border: 1px #774444 solid;
}
#irssistats td {
- font-size: 9pt;
+ font-size: 9pt;
background: #225522;
- border: 1px #447744 solid;
+ border: 1px #447744 solid;
}
#irssistats td.oneline {
}
#irssistats small {
- font-size: 7pt;
+ font-size: 7pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('h1.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('h2.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('h3.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('h4.png');
}
#irssistats div.hm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('hm.png');
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('v1.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('v2.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('v3.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('v4.png');
}
#irssistats div.vm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('vm.png');
+}
+
+#irssistats div.logo {
+ background: url('irssistats_black.png');
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ padding: 0;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #000000;
- margin: 0;
+ margin: 0;
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
}
#irssistats h2 {
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
background: #FFEEEE;
- border: 1px #FFCCCC solid;
+ border: 1px #FFCCCC solid;
}
#irssistats td {
- font-size: 9pt;
+ font-size: 9pt;
background: #EEEEEE;
- border: 1px #CCCCCC solid;
+ border: 1px #CCCCCC solid;
}
#irssistats td.oneline {
}
#irssistats small {
- font-size: 7pt;
+ font-size: 7pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('h1.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('h2.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('h3.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('h4.png');
}
#irssistats div.hm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('hm.png');
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('v1.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('v2.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('v3.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('v4.png');
}
#irssistats div.vm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('vm.png');
+}
+
+#irssistats div.logo {
+ background: url('irssistats_white.png');
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ padding: 0;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #000000;
- margin: 0;
+ margin: 0;
}
#irssistats A {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
color: #000000;
}
#irssistats h2 {
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
color: #555555;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
color: #ffffff;
background: #555555;
}
#irssistats td {
- font-size: 8pt;
+ font-size: 8pt;
background: #ffffff;
border: 1px #cccccc dotted;
}
}
#irssistats small {
- font-size: 6pt;
+ font-size: 6pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1, #irssistats div.v1 {
- background: #000000;
+ background: #000000;
}
#irssistats div.h2, #irssistats div.v2 {
- background: #777777;
+ background: #777777;
}
#irssistats div.h3, #irssistats div.v3 {
- background: #aaaaaa;
+ background: #aaaaaa;
}
#irssistats div.h4, #irssistats div.v4 {
- background: #dddddd;
+ background: #dddddd;
}
#irssistats div.hm, #irssistats div.vm {
- background: #888888;
+ background: #888888;
}
+
+#irssistats div.logo {
+ display: none;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
+}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #DDAAFF;
- margin: 0;
+ margin: 0;
}
#irssistats A {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
color: #FFC8C8;
}
#irssistats h2 {
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
color: #FFC8C8;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
background: #550088;
}
#irssistats td {
- font-size: 9pt;
+ font-size: 9pt;
background: #7711AA;
}
}
#irssistats small {
- font-size: 7pt;
+ font-size: 7pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('h1.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('h2.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('h3.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('h4.png');
}
#irssistats div.hm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('hm.png');
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('v1.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('v2.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('v3.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('v4.png');
}
#irssistats div.vm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('vm.png');
+}
+
+#irssistats div.logo {
+ display: none;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
--- /dev/null
+/* Black background */\r
+\r
+body {\r
+ background: #000000;\r
+}\r
+\r
+#irssistats * {\r
+ font-family: Verdana, Arial, Helvetica, sans-serif;\r
+ color: #FFFFFF;\r
+ margin: 0;\r
+}\r
+\r
+#irssistats A {\r
+ color: #FFFFFF;\r
+}\r
+\r
+#irssistats A:hover {\r
+ color: #FFFFFF;\r
+}\r
+\r
+#irssistats img {\r
+ border: 0;\r
+}\r
+\r
+#irssistats h1 {\r
+ color: #FFFFFF;\r
+ font-size: 20pt;\r
+ margin-bottom: 10px;\r
+}\r
+\r
+#irssistats h2 {\r
+ color: #FFFFFF;\r
+ font-size: 15pt;\r
+ margin-bottom: 5px;\r
+}\r
+\r
+#irssitats p {\r
+ font-size: 10pt;\r
+}\r
+\r
+#irssistats th {\r
+ font-size: 9pt;\r
+ background: #552222;\r
+ border: 1px #774444 solid;\r
+}\r
+\r
+#irssistats td {\r
+ font-size: 9pt;\r
+ background: #333333;\r
+ border: 1px #424242 solid;\r
+}\r
+\r
+#irssistats td.oneline {\r
+ width: 100px;\r
+}\r
+\r
+#irssistats small {\r
+ font-size: 7pt;\r
+}\r
+\r
+#irssistats table {\r
+ margin-left: auto;\r
+ margin-right: auto; \r
+}\r
+\r
+#irssistats div {\r
+ padding: 10px;\r
+ margin: 10px;\r
+ text-align: center;\r
+}\r
+\r
+#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {\r
+ float: left;\r
+ height: 15px;\r
+ margin: 0;\r
+ padding: 0;\r
+ border: 0;\r
+ font-size: 0;\r
+}\r
+\r
+#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {\r
+ width: 15px;\r
+ margin: 0;\r
+ padding: 0;\r
+ border: 0;\r
+ font-size: 0;\r
+}\r
+\r
+#irssistats div.h1 {\r
+ background: #0000ff;\r
+ background: url('h1.png');\r
+}\r
+\r
+#irssistats div.h2 {\r
+ background: #00ff00;\r
+ background: url('h2.png');\r
+}\r
+\r
+#irssistats div.h3 {\r
+ background: #ffff00;\r
+ background: url('h3.png');\r
+}\r
+\r
+#irssistats div.h4 {\r
+ background: #ff0000;\r
+ background: url('h4.png');\r
+}\r
+\r
+#irssistats div.hm {\r
+ background: #ff00ff;\r
+ background: url('hm.png');\r
+}\r
+\r
+#irssistats div.v1 {\r
+ background: #0000ff;\r
+ background: url('v1.png');\r
+}\r
+\r
+#irssistats div.v2 {\r
+ background: #00ff00;\r
+ background: url('v2.png');\r
+}\r
+\r
+#irssistats div.v3 {\r
+ background: #ffff00;\r
+ background: url('v3.png');\r
+}\r
+\r
+#irssistats div.v4 {\r
+ background: #ff0000;\r
+ background: url('v4.png');\r
+}\r
+\r
+#irssistats div.vm {\r
+ background: #ff00ff;\r
+ background: url('vm.png');\r
+}\r
+
+#irssistats div.logo {
+ background: url('irssistats_white.png');
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ padding: 0;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
+}
\ No newline at end of file
font-family: Verdana, Arial, sans-serif;
font-size: 13px;
color: black;
- margin: 0;
+ margin: 0;
}
#irssistats a {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
}
#irssistats div {
- margin-bottom: 20px;
- text-align: center;
+ margin-bottom: 20px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
- margin: auto;
+ margin: auto;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('pisg_blue-h.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('pisg_green-h.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('pisg_yellow-h.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('pisg_red-h.png');
}
#irssistats div.hm {
- background: #dd00dd;
+ background: #dd00dd;
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('pisg_blue-v.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('pisg_green-v.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('pisg_yellow-v.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('pisg_red-v.png');
+}
+
+#irssistats div.logo {
+ display: none;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #000000;
- margin: 0;
+ margin: 0;
}
#irssistats A {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
color: #C05A00;
}
#irssistats h2 {
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
color: #FF7700;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
background: #FF7700;
}
#irssistats td {
- font-size: 9pt;
+ font-size: 9pt;
background: #FFEEEE;
}
}
#irssistats small {
- font-size: 7pt;
+ font-size: 7pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('h1.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('h2.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('h3.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('h4.png');
}
#irssistats div.hm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('hm.png');
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('v1.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('v2.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('v3.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('v4.png');
}
#irssistats div.vm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('vm.png');
+}
+
+#irssistats div.logo {
+ background: url('irssistats_white.png');
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ padding: 0;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
}
#irssistats * {
- font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
color: #FFFFFF;
- margin: 0;
+ margin: 0;
}
#irssistats A {
}
#irssistats img {
- border: 0;
+ border: 0;
}
#irssistats h1 {
- font-size: 20pt;
+ font-size: 20pt;
margin-bottom: 10px;
color: #0CBA18;
}
#irssistats h2 {
- font-size: 15pt;
+ font-size: 15pt;
margin-bottom: 5px;
color: #84DB8C;
}
#irssitats p {
- font-size: 10pt;
+ font-size: 10pt;
}
#irssistats th {
- font-size: 9pt;
+ font-size: 9pt;
background: #0B810B;
- border: 1px #006600 solid;
+ border: 1px #006600 solid;
}
#irssistats td {
- font-size: 9pt;
+ font-size: 9pt;
background: #085D10;
- border: 1px #003300 solid;
+ border: 1px #003300 solid;
}
#irssistats td.oneline {
}
#irssistats small {
- font-size: 7pt;
+ font-size: 7pt;
}
#irssistats table {
}
#irssistats div {
- padding: 10px;
- margin: 10px;
- text-align: center;
+ padding: 10px;
+ margin: 10px;
+ text-align: center;
}
#irssistats div.h1, #irssistats div.h2, #irssistats div.h3, #irssistats div.h4, #irssistats div.hm {
- float: left;
- height: 15px;
- margin: 0;
- padding: 0;
+ float: left;
+ height: 15px;
+ margin: 0;
+ padding: 0;
border: 0;
font-size: 0;
}
#irssistats div.v1, #irssistats div.v2, #irssistats div.v3, #irssistats div.v4, #irssistats div.vm {
- width: 15px;
- margin: 0;
- padding: 0;
- border: 0;
+ width: 15px;
+ margin: 0;
+ padding: 0;
+ border: 0;
font-size: 0;
}
#irssistats div.h1 {
- background: #0000ff;
+ background: #0000ff;
background: url('h1.png');
}
#irssistats div.h2 {
- background: #00ff00;
+ background: #00ff00;
background: url('h2.png');
}
#irssistats div.h3 {
- background: #ffff00;
+ background: #ffff00;
background: url('h3.png');
}
#irssistats div.h4 {
- background: #ff0000;
+ background: #ff0000;
background: url('h4.png');
}
#irssistats div.hm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('hm.png');
}
#irssistats div.v1 {
- background: #0000ff;
+ background: #0000ff;
background: url('v1.png');
}
#irssistats div.v2 {
- background: #00ff00;
+ background: #00ff00;
background: url('v2.png');
}
#irssistats div.v3 {
- background: #ffff00;
+ background: #ffff00;
background: url('v3.png');
}
#irssistats div.v4 {
- background: #ff0000;
+ background: #ff0000;
background: url('v4.png');
}
#irssistats div.vm {
- background: #ff00ff;
+ background: #ff00ff;
background: url('vm.png');
+}
+
+#irssistats div.logo {
+ background: url('irssistats_black.png');
+ width: 364px;
+ height: 44px;
+ margin: auto;
+ padding: 0;
+}
+
+#irssistats .tdphoto {
+ text-align: center;
}
\ No newline at end of file
--- /dev/null
+irssistats (0.70-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Antoine Jacquet <royale@zerezo.com> Sat, 5 Feb 2005 23:44:14 +0100
+
+irssistats (0.62-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Antoine Jacquet <royale@zerezo.com> Wed, 3 May 2004 22:10:45 +0100
+
+irssistats (0.61-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Antoine Jacquet <royale@zerezo.com> Wed, 5 Apr 2004 02:11:20 +0100
+
+irssistats (0.6-1) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Antoine Jacquet <royale@zerezo.com> Wed, 24 Mar 2004 16:44:17 +0100
+
--- /dev/null
+Source: irssistats
+Section: net
+Priority: optional
+Maintainer: Antoine Jacquet <royale@zerezo.com>
+Build-Depends: debhelper (>= 4.0.0)
+Standards-Version: 3.6.1
+
+Package: irssistats
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Suggests: irssi-text
+Description: This tool generates HTML IRC stats based on irssi logs
+ irssistats is a tool that make HTML stats from irssi logfiles.
+ The statistics generated display many useful and funny informations about
+ the channel.
--- /dev/null
+This package was debianized by Antoine Jacquet <royale@zerezo.com> on
+Wed, 24 Mar 2004 16:44:17 +0100.
+
+It was downloaded from: http://royale.zerezo.com/irssistats/
+
+Upstream Author: Antoine Jacquet <royale@zerezo.com>
+
+Copyright (C) 2002-2004 Antoine Jacquet <royale@zerezo.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
--- /dev/null
+README sample.nickfile sample.configfile
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+
+
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+
+ touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ $(MAKE)
+ #/usr/bin/docbook-to-man debian/irssistats.sgml > irssistats.1
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ -$(MAKE) clean
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/irssistats.
+ $(MAKE) install PRE=$(CURDIR)/debian/irssistats/usr
+ rm $(CURDIR)/debian/irssistats/usr/share/doc/irssistats/COPYING
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs CHANGELOG
+ dh_installdocs
+ dh_installexamples
+# dh_install
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+ dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+# dh_perl
+# dh_python
+# dh_makeshlibs
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
-.\" $Header: /aolnet/dev/src/CVS/sgml/docbook-to-man/cmd/docbook-to-man.sh,v 1.1.1.1 1998/11/13 21:31:59 db3l Exp $
-.\"
-.\" transcript compatibility for postscript use.
-.\"
-.\" synopsis: .P! <file.ps>
-.\"
-.de P!
-.fl
-\!!1 setgray
-.fl
-\\&.\"
-.fl
-\!!0 setgray
-.fl \" force out current output buffer
-\!!save /psv exch def currentpoint translate 0 0 moveto
-\!!/showpage{}def
-.fl \" prolog
-.sy sed -e 's/^/!/' \\$1\" bring in postscript file
-\!!psv restore
-.
-.de pF
-.ie \a\\*(f1\a\a .ds f1 \\n(.f
-.el .ie \a\\*(f2\a\a .ds f2 \\n(.f
-.el .ie \a\\*(f3\a\a .ds f3 \\n(.f
-.el .ie \a\\*(f4\a\a .ds f4 \\n(.f
-.el .tm ? font overflow
-.ft \\$1
-..
-.de fP
-.ie !\a\\*(f4\a\a \{\
-. ft \\*(f4
-. ds f4\"
-' br \}
-.el .ie !\a\\*(f3\a\a \{\
-. ft \\*(f3
-. ds f3\"
-' br \}
-.el .ie !\a\\*(f2\a\a \{\
-. ft \\*(f2
-. ds f2\"
-' br \}
-.el .ie !\a\\*(f1\a\a \{\
-. ft \\*(f1
-. ds f1\"
-' br \}
-.el .tm ? font underflow
-..
-.ds f1\"
-.ds f2\"
-.ds f3\"
-.ds f4\"
-'\" t
-.ta 8n 16n 24n 32n 40n 48n 56n 64n 72n
.TH "IRSSISTATS" "1"
.SH "NAME"
irssistats \(em A tool to generate HTML IRC stats based on irssi logs.
.PP
If no configuration file is given, irssistats looks for files ~/.irssistats.conf or then /etc/irssistats.conf
.PP
-Lines starting by ; # -- or // are ignored (comments).
+Lines starting by ; # \-\- or // are ignored (comments).
.PP
This file is read sequencially, so it acts like a script.
.PP
.PP
Each option keeps its value until erased by another value.
.PP
-IMPORTANT : the order of options to parse a channel must allways be "input" THEN "nickfile" THEN "output".
+IMPORTANT : the order of options to parse a channel must allways be "input" THEN "nickfile" THEN "photofile" THEN "output".
.PP
Available options are :
.IP "debug" 10
This option has no effect if you use a custom header : you'll have to include the refresh code yourself.
.IP "" 10
Default : 3600
+.IP "photo_size" 10
+Specifies the size in pixels of the thumbnails for users
+.IP "" 10
+This option has an effect only if there is a photofile (see below)
+.IP "" 10
+Set to 0 to disable (display pictures with their real size)
+.IP "" 10
+Default : 60
.IP "w3c_link" 10
Set this to "no" if you don't want the W3C logo.
.IP "" 10
Default : yes
+.IP "logo" 10
+Set this to "no" if you don't want the irssistats logo.
+.IP "" 10
+Default : yes
.IP "header" 10
Use your custom header file (HTML code between <!DOCTYPE... and <body> included)
.IP "footer" 10
This allow you to group nick using a nickfile.
.IP "" 10
Note that irssistats will really merge the nicks as soon as it reads this option.
+.IP "photofile" 10
+This allow you to display pictures for users.
.IP "output" 10
This allow you to generate the HTML file.
.IP "" 10
The <NULL> final nick will remove matching nicks from all statistics, except from "Some URLs" and "Some topics"...
.PP
You can also take a look at the "sample.nickfile" in this package (in "/usr/share/doc/irssistats/").
+.SH "PHOTOFILE"
+.PP
+Since version 0.70 of \fBirssistats\fR, you can use a photofile to display pictures for users.
+.PP
+Each line of the photofile contains the final nick and an URL for the image.
+.PP
+Examples :
+.IP "royale http://royale.zerezo.com/chat/faces/happy40.png" 10
+(a full address)
+.IP "sektor ../chat/faces/happy40.png" 10
+(a relative address)
+.PP
+The photofile must not contain any comments.
+.PP
+You can also take a look at the "sample.photofile" in this package (in "/usr/share/doc/irssistats/").
.SH "SEE ALSO"
.PP
\fBirssi\fR (1).
.SH "AUTHOR"
.PP
Antoine Jacquet royale@zerezo.com
-.\" created by instant / docbook-to-man, Mon 03 May 2004, 21:30
+.\" created by instant / docbook-to-man, Sun 06 Feb 2005, 06:38
/*
- * irssistats version 0.62
+ * irssistats version 0.70
*
* This tool generates IRC stats based on irssi logs.
* Usage: irssistats [/path/to/file.conf]
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
+ */
#include <sys/types.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
+#ifdef __WIN32__
+#define GLOBALCONF "irssistats.conf"
+#else
+#define GLOBALCONF "/etc/irssistats.conf"
#include <regex.h>
+#endif
/* Config */
#define BASEUSERS 1000
#define MINWORDLENGTH 5
/* irssistats */
-#define VERSION "0.62"
+#define VERSION "0.70"
#define URL "http://royale.zerezo.com/irssistats/"
/* Counters */
},
{ /* Dutch language */
/* contributed by Jeroen Ubbink <crasp@blackbyte.nl> */
+ /* updated by Wouter Horré <wouter@ligezin.be> */
{ "Dutch", "nl" },
{ "CHARSET", "ISO-8859-1" },
{ "HEADER", "Statistieken voor %s door %s" },
{ "LASTDAYS", "Statistieken van de laatste dagen" },
{ "TOPHOURS", "Statistieken per uur" },
{ "TOPUSERS", "Meest actieve mensen" },
- { "OTHERS", "Er zijn nog %d niet in de top..." },
+ { "OTHERS", "Er zijn nog %d mensen die de top niet haalden..." },
{ "NBLINES", "regels" },
{ "NICK", "nick" },
{ "AVGLETTERS", "letters/lijn" },
{ "BIGNUMBERS", "Enkele grote aantallen..." },
{ "NUMBERS", "numbers" },
{ "TIME", "%d regels (%d dagen) verwerkt in %d seconden" },
- { "FOOTER", "Statistieken gegenereert door" },
+ { "FOOTER", "Statistieken gegenereerd door" },
{ "C_SMILE", "is vaak vrolijk :)" },
{ "C_FROWN", "is vaak droevig :(" },
{ "C_EXCLAM", "schreeuwt veel !" },
int debug=1; /* 0 = none ; 1 = normal ; 2 = verbose */
char channel[MAXLINELENGTH]="set_channel_in_config_file";
char maintainer[MAXLINELENGTH]="set_maintainer_in_config_file";
-char theme[MAXLINELENGTH]="default,blue,dark,grayscale,namour,pisg,zeduel,zerezo";
+char theme[MAXLINELENGTH]="default,biseau,blue,dark,damier,grayscale,namour,niflheim,pisg,zeduel,zerezo";
int refresh_time=0; /* 0 = disabled */
int w3c_link=1; /* 0 = disabled */
+int logo=1; /* 0 = disabled */
char header[MAXLINELENGTH]="none";
char footer[MAXLINELENGTH]="none";
int totallines=0;
int top_words=1; /* 0 = disabled */
int ranking=0; /* 0 = lines ; 1 = words ; 2 = letters */
int quarter=0; /* 1 = enabled */
+int photo_size=60;
struct user
{
int hours[4];
char quote[MAXQUOTELENGTH+1];
int counters[NBCOUNTERS];
+ char *photo;
int temp;
} *users;
int nbusers=0;
strcpy(users[i].quote,users[i-1].quote);
for (j=0;j<NBCOUNTERS;j++) users[i].counters[j]=users[i-1].counters[j];
users[i].temp=users[i-1].temp;
+ users[i].photo=users[i-1].photo;
}
strcpy(users[start].nick,nick);
users[start].lines=0;
users[start].quote[0]='\0';
for (j=0;j<NBCOUNTERS;j++) users[start].counters[j]=0;
users[start].temp=0;
+ users[start].photo=NULL;
}
return(start);
}
while (fgets(line,MAXLINELENGTH,fic)!=NULL)
{
/* remove \n */
- for (i=0;line[i]!=0;i++);
- if (i>=MAXLINELENGTH-1) { fprintf(stderr,"line %d is too long\n",totallines); exit(1); }
+ for (i=0;line[i]!=0 && i<MAXLINELENGTH-1;i++);
+ if (i>=MAXLINELENGTH-1) {
+ if(debug){
+ fprintf(stderr,"line %d is too long, skipping\n",totallines+1);
+ }
+ continue;
+ }
+ if (i<8) {
+ if(debug) {
+ fprintf(stderr, "line %d is too short to be valid, skipping\n",totallines+1);
+ }
+ continue;
+ }
line[i-1]='\0';
pos=0;
totallines++;
}
else if (strncmp("-!-",&line[6],3)==0) /* 00:00 -!- Nick something... */
{
- for (i=10;line[i]!=' ';i++);
+ for (i=10;line[i]!=' ' && i <= 10 + MAXNICKLENGTH;i++);
+ if(i > 10 + MAXNICKLENGTH) {
+ if(debug) {
+ fprintf(stderr,"nick on line %d is too long, skipping line\n",totallines);
+ }
+ continue;
+ }
line[i]='\0';
nick=&line[10];
message=&line[i+1];
hour=atoi(line);
if (line[7]=='*') /* 00:00 * Nick the message */
{
- for (i=9;line[i]!=' ';i++);
+ for (i=9;line[i]!=' ' && i <= 9 + MAXNICKLENGTH;i++);
+ if(i > 9 + MAXNICKLENGTH) {
+ if(debug) {
+ fprintf(stderr,"nick on line %d is too long, skipping line\n",totallines);
+ }
+ continue;
+ }
nick=&line[9];
message=&line[i+1];
}
else if (line[7]=='>') /* 00:00 <>>>?Nick<<<> the personal message */
/* 00:00 <>>?Nick<<> the personal message */
{
- for (i=10;line[i]!='<';i++);
+ for (i=10;line[i]!='<' && i <= 10 + MAXNICKLENGTH;i++);
+ if(i > 10 + MAXNICKLENGTH) {
+ if(debug) {
+ fprintf(stderr,"nick on line %d is too long, skipping line\n",totallines);
+ }
+ continue;
+ }
nick=&line[10];
if (line[9]=='>') nick++;
message=&line[i+5];
nickstart = 7;
}
- for (i=nickstart;line[i]!='>';i++);
+ for (i=nickstart;line[i]!='>' && i <= nickstart + MAXNICKLENGTH;i++);
+ if(i > nickstart + MAXNICKLENGTH) {
+ if(debug) {
+ fprintf(stderr,"nick on line %d is too long, skipping line\n",totallines);
+ }
+ continue;
+ }
nick=&line[nickstart];
message=&line[i+2];
}
if (debug) printf(" done\n");
}
+#ifndef __WIN32__
void parse_nick(char *nickfile)
{
FILE *fic;
for (j=0;j<4;j++) users[i].hours[j]=-1;
for (j=0;j<NBCOUNTERS;j++) users[i].counters[j]=-1;
}
+#endif
+
+void parse_photo(char *photofile)
+{
+ FILE *fic;
+ char line[MAXLINELENGTH];
+ int user;
+
+ if ((fic=fopen(photofile,"rt"))==NULL) { fprintf(stderr,"can't open photo file \"%s\"\n",photofile); exit(1); }
+ while (fscanf(fic,"%s",line)==1)
+ {
+ user=dichotomic(line);
+ fscanf(fic,"%s",line);
+ users[user].photo=malloc(strlen(line)+1);
+ strcpy(users[user].photo,line);
+ }
+ fclose(fic);
+}
void gen_xhtml(char *xhtmlfile)
{
int user,max,temp;
char line[MAXLINELENGTH];
char *subtheme;
+ int photos=0;
+
+ for (i=0;i<nbusers;i++) if (users[i].photo!=NULL) photos=1;
if ((fic=fopen(xhtmlfile,"wt"))==NULL) { fprintf(stderr,"can't open xhtml file \"%s\"\n",xhtmlfile); exit(1); }
switch (ranking)
{
case 0:
- fprintf(fic,"<table>\n<tr><th></th><th>%s</th><th>%s</th><th>%s</th><th colspan=\"2\">%s</th><th>%s</th></tr>\n",L("NICK"),L("NBLINES"),L("HOURS"),L("AVGLETTERS"),L("QUOTE"));
+ fprintf(fic,"<table>\n<tr><th></th><th>%s</th><th>%s</th><th>%s</th><th colspan=\"2\">%s</th><th>%s</th>\n",L("NICK"),L("NBLINES"),L("HOURS"),L("AVGLETTERS"),L("QUOTE"));
break;
default:
/* "letters" and "words" ranking are not yet translated so we use the generic word "rank" ... */
- fprintf(fic,"<table>\n<tr><th></th><th>%s</th><th>%s</th><th>%s</th><th colspan=\"2\">%s</th><th>%s</th></tr>\n",L("NICK"),"rank",L("HOURS"),L("AVGLETTERS"),L("QUOTE"));
+ fprintf(fic,"<table>\n<tr><th></th><th>%s</th><th>%s</th><th>%s</th><th colspan=\"2\">%s</th><th>%s</th>\n",L("NICK"),"rank",L("HOURS"),L("AVGLETTERS"),L("QUOTE"));
break;
}
+ if (photos) fprintf(fic,"<th></th>");
+ fprintf(fic,"</tr>");
for (i=1;i<=NBUSERS;i++)
{
user=-1;
for (j=0;j<4;j++) if (users[user].hours[j]!=0) fprintf(fic,"<div class=\"h%d\" style=\"width:%dpx\"></div>",j+1,100*users[user].hours[j]/users[user].lines);
fprintf(fic,"</td><td>%d</td><td><div class=\"hm\" style=\"width:%dpx\"></div></td><td>\"",users[user].lines!=0?users[user].letters/users[user].lines:0,users[user].lines!=0?users[user].letters/users[user].lines:0);
printhtml(fic,users[user].quote);
- fprintf(fic,"\"</td></tr>\n");
+ fprintf(fic,"\"</td>");
+ if (photos && users[user].photo!=NULL)
+ {
+ if (photo_size)
+ fprintf(fic,"<td class=\"tdphoto\"><a href=\"%s\"><img src=\"%s\" class=\"imgphoto\" width=\"%d\" height=\"%d\" alt=\"\" style=\"border: 0\" /></a></td>",users[user].photo,users[user].photo,photo_size,photo_size);
+ else
+ fprintf(fic,"<td class=\"tdphoto\"><img src=\"%s\" class=\"imgphoto\" alt=\"\" /></td>",users[user].photo,users[user].photo);
+ }
+ fprintf(fic,"</tr>\n");
users[user].lines=-1;
users[user].words=-1;
users[user].letters=-1;
fprintf(fic,"<p>\n<a href=\"http://validator.w3.org/check/referer\"><img src=\"valid-xhtml10.png\" height=\"31\" width=\"88\" alt=\"Valid XHTML 1.0!\" /></a>\n");
fprintf(fic,"<a href=\"http://jigsaw.w3.org/css-validator/check/referer\"><img src=\"valid-css.png\" height=\"31\" width=\"88\" alt=\"Valid CSS!\" /></a>\n</p>\n");
}
- fprintf(fic,"</div>\n\n</div>");
- if (strcmp("none",header)==0)
+ fprintf(fic,"</div>\n\n");
+
+ /* logo*/
+ if (logo) fprintf(fic,"<div class=\"logo\"></div>\n\n");
+
+ /* end */
+ if (strcmp("none",footer)==0)
{
- fprintf(fic,"\n\n</body>\n\n</html>\n");
+ fprintf(fic,"</div>\n\n</body>\n\n</html>\n");
}
else
{
void parse_config(char *configfile)
{
+ void expand(char *path)
+ {
+ char temp[MAXLINELENGTH];
+ if (*path=='~')
+ {
+ snprintf(temp,MAXLINELENGTH-1,"%s%s",getenv("HOME"),path+1);
+ temp[MAXLINELENGTH-1]='\0';
+ strcpy(path,temp);
+ }
+ }
+
FILE *fic;
char line[MAXLINELENGTH];
char keyword[MAXLINELENGTH];
}
else
{
- sprintf(line,"%s/.irssistats",getenv("HOME"));
+ snprintf(line,MAXLINELENGTH-1,"%s/.irssistats",getenv("HOME"));
+ line[MAXLINELENGTH-1]='\0';
if ((fic=fopen(line,"rt"))==NULL)
- if ((fic=fopen("/etc/irssistats.conf","rt"))==NULL)
+ if ((fic=fopen(GLOBALCONF,"rt"))==NULL)
{
- fprintf(stderr,"can't find config file : \"%s\" nor \"/etc/irssistats.conf\"\n",line);
+ fprintf(stderr,"can't find config file : \"%s\" nor \"" GLOBALCONF "\"\n",line);
fprintf(stderr,"please give the path to the config file in argument\n");
exit(1);
}
}
else
+ if (strcmp("photo_size",keyword)==0)
+ {
+ photo_size=atoi(value);
+ if (debug==2) fprintf(stderr,"setting photo_size to \"%d\"\n",photo_size);
+ }
+ else
+
if (strcmp("w3c_link",keyword)==0)
{
if (debug==2) fprintf(stderr,"setting w3c_link to \"%s\"\n",value);
}
else
+ if (strcmp("logo",keyword)==0)
+ {
+ if (debug==2) fprintf(stderr,"setting logo to \"%s\"\n",value);
+ if (strcmp("no",value)==0) logo=0;
+ else if (strcmp("yes",value)==0) logo=1;
+ else { fprintf(stderr,"unknown value for \"logo\" option, must be \"yes\" or \"no\"\n"); exit(1); }
+ }
+ else
+
if (strcmp("header",keyword)==0)
{
+ expand(value);
if (debug==2) fprintf(stderr,"setting header to \"%s\"\n",value);
strcpy(header,value);
}
if (strcmp("footer",keyword)==0)
{
+ expand(value);
if (debug==2) fprintf(stderr,"setting footer to \"%s\"\n",value);
strcpy(footer,value);
}
if (strcmp("input",keyword)==0)
{
+ expand(value);
if (debug==2) fprintf(stderr,"parsing log file \"%s\"\n",value);
parse_log(value);
}
if (strcmp("nickfile",keyword)==0)
{
+ expand(value);
if (debug==2) fprintf(stderr,"nick alias using file \"%s\"\n",value);
+#ifdef __WIN32__
+ fprintf(stderr,"no support for nickfile in WIN32 version\n");
+#else
parse_nick(value);
+#endif
+ }
+ else
+
+ if (strcmp("photofile",keyword)==0)
+ {
+ expand(value);
+ if (debug==2) fprintf(stderr,"parsing photo file \"%s\"\n",value);
+ parse_photo(value);
}
else
if (strcmp("output",keyword)==0)
{
+ expand(value);
if (debug==2) fprintf(stderr,"generating xhtml file \"%s\"\n",value);
bestwords(words,0);
gen_xhtml(value);
for (i=0;i<NBWORDS;i++) topwords[i].nb=0;
totallines=0;
debut=time(NULL);
+ for (i=0;i<nbusers;i++)
+ {
+ free(users[i].photo);
+ users[i].photo=NULL;
+ }
}
else
<para>Each option keyword is case sensitive, and you must put separators around the ':' character.</para>
<para>Blank lines must not contain any spaces !</para>
<para>Each option keeps its value until erased by another value.</para>
- <para>IMPORTANT : the order of options to parse a channel must allways be "input" THEN "nickfile" THEN "output".</para>
+ <para>IMPORTANT : the order of options to parse a channel must allways be "input" THEN "nickfile" THEN "photofile" THEN "output".</para>
<para>Available options are :</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>photo_size</term>
+ <listitem>
+ <para>Specifies the size in pixels of the thumbnails for users</para>
+ <para>This option has an effect only if there is a photofile (see below)</para>
+ <para>Set to 0 to disable (display pictures with their real size)</para>
+ <para>Default : 60</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term>w3c_link</term>
<listitem>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>logo</term>
+ <listitem>
+ <para>Set this to "no" if you don't want the irssistats logo.</para>
+ <para>Default : yes</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term>header</term>
<listitem><para>Use your custom header file (HTML code between <!DOCTYPE... and <body> included)</para></listitem>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>photofile</term>
+ <listitem>
+ <para>This allow you to display pictures for users.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term>output</term>
<listitem>
</refsect1>
+ <refsect1>
+ <title>PHOTOFILE</title>
+ <para>Since version 0.70 of <command>irssistats</command>, you can use a photofile to display pictures for users.</para>
+ <para>Each line of the photofile contains the final nick and an URL for the image.</para>
+ <para>Examples :</para>
+ <variablelist>
+ <varlistentry>
+ <term>royale http://royale.zerezo.com/chat/faces/happy40.png</term>
+ <listitem><para>(a full address)</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>sektor ../chat/faces/happy40.png</term>
+ <listitem><para>(a relative address)</para></listitem>
+ </varlistentry>
+ </variablelist>
+ <para>The photofile must not contain any comments.</para>
+ <para>You can also take a look at the "sample.photofile" in this package (in "/usr/share/doc/irssistats/").</para>
+ </refsect1>
+
+
<refsect1>
<title>SEE ALSO</title>
<para><command>irssi</command> (1).</para>
--- /dev/null
+Name: irssistats
+Summary: This tool generates HTML IRC stats based on irssi logs
+Version: 0.70
+Release: 1
+Source: http://royale.zerezo.com/%{name}/%{name}-%{version}.tar.gz
+Group: Applications/Multimedia
+License: GPL
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+
+%description
+irssistats is a tool that make HTML stats from irssi logfiles.
+The statistics generated display many useful and funny informations about
+the channel.
+
+%prep
+%setup -q
+
+%build
+make
+
+%install
+make install PRE=$RPM_BUILD_ROOT/usr
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root,0755)
+%doc COPYING README
+%{_bindir}/irssistats
+%{_mandir}/man1/irssistats.1.gz
# Each option keyword is case sensitive, and you must put separators around the ':' character.
# Blank lines must not contain any spaces !
# Each option keeps its value until erased by another value.
-# IMPORTANT : the order of options to parse a channel must allways be "input" THEN "nickfile" THEN "output".
+# IMPORTANT : the order of options to parse a channel must allways be "input" THEN "nickfile" THEN "photofile" THEN "output".
# Allows you to display debugging informations.
# Values : normal / verbose / none
# In fact this is the name of the CSS file to include.
# This option has no effect if you use a custom header : you'll have to include the CSS yourself.
# The first theme is the primary stylesheet, and the others are alternate themes
-theme : default,blue,dark,grayscale,namour,pisg,zeduel,zerezo
+theme : default,biseau,blue,dark,damier,grayscale,namour,niflheim,pisg,zeduel,zerezo
# Allows you to disable top words list which is using a lot of memory
# Default : yes
# Default : 3600
refresh_time : 0
+# Specifies the size in pixels of the thumbnails for users
+# This option has an effect only if there is a photofile (see below)
+# Set to 0 to disable (display pictures with their real size)
+# Default : 60
+photo_size : 0
+
# Set this to "no" if you don't want the W3C logo.
# Default : yes
w3c_link : no
+# Set this to "no" if you don't want the irssistats logo.
+# Default : yes
+logo : no
+
# Use your custom header file (HTML code between <!DOCTYPE... and <body> included)
header : /path/to/header.html
# Note that irssistats will really merge the nicks as soon as it reads this option.
nickfile : /path/to/nickfile1.txt
+# This allow you to display pictures for users.
+photofile: /path/to/photofile1.txt
+
# This allow you to generate the HTML file.
# Note that irssistats will really generate the HTML file as soon as it reads this option.
output : /path/to/channel1.html
--- /dev/null
+royale http://royale.zerezo.com/chat/faces/happy40.png
+sektor ../chat/faces/sektor.jpg
+Clak wgfa2.png
+Jo faces/FLCL.gif