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
}