home *** CD-ROM | disk | FTP | other *** search
/ isnet Internet / Isnet Internet CD.iso / prog / chat / 12 / 12.exe / SYSTEM / Xdcc.mrc < prev   
Encoding:
Text File  |  2000-02-24  |  18.3 KB  |  541 lines

  1. ;%%%%%%%%%%%%%%%%%%%%%%%%
  2. ;script iXdcc
  3. ;version 1.01
  4. ;author icN, Chutzpah, fixes by Quietust
  5. ;email quietust@ircN.org
  6. ;url http://www.ircN.org
  7. ;%%%%%%%%%%%%%%%%%%%%%%%%
  8. on 1:CONNECT { write -c $tp(queue.txt) }
  9. ctcp 1:XDCC {
  10.   set %pack $remove($3,$chr(35))
  11.   if ((%numpacks == $null) || (%numpacks == 0)) putserv NOTICE $nick :No files offered.
  12.   elseif (%pack > %numpacks) putserv NOTICE $nick :File $b($3) does not exist. /CTCP $me XDCC LIST.
  13.   elseif (($2 == list) && ($3)) {
  14.       set %nopath $nopath(%file [ $+ [ %pack ] ] )
  15.       set %path %file [ $+ [ %pack ] ]
  16.       putserv NOTICE $nick :Pack: %filedesc [ $+ [ %pack ] ]
  17.       putserv NOTICE $nick : $+ $fix(10,Size) File
  18.       putserv NOTICE $nick : $+ $fix(10,$file(%path).size) %nopath
  19.       putserv NOTICE $nick :---------- -------------------------------------------------
  20.       putserv NOTICE $nick : $+ $fix(10,$file(%path).size) 1 file(s) :: %get [ $+ [ %pack ] ] Snags
  21.       unset %nopath %ngets %path
  22.     }
  23.     elseif (($2 == send) || ($2 == get)) {
  24.       if (%pack !isnum) putserv NOTICE $nick :File $b($3) does not exist. /CTCP $me XDCC HELP.
  25.       elseif ($send(0) >= %maxslots) {
  26.         if ($qlen >= %maxqueue) {
  27.           putserv NOTICE $nick :All %maxslots slots are full--queue of %maxqueue is full. Try again later.
  28.           return
  29.         }
  30.         set %qds $read -ns $+ $nick $tp(queue.txt)
  31.         if (%qds == %pack) putserv NOTICE $nick :Queue: Pack %pack is already in your queue. It will be sent as slots open.
  32.         else {
  33.           write $tp(queue.txt) $nick %pack
  34.           putserv NOTICE $nick :DCC Limit reached: Will send you pack %pack when a slot opens.
  35.           putserv NOTICE $nick :You are in queue position $qlen of %maxqueue $+ .
  36.         }
  37.       }
  38.       else psend $nick %pack
  39.     }
  40.     elseif ($2 == queue) putserv NOTICE $nick :Queue Length: $qlen / %maxqueue
  41.     elseif ($2 == list) nlist $nick
  42.     elseif ($2 == help) {
  43.       putserv NOTICE $nick :/CTCP $me XDCC LIST - to get the list of offered packs.
  44.       putserv NOTICE $nick :/CTCP $me XDCC LIST #<N> - to get more info on pack #<N>.
  45.       putserv NOTICE $nick :/CTCP $me XDCC SEND #<N> - to send pack #<N>.
  46.     }
  47.     else putserv NOTICE $nick :Unrecognized request. Try /CTCP $me XDCC HELP.
  48. }
  49. on 1:SENDFAIL:* {
  50.   if ($window(@Xdcc)) x.stat -u
  51.   cs
  52. }
  53. on 1:FILESENT:* {
  54.   if ($send($nick).cps isnum) {
  55.     if (%lrecord !isnum) set %lrecord 0
  56.     if ($send($nick).cps > %lrecord) {
  57.       set %record $round($div($send($nick).cps,1000),1)
  58.       set %lrecord $send($nick).cps
  59.       iecho New record: $b($kps($send($nick).cps)) $+ k/s
  60.       putserv NOTICE $nick :New record set by you at $b($kps($send($nick).cps)) $+ k/s!
  61.     }
  62.   }
  63.   if ($window(@Xdcc)) x.stat -u
  64.   cs
  65. }
  66. alias cs {
  67.   set %i 0
  68.   :start
  69.   inc %i
  70.   if ($send(%i)) {
  71.     if ($send(%i).status == inactive) {
  72.       close -s $send(%i)
  73.       dec %i
  74.     }
  75.     goto start
  76.   }
  77.   qs
  78. }
  79. alias psend {
  80.   if (($2 > %numpacks) || ($2 == $null) || ($send(0) >= %maxslots)) return
  81.   qnotice $1 Ready to send $u(%filedesc [ $+ [ $2 ] ] ) $+ , you will need $b($alof($file(%file [ $+ [ $2 ] ] )).size)) free.
  82.   inc %get [ $+ [ $2 ] ]
  83.   .timer 1 %chsend checksend $1 $nopath(%file [ $+ [ $2 ] ] )
  84.   if (%minsp [ $+ [ $2 ] ] != $null) .timer 1 50 checkspeed $1 $nopath(%file [ $+ [ $2 ] ] ) %minsp [ $+ [ $2 ] ]
  85.   elseif (%msall == on) .timer 1 50 checkspeed $1 $nopath(%file [ $+ [ $2 ] ] ) %allspeed
  86.   dcc send $1 %file [ $+ [ $2 ] ]
  87. }
  88. alias checksend {
  89.   set %i 0
  90.   :start
  91.   inc %i
  92.   if ($send(%i)) {
  93.     if (($send(%i) == $1) && ($send(%i).file == $2) && ($send(%i).status == waiting)) {
  94.       close -s $1 $2
  95.       putserv NOTICE $1 :DCC send of $b($2) has timed out.
  96.       iecho XDCC send of $sc($2) to $hc($1) has timed out.
  97.       qs
  98.     }
  99.     else goto start
  100.   }
  101. }
  102. alias tml {
  103.   set %tml 0
  104.   set %tmp01 0
  105.   set %g 0
  106.   :start
  107.   inc %g
  108.   if (%g <= %numpacks) {
  109.     inc %tmp01 $mpy(%get [ $+ [ %g ] ] ,$file(%file [ $+ [ %g ] ] ).size)
  110.     goto start
  111.   }
  112.   set %tml $round($div(%tmp01,1048576),1)
  113.   unset %tmp01
  114.   return %tml
  115. }
  116. alias tmo {
  117.   set %i 0
  118.   set %tmp.x 0
  119.   :start
  120.   inc %i
  121.   if (%file [ $+ [ %i ] ] != $null) {
  122.     inc %tmp.x $file(%file [ $+ [ %i ] ] ).size
  123.     goto start
  124.   }
  125.   return $round($div(%tmp.x,1048576),1)
  126. }
  127. alias pmin {
  128.   if (($2 == $null) || ($1 > %numpacks)) iecho Syntax: /pmin <pack #> <minspeed in kb/s or 0 to clear>
  129.   elseif ($2 == 0) {
  130.     unset %minsp [ $+ [ $1 ] ]
  131.     iecho Removed minspeed for pack $hc($1) $+ .
  132.   }
  133.   else {
  134.     set %minsp [ $+ [ $1 ] ] $mpy($2,1024)
  135.     iecho Minspeed for Pack $1 $+ : $2 $+ kb/s.
  136.   }
  137. }
  138. alias minspeed {
  139.   if ($1 == 0) {
  140.     set %msall off
  141.     unset %allspeed
  142.     iecho Removed minspeed.
  143.   }
  144.   elseif ($1 isnum) {
  145.     set %msall on
  146.     set %allspeed $mpy($1,1024)
  147.     iecho Minspeed is now: $1 $+ kb/s
  148.   }
  149.   else iecho Syntax: /minspeed <minspeed in kb/s or 0 to clear>
  150. }
  151. alias doffer {
  152.   unset %pack %nopath %ngets %qds %numpacks %num %showsum %tmp* %tmo %xc %g %tml %msall %allspeed %minsp* %file* %fcomment* %record %lrecord %get*
  153.   window -c @Xdcc
  154.   timoff %xdcc.timer1 xdcc.timer1
  155.   .remove $tp(xstatus.txt)
  156.   iecho All packs have been deleted.
  157.   cq
  158. }
  159. alias addpack {
  160.   if (%numpacks == $null) set %numpacks 0
  161.   set %num $pls(1,%numpacks)
  162.   set %get [ $+ [ %num ] ] 0
  163.   set %filedesc [ $+ [ %num ] ] $$?="Pack Description for [ [ %num ] $+ ] :"
  164.   set %fcomment [ $+ [ %num ] ] $?="Comment for [ %num ] (press cancel for none)"
  165.   set %file [ $+ [ %num ] ] $$dir="Select File for Pack [ %num ] " *.*
  166.   set %numpacks %num
  167.   iecho Pack $hc(%num) has been added.
  168.   unset %num
  169. }
  170. alias editpack {
  171.   if ($1 == $null) {
  172.     iecho Syntax: /editpack <pack #>
  173.     return
  174.   }
  175.   set %num $1
  176.   set %get [ $+ [ %num ] ] 0
  177.   set %filedesc [ $+ [ %num ] ] $$?="Pack Description for [ [ %num ] $+ ] :"
  178.   set %fcomment [ $+ [ %num ] ] $?="Comment for [ %num ] (press cancel for none)"
  179.   set %file [ $+ [ %num ] ] $dir="Select File for Pack [ %num ] " *.*
  180.   iecho Pack $hc(%num) has been edited.
  181.   unset %num
  182.   tmo
  183. }
  184. alias delpack {
  185.   if ($1 == $null) iecho Syntax: /delpack <pack #>
  186.   elseif ((%numpacks == 0) || (%numpacks == $null)) iecho You have no offer set.
  187.   elseif ($1 > %numpacks) iecho You have only $hc(%numpacks) pack(s) offered.
  188.   elseif (%numpacks == 1) doffer
  189.   elseif ($1 == %numpacks) {
  190.     unset %file [ $+ [ $1 ] ]
  191.     unset %filedesc [ $+ [ $1 ] ]
  192.     unset %get [ $+ [ $1 ] ]
  193.     unset %fcomment [ $+ [ $1 ] ]
  194.     dec %numpacks
  195.     iecho Pack $hc($1) has been removed.
  196.   }
  197.   else {
  198.     set %i $1
  199.     :start
  200.     inc %i
  201.     if (%i <= %numpacks) {
  202.       set %file [ $+ [ $sub(%i,1) ] ] %file [ $+ [ %i ] ]
  203.       set %get [ $+ [ $sub(%i,1) ] ] %get [ $+ [ %i ] ]
  204.       set %filedesc [ $+ [ $sub(%i,1) ] ] %filedesc [ $+ [ %i ] ]
  205.       if (%fcomment [ $+ [ %i ] ] != $null) set %fcomment [ $+ [ $sub(%i,1) ] ] %fcomment [ $+ [ %i ] ]
  206.       goto start
  207.     }
  208.     .save -rv vars.mrc
  209.     unset %file [ $+ [ %numpacks ] ]
  210.     unset %filedesc [ $+ [ %numpacks ] ]
  211.     unset %get [ $+ [ %numpacks ] ]
  212.     unset %fcomment [ $+ [ %numpacks ] ]
  213.     dec %numpacks
  214.     iecho Pack $hc($1) has been removed.
  215.   }
  216. }
  217. alias nlist {
  218.   if ((%numpacks == 0) || (%numpacks == $null)) {
  219.     iecho You have no packs to offer.
  220.     return
  221.   }
  222.   if ($1 == $null) {
  223.     iecho $hc(NLIST) sent to $hc($active) at $hc($atime) $+ .
  224.     sdcc putserv NOTICE $active
  225.   }
  226.   else {
  227.     iecho $hc(NLIST) sent to $hc($1) at $hc($atime) $+ .
  228.     sdcc putserv NOTICE $1
  229.   }
  230. }
  231. alias plist {
  232.   if ((%numpacks == 0) || (%numpacks == $null)) {
  233.     iecho You have no packs to offer.
  234.     return
  235.   }
  236.   if ($1 == $null) {
  237.     iecho $hc(PLIST) sent to $active at $hc($atime) $+ .
  238.     sdcc putserv PRIVMSG $active
  239.   }
  240.   else {
  241.     iecho $hc(PLIST) sent to $hc($1) at $hc($atime) $+ .
  242.     sdcc putserv PRIVMSG $1
  243.   }
  244. }
  245. alias oplist {
  246.   if ((%numpacks == 0) || (%numpacks == $null)) iecho You have no packs to offer.
  247.   else {
  248.     if ($1 == $null) {
  249.       iecho $hc(NLIST) sent to $hc( [ $active ops ] ) at $hc($atime) $+ .
  250.       sdcc xwall $active
  251.     }
  252.     else {
  253.       iecho $hc(NLIST) sent to $hc( [ #$$1 ops ] ) at $hc($atime) $+ .
  254.       sdcc xwall #$$1
  255.     }
  256.   }
  257. }
  258. alias xwall {
  259.   if (%efnet.hybrid6) qnotice @ $+ $1 [ $+ %wall $+ : $+ $1 $+ ] $2-
  260.   elseif ($me isop $1) .onotice # [ $+ %wall $+ : $+ $1 $+ ] $2-
  261.   else {
  262.     unset %tmp.xwall
  263.     set %i.xwall 0
  264.     :start
  265.     inc %i.xwall
  266.     if ($opnick($1,%i.xwall) != $null) {
  267.       set %xtmp.wall $addtok(%tmp.xwall,$opnick($1,%i.xwall),44)
  268.       goto start
  269.     }
  270.     mnotice %tmp.xwall [ $+ %wall $+ : $+ $1 $+ ] $2-
  271.   }
  272. }
  273. alias sdcc {
  274.   var %z
  275.   if ($1 == putserv) set %z :
  276.   $1- %z $+ Packs offered ( $+ %numpacks $+ ), '/CTCP $me xdcc HELP'
  277.   if (%msall == on) $1- $z $+ Slots ( $+ $sub(%maxslots,$send(0)) $+ / $+ %maxslots $+ ) Queue ( $+ $qlen $+ / $+ %maxqueue $+ ) Min ( $+ $div(%allspeed,1024) $+ kb/s) Record ( $+ %record $+ kb/s)
  278.   else $1- %z $+ Slots ( $+ $sub(%maxslots,$send(0)) $+ / $+ %maxslots $+ ) Queue ( $+ $qlen $+ / $+ %maxqueue $+ ) Record ( $+ %record $+ kb/s)
  279.   set %num 0
  280.   :start
  281.   inc %num
  282.   if (%num <= %numpacks) {
  283.     $1- %z $+ ( $+ $lfix(2,$b(%num)) $+ ) [ $+ $lfix(3,%get [ $+ [ %num ] ] ) $+ x / $lfix(5,$alof($file(%file [ $+ [ %num ] ] ).size)) ] %filedesc [ $+ [ %num ] ]
  284.     if (%fcomment [ $+ [ %num ] ] != $null) $1- %z $+   ^- %fcomment [ $+ [ %num ] ]
  285.     goto start
  286.   }
  287.   if (%showsum == on) $1- %z $+ Total Offered ( $+ $tmo $+ m) Total Leeched ( $+ $tml $+ m)
  288. }
  289. alias checkspeed {
  290.   if ($send($1).file == $2) {
  291.     if ($send($1).status == waiting) {
  292.       putserv NOTICE $1 :You have DCCs pending, please accept them.
  293.       .timer 1 60 checkspeed $1-
  294.     }
  295.     elseif ($send(%i).cps < $3) {
  296.       putserv NOTICE $1 :Sorry, XDCC send of $2 at $div($send(%i).cps,1024) $+ k/s is transferring too slowly (minimum $div($3,1024) $+ k/s), closing connection.
  297.       close -s $1 $2
  298.       if ($window(@Xdcc)) x.stat -u
  299.       qs
  300.     }
  301.   }
  302. }
  303. alias xdccload {
  304.   if ($1 == $null) iecho Syntax: /xdccload <offer name>
  305.   elseif ($readini -n $td(xdcc.txt) $1 numpacks == $null) iecho No such offer in xdcc save.
  306.   else {
  307.     set %i 0
  308.     if ($readini -n $td(xdcc.txt) $1 summary == on) set %showsum on
  309.     else set %showsum off
  310.     set %numpacks $readini -n $td(xdcc.txt) $1 numpacks
  311.     :start
  312.     inc %i
  313.     if (%i > %numpacks) iecho XDCC offer $hc($1) has been loaded.
  314.     else {
  315.       set %file [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 file [ $+ [ %i ] ]
  316.       set %filedesc [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 desc [ $+ [ %i ] ]
  317.       set %get [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 get [ $+ [ %i ] ]
  318.       if ($readini -n $td(xdcc.txt) $1 fc [ $+ [ %i ] ] == yes) set %fcomment [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 comment [ $+ [ %i ] ]
  319.       goto start
  320.     }
  321.   }
  322. }
  323. alias xdccsave {
  324.   if ($1 == $null) iecho Syntax: /xdccsave <offer name>
  325.   elseif ((%numpacks == 0) || (%numpacks == $null)) iecho No offer to save.
  326.   else {
  327.     set %i 0
  328.     if (%showsum == on) writeini $td(xdcc.txt) $1 summary on
  329.     writeini $td(xdcc.txt) $1 numpacks %numpacks
  330.     :start
  331.     inc %i
  332.     if (%i > %numpacks) iecho XDCC offer $hc($1) has been saved.
  333.     else {
  334.       writeini $td(xdcc.txt) $1 file [ $+ [ %i ] ] %file [ $+ [ %i ] ]
  335.       writeini $td(xdcc.txt) $1 get [ $+ [ %i ] ] %get [ $+ [ %i ] ]
  336.       writeini $td(xdcc.txt) $1 desc [ $+ [ %i ] ] %filedesc [ $+ [ %i ] ]
  337.       if (%fcomment [ $+ [ %i ] ] != $null) {
  338.         writeini $td(xdcc.txt) $1 comment [ $+ [ %i ] ] %fcomment [ $+ [ %i ] ]
  339.         writeini $td(xdcc.txt) $1 fc [ $+ [ %i ] ] yes
  340.       }
  341.       goto start
  342.     }
  343.   }
  344. }
  345. alias qs {
  346.   if ($send(0) >= %maxslots) return
  347.   set %i 0
  348.   :start
  349.   inc %i
  350.   if (%i <= $qlen) {
  351.     set %qs $read -nl [ $+ [ %i ] ] $tp(queue.txt)
  352.     if ($send(0) < %maxslots) {
  353.       psend %qs
  354.       write -dl [ $+ [ %i ] ] $tp(queue.txt)
  355.       dec %i
  356.     }
  357.     else {
  358.       iecho $gettok(%qs,1,32) is in queue position %i of %maxqueue $+ .
  359.       putserv NOTICE $gettok(%qs,1,32) :You are in queue position %i of %maxqueue $+ .
  360.     }
  361.     goto start
  362.   }
  363.   cs
  364. }
  365. alias pchannels {
  366.   if ($1 ischan) {
  367.     .timer 0 %tc plist $1
  368.     if ($1 == $null) iecho Sending PLIST to all channels every $hc($div(%tc,60)) minutes.
  369.     else iecho Sending PLIST to $hc($1) every $hc($div(%tc,60)) minutes.
  370.   }
  371.   else {
  372.     .timer 0 %tc plist $?="Enter channel to send plist to (cancel for all):"
  373.     if ($! == $null) iecho Sending PLIST to all channels every $hc($div(%tc,60)) minutes.
  374.     else iecho Sending PLIST to $hc($!) every $hc($div(%tc,60)) minutes.
  375.   }
  376. }
  377. alias pmsg {
  378.   set %pmsg $?="Enter channel to send pmsg to (cancel for all)"
  379.   if (%pmsg == $null) set %pmg $mychans
  380.   else set %pmg %pmsg
  381.   .timer 0 %tc poffer %pmg is offering $b(%numpacks) pack(s). Type '/CTCP $me XDCC LIST' for a complete listing.
  382.   if (%pmsg == ame) iecho Sending offer message to all channels every $hc($div(%tc,60)) minutes.
  383.   else iecho Sending offer message to $hc($!) every $hc($div(%tc,60)) minutes.
  384.   unset %pmg %pmsg
  385. }
  386. alias poffer describe $1-
  387. alias poff {
  388.   if ($1) {
  389.     set %i 0
  390.     :start
  391.     inc %i
  392.     if ($timer(%i)) {
  393.       if (($timer(%i).com == plist $1) || ($timer(%i).com == poffer $1)) {
  394.         timoff $timer(%i)
  395.         iecho $upper($gettok($timer(%i).com,1,32)) timer for $hc($1) has been halted.
  396.       }
  397.       else goto start
  398.     }
  399.     else iecho Unable to locate PLIST timer for $hc($1) $+ .
  400.   }
  401.   else {
  402.     set %i 0
  403.     :start
  404.     inc %i
  405.     if ($timer(%i)) {
  406.       if (($gettok($timer(%i).com,1,32) == plist) || ($gettok($timer(%i).com,1,32) == poffer)) {
  407.         iecho $upper($gettok($timer(%i).com,1,32)) timer for $hc($gettok($timer(%i).com,2,32)) has been halted.
  408.         timoff $timer(%i)
  409.       }
  410.       goto start
  411.     }
  412.   }
  413. }
  414. alias xview {
  415.   if ((%numpacks == 0) || (%numpacks == $null)) iecho You have no packs offered.
  416.   else {
  417.     window -a @Xview %xvloc @Xview
  418.     sdcc aline @Xview á
  419.   }
  420. }
  421. alias xstatus {
  422.   if ($1 == on) {
  423.     set %xstatus on
  424.     .timer 0 3 if ($send(0)) x.stat -u
  425.     set %xdcc.timer1 $ltimer
  426.     x.stat -i
  427.   }
  428.   elseif ($1 == off) {
  429.     set %xstatus off
  430.     if ($window(@Xdcc)) set %xloc $swlc(@Xdcc)
  431.     window -c @Xdcc
  432.     timoff %xdcc.timer1 xdcc.timer1
  433.   }
  434.   else iecho Syntax: /xstatus <on|off>
  435. }
  436. alias x.stat {
  437.   if ($1 == -i) {
  438.     if ($window(@Xdcc)) return
  439.     window -albdo @Xdcc %xloc @Xdcc Courier New 11
  440.     aline @Xdcc $fix(2,$chr(35)) $fix(10,Nick) Pack $fix(5,Speed) P% Timeleft Elapsed
  441.     set %i 0
  442.     :start
  443.     inc %i
  444.     if (%i <= %maxslots)  {
  445.       if (($send(%i)) && ($send(%i).status == active)) aline @Xdcc %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,$kps($send(%i).cps)) $lfix(2,$send(%i).pc) $center(8,$rsc($duration($div($sub($send(%i).size,$d.s($send(%i).sent)),$d.s($send(%i).cps))))) $center(8,$rsc($duration($div($d.s($send(%i).sent),$d.s($send(%i).cps)))))
  446.       elseif ($send(%i)) aline @Xdcc %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,0.00) $lfix(2,0) $str(0,3) $send(%i).status
  447.       else aline @Xdcc %i $+ . $str( ,7) empty $str( ,10) slot
  448.       goto start
  449.     }
  450.     else sline @Xdcc 2
  451.   }
  452.   elseif ($1 == -u) {
  453.     if ($window(@Xdcc) == $null) {
  454.       timoff %xdcc.timer1 xdcc.timer1
  455.       return
  456.     }
  457.     set %i 0
  458.     :start
  459.     inc %i
  460.     if (%i <= %maxslots) {
  461.       if (($send(%i)) && ($send(%i).status == active)) rline @Xdcc $pls(%i,1) %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,$kps($send(%i).cps)) $lfix(2,$send(%i).pc) $center(8,$rsc($duration($div($sub($d.s($send(%i).size),$d.s($send(%i).sent)),$d.s($send(%i).cps))))) $center(8,$rsc($duration($div($d.s($send(%i).sent),$d.s($send(%i).cps)))))
  462.       elseif ($send(%i)) rline @Xdcc $pls(%i,1) %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,0.00) $lfix(2,0) $str(á,3) $send(%i).status
  463.       else rline @Xdcc $pls(%i,1) %i $+ . $str(á,7) empty $str(á,10) slot
  464.       goto start
  465.     }
  466.     else sline @Xdcc 2
  467.   }
  468. }
  469. alias x.file {
  470.   set %j 0
  471.   :start
  472.   inc %j
  473.   if (%j <= %numpacks) {
  474.     if ($nopath(%file [ $+ [ %j ] ] ) == $1) return %j
  475.     goto start
  476.   }
  477.   return n/a
  478. }
  479. alias timelimit set %chsend $mpy(60,$$1) | iecho XDCC Send Timeout set to $hc($1) minutes.
  480. alias maxslots set %maxslots $$1 | iecho Maximum slots set to $hc($1) slots.
  481. alias qmax set %maxqueue $$1 | iecho Queue size set to $hc($1) slots.
  482. alias ptime set %tc $mpy($$1,60) | iecho PLIST timer set to every $hc($1) minutes.
  483. alias cq write -c $tp(queue.txt)
  484. alias qlen return $iif($isfile($tp(queue.txt)),$lines($tp(queue.txt)),0)
  485. menu @Xdcc {
  486.   dclick if ($send($sub($1,1))) close -s $send($sub($1,1)) $send($sub($1,1)).file
  487.   exit { set %xloc $swlc(@Xdcc) | window -c @Xdcc | timoff %xdcc.timer1 xdcc.timer1 }
  488. }
  489. menu @Xview {
  490.   dclick { set %xvloc $swlc(@Xview) | window -c @Xview }
  491.   exit { set %xvloc $swlc(@Xview) | window -c @Xview }
  492. }
  493. menu Channel {
  494.   xdcc
  495.   .offer
  496.   ..msg
  497.   ...all channels { plist $mychans }
  498.   ...current chan { plist }
  499.   ..notice
  500.   ...all channels { nlist $mychans }
  501.   ...current chan { nlist }
  502.   ..-
  503.   ..timed msg
  504.   ...select { pmsg }
  505.   ...-
  506.   ...disable
  507.   ....all { poff }
  508.   ....one { poff $$?="Enter channel:" }
  509.   ..timed offer
  510.   ...select { pchannels }
  511.   ...-
  512.   ...disable
  513.   ....all { poff }
  514.   ....one { poff $$?="Enter channel:" }
  515.   .setup
  516.   ..new offer { offer }
  517.   ..add pack { addpack }
  518.   ..dele pack { delpack $$?="Pack number to edit" }
  519.   ..edit pack
  520.   ...description { xdcc desc $$?="pack number to edit:" }
  521.   ...comment { xdcc note $$?="pack number to edit:" }
  522.   ...minspeed { pmin $$?="pack number" $$?="minspeed in kb/s" }
  523.   ...change file { xdcc file $$?="pack number to edit:" }
  524.   ...-
  525.   ...edit whole { editpack $$?="Pack number to edit" }
  526.   ..view offer { xview }
  527.   ..-
  528.   ..queue { qmax $$?="queue size:" }
  529.   ..time limit { timelimit $$?="time limit in minutes:" }
  530.   ..max slots { maxslots $$?="maximum slots:" }
  531.   ..msg delay { ptime $$?="delay in minutes:" }
  532.   ..$toggled(%msall) minspeed { minspeed $iif(%msall == off,$$?="minspeed in kb/s:",0) }
  533.   ..$toggled(%showsum) summary { toggle showsum }
  534.   ..-
  535.   ..load offer { xdccload $$?="Enter offer name to load:" }
  536.   ..save offer { xdccsave $$?="Enter offer name to save:" }
  537.   ..-
  538.   ..clear offer { doffer }
  539.   .$toggled(%xstatus) status { xstatus $toggler(%xstatus) }
  540. }
  541.