alias -l " { return $+(",$$1-,") }
alias download {
:start
var %sock = download. $+ $ticks,%address,%file
if ($sock(%sock)) { goto start }
if (!$1) { echo -s needs an address and file to download like ( www.boo.com/dir/file.zip ) | return }
if ($left($1-,7) == http://) { %address = $gettok($1-,2,47) | %file = / $+ $gettok($1-,3-,47) }
else { %address = $gettok($1-,1,47) | %file = / $+ $gettok($1-,2-,47) }
set %download.address. [ $+ [ %sock ] ] %address
sockopen %sock %address 80
sockmark %sock %file
}
on *:sockopen:download.*:{
if ($sockerr) { echo -s *** socket error - $sockname - ( open ) }
sockwrite -n $sockname GET $sock($sockname).mark HTTP/1.1
sockwrite -n $sockname Host: %download.address. [ $+ [ $sockname ] ]
sockwrite -n $sockname $crlf
unset %download.address. [ $+ [ $sockname ] ]
}
on *:sockread:download.*:{
var %sn = $sockname,%temp. [ $+ [ %sn ] ]
if ($sockerr) { echo -s *** socket error - %sn - ( read ) | return }
if (%download.binvar. [ $+ [ %sn ] ]) {
sockread 8192 &temp. [ $+ [ %sn ] ]
while ($sockbr) {
bwrite $"($scriptdir $+ $nopath($sock(%sn).mark)) -1 -1 &temp. [ $+ [ %sn ] ]
sockread 8192 &temp. [ $+ [ %sn ] ]
}
}
else {
sockread %temp. [ $+ [ %sn ] ]
if (!%temp. [ $+ [ %sn ] ]) { set %download.binvar. [ $+ [ %sn ] ] $true }
echo -s %temp. [ $+ [ %sn ] ]
}
}
on *:sockclose:download.*:{
echo -s $sockname just finished downloading $sock($sockname).mark
unset %* [ $+ [ $sockname ] ]
}
on *:exit:{ unset %download.*.* }
on *:start:{ unset %download.*.* }