TDCC v0.6 — File Browser
TDCCv0.6 / TDCCv0.6 / PimpIRC / tdcc.mrc
tdcc.mrc — 10.45 KB — Download this file
; TDCC v0.6 by Tritian
; A subscript of PimpIRC by Tritian
; 3-13-98
;
; mailto:Tritian@PlanetQuake.com
; http://www.pimpin.net/~tritian/
;
; Ok, all them XiRCON users keep bragging about TDCC support
; in XiRCON.. but hey, who can blaim em? It's about twice as
; fast on average then normal DCC. I've gotten 3.2kps TDCC
; transfers with this script on a 33.6, and i've never dropped
; below 2kps. With normal DCC i get around 0.6kps to 1.4kps
;
; So i sat down one day and wanted to bring the world of TDCC
; to all mIRC users everywhere. Maybe now those XiRCON'ers
; will shut up eh? Then again... probably not, but it's worth
; a try.
;
; This script was written as an additional DCC protocal as if
; Khaled wrote it in mIRC himself (which he should). Currently
; this script tries it's best to imitate the current DCC setup
; but due to some hard coded limitation in mIRC, i cannot
; completely recreate some ways that normal DCC behaves (namely
; the DCC ACCEPT dialog boxes)
;
; This script does come pretty damn close to recreated a DCC
; GET/SEND progress window. I did take some liberty in adding
; a KPS indicator instead of the traditional CPS indicator.
; CPS is dead anyway, it died with the days of the BBS, let it
; rest in piece. I also used $duration to get the hour/min/secs
; to look how i feel it should look. Currently Khaled uses some
; wack HR:MN:SC format thing which is just wierd and i never
; really liked it.
;
; Just do a /tdcc SEND <nick> <file> or use the nicklist popups
; The next version should have resume. I know it's a tad
; clunky now but hey, atleast it works (for the most part)
;
; Thanks to luser for all his help with the math (a subject that
; I am less then remarkable in.)
menu nicklist {
TDCC Send:/tdcc send $1 $dir="Choose a file" *.*
}
menu menubar {
TDCC Send:/tdcc send $?="Enter nickname" $dir="Choose a file" *.*
}
menu query {
TDCC Send:/tdcc send $active $dir="Choose a file" *.*
}
alias TDCC {
if $1 == ACCEPT {
set %tdcc.sent.rcvd Rcvd
set %tdcc.session Get
tdcc_w
%tdcc.rcvd.file = $sdir="Select Save Location" *.* $+ %tdcc.send.file
set %tdcc.progress.elapsed 0
set %tdcc.last.ctime $ctime
set %tdcc.send.pos 0
drawrect -fn @TDCC $colour(back) $colour(back) 5 25 1000 15
drawtext @TDCC $colour(norm) Fixedsys 9 5 25 From: $+ %tdcc.send.nick
drawrect -fn @TDCC $colour(back) $colour(back) 5 40 1000 15
drawtext @TDCC $colour(norm) Fixedsys 9 5 40 File: $+ %tdcc.send.file
drawrect -fn @TDCC $colour(back) $colour(back) 5 55 1000 20
drawtext @TDCC $colour(norm) Fixedsys 9 5 55 Size: $+ %tdcc.send.size bytes
drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.pos
sockopen TDCC_RECIEVE $longip(%tdcc.send.longip) %tdcc.send.port
}
if $1 == SEND {
if $3 != $null {
if $exists($3) {
if ($2 != $me) set %tdcc.send.nick $2
else { echo $colour(ctcp) -s *** Error: Sending files to yourself may cause mIRC to crash! | halt }
set %tdcc.last.ctime $ctime
set %tdcc.progress.elapsed 0
set %tdcc.sent.rcvd Sent
set %tdcc.session Send
tdcc_w
set %tdcc.send.port $rand(2510,2550)
drawrect -fn @TDCC $colour(back) $colour(back) 5 25 1000 15
drawtext @TDCC $colour(norm) Fixedsys 9 21 25 To: $+ %tdcc.send.nick
set %tdcc.send.file $3
drawrect -fn @TDCC $colour(back) $colour(back) 5 40 1000 15
drawtext @TDCC $colour(norm) Fixedsys 9 5 40 File: $+ %tdcc.send.file
set %tdcc.send.size $lof($3)
drawrect -fn @TDCC $colour(back) $colour(back) 5 55 1000 20
drawtext @TDCC $colour(norm) Fixedsys 9 5 55 Size: $+ %tdcc.send.size bytes
set %tdcc.send.pos 0
drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.pos
socklisten TDCC_SEND_TEMP %tdcc.send.port
.raw privmsg $2 : $+ $chr(1) $+ DCC TSEND $nopath(%tdcc.send.file) $longip($ip) %tdcc.send.port %tdcc.send.size $+ $chr(1)
draw.progress
}
else {
echo $colour(ctcp) -s *** Error: Unable to access file $chr(91) $+ $3 $+ $chr(93)
}
else { echo 9 -a *** TDCC Syntax: /TDCC <COMMAND> <NICK> <FILE> }
}
}
}
ctcp 1:DCC:*: {
if $2 == TSEND {
if %tdcc.send.file == $null {
echo $colour(ctcp) -ai2 *** Incoming TDCC SEND from $nick of $3 (Type /TDCC ACCEPT to accept)
set %tdcc.send.nick $nick
set %tdcc.send.file $3
set %tdcc.rcvd.file $3
set %tdcc.send.size $6
set %tdcc.send.port $5
set %tdcc.send.longip $4
beep
}
else { notice $nick Sorry, i already have 1 TDCC session open already }
}
}
alias tdcc_w {
window -ap +snt @TDCC 200 200 350 200
drawtext @TDCC $colour(notice) Fixedsys 9 5 5 TDCC %tdcc.session session
; drawtext @TDCC $colour(norm) Fixedsys 9 5 25 From:n/a
; drawtext @TDCC $colour(norm) Fixedsys 9 5 40 File:n/a
; drawtext @TDCC $colour(norm) Fixedsys 9 5 55 Size:n/a
drawtext @TDCC $colour(info2) Fixedsys 9 5 75 Time:n/a
drawtext @TDCC $colour(info2) Fixedsys 9 5 90 Left:n/a
drawtext @TDCC $colour(info) Fixedsys 9 200 75 %tdcc.sent.rcvd $+ : $+ n/a
drawtext @TDCC $colour(info) Fixedsys 9 208 90 Kps:n/a
drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Transmitting request...
drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Waiting for connection...
set %tdcc.window.w $window(@TDCC).w
drawrect -f @TDCC 16 2 5 145 331 20
drawtext -c @TDCC 4 Fixedsys 9 10 148 $calc(%tdcc.window.w - 19) 20 0%
drawrect @TDCC 1 1 5 145 331 20
}
alias draw.info {
set %tdcc.progress.elapsed $calc($ctime - %tdcc.last.ctime + %tdcc.progress.elapsed)
drawrect -fn @TDCC $colour(back) $colour(back) 5 75 181 15
drawtext @TDCC $colour(info2) Fixedsys 9 5 75 Time: $+ $duration(%tdcc.progress.elapsed)
set %tdcc.progress.temp1 $calc(%tdcc.progress.elapsed * %tdcc.send.size / %tdcc.send.sent)
set %tdcc.progress.left $calc(%tdcc.progress.temp1 - %tdcc.progress.elapsed)
drawrect -fn @TDCC $colour(back) $colour(back) 5 90 181 15
drawtext @TDCC $colour(info2) Fixedsys 9 5 90 Left: $+ $duration(%tdcc.progress.left)
set %tdcc.progress.kps $calc(%tdcc.send.sent / %tdcc.progress.elapsed / 1024)
drawrect -fn @TDCC $colour(back) $colour(back) 208 90 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 208 90 Kps: $+ $round(%tdcc.progress.kps,2)
set %tdcc.last.ctime $ctime
}
alias draw.progress {
set %tdcc.window.w $window(@TDCC).w
set %tdcc.progress.temp2 $calc(%tdcc.send.sent / %tdcc.send.size)
set %tdcc.progress.percent $calc(%tdcc.progress.temp2 * 100)
set %tdcc.progress.barstart 3
set %tdcc.progress.barend $calc(%tdcc.window.w - 19)
set %tdcc.progress.bartemp1 $calc(5 + %tdcc.progress.barend)
set %tdcc.progress.bartemp2 $calc(%tdcc.progress.percent / 100)
set %tdcc.progress.barmove $calc(%tdcc.progress.bartemp1 * %tdcc.progress.bartemp2 - 5)
set %tdcc.progress.bartext $calc(%tdcc.progress.barmove + 5)
drawrect -nf @TDCC 16 10 5 145 $calc(%tdcc.window.w - 19) 20
drawrect -rf @TDCC $rgb(88,88,240) 10 5 145 %tdcc.progress.barmove 20
drawtext -nc @TDCC 4 Fixedsys 9 $calc(%tdcc.progress.bartext + 5) 148 $calc(%tdcc.window.w - 19) 20 $int(%tdcc.progress.percent) $+ %
drawrect -f @TDCC $colour(back) 10 $calc(%tdcc.window.w - 14) 145 60 20
drawrect @TDCC 1 1 5 145 $calc(%tdcc.window.w - 19) 20
titlebar @TDCC - $int(%tdcc.progress.percent) $+ % Completed
}
on 1:socklisten:TDCC_SEND_TEMP:{
drawrect -fn @TDCC $colour(back) $colour(back) 5 110 1000 15
drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Connection accepted
drawrect -fn @TDCC $colour(back) $colour(back) 5 125 1000 15
drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Transfering file, standby...
.timerTDCC 0 1 draw.info
sockaccept TDCC_SEND
tdcc.send.packet
}
alias tdcc.send.packet {
bread %tdcc.send.file %tdcc.send.pos 4096 &data
sockwrite -n TDCC_SEND &data
inc %tdcc.send.pos 4096
if (%tdcc.send.sent => %tdcc.send.size) {
sockclose TDCC_SEND
sockclose TDCC_SEND_TEMP
.timerTDCC off
drawrect -fn @TDCC $colour(back) $colour(back) 5 110 1000 15
drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Connection closed
drawrect -fn @TDCC $colour(back) $colour(back) 5 125 1000 15
drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Transfer completed
drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.size
if ($round(%tdcc.progress.kps,2) == $null) { set %tdcc.done.kps n/a | set %tdcc.done.time n/a) }
else { set %tdcc.done.kps $round(%tdcc.progress.kps,2) | set %tdcc.done.time $duration(%tdcc.progress.elapsed) }
echo $colour(ctcp) -s TDCC Send of %tdcc.send.file to %tdcc.send.nick completed ( $+ %tdcc.done.time %tdcc.done.kps $+ kps $+ )
}
}
on 1:sockwrite:TDCC_SEND:{
set %tdcc.send.sent $sock($sockname).sent
drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.sent
draw.progress
tdcc.send.packet
}
on 1:sockclose:TDCC_SEND:{
echo 9 -a TDCC: Transfer complete!
sockclose TDCC_SEND
unset %tdcc.*
.timerTDCC off
if (%tdcc.send.sent != %tdcc.send.size) {
echo $colour(ctcp) -s TDCC Send of %tdcc.send.file to %tdcc.send.nick incomplete (Connection terminated)
}
}
on 1:CLOSE:@TDCC: {
unset %tdcc.*
.timerTDCC off
sockclose TDCC*
}
on 1:sockopen:TDCC_RECIEVE:{ .timerTDCC 0 1 draw.info }
on 1:sockread:TDCC_RECIEVE:{
:np
sockread &data
bwrite [ " $+ [ %tdcc.rcvd.file ] $+ " ] -1 &data
set %tdcc.send.sent $sock($sockname).rcvd
drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 200 75 Rcvd: $+ %tdcc.send.sent
draw.progress
if ($sock(rf).rq > 0) goto np
}
on 1:sockclose:TDCC_RECIEVE:{
drawrect -fn @TDCC $colour(back) $colour(back) 5 110 1000 15
drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Connection closed
drawrect -fn @TDCC $colour(back) $colour(back) 5 125 1000 15
drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Transfer completed
drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15
drawtext @TDCC $colour(info) Fixedsys 9 200 75 Rcvd: $+ %tdcc.send.size
sockclose TDCC
unset %tdcc.*
.timerTDCC off
}