home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / dmi125.zip / XDCC_Out.Cmd < prev    next >
OS/2 REXX Batch file  |  1996-09-26  |  10KB  |  218 lines

  1. /*********************************************************************/
  2. /* DMI IRC REXX Command Script for REXX Clients.  v1.25   26 Sep 96  */
  3. /*********************************************************************/
  4. /* XDCC Functions                                         26 Sep 96  */
  5. /*********************************************************************/
  6.  
  7. XDCC_Out:
  8.    Parse Upper Arg WinHandle WinName OurNick Verb Parm1 Parm2 Parm3 Parms
  9.    Parse Arg xWinHandle xWinName xOurNick xVerb xParm1 xParm2 xParm3 xParms
  10.  
  11.    Pool = 'OS2ENVIRONMENT'
  12.    CMD = Value('COMSPEC',, Pool)
  13.    DMIMsg = '*DMI*'
  14.    ErrStr = '*[Error]*'
  15.    DataDir = Value('DataDir',, Pool)
  16.    XDCCList = DataDir || Value('XDCCList',, Pool)
  17.    TotalSent = Value('TotalSent',, Pool)
  18.  
  19.    SIGNAL ON SYNTAX
  20.    TotalSize = 0
  21.    Select
  22.       When Parm1 = 'LIST' then do
  23.          If xParm2 == '' then do
  24.             LineNo=0
  25.             Call Library
  26.             DescFile = Stream(XDCCList || '.DIZ', 'C', 'QUERY EXISTS')
  27.             if DescFile \= '' then ExtDesc = 1
  28.             IrcRexxDisplay(DMIMsg 'XDCC offer file:' XDCCList, WinHandle)
  29.             do while Lines(XDCCList)
  30.                Fileline = LineIn(XDCCList)
  31.                if Fileline = '' then leave
  32.                LineNo = LineNo + 1
  33.                Drop FStem.
  34.                Parse Var Fileline FSpec FDesc
  35.                SysFileTree(FSpec, 'Files.', 'FO')
  36.                If Files.0 <= 0 then do
  37.                   IrcRexxDisplay(ErrStr 'Missing File on line' LineNo 'of XDCC Offer list' XDCCList '.', WinHandle)
  38.                   iterate
  39.                End
  40.                else do
  41.                   TempSize = 0
  42.                   Files.Size = 0
  43.                   TempCount = Files.0
  44.                   do TempCount = 1 to TempCount
  45.                      TempSize = Trunc((Stream(Files.TempCount, 'C', 'QUERY SIZE') / 1024), 1)
  46.                      Files.Size = Files.Size + TempSize
  47.                   end
  48.                   if Files.Size >= 1000 then do
  49.                      Files.Megs = TRUE
  50.                      Files.Size = Trunc(Files.Size / 1024, 1)
  51.                   end
  52.                   if (ExtDesc = 1) then do
  53.                      PackDesc.0 = 0
  54.                      if ((SysFileSearch('Pack'||LineNo, DescFile, 'TempDesc.') = 0) & (TempDesc.0 > 0)) then do
  55.                         do TempCount = 1 to TempDesc.0
  56.                            parse var TempDesc.TempCount dummy PackDesc.TempCount
  57.                         end
  58.                         PackDesc.0 = TempDesc.0
  59.                      end
  60.                   end
  61.                   if (Files.Megs == TRUE) then do
  62.                      TotalSize = Trunc(TotalSize + (Files.Size * 1024), 0)
  63.                      PackInfo = ''Right(Files.0, 2)':'Right(Files.Size, 5)'M'
  64.                   end
  65.                   else do
  66.                      TotalSize = Trunc((TotalSize + Files.Size), 0)
  67.                      PackInfo = ''Right(Files.0, 2)':'Right(Files.Size, 5)'K'
  68.                   end
  69.                   IrcRexxDisplay(DMIMsg '#'LineNo': ['PackInfo']' FDesc, WinHandle);
  70.                   if (ExtDesc = 1) then do
  71.                      do TempCount = 1 to PackDesc.0
  72.                         IrcRexxDisplay(DMIMsg '               ' PackDesc.TempCount, WinHandle)
  73.                      end
  74.                   end
  75.                End
  76.             End
  77.             IrcRexxDisplay(DMIMsg 'Total Offered: 'TotalSize'K. Total Sent: 'TotalSent'K.', WinHandle);
  78.          End
  79.          else do
  80.             Value('XDCCList', xParm2, Pool);
  81.             XDCCList = Value('XDCCList',, Pool);
  82.             IrcRexxDisplay(DMIMsg 'XDCC Offer List set to:' XDCCList || '.', WinHandle);
  83.          end
  84.          Return ''
  85.       end
  86.       When Parm1 = 'SHOW' then do
  87.          LineNo = 0
  88.          Call Library
  89.          DescFile = Stream(XDCCList || '.DIZ', 'C', 'QUERY EXISTS')
  90.          if DescFile \= '' then ExtDesc = 1
  91.          IrcRexxCommand('Files offered: (/MSG' xOurNick 'XDCC SEND #N for pack N)', WinHandle)
  92.          do while Lines(XDCCList)
  93.             Fileline = LineIn(XDCCList)
  94.             if Fileline = '' then leave
  95.             LineNo = LineNo + 1
  96.             Drop FStem.
  97.             Parse Var Fileline FSpec FDesc
  98.             SysFileTree(FSpec, Files., 'FO')
  99.             If Files.0 <= 0 then do
  100.                IrcRexxDisplay(ErrStr 'Missing File on line' LineNo 'of XDCC Offer list' XDCCList '.', WinHandle)
  101.                iterate
  102.             End
  103.             else do
  104.                TempSize = 0
  105.                Files.Size = 0
  106.                do TempCount = 1 to Files.0
  107.                   TempSize = Trunc((Stream(Files.TempCount, 'C', 'QUERY SIZE') / 1024), 1)
  108.                   Files.Size = Files.Size + TempSize
  109.                end
  110.                if Files.Size >= 1000 then do
  111.                   Files.Megs = TRUE
  112.                   Files.Size = Trunc(Files.Size / 1024, 1)
  113.                end
  114.                if (ExtDesc = 1) then do
  115.                   PackDesc.0 = 0
  116.                   if ((SysFileSearch('Pack'||LineNo, DescFile, 'TempDesc.') = 0) & (TempDesc.0 > 0)) then do
  117.                      do TempCount = 1 to TempDesc.0
  118.                         parse var TempDesc.TempCount dummy PackDesc.TempCount
  119.                      end
  120.                      PackDesc.0 = TempDesc.0
  121.                   end
  122.                end
  123.                if (Files.Megs == TRUE) then do
  124.                   TotalSize = Trunc(TotalSize + (Files.Size * 1024), 0)
  125.                   PackInfo = ''Right(Files.0, 2)':'Right(Files.Size, 5)'M'
  126.                end
  127.                else do
  128.                   TotalSize = Trunc((TotalSize + Files.Size), 0)
  129.                   PackInfo = ''Right(Files.0, 2)':'Right(Files.Size, 5)'K'
  130.                end
  131.                IrcRexxCommand('#'LineNo': ['PackInfo']' FDesc, WinHandle);
  132.                if (ExtDesc = 1) then do
  133.                   do TempCount = 1 to PackDesc.0
  134.                      IrcRexxCommand('               ' PackDesc.TempCount, WinHandle)
  135.                   end
  136.                end
  137.             End
  138.          End
  139.          IrcRexxCommand('Total Offered: 'TotalSize'K. Total Sent: 'TotalSent'K.', WinHandle)
  140.          Return ''
  141.       end
  142.       When Parm1 = 'SEND' then do
  143.          LineNo = 0
  144.          if xParm2 <> '' then do
  145.             NotNick = 'NOTICE' xParm2 ':'
  146.             do while Lines(XDCCList)
  147.                Fileline = LineIn(XDCCList)
  148.                if Fileline = '' then leave
  149.                LineNo = LineNo + 1
  150.                Drop FStem.
  151.                Parse Var Fileline FSpec FDesc
  152.                if LineNo = xParm3 then do
  153.                   Call Library
  154.                   SysFileTree(FSpec, Files., 'FO')
  155.                   If Files.0 <= 0 then do
  156.                      IrcRexxDisplay(ErrStr 'Missing File on line' LineNo 'of XDCC Offer list' XDCCList '.', WinHandle)
  157.                      leave
  158.                   End
  159.                   else do
  160.                      Files.Size = 0
  161.                      TempSize = 0
  162.                      do TempCount = 1 to Files.0
  163.                         TempSize = Trunc((Stream(Files.TempCount, 'C', 'QUERY SIZE') / 1024), 0)
  164.                         Files.Size = Files.Size + TempSize
  165.                      end
  166.                      FileSize = Files.Size || 'K'
  167.                      IrcRexxSend(NotNick || 'Sending you "'FDesc'" ('FileSize') by manual request.', WinHandle)
  168.                      IrcRexxDisplay(DMIMsg 'Sending "'FDesc'"('FileSize') to 'xParm2'.', WinHandle)
  169.                      Value('TotalSent', TotalSent + Files.Size, Pool);
  170.                      do TempCount = 1 to Files.0
  171.                         IrcRexxCommand('/DCC SEND' xParm2 Files.TempCount, WinHandle)
  172.                         logentry = Date('N') Time('C') Files.TempCount 'sent to' xParm2
  173.                         Lineout(DataDir'XDCC.Log', logentry)
  174.                      end
  175.                      Lineout(DataDir'XDCC.Log')
  176.                      Return ''
  177.                   end
  178.                End
  179.             End
  180.             IrcRexxDisplay(ErrStr 'That pack is not available! Range: [1..'|| LineNo || ']', WinHandle)
  181.             Return ''
  182.          end
  183.          else IrcRexxDisplay(ErrStr 'Usage: /XDCC SEND <User> <Pack>', WinHandle)
  184.          Return ''
  185.       end
  186.       When Parm1 = '' then do
  187.          IrcRexxDisplay(ErrStr 'Usage: /XDCC <Command> [Parameters]', WinHandle)
  188.          Return ''
  189.       end
  190.       otherwise do
  191.          If Parm1 <> '' then do
  192.             Select
  193.                When Parm2 = 'HELP' then IrcRexxSend('PRIVMSG' xParm1 ':XDCC HELP', WinHandle)
  194.                When Parm2 = 'LIST' then IrcRexxSend('PRIVMSG' xParm1 ':XDCC LIST', WinHandle)
  195.                When Parm2 = 'GET' then IrcRexxSend('PRIVMSG' xParm1 ':XDCC SEND' Parm3'', WinHandle)
  196.                When Parm2 = 'SEND' then IrcRexxSend('PRIVMSG' xParm1 ':XDCC SEND' Parm3'', WinHandle)
  197.                Otherwise IrcRexxDisplay(ErrStr 'Usage: /XDCC <User> <Command> [Params]', WinHandle)
  198.             end
  199.             Return ''
  200.          end
  201.          else do
  202.             IrcRexxDisplay(ErrStr 'Unsupported (yet?) XDCC Command. Try /HELP XDCC', WinHandle)
  203.             Return ''
  204.          end
  205.       end
  206.    end
  207. Return ''
  208.  
  209. library:
  210.    CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  211.    CALL SysLoadFuncs
  212. Return
  213.  
  214. SYNTAX:
  215.    IrcRexxDisplay(ErrStr 'REXX Syntax Error' RC '(' || ErrorText(RC) || ') at line' SIGL 'of XDCC_Out.Cmd.', WinHandle);
  216. Return ''
  217.  
  218.