home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / sIRC_-_IRC610243102002.psc / main.bas next >
Encoding:
BASIC Source File  |  2002-02-17  |  18.3 KB  |  511 lines

  1. Attribute VB_Name = "modmain"
  2. '* DEBUGGING
  3. Public Const bDebug As Boolean = False
  4.  
  5. '* ANSI Formatting character values
  6. Global Const Cancel = 15
  7. Global Const BOLD = 2
  8. Global Const UNDERLINE = 31
  9. Global Const Color = 3
  10. Global Const REVERSE = 22
  11. Global Const ACTION = 1
  12.  
  13. Global Const COMMANDCHAR = "/"
  14.  
  15. Global strVersion As String
  16.  
  17. '* ANSI Formatting characters
  18. Global strBold As String
  19. Global strUnderline As String
  20. Global strColor As String
  21. Global strReverse As String
  22. Global strAction As String
  23. Global PATH As String
  24.  
  25. Public Type RectAPI
  26.     Left    As Long
  27.     Top     As Long
  28.     Right   As Long
  29.     Bottom  As Long
  30. End Type
  31.  
  32. Public CurrentServerID  As Integer
  33. Public scriptEngine     As clsSSE_Main
  34. Public strEmptyParams(0)    As String
  35.  
  36. '* Variables for incoming commands
  37. Type ParsedData
  38.     bHasPrefix   As Boolean
  39.     strParams()  As String
  40.     intParams    As Integer
  41.     strFullHost  As String
  42.     strCommand   As String
  43.     strNick      As String
  44.     strIdent     As String
  45.     strHost      As String
  46.     AllParams    As String
  47.     bFromServer  As Boolean
  48. End Type
  49.  
  50. Sub ParseMode(strSetBy As String, strChannel As String, strData As String, serverID As Integer)
  51.     Dim strModes() As String, strChar As String, theChannel As Form
  52.     Dim i As Integer, intParam As Integer
  53.     Dim bAdd As Boolean
  54.     Set theChannel = GetFormByName(strChannel, serverID)
  55.     
  56.     On Error Resume Next
  57.     
  58.     bAdd = True
  59.     strModes = Split(strData, " ")
  60.     For i = 1 To Len(strModes(0))
  61.         strChar = Mid$(strModes(0), i, 1)
  62.         If Left$(strChannel, 1) = "#" Or Left$(strChannel, 1) = "&" Then
  63.             Select Case strChar
  64.                 Case "+"
  65.                     bAdd = True
  66.                 Case "-"
  67.                     bAdd = False
  68.                 Case "v", "b", "o", "h", "k", "l", "q", "a"
  69.                     intParam = intParam + 1
  70.                     theChannel.DoMode bAdd, strChar, strModes(intParam)
  71.                 Case Else
  72.                     'DoMode strChannel, bAdd, strChar, ""
  73.             End Select
  74.         Else    'server
  75.             Select Case strChar
  76.                 Case "+"
  77.                     bAdd = True
  78.                 Case "-"
  79.                     bAdd = False
  80.                 Case "" 'ignore this
  81.                     intParam = intParam + 1
  82.                     'DoMode strChannel, bAdd, strChar, strModes(intParam)
  83.                 Case Else
  84.                     'DoMode strChannel, bAdd, strChar, ""
  85.             End Select
  86.  
  87.         End If
  88.     Next i
  89.         
  90.     If Left$(strChannel, 1) = "#" Then
  91.         theChannel.UpdateNickList
  92.         Dim argsX(3) As String, vars(5) As String
  93.         argsX(1) = strChannel
  94.         argsX(2) = strSetBy
  95.         argsX(3) = strData
  96.         vars(0) = "chan:" & strChannel
  97.         vars(1) = "channel:" & strChannel
  98.         vars(5) = "target:" & strChannel
  99.         vars(2) = "data:" & strData
  100.         vars(3) = "modes:" & strData
  101.         vars(4) = "nick:" & strSetBy
  102.         
  103.         scriptEngine.ExecuteEvent "mode", argsX, serverID, vars
  104.     End If
  105. End Sub
  106.  
  107.  
  108. Function DoCommandLine(paramlist() As String, strWindow As String, serverIDx As Integer)
  109.     On Error Resume Next
  110.     
  111.     Dim args_pass() As String, strCom As String
  112.     ReDim args_pass(0) As String
  113.     strCom = paramlist(0)
  114.     
  115.     Select Case LCase(paramlist(0))
  116.         Case "msg"
  117.             ReDim Preserve args_pass(2) As String
  118.             args_pass(1) = paramlist(1)
  119.             args_pass(2) = JoinArray(paramlist, " ", 3)
  120.         Case "me"
  121.             ReDim Preserve args_pass(2) As String
  122.             args_pass(1) = strWindow
  123.             args_pass(2) = JoinArray(paramlist, " ", 2)
  124.         Case Else
  125.             ReDim Preserve args_pass(UBound(paramlist)) As String
  126.             Dim i As Integer
  127.             For i = LBound(paramlist) To UBound(paramlist)
  128.                 args_pass(i) = paramlist(i)
  129.             Next i
  130.             strCom = paramlist(0)
  131.     End Select
  132.     
  133.     Dim strRet As String, vars(1) As String
  134.     vars(1) = "source:" & strWindow
  135.     strRet = scriptEngine.ExecuteAlias(strCom, args_pass, serverIDx, vars)
  136.     
  137.     If scriptEngine.bLastExec Then
  138.         DoCommandLine = True
  139.     Else
  140.         DoCommandLine = False
  141.     End If
  142. End Function
  143.  
  144.  
  145. Sub ParseData(ByVal strData As String, ByRef parsed As ParsedData)
  146.  
  147.     '* Declare variables
  148.     Dim strTmp As String, i As Integer
  149.     
  150.     '* Reset variables
  151.     bHasPrefix = False
  152.     parsed.strNick = ""
  153.     parsed.strIdent = ""
  154.     parsed.strHost = ""
  155.     parsed.strCommand = ""
  156.     parsed.intParams = 1
  157.     ReDim parsed.strParams(1 To 1) As String
  158.     
  159.     parsed.bFromServer = True
  160.     
  161.     '* Check for prefix, if so, parse nick, ident and host (or just host)
  162.     If Left$(strData, 1) = ":" Then
  163.         bHasPrefix = True
  164.         strData = Right$(strData, Len(strData) - 1)
  165.         '* Put data left of " " in strHost, data right of " "
  166.         '* into strData
  167.         Seperate strData, " ", parsed.strHost, strData
  168.         parsed.strFullHost = parsed.strHost
  169.         
  170.         '* Check to see if client host name
  171.         If InStr(parsed.strHost, "!") Then
  172.             Seperate parsed.strHost, "!", parsed.strNick, parsed.strHost
  173.             Seperate parsed.strHost, "@", parsed.strIdent, parsed.strHost
  174.             parsed.bFromServer = False
  175.         End If
  176.     End If
  177.         
  178.     
  179.     '* If any params, parse
  180.     If InStr(strData, " ") Then
  181.         Seperate strData, " ", parsed.strCommand, strData
  182.         
  183.         parsed.AllParams = strData
  184.        '* Let's parse all the parameters.. yummy
  185. begin: '* OH NO I USED A LABEL!
  186.  
  187.         '* If begginning of param is :, indicates that its the last param
  188.         If Left$(strData, 1) = ":" Then
  189.             parsed.strParams(parsed.intParams) = Right$(strData, Len(strData) - 1)
  190.             GoTo finish
  191.         End If
  192.         '* If there is a space still, there is more params
  193.         If InStr(strData, " ") Then
  194.             Seperate strData, " ", parsed.strParams(parsed.intParams), strData
  195.             parsed.intParams = parsed.intParams + 1
  196.             ReDim Preserve parsed.strParams(1 To parsed.intParams) As String
  197.             GoTo begin
  198.         Else
  199.             parsed.strParams(parsed.intParams) = strData
  200.         End If
  201.     Else
  202.         '* No params, strictly command
  203.         parsed.intParams = 0
  204.         parsed.strCommand = strData
  205.     End If
  206. finish:
  207. End Sub
  208. Public Sub LoadServers(tv As TreeView)
  209.     Dim strBuffer As String, lngSize As Long, strServ As String, strPort As String
  210.     Dim nod() As Node, intGroup As Integer, i As Integer
  211.     
  212.     tv.Nodes.Clear
  213.     
  214.     On Error GoTo errhandler
  215.     Open PATH & "servers.inf" For Input As #1
  216.         Do
  217.             Input #1, strBuffer
  218.             
  219.             ReDim Preserve nod(1 To tv.Nodes.Count + 1)
  220.             If strBuffer <> "" Then
  221.                 If Left$(strBuffer, 1) = "g" Then
  222.                     Set nod(tv.Nodes.Count) = tv.Nodes.Add(, , , Right$(strBuffer, Len(strBuffer) - 1))
  223.                     'nod(tv.Nodes.Count).Expanded = False
  224.                     intGroup% = tv.Nodes.Count
  225.                 Else
  226.                     If tv.Nodes.Count > 0 Then
  227.                         strBuffer = Right$(strBuffer, Len(strBuffer) - 1)
  228.                         strServ = LeftOf(strBuffer, ":")
  229.                         strPort = RightOf(strBuffer, ":")
  230.                         If InStr(strBuffer, ":") = 0 Then
  231.                             strPort = ""
  232.                         Else
  233.                             strPort = " (" & strPort & ")"
  234.                         End If
  235.                         Set nod(tv.Nodes.Count) = tv.Nodes.Add(nod(intGroup%), tvwChild, , strServ & strPort)
  236.                         'nod(tv.Nodes.Count).Expanded = False
  237.                         'nod(tv.Nodes.Count).EnsureVisible
  238.                     End If
  239.                 End If
  240.             End If
  241.         Loop Until EOF(1)
  242.     Close #1
  243.   
  244.     Exit Sub
  245.   
  246. errhandler:
  247.     MsgBox "Loading servers: " & Err & ":" & Error
  248. End Sub
  249.  
  250. Sub HandleKeypress(rtf As RichTextBox, chrKP As String)
  251.     If rtf.Name = "rt_Output" Then Exit Sub
  252.  
  253.     Dim selStart As Long, selLength As Long, seltext As String
  254.     selStart = rtf.selStart
  255.     selLength = rtf.selLength
  256.     seltext = rtf.seltext
  257.     Select Case chrKP
  258.     Case strUnderline, strReverse, strBold, Chr(15)
  259.         If selLength = 0 Then
  260.             rtf.seltext = chrKP
  261.         Else
  262.             If Left$(seltext, 1) = chrKP And Right$(seltext, 1) = chrKP Then
  263.                 rtf.seltext = Mid$(seltext, 2, Len(seltext) - 2)
  264.                 rtf.selStart = selStart
  265.                 rtf.selLength = selLength - 2
  266.             ElseIf Left$(seltext, 1) <> chrKP And Right$(seltext, 1) <> chrKP Then
  267.                 rtf.seltext = chrKP & seltext & chrKP
  268.                 rtf.selStart = selStart
  269.                 rtf.selLength = selLength + 2
  270.             ElseIf Left$(seltext, 1) = chrKP And Right$(seltext, 1) <> chrKP Then
  271.                 rtf.seltext = seltext & chrKP
  272.                 rtf.selStart = selStart
  273.                 rtf.selLength = selLength + 1
  274.             ElseIf Left$(seltext, 1) <> chrKP And Right$(seltext, 1) = chrKP Then
  275.                 rtf.seltext = chrKP & seltext
  276.                 rtf.selStart = selStart
  277.                 rtf.selLength = selLength + 1
  278.             End If
  279.         End If
  280.     Case strColor
  281.         If selLength = 0 Then
  282.             rtf.seltext = chrKP
  283.         Else
  284.             If Left$(seltext, 1) = chrKP And Right$(seltext, 1) = chrKP Then
  285.                 rtf.seltext = Mid$(seltext, 2, Len(seltext) - 2)
  286.                 rtf.selStart = selStart
  287.                 rtf.selLength = selLength - 2
  288.             ElseIf Left$(seltext, 1) <> chrKP And Right$(seltext, 1) <> chrKP Then
  289.                 rtf.seltext = chrKP & seltext & chrKP
  290.                 rtf.selStart = selStart + 1
  291.                 rtf.selLength = 0
  292.             ElseIf Left$(seltext, 1) = chrKP And Right$(seltext, 1) <> chrKP Then
  293.                 rtf.seltext = seltext & chrKP
  294.                 rtf.selStart = selStart + 1
  295.                 rtf.selLength = 0
  296.             ElseIf Left$(seltext, 1) <> chrKP And Right$(seltext, 1) = chrKP Then
  297.                 rtf.seltext = chrKP & seltext
  298.                 rtf.selStart = selStart + 1
  299.                 rtf.selLength = 0
  300.             End If
  301.         End If
  302.     Case Chr(8)
  303.     
  304.     Case Else
  305.         rtf.seltext = chrKP
  306.     End Select
  307. End Sub
  308.  
  309.  
  310. Sub Main()
  311.  
  312.     dblStart = Timer
  313.  
  314.     '* XP theme compatbility
  315.     InitCommonControls
  316.     
  317.     '* Initialization for paths
  318.     If Right$(App.PATH, 1) <> "\" Then slash$ = "\"
  319.     PATH = App.PATH & slash$
  320.     strGlobalINI = PATH & "sIRC.ini"
  321.     
  322.     '* Create the menus
  323.     CreateMenus
  324.     
  325.     If FileExists(PATH & "version.data") Then
  326.         lngBuild = CLng(GetINI(PATH & "version.data", "data", "build", "0"))
  327.         lngBuild = lngBuild + 1
  328.         PutINI PATH & "version.data", "data", "build", CStr(lngBuild)
  329.     End If
  330.     
  331.     '* uncomment this and change before compiling
  332.     'lngBuild = 3416
  333.         
  334.     
  335.     '* REMOVE OR DIE
  336.     'frmChanCentral.Show
  337.     'Exit Sub
  338.     
  339.     
  340.     
  341.     '* Load Color Table
  342.     LoadColors
  343.     
  344.     '* Initialize scripting engine
  345.     Set scriptEngine = New clsSSE_Main
  346.         
  347.     Dim strAL As String, strName As String
  348.     strAL = GetSetting("sIRC", "options", "loadauto")
  349.     strName = GetSetting("sIRC", "options", "loadautoname")
  350.     
  351.     If strAL = "true" Then
  352.         strINI = PATH & strName & "-settings.ini"
  353.         strProfile = strName
  354.         winINI = PATH & strName & "-windows.ini"
  355.         CLIENT.Show
  356.     Else
  357.         Load frmLoadProfile
  358.         frmLoadProfile.Show
  359.     End If
  360.     
  361. End Sub
  362.  
  363. Sub TimeOut(dblDuration)
  364.  
  365.     Dim startTime As Double
  366.     startTime = Timer
  367.  
  368.     Do While Timer - startTime < dblDuration
  369.         DoEvents
  370.     Loop
  371.  
  372. End Sub
  373. Sub PutText_Reset(rtf As RichTextBox, strData As String)
  374.     
  375.     Dim i As Long, Length As Integer, strChar As String, strBuffer As String
  376.     Dim clr As Integer, bclr As Integer, dftclr As Integer, strRTFBuff As String
  377.     Dim bbbold As Boolean, bbunderline As Boolean, bbreverse As Boolean, strTmp As String
  378.     Dim lngFC As String, lngBC As String, lngStart As Long, lngLength As Long, strPlaceHolder As String
  379.     
  380.     lngStart = rtf.selStart
  381.     lngLength = rtf.selLength
  382.     
  383.     rtf.Text = ""
  384.     
  385.     '* if not inialized, set font, intialiaze
  386.     Dim btCharSet As Long
  387.     Dim strRTF As String
  388.     If rtf.Tag <> "init'd" Then
  389.         rtf.Tag = "init'd"
  390.         strFontName = rtf.Font.Name
  391.         rtf.parent.FontName = strFontName
  392.         btCharSet = GetTextCharset(rtf.parent.hdc)
  393.         strRTF = ""
  394.         strRTF = strRTF & "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fcharset" & btCharSet & " " & strFontName & ";}}" & vbCrLf
  395.         strRTF = strRTF & ColorTable & vbCrLf
  396.         strRTF = strRTF & "\viewkind4\uc1\pard\cf0\fi-" & intIndent & "\li" & intIndent & "\f0\fs" & CInt(intFontSize * 2) & vbCrLf
  397.         strPlaceHolder = "\n"
  398.         For i = 0 To DefinedColors - 1
  399.             strRTF = strRTF & "\cf" & i & " " & strPlaceHolder
  400.         Next
  401.         strRTF = strRTF & "}"
  402.         rtf.TextRTF = strRTF
  403.         
  404.         '* New session for window... call
  405.         '# LogData rtf.Parent.Caption, "blah", strData, True
  406.     Else
  407.         '# LogData rtf.Parent.Caption, "blah", strData, False
  408.         
  409.     End If
  410.     
  411.     rtf.parent.FontName = strFontName
  412.     btCharSet = GetTextCharset(rtf.parent.hdc)
  413.     strRTF = ""
  414.     strRTF = strRTF & "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fcharset" & btCharSet & " " & strFontName & ";}}" & vbCrLf
  415.     strRTF = strRTF & ColorTable & vbCrLf
  416.     strRTF = strRTF & "\viewkind4\uc1\pard\cf0\fi-" & intIndent & "\li" & intIndent & "\f0\fs" & CInt(intFontSize * 2) & vbCrLf
  417.         
  418.     strRTFBuff = "\b0\cf" & RAnsiColor(lngForeColor) + 1 & "\highlight" & RAnsiColor(lngBackColor) + 1 & "\i0\ulnone"
  419.     dftclr = RAnsiColor(lngForeColor)
  420.     
  421.     Length = Len(strData)
  422.     i = 1
  423.     
  424.     Do
  425.         strChar = Mid$(strData, i, 1)
  426.         Select Case strChar
  427.             Case Chr(Cancel)    'cancel code
  428.                 If Right$(strRTFBuff, 1) <> " " Then strRTFBuff = strRTFBuff & " "
  429.                 lngFC = CStr(RAnsiColor(lngForeColor))
  430.                 lngBC = CStr(RAnsiColor(lngBackColor))
  431.                 strRTFBuff = strRTFBuff & strBuffer & "\b0\ul0\cf" & RAnsiColor(lngForeColor) + 1 & "\highlight" & RAnsiColor(lngBackColor) + 1
  432.                 strBuffer = ""
  433.                 i = i + 1
  434.             Case strBold
  435.                 bbbold = Not bbbold
  436.                 If Right$(strRTFBuff, 1) <> " " Then strRTFBuff = strRTFBuff & " "
  437.                 strRTFBuff = strRTFBuff & strBuffer & "\b"
  438.                 If bbbold = False Then strRTFBuff = strRTFBuff & "0"
  439.                 strBuffer = ""
  440.                 i = i + 1
  441.             Case strUnderline
  442.                 bbunderline = Not bbunderline
  443.                 If Right$(strRTFBuff, 1) <> " " Then strRTFBuff = strRTFBuff & " "
  444.                 strRTFBuff = strRTFBuff & strBuffer & "\ul"
  445.                 If bbunderline = False Then strRTFBuff = strRTFBuff & "none"
  446.                 strBuffer = ""
  447.                 i = i + 1
  448.             Case strReverse
  449.                 bbreverse = Not bbreverse
  450.                 If Right$(strRTFBuff, 1) <> " " Then strRTFBuff = strRTFBuff & " " ' & strBuffer & "\"
  451.                 If bbreverse = False Then
  452.                     If Right$(strRTFBuff, 1) <> " " Then strRTFBuff = strRTFBuff & " "
  453.                     strRTFBuff = strRTFBuff & strBuffer & "\cf" & RAnsiColor(lngForeColor) + 1 & "\highlight" & RAnsiColor(lngBackColor) + 1
  454.                 Else
  455.                     If Right$(strRTFBuff, 1) <> " " Then strRTFBuff = strRTFBuff & " "
  456.                     strRTFBuff = strRTFBuff & strBuffer & "\cf" & RAnsiColor(lngBackColor) + 1 & "\highlight" & RAnsiColor(lngForeColor) + 1
  457.                 End If
  458.                 
  459.                 strBuffer = ""
  460.                 i = i + 1
  461.             Case strColor
  462.                 
  463.                 strTmp = ""
  464.                 i = i + 1
  465.  
  466.                 Do Until Not ValidColorCode(strTmp) Or i > Length
  467.                     strTmp = strTmp & Mid$(strData, i, 1)
  468.                     i = i + 1
  469.                 Loop
  470.                 
  471.                 strTmp = LeftR(strTmp, 1)
  472.                 If strTmp = "" Then
  473.                     lngFC = CStr(RAnsiColor(lngForeColor))
  474.                     lngBC = CStr(RAnsiColor(lngBackColor))
  475.                 Else
  476.                     lngFC = LeftOf(strTmp, ",")
  477.                     lngFC = CStr(CInt(lngFC))
  478.                     If InStr(strTmp, ",") Then
  479.                         lngBC =  finish
  480.    cnish
  481.    cnish
  482.    c<0luff = CSm
  483.  
  484.                     lngFC = CStx
  485.  
  486.       = CStx
  487.    Ifse Chhhhh= CS1ENBNff =($eI   = CStx(hUEEEEEEEEEEEh= Mid$(strData, i, M          st           e        strBuff      e        strBuff      l       st         nf   st           e     I      = CStx
  488.   tart + 1
  489.       e     , 1) <> chrKP ThuT')     e   4ln & hUEE hUEE hUEE\b0rh
  490.    cnis7              Else
  491.                     lngFC = LeftOf(strTmp, ",")
  492.        e CStr(RAnsiCoFBuff = strRTF(        \(.D= CS    e CStr(RAnstF(        \(Dtri e  <FBuff = s lngStaeri eA      e                  lngFC = C2        \(Dtri e  <FBuff = s lngSte As Stede Integer,CLExplrRTFBuff, 1) <> " "&+i  lng
  493. L pr,CLExplrRTFBuff, 1) BufcECeuDim strAL n)dn(=_t = rtf.selStart
  494.     selLeu strAL n)dn(=_t = rtf.selStart
  495.     selLeu strAL n)dn(=_t = rtf.selStart
  496.     selLeu strAL n)dn(=_t = rtf.selStart
  497.     selLeu strAL n)dn(=_t = rtf.selStart
  498.     selLeu strAL n)dn(=_t = rtf.selStart
  499.     selLeu strAL n)dn(=_t = rtf.selStart
  500.     selLeu strAL,n)dn(=selLleEn)dn(=_t = rtf.seli
  501.     selLeu strAL,n)dn(=selLleEn)dn(=_t = rtf.seli
  502.     selLeu strAL,n)dn(=selLleEn)dn(=_t = rtf.seli
  503.     selLeu strAL,nfR B(=selLleEn)dn(=ef
  504.   $(strRTN        an)dn(=_t = rtf.= rtf.cnfR B(=selLleEns StlLeu strai        an)dngBC =  finish- 2)ea)
  505.  
  506.     '* Declare vaeeEns StlLeu straicie         \(Dt'#otrai
  507.     h- 2)ea)E seg selLeuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu'EEEh= Mid$(strData, i, M          st           e        strBuff      e        strBuff      l       st         nf   st           e     I      = CStx
  508.   tart + 1
  509.       e     , 1) <> chrKP ThuT')     e   4ln & hUEE hUEE hUEE\b0rh
  510.    cnis7              Else
  511.  FBufrAL n)dn(=          ,