/[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 200 by william, Thu May 31 07:29:44 2012 UTC revision 214 by william, Sat Jun 2 10:43:05 2012 UTC
# Line 29  namespace RomCheater.Docking.UI Line 29  namespace RomCheater.Docking.UI
29              txtData.UseFixedBytesPerLine = true;              txtData.UseFixedBytesPerLine = true;
30              txtData.StringViewVisible = true;              txtData.StringViewVisible = true;
31              ramScroll.Minimum = (int)MemoryStart;              ramScroll.Minimum = (int)MemoryStart;
32              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; }
33              ramScroll.Value = ramScroll.Minimum;              ramScroll.Value = ramScroll.Minimum;
34              this.CanChangeUpdateInterval = false;              this.CanChangeUpdateInterval = false;
35    
# Line 40  namespace RomCheater.Docking.UI Line 40  namespace RomCheater.Docking.UI
40                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);
41              }              }
42              this.AcceptedPlugin = null; this.AcceptedProcess = null;              this.AcceptedPlugin = null; this.AcceptedProcess = null;
43    
44                txtAddresses.MouseWheel += new MouseEventHandler(txtAddresses_MouseWheel);
45                txtData.MouseWheel += new MouseEventHandler(txtData_MouseWheel);
46            }
47    
48            private void GetFirstNonZeroByte()
49            {
50                if (!DesignMode)
51                {
52                    Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();
53                    reader.ReadProcess = this.AcceptedProcess;
54                    reader.OpenProcess();
55                    uint addr = 0;
56                    reader.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);
57                    GotoAddress(addr);
58                }
59          }          }
60    
61          #region IProcessConfig Members          #region IProcessConfig Members
62          private Process _AcceptedProcess;          private Process _AcceptedProcess;
63          public Process AcceptedProcess          public Process AcceptedProcess
# Line 51  namespace RomCheater.Docking.UI Line 68  namespace RomCheater.Docking.UI
68                  _AcceptedProcess = value;                  _AcceptedProcess = value;
69                  update_timer.Enabled = (value != null);                  update_timer.Enabled = (value != null);
70                  UpdateEnabled = update_timer.Enabled;                  UpdateEnabled = update_timer.Enabled;
71                    if (value != null)
72                        GetFirstNonZeroByte();
73              }              }
74          }          }
75          #endregion          #endregion
# Line 58  namespace RomCheater.Docking.UI Line 77  namespace RomCheater.Docking.UI
77          public IConfigPlugin AcceptedPlugin { get; set; }          public IConfigPlugin AcceptedPlugin { get; set; }
78          #endregion          #endregion
79          #region IAcceptsMemoryRange members          #region IAcceptsMemoryRange members
80          public uint MemoryStart { get; set; }          public uint MemoryStart { get { return 0; } }
81          public uint MemorySize { get; set; }          public uint MemorySize { get { return int.MaxValue; } }
82          #endregion          #endregion
83          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
84          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); }
# Line 128  namespace RomCheater.Docking.UI Line 147  namespace RomCheater.Docking.UI
147              editor.ShowDialog();              editor.ShowDialog();
148              if (editor.BytesEdited)              if (editor.BytesEdited)
149              {              {
150                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);                  //DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);
151                  txtData.ByteProvider = _DynamicByteProvider;                  //txtData.ByteProvider = _DynamicByteProvider;
152                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
153                  this.WriteCurrentBytes();                  this.WriteCurrentBytes(this.CURRENT_TOP_ADDR, editor.AsBytes);
154              }              }
155              this.UpdateEnabled = reenable;              this.UpdateEnabled = reenable;
156          }          }
# Line 196  namespace RomCheater.Docking.UI Line 215  namespace RomCheater.Docking.UI
215                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
216    
217                  byte[] data = GetMemory();                  byte[] data = GetMemory();
   
                 List<byte> ByteData = new List<byte>((int)(address + (max_ram_view - 0)));  
   
218                  try                  try
219                  {                  {
220                      AddressList = "";                      RamData = data;
                     AsciiData = "";  
221    
                     // 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]); }  
222    
223                        AddressList = "";
224                        AsciiData = "";
225                      // write the addreses out                      // write the addreses out
226                      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)
227                      {                      {
228                          AddressList = AddressList + string.Format("{0:X8}:\n", i);                          AddressList = AddressList + string.Format("{0:X8}:\n", i);
229                      }                      }
230                      // write out the ascii data                      //// write out the ascii data
231                      StringBuilder builder = new StringBuilder();                      StringBuilder builder = new StringBuilder();
232                      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)
233                      {                      {
234                          for (uint j = 0; j < max_address_width; j++)                          try
235                          {                          {
236                              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)  
237                              {                              {
238                                  builder.Append(ascii_value.ToString());                                  uint current_addr = i + j;
239                              }                                  if (current_addr >= MemorySize) break;
240                              else                                  byte ascii_value_raw = data[j];
241                              {                                  char ascii_value = (char)data[j];
242                                  builder.Append(".");                                  if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)
243                                    {
244                                        builder.Append(ascii_value.ToString());
245                                    }
246                                    else
247                                    {
248                                        builder.Append(".");
249                                    }
250                              }                              }
251                                builder.AppendLine();
252                            }
253                            catch (Exception ex)
254                            {
255                                logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
256                                return;
257                          }                          }
                         builder.AppendLine();  
258                      }                      }
259                      AsciiData = builder.ToString();                      AsciiData = builder.ToString();
                     // write out the bytes  
                     RamData = ByteData.ToArray();  
260    
261    
262                  }                  }
# Line 247  namespace RomCheater.Docking.UI Line 268  namespace RomCheater.Docking.UI
268              }              }
269              catch (Exception ex) { logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
270          }          }
271          private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)          //private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)
272          {          //{
273              this.WriteCurrentBytes();          //    this.WriteCurrentBytes();
274          }          //}
275          private void WriteCurrentBytes()          private void WriteCurrentBytes(uint start_address, byte[] data)
276          {          {
277              try              try
278              {              {
279                  if (AcceptedProcess == null) { return; }                  if (AcceptedProcess == null) { return; }
280                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
281                  // Byte changed                  // Byte changed
282                  byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();                  //byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();
283                                    
284    
285                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();
# Line 266  namespace RomCheater.Docking.UI Line 287  namespace RomCheater.Docking.UI
287                  reader.OpenProcess();                  reader.OpenProcess();
288                  int bytesReadSize;                  int bytesReadSize;
289    
290                  for (int i = 0; i < data.Length; i += sizeof(uint))                  for (int i = 0; i < data.Length; i ++)
291                  {                  {
292                      uint addr = (uint)(this.CURRENT_TOP_ADDR + i);                      uint addr = (uint)(start_address + i);
293                      uint data_to_write = BitConverter.ToUInt32(data, i);                      byte data_to_write = data[i];
294                      reader.WriteProcessMemory((UIntPtr)addr, data, out bytesReadSize);                      reader.WriteProcessMemory((UIntPtr)addr, data_to_write, out bytesReadSize);
295                  }                  }
296              }              }
297              catch (Exception ex) { logger.Error.WriteLine("{0}.WriteCurrentBytes():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.WriteCurrentBytes():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
# Line 287  namespace RomCheater.Docking.UI Line 308  namespace RomCheater.Docking.UI
308                  //this.Logger.LogDebugMessage(string.Format("RunWorkerCompeleted() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", RamData.Length));                  //this.Logger.LogDebugMessage(string.Format("RunWorkerCompeleted() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", RamData.Length));
309                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);
310                  txtData.ByteProvider = _DynamicByteProvider;                  txtData.ByteProvider = _DynamicByteProvider;
311                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
312              }              }
313              catch (ObjectDisposedException) { } // ignore errors aobut disposed objects (usually only happens when the parent closes)              catch (ObjectDisposedException) { } // ignore errors aobut disposed objects (usually only happens when the parent closes)
314              catch (Exception ex) { logger.Error.WriteLine("{0}.ResultsUpdateWorkerThread_RunWorkerCompleted():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.ResultsUpdateWorkerThread_RunWorkerCompleted():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
# Line 303  namespace RomCheater.Docking.UI Line 324  namespace RomCheater.Docking.UI
324              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
325    
326              ////if (e.Type == ScrollEventType.EndScroll) return;              ////if (e.Type == ScrollEventType.EndScroll) return;
327              uint size = MemorySize;              //uint size = max_ram_view;
328    
329              bool haveModifier = false;              bool haveModifier = false;
330              switch (e.Modifiers)              switch (e.Modifiers)
# Line 315  namespace RomCheater.Docking.UI Line 336  namespace RomCheater.Docking.UI
336                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;
337                              break;                              break;
338                          case Keys.End:                          case Keys.End:
339                              this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = (uint)((MemorySize - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;
340                              break;                              break;
341                          default:                          default:
342                              //NonHandledKeysAreBeingPressed = true;                              //NonHandledKeysAreBeingPressed = true;
# Line 329  namespace RomCheater.Docking.UI Line 350  namespace RomCheater.Docking.UI
350                  switch (e.KeyCode)                  switch (e.KeyCode)
351                  {                  {
352                      case Keys.Up:                      case Keys.Up:
353                          this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          if (this.CURRENT_TOP_ADDR == 0 && (this.CURRENT_TOP_ADDR - small_scroll_change > this.CURRENT_TOP_ADDR))
354                            {
355                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
356                            }
357                            else
358                            {
359                                this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
360                            }
361                          break;                          break;
362                      case Keys.Down:                      case Keys.Down:
363                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
364                          break;                          break;
365                      case Keys.PageUp:                      case Keys.PageUp:
366                          this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          if (this.CURRENT_TOP_ADDR == 0 && (this.CURRENT_TOP_ADDR - large_scroll_change > this.CURRENT_TOP_ADDR))
367                            {
368                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
369                            }
370                            else
371                            {
372                                this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
373                            }
374                          break;                          break;
375                      case Keys.PageDown:                      case Keys.PageDown:
376                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
# Line 347  namespace RomCheater.Docking.UI Line 382  namespace RomCheater.Docking.UI
382              }              }
383              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;
384              //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;
385              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 = (MemorySize - max_ram_view);
386                
387              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
388          }          }
389    
# Line 357  namespace RomCheater.Docking.UI Line 392  namespace RomCheater.Docking.UI
392          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); }
393    
394          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); }
395    
396            private ScrollEventArgs GetMouseWheelScrollChange(int WheelDelta)
397            {
398                ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.SmallIncrement,1);
399                if (WheelDelta < 0)
400                {
401                    //// negative: scroll down
402                    //// SmallDecrement -or- LargeDecrement
403                    //if (WheelDelta <= small_scroll_change)
404                    //{
405                    //    args = new ScrollEventArgs(ScrollEventType.SmallDecrement,(int)small_scroll_change);
406                    //}
407                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
408                    //{
409                    //    args = new ScrollEventArgs(ScrollEventType.LargeDecrement, (int)large_scroll_change);
410                    //}
411                    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, 1);
412                }
413                else
414                {
415                    //// positive: scroll up
416                    //// SmallIncrement  -or- LargeIncrement
417                    //if (WheelDelta <= small_scroll_change)
418                    //{
419                    //    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, (int)small_scroll_change);
420                    //}
421                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
422                    //{
423                    //    args = new ScrollEventArgs(ScrollEventType.LargeIncrement, (int)large_scroll_change);
424                    //}
425                    args = new ScrollEventArgs(ScrollEventType.SmallDecrement, 1);
426                }
427                return args;
428            }
429    
430            void txtAddresses_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
431            void txtData_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
432          
433    
434          private void Handle_Scroll(object sender, ScrollEventArgs e)          private void Handle_Scroll(object sender, ScrollEventArgs e)
435          {          {
436              //isScrolling = true;              //isScrolling = true;
# Line 366  namespace RomCheater.Docking.UI Line 440  namespace RomCheater.Docking.UI
440    
441              this.UpdateMaxRamView();              this.UpdateMaxRamView();
442              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
443              uint size = MemorySize;              //uint size = MemorySize;
444              if (e.Type == ScrollEventType.EndScroll) return;              if (e.Type == ScrollEventType.EndScroll) return;
445    
446              switch (e.Type)              switch (e.Type)
447              {              {
448                  case ScrollEventType.SmallDecrement:                  case ScrollEventType.SmallDecrement:
449                      this.CURRENT_TOP_ADDR -= (small_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - small_scroll_change) > this.CURRENT_TOP_ADDR))
450                        {
451                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
452                        }
453                        else
454                        {
455                            this.CURRENT_TOP_ADDR -= (small_scroll_change);
456                        }
457                      break;                      break;
458                  case ScrollEventType.SmallIncrement:                  case ScrollEventType.SmallIncrement:
459                      this.CURRENT_TOP_ADDR += (small_scroll_change);                      this.CURRENT_TOP_ADDR += (small_scroll_change);
460                      break;                      break;
461    
462                  case ScrollEventType.LargeDecrement:                  case ScrollEventType.LargeDecrement:
463                      this.CURRENT_TOP_ADDR -= (large_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - large_scroll_change) > this.CURRENT_TOP_ADDR))
464                        {
465                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
466                        }
467                        else
468                        {
469                            this.CURRENT_TOP_ADDR -= (large_scroll_change);
470                        }
471                      break;                      break;
472                  case ScrollEventType.LargeIncrement:                  case ScrollEventType.LargeIncrement:
473                      this.CURRENT_TOP_ADDR += (large_scroll_change);                      this.CURRENT_TOP_ADDR += (large_scroll_change);
# Line 394  namespace RomCheater.Docking.UI Line 482  namespace RomCheater.Docking.UI
482              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;
483              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = VTLB_VADDR_SIZE - max_ram_view;              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = VTLB_VADDR_SIZE - max_ram_view;
484              //if (this.CURRENT_TOP_ADDR < 0 || this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;              //if (this.CURRENT_TOP_ADDR < 0 || this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
485              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = MemorySize - max_ram_view;
486              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
487              //isScrolling = false;              //isScrolling = false;
488          }          }
489    
490      }      }
491  }  }

Legend:
Removed from v.200  
changed lines
  Added in v.214

  ViewVC Help
Powered by ViewVC 1.1.22