/*
I edited this so that it\'ll support quotations around the filename. It seems to work fine. I hope you don\'t mind. I\'m also unsure about the policies about posting edited versions of code on this site.. but anyway, for anyone who wants it: (tested on mIRC 6.3 using Hawkee\'s noprofile.gif image, and some image of a fuzzy cat eating a plant)
For the noprofile.gif image:
/download http://www.hawkee.com/images/noprofile.gif \"no profile.gif\" echo -a Completed download. Check the mIRC directory.
*/
alias download {
;Detect host
var %hostn = $iif(*: !iswm $geturl($1,1),1,2), %sock = $+(download,$1)
;Error checks
if ($sock(%sock)) {
erroutput Script is already downloading $1
return
}
var %2 = $iif($left($2,1) == \",$gettok($2-,1,34),$2)
var %3- = $iif($left($2,1) == \",$gettok($2-,2-,34),$3-)
if ($file(%2)) {
erroutput File %2 already exists
return
}
;Everything ready to go
sockopen %sock $geturl($1,%hostn) 80
sockmark %sock $false $geturl($1,%hostn) $iif($geturl($1,$+($calc(%hostn + 1),-)),$+(/,$v1),/) $replace(%2,$chr(32),^_^) %3-
}
on :SOCKOPEN:download:{
var %a = sockwrite -n $sockname
;Nessecary requests
%a GET $getmark($sockname,3) HTTP/1.1
%a Host: $getmark($sockname,2)
;Connection: close to force the sockclose event
%a Connection: close
;Just-to-make-sure requests:
%a Accept: /
%a Accept-Charset:
%a Accept-Encoding:
%a Accept-Language: *
%a Content-Type: application/octet-stream
%a User-Agent: Mozilla/5.0
%a $crlf
}
on :SOCKREAD:download:{
;First read the headers, and if the header is send, binary write to the specified file
var %header, &binvar
if ($getmark($sockname,1)) {
sockread &binvar
bwrite $qt($replace($getmark($sockname,4),^_^,$chr(32))) -1 -1 &binvar
}
else sockread %header
$iif((!%header) && (!$getmark($sockname,1)),sockmark $sockname $true $getmark($sockname,2-))
}
on :SOCKCLOSE:download:$iif($getmark($sockname,5-),$v1)
;Local aliases
alias -l geturl return $gettok($1,$$2,47)
alias -l getmark return $gettok($sock($1).mark,$$2,32)
alias -l erroutput echo $color(info) -ae * /download error: $$1-