예제 #1
0
    public bool AddString(string se, string rep)
    {
        this.state.Clear();
        Patcher.Pattern pattern = new Patcher.Pattern();
        bool            result;

        if (!pattern.AddString(se, rep))
        {
            this.state.AddMessage(pattern.CurState, 16);
            result = false;
        }
        else
        {
            this.patterns.Add(pattern);
            result = true;
        }
        return(result);
    }
예제 #2
0
    public bool Patch()
    {
        this.state.Clear();
        bool result;

        if (this.patterns.Count == 0)
        {
            this.state.AddMessage("You did not specify the patterns! (patterns.Count = 0)", 16);
            result = false;
        }
        else if (!this.fileW.Load(this.fullPathToFile, this.bufferSize))
        {
            this.state.AddMessage(this.fileW.CurState);
            result = false;
        }
        else
        {
            try
            {
                List <Patcher.Pattern> .Enumerator enumerator = this.patterns.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    Patcher.Pattern current = enumerator.Current;
                    this.fileW.SetPosition(-1L);
                    if (this.FindAllPatterns(current) && current.ReplaceImmediately)
                    {
                        this.ReplaceAllPatterns(current);
                    }
                }
                ((IDisposable)enumerator).Dispose();
            }
            finally
            {
                //List<Patcher.Pattern>.Enumerator enumerator;
            }
            this.fileW.Close();
            result = (this.state.MessageCount <= 0 && this.ResultInMessage());
        }
        return(result);
    }
예제 #3
0
    private bool ResultInMessage()
    {
        int  num  = 0;
        int  num2 = 0;
        bool flag = false;

        checked
        {
            try
            {
                List <Patcher.Pattern> .Enumerator enumerator = this.patterns.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    Patcher.Pattern current = enumerator.Current;
                    if (current.SuccesFind)
                    {
                        num2++;
                    }
                    else if (current.FindCount > 0)
                    {
                        num2++;
                        num++;
                    }
                    else
                    {
                        num++;
                    }
                    if (current.ReplaceImmediately)
                    {
                        flag = true;
                    }
                }
                ((IDisposable)enumerator).Dispose();
            }
            finally
            {
                //List<Patcher.Pattern>.Enumerator enumerator;
            }
            bool result;
            if (this.msg)
            {
                if (flag)
                {
                    if (num > 0 && num2 > 0)
                    {
                        this.state.AddMessage(this.succesMessages[2], 0);
                        result = true;
                        return(result);
                    }
                    if (num == 0 && num2 > 0)
                    {
                        this.state.AddMessage(this.succesMessages[1], 0);
                        result = true;
                        return(result);
                    }
                    this.state.AddMessage(this.succesMessages[0], 0);
                }
                else
                {
                    if (num > 0 && num2 > 0)
                    {
                        this.state.AddMessage(this.succesMessages[4], 0);
                        result = true;
                        return(result);
                    }
                    if (num == 0 && num2 > 0)
                    {
                        this.state.AddMessage(this.succesMessages[3], 0);
                        result = true;
                        return(result);
                    }
                    this.state.AddMessage(this.succesMessages[0], 0);
                }
            }
            else if (flag)
            {
                if (num > 0 && num2 > 0)
                {
                    result = true;
                    return(result);
                }
                if (num == 0 && num2 > 0)
                {
                    result = true;
                    return(result);
                }
            }
            else
            {
                if (num > 0 && num2 > 0)
                {
                    result = true;
                    return(result);
                }
                if (num == 0 && num2 > 0)
                {
                    result = true;
                    return(result);
                }
            }
            result = false;
            return(result);
        }
    }
예제 #4
0
 private bool ReplaceAllPatterns(Patcher.Pattern pt)
 {
     checked
     {
         bool result;
         if (!pt.ValidPattern)
         {
             this.state.AddMessage(pt.CurState, 0);
             result = false;
         }
         else
         {
             int num = 0;
             List <Patcher.Pattern.Place> allPlaces = pt.AllPlaces;
             try
             {
                 List <Patcher.Pattern.Place> .Enumerator enumerator = allPlaces.GetEnumerator();
                 while (enumerator.MoveNext())
                 {
                     Patcher.Pattern.Place current = enumerator.Current;
                     int  num2  = 0;
                     bool flag  = false;
                     bool flag2 = false;
                     if (!this.fileW.SetPosition(current.bufferPos - 1L))
                     {
                         this.state.AddMessage(this.fileW.CurState);
                         result = false;
                         return(result);
                     }
                     while (this.fileW.ReadNext(true))
                     {
                         int arg_91_0     = 0;
                         int bufferLength = this.fileW.BufferLength;
                         for (int i = arg_91_0; i <= bufferLength; i++)
                         {
                             if (num2 == 0)
                             {
                                 i = current.position;
                             }
                             if (pt.replace[num2].Length == 1)
                             {
                                 this.fileW.buffer[i] = pt.replace[num2][0];
                                 flag = true;
                             }
                             num2++;
                             if (flag && (pt.replace.Count == num2 || i == this.fileW.BufferLength))
                             {
                                 this.fileW.FlushBuffer();
                                 flag2 = true;
                                 flag  = false;
                             }
                             if (pt.replace.Count == num2)
                             {
                                 if (flag2)
                                 {
                                     num++;
                                 }
                                 this.fileW.RunAway();
                                 break;
                             }
                         }
                         Application.DoEvents();
                     }
                     if (this.fileW.CurState != null)
                     {
                         this.state.AddMessage(this.fileW.CurState);
                         result = false;
                         return(result);
                     }
                 }
                 ((IDisposable)enumerator).Dispose();
             }
             finally
             {
                 //List<Patcher.Pattern.Place>.Enumerator enumerator;
             }
             result = true;
         }
         return(result);
     }
 }
예제 #5
0
 private bool FindAllPatterns(Patcher.Pattern pt)
 {
     checked
     {
         bool result;
         if (!pt.ValidPattern && !pt.Validate())
         {
             this.state.AddMessage(pt.CurState, 0);
             result = false;
         }
         else
         {
             long num  = 0L;
             int  num2 = 0;
             int  num3 = 0;
             int  num4 = 0;
             int  num5 = 0;
             while (this.fileW.ReadNext(true))
             {
                 int arg_4A_0     = 0;
                 int bufferLength = this.fileW.BufferLength;
                 for (int i = arg_4A_0; i <= bufferLength; i++)
                 {
                     if (pt.search[num3].Length == 2 || this.fileW.buffer[i] == pt.search[num3][0])
                     {
                         if (num3 == 0)
                         {
                             num2 = i;
                             num  = this.fileW.CurrentBufferOffset;
                         }
                         if (pt.search.Count - 1 == num3)
                         {
                             num3 = 0;
                             if (num4 == pt.replaceAfter)
                             {
                                 num5++;
                                 pt.AddPlace(num, num2);
                                 if (pt.brakAfter != -1 && num5 == pt.brakAfter)
                                 {
                                     result = true;
                                     return(result);
                                 }
                             }
                             else
                             {
                                 num4++;
                             }
                         }
                         else
                         {
                             num3++;
                         }
                     }
                     else if (num3 > 0)
                     {
                         if (!this.fileW.EndOfFile || pt.search.Count - num3 <= this.fileW.BufferLength)
                         {
                             num3 = 0;
                             if (this.fileW.CurrentBufferOffset != num && !this.fileW.ReadWhere(num))
                             {
                                 if (this.fileW.CurState != null)
                                 {
                                     this.state.AddMessage(this.fileW.CurState);
                                 }
                                 result = false;
                                 return(result);
                             }
                             i = num2;
                         }
                     }
                 }
                 Application.DoEvents();
             }
             if (this.fileW.CurState != null)
             {
                 this.state.AddMessage(this.fileW.CurState);
                 result = false;
             }
             else
             {
                 if (pt.brakAfter == -1)
                 {
                     if (num5 > 0)
                     {
                         result = true;
                         return(result);
                     }
                 }
                 else if (num5 > 0)
                 {
                     result = true;
                     return(result);
                 }
                 result = false;
             }
         }
         return(result);
     }
 }