Added a Local browser window for local variables
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / heapallocatorbrowser.cpp
index 07eadcd..83ed9c7 100644 (file)
-//
-// allwatch.cpp - All Watch
-//
-// by Jean-Paul Mari
-//
-// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
-//
-// Who  When        What
-// ---  ----------  -----------------------------------------------------------
-// JPM  01/08/2017  Created this file
-//
-
-// STILL TO DO:
-//
-
-#include "debugger/heapallocatorbrowser.h"
-#include "memory.h"
-#include "debugger/DBGManager.h"
-#include "m68000/m68kinterface.h"
-
-
-HeapAllocatorBrowserWindow::HeapAllocatorBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog),
-layout(new QVBoxLayout), text(new QTextBrowser),
-//     layout(new QVBoxLayout), text(new QLabel),
-//     refresh(new QPushButton(tr("Refresh"))),
-//     address(new QLineEdit),
-//     go(new QPushButton(tr("Go"))),
-//     memBase(0),
-//     NbWatch(0),
-//     PtrWatchInfo(NULL)
-Adr(0)
-//PtrAdr(NULL)
-{
-       setWindowTitle(tr("Heap Allocation"));
-
-//     address->setInputMask("hhhhhh");
-//     QHBoxLayout * hbox1 = new QHBoxLayout;
-//     hbox1->addWidget(refresh);
-//     hbox1->addWidget(address);
-//     hbox1->addWidget(go);
-
-       // Need to set the size as well...
-//     resize(560, 480);
-
-       QFont fixedFont("Lucida Console", 8, QFont::Normal);
-//     QFont fixedFont("", 8, QFont::Normal);
-       fixedFont.setStyleHint(QFont::TypeWriter);
-       text->setFont(fixedFont);
-////   layout->setSizeConstraint(QLayout::SetFixedSize);
-       setLayout(layout);
-
-       layout->addWidget(text);
-//     layout->addWidget(refresh);
-//     layout->addLayout(hbox1);
-
-//     connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
-//     connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));
-}
-
-
-//
-HeapAllocatorBrowserWindow::~HeapAllocatorBrowserWindow(void)
-{
-//     NbWatch = 0;
-//     free(PtrAdr);
-}
-
-
-//
-void HeapAllocatorBrowserWindow::RefreshContents(void)
-{
-       char string[1024];
-//     char buf[64];
-       QString HA;
-       size_t Adr68K;
-       size_t Error = 0;
-       HeapAllocation HeapAllocation;
-
-       if (isVisible())
-       {
-               if (Adr68K = Adr)
-               {
-                       do
-                       {
-                               if ((Adr68K >= 0x4000) && (Adr68K < 0x200000))
-                               {
-                                       memcpy(&HeapAllocation, &jaguarMainRAM[Adr68K], sizeof(HeapAllocation));
-
-                                       if (HeapAllocation.size = ((HeapAllocation.size & 0xff) << 24) + ((HeapAllocation.size & 0xff00) << 8) + ((HeapAllocation.size & 0xff0000) >> 8) + ((HeapAllocation.size & 0xff000000) >> 24))
-                                       {
-                                               if (HeapAllocation.size <= (0x200000 - 0x4000))
-                                               {
-                                                       if ((HeapAllocation.used = ((HeapAllocation.used & 0xff) << 8) + ((HeapAllocation.used & 0xff00) >> 8)) <= 1)
-                                                       {
-                                                               HeapAllocation.nextalloc = ((HeapAllocation.nextalloc & 0xff) << 24) + ((HeapAllocation.nextalloc & 0xff00) << 8) + ((HeapAllocation.nextalloc & 0xff0000) >> 8) + ((HeapAllocation.nextalloc & 0xff000000) >> 24);
-
-                                                               if ((HeapAllocation.nextalloc >= 0x4000) && (HeapAllocation.nextalloc < 0x200000))
-                                                               {
-                                                                       sprintf(string, "0x%06x | 0x%06x (%i) | %s | 0x%06x<br>", Adr68K, HeapAllocation.size - sizeof(HeapAllocation), HeapAllocation.size - sizeof(HeapAllocation), HeapAllocation.used ? "Allocated" : "Free", HeapAllocation.nextalloc);
-                                                                       Adr68K = HeapAllocation.nextalloc;
-                                                               }
-                                                               else
-                                                               {
-                                                                       sprintf(string, "<br><font color='#ff0000'><b>Unable to determine the next memory allocation</b></font>");
-                                                                       Error = 1;
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               sprintf(string, "<br><font color='#ff0000'><b>Unable to determine if the allocated memory is used or not</b></font>");
-                                                               Error = 2;
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       sprintf(string, "<br><font color='#ff0000'><b>Memory bloc size has a problem</b></font>");
-                                                       Error = 3;
-                                               }
-                                       }
-                                       else
-                                       {
-                                               sprintf(string, "<br><font color='#0000ff'><b>Memory allocations browsing successfully completed</b></font>");
-                                       }
-                               }
-                               else
-                               {
-                                       sprintf(string, "<br><font color='#ff0000'><b>Memory allocations may have a problem</b></font>");
-                                       Error = 4;
-                               }
-
-                               HA += QString(string);
-
-                       } while (HeapAllocation.size && !Error);
-               }
-               else
-               {
-                       if (Adr = DBGManager_GetAdrFromSymbolName((char *)"__HeapBase"))
-                       {
-                               if (Adr68K = DBGManager_GetExternalVariableAdrFromName((char *)"alloc"))
-                               {
-                                       if (!(Adr68K = (jaguarMainRAM[Adr68K] << 24) + (jaguarMainRAM[Adr68K + 1] << 16) + (jaguarMainRAM[Adr68K + 2] << 8) + (jaguarMainRAM[Adr68K + 3])) || ((Adr68K < 0x4000) || (Adr68K >= 0x200000)))
-                                       {
-                                               sprintf(string, "<font color='#ff0000'><b>Memory allocator not yet initialised</b></font>");
-                                               Adr = 0;
-                                       }
-                                       else
-                                       {
-                                               return RefreshContents();
-                                               //sprintf(string, "<font color='#0000ff'><b>Memory allocator has been initialised</b></font>");
-                                       }
-                               }
-                               else
-                               {
-                                       sprintf(string, "<font color='#ff0000'><b>Memory allocator is not compatible</b></font>");
-                                       Adr = 0;
-                               }
-                       }
-                       else
-                       {
-                               sprintf(string, "<font color='#ff0000'><b>Memory allocator doesn't exist</b></font>");
-                       }
-
-                       HA += QString(string);
-               }
-
-               text->clear();
-               text->setText(HA);
-       }
-}
-
-
-#if 0
-void HeapAllocatorBrowserWindow::keyPressEvent(QKeyEvent * e)
-{
-       if (e->key() == Qt::Key_Escape)
-               hide();
-       else if (e->key() == Qt::Key_PageUp)
-       {
-               memBase -= 480;
-
-               if (memBase < 0)
-                       memBase = 0;
-
-               RefreshContents();
-       }
-       else if (e->key() == Qt::Key_PageDown)
-       {
-               memBase += 480;
-
-               if (memBase > (0x200000 - 480))
-                       memBase = 0x200000 - 480;
-
-               RefreshContents();
-       }
-       else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)
-       {
-               memBase -= 16;
-
-               if (memBase < 0)
-                       memBase = 0;
-
-               RefreshContents();
-       }
-       else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)
-       {
-               memBase += 16;
-
-               if (memBase > (0x200000 - 480))
-                       memBase = 0x200000 - 480;
-
-               RefreshContents();
-       }
-}
-#endif
-
-
-#if 0
-void HeapAllocatorBrowserWindow::GoToAddress(void)
-{
-       bool ok;
-       QString newAddress = address->text();
-       memBase = newAddress.toUInt(&ok, 16);
-       RefreshContents();
-}
-#endif
-
+//\r
+// allwatch.cpp - All Watch\r
+//\r
+// by Jean-Paul Mari\r
+//\r
+// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//\r
+// Who  When        What\r
+// ---  ----------  -----------------------------------------------------------\r
+// JPM  01/08/2017  Created this file\r
+//\r
+\r
+// STILL TO DO:\r
+//\r
+\r
+#include "debugger/heapallocatorbrowser.h"\r
+#include "memory.h"\r
+#include "debugger/DBGManager.h"\r
+#include "m68000/m68kinterface.h"\r
+\r
+\r
+HeapAllocatorBrowserWindow::HeapAllocatorBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog),\r
+layout(new QVBoxLayout), text(new QTextBrowser),\r
+//     layout(new QVBoxLayout), text(new QLabel),\r
+//     refresh(new QPushButton(tr("Refresh"))),\r
+//     address(new QLineEdit),\r
+//     go(new QPushButton(tr("Go"))),\r
+//     memBase(0),\r
+//     NbWatch(0),\r
+//     PtrWatchInfo(NULL)\r
+Adr(0)\r
+//PtrAdr(NULL)\r
+{\r
+       setWindowTitle(tr("Heap Allocation"));\r
+\r
+//     address->setInputMask("hhhhhh");\r
+//     QHBoxLayout * hbox1 = new QHBoxLayout;\r
+//     hbox1->addWidget(refresh);\r
+//     hbox1->addWidget(address);\r
+//     hbox1->addWidget(go);\r
+\r
+       // Need to set the size as well...\r
+//     resize(560, 480);\r
+\r
+       QFont fixedFont("Lucida Console", 8, QFont::Normal);\r
+//     QFont fixedFont("", 8, QFont::Normal);\r
+       fixedFont.setStyleHint(QFont::TypeWriter);\r
+       text->setFont(fixedFont);\r
+////   layout->setSizeConstraint(QLayout::SetFixedSize);\r
+       setLayout(layout);\r
+\r
+       layout->addWidget(text);\r
+//     layout->addWidget(refresh);\r
+//     layout->addLayout(hbox1);\r
+\r
+//     connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));\r
+//     connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));\r
+}\r
+\r
+\r
+//\r
+HeapAllocatorBrowserWindow::~HeapAllocatorBrowserWindow(void)\r
+{\r
+//     NbWatch = 0;\r
+//     free(PtrAdr);\r
+}\r
+\r
+\r
+//\r
+void HeapAllocatorBrowserWindow::RefreshContents(void)\r
+{\r
+       char string[1024];\r
+//     char buf[64];\r
+       QString HA;\r
+       size_t Adr68K;\r
+       size_t Error = 0;\r
+       HeapAllocation HeapAllocation;\r
+\r
+       if (isVisible())\r
+       {\r
+               if (Adr68K = Adr)\r
+               {\r
+                       do\r
+                       {\r
+                               if ((Adr68K >= 0x4000) && (Adr68K < 0x200000))\r
+                               {\r
+                                       memcpy(&HeapAllocation, &jaguarMainRAM[Adr68K], sizeof(HeapAllocation));\r
+\r
+                                       if (HeapAllocation.size = ((HeapAllocation.size & 0xff) << 24) + ((HeapAllocation.size & 0xff00) << 8) + ((HeapAllocation.size & 0xff0000) >> 8) + ((HeapAllocation.size & 0xff000000) >> 24))\r
+                                       {\r
+                                               if (HeapAllocation.size <= (0x200000 - 0x4000))\r
+                                               {\r
+                                                       if ((HeapAllocation.used = ((HeapAllocation.used & 0xff) << 8) + ((HeapAllocation.used & 0xff00) >> 8)) <= 1)\r
+                                                       {\r
+                                                               HeapAllocation.nextalloc = ((HeapAllocation.nextalloc & 0xff) << 24) + ((HeapAllocation.nextalloc & 0xff00) << 8) + ((HeapAllocation.nextalloc & 0xff0000) >> 8) + ((HeapAllocation.nextalloc & 0xff000000) >> 24);\r
+\r
+                                                               if ((HeapAllocation.nextalloc >= 0x4000) && (HeapAllocation.nextalloc < 0x200000))\r
+                                                               {\r
+                                                                       sprintf(string, "0x%06x | 0x%06x (%i) | %s | 0x%06x<br>", Adr68K, HeapAllocation.size - sizeof(HeapAllocation), HeapAllocation.size - sizeof(HeapAllocation), HeapAllocation.used ? "Allocated" : "Free", HeapAllocation.nextalloc);\r
+                                                                       Adr68K = HeapAllocation.nextalloc;\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                       sprintf(string, "<br><font color='#ff0000'><b>Unable to determine the next memory allocation</b></font>");\r
+                                                                       Error = 1;\r
+                                                               }\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               sprintf(string, "<br><font color='#ff0000'><b>Unable to determine if the allocated memory is used or not</b></font>");\r
+                                                               Error = 2;\r
+                                                       }\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       sprintf(string, "<br><font color='#ff0000'><b>Memory bloc size has a problem</b></font>");\r
+                                                       Error = 3;\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               sprintf(string, "<br><font color='#0000ff'><b>Memory allocations browsing successfully completed</b></font>");\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       sprintf(string, "<br><font color='#ff0000'><b>Memory allocations may have a problem</b></font>");\r
+                                       Error = 4;\r
+                               }\r
+\r
+                               HA += QString(string);\r
+\r
+                       } while (HeapAllocation.size && !Error);\r
+               }\r
+               else\r
+               {\r
+                       if (Adr = DBGManager_GetAdrFromSymbolName((char *)"__HeapBase"))\r
+                       {\r
+                               if (Adr68K = DBGManager_GetGlobalVariableAdrFromName((char *)"alloc"))\r
+                               {\r
+                                       if (!(Adr68K = (jaguarMainRAM[Adr68K] << 24) + (jaguarMainRAM[Adr68K + 1] << 16) + (jaguarMainRAM[Adr68K + 2] << 8) + (jaguarMainRAM[Adr68K + 3])) || ((Adr68K < 0x4000) || (Adr68K >= 0x200000)))\r
+                                       {\r
+                                               sprintf(string, "<font color='#ff0000'><b>Memory allocator not yet initialised</b></font>");\r
+                                               Adr = 0;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               return RefreshContents();\r
+                                               //sprintf(string, "<font color='#0000ff'><b>Memory allocator has been initialised</b></font>");\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       sprintf(string, "<font color='#ff0000'><b>Memory allocator is not compatible</b></font>");\r
+                                       Adr = 0;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               sprintf(string, "<font color='#ff0000'><b>Memory allocator doesn't exist</b></font>");\r
+                       }\r
+\r
+                       HA += QString(string);\r
+               }\r
+\r
+               text->clear();\r
+               text->setText(HA);\r
+       }\r
+}\r
+\r
+\r
+#if 0\r
+void HeapAllocatorBrowserWindow::keyPressEvent(QKeyEvent * e)\r
+{\r
+       if (e->key() == Qt::Key_Escape)\r
+               hide();\r
+       else if (e->key() == Qt::Key_PageUp)\r
+       {\r
+               memBase -= 480;\r
+\r
+               if (memBase < 0)\r
+                       memBase = 0;\r
+\r
+               RefreshContents();\r
+       }\r
+       else if (e->key() == Qt::Key_PageDown)\r
+       {\r
+               memBase += 480;\r
+\r
+               if (memBase > (0x200000 - 480))\r
+                       memBase = 0x200000 - 480;\r
+\r
+               RefreshContents();\r
+       }\r
+       else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)\r
+       {\r
+               memBase -= 16;\r
+\r
+               if (memBase < 0)\r
+                       memBase = 0;\r
+\r
+               RefreshContents();\r
+       }\r
+       else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)\r
+       {\r
+               memBase += 16;\r
+\r
+               if (memBase > (0x200000 - 480))\r
+                       memBase = 0x200000 - 480;\r
+\r
+               RefreshContents();\r
+       }\r
+}\r
+#endif\r
+\r
+\r
+#if 0\r
+void HeapAllocatorBrowserWindow::GoToAddress(void)\r
+{\r
+       bool ok;\r
+       QString newAddress = address->text();\r
+       memBase = newAddress.toUInt(&ok, 16);\r
+       RefreshContents();\r
+}\r
+#endif\r
+\r