Wrote this because I was bored and someone told me to. Always starts with the latest comic, and moves on to randomize.
Left click on the loaded image to load a new one. Right click for a few options.
If you find the picture is too large to view, save it and view it in a different viewer.
Enjoy :)
EDIT: Updated
Now shows the image title in the titlebar and the alt text in a right-click menu!
Added "Default Image Viewer" for easy access to big images.
on *:START:{
if (!$isdir(xkcd)) { mkdir xkcd }
}
alias xkcd {
.remove %image
clear @xkcd
drawtext -o @xkcd 0 Arial 48 10 10 Loading...
sockopen xkcd xkcd.com 80
}
on *:sockopen:xkcd:{
sockwrite -n $sockname GET $iif(!%max,/#,/ $+ $rand(1,%max) $+ /) HTTP/1.0
sockwrite -n $sockname Host:xkcd.org $+ $crlf $+ $crlf
}
on *:sockread:xkcd:{
if ($sockerr) error
sockread %t
while ($sockbr) {
if (!%max) {
if ($regex(max,%t,/Permanent link to this comic: http:\/\/xkcd.com\/(\d+)\//Si)) {
set %max $regml(max,1)
}
}
if ($regex(image,%t,/<img src="http:\/\/imgs.xkcd.com/comics/(.*)" title="(.*)" alt="(.*)"/i)) {
set %image $regml(image,1)
set %xkcd.image.title $regml(image,2)
set %xkcd.image.alt $regml(image,3)
sockopen xkcdimageget imgs.xkcd.com 80
}
sockread %t
}
}
on *:SOCKCLOSE:xkcd:{
unset %kxcd.found
}
on *:sockopen:xkcdimageget:{
sockwrite -n $sockname GET /comics/ $+ %image HTTP/1.1
sockwrite -n $sockname Host: imgs.xkcd.com $+ $crlf $+ $crlf
}
On 1:SockRead:xkcdimageget:{
if (!$sock($sockname).mark) {
var %SockReader
sockread %SockReader
if (%SockReader == $null) { sockmark $sockname 1 }
}
else {
sockread &picture
bwrite $qt($mIRCdir $+ %image) -1 -1 &picture
}
}
on *:sockclose:xkcdimageget:{
window -aBdpk0f @xkcd -1 -1 $pic($mircdir $+ %image).width $pic($mircdir $+ %image).height
titlebar @xkcd - %xkcd.image.title
xkcd.alt.prep
drawpic @xkcd -1 -1 %image
}
on *:CLOSE:@xkcd:{
.remove %image
unset %image
unset %xkcd.image.*
unset %max
}
menu status,channel {
xkcd:{
$iif(%image,.remove %image)
window -aBdpk0f @xkcd -1 -1 250 60
drawtext -o @xkcd 0 Arial 48 10 1 Loading...
sockopen xkcd xkcd.com 80
}
}
menu @xkcd {
dclick:xkcd
Alt-text
.$style(2) Hover text normally shown on the website:noop
.-
.$submenu($altmenu($1))
-
copy url...: clipboard http://imgs.xkcd.com/comics/ $+ %image
Default Image Viewer:run %image
Save Image: .copy -o %image xkcd\ $+ %image
Saved Images: run $scriptdir $+ \xkcd
}
alias -l error {
echo 4 -a ERROR!
HALT
}
alias -l altmenu {
if ($1 == begin) return
if ($1 == end) return
if ($gettok(%xkcd.alt.string,$1,124)) {
return $v1 $+ :noop
}
}
alias -l xkcd.alt.prep {
var %o = $null
var %string = %xkcd.image.alt
var %count = $ceil($calc($len(%string) / 60))
if (%count == 1) { set %xkcd.alt.string %string | return }
while %count {
tokenize 32 %string
var %new.string = $1,%c = 2
while ($len(%new.string) <= 60) {
var %new.string = %new.string $($ $+ %c,2)
inc %c
if (%c > $0) goto end
}
:end
var %string = $gettok(%string,%c -,32)
var %o = %o $+ $chr(124) $+ %new.string
dec %count
}
set %xkcd.alt.string $right(%o,-1)
return
}