/[RomCheater]/trunk/RomCheater/Docking/UI/UIMemoryViewer.cs
ViewVC logotype

Diff of /trunk/RomCheater/Docking/UI/UIMemoryViewer.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 198 by william, Thu May 31 07:13:43 2012 UTC revision 203 by william, Thu May 31 09:03:53 2012 UTC
# Line 13  using System.Diagnostics; Line 13  using System.Diagnostics;
13    
14  namespace RomCheater.Docking.UI  namespace RomCheater.Docking.UI
15  {  {
16      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>, IAcceptsMemoryRange      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>//, IAcceptsMemoryRange
17      {      {
18            private bool first_load = true;
19          public UIMemoryViewer()          public UIMemoryViewer()
20          {          {
21              InitializeComponent();              InitializeComponent();
# Line 29  namespace RomCheater.Docking.UI Line 30  namespace RomCheater.Docking.UI
30              txtData.UseFixedBytesPerLine = true;              txtData.UseFixedBytesPerLine = true;
31              txtData.StringViewVisible = true;              txtData.StringViewVisible = true;
32              ramScroll.Minimum = (int)MemoryStart;              ramScroll.Minimum = (int)MemoryStart;
33              for (uint i = MemoryStart; i < (MemoryStart + MemorySize); i += max_address_width) { ramScroll.Maximum += (int)max_address_width; }              for (uint i = MemoryStart; i < (MemoryStart + max_ram_view); i += max_address_width) { ramScroll.Maximum += (int)max_address_width; }
34              ramScroll.Value = ramScroll.Minimum;              ramScroll.Value = ramScroll.Minimum;
35              this.CanChangeUpdateInterval = false;              this.CanChangeUpdateInterval = false;
36    
# Line 40  namespace RomCheater.Docking.UI Line 41  namespace RomCheater.Docking.UI
41                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);
42              }              }
43              this.AcceptedPlugin = null; this.AcceptedProcess = null;              this.AcceptedPlugin = null; this.AcceptedProcess = null;
44    
45                txtAddresses.MouseWheel += new MouseEventHandler(txtAddresses_MouseWheel);
46                txtData.MouseWheel += new MouseEventHandler(txtData_MouseWheel);
47            }
48    
49            private void GetFirstNonZeroByte()
50            {
51                if (!DesignMode)
52                {
53                    Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();
54                    reader.ReadProcess = this.AcceptedProcess;
55                    reader.OpenProcess();
56                    uint addr = 0;
57                    reader.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);
58                    GotoAddress(addr);
59                }
60          }          }
61    
62          #region IProcessConfig Members          #region IProcessConfig Members
63          public Process AcceptedProcess { get; set; }          private Process _AcceptedProcess;
64            public Process AcceptedProcess
65            {
66                get { return _AcceptedProcess; }
67                set
68                {
69                    _AcceptedProcess = value;
70                    update_timer.Enabled = (value != null);
71                    UpdateEnabled = update_timer.Enabled;
72                    if (value != null)
73                        GetFirstNonZeroByte();
74                }
75            }
76          #endregion          #endregion
77          #region IAcceptsPlugin<IConfigPlugin> Members          #region IAcceptsPlugin<IConfigPlugin> Members
78          public IConfigPlugin AcceptedPlugin { get; set; }          public IConfigPlugin AcceptedPlugin { get; set; }
79          #endregion          #endregion
80            #region IAcceptsMemoryRange members
81            private uint MemoryStart { get { return 0; } }
82            private uint MemorySize { get { return int.MaxValue; } }
83            #endregion
84          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
85          public void GotoBottom() { uint size = MemorySize; this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); }          public void GotoBottom() { uint size = MemorySize; this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); }
86          public void GotoAddress(uint addr) { this.CURRENT_TOP_ADDR = (uint)addr & 0xFFFFFFF0; }          public void GotoAddress(uint addr) { this.CURRENT_TOP_ADDR = (uint)addr & 0xFFFFFFF0; }
# Line 83  namespace RomCheater.Docking.UI Line 117  namespace RomCheater.Docking.UI
117          static uint small_scroll_change = max_address_width * 1; // scrolls one line (when you clikc the up or down arrows)          static uint small_scroll_change = max_address_width * 1; // scrolls one line (when you clikc the up or down arrows)
118          static uint medium_scroll_change = max_ram_view / 2; // scrolls half a page          static uint medium_scroll_change = max_ram_view / 2; // scrolls half a page
119          static uint large_scroll_change = max_ram_view; // scrolls a full page          static uint large_scroll_change = max_ram_view; // scrolls a full page
   
         #region IAcceptsMemoryRange members  
         public uint MemoryStart { get; set; }  
         public uint MemorySize { get; set; }  
         #endregion  
120          private uint _CURRENT_TOP_ADDR;          private uint _CURRENT_TOP_ADDR;
121          uint CURRENT_TOP_ADDR          uint CURRENT_TOP_ADDR
122          {          {
# Line 166  namespace RomCheater.Docking.UI Line 195  namespace RomCheater.Docking.UI
195                  reader.ReadProcess = this.AcceptedProcess;                  reader.ReadProcess = this.AcceptedProcess;
196                  reader.OpenProcess();                  reader.OpenProcess();
197                  int bytesReadSize;                  int bytesReadSize;
198                  byte[] data = reader.ReadProcessMemory(MemoryStart, MemorySize, out bytesReadSize);                  byte[] data = reader.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize);
199                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));
200                  return data;                  return data;
201              }              }
202              catch (Exception ex)              catch (Exception ex)
203              {              {
204                  logger.Error.WriteLine("{0}.GetMemory():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());                  logger.Error.WriteLine("{0}.GetMemory():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
205                  byte[] data = new byte[MemorySize];                  byte[] data = new byte[max_ram_view];
206                  for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }                  for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }
207                  return data;                  return data;
208              }              }
# Line 187  namespace RomCheater.Docking.UI Line 216  namespace RomCheater.Docking.UI
216                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
217    
218                  byte[] data = GetMemory();                  byte[] data = GetMemory();
   
                 List<byte> ByteData = new List<byte>((int)(address + (max_ram_view - 0)));  
   
219                  try                  try
220                  {                  {
221                      AddressList = "";                      RamData = data;
                     AsciiData = "";  
222    
                     // create a byte array holding only the bytes that we need  
                     for (uint i = address; i < (address + (max_ram_view + 1)); i += 1) { ByteData.Add(data[i]); }  
223    
224                        AddressList = "";
225                        AsciiData = "";
226                      // write the addreses out                      // write the addreses out
227                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)
228                      {                      {
229                          AddressList = AddressList + string.Format("{0:X8}:\n", i);                          AddressList = AddressList + string.Format("{0:X8}:\n", i);
230                      }                      }
231                      // write out the ascii data                      //// write out the ascii data
232                      StringBuilder builder = new StringBuilder();                      StringBuilder builder = new StringBuilder();
233                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)
234                      {                      {
235                          for (uint j = 0; j < max_address_width; j++)                          try
236                          {                          {
237                              uint current_addr = i + j;                              for (uint j = 0; j < max_address_width; j++)
                             if (current_addr >= MemorySize) break;  
                             byte ascii_value_raw = data[current_addr];  
                             char ascii_value = (char)data[current_addr];  
                             if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)  
                             {  
                                 builder.Append(ascii_value.ToString());  
                             }  
                             else  
238                              {                              {
239                                  builder.Append(".");                                  uint current_addr = i + j;
240                                    if (current_addr >= MemorySize) break;
241                                    byte ascii_value_raw = data[j];
242                                    char ascii_value = (char)data[j];
243                                    if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)
244                                    {
245                                        builder.Append(ascii_value.ToString());
246                                    }
247                                    else
248                                    {
249                                        builder.Append(".");
250                                    }
251                              }                              }
252                                builder.AppendLine();
253                            }
254                            catch (Exception ex)
255                            {
256                                logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
257                                return;
258                          }                          }
                         builder.AppendLine();  
259                      }                      }
260                      AsciiData = builder.ToString();                      AsciiData = builder.ToString();
                     // write out the bytes  
                     RamData = ByteData.ToArray();  
261    
262    
263                  }                  }
# Line 294  namespace RomCheater.Docking.UI Line 325  namespace RomCheater.Docking.UI
325              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
326    
327              ////if (e.Type == ScrollEventType.EndScroll) return;              ////if (e.Type == ScrollEventType.EndScroll) return;
328              uint size = MemorySize;              uint size = max_ram_view;
329    
330              bool haveModifier = false;              bool haveModifier = false;
331              switch (e.Modifiers)              switch (e.Modifiers)
# Line 338  namespace RomCheater.Docking.UI Line 369  namespace RomCheater.Docking.UI
369              }              }
370              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;
371              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;
372              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemoryStart) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (size - 1);
373    
374              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
375          }          }
# Line 348  namespace RomCheater.Docking.UI Line 379  namespace RomCheater.Docking.UI
379          private void txtData_KeyDown(object sender, KeyEventArgs e) { this.Handle_KeyDown(sender, e); }          private void txtData_KeyDown(object sender, KeyEventArgs e) { this.Handle_KeyDown(sender, e); }
380    
381          private void ramScroll_Scroll(object sender, ScrollEventArgs e) { this.Handle_Scroll(sender, e); }          private void ramScroll_Scroll(object sender, ScrollEventArgs e) { this.Handle_Scroll(sender, e); }
382    
383            private ScrollEventArgs GetMouseWheelScrollChange(int WheelDelta)
384            {
385                ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.SmallIncrement,1);
386                if (WheelDelta < 0)
387                {
388                    //// negative: scroll down
389                    //// SmallDecrement -or- LargeDecrement
390                    //if (WheelDelta <= small_scroll_change)
391                    //{
392                    //    args = new ScrollEventArgs(ScrollEventType.SmallDecrement,(int)small_scroll_change);
393                    //}
394                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
395                    //{
396                    //    args = new ScrollEventArgs(ScrollEventType.LargeDecrement, (int)large_scroll_change);
397                    //}
398                    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, 1);
399                }
400                else
401                {
402                    //// positive: scroll up
403                    //// SmallIncrement  -or- LargeIncrement
404                    //if (WheelDelta <= small_scroll_change)
405                    //{
406                    //    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, (int)small_scroll_change);
407                    //}
408                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
409                    //{
410                    //    args = new ScrollEventArgs(ScrollEventType.LargeIncrement, (int)large_scroll_change);
411                    //}
412                    args = new ScrollEventArgs(ScrollEventType.SmallDecrement, 1);
413                }
414                return args;
415            }
416    
417            void txtAddresses_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
418            void txtData_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
419          
420    
421          private void Handle_Scroll(object sender, ScrollEventArgs e)          private void Handle_Scroll(object sender, ScrollEventArgs e)
422          {          {
423              //isScrolling = true;              //isScrolling = true;
# Line 363  namespace RomCheater.Docking.UI Line 433  namespace RomCheater.Docking.UI
433              switch (e.Type)              switch (e.Type)
434              {              {
435                  case ScrollEventType.SmallDecrement:                  case ScrollEventType.SmallDecrement:
436                      this.CURRENT_TOP_ADDR -= (small_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - small_scroll_change) > this.CURRENT_TOP_ADDR))
437                        {
438                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
439                        }
440                        else
441                        {
442                            this.CURRENT_TOP_ADDR -= (small_scroll_change);
443                        }
444                      break;                      break;
445                  case ScrollEventType.SmallIncrement:                  case ScrollEventType.SmallIncrement:
446                      this.CURRENT_TOP_ADDR += (small_scroll_change);                      this.CURRENT_TOP_ADDR += (small_scroll_change);
447                      break;                      break;
448    
449                  case ScrollEventType.LargeDecrement:                  case ScrollEventType.LargeDecrement:
450                      this.CURRENT_TOP_ADDR -= (large_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - large_scroll_change) > this.CURRENT_TOP_ADDR))
451                        {
452                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
453                        }
454                        else
455                        {
456                            this.CURRENT_TOP_ADDR -= (large_scroll_change);
457                        }
458                      break;                      break;
459                  case ScrollEventType.LargeIncrement:                  case ScrollEventType.LargeIncrement:
460                      this.CURRENT_TOP_ADDR += (large_scroll_change);                      this.CURRENT_TOP_ADDR += (large_scroll_change);

Legend:
Removed from v.198  
changed lines
  Added in v.203

  ViewVC Help
Powered by ViewVC 1.1.22