summaryrefslogtreecommitdiffstats
path: root/scripts/kernel.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kernel.pl')
-rw-r--r--scripts/kernel.pl64
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/kernel.pl b/scripts/kernel.pl
new file mode 100644
index 0000000..048dd1d
--- /dev/null
+++ b/scripts/kernel.pl
@@ -0,0 +1,64 @@
+# Fetches the version(s) of the latest Linux kernel(s).
+
+# /kernel
+
+use strict;
+use Irssi;
+use IO::Socket;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION = '0.9';
+%IRSSI = (
+ authors => 'Johan "Ion" Kiviniemi',
+ contact => 'ion at hassers.org',
+ name => 'Kernel',
+ description => 'Fetches the version(s) of the latest Linux kernel(s).',
+ license => 'Public Domain',
+ url => 'http://ion.amigafin.org/irssi/',
+ changed => 'Tue Mar 12 22:20 EET 2002',
+);
+
+sub finger($$) {
+ # Yes, Net::Finger is already done and i'm reinventing the wheel.
+ my ($user, $host) = @_;
+ my $buffer;
+ if (my $socket = IO::Socket::INET->new(
+ PeerHost => $host,
+ PeerPort => 'finger(79)',
+ Proto => 'tcp',
+ ))
+ {
+ if (syswrite $socket, "$user\n") {
+ unless (sysread $socket, $buffer, 1024) {
+ # Should i use $! here?
+ Irssi::print(
+ "Unable to read from the socket: $!",
+ Irssi::MSGLEVEL_CLIENTERROR
+ );
+ }
+ } else {
+ # ..and here?
+ Irssi::print(
+ "Unable to write to the socket: $!",
+ Irssi::MSGLEVEL_CLIENTERROR
+ );
+ }
+ } else {
+ Irssi::print("Connection to $host failed: $!",
+ Irssi::MSGLEVEL_CLIENTERROR);
+ }
+ return $buffer;
+}
+
+sub get_version {
+ my @version;
+ if (my $finger = finger("", "finger.kernel.org")) {
+ # The magic of the regexps :)
+ @version = $finger =~ /:\s*(\S+)\s*$/gm;
+ # Modify this to do whatever you want.
+ Irssi::print("@version");
+ }
+}
+
+Irssi::command_bind('kernel_version', 'get_version');