home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / comm / tcp / AmIrXDCC_130.lha / XDCC.AMIRX < prev   
Text File  |  1995-12-28  |  24KB  |  823 lines

  1. /* AmIRC XDCC script v1.30 by WiZ-Id (wizkid@crocker.com).
  2.         Works only with AmIRC V0.76Beta or higher.
  3.         Converted from Josef Faulkner's Grapevine XDCC script.
  4.         $VERS: AmIRC XDCC.AmIRX Version 1.30 (12.27.95)
  5.  
  6. Installation:
  7.         Add an ALIAS of /xdcc to "/rx rexx/xdcc.amirx %p" in the LIST SETUP window.
  8.         Add rexx/xdcc.amirx PMSG or CTCP to Setup/Events "Private Message" and & "CTCP" Rexx strings.
  9.         Assign xdcc: to a directory where your xdcc files are to be stored
  10.         For more (better) instructions, look to the readme file.
  11.  
  12. History:
  13.         V1.01 A few little fixes... maybe this will help
  14.         V1.02 Should have fixed the loopback problems....
  15.       { V1.03 More little bug fixes e.g (XDCC HELP), cosmetic fixes (done by Stoebi)
  16.       { V1.03 More cosmetic fixes (correct from *IX)                           (Pal)
  17.       { V1.03 Mostly PhoEniX compatible commands                               (Pal)
  18.         V1.04 Implements changes on 1.03 into the 1.02 version.  V1.03 did not
  19.               have the Loop bug fixed.
  20.         V1.10 Added PACKET's!!! See Readme!
  21.         V1.11 Just cleaning up version numbers
  22.         V1.20 SLOTS!
  23.         V1.30 Auto OP list... & Extended Local Help
  24.         V1.30 SET SWITCH and OPSWITCH to control features.
  25.  
  26. Help Text:
  27. %
  28. @
  29.         AmIRC XDCC command help:
  30.         Usage: xdcc <cmd> [arg]
  31. 
  32.         <cmd> can be any of the following:
  33.         LIST                              - View a list of offered packs.
  34.         GET #<N>                          - Request pack #<N> for DCC.
  35.         HELP                              - See this help listing
  36. @
  37.         ADD     <filename> <description>  - Add a file to your list
  38.         OFFER   <filename> <desc>         - Same as ADD
  39.         LIST    [#|<nick>]                - Send list to channel (#) or nick
  40.         NOTICE  <#>                       - Pulbic notice to channel (#) of offer
  41.         SEND    <nick> <pack #|file>      - To send file(s) to someone
  42.         DEL     <file|pack #>             - Removes the item from your list
  43.         REM     <file|pack #>             - Same as DEL
  44.         DOFFER  <file|pack #>             - Same as DEL
  45.         FADD    <nick>                    - Add <nick> to your friends list
  46.         ADDF    <nick>                    - Same as FADD
  47.         FLIST                             - List your Friends
  48.         LISTF                             - Same as FLIST
  49.         FREM    <number>                  - Remove someone from your friends list
  50.         FDEL    <number>                  - Same as FREM
  51.         REMF    <number>                  - Same as FREM
  52.         OPADD   <nick>                    - Add <nick> to your OPs list
  53.         ADDOP   <nick>                    - Same as OPADD
  54.         OPLIST                            - List your OPs
  55.         LISTOP                            - Same as OPLIST
  56.         OPREM   <number>                  - Remove someone from your OPs list
  57.         OPDEL   <number>                  - Same as OPREM
  58.         REMOP   <number>                  - Same as OPREM
  59.         SET     SEC|KICK <ON|OFF>         - Set the security or kick functions to on or off
  60.         SET     MAX <slots>               - Set the maximum number of DCC slots
  61.         SET     SWITCH   <ON|OFF>         - Set XDCC to ON or OFF
  62.         SET     OPSWITCH <ON|OFF>         - Set AutoOP feature to ON or OFF
  63.         INFO    [#|<nick>]                - To show current settings
  64. %
  65. */
  66.  
  67. options results
  68. if ~show('L','rexxsupport.library') then if ~addlib('rexxsupport.library',0,-30,0) then do
  69.         'echo You need rexxsupport.library version 30 or greater in libs:'
  70.         exit 10
  71. end
  72.  
  73.  
  74.  
  75. PARSE ARG CMD NAME FILE
  76.  
  77. CMD=UPPER(STRIP(CMD))
  78. NAME=STRIP(NAME)
  79. FILE=STRIP(FILE)
  80.  
  81. /************************/
  82. /******* DEFAULTS *******/
  83. /************************/
  84. /**/  Security='OFF'  /**/
  85. /**/  Kick='OFF'      /**/
  86. /**/  Maxslots=5      /**/
  87. /**/  Switch='ON'     /**/
  88. /**/  OpSwitch='OFF'  /**/
  89. /************************/
  90.  
  91. getmynick
  92. mynick=result
  93. getlastline
  94. last=result
  95.  
  96. b=d2c(2)
  97. u=''
  98. sfile='xdcc:list'
  99. ffile='xdcc:friends'
  100. ofile='xdcc:oplist'
  101.  
  102.  
  103. IF exists('env:XDCCSWITCH') THEN Do
  104.   Open(1,'ENV:XDCCSWITCH',r)
  105.   Switch=Word(Readln(1),1)
  106.   Close(1)
  107. END
  108. IF exists('env:XDCCOPSWITCH') THEN Do
  109.   Open(1,'ENV:XDCCOPSWITCH',r)
  110.   OpSwitch=Word(Readln(1),1)
  111.   Close(1)
  112. END
  113. IF exists('env:XDCCSECURITY') THEN Do
  114.   Open(1,'ENV:XDCCSECURITY',r)
  115.   Security=Word(Readln(1),1)
  116.   Close(1)
  117. END
  118. IF exists('env:XDCCKICK') THEN Do
  119.   Open(1,'ENV:XDCCKICK',r)
  120.   Kick=Word(Readln(1),1)
  121.   Close(1)
  122. END
  123. IF exists('env:XDCCMAX') THEN Do
  124.   Open(1,'ENV:XDCCMAX',r)
  125.   Maxslots=Word(Readln(1),1)
  126.   Close(1)
  127. END
  128.  
  129. SELECT
  130.   WHEN (CMD='ADD')|(CMD='OFFER') THEN DO
  131.     if exists('xdcc:'name) then do
  132.       if exists(sfile) then call open(1,sfile,a)
  133.       else call open(1,sfile,w)
  134.       IF Right(name,1)='/' THEN DO
  135.         call writeln(1,name' 'file' PACK')
  136.         pname=left(name,pos('/',name)-1)
  137.         ADDRESS COMMAND 'c:list xdcc:'name'#? LFORMAT="%n %l" >xdcc:'pname'list'
  138.         call close(1)
  139.       END
  140.       ELSE DO
  141.         call writeln(1,name' 'file)
  142.         call close(1)
  143.       END
  144.       cnt=0
  145.       call open(1,sfile,r)
  146.       do until eof(1)
  147.         call readln(1)
  148.         cnt=cnt+1
  149.       end
  150.       call close(1)
  151.       'echo 'u||name||u' added to list as number 'cnt-1'.'
  152.     end
  153.   END
  154.   WHEN (CMD='FADD')|(CMD='ADDF') THEN DO
  155.     "userhost "name
  156.     file=result
  157.     IF Datatype(left(Right(file,Length(file)-Pos("@",file)),1),n) THEN file=Left(file,pos('.',file,Length(file)-4))||"*"
  158.     ELSE file=Left(file,pos('@',file))||"*."||Right(file,Length(file)-Pos(".",file))
  159.     if exists(ffile) then call open(1,ffile,a)
  160.     else call open(1,ffile,w)
  161.     call writeln(1,name' 'file)
  162.     call close(1)
  163.     cnt=0
  164.     call open(1,ffile,r)
  165.     do until eof(1)
  166.       call readln(1)
  167.       cnt=cnt+1
  168.     end
  169.     call close(1)
  170.     'echo 'u||name||u' added to friends list as number 'cnt-1'.'
  171.     'RAW PRIVMSG 'name' :You have been added to 'mynick||d2c(39)'s Friends list'
  172.   end
  173.   WHEN (CMD='FLIST')|(CMD='LISTF') THEN call flist
  174.   WHEN (CMD='FREM')|(CMD='FDEL')|(CMD='REMF') THEN CALL FDEL
  175.   WHEN (CMD='OPADD')|(CMD='ADDOP') THEN DO
  176.     "userhost "name
  177.     file=result
  178.     IF Datatype(left(Right(file,Length(file)-Pos("@",file)),1),n) THEN file=Left(file,pos('.',file,Length(file)-4))||"*"
  179.     ELSE file=Left(file,pos('@',file))||"*."||Right(file,Length(file)-Pos(".",file))
  180.     if exists(ofile) then call open(1,ofile,a)
  181.     else call open(1,ofile,w)
  182.     call writeln(1,name' 'file)
  183.     call close(1)
  184.     cnt=0
  185.     call open(1,ofile,r)
  186.     do until eof(1)
  187.       call readln(1)
  188.       cnt=cnt+1
  189.     end
  190.     call close(1)
  191.     'echo 'u||name||u' added to OPs list as number 'cnt-1'.'
  192.     'RAW PRIVMSG 'name' :You have been added to 'mynick||d2c(39)'s OPs list'
  193.   END
  194.   WHEN (CMD='OPLIST')|(CMD='LISTOP') THEN call oplist
  195.   WHEN (CMD='OPREM')|(CMD='OPDEL')|(CMD='REMOP') THEN CALL OPDEL
  196.  
  197.   when (CMD='REM')|(CMD='DEL')|(CMD='DOFFER') then do
  198.     if exists(sfile) then do
  199.       call open(1,sfile,r)
  200.       call open(2,'T:xdcc.temp',w)
  201.       nfound=1
  202.       if datatype(name,n) then do
  203.         cnt=0
  204.         do until eof(1)
  205.           cnt=cnt+1
  206.           text=readln(1)
  207.           if cnt~=name then call writeln(2,text)
  208.           else do
  209.             if eof(1)=0 then do
  210.             'echo Removing Item #'cnt', 'u||text||u' from xdcc list.'
  211.             nfound=0
  212.             end
  213.           end
  214.         end
  215.       end
  216.       else do
  217.         do until eof(1)
  218.           text=readln(1)
  219.           if word(upper(text),1)~=upper(name) then call writeln(2,text)
  220.           else do
  221.             'echo Removing 'u||text||u' from xdcc list.'
  222.             nfound=0
  223.           end
  224.         end
  225.       end
  226.       call close(1)
  227.       call close(2)
  228.       if nfound then 'echo Nothing removed.'
  229.       else do
  230.         if exists('T:xdcc.temp') then do
  231.           call open(1,'T:xdcc.temp',r)
  232.           call open(2,sfile,w)
  233.           cnt=1
  234.           do until eof(1)
  235.             text=readln(1)
  236.             if (~eof(1))&(strip(text)>0) then do
  237.                call writeln(2,text)
  238.                cnt=0
  239.             end
  240.           end
  241.           call close(1)
  242.           call close(2)
  243.           call delete('T:xdcc.temp')
  244.         end
  245.         if cnt then do
  246.           'echo List now empty.'
  247.           call delete(sfile)
  248.         end
  249.       end
  250.     end
  251.     else 'echo List is empty.'
  252.   end
  253.   when CMD='NOTICE' then do
  254.     name='#'
  255.     call xdccinfo
  256.   END
  257.   when cmd='LIST' then call xdcclist
  258.   when cmd='SEND' then call xdccsend
  259.   when cmd='GET'  then call xdccsend
  260.   when cmd='HELP' then call xdcclocalhelp
  261.   when cmd='INFO' then call xdccinfo
  262.   WHEN cmd='SET' then DO
  263.     IF Left(Upper(name),3)='MAX' THEN DO
  264.       Open(1,'ENV:XDCCMAX',w)
  265.       Writeln(1,Upper(file))
  266.       Close(1)
  267.     END
  268.     IF Left(Upper(name),3)='SWI' THEN DO
  269.       Open(1,'ENV:XDCCSWITCH',w)
  270.       Writeln(1,Upper(file))
  271.       Close(1)
  272.     END
  273.     IF Left(Upper(name),3)='OPS' THEN DO
  274.       Open(1,'ENV:XDCCOPSWITCH',w)
  275.       Writeln(1,Upper(file))
  276.       Close(1)
  277.     END
  278.     IF Left(Upper(name),3)='SEC' THEN DO
  279.       Open(1,'ENV:XDCCSECURITY',w)
  280.       Writeln(1,Upper(file))
  281.       Close(1)
  282.       IF Upper(file)='OFF' THEN DO
  283.         Open(1,'ENV:XDCCKICK',w)
  284.         Writeln(1,Upper(file))
  285.         Close(1)
  286.       END
  287.     END
  288.     IF Left(Upper(name),3)='KIC' THEN DO
  289.       Open(1,'ENV:XDCCKICK',w)
  290.       Writeln(1,Upper(file))
  291.       Close(1)
  292.     END
  293.   END
  294.   WHEN (CMD='JOIN')&(Opswitch='ON') THEN DO
  295.     nick=LEFT(last,POS('!',last)-1)
  296.     nick=DELSTR(nick,1,1)
  297.     "userhost "nick
  298.     xfile=result
  299.     IF Datatype(left(Right(xfile,Length(xfile)-Pos("@",xfile)),1),n) THEN xfile=Left(xfile,pos('.',xfile,Length(xfile)-4))||"*"
  300.     ELSE xfile=Left(xfile,pos('@',xfile))||"*."||Right(xfile,Length(xfile)-Pos(".",xfile))
  301.  
  302.     Found=0
  303.     IF exists(ofile)then do
  304.       call open(1,ofile,r)
  305.       do until eof(1)
  306.         fline=readln(1)
  307.         IF Pos(xfile,fline) ~=0 THEN found=1
  308.       END
  309.       call close(1)
  310.     END
  311.     IF Found THEN  "SAY /OP "nick
  312.   END
  313.   WHEN (CMD='CTCP')|CMD='PMSG' THEN DO
  314.     clast=UPPER(last)
  315.     which=1
  316.     IF CMD='CTCP' THEN which=1
  317.     IF CMD='PMSG' THEN which=0
  318.     IF POS('OP',Left(Right(clast,Length(clast)-(POS(':',clast,2))-which),2)) ~=0 THEN DO
  319.       nick=LEFT(last,POS('!',last)-1)
  320.       nick=DELSTR(nick,1,1)
  321.       IF Switch='OFF' THEN DO
  322.         "RAW PRIVMSG "nick" :Sorry, AutoOP Service has been turned off"
  323.         RETURN
  324.       END
  325.       "userhost "nick
  326.       xfile=result
  327.       IF Datatype(left(Right(xfile,Length(xfile)-Pos("@",xfile)),1),n) THEN xfile=Left(xfile,pos('.',xfile,Length(xfile)-4))||"*"
  328.       ELSE xfile=Left(xfile,pos('@',xfile))||"*."||Right(xfile,Length(xfile)-Pos(".",xfile))
  329.       Found=0
  330.       IF exists(ofile)then do
  331.         call open(1,ofile,r)
  332.         do until eof(1)
  333.           fline=readln(1)
  334.           IF Pos(xfile,fline) ~=0 THEN found=1
  335.         END
  336.         call close(1)
  337.       END
  338.       IF Found=0 THEN DO
  339.         "RAW PRIVMSG "nick" :" u'AmIRC XDCC:'u' You are not allowed OPs!'
  340.         IF kick='ON' THEN 'say /kick 'name' /CTCP 'name' OP KICK'
  341.         RETURN
  342.       END
  343.       ELSE "SAY /OP "nick
  344.     END
  345.     IF POS('XDCC',Left(Right(clast,Length(clast)-(POS(':',clast,4))-which),4)) ~=0 THEN DO
  346.       nick=LEFT(last,POS('!',last)-1)
  347.       nick=DELSTR(nick,1,1)
  348.       IF Switch='OFF' THEN DO
  349.         "RAW PRIVMSG "nick" :Sorry, XDCC Service has been turned off"
  350.         RETURN
  351.       END
  352.       SELECT
  353.         WHEN POS('XDCC LIST',clast) ~=0 THEN DO
  354.           "echo" "P="d2c(27)"bXDCC"d2c(27)"b LIST REQUEST FROM:"nick
  355.           name=nick
  356.           IF security='ON' THEN DO
  357.             "userhost "name
  358.             xfile=result
  359.             IF Datatype(left(Right(xfile,Length(xfile)-Pos("@",xfile)),1),n) THEN xfile=Left(xfile,pos('.',xfile,Length(xfile)-4))||"*"
  360.             ELSE xfile=Left(xfile,pos('@',xfile))||"*."||Right(xfile,Length(xfile)-Pos(".",xfile))
  361.  
  362.             Found=0
  363.             IF exists(ffile)then do
  364.               call open(1,ffile,r)
  365.               do until eof(1)
  366.                 fline=readln(1)
  367.                 IF Pos(xfile,fline) ~=0 THEN found=1
  368.               END
  369.               call close(1)
  370.             END
  371.             IF Found=0 THEN DO
  372.               "RAW PRIVMSG "nick" :" u'AmIRC XDCC:'u' You are not allowed access!'
  373.               IF kick='ON' THEN 'say /kick 'name' /CTCP 'name' XDCC KICK'
  374.               RETURN
  375.             END
  376.           END
  377.           call xdcclist
  378.         END
  379.         WHEN (POS('XDCC GET',clast) ~=0)|(POS('XDCC SEND',clast)~=0) THEN DO
  380.           "echo" "P="d2c(27)"bXDCC"d2c(27)"b GET REQUEST FROM:"nick
  381.           IF POS('#',clast) ~=0 THEN DO
  382.             file=STRIP(LEFT(RIGHT(clast,LENGTH(CLAST)-POS('#',CLAST)),2))
  383.             IF datatype(file,n)=0 THEN file=STRIP(LEFT(file,1))
  384.             name=nick
  385.             IF security='ON' THEN DO
  386.               "userhost "name
  387.               xfile=result
  388.               IF Datatype(left(Right(xfile,Length(xfile)-Pos("@",xfile)),1),n) THEN xfile=Left(xfile,pos('.',xfile,Length(xfile)-4))||"*"
  389.               ELSE xfile=Left(xfile,pos('@',xfile))||"*."||Right(xfile,Length(xfile)-Pos(".",xfile))
  390.  
  391.               Found=0
  392.               IF exists(ffile)then do
  393.                 call open(1,ffile,r)
  394.                 do until eof(1)
  395.                   fline=readln(1)
  396.                   IF Pos(xfile,fline) ~=0 THEN found=1
  397.                 END
  398.                 call close(1)
  399.               END
  400.               IF Found=0 THEN DO
  401.                 "RAW PRIVMSG "nick" :" u'AmIRC XDCC:'u' You are not allowed access!'
  402.                 IF kick='ON' THEN 'say /kick 'name' /CTCP 'name' XDCC KICK'
  403.                 RETURN
  404.               END
  405.             END
  406.             call xdccsend
  407.           END
  408.           ELSE "RAW PRIVMSG "nick" :Try again, an error has occured"
  409.         END
  410.         WHEN POS('XDCC HELP',clast) ~=0 THEN DO
  411.           "echo" "P="d2c(27)"bXDCC"d2c(27)"b HELP REQUEST FROM:"nick
  412.           name=nick
  413.           call xdcchelp
  414.         END
  415.         WHEN POS('XDCC VERSION',clast) ~=0 THEN "RAW PRIVMSG "nick" :XDCC Version 1.30 By WiZ-Id"
  416.         OTHERWISE "RAW PRIVMSG "nick" :UNKNOWN COMMAND: use XDCC HELP for more info!"
  417.       END
  418.     END
  419.   END
  420.   OTHERWISE "ECHO" CMD
  421. END
  422. exit
  423.  
  424. xdcclist:
  425. do
  426.     linex=linesinfile(sfile)
  427.     if exists(sfile) then do
  428.       select
  429.         when name='' then amirccmd='echo'
  430.         when name='#' then amirccmd='say'
  431.         otherwise do
  432.           amirccmd='RAW PRIVMSG 'name' :'
  433.         END
  434.       end
  435.       call open(1,sfile,r)
  436.       cnt=0
  437.       do until eof(1)
  438.         cnt=cnt+1
  439.         text=readln(1)
  440.         if (cnt=1)&(~eof(1)) then do
  441.           amirccmd '** AmIRC XDCC: 'linex' Files offered, "/ctcp 'mynick' xdcc get #<number>" to send one'
  442.           amirccmd '** There are 'maxslots-checkslots()' of 'maxslots' slots available   SEC: 'Security'       KICK: 'Kick''
  443.         END
  444.         if eof(1)=0 then do
  445.           line=amirccmd' #'cnt'. 'word(text,1)
  446.           do until length(line)>=25
  447.             line=line||' '
  448.           end
  449.           IF RIGHT(text,4)="PACK" THEN DO
  450.             pname=left(word(text,1),pos('/',word(text,1))-1)
  451.             line=line||"("linesinfile('xdcc:'pname'list')' Files | '
  452.             call open(xf,'xdcc:'pname'list',r)
  453.             sizex=0
  454.             do until eof(xf)
  455.               sline=readln(xf)
  456.               IF Length(sline)~=0 THEN sizex=sizex+word(sline,2)
  457.             END
  458.             call close(xf)
  459.             IF sizex%1024>1024 THEN line=line||left((sizex/1048576),3)'M)'
  460.             ELSE line=line||(sizex%1024)'K)'
  461.             do while length(line)<30
  462.               line=line||' '
  463.             end
  464.             text=left(text,length(text)-4)
  465.             line=line||right(text,(length(text))-length(word(text,1)))
  466.  
  467.           END
  468.           ELSE DO
  469.             if word(statef("xdcc:"word(text,1)),2)%1024>=1024 then do
  470.               line=line||'('left((word(statef('xdcc:'word(text,1)),2)/1048576),3)'M)'
  471.             end
  472.             else line=line||'('word(statef("xdcc:"word(text,1)),2)%1024'k)'
  473.  
  474.             do while length(line)<30
  475.               line=line||' '
  476.             end
  477.             line=line||right(text,(length(text))-length(word(text,1)))
  478.           end
  479.           line
  480.           end
  481.         end
  482.         call close(1)
  483.       end
  484.       else 'echo No list created.'
  485. end
  486. RETURN
  487.  
  488. xdccsend:
  489. do
  490.   if length(name)>0 then do
  491.     if exists(sfile) then do
  492.       cnt=0
  493.       call open(1,sfile,r)
  494.       if datatype(file,n) then do
  495.         do while (eof(1)=0)&(cnt<file)
  496.           text=readln(1)
  497.           cnt=cnt+1
  498.         end
  499.       end
  500.       else do
  501.         if exists(file) then text=file
  502.       end
  503.       call close(1)
  504.       IF Right(word(text,1),1)='/' THEN DO
  505.         IF linesinfile('xdcc:'Left(word(text,1),Length(word(text,1))-1)'list')<=(maxslots-checkslots()) THEN DO
  506.           call open(pxf,'xdcc:'Left(word(text,1),Length(word(text,1))-1)'list',r)
  507.           DO UNTIL eof(pxf)
  508.             pfile=readln(pxf)
  509.             pfile=word(pfile,1)
  510.             IF exists('xdcc:'word(text,1)||pfile) THEN DO
  511.               'echo Sending 'word(text,1)||pfile' to 'name'.'
  512.               'say /dcc send 'name' xdcc:'word(text,1)||pfile
  513.             END
  514.           END
  515.           call close(pxf)
  516.         END
  517.         ELSE DO
  518.           'RAW PRIVMSG 'name' : You need 'linesinfile('xdcc:'Left(word(text,1),Length(word(text,1))-1)'list')' slots, only 'maxslots-checkslots()' slots are available'
  519.         END
  520.       END
  521.       ELSE DO
  522.         IF (maxslots-checkslots())>0 THEN DO
  523.           'echo Sending 'word(text,1)' to 'name'.'
  524.           'say /dcc send 'name' xdcc:'word(text,1)
  525.         END
  526.         ELSE DO
  527.           'RAW PRIVMSG 'name' : You need 1 slot, only 'maxslots-checkslots()' slots are available'
  528.         END
  529.       END
  530.     end
  531.     else 'echo Could not find 'sfile'.'
  532.   end
  533.  else 'echo Nick not specified.'
  534. end
  535. RETURN
  536.  
  537. flist:
  538. do
  539.   if exists(ffile) then do
  540.     select
  541.       when name='' then amirccmd='echo'
  542.       when name='#' then amirccmd='say'
  543.       otherwise amirccmd='RAW PRIVMSG 'name' :'
  544.     end
  545.     call open(1,ffile,r)
  546.     cnt=0
  547.     do until eof(1)
  548.       cnt=cnt+1
  549.       text=readln(1)
  550.       if (cnt=1)&(~eof(1)) then amirccmd u'AmIRC XDCC:'u' Friends list'
  551.       if eof(1)=0 then do
  552.         line=amirccmd' 'cnt'. 'word(text,1)
  553.         do until length(line)>=25
  554.           line=line||' '
  555.         end
  556.         do while length(line)<30
  557.           line=line||' '
  558.         end
  559.       line=line||right(text,(length(text))-length(word(text,1)))
  560.       line
  561.       end
  562.     end
  563.     call close(1)
  564.   end
  565.   else 'echo No list created.'
  566. end
  567. RETURN
  568.  
  569. fdel:
  570. do
  571.   if exists(ffile) then do
  572.     call open(1,ffile,r)
  573.     call open(2,'T:xdcc.temp',w)
  574.     nfound=1
  575.     if datatype(name,n) then do
  576.       cnt=0
  577.       do until eof(1)
  578.         cnt=cnt+1
  579.         text=readln(1)
  580.         if cnt~=name then call writeln(2,text)
  581.         else do
  582.           if eof(1)=0 then do
  583.           'echo Removing Item #'cnt', 'u||text||u' from xdcc list.'
  584.           nfound=0
  585.           end
  586.         end
  587.       end
  588.     end
  589.     else do
  590.       do until eof(1)
  591.         text=readln(1)
  592.         if word(upper(text),1)~=upper(name) then call writeln(2,text)
  593.         else do
  594.           'echo Removing 'u||text||u' from xdcc list.'
  595.           nfound=0
  596.         end
  597.       end
  598.     end
  599.     call close(1)
  600.     call close(2)
  601.     if nfound then 'echo Nothing removed.'
  602.     else do
  603.       if exists('T:xdcc.temp') then do
  604.         call open(1,'T:xdcc.temp',r)
  605.         call open(2,ffile,w)
  606.         cnt=1
  607.         do until eof(1)
  608.           text=readln(1)
  609.           if (~eof(1))&(strip(text)>0) then do
  610.              call writeln(2,text)
  611.              cnt=0
  612.           end
  613.         end
  614.         call close(1)
  615.         call close(2)
  616.         call delete('T:xdcc.temp')
  617.       end
  618.       if cnt then do
  619.         'echo List now empty.'
  620.         call delete(ffile)
  621.       end
  622.     end
  623.   end
  624.   else 'echo List is empty.'
  625. end
  626. RETURN
  627.  
  628. oplist:
  629. do
  630.   if exists(ofile) then do
  631.     select
  632.       when name='' then amirccmd='echo'
  633.       when name='#' then amirccmd='say'
  634.       otherwise amirccmd='RAW PRIVMSG 'name' :'
  635.     end
  636.     call open(1,ofile,r)
  637.     cnt=0
  638.     do until eof(1)
  639.       cnt=cnt+1
  640.       text=readln(1)
  641.       if (cnt=1)&(~eof(1)) then amirccmd u'AmIRC XDCC:'u' Friends list'
  642.       if eof(1)=0 then do
  643.         line=amirccmd' 'cnt'. 'word(text,1)
  644.         do until length(line)>=25
  645.           line=line||' '
  646.         end
  647.         do while length(line)<30
  648.           line=line||' '
  649.         end
  650.       line=line||right(text,(length(text))-length(word(text,1)))
  651.       line
  652.       end
  653.     end
  654.     call close(1)
  655.   end
  656.   else 'echo No list created.'
  657. end
  658. RETURN
  659.  
  660. opdel:
  661. do
  662.   if exists(ofile) then do
  663.     call open(1,ofile,r)
  664.     call open(2,'T:xdcc.temp',w)
  665.     nfound=1
  666.     if datatype(name,n) then do
  667.       cnt=0
  668.       do until eof(1)
  669.         cnt=cnt+1
  670.         text=readln(1)
  671.         if cnt~=name then call writeln(2,text)
  672.         else do
  673.           if eof(1)=0 then do
  674.           'echo Removing Item #'cnt', 'u||text||u' from xdcc list.'
  675.           nfound=0
  676.           end
  677.         end
  678.       end
  679.     end
  680.     else do
  681.       do until eof(1)
  682.         text=readln(1)
  683.         if word(upper(text),1)~=upper(name) then call writeln(2,text)
  684.         else do
  685.           'echo Removing 'u||text||u' from xdcc list.'
  686.           nfound=0
  687.         end
  688.       end
  689.     end
  690.     call close(1)
  691.     call close(2)
  692.     if nfound then 'echo Nothing removed.'
  693.     else do
  694.       if exists('T:xdcc.temp') then do
  695.         call open(1,'T:xdcc.temp',r)
  696.         call open(2,ofile,w)
  697.         cnt=1
  698.         do until eof(1)
  699.           text=readln(1)
  700.           if (~eof(1))&(strip(text)>0) then do
  701.              call writeln(2,text)
  702.              cnt=0
  703.           end
  704.         end
  705.         call close(1)
  706.         call close(2)
  707.         call delete('T:xdcc.temp')
  708.       end
  709.       if cnt then do
  710.         'echo List now empty.'
  711.         call delete(ofile)
  712.       end
  713.     end
  714.   end
  715.   else 'echo List is empty.'
  716. end
  717. RETURN
  718.  
  719.  
  720.  
  721.  
  722. xdcchelp:
  723. DO
  724.     send=1
  725.     select
  726.       when name='' then amirccmd='echo'
  727.       when name='#' then amirccmd='say'
  728.       otherwise amirccmd='RAW PRIVMSG 'name' :'
  729.     END
  730.     select
  731.       when exists('rexx/xdcc.amirx') then call open(1,'rexx/xdcc.amirx')
  732.       when exists('rexx:xdcc.amirx') then call open(1,'rexx:xdcc.amirx')
  733.       when exists('amitcp:rexx/xdcc.amirx') then call open(1,'amitcp:rexx/xdcc.amirx')
  734.       when exists('SYS:rexx/xdcc.amirx') then call open(1,'SYS:rexx/xdcc.amirx')
  735.       when exists('xdcc.amirx') then call open(1,'xdcc.amirx')
  736.       otherwise do
  737.         'echo Could not find arexx program.'
  738.         send=0
  739.       end
  740.     end
  741.     if send then do
  742.       send=0
  743.       do until eof(1)
  744.         text=readln(1)
  745.         if text='@' then send=1-send
  746.         else if send then amirccmd strip(text,'B','       ')
  747.       end
  748.       call close(1)
  749.     end
  750.   end
  751. RETURN
  752. xdcclocalhelp:
  753. DO
  754.     send=1
  755.     amirccmd='echo P='d2c(27)'bXDCCHelp'
  756.     select
  757.       when exists('rexx/xdcc.amirx') then call open(1,'rexx/xdcc.amirx')
  758.       when exists('rexx:xdcc.amirx') then call open(1,'rexx:xdcc.amirx')
  759.       when exists('amitcp:rexx/xdcc.amirx') then call open(1,'amitcp:rexx/xdcc.amirx')
  760.       when exists('SYS:rexx/xdcc.amirx') then call open(1,'SYS:rexx/xdcc.amirx')
  761.       when exists('xdcc.amirx') then call open(1,'xdcc.amirx')
  762.       otherwise do
  763.         'echo Could not find arexx program.'
  764.         send=0
  765.       end
  766.     end
  767.     if send~=0 then do
  768.       send=0
  769.       do until eof(1)
  770.         text=readln(1)
  771.         if text='%' then send=1-send
  772.         if text='@' then nop
  773.         else if send~=0 then amirccmd strip(text,'B','       ')
  774.       end
  775.       call close(1)
  776.     end
  777.   end
  778. RETURN
  779.  
  780.  
  781.  
  782. xdccinfo:
  783. do
  784.   select
  785.     when name='' then amirccmd='echo'
  786.     when name='#' then amirccmd='say'
  787.     otherwise do
  788.       amirccmd='RAW PRIVMSG 'name' :'
  789.     END
  790.   end
  791.   amirccmd '** AmIRC XDCC: 'linesinfile(sfile)' Files offered, "/ctcp 'mynick' xdcc list" for file list'
  792.   amirccmd '** There are 'maxslots-checkslots()' of 'maxslots' slots available   SEC: 'Security'       KICK: 'Kick''
  793. END
  794. RETURN
  795.  
  796. linesinfile:
  797. PARSE ARG filecheck
  798. lines=0
  799. IF exists(filecheck) THEN DO
  800.   Open(check,filecheck,r)
  801.   Do until eof(check)
  802.     linelen=readln(check)
  803.     IF Length(linelen)>1 THEN lines=lines+1
  804.   END
  805.   Close(check)
  806. END
  807. RETURN lines
  808.  
  809. scrap:
  810. RETURN
  811.  
  812. checkslots:
  813. DO
  814.   list=showlist(w)
  815.   xpos=1
  816.   slots=0
  817.   DO until xpos=0
  818.     xpos=Pos('AmIRC DCC Send Thread',list,xpos+22)
  819.     IF xpos>0 then slots=slots+1
  820.   END
  821. END
  822. RETURN slots
  823.