home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / dmi125.zip / XDCC_In.Cmd < prev    next >
OS/2 REXX Batch file  |  1996-09-26  |  7KB  |  162 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_In:
  8.    Parse Upper Arg WinHandle OurNick Prefix Cmd Chan Nick Func Parm1 Parm2 Rest
  9.    Parse Arg xWinHandle xOurNick xPrefix xCmd xChan xNick xFunc xParm1 xParm2 Rest
  10.  
  11.    DMIMsg = '*DMI*'
  12.    ErrStr = '*[Error]*'
  13.    Pool = 'OS2ENVIRONMENT'
  14.    DataDir = Value('DataDir',, Pool)
  15.    XDCCList = DataDir || Value('XDCCList',, Pool)
  16.    TotalSent = Value('TotalSent',, Pool)
  17.  
  18.    SIGNAL ON SYNTAX
  19.    TotalSize = 0
  20.    Func = Strip(Func,, '')
  21.    xFunc = Strip(xFunc,, '')
  22.    Parm1 = Strip(Strip(Parm1,, ''),, '#')
  23.    xParm1 = Strip(Strip(xParm1,, ''),, '#')
  24.    if Parm1 <> '' then do
  25.       IrcRexxDisplay(DMIMsg 'XDCC' xFunc Parm1 'Received from' xPrefix, WinHandle)
  26.    end
  27.    else do
  28.       IrcRexxDisplay(DMIMsg 'XDCC' xFunc 'Received from' xPrefix, WinHandle)
  29.    end
  30.    Call GetNickId
  31.    NotNick = 'NOTICE' FromNick ':'
  32.    Select
  33.       When (Func = 'LIST') then do  /* LIST command */
  34.          LineNo = 0
  35.          TotalSize = 0
  36.          Call Library
  37.          DescFile = Stream(XDCCList || '.DIZ', 'C', 'QUERY EXISTS')
  38.          if DescFile \= '' then ExtDesc = 1
  39.          IrcRexxSend(NotNick || 'Files offered: (/MSG' xOurNick 'XDCC SEND #N for pack N)', WinHandle)
  40.          do while Lines(XDCCList)
  41.             Fileline = LineIn(XDCCList)
  42.             if Fileline = '' then leave
  43.             LineNo = LineNo + 1
  44.             Drop FStem.
  45.             Parse Var Fileline FSpec FDesc
  46.             SysFileTree(FSpec, Files., 'FO')
  47.             If Files.0 <= 0 then do
  48.                IrcRexxSend('NOTICE' OurNick ':Missing File on line' LineNo 'of XDCC Offer list' XDCCList'.', WinHandle)
  49.                iterate
  50.             End
  51.             else do
  52.                TempSize = 0
  53.                Files.Size = 0
  54.                do TempCount = 1 to Files.0
  55.                   TempSize = Trunc((Stream(Files.TempCount, 'C', 'QUERY SIZE') / 1024), 1)
  56.                   Files.Size = Files.Size + TempSize
  57.                end
  58.                if Files.Size >= 1000 then do
  59.                   Files.Megs = TRUE
  60.                   Files.Size = Trunc(Files.Size / 1024, 1)
  61.                end
  62.                if (ExtDesc = 1) then do
  63.                   PackDesc.0 = 0
  64.                   if ((SysFileSearch('Pack'||LineNo, DescFile, 'TempDesc.') = 0) & (TempDesc.0 > 0)) then do
  65.                      do TempCount = 1 to TempDesc.0
  66.                         parse var TempDesc.TempCount dummy PackDesc.TempCount
  67.                      end
  68.                      PackDesc.0 = TempDesc.0
  69.                   end
  70.                end
  71.                if (Files.Megs == TRUE) then do
  72.                   TotalSize = Trunc(TotalSize + (Files.Size * 1024), 0)
  73.                   PackInfo = ''Right(Files.0, 2)':'Right(Files.Size, 5)'M'
  74.                end
  75.                else do
  76.                   TotalSize = Trunc((TotalSize + Files.Size), 0)
  77.                   PackInfo = ''Right(Files.0, 2)':'Right(Files.Size, 5)'K'
  78.                end
  79.                IrcRexxSend(NotNick'#'LineNo': ['PackInfo']' FDesc, WinHandle)
  80.                if (ExtDesc = 1) then do
  81.                   do TempCount = 1 to PackDesc.0
  82.                      IrcRexxSend(NotNick || '               ' PackDesc.TempCount, WinHandle)
  83.                   end
  84.                end
  85.             end
  86.          end
  87.          IrcRexxSend(NotNick'Total Offered: 'TotalSize'K. Total Sent: 'TotalSent'K.', WinHandle);
  88.          Return ''
  89.       end
  90.       When Func = 'SEND' then do   /* SEND command */
  91.          If Parm1 = '' then do
  92.             IrcRexxSend(NotNick || 'You didn''t include the file number. Try again.', WinHandle)
  93.             IrcRexxSend(NotNick || '/MSG' xOurNick 'XDCC SEND #N for pack N', WinHandle)
  94.          End
  95.          else do
  96.             LineNo = 0
  97.             do while Lines(XDCCList)
  98.                Fileline = LineIn(XDCCList)
  99.                if Fileline = '' then iterate
  100.                LineNo = LineNo + 1
  101.                Drop FStem.
  102.                Parse Var Fileline FSpec FDesc
  103.                if LineNo = Parm1 then do
  104.                   Call Library
  105.                   SysFileTree(FSpec, Files., 'FO')
  106.                   If Files.0 = 0 then do
  107.                      IrcRexxSend('NOTICE' OurNick ':Missing File on line' LineNo 'of XDCC Offer list' XDCCList'.', WinHandle)
  108.                      leave
  109.                   End
  110.                   else do
  111.                      Files.Size = 0
  112.                      TempSize = 0
  113.                      do TempCount = 1 to Files.0
  114.                         TempSize = Trunc((Stream(Files.TempCount, 'C', 'QUERY SIZE') / 1024), 0)
  115.                         Files.Size = Files.Size + TempSize
  116.                      end
  117.                      FileSize = Files.Size || 'K'
  118.                      IrcRexxSend(NotNick || 'Sending you "'FDesc'" ('FileSize').', WinHandle)
  119.                      IrcRexxDisplay(DMIMsg 'Sending "'FDesc'"('FileSize') to 'FromNick'.', WinHandle)
  120.                      Value('TotalSent', TotalSent + Files.Size, Pool)
  121.                      do TempCount = 1 to Files.0
  122.                         IrcRexxCommand('/DCC SEND' FromNick Files.TempCount, WinHandle)
  123.                         logentry = Date('N') Time('C') Files.TempCount 'sent to' xPrefix
  124.                         Lineout(DataDir'XDCC.Log', LogEntry)
  125.                      end
  126.                      Lineout(DataDir'XDCC.Log')
  127.                      Return ''
  128.                   end
  129.                end
  130.             end
  131.             IrcRexxSend(NotNick || 'That File is not available! Range: [1..'||LineNo||']', WinHandle)
  132.          end
  133.          Return ''
  134.       end
  135.       When Func = 'HELP' then do   /* HELP routine */
  136.          IrcRexxSend(NotNick || 'Available Commands are:', WinHandle)
  137.          IrcRexxSend(NotNick || '/MSG' xOurNick 'XDCC LIST for a list of available files', WinHandle)
  138.          IrcRexxSend(NotNick || '/MSG' xOurNick 'XDCC SEND #N to get pack number N', WinHandle)
  139.          IrcRexxSend(NotNick || '/MSG' xOurNick 'XDCC HELP for help', WinHandle)
  140.       end
  141.       Otherwise do
  142.          IrcRexxSend(NotNick || 'Unknown XDCC Command! Try XDCC HELP', WinHandle)
  143.          Return ''
  144.       end
  145.    End
  146. Return ''
  147.  
  148. GetNickId:
  149.    Pos1 = Pos('!', xPrefix)
  150.    FromNick = SubStr(xPrefix, 2, Pos1 - 2)
  151.    FromId = SubStr(xPrefix, Pos1 + 1)
  152. Return
  153.  
  154. library:
  155.    CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  156.    CALL SysLoadFuncs
  157. Return
  158.  
  159. SYNTAX:
  160.    IrcRexxDisplay(ErrStr 'REXX Syntax Error' RC '(' || ErrorText(RC) || ') at line' SIGL 'of XDCC_In.Cmd.', WinHandle);
  161. Return ''
  162.