Added a Local browser window for local variables
authorJean-Paul Mari <djipi.mari@gmail.com>
Wed, 8 Nov 2017 23:14:02 +0000 (18:14 -0500)
committerJean-Paul Mari <djipi.mari@gmail.com>
Wed, 8 Nov 2017 23:14:02 +0000 (18:14 -0500)
22 files changed:
VS2015/GeneratedFiles/qrc_virtualjaguar.cpp
VS2015/virtualjaguar.vcxproj
VS2015/virtualjaguar.vcxproj.filters
VS2015/virtualjaguar.vcxproj.user
docs/vj_ReleaseNotes.txt
res/Local.png [new file with mode: 0644]
src/debugger/DBGManager.cpp
src/debugger/DBGManager.h
src/debugger/DWARFManager.cpp
src/debugger/DWARFManager.h
src/debugger/allwatchbrowser.cpp
src/debugger/allwatchbrowser.h
src/debugger/brkWin.cpp
src/debugger/heapallocatorbrowser.cpp
src/debugger/localbrowser.cpp [new file with mode: 0644]
src/debugger/localbrowser.h [new file with mode: 0644]
src/debugger/m68kDasmWin.cpp
src/gui/keybindingstab.cpp
src/gui/mainwin.cpp
src/gui/mainwin.h
src/gui/virtualjaguar.qrc
virtualjaguar.pro

index 06f18ab..86302cf 100644 (file)
@@ -23553,6 +23553,360 @@ static const unsigned char qt_resource_data[] = {
   0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xf8,0xff,0x1,0xfe,0x6f,0x2d,0xc,\r
   0xe2,0xe,0x37,0x99,0x61,0xad,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,\r
   0x60,0x82,\r
   0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xf8,0xff,0x1,0xfe,0x6f,0x2d,0xc,\r
   0xe2,0xe,0x37,0x99,0x61,0xad,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,\r
   0x60,0x82,\r
+    // C:/Projects/Emulator/virtualjaguar/res/Local.png\r
+  0x0,0x0,0x15,0xe5,\r
+  0x89,\r
+  0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,\r
+  0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x8,0x2,0x0,0x0,0x0,0x4c,0x5c,0xf6,0x9c,\r
+  0x0,0x0,0x0,0x1,0x73,0x52,0x47,0x42,0x0,0xae,0xce,0x1c,0xe9,0x0,0x0,0x0,\r
+  0x4,0x67,0x41,0x4d,0x41,0x0,0x0,0xb1,0x8f,0xb,0xfc,0x61,0x5,0x0,0x0,0x0,\r
+  0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xe,0xc3,0x0,0x0,0xe,0xc3,0x1,0xc7,0x6f,\r
+  0xa8,0x64,0x0,0x0,0x15,0x7a,0x49,0x44,0x41,0x54,0x78,0x5e,0xed,0x9d,0x79,0x43,\r
+  0x22,0xc9,0xb2,0xc5,0x47,0x4,0x17,0x50,0x36,0x11,0xed,0xee,0x99,0xfb,0x3d,0xdf,\r
+  0xfb,0xe7,0x7d,0xd7,0x7b,0xa7,0x47,0x59,0xc5,0x8d,0xc5,0xa5,0x7d,0xbf,0x13,0x91,\r
+  0xb5,0xa0,0x7d,0x19,0xec,0x6,0xa,0x7b,0xea,0x74,0x76,0x81,0xb5,0x91,0x19,0x27,\r
+  0x4e,0x44,0x66,0x55,0x52,0xec,0xdc,0xdc,0x7d,0xfb,0x2d,0x47,0x76,0x28,0x84,0xd7,\r
+  0x1c,0x19,0x21,0x27,0x20,0x63,0xe4,0x4,0x64,0x8c,0x9c,0x80,0x8c,0x91,0x13,0x90,\r
+  0x31,0x72,0x2,0x32,0x46,0x4e,0x40,0xc6,0xc8,0x9,0xc8,0x18,0x39,0x1,0x19,0x23,\r
+  0x27,0x20,0x63,0xe4,0x4,0x64,0x8c,0x9c,0x80,0x8c,0x91,0x13,0x90,0x31,0x72,0x2,\r
+  0x32,0xc6,0xd2,0x97,0xa3,0x5f,0xc2,0xeb,0xba,0xb0,0x13,0x5e,0x37,0x87,0xed,0x68,\r
+  0x51,0xae,0x80,0x8c,0x91,0x13,0x90,0x31,0x72,0x2,0x32,0xc6,0xbb,0x73,0xc0,0xcb,\r
+  0xcb,0xcb,0xf3,0xf3,0xf3,0xb7,0x6f,0xb6,0xd0,0x52,0x2f,0x61,0xdb,0x42,0xec,0xec,\r
+  0xec,0x14,0xa,0xbb,0xbb,0xbb,0x85,0xd4,0x72,0x37,0x6c,0x3,0x99,0xe6,0x80,0xf9,\r
+  0x16,0x69,0x49,0x33,0xc3,0xb6,0x85,0x88,0x1a,0x93,0xb4,0x88,0x66,0x86,0x6d,0xcb,\r
+  0xb5,0xe8,0xdd,0x4,0x50,0xc1,0x87,0x87,0xd9,0x3,0x98,0xcd,0xfc,0xe5,0xf1,0xf1,\r
+  0x21,0x6c,0x5b,0x88,0xc2,0x4e,0x61,0x6f,0x7f,0x7f,0x4f,0x48,0x96,0xef,0xad,0xee,\r
+  0x2a,0x91,0x72,0x29,0xb5,0xc3,0x1b,0x15,0x35,0xed,0xdb,0xcb,0x52,0x66,0x29,0x95,\r
+  0xd4,0x10,0xb5,0x24,0x6a,0x5a,0xe2,0x55,0x6b,0x22,0xe0,0xf1,0xf1,0x71,0x3c,0xbe,\r
+  0x1f,0x8f,0xc7,0x93,0x89,0x96,0xbc,0x9f,0x4c,0x26,0x61,0xdb,0x42,0x50,0xb3,0x72,\r
+  0xb9,0x52,0x6,0x87,0x95,0x43,0xbd,0xe8,0xfd,0x96,0x10,0x10,0x1a,0xc2,0x22,0x6a,\r
+  0x14,0x7e,0x16,0x36,0x2f,0xc4,0xe1,0x21,0x4d,0x51,0x43,0xe,0xf,0xad,0x69,0xe5,\r
+  0x4a,0xa9,0x54,0xa,0xdb,0xd6,0x44,0x0,0x7e,0x7f,0x7b,0x7b,0x73,0x73,0x73,0x6d,\r
+  0xcb,0x9b,0xdb,0xdb,0xeb,0xbb,0xbb,0xdb,0xb0,0x6d,0x21,0x8a,0xbb,0xa5,0x6a,0xb5,\r
+  0x7a,0x4c,0x39,0xae,0xe9,0xd,0xef,0xaa,0xb5,0x84,0x80,0x25,0xb1,0x42,0x9e,0x52,\r
+  0x4,0xa4,0x9b,0x63,0xaf,0x37,0x4f,0xcf,0x8f,0x61,0xf3,0x42,0x1c,0x1d,0x1d,0xa7,\r
+  0x9b,0xc3,0x72,0x7f,0x7f,0x3f,0x6c,0x5b,0x13,0x1,0xf8,0xfb,0x68,0x34,0x4,0x57,\r
+  0x57,0x83,0xab,0x2b,0x2d,0xaf,0x47,0xa3,0xb0,0x6d,0x21,0x50,0x6b,0xa3,0xd1,0x6c,\r
+  0x34,0x9b,0x5a,0xaa,0x9c,0xb0,0x24,0x70,0x86,0xcd,0x4b,0x62,0xd,0x4,0x10,0xf2,\r
+  0xbd,0x21,0xb6,0x1c,0x5e,0xa9,0x69,0xc3,0x25,0xe3,0x6a,0xad,0x5e,0xf7,0x86,0xb0,\r
+  0x6c,0x36,0x9b,0xf5,0x7a,0x13,0x4d,0x84,0x6d,0x6b,0x22,0xe0,0xfe,0xfe,0xbe,0xdf,\r
+  0xef,0xf6,0x7a,0xdd,0x7e,0xaf,0xd3,0xe3,0x4d,0xb7,0x3b,0x18,0xf6,0xc3,0xb6,0x85,\r
+  0x20,0x3e,0x9e,0x9e,0xb6,0x4f,0x4f,0xcf,0x4e,0x5b,0xfc,0xb3,0x37,0xa7,0xed,0x2d,\r
+  0x21,0x80,0xe6,0xf4,0x7a,0x9d,0x3e,0xcb,0x7e,0x8f,0x37,0xfc,0x49,0x1e,0x8,0x9b,\r
+  0x17,0xe2,0xa4,0x49,0x53,0xda,0xa7,0xad,0x76,0xcb,0x9a,0xd3,0x6a,0xb5,0x2b,0x95,\r
+  0x4a,0xd8,0xb6,0x26,0x2,0x8,0x38,0x97,0x97,0x7f,0x5d,0x5c,0xfc,0x75,0x79,0xf1,\r
+  0xd7,0xc5,0x25,0xcb,0xaf,0xdd,0x6e,0x27,0x6c,0x5b,0x88,0xfd,0xfd,0x83,0x4f,0x9f,\r
+  0x3e,0x9f,0x7f,0xfa,0xf2,0xe9,0x9c,0x7f,0x9f,0xcf,0xcf,0xbf,0x9c,0x9f,0x7f,0x4a,\r
+  0x52,0xd6,0x92,0x58,0x3,0x1,0x84,0xfb,0xcb,0xcb,0x8b,0xcb,0xcb,0xaf,0xd6,0x22,\r
+  0xfe,0x7d,0xa5,0x75,0xb3,0xd9,0x34,0x6c,0x5e,0x88,0x76,0xfb,0xcc,0x5a,0x44,0xbb,\r
+  0x3e,0xab,0x75,0xe7,0x9f,0x9,0x4a,0x61,0xdb,0x72,0x55,0x7d,0xf7,0x38,0x0,0x7f,\r
+  0x21,0xf,0x4f,0xa7,0xd3,0xfb,0xfb,0x3b,0x42,0x27,0x6a,0xed,0xf7,0x7b,0x83,0x41,\r
+  0x9f,0x32,0x1c,0xe,0x28,0x41,0xc8,0x6f,0x30,0x1a,0x5d,0x11,0x67,0x39,0x8a,0x63,\r
+  0xe9,0x68,0xd0,0xd5,0xf3,0x13,0x12,0x82,0x1d,0x9c,0xf9,0xbf,0x81,0x8d,0x61,0xa7,\r
+  0xe5,0x7a,0x87,0xef,0x5,0x95,0xa1,0x4a,0xde,0x28,0x2a,0x49,0x55,0xbf,0x7,0xb5,\r
+  0xcb,0xdb,0xe8,0xed,0xa5,0xe1,0xac,0xc1,0x8,0xde,0x28,0xcc,0x42,0x55,0xc3,0x19,\r
+  0x97,0xc6,0xbb,0x15,0xc0,0xe7,0x7d,0xfd,0xfa,0x9f,0x3f,0xff,0xfc,0xcf,0xd7,0x3f,\r
+  0xff,0xfd,0xe7,0x57,0x2d,0xf1,0x17,0x52,0x7f,0x51,0x8,0x4b,0xfe,0xa2,0xd3,0x1f,\r
+  0xe,0x88,0x40,0x76,0x3a,0x3b,0xfb,0x84,0xc3,0x9c,0x6b,0x9,0x3e,0xb7,0xdb,0xe7,\r
+  0x24,0x61,0xeb,0x78,0x3f,0x87,0xfe,0x37,0x1d,0xf0,0x6f,0x2f,0x91,0xef,0xc4,0x19,\r
+  0x7a,0xc7,0x3a,0xd9,0xf6,0x3f,0x7a,0xf7,0xee,0xec,0xfd,0x16,0x29,0x5,0x74,0xbb,\r
+  0x97,0xc8,0xba,0xc3,0xa2,0x73,0xd1,0xb9,0xbc,0xe8,0x74,0x2e,0xe8,0x6b,0x84,0xcd,\r
+  0x11,0x70,0x82,0xc7,0xc7,0xa7,0xa7,0x27,0xfd,0xf7,0x25,0x16,0xc7,0xeb,0xbf,0xfc,\r
+  0xfe,0xaf,0xdf,0xbf,0xfc,0xa1,0xe5,0xef,0x7f,0x7c,0xf9,0xf2,0x7,0xa9,0x38,0x1c,\r
+  0xb0,0x5c,0x5,0x77,0xff,0xe7,0x7f,0xff,0x2f,0xbc,0x5d,0xe,0x51,0x2f,0xe8,0xe6,\r
+  0xf6,0xe6,0x9a,0xff,0x2c,0xe1,0x9f,0xe,0xf0,0xc1,0x81,0x7a,0x64,0x47,0x95,0x23,\r
+  0x6a,0x50,0xab,0xd5,0xe9,0xf,0x20,0xc6,0x74,0x61,0x7d,0xab,0x75,0xda,0x68,0x9e,\r
+  0x90,0xb7,0x78,0xcf,0x1a,0x3a,0x6d,0x58,0xdc,0x1a,0x42,0xf7,0x1b,0xd1,0x4f,0x27,\r
+  0xfc,0x9b,0x4d,0x79,0x8b,0x3f,0x6a,0x9d,0xa0,0x71,0x6,0xf4,0x48,0x7,0x66,0x33,\r
+  0x4c,0xcf,0x88,0x67,0x5,0x4,0xa4,0xc0,0x67,0xf3,0x49,0xd8,0xd4,0x5d,0x98,0x4f,\r
+  0xa0,0x31,0xe9,0xca,0x7b,0x6d,0x69,0x26,0xfe,0x85,0x3,0xec,0xfc,0xb6,0x23,0x67,\r
+  0x79,0x7e,0x66,0x3d,0x6d,0x49,0x17,0x22,0xad,0x9f,0x73,0x73,0x4,0xdc,0xdd,0xdd,\r
+  0x1d,0xc8,0xfc,0x95,0x23,0xaa,0x73,0x5c,0x55,0xbf,0xa0,0xd9,0xa4,0x2a,0x71,0xd5,\r
+  0xbd,0x1c,0x57,0x6b,0xcd,0xe6,0x49,0xad,0xde,0xa8,0x55,0x6b,0x95,0xa3,0x63,0x92,\r
+  0x15,0x7,0xd1,0x6,0x33,0x3f,0x90,0xf5,0x27,0xe3,0x7b,0x58,0x70,0xbb,0xf3,0xff,\r
+  0x51,0xff,0x21,0xe0,0xf1,0x5,0x89,0x58,0xf0,0x61,0x30,0x2d,0x9,0xac,0x94,0x0,\r
+  0xc2,0x1a,0x55,0xc0,0xbb,0x9,0x82,0x7c,0x86,0xce,0x5f,0x2c,0xd2,0xa5,0x7f,0x55,\r
+  0x7f,0xdc,0x4b,0xd6,0x47,0x7c,0x16,0x87,0x9f,0x9f,0x9f,0xa8,0x1d,0xeb,0xd3,0xd6,\r
+  0xa7,0x64,0x40,0x0,0xfd,0x22,0xbc,0xc3,0xad,0x8f,0xef,0xe3,0xe3,0xad,0x93,0x16,\r
+  0x55,0x89,0xab,0xee,0x85,0x21,0x0,0x1b,0x7d,0x7d,0xb9,0x52,0xc1,0xc5,0x8,0x4a,\r
+  0xb8,0xbf,0xc6,0x9d,0x72,0x7e,0x59,0xff,0x7e,0x7c,0x7,0xd,0xb2,0x3e,0x22,0x60,\r
+  0xb,0x76,0xf1,0x91,0xb6,0x5b,0x5f,0x17,0x33,0x64,0x7d,0xc,0x91,0x84,0xb8,0x55,\r
+  0x10,0x61,0xbe,0xff,0x8c,0xc0,0x74,0xb5,0xa4,0x58,0xdc,0x2b,0xed,0x59,0x8b,0xe6,\r
+  0xea,0x5f,0x3e,0x2c,0xb3,0x95,0x9d,0xdd,0xfa,0xb8,0x5,0xf5,0xa6,0xd5,0xb1,0xe9,\r
+  0xbd,0xbc,0x97,0x80,0x77,0x27,0xe1,0xef,0x2,0x9b,0x20,0x2,0xaa,0xc,0x1,0xf4,\r
+  0xcc,0xda,0x67,0x67,0xc4,0xfa,0x57,0x85,0x95,0x6c,0x62,0x7,0x76,0x63,0x67,0xe,\r
+  0xe1,0x40,0x1a,0x43,0xe3,0xb1,0x38,0xc,0x30,0xfe,0xbc,0x33,0x46,0x35,0x1a,0xe2,\r
+  0xd,0x43,0x3c,0x96,0x77,0x37,0xf4,0xbb,0xd8,0x64,0xca,0x98,0x3d,0x3e,0x3d,0x4a,\r
+  0xc,0xfe,0xa9,0xab,0xc3,0xf,0xd7,0xff,0xe7,0xb1,0x1a,0x2,0x70,0xc9,0xfd,0xfd,\r
+  0xc3,0x4a,0x45,0xd,0x68,0x9e,0x9c,0x90,0x5d,0xcf,0xc9,0xb3,0xf3,0x85,0x95,0x6c,\r
+  0x52,0x3,0x2a,0x47,0xec,0xcc,0x21,0x1c,0x48,0x66,0x43,0x4,0x84,0x1b,0x1c,0xdf,\r
+  0x7b,0x20,0x36,0x16,0x15,0x7,0xb2,0xbe,0x2d,0x59,0x2d,0x2,0x26,0x22,0x0,0xc7,\r
+  0x23,0x5f,0xbb,0x20,0x56,0x88,0x1f,0xae,0xff,0xcf,0x63,0x5,0x4,0x10,0x19,0xa8,\r
+  0xd,0x4e,0x81,0x1e,0xa9,0xdf,0xc9,0x49,0x8b,0xba,0xbe,0x72,0x1f,0xa,0x2b,0xd9,\r
+  0xc4,0xe,0xec,0xc6,0xce,0x1c,0xc2,0x81,0x92,0x33,0xa,0x50,0x6,0x18,0x8f,0xc7,\r
+  0x64,0x13,0x62,0x9b,0xbb,0xbf,0x59,0x5f,0xee,0xaf,0xc2,0xa6,0xe9,0x74,0x8c,0xe4,\r
+  0x61,0xb,0xfd,0xaf,0xb6,0x33,0xfa,0x33,0xf5,0xf,0xa7,0xf8,0x9,0xac,0x46,0x1,\r
+  0x51,0x68,0xf6,0x6b,0x83,0x24,0x64,0x5d,0xa4,0x7a,0x55,0xa8,0x74,0xa9,0xb4,0xe7,\r
+  0x23,0x2f,0xcb,0xbd,0xf4,0xbb,0x15,0xf8,0x81,0x5f,0xd7,0x23,0x97,0x18,0xee,0xbc,\r
+  0xa4,0xc1,0x5a,0xdb,0x4d,0x85,0xa3,0xac,0xd3,0xa2,0xdc,0x0,0x1f,0xde,0x7d,0xfd,\r
+  0x49,0x4a,0x96,0xa9,0x3f,0xab,0xd8,0x64,0x1d,0xa1,0x12,0x3b,0x73,0x48,0x38,0xf8,\r
+  0xe7,0xb0,0x9a,0xb3,0x2c,0x9,0xb7,0xbb,0x65,0x5c,0x19,0xda,0x42,0x8d,0xfb,0xf8,\r
+  0x2d,0x7f,0x42,0x81,0x95,0xc0,0x44,0x8a,0x12,0xe0,0xac,0x68,0x37,0x7f,0xc3,0x36,\r
+  0xce,0x82,0x26,0x38,0x21,0x29,0x71,0x4d,0x3,0xb4,0xd,0x60,0x73,0x4,0x60,0xa3,\r
+  0x40,0x0,0xf1,0x66,0x42,0xb8,0x21,0xca,0x78,0xbe,0xbd,0x4d,0xbb,0x79,0xc,0x37,\r
+  0x3c,0xf0,0x8d,0xb6,0x74,0x68,0x7f,0x82,0xd2,0x64,0x3a,0x36,0x1d,0x48,0x4,0xe4,\r
+  0x92,0xf0,0x31,0x1f,0xd,0x1b,0x26,0x20,0xf4,0xde,0xd4,0xe3,0xb9,0xc7,0xfb,0x75,\r
+  0xed,0x37,0x56,0x80,0x59,0x3b,0x58,0x3f,0x86,0xad,0x4,0xee,0xf8,0xf2,0xfd,0xb0,\r
+  0xb4,0x7e,0x11,0x5c,0xd2,0x8f,0x25,0x8b,0x68,0xfc,0xfc,0x31,0xb1,0x76,0x2,0xb0,\r
+  0x7b,0x8c,0x10,0xfa,0x4d,0x1,0xd8,0xd1,0xdc,0x5f,0xf9,0x36,0x22,0x0,0xbf,0xe,\r
+  0x8,0x66,0xf,0x60,0x93,0x2d,0x4d,0x8,0xb2,0xbe,0xfa,0x45,0x77,0xe4,0x6d,0xd4,\r
+  0xe4,0xa,0xd0,0xd,0x2c,0x28,0x78,0x57,0x21,0x83,0x2e,0x53,0xd6,0x8c,0x8d,0xe6,\r
+  0x0,0xba,0x3c,0xa6,0x0,0x27,0x20,0x84,0x20,0xb,0x29,0x71,0xe,0x48,0x60,0x46,\r
+  0x8f,0x11,0x71,0x10,0x4a,0x18,0x19,0xcc,0x1e,0xa6,0x96,0x3,0x56,0xdc,0x2f,0xda,\r
+  0x24,0xb2,0xc9,0x1,0x98,0xf,0xa3,0x13,0x7f,0x22,0x5,0x8,0x18,0xd8,0x39,0x30,\r
+  0x5b,0x27,0x6f,0x7c,0xa3,0x2d,0x81,0xd8,0xe2,0x85,0x13,0x68,0xcc,0x1c,0x14,0xa0,\r
+  0xab,0x8,0xe1,0x63,0x3e,0x1a,0xd6,0x4b,0x80,0x5,0x9e,0x0,0x1f,0xf4,0xea,0xca,\r
+  0x83,0x7a,0x41,0x18,0x37,0x84,0xa0,0xb4,0xfb,0xd3,0x2d,0x8d,0x21,0x15,0x24,0x70,\r
+  0x6e,0xb4,0x8f,0x41,0x37,0xa2,0x39,0x8f,0x86,0x66,0xd6,0x13,0xe5,0xfc,0xe1,0x23,\r
+  0xdf,0x80,0x2d,0x5e,0x81,0x34,0x2c,0x6,0x6d,0x5,0xd6,0x45,0x40,0x30,0xb7,0x75,\r
+  0x3a,0xb1,0x17,0x99,0x36,0x36,0x37,0xfe,0x1b,0x5b,0x7c,0x3a,0x9d,0x92,0x93,0x1f,\r
+  0xa2,0x2b,0x91,0x66,0x1a,0x81,0x31,0x4e,0xc,0x7a,0xdc,0xde,0x4d,0xdf,0xd5,0xe5,\r
+  0xee,0xbd,0x62,0x69,0xbf,0xb4,0xc7,0x90,0x82,0xa1,0x10,0xa3,0x8a,0xbd,0x42,0xa1,\r
+  0xb8,0x53,0x8,0xd7,0xe6,0x38,0x9a,0x73,0x90,0x10,0x60,0x84,0xf3,0x3d,0x3e,0x7e,\r
+  0x7b,0x78,0x54,0xd0,0xd3,0x25,0x3d,0x81,0x4f,0x83,0x36,0xbb,0xd6,0xa4,0x4f,0xdc,\r
+  0x8a,0xee,0xd3,0xba,0x8,0xc0,0x94,0x76,0x91,0x87,0x94,0x6b,0x17,0x79,0x14,0x70,\r
+  0xfc,0xea,0x2,0xfe,0x4e,0x1,0xf2,0x64,0x1c,0x59,0x57,0x3c,0xed,0x42,0x7b,0xec,\r
+  0xc8,0x6e,0x4d,0x7f,0xe3,0x30,0xa,0x8a,0x98,0x7b,0x17,0x2,0x8a,0xfb,0xa5,0xd2,\r
+  0x21,0x34,0xec,0x16,0x29,0x25,0xd6,0x17,0x74,0x61,0x6e,0xc7,0x3d,0x9d,0xde,0xd0,\r
+  0x37,0xac,0xff,0xc,0xfd,0x2f,0x8f,0xe2,0xe0,0x19,0x53,0xf3,0x11,0xaa,0x89,0x30,\r
+  0xa1,0x3e,0x38,0x5,0xa4,0x88,0x72,0xd,0xe2,0x32,0x96,0xc2,0x1a,0x15,0x60,0x17,\r
+  0x6c,0x43,0xbc,0x81,0x0,0xa5,0xdc,0x70,0x69,0xe1,0xb5,0x2,0x9c,0x0,0xe,0x9,\r
+  0x7,0xcf,0x9b,0xde,0x96,0x8c,0x3c,0x21,0xc0,0x15,0x70,0x10,0x8a,0x14,0x50,0x62,\r
+  0x13,0xdb,0xd9,0x87,0xa3,0xc4,0x41,0xac,0x0,0x71,0x60,0x4,0x90,0xf6,0x13,0x5,\r
+  0xd8,0x40,0x3a,0x1e,0x45,0x6b,0x2,0xd6,0x2f,0xab,0x80,0x10,0x82,0xd4,0xe8,0x10,\r
+  0x82,0x3c,0xdf,0x6,0x5,0x78,0x3c,0x57,0x28,0x9f,0xf,0x41,0x6e,0x4a,0x20,0xf3,\r
+  0x1b,0xe4,0xfe,0x8a,0x41,0x1e,0x82,0xf6,0x23,0x5,0x1c,0xa0,0x80,0x82,0x8,0x50,\r
+  0x8,0x62,0x77,0x53,0x9d,0x2e,0xe9,0x2b,0xa,0x79,0x8,0x7a,0x22,0x4,0xe1,0x4,\r
+  0x4f,0x76,0x79,0x5b,0xe6,0xc7,0x19,0xf8,0x9f,0x56,0x80,0x34,0xe7,0x19,0xc1,0xcb,\r
+  0xc6,0xb1,0xc6,0x10,0x64,0xa,0xa0,0xb1,0x16,0x82,0x8,0x3d,0x16,0x82,0xe2,0x1c,\r
+  0xe0,0xc,0xa4,0x15,0x90,0xce,0xa5,0xd8,0xdd,0x97,0x1,0xba,0x19,0x59,0x2c,0xee,\r
+  0x96,0x14,0x82,0xc8,0x1,0xa5,0x83,0x28,0x7,0x88,0x0,0x42,0x10,0xbb,0xb0,0x3f,\r
+  0x47,0x13,0x51,0x38,0xd,0xa1,0xe5,0xe9,0xf9,0x85,0x1c,0x60,0xa,0xa0,0x1a,0x52,\r
+  0x80,0x8,0x50,0xe,0x60,0xfc,0xec,0x4,0x58,0xe,0xf8,0x85,0x43,0x10,0x36,0xf5,\r
+  0x10,0x14,0x29,0x20,0xe9,0xf3,0x98,0x2,0x44,0x80,0x2b,0xc0,0xba,0x92,0xc9,0x35,\r
+  0x35,0xb7,0xa6,0x19,0x5e,0x8,0xa,0x50,0x1e,0xb6,0x10,0x84,0x8,0xf6,0x82,0x2,\r
+  0x94,0x84,0x77,0x83,0x2,0xe4,0xca,0x96,0x84,0x63,0x5,0x84,0x10,0x84,0xf5,0xa9,\r
+  0x87,0x0,0x1,0x7e,0x2d,0x6f,0x46,0x5e,0x66,0x54,0x4e,0x98,0xfc,0x95,0x93,0xb0,\r
+  0x5d,0x78,0x88,0x43,0x10,0x12,0xd0,0xe5,0x65,0xbb,0xf2,0x23,0xe,0x14,0x80,0x96,\r
+  0xeb,0x5,0x1,0xb3,0xbf,0x42,0x90,0x29,0xc0,0xdc,0x5f,0x4,0x90,0x93,0xe3,0x1c,\r
+  0xa0,0x86,0x70,0xb8,0x3e,0x17,0xee,0x95,0x3,0x94,0x84,0xd5,0xb,0xb2,0x24,0xec,\r
+  0xe6,0xc7,0xfa,0xa,0x41,0x41,0x1,0x73,0x9a,0xcb,0xa,0x6b,0x24,0x0,0x83,0xd2,\r
+  0x42,0x68,0x50,0x2e,0xc0,0xe5,0xc,0xbc,0xe1,0xf,0x7,0x1b,0xdc,0xa,0xec,0x99,\r
+  0xb6,0xfe,0x5b,0x70,0x32,0x45,0x15,0xa0,0x13,0xb9,0x33,0xdb,0x2d,0xe4,0x68,0xac,\r
+  0xe6,0x9,0x26,0x2a,0xb7,0xd6,0xdd,0xba,0xf1,0x88,0x47,0xe6,0x77,0xd6,0xcd,0x9,\r
+  0x4c,0x7f,0x1a,0x46,0xa4,0xb9,0xf,0x1,0x90,0xfa,0x2e,0xae,0xc6,0x3a,0xb0,0x2e,\r
+  0x2,0xde,0x85,0xe0,0xe7,0x29,0xf8,0x7a,0x6c,0xe1,0xc0,0x40,0xb8,0xed,0x64,0x82,\r
+  0xf1,0x6e,0x6e,0x6f,0xae,0x46,0x57,0xfd,0xab,0x61,0x6f,0x30,0xe8,0xf6,0xfb,0x9a,\r
+  0xa0,0xd7,0xed,0x5e,0x76,0x3b,0x97,0x9d,0xce,0x85,0xde,0x74,0x2f,0x7b,0xbd,0xcb,\r
+  0x7e,0xff,0x72,0xd0,0xef,0xc,0x6,0x9d,0xe1,0xa0,0x7b,0x35,0xec,0xfb,0xb4,0xc3,\r
+  0xd1,0xe8,0xea,0xda,0x0,0x3b,0x71,0x4f,0xcc,0x99,0x80,0x54,0xd7,0x84,0xd2,0xf2,\r
+  0x66,0x39,0xc8,0x9e,0x80,0xd8,0xdc,0x6e,0x7a,0xe0,0x7f,0xba,0xe9,0x1,0x5e,0xe9,\r
+  0x23,0x3a,0xdd,0x45,0xd0,0x2d,0x33,0x11,0x80,0x65,0x21,0x0,0x2b,0x6b,0x26,0x61,\r
+  0xf7,0xb2,0xd3,0xd5,0x64,0x9e,0x6e,0xe7,0x82,0xf7,0xfd,0x5e,0xc4,0x81,0x11,0x30,\r
+  0x1c,0xf6,0xae,0xae,0xfa,0xa3,0xd1,0xf0,0x5a,0x4,0x8c,0x34,0x9d,0x20,0x4a,0x45,\r
+  0x8a,0x81,0xd6,0x2f,0x8a,0xa5,0x40,0xc7,0x14,0xf3,0x7b,0x5,0x36,0x83,0xad,0x50,\r
+  0x0,0x70,0xbb,0xc7,0xd6,0x8f,0x11,0x8,0x78,0xb2,0x4b,0x78,0xba,0x7e,0x61,0xb3,\r
+  0xf1,0x4c,0x1,0x18,0xb7,0xdf,0xef,0x60,0x6e,0xbc,0xbe,0x83,0x2,0x2e,0xa1,0x81,\r
+  0xf7,0xc6,0x1,0xee,0x6f,0x65,0x38,0x7c,0xa5,0x80,0x11,0xa,0x80,0x1,0x53,0x0,\r
+  0xee,0x2f,0x5,0x70,0xe6,0x74,0x56,0xe0,0xe3,0x36,0xd9,0x1f,0xcd,0x98,0x80,0xb4,\r
+  0xdd,0x59,0xc6,0xb0,0x8d,0xdf,0x9,0x41,0xf7,0x1e,0x82,0x46,0x7d,0xfc,0x1a,0x7,\r
+  0xc7,0xd0,0x28,0xc0,0x8,0x8,0xa,0x8,0x21,0xa8,0x47,0x8,0xba,0x1c,0xc6,0xa,\r
+  0x18,0xe,0x46,0x46,0xc0,0x68,0x74,0x6d,0x13,0x6a,0x94,0x15,0x5c,0x1,0x74,0xc3,\r
+  0x42,0xbf,0x28,0xe9,0x98,0xd2,0x33,0x4d,0xd,0xe,0xd6,0x8c,0x2d,0x52,0x80,0xdb,\r
+  0x3d,0xb6,0x3e,0x70,0xeb,0xbb,0x2,0xac,0x43,0xab,0xee,0xac,0x87,0xa0,0xab,0x61,\r
+  0x57,0x51,0xc8,0x72,0x0,0x2e,0x8f,0xe9,0x9d,0x3,0xde,0x5b,0xfc,0x11,0x37,0xa,\r
+  0x41,0x41,0x1,0xfd,0xab,0x51,0x50,0x0,0xc7,0xc7,0xa,0x50,0xe,0x50,0xbf,0x48,\r
+  0x39,0x80,0xfe,0xc1,0x3f,0x51,0x1,0x20,0x36,0xbd,0xbf,0x8f,0x97,0x98,0xde,0x97,\r
+  0xc0,0x42,0xd0,0xcc,0xae,0x69,0xe0,0xbe,0x10,0xd0,0x33,0x5,0x98,0xf5,0x83,0x2,\r
+  0x34,0xad,0x93,0x37,0x29,0x5,0x84,0x24,0x6c,0x39,0x20,0x28,0xc0,0x43,0x50,0x2a,\r
+  0x7,0x78,0x12,0x4e,0x14,0xe0,0x63,0x63,0xf3,0xff,0xd,0x61,0xbb,0x14,0xe0,0x8,\r
+  0xab,0xe6,0x14,0x90,0xe,0x41,0xd8,0x70,0x68,0x22,0xe8,0xf,0x6,0xbd,0x38,0xa,\r
+  0xd1,0x11,0x8a,0xac,0x1f,0xb9,0x7f,0x9c,0x81,0x21,0x80,0x24,0xec,0x9,0xc0,0xe2,\r
+  0x4f,0xa4,0x0,0x25,0x61,0xcb,0x1,0xa1,0x17,0xf4,0xeb,0x28,0x80,0x91,0x51,0x91,\r
+  0x61,0xeb,0xde,0xfe,0xc1,0x81,0xbe,0x45,0xa5,0x29,0x94,0xd5,0xda,0xb1,0x7d,0x89,\r
+  0xe7,0xe8,0xd8,0x27,0xfb,0x1d,0x55,0x2a,0x15,0x96,0xac,0x61,0x7d,0xb5,0x5a,0xaf,\r
+  0xd6,0x1a,0xb5,0x7a,0x93,0xe5,0xd1,0x51,0xf5,0xb0,0x5c,0xd9,0xdf,0x67,0xc0,0xa5,\r
+  0x71,0x16,0x67,0xe3,0x54,0xfc,0xc9,0xee,0xec,0xa6,0xa9,0x8f,0xad,0xb3,0x93,0x56,\r
+  0xbb,0xd1,0x6c,0xd5,0x1b,0x8d,0x6a,0xad,0xce,0x29,0x38,0x95,0x4d,0x1b,0xd1,0x37,\r
+  0xe5,0xd8,0x39,0x9e,0x36,0xe2,0x8c,0x6a,0x20,0xad,0x59,0x27,0x9a,0xb7,0xd,0xd8,\r
+  0x47,0xb3,0x4f,0x84,0x3,0x83,0xe,0x64,0x75,0x32,0xdf,0x24,0xf1,0x81,0xb5,0x63,\r
+  0x5d,0x4,0x14,0xa,0x3b,0x34,0x99,0xb6,0x6,0x2,0x30,0xd2,0xb1,0x5b,0xbf,0x7a,\r
+  0x1c,0xac,0x6f,0x85,0x77,0xda,0x24,0xe,0x6a,0xd5,0x7a,0xad,0xd6,0xa8,0x56,0x1b,\r
+  0xd8,0xb9,0x7c,0x28,0x2,0x60,0x10,0x73,0x60,0x41,0x8c,0xc7,0x9f,0xe5,0x32,0x47,\r
+  0xeb,0x2b,0x41,0x10,0x40,0x69,0x42,0x0,0x84,0x41,0xaa,0x4d,0x5d,0xc6,0x90,0xd8,\r
+  0x11,0xd3,0x62,0x62,0xec,0xc8,0x51,0x51,0x4d,0x64,0x7d,0x0,0x1,0xc0,0xac,0xef,\r
+  0x30,0xa,0x8c,0x3,0xaa,0xc9,0xdf,0x6c,0xf5,0x3,0x77,0x36,0xc8,0xc0,0x1a,0x15,\r
+  0x40,0x8b,0xf7,0x4a,0x92,0x40,0x59,0x9e,0x2e,0x13,0xcb,0xd0,0xc1,0xfd,0x29,0x78,\r
+  0xad,0x33,0x20,0x2,0x34,0xb3,0xb5,0x6,0x1,0x18,0xb4,0x1e,0x29,0xe0,0x10,0x53,\r
+  0x6,0x5,0xec,0x6,0x2,0xd8,0xad,0xd1,0x68,0xb5,0x4e,0x21,0xa0,0x1d,0x11,0xc0,\r
+  0xfe,0x10,0xe0,0x13,0xa7,0x70,0x64,0x7d,0x47,0x1,0x3b,0x2e,0x50,0x40,0xf8,0x6e,\r
+  0x69,0xb0,0x3e,0x47,0x25,0xa,0x60,0xbf,0x5f,0x47,0x1,0xba,0x76,0x13,0x87,0x20,\r
+  0x45,0x1a,0x7d,0x95,0x10,0xe3,0xf2,0x36,0x52,0x40,0x24,0x0,0x11,0x50,0xc7,0xf7,\r
+  0xf1,0xef,0x38,0x4,0x71,0x28,0x6,0xc3,0x20,0x58,0x91,0x33,0x89,0x0,0x45,0xb2,\r
+  0x7a,0xdd,0x14,0x70,0x92,0x52,0x80,0x11,0x90,0x28,0x20,0x71,0x64,0x3,0x6,0x7d,\r
+  0x45,0x80,0x99,0xff,0x95,0x2,0x9c,0x0,0x3b,0x50,0x13,0xd0,0x4d,0x3,0x5e,0xd6,\r
+  0x8c,0x35,0x2b,0x40,0x21,0x8,0x6,0xb0,0x34,0x56,0x76,0x5,0xe8,0x8b,0x1b,0x18,\r
+  0xde,0x9,0x88,0x18,0x60,0xbd,0x2b,0x80,0x10,0x54,0x67,0xe7,0x43,0xb,0x41,0x25,\r
+  0x85,0xa0,0x24,0x7,0x60,0x65,0x76,0xb,0xa,0x38,0x3d,0x6b,0x34,0x4f,0xc3,0x77,\r
+  0x3d,0x8e,0x13,0x5,0xc4,0x4,0xc8,0x91,0x43,0x4d,0x82,0x2,0x0,0x9b,0xd8,0x81,\r
+  0x28,0x15,0x5b,0xdf,0x8,0xf0,0x3,0x91,0xce,0x2f,0x95,0x3,0x2c,0x9,0x4b,0x2,\r
+  0x21,0x9,0x5b,0x8,0x92,0xb1,0xb0,0xb8,0xcc,0x1e,0x85,0x20,0x22,0xb8,0xac,0x6f,\r
+  0x79,0xd8,0x42,0x50,0x92,0x84,0xf1,0x58,0xce,0x83,0x35,0x3c,0x4,0x55,0x14,0x82,\r
+  0xe2,0x1c,0xd0,0x26,0x19,0x93,0x91,0x95,0x84,0xc3,0xd7,0x3d,0xa4,0x0,0xf7,0xf1,\r
+  0x60,0xc7,0x37,0xd6,0xf7,0xad,0xb2,0xbf,0x20,0x2,0xec,0xa8,0x39,0x5,0x90,0x73,\r
+  0xbc,0x9,0x9b,0xc1,0xfa,0x14,0xe0,0x49,0x38,0x15,0x82,0x62,0x5,0x18,0x7,0x89,\r
+  0x2,0xd8,0x62,0xf4,0xa8,0x17,0x84,0x2,0x6a,0x4a,0xc2,0x41,0x1,0x9e,0x3,0xe2,\r
+  0x24,0x2c,0x1e,0x51,0xc0,0x9,0xee,0xff,0x36,0x4,0xbd,0x52,0x0,0x15,0xf0,0x6a,\r
+  0x0,0xe7,0x20,0x26,0xc0,0xec,0xcf,0xbe,0x8e,0xa0,0x0,0x23,0xc0,0xb2,0xb7,0xa5,\r
+  0x7d,0x6f,0xc5,0x6,0xb0,0x46,0x2,0x52,0xcd,0x8e,0x1a,0x2c,0x87,0xd3,0x4c,0x63,\r
+  0xec,0xe5,0xb6,0x37,0x21,0x28,0x22,0x5,0x4a,0x8e,0x8e,0x22,0x53,0x1e,0xe0,0xa8,\r
+  0x1c,0x6d,0x2,0xb0,0x9e,0x4c,0x12,0xd0,0x2c,0xa9,0x7,0x70,0x94,0x17,0x8f,0x69,\r
+  0x7e,0x78,0xd9,0xe7,0x37,0xeb,0xd3,0xd8,0xdf,0xe6,0x36,0x8b,0xec,0xb9,0x7d,0xf8,\r
+  0x8,0xb7,0xbb,0x27,0xed,0x10,0xb5,0xa8,0xf5,0x26,0xad,0xf,0xd6,0x45,0xc0,0x5b,\r
+  0xd0,0x30,0x1a,0x49,0x83,0x69,0x36,0xed,0xb7,0xbc,0xe0,0xf9,0xa0,0xe2,0x16,0x91,\r
+  0xc5,0xc4,0x12,0x96,0x97,0x55,0x22,0x8b,0x98,0x23,0xeb,0x70,0x2f,0x76,0xf3,0x45,\r
+  0x7d,0xdc,0xe4,0x54,0x3a,0x93,0xa7,0xf1,0x9a,0x4a,0x2d,0x55,0xf4,0x85,0x35,0xc1,\r
+  0xbe,0x98,0xdf,0x3c,0x69,0x36,0xf5,0xad,0x76,0x44,0xc3,0x21,0x1c,0x88,0x67,0x70,\r
+  0x1e,0xaf,0x5e,0x56,0xd8,0x10,0x1,0x66,0xc1,0x60,0x35,0xd4,0xa0,0xae,0x29,0x9d,\r
+  0x7a,0x59,0x5f,0xce,0xeb,0x29,0xd4,0x3c,0xd6,0xb2,0x21,0xf9,0xb0,0x24,0x9f,0x8c,\r
+  0x9,0xe0,0x78,0xde,0x0,0xf4,0x40,0x6c,0x27,0x4e,0x17,0x77,0xb,0x11,0x1,0x26,\r
+  0x8,0xf,0x62,0xca,0x22,0x73,0xd6,0xf7,0x62,0x4,0x34,0x9b,0x7a,0x9a,0x40,0xb,\r
+  0x26,0x9c,0x0,0xb4,0x81,0xa4,0x10,0xa9,0x55,0x30,0x33,0x6c,0x50,0x1,0xe1,0x1b,\r
+  0x70,0xea,0x50,0x2a,0x2e,0xc8,0x6f,0xab,0x47,0x8a,0x1e,0xfe,0x8,0x15,0xd9,0x5f,\r
+  0x2,0xb0,0xfe,0x48,0xa4,0x0,0x19,0x3d,0x3a,0x5c,0xa,0x50,0xf,0xb1,0xc0,0x79,\r
+  0x48,0xcb,0x5,0x76,0x73,0x5,0xf8,0xa9,0xa4,0x0,0x2f,0x96,0x4b,0x54,0xa0,0x20,\r
+  0xb2,0xbe,0xbb,0x3f,0x79,0x3b,0x56,0x0,0x75,0xc0,0x17,0x7e,0x65,0x5,0xc8,0x64,\r
+  0xb2,0x9a,0x19,0xd1,0x96,0xb1,0x2,0xe,0x15,0xc9,0x89,0xe0,0x16,0x82,0xa2,0xa0,\r
+  0x6c,0x21,0x8,0xa7,0x54,0x8,0x22,0x2e,0x8b,0x1,0x75,0x49,0xc4,0x80,0x1d,0x2f,\r
+  0x2,0x78,0x31,0x11,0xcc,0x87,0x20,0x89,0xe9,0x4d,0x8,0x92,0xf5,0x45,0x80,0x5,\r
+  0x21,0xb9,0x7f,0x2a,0x4,0xe9,0x8b,0x76,0xd4,0x81,0xba,0x48,0x1,0xa1,0xa2,0x56,\r
+  0x36,0x8e,0xcd,0x29,0x80,0xe6,0xc5,0x56,0x8b,0x7b,0x46,0x1e,0x82,0xd0,0x80,0x99,\r
+  0xdf,0x35,0xe0,0xc,0x58,0x2,0x96,0x4,0xc2,0xd1,0x46,0xa1,0xe2,0xf,0xeb,0x28,\r
+  0xc5,0x62,0x12,0x82,0xec,0x54,0x84,0xa0,0x58,0x1,0x71,0x14,0xb2,0xf8,0x53,0x77,\r
+  0x5,0x80,0xf9,0x10,0x74,0xa8,0x10,0x84,0xca,0xc2,0xf9,0x33,0xc2,0x6,0x73,0x40,\r
+  0x14,0x82,0x2c,0x7,0xb8,0xd9,0x5c,0x1,0xf6,0xc0,0x23,0x4a,0x62,0x7f,0xf6,0x9a,\r
+  0x4f,0xc2,0x1c,0xec,0x14,0x98,0x2,0x18,0x1d,0xb3,0x95,0xe,0x67,0x50,0x80,0x11,\r
+  0xf0,0xc6,0xfa,0x73,0xa,0xc0,0xee,0x11,0x1,0xd6,0x73,0xad,0x1c,0x53,0x87,0xa0,\r
+  0x80,0x4c,0xb1,0xc1,0x1c,0x90,0xf4,0x82,0xa2,0x14,0xe0,0xbd,0x20,0xb,0x41,0x51,\r
+  0x16,0x16,0x3,0x44,0x21,0xef,0x1b,0x26,0x49,0xd8,0x39,0xb0,0x1c,0x10,0x14,0x30,\r
+  0x9f,0x84,0x6d,0x28,0x17,0x5b,0x9f,0xe8,0x1f,0xd2,0x6f,0xf4,0x2f,0xe1,0x80,0xb1,\r
+  0x1b,0xfb,0x28,0x4,0xb9,0x2,0xfe,0x39,0x4,0xfc,0xc,0x9e,0x9e,0x9e,0x66,0x33,\r
+  0x3d,0xca,0x44,0xb7,0x2,0x86,0x83,0x6e,0xb7,0xd3,0xe9,0xd8,0xd,0x0,0xbb,0x7,\r
+  0x10,0x97,0x7e,0xaf,0x3b,0xe8,0xf7,0x86,0x83,0xbe,0xee,0x41,0xda,0xed,0x17,0xa0,\r
+  0xc7,0x9c,0xd8,0xf3,0x4d,0xfa,0xf6,0x2c,0x20,0x3d,0xe2,0x64,0x38,0xb8,0xb9,0xb9,\r
+  0x1e,0x8f,0xef,0x67,0xb3,0xd9,0xf3,0x72,0x8f,0x26,0x5b,0x1f,0x3e,0x0,0x1,0x2f,\r
+  0x76,0x4f,0x78,0x3a,0x9d,0xde,0xdf,0x41,0xc0,0x8,0x53,0x62,0xeb,0x4e,0xe7,0x42,\r
+  0x4f,0x36,0x89,0x1e,0x6e,0x42,0x61,0xa5,0xd9,0xb7,0xeb,0xf,0xce,0xb1,0xbb,0xf0,\r
+  0x58,0x5f,0xf,0x98,0x31,0xeb,0x77,0x7b,0x46,0x1b,0x4b,0xd6,0xd8,0x33,0x66,0x20,\r
+  0x60,0xca,0x99,0xc3,0xc7,0x64,0x84,0x8f,0xa2,0x0,0x3d,0xa1,0xe8,0x4e,0xa,0x18,\r
+  0xe1,0xe0,0x3e,0xb,0x28,0x2e,0xba,0x17,0x6f,0x6a,0xc0,0xb8,0xf6,0xf0,0xa2,0x5e,\r
+  0x44,0xc0,0x95,0x31,0x60,0x4,0xe8,0xa1,0x58,0x1d,0xed,0xd6,0x33,0x2,0xae,0xf5,\r
+  0x90,0x97,0x5c,0x1,0x4b,0x21,0x52,0x80,0x66,0x5,0x49,0x1,0xc3,0x3e,0x86,0x94,\r
+  0xe3,0x47,0xbe,0x1f,0x68,0xe8,0x5e,0x48,0x1,0x44,0x21,0x53,0xc0,0xe8,0x6a,0x48,\r
+  0x4,0xba,0xd2,0xe3,0xed,0x44,0x80,0x3d,0x5d,0xd,0x5,0x5c,0x44,0xa,0x18,0x8d,\r
+  0xef,0xef,0x1f,0x66,0xd3,0x67,0x14,0xf0,0xc2,0x67,0x44,0x65,0xe3,0xf8,0x50,0x39,\r
+  0xc0,0x42,0x90,0x2b,0xc0,0xe2,0x8f,0xcd,0x5,0x92,0x1a,0x34,0x2b,0x42,0xa,0x8,\r
+  0x21,0x48,0x51,0x9e,0xd0,0x6f,0xf1,0xdf,0x14,0xa0,0xf8,0xdf,0xd,0x99,0xc3,0x8,\r
+  0xb8,0x26,0x4,0x91,0x3,0xa6,0xb3,0xa7,0x5c,0x1,0xcb,0x20,0xe4,0x0,0x57,0x80,\r
+  0xe7,0x80,0x48,0x1,0xf1,0x84,0x14,0xe5,0x80,0x10,0x82,0xa2,0x1c,0x20,0x9,0xb8,\r
+  0x2,0x7a,0x8a,0x41,0xbd,0x4e,0xc7,0xf2,0x84,0x14,0x70,0x7d,0x8d,0x2,0x14,0x82,\r
+  0xf2,0x1c,0xf0,0xb7,0xb0,0x10,0x64,0x39,0x20,0x4a,0xc2,0xd8,0xd1,0x8d,0x1e,0x4c,\r
+  0x6f,0xee,0xef,0xc6,0xc5,0xd3,0x87,0x51,0xe,0xb8,0xe,0xa,0x90,0x4,0x48,0x1,\r
+  0xf8,0xbe,0x72,0x40,0x92,0x84,0xc9,0x1,0xd3,0x3c,0x7,0xbc,0x86,0x86,0x5a,0x1a,\r
+  0xaf,0xe9,0xe2,0xb3,0x8d,0x18,0x34,0x64,0xf3,0xb,0x67,0xac,0x64,0x64,0xc0,0x3e,\r
+  0xf6,0x88,0x39,0x54,0xa1,0x29,0xd7,0x78,0x31,0xdc,0x4c,0x26,0xe3,0x89,0x4d,0xf2,\r
+  0xb1,0x2,0x34,0xdb,0xc7,0xdf,0xc4,0x33,0xa8,0x6d,0x76,0xb4,0x66,0x4,0xb1,0x86,\r
+  0xad,0x36,0x19,0x74,0xee,0x7b,0x51,0x99,0x60,0xeb,0x8,0xc0,0xc4,0xc,0xc4,0x30,\r
+  0x3b,0x83,0x5b,0x86,0x4f,0xad,0x56,0xfb,0xfc,0xfc,0xd3,0xdb,0x72,0x7a,0x7a,0x76,\r
+  0x72,0x72,0xca,0xf0,0xaa,0x56,0xab,0x1d,0x1f,0x6b,0x28,0xc7,0x28,0xe,0x92,0x9c,\r
+  0x27,0x86,0x57,0xf1,0x8,0x6e,0xcb,0xb1,0x8d,0x4,0x94,0x4a,0x7b,0x10,0x70,0x7c,\r
+  0x74,0x5c,0xaf,0x37,0x21,0x40,0xcf,0x5a,0x7c,0x53,0xda,0x6d,0x8,0xd0,0x75,0x5,\r
+  0x8,0x60,0x38,0x5d,0x2e,0xeb,0x71,0x38,0xc,0x8c,0x19,0x1e,0xbb,0x50,0x40,0x38,\r
+  0xe3,0x76,0x63,0xb,0x43,0x10,0xa,0xd8,0x2b,0x97,0xf,0x8f,0x83,0x2,0x4e,0x5f,\r
+  0x3d,0x38,0xc9,0x4b,0xbb,0x7d,0xae,0x67,0x30,0x86,0x7b,0xc2,0xba,0xa3,0xe0,0xa,\r
+  0x70,0x2,0x72,0x5,0xfc,0x38,0x12,0x5,0x68,0xa,0x8a,0x9e,0xc,0x7c,0x7e,0xa6,\r
+  0x47,0x8d,0xbe,0x2a,0x89,0x2,0xa2,0x59,0x11,0xf1,0x85,0xa4,0x98,0x80,0xf,0xc1,\r
+  0xc1,0x76,0xe6,0x0,0x11,0x80,0x59,0x17,0x2a,0x20,0xe4,0x80,0xaa,0x85,0x20,0x32,\r
+  0x75,0x5a,0x1,0x16,0x81,0xf2,0x10,0xf4,0x43,0xc0,0x70,0xa6,0x0,0x85,0x20,0xcf,\r
+  0x1,0xaf,0x7c,0xdf,0xb,0x49,0xd8,0x42,0x50,0x23,0x4a,0xc2,0x7a,0x8,0x66,0x9c,\r
+  0x3,0xf2,0x10,0xf4,0xe3,0x80,0x0,0xef,0x5,0xfd,0x5d,0xe,0x88,0x93,0x70,0x98,\r
+  0x9a,0xf8,0xaa,0x17,0x94,0x2b,0xe0,0x67,0xe0,0x1,0x1c,0x28,0x92,0x7c,0x17,0xc9,\r
+  0x2c,0x95,0xf8,0x7e,0x80,0x3d,0x2f,0xb9,0x62,0x8f,0x84,0x35,0x32,0xa4,0x6,0x34,\r
+  0x1,0x37,0x30,0x4,0x4f,0x36,0xad,0xfa,0x94,0x82,0xb0,0xd8,0x93,0xf5,0xec,0x3,\r
+  0x55,0xe1,0x33,0x33,0xc2,0xc7,0x70,0x93,0xb7,0x80,0x3,0x3c,0x9d,0xa1,0x9a,0x11,\r
+  0xa0,0xfb,0x61,0xb5,0x2a,0x4,0xd4,0x78,0x6f,0x63,0x2,0x45,0x24,0x8,0x80,0x9,\r
+  0x36,0xeb,0x6e,0x59,0xbd,0xd1,0xb2,0xe7,0x51,0x12,0xbb,0x9a,0x27,0xba,0x2b,0x9,\r
+  0x2f,0xec,0xb3,0xbb,0xa2,0xe7,0xaf,0xfe,0x30,0x3e,0x2c,0x1,0x7a,0xd8,0x67,0x69,\r
+  0x7f,0x2f,0xdc,0x92,0xc4,0xf4,0xf8,0x38,0x3c,0x58,0x38,0xf2,0x79,0x57,0xea,0x11,\r
+  0xa1,0x90,0x8a,0x66,0x94,0x2a,0x9a,0xd9,0x3,0x41,0xcf,0x28,0xcd,0xe6,0x9,0xa9,\r
+  0x1b,0xad,0x30,0xd2,0x26,0x5c,0x85,0x33,0x66,0x84,0xf5,0x13,0x90,0xbe,0xd8,0xbb,\r
+  0xa0,0x90,0x32,0xdf,0x53,0x8,0x4e,0xc5,0x12,0xa,0x90,0x8b,0x6b,0x7a,0x45,0x78,\r
+  0x64,0x7b,0xad,0x12,0xcf,0xad,0x3b,0x8,0xa,0x80,0x1e,0xb6,0x12,0x76,0x9c,0x80,\r
+  0x53,0x23,0x0,0xb9,0x88,0x80,0x83,0x37,0x21,0xe8,0x55,0xad,0x28,0x6b,0xc6,0x87,\r
+  0xe,0x41,0xa5,0x54,0x8,0xd2,0xd4,0xd2,0x6a,0x98,0x68,0x44,0xe,0x8,0xa,0xc0,\r
+  0xc7,0xe3,0x10,0x74,0xa2,0x5f,0x1b,0x39,0x6f,0x13,0x82,0x50,0x80,0x42,0x90,0x14,\r
+  0x90,0x87,0xa0,0x1f,0x84,0x14,0x50,0x2c,0xbe,0x9,0x41,0x7a,0x30,0x7e,0x1c,0x82,\r
+  0x22,0x5,0xcc,0x85,0x20,0x57,0x80,0x85,0x20,0xe5,0x80,0x7f,0x40,0x8,0x5a,0xf,\r
+  0xe6,0x93,0x70,0x1c,0x82,0xc8,0x1,0x51,0x8,0xb2,0xc7,0xc,0x2b,0x42,0x95,0x23,\r
+  0x5,0x48,0x2,0xe7,0x21,0x7,0x54,0xeb,0xa6,0x80,0x5f,0x25,0x9,0x7f,0xb3,0xe7,\r
+  0x72,0x44,0xd7,0x87,0xfd,0x42,0xb0,0x5f,0x19,0x4e,0x17,0xff,0x3e,0x62,0xf8,0x3e,\r
+  0xf4,0x4f,0x5e,0x7,0x56,0x17,0x15,0xe3,0x11,0x86,0x14,0x87,0xb0,0x33,0x36,0x2f,\r
+  0x23,0x6,0xe8,0xc0,0xb2,0x56,0x4,0xdc,0x1f,0x4a,0xc8,0xcc,0x70,0x63,0x24,0x69,\r
+  0x8a,0x3c,0xeb,0x5c,0x22,0x1c,0xd,0x91,0x9c,0x6d,0xf3,0xf5,0x8f,0xb1,0x2,0x2,\r
+  0xe2,0x59,0xb,0xf1,0xd,0x93,0xe4,0x8e,0x55,0xaa,0xb0,0x92,0x4d,0xec,0xc0,0x6e,\r
+  0xec,0xcc,0x21,0x1c,0x18,0x4e,0xb1,0xa,0x40,0x9,0xf1,0xc4,0x82,0x92,0x77,0xfc,\r
+  0x1b,0xcd,0x66,0x8b,0xde,0x3f,0x16,0x37,0x67,0xa7,0xc3,0xf3,0xfd,0xe7,0x9d,0x67,\r
+  0x5b,0xff,0xd5,0x28,0x80,0xda,0xcc,0x66,0xe1,0xa6,0xf9,0x70,0x30,0xa0,0xae,0x76,\r
+  0xbb,0x76,0xae,0xb0,0x92,0x4d,0xec,0x60,0xb7,0xa2,0x26,0x1c,0x12,0xe,0x5e,0x11,\r
+  0x8c,0x80,0x10,0x94,0xe2,0x91,0x57,0x3d,0xf9,0xd2,0xab,0xfc,0x9d,0xcc,0x11,0xf6,\r
+  0x9e,0x47,0x86,0xf5,0x5f,0xd,0x1,0xc8,0x17,0xa7,0x8,0xf3,0x76,0x86,0x7d,0xbb,\r
+  0xfb,0xfd,0xc6,0x83,0x3a,0x1d,0x36,0xa9,0x1,0xe6,0x41,0x1c,0x12,0xe,0x5e,0x11,\r
+  0x9c,0x0,0x29,0x20,0x1a,0xfa,0xda,0x57,0x68,0x5c,0x1,0x65,0xa2,0x94,0xbe,0xf0,\r
+  0xf4,0x5f,0x2e,0x10,0x65,0x58,0xff,0x95,0xfc,0x88,0xcf,0x2d,0x2d,0x2f,0xe8,0xc9,\r
+  0x55,0x21,0x98,0x3e,0x3c,0x3e,0xd8,0xb3,0x94,0xf4,0x4c,0x9e,0xb8,0x4c,0xa6,0x13,\r
+  0xd4,0x8e,0x9d,0xe8,0x7a,0x6b,0xc,0x85,0xa9,0xf6,0xf,0x92,0x98,0xf0,0x7d,0xcb,\r
+  0x2c,0x1,0x1b,0x16,0x50,0x8,0x8,0xfe,0xe3,0x1a,0xfc,0xa5,0xaf,0xe6,0xec,0xea,\r
+  0xb,0x49,0x74,0x8a,0x88,0xf8,0x10,0xe0,0x1d,0xd3,0x30,0x1f,0xdd,0xf,0x89,0xc0,\r
+  0x81,0x7a,0x12,0x91,0xee,0x58,0xde,0xf8,0x7d,0xfc,0xfe,0xa0,0x4f,0xbb,0x5e,0xd5,\r
+  0xff,0x56,0xf,0x6a,0x19,0xb1,0xf,0xef,0xc7,0xe3,0x31,0x22,0x20,0x1f,0xc0,0xb4,\r
+  0x7a,0xc0,0xa9,0x42,0xa3,0xc2,0x79,0x53,0x1f,0xb1,0x0,0x2b,0xc,0x41,0x61,0xe2,\r
+  0x94,0x62,0x28,0x9a,0xd5,0x6f,0xd3,0xcd,0x15,0x56,0x86,0x18,0x6a,0x77,0xc3,0xd7,\r
+  0x18,0x82,0x62,0x5,0x34,0x14,0x82,0xc8,0xbf,0xde,0xe1,0x91,0x2,0x16,0x85,0xa0,\r
+  0x6c,0xea,0xbf,0x2,0x2,0xa2,0x24,0x26,0x2f,0xa,0xd,0x98,0x9f,0xb5,0xe0,0x85,\r
+  0x95,0xde,0x0,0x93,0xb0,0x62,0xe8,0x4a,0x92,0x58,0x8c,0x24,0x4,0x45,0x39,0xc0,\r
+  0x93,0x30,0x39,0x40,0x4,0xe8,0x47,0x47,0x4a,0x89,0xe0,0x52,0xc8,0xb6,0xfe,0x2b,\r
+  0x53,0x80,0x62,0xa8,0x27,0xb1,0x61,0x9f,0x8,0xfa,0xca,0x7d,0x28,0xac,0x64,0x93,\r
+  0x1a,0x60,0x3f,0xfc,0xc7,0x21,0xe1,0xe0,0x15,0x1,0xe3,0x12,0x76,0x50,0x0,0xe6,\r
+  0x36,0x2,0x1a,0x4a,0xc2,0x71,0xe,0xb0,0x5e,0xd0,0x2,0x5,0x64,0x55,0xff,0xad,\r
+  0xf9,0x31,0xcf,0xe5,0x22,0xe6,0x52,0xf8,0xae,0x5f,0xbe,0x3d,0x7f,0xb4,0x1b,0x49,\r
+  0xcb,0x4c,0x9c,0xcd,0x8f,0x79,0x6e,0xcd,0xcf,0xd9,0x66,0x47,0x0,0x1d,0x87,0x8f,\r
+  0xf4,0x73,0xb6,0xc,0x8,0xd7,0xf2,0x83,0xce,0x99,0x12,0xe0,0xd,0xb1,0xe5,0xd6,\r
+  0xff,0xa0,0x73,0xd4,0xd,0xd5,0x73,0xa7,0xec,0xe1,0x47,0xea,0x86,0x86,0x6d,0xb,\r
+  0xf1,0x37,0x3f,0x69,0x9e,0x1d,0x1,0xe4,0xd2,0x74,0x73,0xec,0x75,0x8b,0x7f,0xd2,\r
+  0xfc,0x31,0xff,0x51,0xff,0x14,0x74,0x5,0xca,0x1a,0xa2,0xef,0x6a,0x5a,0xa3,0x18,\r
+  0x7c,0x84,0x6d,0x6b,0x22,0x40,0xe3,0x2c,0xfb,0x1,0x4,0xcd,0xca,0xb4,0x97,0x25,\r
+  0xd5,0x5a,0xd8,0x29,0xd0,0x45,0xd9,0x13,0x92,0xe5,0x96,0x10,0xa0,0x76,0x78,0xa3,\r
+  0xa2,0xa6,0xe9,0x57,0x81,0x96,0x0,0x71,0x55,0x37,0x1d,0xa2,0x5,0x2f,0xef,0xed,\r
+  0x56,0xbc,0x9b,0x0,0xaa,0x6b,0xd7,0x2,0x6d,0xa1,0xe5,0xb2,0xd7,0x5,0xb1,0x35,\r
+  0xa3,0x65,0x9b,0xae,0x10,0x2f,0x53,0xd7,0xe2,0xb3,0x23,0x0,0xcc,0xb7,0x48,0xcb,\r
+  0x25,0xfb,0xf8,0x51,0x63,0x92,0x16,0xbd,0xd7,0xa5,0xde,0x4d,0xc0,0xba,0x90,0x29,\r
+  0x1,0x6b,0xc1,0x72,0x2d,0x5a,0xcd,0x40,0x2c,0xc7,0xf,0x23,0x27,0x20,0x63,0xe4,\r
+  0x4,0x64,0x8c,0xa5,0x73,0x40,0x8e,0xf5,0x20,0x57,0x40,0xc6,0xc8,0x9,0xc8,0x18,\r
+  0x39,0x1,0x19,0x23,0x27,0x20,0x63,0xe4,0x4,0x64,0x8c,0x9c,0x80,0x8c,0x91,0x13,\r
+  0x90,0x31,0x72,0x2,0x32,0x46,0x4e,0x40,0xc6,0xc8,0x9,0xc8,0x18,0x39,0x1,0x19,\r
+  0x23,0x27,0x20,0x63,0xe4,0x4,0x64,0x8c,0x9c,0x80,0x4c,0xf1,0xdb,0x6f,0xff,0xf,\r
+  0x6a,0xda,0x2d,0x85,0x79,0x3a,0xd1,0x86,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,\r
+  0xae,0x42,0x60,0x82,\r
     // C:/Projects/Emulator/virtualjaguar/res/homebrew-file.png\r
   0x0,0x1,0x52,0x7a,\r
   0x89,\r
     // C:/Projects/Emulator/virtualjaguar/res/homebrew-file.png\r
   0x0,0x1,0x52,0x7a,\r
   0x89,\r
@@ -66466,6 +66820,11 @@ static const unsigned char qt_resource_name[] = {
   0x0,0x73,\r
   0x0,0x6b,0x0,0x75,0x0,0x6e,0x0,0x6b,0x0,0x62,0x0,0x6f,0x0,0x61,0x0,0x72,0x0,0x64,0x0,0x2d,0x0,0x66,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x70,\r
   0x0,0x6e,0x0,0x67,\r
   0x0,0x73,\r
   0x0,0x6b,0x0,0x75,0x0,0x6e,0x0,0x6b,0x0,0x62,0x0,0x6f,0x0,0x61,0x0,0x72,0x0,0x64,0x0,0x2d,0x0,0x66,0x0,0x69,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x70,\r
   0x0,0x6e,0x0,0x67,\r
+    // Local.png\r
+  0x0,0x9,\r
+  0x9,0x7f,0xf1,0xe7,\r
+  0x0,0x4c,\r
+  0x0,0x6f,0x0,0x63,0x0,0x61,0x0,0x6c,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,\r
     // homebrew-file.png\r
   0x0,0x11,\r
   0xe,0x84,0x9e,0x27,\r
     // homebrew-file.png\r
   0x0,0x11,\r
   0xe,0x84,0x9e,0x27,\r
@@ -66679,93 +67038,95 @@ static const unsigned char qt_resource_struct[] = {
   // :\r
   0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,\r
   // :/res\r
   // :\r
   0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,\r
   // :/res\r
-  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x2,\r
+  0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x2,\r
   // :/res/power-on-red.png\r
   // :/res/power-on-red.png\r
-  0x0,0x0,0x3,0x94,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xc,0x89,\r
+  0x0,0x0,0x3,0xac,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x22,0x72,\r
   // :/res/upper-right.png\r
   // :/res/upper-right.png\r
-  0x0,0x0,0x1,0xa,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x1f,0x15,\r
+  0x0,0x0,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x34,0xfe,\r
   // :/res/vj_title_small.png\r
   // :/res/vj_title_small.png\r
-  0x0,0x0,0x4,0xa8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xa8,0xd2,\r
+  0x0,0x0,0x4,0xc0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xbe,0xbb,\r
   // :/res/test-pattern.jpg\r
   0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xf1,0xae,\r
   // :/res/alpine-file.png\r
   0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,\r
   // :/res/help.html\r
   // :/res/test-pattern.jpg\r
   0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xf1,0xae,\r
   // :/res/alpine-file.png\r
   0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,\r
   // :/res/help.html\r
-  0x0,0x0,0x5,0x92,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xd3,0x76,\r
+  0x0,0x0,0x5,0xaa,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xe9,0x5f,\r
   // :/res/test-pattern-pal.jpg\r
   // :/res/test-pattern-pal.jpg\r
-  0x0,0x0,0x3,0xd6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x1e,0x24,\r
+  0x0,0x0,0x3,0xee,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x34,0xd,\r
   // :/res/tool-risc-dis.png\r
   // :/res/tool-risc-dis.png\r
-  0x0,0x0,0x1,0x70,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x3c,0x59,\r
+  0x0,0x0,0x1,0x88,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x52,0x42,\r
   // :/res/fullscreen.png\r
   // :/res/fullscreen.png\r
-  0x0,0x0,0x2,0xfe,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x64,0x5b,\r
+  0x0,0x0,0x3,0x16,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x7a,0x44,\r
   // :/res/zoom200.png\r
   // :/res/zoom200.png\r
-  0x0,0x0,0x2,0xe2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x5e,0xe2,\r
+  0x0,0x0,0x2,0xfa,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x74,0xcb,\r
   // :/res/wrench.png\r
   // :/res/wrench.png\r
-  0x0,0x0,0x5,0x3a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xb6,0x8,\r
+  0x0,0x0,0x5,0x52,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xcb,0xf1,\r
   // :/res/tool-op.png\r
   // :/res/tool-op.png\r
-  0x0,0x0,0x5,0x76,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xd1,0x21,\r
+  0x0,0x0,0x5,0x8e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xe7,0xa,\r
   // :/res/blur-on.png\r
   // :/res/blur-on.png\r
-  0x0,0x0,0x3,0xba,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x1b,0x6e,\r
+  0x0,0x0,0x3,0xd2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x31,0x57,\r
   // :/res/tool-68k-dis.png\r
   // :/res/tool-68k-dis.png\r
-  0x0,0x0,0x1,0x4a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x39,0x7a,\r
+  0x0,0x0,0x1,0x62,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x4f,0x63,\r
   // :/res/upper-left.png\r
   // :/res/upper-left.png\r
-  0x0,0x0,0x5,0x54,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xcf,0x2c,\r
+  0x0,0x0,0x5,0x6c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xe5,0x15,\r
   // :/res/tool-cpu.png\r
   // :/res/tool-cpu.png\r
-  0x0,0x0,0x1,0xd6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x49,0x9d,\r
+  0x0,0x0,0x1,0xee,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x5f,0x86,\r
   // :/res/zoom100.png\r
   // :/res/zoom100.png\r
-  0x0,0x0,0x2,0x94,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x54,0xdf,\r
+  0x0,0x0,0x2,0xac,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x6a,0xc8,\r
   // :/res/frame-advance.png\r
   // :/res/frame-advance.png\r
-  0x0,0x0,0x0,0xe2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x16,0xd9,\r
+  0x0,0x0,0x0,0xfa,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x2c,0xc2,\r
   // :/res/power-on-green.png\r
   // :/res/power-on-green.png\r
-  0x0,0x0,0x4,0x7e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x99,0xac,\r
+  0x0,0x0,0x4,0x96,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xaf,0x95,\r
   // :/res/pal.png\r
   // :/res/pal.png\r
-  0x0,0x0,0x2,0xce,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x5b,0xea,\r
+  0x0,0x0,0x2,0xe6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x71,0xd3,\r
   // :/res/unknown-file.png\r
   // :/res/unknown-file.png\r
-  0x0,0x0,0x4,0xd2,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xde,0xd1,\r
+  0x0,0x0,0x4,0xea,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xf4,0xba,\r
   // :/res/zoom300.png\r
   // :/res/zoom300.png\r
-  0x0,0x0,0x0,0xc6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x11,0x4a,\r
+  0x0,0x0,0x0,0xde,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x27,0x33,\r
   // :/res/StepOver.png\r
   // :/res/StepOver.png\r
-  0x0,0x0,0x2,0x1a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xc0,0x77,\r
+  0x0,0x0,0x2,0x32,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xd6,0x60,\r
   // :/res/software.png\r
   // :/res/software.png\r
-  0x0,0x0,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x7b,0x9d,\r
+  0x0,0x0,0x4,0x1c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x91,0x86,\r
   // :/res/Restart.png\r
   0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xe4,0x84,\r
   // :/res/generic.png\r
   // :/res/Restart.png\r
   0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0xe4,0x84,\r
   // :/res/generic.png\r
-  0x0,0x0,0x2,0x5a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xca,0x1b,\r
+  0x0,0x0,0x2,0x72,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xe0,0x4,\r
   // :/res/pause-off.png\r
   // :/res/pause-off.png\r
-  0x0,0x0,0x1,0xb6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x44,0x56,\r
+  0x0,0x0,0x1,0xce,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x5a,0x3f,\r
   // :/res/blur-off.png\r
   // :/res/blur-off.png\r
-  0x0,0x0,0x2,0xb0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x59,0xb0,\r
+  0x0,0x0,0x2,0xc8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x6f,0x99,\r
   // :/res/label-blank.png\r
   // :/res/label-blank.png\r
-  0x0,0x0,0x5,0x16,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0x4d,0x6c,\r
+  0x0,0x0,0x5,0x2e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0x63,0x55,\r
   // :/res/cart-blank.png\r
   // :/res/cart-blank.png\r
-  0x0,0x0,0x3,0x72,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xa,0x69,0xff,\r
+  0x0,0x0,0x3,0x8a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xa,0x7f,0xe8,\r
   // :/res/ELF-file.png\r
   // :/res/ELF-file.png\r
-  0x0,0x0,0x2,0x76,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xd0,0x18,\r
+  0x0,0x0,0x2,0x8e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xe6,0x1,\r
+  // :/res/Local.png\r
+  0x0,0x0,0x0,0x9e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0xbe,0xcc,\r
   // :/res/Watch.png\r
   // :/res/Watch.png\r
-  0x0,0x0,0x4,0x22,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x7c,0xa7,\r
+  0x0,0x0,0x4,0x3a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x92,0x90,\r
   // :/res/vj-icon.png\r
   // :/res/vj-icon.png\r
-  0x0,0x0,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x21,0x25,\r
+  0x0,0x0,0x1,0x46,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x37,0xe,\r
   // :/res/power-off.png\r
   // :/res/power-off.png\r
-  0x0,0x0,0x4,0x3a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x87,0xdc,\r
+  0x0,0x0,0x4,0x52,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x9d,0xc5,\r
   // :/res/tool-stack.png\r
   // :/res/tool-stack.png\r
-  0x0,0x0,0x2,0x38,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xc8,0x7d,\r
+  0x0,0x0,0x2,0x50,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0xde,0x66,\r
   // :/res/ntsc.png\r
   // :/res/ntsc.png\r
-  0x0,0x0,0x3,0x5c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xa,0x67,0x23,\r
+  0x0,0x0,0x3,0x74,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xa,0x7d,0xc,\r
   // :/res/compact-disc.png\r
   // :/res/compact-disc.png\r
-  0x0,0x0,0x1,0xf4,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x4c,0x7,\r
+  0x0,0x0,0x2,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x61,0xf0,\r
   // :/res/insert.png\r
   // :/res/insert.png\r
-  0x0,0x0,0x3,0x20,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x68,0x2a,\r
+  0x0,0x0,0x3,0x38,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x7e,0x13,\r
   // :/res/tool-memory.png\r
   // :/res/tool-memory.png\r
-  0x0,0x0,0x4,0x5a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0x96,0xf8,\r
+  0x0,0x0,0x4,0x72,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xe,0xac,0xe1,\r
   // :/res/controller.png\r
   // :/res/controller.png\r
-  0x0,0x0,0x3,0x3a,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x72,0xef,\r
+  0x0,0x0,0x3,0x52,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x88,0xd8,\r
   // :/res/homebrew-file.png\r
   // :/res/homebrew-file.png\r
-  0x0,0x0,0x0,0x9e,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0xbe,0xcc,\r
+  0x0,0x0,0x0,0xb6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x5,0xd4,0xb5,\r
   // :/res/pause-on.png\r
   // :/res/pause-on.png\r
-  0x0,0x0,0x1,0x98,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x3f,0x14,\r
+  0x0,0x0,0x1,0xb0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x7,0x54,0xfd,\r
   // :/res/StepInto.png\r
   // :/res/StepInto.png\r
-  0x0,0x0,0x4,0xf8,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0x47,0x0,\r
+  0x0,0x0,0x5,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0x5c,0xe9,\r
   // :/res/skunkboard-file.png\r
   0x0,0x0,0x0,0x72,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x20,0xe5,\r
 \r
   // :/res/skunkboard-file.png\r
   0x0,0x0,0x0,0x72,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x20,0xe5,\r
 \r
index 9c32923..43fc984 100644 (file)
     <ClCompile Include="..\src\crc32.cpp" />\r
     <ClCompile Include="..\src\debugger\brkWin.cpp" />\r
     <ClCompile Include="..\src\debugger\exceptionvectortablebrowser.cpp" />\r
     <ClCompile Include="..\src\crc32.cpp" />\r
     <ClCompile Include="..\src\debugger\brkWin.cpp" />\r
     <ClCompile Include="..\src\debugger\exceptionvectortablebrowser.cpp" />\r
+    <ClCompile Include="..\src\debugger\localbrowser.cpp" />\r
     <ClCompile Include="..\src\file.cpp" />\r
     <ClCompile Include="..\src\gui\keybindingstab.cpp" />\r
     <ClCompile Include="..\src\log.cpp" />\r
     <ClCompile Include="..\src\file.cpp" />\r
     <ClCompile Include="..\src\gui\keybindingstab.cpp" />\r
     <ClCompile Include="..\src\log.cpp" />\r
     <ClCompile Include="obj\moc_heapallocatorbrowser.cpp" />\r
     <ClCompile Include="obj\moc_keybindingstab.cpp" />\r
     <ClCompile Include="obj\moc_keygrabber.cpp" />\r
     <ClCompile Include="obj\moc_heapallocatorbrowser.cpp" />\r
     <ClCompile Include="obj\moc_keybindingstab.cpp" />\r
     <ClCompile Include="obj\moc_keygrabber.cpp" />\r
+    <ClCompile Include="obj\moc_localbrowser.cpp" />\r
     <ClCompile Include="obj\moc_m68kdasmbrowser.cpp" />\r
     <ClCompile Include="obj\moc_m68kDasmWin.cpp" />\r
     <ClCompile Include="obj\moc_mainwin.cpp" />\r
     <ClCompile Include="obj\moc_m68kdasmbrowser.cpp" />\r
     <ClCompile Include="obj\moc_m68kDasmWin.cpp" />\r
     <ClCompile Include="obj\moc_mainwin.cpp" />\r
       <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\obj\moc_%(Filename).cpp"  -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_NO_DEBUG -DQT_OPENGL_LIB -DNDEBUG -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_UNICODE  "-I." "-I.\..\src" "-I.\..\src\gui" "-I.\obj" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtOpenGL" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtWidgets" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtGui" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtANGLE" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtCore" "-Ic:\Qt\Qt5.5.1\msvc2015_64\mkspecs\win32-msvc2015" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-VS2015\include" "-IC:\SDK\Elf\libelf-0.8.13-VS2015\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL" "-IC:\SDK\zlib\zlib-1.2.8-VS2015\include"</Command>\r
     </CustomBuild>\r
     <ClInclude Include="..\src\crc32.h" />\r
       <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\obj\moc_%(Filename).cpp"  -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_NO_DEBUG -DQT_OPENGL_LIB -DNDEBUG -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_UNICODE  "-I." "-I.\..\src" "-I.\..\src\gui" "-I.\obj" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtOpenGL" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtWidgets" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtGui" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtANGLE" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtCore" "-Ic:\Qt\Qt5.5.1\msvc2015_64\mkspecs\win32-msvc2015" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-VS2015\include" "-IC:\SDK\Elf\libelf-0.8.13-VS2015\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL" "-IC:\SDK\zlib\zlib-1.2.8-VS2015\include"</Command>\r
     </CustomBuild>\r
     <ClInclude Include="..\src\crc32.h" />\r
+    <CustomBuild Include="..\src\debugger\localbrowser.h">\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing localbrowser.h...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\obj\moc_%(Filename).cpp</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\obj\moc_%(Filename).cpp"  -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_ES_2 -DQT_OPENGL_ES_2_ANGLE -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_OPENGL_LIB "-I." "-I.\..\src" "-I.\..\src\gui" "-I.\obj" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtOpenGL" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtWidgets" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtGui" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtANGLE" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtCore" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\mkspecs\win32-msvc2015" "-IC:\SDK\SDL-1.2.15\include" "-IC:\SDK\mesa-11.2.0-rc4\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL"</Command>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing localbrowser.h...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\obj\moc_%(Filename).cpp</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\obj\moc_%(Filename).cpp"  -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_UNICODE "-I." "-I.\..\src" "-I.\..\src\gui" "-I.\obj" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtOpenGL" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtWidgets" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtGui" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtANGLE" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtCore" "-Ic:\Qt\Qt5.5.1\msvc2015_64\mkspecs\win32-msvc2015" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-VS2015\include" "-IC:\SDK\Elf\libelf-0.8.13-VS2015\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL" "-IC:\SDK\zlib\zlib-1.2.8-VS2015\include"</Command>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing localbrowser.h...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\obj\moc_%(Filename).cpp</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\obj\moc_%(Filename).cpp"  -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_NO_DEBUG -DQT_OPENGL_ES_2 -DQT_OPENGL_ES_2_ANGLE -DNDEBUG -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_OPENGL_LIB "-I." "-I.\..\src" "-I.\..\src\gui" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtOpenGL" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtWidgets" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtGui" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtANGLE" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\include\QtCore" "-I.\obj" "-I.\..\..\..\Qt\Qt5.5.1\msvc2015_64\mkspecs\win32-msvc2015" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL"</Command>\r
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing localbrowser.h...</Message>\r
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\obj\moc_%(Filename).cpp</Outputs>\r
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\obj\moc_%(Filename).cpp"  -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_NO_DEBUG -DQT_OPENGL_LIB -DNDEBUG -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_UNICODE "-I." "-I.\..\src" "-I.\..\src\gui" "-I.\obj" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtOpenGL" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtWidgets" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtGui" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtANGLE" "-Ic:\Qt\Qt5.5.1\msvc2015_64\include\QtCore" "-Ic:\Qt\Qt5.5.1\msvc2015_64\mkspecs\win32-msvc2015" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-VS2015\include" "-IC:\SDK\Elf\libelf-0.8.13-VS2015\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL" "-IC:\SDK\zlib\zlib-1.2.8-VS2015\include"</Command>\r
+    </CustomBuild>\r
     <ClInclude Include="..\src\file.h" />\r
     <CustomBuild Include="..\src\gui\keybindingstab.h">\r
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
     <ClInclude Include="..\src\file.h" />\r
     <CustomBuild Include="..\src\gui\keybindingstab.h">\r
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>\r
@@ -1319,6 +1339,11 @@ endlocal
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
     </None>\r
   </ItemGroup>\r
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
     </None>\r
   </ItemGroup>\r
+  <ItemGroup>\r
+    <None Include="..\res\Local.png">\r
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>\r
+    </None>\r
+  </ItemGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets" />\r
   <ProjectExtensions>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
   <ImportGroup Label="ExtensionTargets" />\r
   <ProjectExtensions>\r
index a81331e..be8f25f 100644 (file)
     <ClCompile Include="..\src\gui\keybindingstab.cpp">\r
       <Filter>Source Files\gui\tab</Filter>\r
     </ClCompile>\r
     <ClCompile Include="..\src\gui\keybindingstab.cpp">\r
       <Filter>Source Files\gui\tab</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="obj\moc_localbrowser.cpp">\r
+      <Filter>Generated Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\src\debugger\localbrowser.cpp">\r
+      <Filter>Source Files\debugger</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\src\debugger\DWARFManager.h">\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\src\debugger\DWARFManager.h">\r
     <None Include="..\docs\LICENSE">\r
       <Filter>Docs</Filter>\r
     </None>\r
     <None Include="..\docs\LICENSE">\r
       <Filter>Docs</Filter>\r
     </None>\r
+    <None Include="..\res\Local.png">\r
+      <Filter>Resource Files</Filter>\r
+    </None>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <CustomBuild Include="..\src\debugger\VideoWin.h">\r
   </ItemGroup>\r
   <ItemGroup>\r
     <CustomBuild Include="..\src\debugger\VideoWin.h">\r
     <CustomBuild Include="..\src\gui\keybindingstab.h">\r
       <Filter>Header Files\gui\tab</Filter>\r
     </CustomBuild>\r
     <CustomBuild Include="..\src\gui\keybindingstab.h">\r
       <Filter>Header Files\gui\tab</Filter>\r
     </CustomBuild>\r
+    <CustomBuild Include="..\src\debugger\localbrowser.h">\r
+      <Filter>Header Files\debugger</Filter>\r
+    </CustomBuild>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\res\vj.rc">\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="..\res\vj.rc">\r
index 57837dc..02f8cf4 100644 (file)
@@ -7,7 +7,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
     <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>\r
     <QTDIR>C:\Qt\Qt5.5.1\msvc2015_64</QTDIR>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
     <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>\r
     <QTDIR>C:\Qt\Qt5.5.1\msvc2015_64</QTDIR>\r
-    <LocalDebuggerCommandArguments>C:\Projects\quake2\JagCake\Debug\JagCake_Debug.elf</LocalDebuggerCommandArguments>\r
+    <LocalDebuggerCommandArguments>C:\Projects\Lib-M68K\Lib-Test-M68K\Debug\LibTestM68K_Debug.elf --debugger</LocalDebuggerCommandArguments>\r
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\r
     <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>\r
   </PropertyGroup>\r
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\r
     <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>\r
   </PropertyGroup>\r
index 2a73b3b..42bea30 100644 (file)
@@ -24,6 +24,7 @@ Release 3 (WiP)
 15) Improved the .heap section detection to avoid a detection error\r
 -- Depend vlink version, .heap section may have an Alloc flag\r
 16) Fixed a crash when DWARF information does references to missing source code files\r
 15) Improved the .heap section detection to avoid a detection error\r
 -- Depend vlink version, .heap section may have an Alloc flag\r
 16) Fixed a crash when DWARF information does references to missing source code files\r
+17) Added a Local browser window for local variables\r
 \r
 Release 2 (3rd September 2017)\r
 ------------------------------\r
 \r
 Release 2 (3rd September 2017)\r
 ------------------------------\r
@@ -90,7 +91,7 @@ Known issues
 2) The BPM (Breapoint) remains stuck on his address when user wants to continue the code execution\r
 -- Need to trace over the BPM or unset the BPM\r
 3) To handle DWARF 2 issues with GCC, the code must be compiled with the -gdwarf-2 option\r
 2) The BPM (Breapoint) remains stuck on his address when user wants to continue the code execution\r
 -- Need to trace over the BPM or unset the BPM\r
 3) To handle DWARF 2 issues with GCC, the code must be compiled with the -gdwarf-2 option\r
-4) The Watch variables list may display not available (N/A) type information\r
+4) The Local & Watch variables list may display not available (N/A) type information\r
 -- Such missing information may be included in future release\r
 5) The 2MB mirroring is no longer applied in case of --dram-max option usage\r
 6) Stack must reflect the --dram-max option usage otherwise the stack may be corrupted\r
 -- Such missing information may be included in future release\r
 5) The 2MB mirroring is no longer applied in case of --dram-max option usage\r
 6) Stack must reflect the --dram-max option usage otherwise the stack may be corrupted\r
diff --git a/res/Local.png b/res/Local.png
new file mode 100644 (file)
index 0000000..dd0b93c
Binary files /dev/null and b/res/Local.png differ
index 044bd03..cf2847c 100644 (file)
 #include "memory.h"\r
 \r
 \r
 #include "memory.h"\r
 \r
 \r
-// \r
-char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, uint32_t TypeByteSize);\r
-\r
-\r
 //\r
 struct Value\r
 {\r
 //\r
 struct Value\r
 {\r
@@ -114,13 +110,28 @@ char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get number of external variables\r
+// Get number of local variables\r
+// Return 0 if none has been found\r
+size_t DBGManager_GetNbLocalVariables(size_t Adr)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetNbLocalVariables(Adr);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+// Get number of global variables\r
 // Return 0 if none has been found\r
 // Return 0 if none has been found\r
-size_t DBGManager_GetNbExternalVariables(void)\r
+size_t DBGManager_GetNbGlobalVariables(void)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetNbExternalVariables();\r
+               return DWARFManager_GetNbGlobalVariables();\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -143,14 +154,14 @@ size_t DBGManager_GetAdrFromSymbolName(char *SymbolName)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable's Address based on his Name\r
+// Get global variable's Address based on his Name\r
 // Return found Address\r
 // Return NULL if no Address has been found\r
 // Return found Address\r
 // Return NULL if no Address has been found\r
-size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName)\r
+size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableAdrFromName(VariableName);\r
+               return DWARFManager_GetGlobalVariableAdrFromName(VariableName);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -159,12 +170,72 @@ size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName)
 }\r
 \r
 \r
 }\r
 \r
 \r
+// Get local variable's type encoding based on his address and Index\r
+// Return the type encoding found\r
+// Return 0 if no type encoding has been found\r
+size_t DBGManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableTypeEncoding(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+//\r
+int DBGManager_GetLocalVariableOffset(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableOffset(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+// Get local variable's type byte size based on his address and Index\r
+// Return the type's byte size found\r
+// Return 0 if no type's byte size has been found\r
+size_t DBGManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableTypeByteSize(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+//\r
+size_t DBGManager_GetLocalVariableTypeTag(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableTypeTag(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
 //\r
 //\r
-size_t DBGManager_GetExternalVariableTypeTag(size_t Index)\r
+size_t DBGManager_GetGlobalVariableTypeTag(size_t Index)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableTypeTag(Index);\r
+               return DWARFManager_GetGlobalVariableTypeTag(Index);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -173,14 +244,14 @@ size_t DBGManager_GetExternalVariableTypeTag(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable's type name based on his Index\r
+// Get global variable's type name based on his Index\r
 // Return type name's text pointer found\r
 // Return NULL if no type name has been found\r
 // Return type name's text pointer found\r
 // Return NULL if no type name has been found\r
-char *DBGManager_GetExternalVariableTypeName(size_t Index)\r
+char *DBGManager_GetGlobalVariableTypeName(size_t Index)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableTypeName(Index);\r
+               return DWARFManager_GetGlobalVariableTypeName(Index);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -189,14 +260,14 @@ char *DBGManager_GetExternalVariableTypeName(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable's Address based on his Index\r
+// Get global variable's Address based on his Index\r
 // Return the Address found\r
 // Return 0 if no Address has been found\r
 // Return the Address found\r
 // Return 0 if no Address has been found\r
-size_t DBGManager_GetExternalVariableAdr(size_t Index)\r
+size_t DBGManager_GetGlobalVariableAdr(size_t Index)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableAdr(Index);\r
+               return DWARFManager_GetGlobalVariableAdr(Index);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -205,14 +276,14 @@ size_t DBGManager_GetExternalVariableAdr(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable's type byte size based on his Index\r
+// Get global variable's type byte size based on his Index\r
 // Return the type's byte size found\r
 // Return 0 if no type's byte size has been found\r
 // Return the type's byte size found\r
 // Return 0 if no type's byte size has been found\r
-size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index)\r
+size_t DBGManager_GetGlobalVariableTypeByteSize(size_t Index)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableTypeByteSize(Index);\r
+               return DWARFManager_GetGlobalVariableTypeByteSize(Index);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -221,14 +292,14 @@ size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable's type encoding based on his Index\r
+// Get global variable's type encoding based on his Index\r
 // Return the type encoding found\r
 // Return 0 if no type encoding has been found\r
 // Return the type encoding found\r
 // Return 0 if no type encoding has been found\r
-size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index)\r
+size_t DBGManager_GetGlobalVariableTypeEncoding(size_t Index)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableTypeEncoding(Index);\r
+               return DWARFManager_GetGlobalVariableTypeEncoding(Index);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -237,20 +308,20 @@ size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable value based on his Index\r
+// Get global variable value based on his Index\r
 // Return value as a text pointer\r
 // Note: Pointer may point on a 0 lenght text\r
 // Return value as a text pointer\r
 // Note: Pointer may point on a 0 lenght text\r
-char *DBGManager_GetExternalVariableValue(size_t Index)\r
+char *DBGManager_GetGlobalVariableValue(size_t Index)\r
 {\r
 {\r
-       uint32_t Adr = 0;\r
-       uint32_t TypeEncoding = DBG_NO_TYPEENCODING;\r
-       uint32_t TypeByteSize = 0;\r
+       size_t Adr = 0;\r
+       size_t TypeEncoding = DBG_NO_TYPEENCODING;\r
+       size_t TypeByteSize = 0;\r
 \r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 \r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               Adr = DWARFManager_GetExternalVariableAdr(Index);\r
-               TypeEncoding = DWARFManager_GetExternalVariableTypeEncoding(Index);\r
-               TypeByteSize = DWARFManager_GetExternalVariableTypeByteSize(Index);\r
+               Adr = DWARFManager_GetGlobalVariableAdr(Index);\r
+               TypeEncoding = DWARFManager_GetGlobalVariableTypeEncoding(Index);\r
+               TypeByteSize = DWARFManager_GetGlobalVariableTypeByteSize(Index);\r
        }\r
 \r
        return DBGManager_GetVariableValueFromAdr(Adr, TypeEncoding, TypeByteSize);\r
        }\r
 \r
        return DBGManager_GetVariableValueFromAdr(Adr, TypeEncoding, TypeByteSize);\r
@@ -260,7 +331,7 @@ char *DBGManager_GetExternalVariableValue(size_t Index)
 // Get variable value based on his Adresse, Encoding Type and Size\r
 // Return value as a text pointer\r
 // Note: Pointer may point on a 0 lenght text if Adress is NULL\r
 // Get variable value based on his Adresse, Encoding Type and Size\r
 // Return value as a text pointer\r
 // Note: Pointer may point on a 0 lenght text if Adress is NULL\r
-char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, uint32_t TypeByteSize)\r
+char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize)\r
 {\r
        Value V;\r
        char *Ptrvalue = value;\r
 {\r
        Value V;\r
        char *Ptrvalue = value;\r
@@ -277,7 +348,7 @@ char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, ui
                jaguarMainRAM[Adr + TypeByteSize - 1] = 0x10;\r
 #endif\r
 #if 1\r
                jaguarMainRAM[Adr + TypeByteSize - 1] = 0x10;\r
 #endif\r
 #if 1\r
-               for (uint32_t i = 0, j = TypeByteSize; i < TypeByteSize; i++, j--)\r
+               for (size_t i = 0, j = TypeByteSize; i < TypeByteSize; i++, j--)\r
                {\r
                        V.C[i] = jaguarMainRAM[Adr + j - 1];\r
                }\r
                {\r
                        V.C[i] = jaguarMainRAM[Adr + j - 1];\r
                }\r
@@ -370,14 +441,78 @@ char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, ui
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable name based on his Index\r
+// Get local variable's type name based on his Index\r
+// Return type name's text pointer found\r
+// Return NULL if no type name has been found\r
+char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableTypeName(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+\r
+\r
+// Get local variable Op based on his Index\r
+// Return variable Op's found\r
+// Return 0 if no variable Op has been found\r
+size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableOp(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+// Get local variable name based on his Index\r
+// Return variable name's text pointer found\r
+// Return NULL if no variable name has been found\r
+char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableName(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+\r
+\r
+// Get global variable name based on his Index\r
 // Return variable name's text pointer found\r
 // Return NULL if no variable name has been found\r
 // Return variable name's text pointer found\r
 // Return NULL if no variable name has been found\r
-char *DBGManager_GetExternalVariableName(size_t Index)\r
+char *DBGManager_GetGlobalVariableName(size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetGlobalVariableName(Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+\r
+\r
+// Get function name from address\r
+// Return function name found\r
+// Return NULL if no function name has been found\r
+char *DBGManager_GetFunctionName(size_t Adr)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetExternalVariableName(Index);\r
+               return DWARFManager_GetFunctionName(Adr);\r
        }\r
        else\r
        {\r
        }\r
        else\r
        {\r
@@ -405,7 +540,7 @@ size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag)
 // Get symbol name from address\r
 // Return text pointer on the symbol name found\r
 // Return NULL if no symbol name has been found\r
 // Get symbol name from address\r
 // Return text pointer on the symbol name found\r
 // Return NULL if no symbol name has been found\r
-char *DBGManager_GetSymbolnameFromAdr(size_t Adr)\r
+char *DBGManager_GetSymbolNameFromAdr(size_t Adr)\r
 {\r
        char *Symbolname;\r
 \r
 {\r
        char *Symbolname;\r
 \r
index 87e0900..e671e27 100644 (file)
@@ -23,6 +23,16 @@ typedef enum {
        DBG_END_TAG\r
 }DBGTAG;\r
 \r
        DBG_END_TAG\r
 }DBGTAG;\r
 \r
+//\r
+typedef enum {\r
+       DBG_TAG_TYPE_structure = 0x1,\r
+       DBG_TAG_TYPE_pointer = 0x2,\r
+       DBG_TAG_TYPE_subrange = 0x4,\r
+       DBG_TAG_TYPE_array = 0x8,\r
+       DBG_TAG_TYPE_const = 0x10,\r
+       DBG_TAG_TYPE_typedef = 0x20\r
+}DBGTAGTYPE;\r
+\r
 // Encoding based in the DW_ATE_... list from the dwarf.h\r
 // Except for the DBG_ATE_ptr\r
 typedef enum {\r
 // Encoding based in the DW_ATE_... list from the dwarf.h\r
 // Except for the DBG_ATE_ptr\r
 typedef enum {\r
@@ -46,6 +56,167 @@ typedef enum {
        DBG_END_TYPEENCODING\r
 }DBGTYPEENCODING;\r
 \r
        DBG_END_TYPEENCODING\r
 }DBGTYPEENCODING;\r
 \r
+// Encoding based in the DW_OP_... list from the dwarf.h\r
+typedef enum {\r
+       DBG_NO_OP,\r
+       DBG_OP_addr = 0x03,\r
+       DBG_OP_deref = 0x06,\r
+       DBG_OP_const1u = 0x08,\r
+       DBG_OP_const1s = 0x09,\r
+       DBG_OP_const2u = 0x0a,\r
+       DBG_OP_const2s = 0x0b,\r
+       DBG_OP_const4u = 0x0c,\r
+       DBG_OP_const4s = 0x0d,\r
+       DBG_OP_const8u = 0x0e,\r
+       DBG_OP_const8s = 0x0f,\r
+       DBG_OP_constu = 0x10,\r
+       DBG_OP_consts = 0x11,\r
+       DBG_OP_dup = 0x12,\r
+       DBG_OP_drop = 0x13,\r
+       DBG_OP_over = 0x14,\r
+       DBG_OP_pick = 0x15,\r
+       DBG_OP_swap = 0x16,\r
+       DBG_OP_rot = 0x17,\r
+       DBG_OP_xderef = 0x18,\r
+       DBG_OP_abs = 0x19,\r
+       DBG_OP_and = 0x1a,\r
+       DBG_OP_div = 0x1b,\r
+       DBG_OP_minus = 0x1c,\r
+       DBG_OP_mod = 0x1d,\r
+       DBG_OP_mul = 0x1e,\r
+       DBG_OP_neg = 0x1f,\r
+       DBG_OP_not = 0x20,\r
+       DBG_OP_or = 0x21,\r
+       DBG_OP_plus = 0x22,\r
+       DBG_OP_plus_uconst = 0x23,\r
+       DBG_OP_shl = 0x24,\r
+       DBG_OP_shr = 0x25,\r
+       DBG_OP_shra = 0x26,\r
+       DBG_OP_xor = 0x27,\r
+       DBG_OP_bra = 0x28,\r
+       DBG_OP_eq = 0x29,\r
+       DBG_OP_ge = 0x2a,\r
+       DBG_OP_gt = 0x2b,\r
+       DBG_OP_le = 0x2c,\r
+       DBG_OP_lt = 0x2d,\r
+       DBG_OP_ne = 0x2e,\r
+       DBG_OP_skip = 0x2f,\r
+       DBG_OP_lit0 = 0x30,\r
+       DBG_OP_lit1 = 0x31,\r
+       DBG_OP_lit2 = 0x32,\r
+       DBG_OP_lit3 = 0x33,\r
+       DBG_OP_lit4 = 0x34,\r
+       DBG_OP_lit5 = 0x35,\r
+       DBG_OP_lit6 = 0x36,\r
+       DBG_OP_lit7 = 0x37,\r
+       DBG_OP_lit8 = 0x38,\r
+       DBG_OP_lit9 = 0x39,\r
+       DBG_OP_lit10 = 0x3a,\r
+       DBG_OP_lit11 = 0x3b,\r
+       DBG_OP_lit12 = 0x3c,\r
+       DBG_OP_lit13 = 0x3d,\r
+       DBG_OP_lit14 = 0x3e,\r
+       DBG_OP_lit15 = 0x3f,\r
+       DBG_OP_lit16 = 0x40,\r
+       DBG_OP_lit17 = 0x41,\r
+       DBG_OP_lit18 = 0x42,\r
+       DBG_OP_lit19 = 0x43,\r
+       DBG_OP_lit20 = 0x44,\r
+       DBG_OP_lit21 = 0x45,\r
+       DBG_OP_lit22 = 0x46,\r
+       DBG_OP_lit23 = 0x47,\r
+       DBG_OP_lit24 = 0x48,\r
+       DBG_OP_lit25 = 0x49,\r
+       DBG_OP_lit26 = 0x4a,\r
+       DBG_OP_lit27 = 0x4b,\r
+       DBG_OP_lit28 = 0x4c,\r
+       DBG_OP_lit29 = 0x4d,\r
+       DBG_OP_lit30 = 0x4e,\r
+       DBG_OP_lit31 = 0x4f,\r
+       DBG_OP_reg0 = 0x50,\r
+       DBG_OP_reg1 = 0x51,\r
+       DBG_OP_reg2 = 0x52,\r
+       DBG_OP_reg3 = 0x53,\r
+       DBG_OP_reg4 = 0x54,\r
+       DBG_OP_reg5 = 0x55,\r
+       DBG_OP_reg6 = 0x56,\r
+       DBG_OP_reg7 = 0x57,\r
+       DBG_OP_reg8 = 0x58,\r
+       DBG_OP_reg9 = 0x59,\r
+       DBG_OP_reg10 = 0x5a,\r
+       DBG_OP_reg11 = 0x5b,\r
+       DBG_OP_reg12 = 0x5c,\r
+       DBG_OP_reg13 = 0x5d,\r
+       DBG_OP_reg14 = 0x5e,\r
+       DBG_OP_reg15 = 0x5f,\r
+       DBG_OP_reg16 = 0x60,\r
+       DBG_OP_reg17 = 0x61,\r
+       DBG_OP_reg18 = 0x62,\r
+       DBG_OP_reg19 = 0x63,\r
+       DBG_OP_reg20 = 0x64,\r
+       DBG_OP_reg21 = 0x65,\r
+       DBG_OP_reg22 = 0x66,\r
+       DBG_OP_reg23 = 0x67,\r
+       DBG_OP_reg24 = 0x68,\r
+       DBG_OP_reg25 = 0x69,\r
+       DBG_OP_reg26 = 0x6a,\r
+       DBG_OP_reg27 = 0x6b,\r
+       DBG_OP_reg28 = 0x6c,\r
+       DBG_OP_reg29 = 0x6d,\r
+       DBG_OP_reg30 = 0x6e,\r
+       DBG_OP_reg31 = 0x6f,\r
+       DBG_OP_breg0 = 0x70,\r
+       DBG_OP_breg1 = 0x71,\r
+       DBG_OP_breg2 = 0x72,\r
+       DBG_OP_breg3 = 0x73,\r
+       DBG_OP_breg4 = 0x74,\r
+       DBG_OP_breg5 = 0x75,\r
+       DBG_OP_breg6 = 0x76,\r
+       DBG_OP_breg7 = 0x77,\r
+       DBG_OP_breg8 = 0x78,\r
+       DBG_OP_breg9 = 0x79,\r
+       DBG_OP_breg10 = 0x7a,\r
+       DBG_OP_breg11 = 0x7b,\r
+       DBG_OP_breg12 = 0x7c,\r
+       DBG_OP_breg13 = 0x7d,\r
+       DBG_OP_breg14 = 0x7e,\r
+       DBG_OP_breg15 = 0x7f,\r
+       DBG_OP_breg16 = 0x80,\r
+       DBG_OP_breg17 = 0x81,\r
+       DBG_OP_breg18 = 0x82,\r
+       DBG_OP_breg19 = 0x83,\r
+       DBG_OP_breg20 = 0x84,\r
+       DBG_OP_breg21 = 0x85,\r
+       DBG_OP_breg22 = 0x86,\r
+       DBG_OP_breg23 = 0x87,\r
+       DBG_OP_breg24 = 0x88,\r
+       DBG_OP_breg25 = 0x89,\r
+       DBG_OP_breg26 = 0x8a,\r
+       DBG_OP_breg27 = 0x8b,\r
+       DBG_OP_breg28 = 0x8c,\r
+       DBG_OP_breg29 = 0x8d,\r
+       DBG_OP_breg30 = 0x8e,\r
+       DBG_OP_breg31 = 0x8f,\r
+       DBG_OP_regx = 0x90,\r
+       DBG_OP_fbreg = 0x91,\r
+       DBG_OP_bregx = 0x92,\r
+       DBG_OP_piece = 0x93,\r
+       DBG_OP_deref_size = 0x94,\r
+       DBG_OP_xderef_size = 0x95,\r
+       DBG_OP_nop = 0x96,\r
+       DBG_OP_push_object_address = 0x97,              /* DWARF3 */\r
+       DBG_OP_call2 = 0x98,                                    /* DWARF3 */\r
+       DBG_OP_call4 = 0x99,                                    /* DWARF3 */\r
+       DBG_OP_call_ref = 0x9a,                                 /* DWARF3 */\r
+       DBG_OP_form_tls_address = 0x9b,                 /* DWARF3f */\r
+       DBG_OP_call_frame_cfa = 0x9c,                   /* DWARF3f */\r
+       DBG_OP_bit_piece = 0x9d,                                /* DWARF3f */\r
+       DBG_OP_implicit_value = 0x9e,                   /* DWARF4 */\r
+       DBG_OP_stack_value = 0x9f,                              /* DWARF4 */\r
+       DBG_END_OP\r
+}\r
+DBGOP;\r
+\r
 \r
 //\r
 extern void    DBGManager_Init(void);\r
 \r
 //\r
 extern void    DBGManager_Init(void);\r
@@ -54,24 +225,36 @@ extern void        DBGManager_Reset(void);
 extern void    DBGManager_Close(void);\r
 \r
 //\r
 extern void    DBGManager_Close(void);\r
 \r
 //\r
-extern char    *DBGManager_GetSymbolnameFromAdr(size_t Adr);\r
+extern char    *DBGManager_GetSymbolNameFromAdr(size_t Adr);\r
 extern char    *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error);\r
 extern size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag);\r
 extern char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag);\r
 extern char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine);\r
 extern char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine);\r
 extern char    *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error);\r
 extern size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag);\r
 extern char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag);\r
 extern char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine);\r
 extern char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine);\r
-\r
-// External variables manager\r
-extern size_t DBGManager_GetNbExternalVariables(void);\r
-extern char *DBGManager_GetExternalVariableName(size_t Index);\r
-extern size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index);\r
-extern char *DBGManager_GetExternalVariableTypeName(size_t Index);\r
-extern size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index);\r
-extern size_t DBGManager_GetExternalVariableAdr(size_t Index);\r
-extern size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName);\r
 extern size_t DBGManager_GetAdrFromSymbolName(char *SymbolName);\r
 extern size_t DBGManager_GetAdrFromSymbolName(char *SymbolName);\r
-extern char *DBGManager_GetExternalVariableValue(size_t Index);\r
-extern size_t DBGManager_GetExternalVariableTypeTag(size_t Index);\r
+extern char *DBGManager_GetFunctionName(size_t Adr);\r
+extern char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize);\r
+\r
+// Global variables manager\r
+extern size_t DBGManager_GetNbGlobalVariables(void);\r
+extern char *DBGManager_GetGlobalVariableName(size_t Index);\r
+extern size_t DBGManager_GetGlobalVariableTypeEncoding(size_t Index);\r
+extern char *DBGManager_GetGlobalVariableTypeName(size_t Index);\r
+extern size_t DBGManager_GetGlobalVariableTypeByteSize(size_t Index);\r
+extern size_t DBGManager_GetGlobalVariableAdr(size_t Index);\r
+extern size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName);\r
+extern char *DBGManager_GetGlobalVariableValue(size_t Index);\r
+extern size_t DBGManager_GetGlobalVariableTypeTag(size_t Index);\r
+\r
+// Local variables manager\r
+extern size_t DBGManager_GetNbLocalVariables(size_t Adr);\r
+extern char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index);\r
+extern size_t DBGManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index);\r
+extern char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index);\r
+extern size_t DBGManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index);\r
+extern size_t DBGManager_GetLocalVariableTypeTag(size_t Adr, size_t Index);\r
+extern size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index);\r
+extern int DBGManager_GetLocalVariableOffset(size_t Adr, size_t Index);\r
 \r
 \r
 #endif // __DBGMANAGER_H__\r
 \r
 \r
 #endif // __DBGMANAGER_H__\r
index 573292c..16e096a 100644 (file)
@@ -21,6 +21,7 @@
 \r
 //\r
 //#define DEBUG_NumCU 0x6                                              // CU number to debug or undefine it\r
 \r
 //\r
 //#define DEBUG_NumCU 0x6                                              // CU number to debug or undefine it\r
+//#define DEBUG_VariableName "argc"                            // Variable name to look for or undefine it\r
 \r
 \r
 // Source line internal structure\r
 \r
 \r
 // Source line internal structure\r
@@ -46,7 +47,12 @@ struct BaseTypeStruct
 // Variables internal structure\r
 struct VariablesStruct\r
 {\r
 // Variables internal structure\r
 struct VariablesStruct\r
 {\r
-       size_t Addr;                                                    // Variable memory address\r
+       size_t Op;                                                              // Variable's DW_OP\r
+       union\r
+       {\r
+               size_t Addr;                                            // Variable memory address\r
+               int Offset;                                                     // Variable stack offset (signed)\r
+       };\r
        char *PtrName;                                                  // Variable's name\r
        size_t TypeOffset;                                              // Offset pointing on the Variable's Type\r
        size_t TypeByteSize;                                    // Variable's Type byte size\r
        char *PtrName;                                                  // Variable's name\r
        size_t TypeOffset;                                              // Offset pointing on the Variable's Type\r
        size_t TypeByteSize;                                    // Variable's Type byte size\r
@@ -62,10 +68,13 @@ struct SubProgStruct
        size_t NumLineSrc;\r
        size_t StartPC;\r
        size_t LowPC, HighPC;\r
        size_t NumLineSrc;\r
        size_t StartPC;\r
        size_t LowPC, HighPC;\r
+       size_t FrameBase;\r
        char *PtrLineSrc;\r
        char *PtrLineSrc;\r
-       char *PtrSubprogramName;\r
-       size_t NbLinesSrc;\r
-       DMIStruct_LineSrc *PtrLinesSrc;\r
+       char *PtrSubprogramName;                                                // Sub program name\r
+       size_t NbLinesSrc;                                                              // Number of lines source used by the sub program\r
+       DMIStruct_LineSrc *PtrLinesSrc;                                 // Pointer of the lines source for the sub program\r
+       size_t NbVariables;                                                             // Variables number\r
+       VariablesStruct *PtrVariables;                                  // Pointer to the local variables list information structure\r
 }S_SubProgStruct;\r
 \r
 // Compilation Unit internal structure\r
 }S_SubProgStruct;\r
 \r
 // Compilation Unit internal structure\r
@@ -84,7 +93,7 @@ struct CUStruct
        size_t NbTypes;\r
        BaseTypeStruct *PtrTypes;\r
        size_t NbVariables;                                                             // Variables number\r
        size_t NbTypes;\r
        BaseTypeStruct *PtrTypes;\r
        size_t NbVariables;                                                             // Variables number\r
-       VariablesStruct *PtrVariables;                                  // Pointer to the variables list information structure\r
+       VariablesStruct *PtrVariables;                                  // Pointer to the global variables list information structure\r
 }S_CUStruct;\r
 \r
 \r
 }S_CUStruct;\r
 \r
 \r
@@ -103,6 +112,7 @@ void DWARFManager_InitDMI(void);
 void DWARFManager_CloseDMI(void);\r
 bool DWARFManager_ElfClose(void);\r
 char *DWARFManager_GetLineSrcFromNumLine(char *PtrSrcFile, size_t NumLine);\r
 void DWARFManager_CloseDMI(void);\r
 bool DWARFManager_ElfClose(void);\r
 char *DWARFManager_GetLineSrcFromNumLine(char *PtrSrcFile, size_t NumLine);\r
+void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables);\r
 \r
 \r
 //\r
 \r
 \r
 //\r
@@ -186,6 +196,13 @@ void DWARFManager_CloseDMI(void)
 \r
                while (PtrCU[NbCU].NbSubProgs--)\r
                {\r
 \r
                while (PtrCU[NbCU].NbSubProgs--)\r
                {\r
+                       while (PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables--)\r
+                       {\r
+                               free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].PtrName);\r
+                               free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].PtrTypeName);\r
+                       }\r
+                       free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables);\r
+\r
                        free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc);\r
                        free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrSubprogramName);\r
                }\r
                        free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc);\r
                        free(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrSubprogramName);\r
                }\r
@@ -220,11 +237,11 @@ void DWARFManager_InitDMI(void)
        Dwarf_Addr return_lowpc, return_highpc, return_lineaddr;\r
        Dwarf_Block *return_block;\r
        Dwarf_Signed atcnt, cnt;\r
        Dwarf_Addr return_lowpc, return_highpc, return_lineaddr;\r
        Dwarf_Block *return_block;\r
        Dwarf_Signed atcnt, cnt;\r
-       Dwarf_Die return_sib, return_die;\r
+       Dwarf_Die return_sib, return_die, return_sub, return_subdie;\r
        Dwarf_Off return_offset;\r
        Dwarf_Line *linebuf;\r
        FILE *SrcFile;\r
        Dwarf_Off return_offset;\r
        Dwarf_Line *linebuf;\r
        FILE *SrcFile;\r
-       size_t i, j, k, TypeOffset;\r
+       size_t i, j, k;\r
        char *return_string;\r
        char *Ptr;\r
        char *SourceFilename = NULL;\r
        char *return_string;\r
        char *Ptr;\r
        char *SourceFilename = NULL;\r
@@ -380,6 +397,7 @@ void DWARFManager_InitDMI(void)
                                        {\r
                                        }\r
 \r
                                        {\r
                                        }\r
 \r
+                                       // Check if the CU has child\r
                                        if (dwarf_child(return_sib, &return_die, &error) == DW_DLV_OK)\r
                                        {\r
                                                do\r
                                        if (dwarf_child(return_sib, &return_die, &error) == DW_DLV_OK)\r
                                        {\r
                                                do\r
@@ -409,9 +427,16 @@ void DWARFManager_InitDMI(void)
                                                                                                        case    DW_AT_location:\r
                                                                                                                if (dwarf_formblock(return_attr1, &return_block, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                        case    DW_AT_location:\r
                                                                                                                if (dwarf_formblock(return_attr1, &return_block, &error) == DW_DLV_OK)\r
                                                                                                                {\r
-                                                                                                                       if (return_block->bl_len == 5)\r
+                                                                                                                       PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].Op = (*((unsigned char *)(return_block->bl_data)));\r
+\r
+                                                                                                                       switch (return_block->bl_len)\r
                                                                                                                        {\r
                                                                                                                        {\r
+                                                                                                                       case 5:\r
                                                                                                                                PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].Addr = (*((unsigned char *)(return_block->bl_data) + 1) << 24) + (*((unsigned char *)(return_block->bl_data) + 2) << 16) + (*((unsigned char *)(return_block->bl_data) + 3) << 8) + (*((unsigned char *)(return_block->bl_data) + 4));\r
                                                                                                                                PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].Addr = (*((unsigned char *)(return_block->bl_data) + 1) << 24) + (*((unsigned char *)(return_block->bl_data) + 2) << 16) + (*((unsigned char *)(return_block->bl_data) + 3) << 8) + (*((unsigned char *)(return_block->bl_data) + 4));\r
+                                                                                                                               break;\r
+\r
+                                                                                                                       default:\r
+                                                                                                                               break;\r
                                                                                                                        }\r
                                                                                                                        dwarf_dealloc(dbg, return_block, DW_DLA_BLOCK);\r
                                                                                                                }\r
                                                                                                                        }\r
                                                                                                                        dwarf_dealloc(dbg, return_block, DW_DLA_BLOCK);\r
                                                                                                                }\r
@@ -427,9 +452,14 @@ void DWARFManager_InitDMI(void)
                                                                                                        case    DW_AT_name:\r
                                                                                                                if (dwarf_formstring(return_attr1, &return_string, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                        case    DW_AT_name:\r
                                                                                                                if (dwarf_formstring(return_attr1, &return_string, &error) == DW_DLV_OK)\r
                                                                                                                {\r
-                                                                                                                       PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].PtrName = (char *)calloc(strlen(return_string) + 1, 1);\r
-                                                                                                                       strcpy(PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].PtrName, return_string);\r
-                                                                                                                       dwarf_dealloc(dbg, return_string, DW_DLA_STRING);\r
+#ifdef DEBUG_VariableName\r
+                                                                                                                       if (!strcmp(return_string, DEBUG_VariableName))\r
+#endif\r
+                                                                                                                       {\r
+                                                                                                                               PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].PtrName = (char *)calloc(strlen(return_string) + 1, 1);\r
+                                                                                                                               strcpy(PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].PtrName, return_string);\r
+                                                                                                                               dwarf_dealloc(dbg, return_string, DW_DLA_STRING);\r
+                                                                                                                       }\r
                                                                                                                }\r
                                                                                                                break;\r
 \r
                                                                                                                }\r
                                                                                                                break;\r
 \r
@@ -535,7 +565,7 @@ void DWARFManager_InitDMI(void)
                                                                                                {\r
                                                                                                        switch (return_attr)\r
                                                                                                        {\r
                                                                                                {\r
                                                                                                        switch (return_attr)\r
                                                                                                        {\r
-                                                                                                       case    DW_AT_low_pc:\r
+                                                                                                       case DW_AT_low_pc:\r
                                                                                                                if (dwarf_lowpc(return_die, &return_lowpc, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].StartPC = return_lowpc;\r
                                                                                                                if (dwarf_lowpc(return_die, &return_lowpc, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].StartPC = return_lowpc;\r
@@ -543,21 +573,28 @@ void DWARFManager_InitDMI(void)
                                                                                                                }\r
                                                                                                                break;\r
 \r
                                                                                                                }\r
                                                                                                                break;\r
 \r
-                                                                                                       case    DW_AT_high_pc:\r
+                                                                                                       case DW_AT_high_pc:\r
                                                                                                                if (dwarf_highpc(return_die, &return_highpc, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].HighPC = return_highpc;\r
                                                                                                                }\r
                                                                                                                break;\r
 \r
                                                                                                                if (dwarf_highpc(return_die, &return_highpc, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].HighPC = return_highpc;\r
                                                                                                                }\r
                                                                                                                break;\r
 \r
-                                                                                                       case    DW_AT_decl_line:\r
+                                                                                                       case DW_AT_decl_line:\r
                                                                                                                if (dwarf_formudata(return_attr1, &return_uvalue, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NumLineSrc = return_uvalue;\r
                                                                                                                }\r
                                                                                                                break;\r
 \r
                                                                                                                if (dwarf_formudata(return_attr1, &return_uvalue, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NumLineSrc = return_uvalue;\r
                                                                                                                }\r
                                                                                                                break;\r
 \r
-                                                                                                       case    DW_AT_name:\r
+                                                                                                       case DW_AT_frame_base:\r
+                                                                                                               if (dwarf_formudata(return_attr1, &return_uvalue, &error) == DW_DLV_OK)\r
+                                                                                                               {\r
+                                                                                                                       PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].FrameBase = return_uvalue;\r
+                                                                                                               }\r
+                                                                                                               break;\r
+\r
+                                                                                                       case DW_AT_name:\r
                                                                                                                if (dwarf_formstring(return_attr1, &return_string, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrSubprogramName = (char *)calloc(strlen(return_string) + 1, 1);\r
                                                                                                                if (dwarf_formstring(return_attr1, &return_string, &error) == DW_DLV_OK)\r
                                                                                                                {\r
                                                                                                                        PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrSubprogramName = (char *)calloc(strlen(return_string) + 1, 1);\r
@@ -593,6 +630,103 @@ void DWARFManager_InitDMI(void)
                                                                                        }\r
                                                                                }\r
 \r
                                                                                        }\r
                                                                                }\r
 \r
+                                                                               if (dwarf_child(return_die, &return_subdie, &error) == DW_DLV_OK)\r
+                                                                               {\r
+                                                                                       do\r
+                                                                                       {\r
+                                                                                               return_sub = return_subdie;\r
+                                                                                               if ((dwarf_tag(return_subdie, &return_tagval, &error) == DW_DLV_OK))\r
+                                                                                               {\r
+                                                                                                       switch (return_tagval)\r
+                                                                                                       {\r
+                                                                                                       case DW_TAG_formal_parameter:\r
+                                                                                                       case DW_TAG_variable:\r
+                                                                                                               if (dwarf_attrlist(return_subdie, &atlist, &atcnt, &error) == DW_DLV_OK)\r
+                                                                                                               {\r
+                                                                                                                       PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables = (VariablesStruct *)realloc(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables, ((PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables + 1) * sizeof(VariablesStruct)));\r
+                                                                                                                       memset(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables, 0, sizeof(VariablesStruct));\r
+\r
+                                                                                                                       for (Dwarf_Signed i = 0; i < atcnt; ++i)\r
+                                                                                                                       {\r
+                                                                                                                               if (dwarf_whatattr(atlist[i], &return_attr, &error) == DW_DLV_OK)\r
+                                                                                                                               {\r
+                                                                                                                                       if (dwarf_attr(return_subdie, return_attr, &return_attr1, &error) == DW_DLV_OK)\r
+                                                                                                                                       {\r
+                                                                                                                                               switch (return_attr)\r
+                                                                                                                                               {\r
+                                                                                                                                               case    DW_AT_location:\r
+                                                                                                                                                       if (dwarf_formblock(return_attr1, &return_block, &error) == DW_DLV_OK)\r
+                                                                                                                                                       {\r
+                                                                                                                                                               PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].Op = *((unsigned char *)(return_block->bl_data));\r
+\r
+                                                                                                                                                               switch (return_block->bl_len)\r
+                                                                                                                                                               {\r
+                                                                                                                                                               case 1:\r
+                                                                                                                                                                       break;\r
+\r
+                                                                                                                                                               case 2:\r
+                                                                                                                                                                       PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].Offset = *((char *)(return_block->bl_data) + 1);\r
+\r
+                                                                                                                                                                       if (return_tagval == DW_TAG_variable)\r
+                                                                                                                                                                       {\r
+                                                                                                                                                                               PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].Offset -= 0x80;\r
+                                                                                                                                                                       }\r
+                                                                                                                                                                       break;\r
+\r
+                                                                                                                                                               default:\r
+                                                                                                                                                                       break;\r
+                                                                                                                                                               }\r
+                                                                                                                                                               dwarf_dealloc(dbg, return_block, DW_DLA_BLOCK);\r
+                                                                                                                                                       }\r
+                                                                                                                                                       break;\r
+\r
+                                                                                                                                               case    DW_AT_type:\r
+                                                                                                                                                       if (dwarf_global_formref(return_attr1, &return_offset, &error) == DW_DLV_OK)\r
+                                                                                                                                                       {\r
+                                                                                                                                                               PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].TypeOffset = return_offset;\r
+                                                                                                                                                       }\r
+                                                                                                                                                       break;\r
+\r
+                                                                                                                                               case    DW_AT_name:\r
+                                                                                                                                                       if (dwarf_formstring(return_attr1, &return_string, &error) == DW_DLV_OK)\r
+                                                                                                                                                       {\r
+#ifdef DEBUG_VariableName\r
+                                                                                                                                                               if (!strcmp(return_string, DEBUG_VariableName))\r
+#endif\r
+                                                                                                                                                               {\r
+                                                                                                                                                                       PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].PtrName = (char *)calloc(strlen(return_string) + 1, 1);\r
+                                                                                                                                                                       strcpy(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrVariables[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables].PtrName, return_string);\r
+                                                                                                                                                                       dwarf_dealloc(dbg, return_string, DW_DLA_STRING);\r
+                                                                                                                                                               }\r
+                                                                                                                                                       }\r
+                                                                                                                                                       break;\r
+\r
+                                                                                                                                               default:\r
+                                                                                                                                                       break;\r
+                                                                                                                                               }\r
+                                                                                                                                       }\r
+                                                                                                                               }\r
+\r
+                                                                                                                               dwarf_dealloc(dbg, atlist[i], DW_DLA_ATTR);\r
+                                                                                                                       }\r
+\r
+                                                                                                                       PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables++;\r
+\r
+                                                                                                                       dwarf_dealloc(dbg, atlist, DW_DLA_LIST);\r
+                                                                                                               }\r
+                                                                                                               break;\r
+\r
+                                                                                                       case DW_TAG_label:\r
+                                                                                                               break;\r
+\r
+                                                                                                       default:\r
+                                                                                                               break;\r
+                                                                                                       }\r
+                                                                                               }\r
+                                                                                       }\r
+                                                                                       while (dwarf_siblingof(dbg, return_sub, &return_subdie, &error) == DW_DLV_OK);\r
+                                                                               }\r
+\r
                                                                                PtrCU[NbCU].NbSubProgs++;\r
                                                                        }\r
                                                                        break;\r
                                                                                PtrCU[NbCU].NbSubProgs++;\r
                                                                        }\r
                                                                        break;\r
@@ -601,7 +735,8 @@ void DWARFManager_InitDMI(void)
                                                                        break;\r
                                                                }\r
                                                        }\r
                                                                        break;\r
                                                                }\r
                                                        }\r
-                                               } while (dwarf_siblingof(dbg, return_sib, &return_die, &error) == DW_DLV_OK);\r
+                                               }\r
+                                               while (dwarf_siblingof(dbg, return_sib, &return_die, &error) == DW_DLV_OK);\r
                                        }\r
 \r
                                        // Release the memory used by the source lines\r
                                        }\r
 \r
                                        // Release the memory used by the source lines\r
@@ -703,98 +838,18 @@ void DWARFManager_InitDMI(void)
                                        }\r
                                }\r
 \r
                                        }\r
                                }\r
 \r
-                               // Init variables information based on types information\r
+                               // Init global variables information based on types information\r
                                for (i = 0; i < PtrCU[NbCU].NbVariables; i++)\r
                                {\r
                                for (i = 0; i < PtrCU[NbCU].NbVariables; i++)\r
                                {\r
-                                       PtrCU[NbCU].PtrVariables[i].PtrTypeName = (char *)calloc(1000, 1);\r
-                                       TypeOffset = PtrCU[NbCU].PtrVariables[i].TypeOffset;\r
+                                       DWARFManager_InitInfosVariable(PtrCU[NbCU].PtrVariables + i);\r
+                               }\r
 \r
 \r
-                                       for (j = 0; j < PtrCU[NbCU].NbTypes; j++)\r
+                               // Init local variables information based on types information\r
+                               for (i = 0; i < PtrCU[NbCU].NbSubProgs; i++)\r
+                               {\r
+                                       for (j = 0; j < PtrCU[NbCU].PtrSubProgs[i].NbVariables; j++)\r
                                        {\r
                                        {\r
-                                               if (TypeOffset == PtrCU[NbCU].PtrTypes[j].Offset)\r
-                                               {\r
-                                                       switch (PtrCU[NbCU].PtrTypes[j].Tag)\r
-                                                       {\r
-                                                       case DW_TAG_structure_type:\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeTag |= 0x1;\r
-                                                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
-                                                               {\r
-                                                                       j = -1;\r
-                                                               }\r
-                                                               else\r
-                                                               {\r
-                                                                       if ((PtrCU[NbCU].PtrVariables[i].TypeTag & 0x2))\r
-                                                                       {\r
-                                                                               strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, " *");\r
-                                                                       }\r
-                                                               }\r
-                                                               break;\r
-\r
-                                                       case DW_TAG_pointer_type:\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeTag |= 0x2;\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeByteSize = PtrCU[NbCU].PtrTypes[j].ByteSize;\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeEncoding = 0x10;\r
-                                                               if (!(TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
-                                                               {\r
-                                                                       strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, "void *");\r
-                                                               }\r
-                                                               else\r
-                                                               {\r
-                                                                       j = -1;\r
-                                                               }\r
-                                                               break;\r
-\r
-                                                       case DW_TAG_typedef:\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeTag |= 0x20;\r
-                                                               strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, PtrCU[NbCU].PtrTypes[j].PtrName);\r
-                                                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
-                                                               {\r
-                                                                       j = -1;\r
-                                                               }\r
-                                                               break;\r
-\r
-                                                       case DW_TAG_subrange_type:\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeTag |= 0x4;\r
-                                                               break;\r
-\r
-                                                       case DW_TAG_array_type:\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeTag |= 0x8;\r
-                                                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
-                                                               {\r
-                                                                       j = -1;\r
-                                                               }\r
-                                                               break;\r
-\r
-                                                       case DW_TAG_const_type:\r
-                                                               PtrCU[NbCU].PtrVariables[i].TypeTag |= 0x10;\r
-                                                               strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, "const ");\r
-                                                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
-                                                               {\r
-                                                                       j = -1;\r
-                                                               }\r
-                                                               break;\r
-\r
-                                                       case DW_TAG_base_type:\r
-                                                               strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, PtrCU[NbCU].PtrTypes[j].PtrName);\r
-                                                               if ((PtrCU[NbCU].PtrVariables[i].TypeTag & 0x2))\r
-                                                               {\r
-                                                                       strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, " *");\r
-                                                               }\r
-                                                               else\r
-                                                               {\r
-                                                                       PtrCU[NbCU].PtrVariables[i].TypeByteSize = PtrCU[NbCU].PtrTypes[j].ByteSize;\r
-                                                                       PtrCU[NbCU].PtrVariables[i].TypeEncoding = PtrCU[NbCU].PtrTypes[j].Encoding;\r
-                                                               }\r
-                                                               if ((PtrCU[NbCU].PtrVariables[i].TypeTag & 0x8))\r
-                                                               {\r
-                                                                       strcat(PtrCU[NbCU].PtrVariables[i].PtrTypeName, "[]");\r
-                                                               }\r
-                                                               break;\r
-\r
-                                                       default:\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
+                                               DWARFManager_InitInfosVariable(PtrCU[NbCU].PtrSubProgs[i].PtrVariables + j);\r
                                        }\r
                                }\r
                        }\r
                                        }\r
                                }\r
                        }\r
@@ -809,6 +864,104 @@ void DWARFManager_InitDMI(void)
 }\r
 \r
 \r
 }\r
 \r
 \r
+// \r
+void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables)\r
+{\r
+       size_t j, TypeOffset;\r
+\r
+       PtrVariables->PtrTypeName = (char *)calloc(1000, 1);\r
+       TypeOffset = PtrVariables->TypeOffset;\r
+\r
+       for (j = 0; j < PtrCU[NbCU].NbTypes; j++)\r
+       {\r
+               if (TypeOffset == PtrCU[NbCU].PtrTypes[j].Offset)\r
+               {\r
+                       switch (PtrCU[NbCU].PtrTypes[j].Tag)\r
+                       {\r
+                       case DW_TAG_structure_type:\r
+                               PtrVariables->TypeTag |= 0x1;\r
+                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
+                               {\r
+                                       j = -1;\r
+                               }\r
+                               else\r
+                               {\r
+                                       if ((PtrVariables->TypeTag & 0x2))\r
+                                       {\r
+                                               strcat(PtrVariables->PtrTypeName, " *");\r
+                                       }\r
+                               }\r
+                               break;\r
+\r
+                       case DW_TAG_pointer_type:\r
+                               PtrVariables->TypeTag |= 0x2;\r
+                               PtrVariables->TypeByteSize = PtrCU[NbCU].PtrTypes[j].ByteSize;\r
+                               PtrVariables->TypeEncoding = 0x10;\r
+                               if (!(TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
+                               {\r
+                                       strcat(PtrVariables->PtrTypeName, "void *");\r
+                               }\r
+                               else\r
+                               {\r
+                                       j = -1;\r
+                               }\r
+                               break;\r
+\r
+                       case DW_TAG_typedef:\r
+                               PtrVariables->TypeTag |= 0x20;\r
+                               strcat(PtrVariables->PtrTypeName, PtrCU[NbCU].PtrTypes[j].PtrName);\r
+                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
+                               {\r
+                                       j = -1;\r
+                               }\r
+                               break;\r
+\r
+                       case DW_TAG_subrange_type:\r
+                               PtrVariables->TypeTag |= 0x4;\r
+                               break;\r
+\r
+                       case DW_TAG_array_type:\r
+                               PtrVariables->TypeTag |= 0x8;\r
+                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
+                               {\r
+                                       j = -1;\r
+                               }\r
+                               break;\r
+\r
+                       case DW_TAG_const_type:\r
+                               PtrVariables->TypeTag |= 0x10;\r
+                               strcat(PtrVariables->PtrTypeName, "const ");\r
+                               if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
+                               {\r
+                                       j = -1;\r
+                               }\r
+                               break;\r
+\r
+                       case DW_TAG_base_type:\r
+                               strcat(PtrVariables->PtrTypeName, PtrCU[NbCU].PtrTypes[j].PtrName);\r
+                               if ((PtrVariables->TypeTag & 0x2))\r
+                               {\r
+                                       strcat(PtrVariables->PtrTypeName, " *");\r
+                               }\r
+                               else\r
+                               {\r
+                                       PtrVariables->TypeByteSize = PtrCU[NbCU].PtrTypes[j].ByteSize;\r
+                                       PtrVariables->TypeEncoding = PtrCU[NbCU].PtrTypes[j].Encoding;\r
+                               }\r
+                               if ((PtrVariables->TypeTag & 0x8))\r
+                               {\r
+                                       strcat(PtrVariables->PtrTypeName, "[]");\r
+                               }\r
+                               break;\r
+\r
+                       default:\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+\r
 // Get symbol name based from address\r
 // Return NULL if no symbol name exists\r
 char *DWARFManager_GetSymbolnameFromAdr(size_t Adr)\r
 // Get symbol name based from address\r
 // Return NULL if no symbol name exists\r
 char *DWARFManager_GetSymbolnameFromAdr(size_t Adr)\r
@@ -874,9 +1027,204 @@ char *DWARFManager_GetLineSrcFromNumLine(char *PtrSrcFile, size_t NumLine)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get Compilation Unit / External variables numbers\r
+// Get number of variables referenced by the function range address\r
+size_t DWARFManager_GetNbLocalVariables(size_t Adr)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].NbVariables;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+// Get local variable name based on his index (starting by 1)\r
+// Return name's pointer text found\r
+// Return NULL if not found\r
+char *DWARFManager_GetLocalVariableName(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].PtrName;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+\r
+// Get local variable's type tag based on his index (starting by 1)\r
+// Return 0 if not found\r
+size_t DWARFManager_GetLocalVariableTypeTag(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].TypeTag;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+//\r
+int DWARFManager_GetLocalVariableOffset(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].Offset;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+// Get local variable Type Byte Size based on his address and index (starting by 1)\r
+// Return 0 if not found\r
+// May return 0 if there is no Type Byte Size linked to the variable's address and index\r
+size_t DWARFManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].TypeByteSize;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+// Get local variable Type Encoding based on his address and index (starting by 1)\r
+// Return 0 if not found\r
+// May return 0 if there is no Type Encoding linked to the variable's address and index\r
+size_t DWARFManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].TypeEncoding;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+// Get local variable Op based on his address and index (starting by 1)\r
+// Return 0 if not found\r
+// May return 0 if there isn't Op linked to the variable's index\r
+size_t DWARFManager_GetLocalVariableOp(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].Op;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+\r
+// Get local variable type name based on his index (starting by 1)\r
+// Return NULL if not found\r
+// May return NULL if there is not type linked to the variable's index\r
+char *DWARFManager_GetLocalVariableTypeName(size_t Adr, size_t Index)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].PtrTypeName;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+\r
+// Get Compilation Unit / global variables numbers\r
 // Return variables number\r
 // Return variables number\r
-size_t DWARFManager_GetNbExternalVariables(void)\r
+size_t DWARFManager_GetNbGlobalVariables(void)\r
 {\r
        size_t NbVariables = 0, i;\r
 \r
 {\r
        size_t NbVariables = 0, i;\r
 \r
@@ -889,10 +1237,10 @@ size_t DWARFManager_GetNbExternalVariables(void)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable type name based on his index (starting by 1)\r
+// Get global variable type name based on his index (starting by 1)\r
 // Return NULL if not found\r
 // May return NULL if there is not type linked to the variable's index\r
 // Return NULL if not found\r
 // May return NULL if there is not type linked to the variable's index\r
-char *DWARFManager_GetExternalVariableTypeName(size_t Index)\r
+char *DWARFManager_GetGlobalVariableTypeName(size_t Index)\r
 {\r
        size_t i;\r
 \r
 {\r
        size_t i;\r
 \r
@@ -915,9 +1263,9 @@ char *DWARFManager_GetExternalVariableTypeName(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable's type tag based on his index (starting by 1)\r
+// Get global variable's type tag based on his index (starting by 1)\r
 // Return 0 if not found\r
 // Return 0 if not found\r
-size_t DWARFManager_GetExternalVariableTypeTag(size_t Index)\r
+size_t DWARFManager_GetGlobalVariableTypeTag(size_t Index)\r
 {\r
        size_t i;\r
 \r
 {\r
        size_t i;\r
 \r
@@ -940,9 +1288,9 @@ size_t DWARFManager_GetExternalVariableTypeTag(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable byte size based on his index (starting by 1)\r
+// Get global variable byte size based on his index (starting by 1)\r
 // Return 0 if not found\r
 // Return 0 if not found\r
-size_t DWARFManager_GetExternalVariableTypeByteSize(size_t Index)\r
+size_t DWARFManager_GetGlobalVariableTypeByteSize(size_t Index)\r
 {\r
        size_t i;\r
 \r
 {\r
        size_t i;\r
 \r
@@ -965,9 +1313,9 @@ size_t DWARFManager_GetExternalVariableTypeByteSize(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable encoding based on his index (starting by 1)\r
+// Get global variable encoding based on his index (starting by 1)\r
 // Return 0 if not found\r
 // Return 0 if not found\r
-size_t DWARFManager_GetExternalVariableTypeEncoding(size_t Index)\r
+size_t DWARFManager_GetGlobalVariableTypeEncoding(size_t Index)\r
 {\r
        size_t i;\r
 \r
 {\r
        size_t i;\r
 \r
@@ -990,9 +1338,9 @@ size_t DWARFManager_GetExternalVariableTypeEncoding(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable address based on his index (starting by 1)\r
+// Get global variable address based on his index (starting by 1)\r
 // Return 0 if not found\r
 // Return 0 if not found\r
-size_t DWARFManager_GetExternalVariableAdr(size_t Index)\r
+size_t DWARFManager_GetGlobalVariableAdr(size_t Index)\r
 {\r
        size_t i;\r
 \r
 {\r
        size_t i;\r
 \r
@@ -1015,10 +1363,10 @@ size_t DWARFManager_GetExternalVariableAdr(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable memory address based on his name\r
+// Get global variable memory address based on his name\r
 // Return 0 if not found\r
 // Note: Return the first occurence found\r
 // Return 0 if not found\r
 // Note: Return the first occurence found\r
-size_t DWARFManager_GetExternalVariableAdrFromName(char *VariableName)\r
+size_t DWARFManager_GetGlobalVariableAdrFromName(char *VariableName)\r
 {\r
        size_t i, j;\r
 \r
 {\r
        size_t i, j;\r
 \r
@@ -1040,10 +1388,10 @@ size_t DWARFManager_GetExternalVariableAdrFromName(char *VariableName)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get external variable name based on his index (starting by 1)\r
+// Get global variable name based on his index (starting by 1)\r
 // Return name's pointer text found\r
 // Return NULL if not found\r
 // Return name's pointer text found\r
 // Return NULL if not found\r
-char *DWARFManager_GetExternalVariableName(size_t Index)\r
+char *DWARFManager_GetGlobalVariableName(size_t Index)\r
 {\r
        size_t i;\r
 \r
 {\r
        size_t i;\r
 \r
@@ -1146,6 +1494,30 @@ size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag)
 }\r
 \r
 \r
 }\r
 \r
 \r
+// Get function name based on address and his range\r
+// Return NULL if no function name has been found\r
+char *DWARFManager_GetFunctionName(size_t Adr)\r
+{\r
+       size_t i, j;\r
+\r
+       for (i = 0; i < NbCU; i++)\r
+       {\r
+               if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+               {\r
+                       for (j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+                       {\r
+                               if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+                               {\r
+                                       return PtrCU[i].PtrSubProgs[j].PtrSubprogramName;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+\r
 // Get text line from source based on address and num line (starting by 1)\r
 // Return NULL if no text line has been found\r
 char *DWARFManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine)\r
 // Get text line from source based on address and num line (starting by 1)\r
 // Return NULL if no text line has been found\r
 char *DWARFManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine)\r
index 2ef7131..f7f9744 100644 (file)
@@ -1,32 +1,43 @@
-
-
-#ifndef __DWARFMANAGER_H__
-#define __DWARFMANAGER_H__
-
-
-// 
-extern bool    DWARFManager_Reset(void);
-extern bool    DWARFManager_Close(void);
-extern void    DWARFManager_Init(void);
-extern int DWARFManager_ElfInit(Elf *ElfPtr);
-
-// 
-extern char    *DWARFManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error);
-extern size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag);
-extern char    *DWARFManager_GetSymbolnameFromAdr(size_t Adr);
-extern char *DWARFManager_GetLineSrcFromAdr(size_t Adr, size_t Tag);
-extern char *DWARFManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine);
-extern char *DWARFManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine);
-
-// External variables manager
-extern size_t DWARFManager_GetNbExternalVariables(void);
-extern char *DWARFManager_GetExternalVariableName(size_t Index);
-extern size_t DWARFManager_GetExternalVariableTypeEncoding(size_t Index);
-extern char *DWARFManager_GetExternalVariableTypeName(size_t Index);
-extern size_t DWARFManager_GetExternalVariableTypeByteSize(size_t Index);
-extern size_t DWARFManager_GetExternalVariableAdr(size_t Index);
-extern size_t DWARFManager_GetExternalVariableAdrFromName(char *VariableName);
-extern size_t DWARFManager_GetExternalVariableTypeTag(size_t Index);
-
-
-#endif // __DWARFMANAGER_H__
+\r
+\r
+#ifndef __DWARFMANAGER_H__\r
+#define __DWARFMANAGER_H__\r
+\r
+\r
+// \r
+extern bool    DWARFManager_Reset(void);\r
+extern bool    DWARFManager_Close(void);\r
+extern void    DWARFManager_Init(void);\r
+extern int DWARFManager_ElfInit(Elf *ElfPtr);\r
+\r
+// \r
+extern char    *DWARFManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error);\r
+extern size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag);\r
+extern char    *DWARFManager_GetSymbolnameFromAdr(size_t Adr);\r
+extern char *DWARFManager_GetLineSrcFromAdr(size_t Adr, size_t Tag);\r
+extern char *DWARFManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine);\r
+extern char *DWARFManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine);\r
+extern char *DWARFManager_GetFunctionName(size_t Adr);\r
+\r
+// Global variables manager\r
+extern size_t DWARFManager_GetNbGlobalVariables(void);\r
+extern char *DWARFManager_GetGlobalVariableName(size_t Index);\r
+extern size_t DWARFManager_GetGlobalVariableTypeEncoding(size_t Index);\r
+extern char *DWARFManager_GetGlobalVariableTypeName(size_t Index);\r
+extern size_t DWARFManager_GetGlobalVariableTypeByteSize(size_t Index);\r
+extern size_t DWARFManager_GetGlobalVariableAdr(size_t Index);\r
+extern size_t DWARFManager_GetGlobalVariableAdrFromName(char *VariableName);\r
+extern size_t DWARFManager_GetGlobalVariableTypeTag(size_t Index);\r
+\r
+// Local variables manager\r
+extern size_t DWARFManager_GetNbLocalVariables(size_t Adr);\r
+extern char *DWARFManager_GetLocalVariableName(size_t Adr, size_t Index);\r
+extern size_t DWARFManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index);\r
+extern char *DWARFManager_GetLocalVariableTypeName(size_t Adr, size_t Index);\r
+extern size_t DWARFManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index);\r
+extern size_t DWARFManager_GetLocalVariableTypeTag(size_t Adr, size_t Index);\r
+extern size_t DWARFManager_GetLocalVariableOp(size_t Adr, size_t Index);\r
+extern int DWARFManager_GetLocalVariableOffset(size_t Adr, size_t Index);\r
+\r
+\r
+#endif // __DWARFMANAGER_H__\r
index 86bef50..302b462 100644 (file)
-//
-// allwatch.cpp - All Watch
-//
-// by Jean-Paul Mari
-//
-// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
-//
-// Who  When        What
-// ---  ----------  -----------------------------------------------------------
-// JPM  12/07/2017  Created this file
-//
-
-// STILL TO DO:
-//
-
-#include "debugger/allwatchbrowser.h"
-#include "memory.h"
-#include "debugger/DBGManager.h"
-
-
-AllWatchBrowserWindow::AllWatchBrowserWindow(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)
-{
-       setWindowTitle(tr("All Watch"));
-
-//     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()));
-}
-
-
-//
-AllWatchBrowserWindow::~AllWatchBrowserWindow(void)
-{
-       NbWatch = 0;
-       free(PtrWatchInfo);
-}
-
-
-//
-void AllWatchBrowserWindow::RefreshContents(void)
-{
-       char string[1024];
-//     char buf[64];
-       QString WatchAll;
-
-       if (isVisible())
-       {
-               if (!NbWatch)
-               {
-                       if (NbWatch = DBGManager_GetNbExternalVariables())
-                       {
-                               PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo));
-#ifdef _MSC_VER
-#pragma message("Warning: !!! Need to check the memory desalocation for PtrWatchInfo !!!")
-#else
-                               #warning "!!! Need to do the memory desalocation for PtrWatchInfo !!!"
-#endif // _MSC_VER
-                                       
-                               for (uint32_t i = 0; i < NbWatch; i++)
-                               {
-                                       PtrWatchInfo[i].PtrVariableName = DBGManager_GetExternalVariableName(i + 1);
-                                       PtrWatchInfo[i].addr = DBGManager_GetExternalVariableAdr(i + 1);
-                                       PtrWatchInfo[i].TypeTag = DBGManager_GetExternalVariableTypeTag(i + 1);
-                                       if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetExternalVariableTypeName(i + 1)))
-                                       {
-                                               PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"<font color='#ff0000'>N/A</font>";
-                                       }
-                               }
-                       }
-               }
-
-               for (uint32_t i = 0; i < NbWatch; i++)
-               {
-                       if (PtrWatchInfo[i].PtrVariableName && PtrWatchInfo[i].PtrVariableBaseTypeName)
-                       {
-                               sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, (unsigned int)PtrWatchInfo[i].addr, (PtrWatchInfo[i].TypeTag & 0x8) ? "" : DBGManager_GetExternalVariableValue(i + 1));
-                               WatchAll += QString(string);
-                               sprintf(string, "<br>");
-                               WatchAll += QString(string);
-                       }
-               }
-
-               text->clear();
-               text->setText(WatchAll);
-       }
-}
-
-
-#if 0
-void AllWatchBrowserWindow::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 AllWatchBrowserWindow::GoToAddress(void)
-{
-       bool ok;
-       QString newAddress = address->text();
-       memBase = newAddress.toUInt(&ok, 16);
-       RefreshContents();
-}
-#endif
-
+//\r
+// allwatchbrowser.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  12/07/2017  Created this file\r
+//\r
+\r
+// STILL TO DO:\r
+//\r
+\r
+#include "debugger/allwatchbrowser.h"\r
+#include "memory.h"\r
+#include "debugger/DBGManager.h"\r
+\r
+\r
+AllWatchBrowserWindow::AllWatchBrowserWindow(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
+{\r
+       setWindowTitle(tr("All Watch"));\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
+AllWatchBrowserWindow::~AllWatchBrowserWindow(void)\r
+{\r
+       NbWatch = 0;\r
+       free(PtrWatchInfo);\r
+}\r
+\r
+\r
+//\r
+void AllWatchBrowserWindow::RefreshContents(void)\r
+{\r
+       char string[1024];\r
+//     char buf[64];\r
+       QString WatchAll;\r
+\r
+       if (isVisible())\r
+       {\r
+               if (!NbWatch)\r
+               {\r
+                       if (NbWatch = DBGManager_GetNbGlobalVariables())\r
+                       {\r
+                               PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo));\r
+#ifdef _MSC_VER\r
+#pragma message("Warning: !!! Need to check the memory desalocation for PtrWatchInfo !!!")\r
+#else\r
+                               #warning "!!! Need to do the memory desalocation for PtrWatchInfo !!!"\r
+#endif // _MSC_VER\r
+                                       \r
+                               for (uint32_t i = 0; i < NbWatch; i++)\r
+                               {\r
+                                       PtrWatchInfo[i].PtrVariableName = DBGManager_GetGlobalVariableName(i + 1);\r
+                                       PtrWatchInfo[i].addr = DBGManager_GetGlobalVariableAdr(i + 1);\r
+                                       PtrWatchInfo[i].TypeTag = DBGManager_GetGlobalVariableTypeTag(i + 1);\r
+                                       if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1)))\r
+                                       {\r
+                                               PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"<font color='#ff0000'>N/A</font>";\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               for (uint32_t i = 0; i < NbWatch; i++)\r
+               {\r
+                       if (PtrWatchInfo[i].PtrVariableName && PtrWatchInfo[i].PtrVariableBaseTypeName)\r
+                       {\r
+                               sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, (unsigned int)PtrWatchInfo[i].addr, (PtrWatchInfo[i].TypeTag & 0x8) ? "" : DBGManager_GetGlobalVariableValue(i + 1));\r
+                               WatchAll += QString(string);\r
+                               sprintf(string, "<br>");\r
+                               WatchAll += QString(string);\r
+                       }\r
+               }\r
+\r
+               text->clear();\r
+               text->setText(WatchAll);\r
+       }\r
+}\r
+\r
+\r
+#if 0\r
+void AllWatchBrowserWindow::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 AllWatchBrowserWindow::GoToAddress(void)\r
+{\r
+       bool ok;\r
+       QString newAddress = address->text();\r
+       memBase = newAddress.toUInt(&ok, 16);\r
+       RefreshContents();\r
+}\r
+#endif\r
+\r
index 03b70b8..7c4391c 100644 (file)
@@ -1,54 +1,53 @@
-//
-// allwatch.h: All Watch
-//
-// by James Hammons
-// (C) 2012 Underground Software
-//
-
-#ifndef __ALLWATCHBROWSER_H__
-#define __ALLWATCHBROWSER_H__
-
-#include <QtWidgets>
-#include <stdint.h>
-
-class AllWatchBrowserWindow: public QWidget
-{
-       Q_OBJECT
-
-       //
-       struct WatchInfo
-       {
-               //size_t TypeEncoding;
-               //size_t TypeByteSize;
-               size_t addr;
-               size_t TypeTag;
-               char *PtrVariableName;
-               char *PtrVariableBaseTypeName;
-       }S_WatchInfo;
-
-       public:
-               AllWatchBrowserWindow(QWidget *parent = 0);
-               ~AllWatchBrowserWindow(void);
-
-       public slots:
-//             void DefineAllKeys(void);
-               void RefreshContents(void);
-//             void GoToAddress(void);
-
-       protected:
-//             void keyPressEvent(QKeyEvent *);
-
-       private:
-               QVBoxLayout *layout;
-//             QTextBrowser * text;
-//             QLabel *text;
-               QTextBrowser *text;
-//             QPushButton *refresh;
-//             QLineEdit *address;
-//             QPushButton *go;
-               WatchInfo *PtrWatchInfo;
-//             int32_t memBase;
-               size_t NbWatch;
-};
-
-#endif // __ALLWATCHBROWSER_H__
+//\r
+// allwatchbrowser.h: All Watch\r
+//\r
+// by Jean-Paul Mari\r
+//\r
+\r
+#ifndef __ALLWATCHBROWSER_H__\r
+#define __ALLWATCHBROWSER_H__\r
+\r
+#include <QtWidgets>\r
+#include <stdint.h>\r
+\r
+class AllWatchBrowserWindow: public QWidget\r
+{\r
+       Q_OBJECT\r
+\r
+       //\r
+       struct WatchInfo\r
+       {\r
+               //size_t TypeEncoding;\r
+               //size_t TypeByteSize;\r
+               size_t addr;\r
+               size_t TypeTag;\r
+               char *PtrVariableName;\r
+               char *PtrVariableBaseTypeName;\r
+       }S_WatchInfo;\r
+\r
+       public:\r
+               AllWatchBrowserWindow(QWidget *parent = 0);\r
+               ~AllWatchBrowserWindow(void);\r
+\r
+       public slots:\r
+//             void DefineAllKeys(void);\r
+               void RefreshContents(void);\r
+//             void GoToAddress(void);\r
+\r
+       protected:\r
+//             void keyPressEvent(QKeyEvent *);\r
+\r
+       private:\r
+               QVBoxLayout *layout;\r
+//             QTextBrowser * text;\r
+//             QLabel *text;\r
+               QTextBrowser *text;\r
+//             QPushButton *refresh;\r
+//             QLineEdit *address;\r
+//             QPushButton *go;\r
+               WatchInfo *PtrWatchInfo;\r
+//             int32_t memBase;\r
+               size_t NbWatch;\r
+};\r
+\r
+#endif // __ALLWATCHBROWSER_H__\r
index becd7d8..8ad3cc8 100644 (file)
-//
-// brkWin.cpp - Breakpoints
-//
-// by Jean-Paul Mari
-//
-// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
-//
-// Who  When        What
-// ---  ----------  -----------------------------------------------------------
-// JPM  30/08/2017  Created this file
-//
-
-// STILL TO DO:
-//
-
-#include "debugger/brkWin.h"
-//#include "memory.h"
-#include "debugger/DBGManager.h"
-
-
-//
-BrkWindow::BrkWindow(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)
-{
-       setWindowTitle(tr("Breakpoints window"));
-
-#if 0
-//     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()));
-#endif
-}
-
-
-//
-BrkWindow::~BrkWindow(void)
-{
-#if 0
-       NbWatch = 0;
-       free(PtrWatchInfo);
-#endif
-}
-
-
-//
-void BrkWindow::RefreshContents(void)
-{
-#if 0
-       char string[1024];
-//     char buf[64];
-       QString WatchAll;
-
-       if (isVisible())
-       {
-               if (!NbWatch)
-               {
-                       if (NbWatch = DBGManager_GetNbExternalVariables())
-                       {
-                               PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo));
-#ifdef _MSC_VER
-#pragma message("Warning: !!! Need to check the memory desalocation for PtrWatchInfo !!!")
-#else
-                               #warning "!!! Need to do the memory desalocation for PtrWatchInfo !!!"
-#endif // _MSC_VER
-                                       
-                               for (uint32_t i = 0; i < NbWatch; i++)
-                               {
-                                       PtrWatchInfo[i].PtrVariableName = DBGManager_GetExternalVariableName(i + 1);
-                                       PtrWatchInfo[i].addr = DBGManager_GetExternalVariableAdr(i + 1);
-                                       PtrWatchInfo[i].TypeTag = DBGManager_GetExternalVariableTypeTag(i + 1);
-                                       if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetExternalVariableTypeName(i + 1)))
-                                       {
-                                               PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"<font color='#ff0000'>N/A</font>";
-                                       }
-                               }
-                       }
-               }
-
-               for (uint32_t i = 0; i < NbWatch; i++)
-               {
-                       if (PtrWatchInfo[i].PtrVariableName && PtrWatchInfo[i].PtrVariableBaseTypeName)
-                       {
-                               sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, PtrWatchInfo[i].addr, (PtrWatchInfo[i].TypeTag & 0x8) ? "" : DBGManager_GetExternalVariableValue(i + 1));
-                               WatchAll += QString(string);
-                               sprintf(string, "<br>");
-                               WatchAll += QString(string);
-                       }
-               }
-
-               text->clear();
-               text->setText(WatchAll);
-       }
-#endif
-}
-
-
-//
-void BrkWindow::keyPressEvent(QKeyEvent * e)
-{
-       if (e->key() == Qt::Key_Escape)
-       {
-               hide();
-       }
-       else
-       {
-               if (e->key() == Qt::Key_PageUp)
-               {
-#if 0
-                       memBase -= 480;
-
-                       if (memBase < 0)
-                               memBase = 0;
-
-                       RefreshContents();
-#endif
-               }
-               else
-               {
-                       if (e->key() == Qt::Key_PageDown)
-                       {
-#if 0
-                               memBase += 480;
-
-                               if (memBase > (0x200000 - 480))
-                                       memBase = 0x200000 - 480;
-
-                               RefreshContents();
-#endif
-                       }
-                       else
-                       {
-                               if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)
-                               {
-#if 0
-                                       memBase -= 16;
-
-                                       if (memBase < 0)
-                                               memBase = 0;
-
-                                       RefreshContents();
-#endif
-                               }
-                               else
-                               {
-                                       if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)
-                                       {
-#if 0
-                                               memBase += 16;
-
-                                               if (memBase > (0x200000 - 480))
-                                                       memBase = 0x200000 - 480;
-
-                                               RefreshContents();
-#endif
-                                       }
-                                       else
-                                       {
-                                               if (e->key() == Qt::Key_Return)
-                                               {
-                                                       GoToAddress();
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-}
-
-
-//
-void BrkWindow::RefreshBrkList(size_t Address)
-{
-}
-
-
-// Go to the requested address
-// Address can be an hexa, decimal or a symbol name
-void BrkWindow::GoToAddress(void)
-{
-       size_t Address;
-       bool ok;
-       QString newAddress;
-
-       newAddress = address->text();
-
-       if ((newAddress.at(0) == QChar('0')) && (newAddress.at(1) == QChar('x')))
-       {
-               Address = newAddress.toUInt(&ok, 16);
-       }
-       else
-       {
-               if (!(Address = DBGManager_GetAdrFromSymbolName(newAddress.toLatin1().data())))
-               {
-                       Address = newAddress.toUInt(&ok, 10);
-               }
-       }
-
-       RefreshBrkList(Address);
-}
-
+//\r
+// brkWin.cpp - Breakpoints\r
+//\r
+// by Jean-Paul Mari\r
+//\r
+// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//\r
+// Who  When        What\r
+// ---  ----------  -----------------------------------------------------------\r
+// JPM  30/08/2017  Created this file\r
+//\r
+\r
+// STILL TO DO:\r
+//\r
+\r
+#include "debugger/brkWin.h"\r
+//#include "memory.h"\r
+#include "debugger/DBGManager.h"\r
+\r
+\r
+//\r
+BrkWindow::BrkWindow(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
+{\r
+       setWindowTitle(tr("Breakpoints window"));\r
+\r
+#if 0\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
+#endif\r
+}\r
+\r
+\r
+//\r
+BrkWindow::~BrkWindow(void)\r
+{\r
+#if 0\r
+       NbWatch = 0;\r
+       free(PtrWatchInfo);\r
+#endif\r
+}\r
+\r
+\r
+//\r
+void BrkWindow::RefreshContents(void)\r
+{\r
+#if 0\r
+       char string[1024];\r
+//     char buf[64];\r
+       QString WatchAll;\r
+\r
+       if (isVisible())\r
+       {\r
+               if (!NbWatch)\r
+               {\r
+                       if (NbWatch = DBGManager_GetNbGlobalVariables())\r
+                       {\r
+                               PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo));\r
+#ifdef _MSC_VER\r
+#pragma message("Warning: !!! Need to check the memory desalocation for PtrWatchInfo !!!")\r
+#else\r
+                               #warning "!!! Need to do the memory desalocation for PtrWatchInfo !!!"\r
+#endif // _MSC_VER\r
+                                       \r
+                               for (uint32_t i = 0; i < NbWatch; i++)\r
+                               {\r
+                                       PtrWatchInfo[i].PtrVariableName = DBGManager_GetGlobalVariableName(i + 1);\r
+                                       PtrWatchInfo[i].addr = DBGManager_GetExternalVariableAdr(i + 1);\r
+                                       PtrWatchInfo[i].TypeTag = DBGManager_GetExternalVariableTypeTag(i + 1);\r
+                                       if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1)))\r
+                                       {\r
+                                               PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"<font color='#ff0000'>N/A</font>";\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               for (uint32_t i = 0; i < NbWatch; i++)\r
+               {\r
+                       if (PtrWatchInfo[i].PtrVariableName && PtrWatchInfo[i].PtrVariableBaseTypeName)\r
+                       {\r
+                               sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, PtrWatchInfo[i].addr, (PtrWatchInfo[i].TypeTag & 0x8) ? "" : DBGManager_GetExternalVariableValue(i + 1));\r
+                               WatchAll += QString(string);\r
+                               sprintf(string, "<br>");\r
+                               WatchAll += QString(string);\r
+                       }\r
+               }\r
+\r
+               text->clear();\r
+               text->setText(WatchAll);\r
+       }\r
+#endif\r
+}\r
+\r
+\r
+//\r
+void BrkWindow::keyPressEvent(QKeyEvent * e)\r
+{\r
+       if (e->key() == Qt::Key_Escape)\r
+       {\r
+               hide();\r
+       }\r
+       else\r
+       {\r
+               if (e->key() == Qt::Key_PageUp)\r
+               {\r
+#if 0\r
+                       memBase -= 480;\r
+\r
+                       if (memBase < 0)\r
+                               memBase = 0;\r
+\r
+                       RefreshContents();\r
+#endif\r
+               }\r
+               else\r
+               {\r
+                       if (e->key() == Qt::Key_PageDown)\r
+                       {\r
+#if 0\r
+                               memBase += 480;\r
+\r
+                               if (memBase > (0x200000 - 480))\r
+                                       memBase = 0x200000 - 480;\r
+\r
+                               RefreshContents();\r
+#endif\r
+                       }\r
+                       else\r
+                       {\r
+                               if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)\r
+                               {\r
+#if 0\r
+                                       memBase -= 16;\r
+\r
+                                       if (memBase < 0)\r
+                                               memBase = 0;\r
+\r
+                                       RefreshContents();\r
+#endif\r
+                               }\r
+                               else\r
+                               {\r
+                                       if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)\r
+                                       {\r
+#if 0\r
+                                               memBase += 16;\r
+\r
+                                               if (memBase > (0x200000 - 480))\r
+                                                       memBase = 0x200000 - 480;\r
+\r
+                                               RefreshContents();\r
+#endif\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if (e->key() == Qt::Key_Return)\r
+                                               {\r
+                                                       GoToAddress();\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+\r
+//\r
+void BrkWindow::RefreshBrkList(size_t Address)\r
+{\r
+}\r
+\r
+\r
+// Go to the requested address\r
+// Address can be an hexa, decimal or a symbol name\r
+void BrkWindow::GoToAddress(void)\r
+{\r
+       size_t Address;\r
+       bool ok;\r
+       QString newAddress;\r
+\r
+       newAddress = address->text();\r
+\r
+       if ((newAddress.at(0) == QChar('0')) && (newAddress.at(1) == QChar('x')))\r
+       {\r
+               Address = newAddress.toUInt(&ok, 16);\r
+       }\r
+       else\r
+       {\r
+               if (!(Address = DBGManager_GetAdrFromSymbolName(newAddress.toLatin1().data())))\r
+               {\r
+                       Address = newAddress.toUInt(&ok, 10);\r
+               }\r
+       }\r
+\r
+       RefreshBrkList(Address);\r
+}\r
+\r
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
diff --git a/src/debugger/localbrowser.cpp b/src/debugger/localbrowser.cpp
new file mode 100644 (file)
index 0000000..3b8d816
--- /dev/null
@@ -0,0 +1,248 @@
+//\r
+// localbrowser.cpp - Local variables\r
+//\r
+// by Jean-Paul Mari\r
+//\r
+// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//\r
+// Who  When        What\r
+// ---  ----------  -----------------------------------------------------------\r
+// JPM  11/03/2017  Created this file\r
+//\r
+\r
+\r
+#include "debugger/localbrowser.h"\r
+#include "memory.h"\r
+#include "debugger/DBGManager.h"\r
+#include "settings.h"\r
+#include "m68000/m68kinterface.h"\r
+\r
+\r
+// \r
+LocalBrowserWindow::LocalBrowserWindow(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
+       NbLocal(0),\r
+       FuncName((char *)calloc(1, 1)),\r
+       LocalInfo(NULL)\r
+{\r
+       setWindowTitle(tr("Local"));\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
+LocalBrowserWindow::~LocalBrowserWindow(void)\r
+{\r
+       free(LocalInfo);\r
+       free(FuncName);\r
+//     NbLocal = 0;\r
+}\r
+\r
+\r
+//\r
+bool LocalBrowserWindow::UpdateInfos(void)\r
+{\r
+       size_t Adr;\r
+       char *Ptr;\r
+\r
+       if (NbLocal = DBGManager_GetNbLocalVariables(Adr = m68k_get_reg(NULL, M68K_REG_PC)))\r
+       {\r
+               if (Ptr = DBGManager_GetFunctionName(Adr))\r
+               {\r
+                       if (strcmp(FuncName, Ptr))\r
+                       {\r
+                               FuncName = (char *)realloc(FuncName, strlen(Ptr) + 1);\r
+                               strcpy(FuncName, Ptr);\r
+\r
+                               LocalInfo = (WatchInfo *)realloc(LocalInfo, (sizeof(WatchInfo) * NbLocal));\r
+                               for (size_t i = 0; i < NbLocal; i++)\r
+                               {\r
+                                       if (LocalInfo[i].PtrVariableName = DBGManager_GetLocalVariableName(Adr, i + 1))\r
+                                       {\r
+                                               LocalInfo[i].Op = DBGManager_GetLocalVariableOp(Adr, i + 1);\r
+                                               LocalInfo[i].Adr = NULL;\r
+                                               LocalInfo[i].TypeTag = DBGManager_GetLocalVariableTypeTag(Adr, i + 1);\r
+                                               LocalInfo[i].PtrVariableBaseTypeName = DBGManager_GetLocalVariableTypeName(Adr, i + 1);\r
+                                               LocalInfo[i].TypeEncoding = DBGManager_GetLocalVariableTypeEncoding(Adr, i + 1);\r
+                                               LocalInfo[i].TypeByteSize = DBGManager_GetLocalVariableTypeByteSize(Adr, i + 1);\r
+                                               LocalInfo[i].Offset = DBGManager_GetLocalVariableOffset(Adr, i + 1);\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return true;\r
+               }\r
+       }\r
+\r
+       *FuncName = 0;\r
+\r
+       return false;\r
+}\r
+\r
+\r
+//\r
+void LocalBrowserWindow::RefreshContents(void)\r
+{\r
+       char string[1024];\r
+//     char buf[64];\r
+       QString Local;\r
+       char Value[100];\r
+       char *PtrValue;\r
+//     size_t NbWatch, Adr;\r
+//     WatchInfo PtrLocalInfo;\r
+\r
+       if (isVisible())\r
+       {\r
+               if (UpdateInfos())\r
+               {\r
+//#ifdef _MSC_VER\r
+                       //#pragma message("Warning: !!! Need to check the memory desalocation for LocalInfo !!!")\r
+//#else\r
+                       //#warning "!!! Need to do the memory desalocation for LocalInfo !!!"\r
+//#endif // _MSC_VER\r
+//#ifdef _MSC_VER\r
+                       //#pragma message("Warning: !!! Need to check the memory desalocation for FuncName !!!")\r
+//#else\r
+                       //#warning "!!! Need to do the memory desalocation for FuncName !!!"\r
+//#endif // _MSC_VER\r
+\r
+                       for (size_t i = 0; i < NbLocal; i++)\r
+                       {\r
+                               if (LocalInfo[i].PtrVariableName)\r
+                               {\r
+                                       if (((LocalInfo[i].Op >= DBG_OP_breg0) && (LocalInfo[i].Op <= DBG_OP_breg31)))\r
+                                       {\r
+                                               LocalInfo[i].Adr = m68k_get_reg(NULL, M68K_REG_A6) + LocalInfo[i].Offset;\r
+\r
+                                               if ((LocalInfo[i].Adr >= 0) && (LocalInfo[i].Adr < vjs.DRAM_size))\r
+                                               {\r
+                                                       PtrValue = DBGManager_GetVariableValueFromAdr(LocalInfo[i].Adr, LocalInfo[i].TypeEncoding, LocalInfo[i].TypeByteSize);\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       PtrValue = NULL;\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if ((LocalInfo[i].Op >= DBG_OP_reg0) && (LocalInfo[i].Op <= DBG_OP_reg31))\r
+                                               {\r
+                                                       PtrValue = itoa(m68k_get_reg(NULL, (m68k_register_t)((size_t)M68K_REG_D0 + (LocalInfo[i].Op - DBG_OP_reg0))), Value, 10);\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       PtrValue = NULL;\r
+                                               }\r
+                                       }\r
+\r
+                                       sprintf(string, "%i : %s | %s | ", (i + 1), (LocalInfo[i].PtrVariableBaseTypeName ? LocalInfo[i].PtrVariableBaseTypeName : (char *)"<font color='#ff0000'>N/A</font>"), LocalInfo[i].PtrVariableName);\r
+                                       Local += QString(string);\r
+                                       if ((unsigned int)LocalInfo[i].Adr)\r
+                                       {\r
+                                               sprintf(string, "0x%06X", (unsigned int)LocalInfo[i].Adr);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               sprintf(string, "%s", (char *)"<font color='#ff0000'>N/A</font>");\r
+                                       }\r
+                                       Local += QString(string);\r
+                                       sprintf(string, " | %s", (!PtrValue ? (char *)"<font color='#ff0000'>N/A</font>" : PtrValue));\r
+                                       Local += QString(string);\r
+                                       sprintf(string, "<br>");\r
+                                       Local += QString(string);\r
+                               }\r
+                       }\r
+\r
+                       text->clear();\r
+                       text->setText(Local);\r
+               }\r
+               else\r
+               {\r
+                       text->clear();\r
+               }\r
+       }\r
+}\r
+\r
+\r
+#if 0\r
+void LocalBrowserWindow::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 LocalBrowserWindow::GoToAddress(void)\r
+{\r
+       bool ok;\r
+       QString newAddress = address->text();\r
+       memBase = newAddress.toUInt(&ok, 16);\r
+       RefreshContents();\r
+}\r
+#endif\r
+\r
diff --git a/src/debugger/localbrowser.h b/src/debugger/localbrowser.h
new file mode 100644 (file)
index 0000000..dc732fd
--- /dev/null
@@ -0,0 +1,59 @@
+//\r
+// localbrowser.h: All Watch\r
+//\r
+// by Jean-Paul Mari\r
+//\r
+\r
+#ifndef __LOCALBROWSER_H__\r
+#define __LOCALBROWSER_H__\r
+\r
+#include <QtWidgets>\r
+#include <stdint.h>\r
+\r
+class LocalBrowserWindow: public QWidget\r
+{\r
+       Q_OBJECT\r
+\r
+       //\r
+       struct WatchInfo\r
+       {\r
+               //size_t TypeEncoding;\r
+               //size_t TypeByteSize;\r
+               size_t Op;\r
+               size_t Adr;\r
+               int Offset;\r
+               size_t TypeTag;\r
+               size_t TypeEncoding;\r
+               size_t TypeByteSize;\r
+               char *PtrVariableName;\r
+               char *PtrVariableBaseTypeName;\r
+       }S_WatchInfo;\r
+\r
+       public:\r
+               LocalBrowserWindow(QWidget *parent = 0);\r
+               ~LocalBrowserWindow(void);\r
+\r
+       public slots:\r
+//             void DefineAllKeys(void);\r
+               void RefreshContents(void);\r
+               bool UpdateInfos(void);\r
+//             void GoToAddress(void);\r
+\r
+       protected:\r
+//             void keyPressEvent(QKeyEvent *);\r
+\r
+       private:\r
+               QVBoxLayout *layout;\r
+//             QTextBrowser * text;\r
+//             QLabel *text;\r
+               QTextBrowser *text;\r
+//             QPushButton *refresh;\r
+//             QLineEdit *address;\r
+//             QPushButton *go;\r
+               WatchInfo *LocalInfo;\r
+//             int32_t memBase;\r
+               size_t NbLocal;\r
+               char *FuncName;\r
+};\r
+\r
+#endif // __LOCALBROWSER_H__\r
index de50c5f..4aef951 100644 (file)
@@ -172,7 +172,7 @@ void m68KDasmWindow::RefreshContents(void)
                else\r
                {\r
                        // Display symbol, or line source, based on the program address\r
                else\r
                {\r
                        // Display symbol, or line source, based on the program address\r
-                       if (!CurrentLineSrc && !Symbol && (Symbol = DBGManager_GetSymbolnameFromAdr(oldpc)))\r
+                       if (!CurrentLineSrc && !Symbol && (Symbol = DBGManager_GetSymbolNameFromAdr(oldpc)))\r
                        {\r
                                sprintf(string, "%s:<br>", Symbol);\r
                                s += QString(string);\r
                        {\r
                                sprintf(string, "%s:<br>", Symbol);\r
                                s += QString(string);\r
@@ -235,7 +235,7 @@ void m68KDasmWindow::RefreshContents(void)
                                                        } while ((string[(j + 1)] >= '0') && (string[(j + 1)] <= '9') || (string[(j + 1)] >= 'A') && (string[(j + 1)] <= 'F'));\r
                                                        adresse[l] = 0;\r
 \r
                                                        } while ((string[(j + 1)] >= '0') && (string[(j + 1)] <= '9') || (string[(j + 1)] >= 'A') && (string[(j + 1)] <= 'F'));\r
                                                        adresse[l] = 0;\r
 \r
-                                                       if (Symbol = DBGManager_GetSymbolnameFromAdr(strtoul(adresse, &p, 16)))\r
+                                                       if (Symbol = DBGManager_GetSymbolNameFromAdr(strtoul(adresse, &p, 16)))\r
                                                        {\r
                                                                strcat(buffer, Symbol);\r
                                                        }\r
                                                        {\r
                                                                strcat(buffer, Symbol);\r
                                                        }\r
index 12b7e54..59c9cf6 100644 (file)
@@ -1,60 +1,60 @@
-//
-// keybindingstab.cpp: Key Bindings tab on the settings dialog
-//
-// Part of the Virtual Jaguar Project
-//
-// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
-//
-// WHO  WHEN        WHAT
-// ---  ----------  ------------------------------------------------------------
-// JPM  09/10/2017  Created this file
-
-#include "keybindingstab.h"
-#include "settings.h"
-
-
-//
-KeyBindings KeyBindingsTable[KB_END] = {
-                                                                                       { KB_TYPEGENERAL, "KB_Quit", "Quit", "Quit keybinding", "Ctrl+Q", NULL, NULL    },
-                                                                                       { KB_TYPEGENERAL, "KB_PickFile", "Pick file", "Pick file keybinding", "Ctrl+I", NULL, NULL      },
-                                                                                       { KB_TYPEGENERAL, "KB_Configure", "Configure", "Configure keybinding", "Ctrl+C", NULL, NULL     },
-                                                                                       { KB_TYPEGENERAL, "KB_EmuStatus", "Emulator Status", "Emulator status keybinding", "Ctrl+S", NULL, NULL },
-                                                                                       { KB_TYPEGENERAL, "KB_Pause", "Pause", "Pause keybinding", "Esc", NULL, NULL    },
-                                                                                       { KB_TYPEGENERAL, "KB_FrameAdvance", "Frame Advance", "Frame advance keybinding", "F7", NULL, NULL },
-                                                                                       { KB_TYPEDEBUGGER, "KB_Restart", "Restart", "Restart keybinding", "Ctrl+Shift+F5", NULL, NULL   },
-                                                                                       { KB_TYPEDEBUGGER, "KB_StepInto", "Step Into", "Step into keybinding", "F11", NULL, NULL        },
-                                                                                       { KB_TYPEDEBUGGER, "KB_StepOver", "Step Over", "Step over kebinding", "F10", NULL, NULL },
-                                                                                       { KB_TYPEGENERAL, "KB_FullScreen", "Full Screen", "Full screen kebinding", "F9", NULL, NULL     }
-                                                                               };
-
-
-//
-#define        NBKEYBINDINGS   sizeof(KeyBindingsTable)/sizeof(KeyBindings)
-
-
-// 
-KeyBindingsTab::KeyBindingsTab(QWidget * parent/*= 0*/): QWidget(parent)
-{
-       size_t i;
-
-       QVBoxLayout *layout1 = new QVBoxLayout;
-       QVBoxLayout *layout2 = new QVBoxLayout;
-
-       // Initialisation for each layout line
-       for (i = 0; i < NBKEYBINDINGS; i++)
-       {
-               // Prepare the keybinding line
-               layout1->addWidget(KeyBindingsTable[i].KBLabel = new QLabel(KeyBindingsTable[i].KBNameLabel));
-               layout2->addWidget(KeyBindingsTable[i].KBLineEdit = new QLineEdit(""));
-               KeyBindingsTable[i].KBLineEdit->setMaxLength(30);
-               KeyBindingsTable[i].KBLineEdit->setPlaceholderText(KeyBindingsTable[i].KBPlaceholderText);
-
-               // Check if keybinding can be editable
-               if (KeyBindingsTable[i].KBType != KB_TYPEGENERAL)
-               {
-                       if (vjs.hardwareTypeAlpine && (KeyBindingsTable[i].KBType & KB_TYPEALPINE))
-                       {
-                       }
+//\r
+// keybindingstab.cpp: Key Bindings tab on the settings dialog\r
+//\r
+// Part of the Virtual Jaguar Project\r
+//\r
+// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//\r
+// WHO  WHEN        WHAT\r
+// ---  ----------  ------------------------------------------------------------\r
+// JPM  09/10/2017  Created this file\r
+\r
+#include "keybindingstab.h"\r
+#include "settings.h"\r
+\r
+\r
+//\r
+KeyBindings KeyBindingsTable[KB_END] = {\r
+                                                                                       { KB_TYPEGENERAL, "KB_Quit", "Quit", "Quit keybinding", "Ctrl+Q", NULL, NULL    },\r
+                                                                                       { KB_TYPEGENERAL, "KB_PickFile", "Pick file", "Pick file keybinding", "Ctrl+I", NULL, NULL      },\r
+                                                                                       { KB_TYPEGENERAL, "KB_Configure", "Configure", "Configure keybinding", "Ctrl+C", NULL, NULL     },\r
+                                                                                       { KB_TYPEGENERAL, "KB_EmuStatus", "Emulator Status", "Emulator status keybinding", "Ctrl+S", NULL, NULL },\r
+                                                                                       { KB_TYPEGENERAL, "KB_Pause", "Pause", "Pause keybinding", "Esc", NULL, NULL    },\r
+                                                                                       { KB_TYPEGENERAL, "KB_FrameAdvance", "Frame Advance", "Frame advance keybinding", "F7", NULL, NULL },\r
+                                                                                       { KB_TYPEDEBUGGER, "KB_Restart", "Restart", "Restart keybinding", "Ctrl+Shift+F5", NULL, NULL   },\r
+                                                                                       { KB_TYPEDEBUGGER, "KB_StepInto", "Step Into", "Step into keybinding", "F11", NULL, NULL        },\r
+                                                                                       { KB_TYPEDEBUGGER, "KB_StepOver", "Step Over", "Step over kebinding", "F10", NULL, NULL },\r
+                                                                                       { KB_TYPEGENERAL, "KB_FullScreen", "Full Screen", "Full screen kebinding", "F9", NULL, NULL     }\r
+                                                                               };\r
+\r
+\r
+//\r
+#define        NBKEYBINDINGS   sizeof(KeyBindingsTable)/sizeof(KeyBindings)\r
+\r
+\r
+// \r
+KeyBindingsTab::KeyBindingsTab(QWidget * parent/*= 0*/): QWidget(parent)\r
+{\r
+       size_t i;\r
+\r
+       QVBoxLayout *layout1 = new QVBoxLayout;\r
+       QVBoxLayout *layout2 = new QVBoxLayout;\r
+\r
+       // Initialisation for each layout line\r
+       for (i = 0; i < NBKEYBINDINGS; i++)\r
+       {\r
+               // Prepare the keybinding line\r
+               layout1->addWidget(KeyBindingsTable[i].KBLabel = new QLabel(KeyBindingsTable[i].KBNameLabel));\r
+               layout2->addWidget(KeyBindingsTable[i].KBLineEdit = new QLineEdit(""));\r
+               KeyBindingsTable[i].KBLineEdit->setMaxLength(30);\r
+               KeyBindingsTable[i].KBLineEdit->setPlaceholderText(KeyBindingsTable[i].KBPlaceholderText);\r
+\r
+               // Check if keybinding can be editable\r
+               if (KeyBindingsTable[i].KBType != KB_TYPEGENERAL)\r
+               {\r
+                       if (vjs.hardwareTypeAlpine && (KeyBindingsTable[i].KBType & KB_TYPEALPINE))\r
+                       {\r
+                       }\r
                        else\r
                        {\r
                                if (vjs.softTypeDebugger && (KeyBindingsTable[i].KBType & KB_TYPEDEBUGGER))\r
                        else\r
                        {\r
                                if (vjs.softTypeDebugger && (KeyBindingsTable[i].KBType & KB_TYPEDEBUGGER))\r
@@ -62,49 +62,49 @@ KeyBindingsTab::KeyBindingsTab(QWidget * parent/*= 0*/): QWidget(parent)
                                }\r
                                else\r
                                {\r
                                }\r
                                else\r
                                {\r
-                                       KeyBindingsTable[i].KBLabel->hide();
+                                       KeyBindingsTable[i].KBLabel->hide();\r
                                        KeyBindingsTable[i].KBLineEdit->hide();\r
                                }\r
                                        KeyBindingsTable[i].KBLineEdit->hide();\r
                                }\r
-                       }
-               }
-       }
-
-       // Layouts setup
-       QHBoxLayout *layout3 = new QHBoxLayout;
-       layout3->addLayout(layout1);
-       layout3->addLayout(layout2);
-       QVBoxLayout *layout4 = new QVBoxLayout;
-       layout4->addLayout(layout3);
-       setLayout(layout4);
-}
-
-
-KeyBindingsTab::~KeyBindingsTab()
-{
-}
-
-
-// Load / Update the tabs dialog from the settings
-void KeyBindingsTab::GetSettings(void)
-{
-       size_t i;
-
-       for (i = 0; i < NBKEYBINDINGS; i++)
-       {
-               KeyBindingsTable[i].KBLineEdit->setText(vjs.KBContent[i].KBSettingValue);
-       }
-}
-
-
-// Save / Update the settings from the tabs dialog
-void KeyBindingsTab::SetSettings(void)
-{
-       size_t i;
-
-       for (i = 0; i < NBKEYBINDINGS; i++)
-       {
-               //strcpy(vjs.KBContent[i].KBSettingName, KeyBindingsTable[i].KBNameSetting);
-               strcpy(vjs.KBContent[i].KBSettingValue, KeyBindingsTable[i].KBLineEdit->text().toUtf8().data());
-       }
-}
-
+                       }\r
+               }\r
+       }\r
+\r
+       // Layouts setup\r
+       QHBoxLayout *layout3 = new QHBoxLayout;\r
+       layout3->addLayout(layout1);\r
+       layout3->addLayout(layout2);\r
+       QVBoxLayout *layout4 = new QVBoxLayout;\r
+       layout4->addLayout(layout3);\r
+       setLayout(layout4);\r
+}\r
+\r
+\r
+KeyBindingsTab::~KeyBindingsTab()\r
+{\r
+}\r
+\r
+\r
+// Load / Update the tabs dialog from the settings\r
+void KeyBindingsTab::GetSettings(void)\r
+{\r
+       size_t i;\r
+\r
+       for (i = 0; i < NBKEYBINDINGS; i++)\r
+       {\r
+               KeyBindingsTable[i].KBLineEdit->setText(vjs.KBContent[i].KBSettingValue);\r
+       }\r
+}\r
+\r
+\r
+// Save / Update the settings from the tabs dialog\r
+void KeyBindingsTab::SetSettings(void)\r
+{\r
+       size_t i;\r
+\r
+       for (i = 0; i < NBKEYBINDINGS; i++)\r
+       {\r
+               //strcpy(vjs.KBContent[i].KBSettingName, KeyBindingsTable[i].KBNameSetting);\r
+               strcpy(vjs.KBContent[i].KBSettingValue, KeyBindingsTable[i].KBLineEdit->text().toUtf8().data());\r
+       }\r
+}\r
+\r
index 5d228db..1af385a 100644 (file)
@@ -26,6 +26,7 @@
 // JPM  09/05/2017  Added Exception Vector Table window
 // JPM  09/06/2017  Added the 'Rx' word to the emulator window name
 // JPM  09/12/2017  Added the keybindings in the settings
 // JPM  09/05/2017  Added Exception Vector Table window
 // JPM  09/06/2017  Added the 'Rx' word to the emulator window name
 // JPM  09/12/2017  Added the keybindings in the settings
+// JPM  11/04/2017  Added the local browser window
 //
 
 // FIXED:
 //
 
 // FIXED:
@@ -75,6 +76,7 @@
 #include "debug/riscdasmbrowser.h"
 
 #include "debugger/allwatchbrowser.h"
 #include "debug/riscdasmbrowser.h"
 
 #include "debugger/allwatchbrowser.h"
+#include "debugger/localbrowser.h"
 #include "debugger/heapallocatorbrowser.h"
 
 #include "dac.h"
 #include "debugger/heapallocatorbrowser.h"
 
 #include "dac.h"
@@ -187,6 +189,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
                //DasmWin = new DasmWindow();
                DasmWin = new DasmWindow(this);
                allWatchBrowseWin = new AllWatchBrowserWindow(this);
                //DasmWin = new DasmWindow();
                DasmWin = new DasmWindow(this);
                allWatchBrowseWin = new AllWatchBrowserWindow(this);
+               LocalBrowseWin = new LocalBrowserWindow(this);
                heapallocatorBrowseWin = new HeapAllocatorBrowserWindow(this);
                brkWin = new BrkWindow(this);
                exceptionvectortableBrowseWin = new ExceptionVectorTableBrowserWindow(this);
                heapallocatorBrowseWin = new HeapAllocatorBrowserWindow(this);
                brkWin = new BrkWindow(this);
                exceptionvectortableBrowseWin = new ExceptionVectorTableBrowserWindow(this);
@@ -395,6 +398,10 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
                allWatchBrowseAct->setStatusTip(tr("Shows all Watch browser window"));
                connect(allWatchBrowseAct, SIGNAL(triggered()), this, SLOT(ShowAllWatchBrowserWin()));
 
                allWatchBrowseAct->setStatusTip(tr("Shows all Watch browser window"));
                connect(allWatchBrowseAct, SIGNAL(triggered()), this, SLOT(ShowAllWatchBrowserWin()));
 
+               LocalBrowseAct = new QAction(QIcon(":/res/Local.png"), tr("Local"), this);
+               LocalBrowseAct->setStatusTip(tr("Shows Local browser window"));
+               connect(LocalBrowseAct, SIGNAL(triggered()), this, SLOT(ShowLocalBrowserWin()));
+
                heapallocatorBrowseAct = new QAction(QIcon(""), tr("Heap allocator"), this);
                heapallocatorBrowseAct->setStatusTip(tr("Shows the heap allocator browser window"));
                connect(heapallocatorBrowseAct, SIGNAL(triggered()), this, SLOT(ShowHeapAllocatorBrowserWin()));
                heapallocatorBrowseAct = new QAction(QIcon(""), tr("Heap allocator"), this);
                heapallocatorBrowseAct->setStatusTip(tr("Shows the heap allocator browser window"));
                connect(heapallocatorBrowseAct, SIGNAL(triggered()), this, SLOT(ShowHeapAllocatorBrowserWin()));
@@ -498,6 +505,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
 #endif
                        debugWindowsWatchMenu = debugWindowsMenu->addMenu(tr("&Watch"));
                        debugWindowsWatchMenu->addAction(allWatchBrowseAct);
 #endif
                        debugWindowsWatchMenu = debugWindowsMenu->addMenu(tr("&Watch"));
                        debugWindowsWatchMenu->addAction(allWatchBrowseAct);
+                       debugWindowsMenu->addAction(LocalBrowseAct);
                        debugWindowsMenu->addSeparator();
                        debugWindowsMemoryMenu = debugWindowsMenu->addMenu(tr("&Memory"));
                        debugWindowsMemoryMenu->addAction(heapallocatorBrowseAct);
                        debugWindowsMenu->addSeparator();
                        debugWindowsMemoryMenu = debugWindowsMenu->addMenu(tr("&Memory"));
                        debugWindowsMemoryMenu->addAction(heapallocatorBrowseAct);
@@ -1016,8 +1024,7 @@ static uint32_t ntscTickCount;
                                {
                                        for (uint32_t y = 0; y < videoWidget->rasterHeight; y++)
                                        {
                                {
                                        for (uint32_t y = 0; y < videoWidget->rasterHeight; y++)
                                        {
-                                               videoWidget->buffer[(y * videoWidget->textureWidth) + x]
-                                                       = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;
+                                               videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;
                                        }
                                }
                        }
                                        }
                                }
                        }
@@ -1515,6 +1522,13 @@ void MainWin::ShowExceptionVectorTableBrowserWin(void)
 }
 
 
 }
 
 
+void MainWin::ShowLocalBrowserWin(void)
+{
+       LocalBrowseWin->show();
+       LocalBrowseWin->RefreshContents();
+}
+
+
 void MainWin::ShowAllWatchBrowserWin(void)
 {
        allWatchBrowseWin->show();
 void MainWin::ShowAllWatchBrowserWin(void)
 {
        allWatchBrowseWin->show();
@@ -1839,6 +1853,13 @@ void MainWin::ReadUISettings(void)
                size = settings.value("allWatchBrowseWinSize", QSize(400, 400)).toSize();
                allWatchBrowseWin->resize(size);
 
                size = settings.value("allWatchBrowseWinSize", QSize(400, 400)).toSize();
                allWatchBrowseWin->resize(size);
 
+               // Local browser UI information
+               pos = settings.value("LocalBrowseWinPos", QPoint(200, 200)).toPoint();
+               LocalBrowseWin->move(pos);
+               settings.value("LocalBrowseWinIsVisible", false).toBool() ? ShowLocalBrowserWin() : void();
+               size = settings.value("LocalBrowseWinSize", QSize(400, 400)).toSize();
+               LocalBrowseWin->resize(size);
+
                // Heap memory allocation browser UI information
                pos = settings.value("heapallocatorBrowseWinPos", QPoint(200, 200)).toPoint();
                heapallocatorBrowseWin->move(pos);
                // Heap memory allocation browser UI information
                pos = settings.value("heapallocatorBrowseWinPos", QPoint(200, 200)).toPoint();
                heapallocatorBrowseWin->move(pos);
@@ -2031,6 +2052,9 @@ void MainWin::WriteUISettings(void)
                settings.setValue("allWatchBrowseWinPos", allWatchBrowseWin->pos());
                settings.setValue("allWatchBrowseWinIsVisible", allWatchBrowseWin->isVisible());
                settings.setValue("allWatchBrowseWinSize", allWatchBrowseWin->size());
                settings.setValue("allWatchBrowseWinPos", allWatchBrowseWin->pos());
                settings.setValue("allWatchBrowseWinIsVisible", allWatchBrowseWin->isVisible());
                settings.setValue("allWatchBrowseWinSize", allWatchBrowseWin->size());
+               settings.setValue("LocalBrowseWinPos", LocalBrowseWin->pos());\r
+               settings.setValue("LocalBrowseWinIsVisible", LocalBrowseWin->isVisible());
+               settings.setValue("LocalBrowseWinSize", LocalBrowseWin->size());
                settings.setValue("heapallocatorBrowseWinPos", heapallocatorBrowseWin->pos());
                settings.setValue("heapallocatorBrowseWinIsVisible", heapallocatorBrowseWin->isVisible());
                settings.setValue("heapallocatorBrowseWinSize", heapallocatorBrowseWin->size());
                settings.setValue("heapallocatorBrowseWinPos", heapallocatorBrowseWin->pos());
                settings.setValue("heapallocatorBrowseWinIsVisible", heapallocatorBrowseWin->isVisible());
                settings.setValue("heapallocatorBrowseWinSize", heapallocatorBrowseWin->size());
@@ -2076,6 +2100,7 @@ void      MainWin::RefreshDebuggerWindows(void)
                GPUDasmWin->RefreshContents();
                DSPDasmWin->RefreshContents();
                allWatchBrowseWin->RefreshContents();
                GPUDasmWin->RefreshContents();
                DSPDasmWin->RefreshContents();
                allWatchBrowseWin->RefreshContents();
+               LocalBrowseWin->RefreshContents();
                heapallocatorBrowseWin->RefreshContents();
                for (i = 0; i < vjs.nbrmemory1browserwindow; i++)
                {
                heapallocatorBrowseWin->RefreshContents();
                for (i = 0; i < vjs.nbrmemory1browserwindow; i++)
                {
index 1c5118e..fec3179 100644 (file)
-//
-// mainwin.h: Header file
-//
-// by James Hammons
-// (C) 2010 Underground Software
-//
-
-#ifndef __MAINWIN_H__
-#define __MAINWIN_H__
-
-//Hrm. uh??? I thought this wasn't the way to do this stuff...???
-#include <QtWidgets>
-#include "tom.h"
-
-#define RING_BUFFER_SIZE 32
-
-// Forward declarations
-class GLWidget;
-class VideoWindow;
-class AboutWindow;
-class HelpWindow;
-class FilePickerWindow;
-class MemoryBrowserWindow;
-class StackBrowserWindow;
-class CPUBrowserWindow;
-class OPBrowserWindow;
-class M68KDasmBrowserWindow;
-class RISCDasmBrowserWindow;
-class VideoOutputWindow;
-class DasmWindow;
-class m68KDasmWindow;
-class GPUDasmWindow;
-class DSPDasmWindow;
-class EmuStatusWindow;
-class AllWatchBrowserWindow;
-class HeapAllocatorBrowserWindow;
-class Memory1BrowserWindow;
-class BrkWindow;
-class ExceptionVectorTableBrowserWindow;
-
-class MainWin: public QMainWindow
-{
-       // All Qt apps require this macro for signal/slot functionality to work
-       Q_OBJECT
-
-       public:
-//             MainWin(QString);
-               MainWin(bool);
-               void LoadFile(QString);
-               void SyncUI(void);
-               void    RefreshDebuggerWindows(void);
-               void    RefreshAlpineWindows(void);
-
-       protected:
-               void closeEvent(QCloseEvent *);
-               void keyPressEvent(QKeyEvent *);
-               void keyReleaseEvent(QKeyEvent *);
-
-       private slots:
-               void Open(void);
-               void Configure(void);
-               void Timer(void);
-               void TogglePowerState(void);
-               void ToggleRunState(void);
-               void SetZoom100(void);
-               void SetZoom200(void);
-               void SetZoom300(void);
-               void SetNTSC(void);
-               void SetPAL(void);
-               void ToggleBlur(void);
-               void ShowAboutWin(void);
-               void ShowHelpWin(void);
-               void InsertCart(void);
-               void Unpause(void);
-               void LoadSoftware(QString);
-               void ToggleCDUsage(void);
-               void FrameAdvance(void);
-               void TraceStepOver(void);
-               void TraceStepInto(void);
-               void ToggleFullScreen(void);
-               void Restart(void);
-               void NewBreakpointFunction(void);
-               void ShowMemoryBrowserWin(void);
-               void ShowStackBrowserWin(void);
-               void ShowCPUBrowserWin(void);
-               void ShowOPBrowserWin(void);
-               void ShowM68KDasmBrowserWin(void);
-               void ShowRISCDasmBrowserWin(void);
-               void ShowVideoOutputWin(void);
-               void ShowDasmWin(void);
-               void ShowEmuStatusWin(void);
-               void ShowAllWatchBrowserWin(void);
-               void ShowHeapAllocatorBrowserWin(void);
-               void ShowMemory1BrowserWin(int NumWin);
-               void ShowExceptionVectorTableBrowserWin(void);
-
-       private:
-               void HandleKeys(QKeyEvent *, bool);
-               void HandleGamepads(void);
-               void SetFullScreen(bool state = true);
-               void ResizeMainWindow(void);
-               void ReadUISettings(void);
-               void ReadSettings(void);
-               void WriteSettings(void);
-               void WriteUISettings(void);
-
-//     public:
-               GLWidget * videoWidget;
-               QMdiArea *mainWindowCentrale;
-               QMdiSubWindow *VideoOutputWindowCentrale;
-               AboutWindow * aboutWin;
-               HelpWindow * helpWin;
-               FilePickerWindow * filePickWin;
-               EmuStatusWindow * emuStatusWin;
-               MemoryBrowserWindow * memBrowseWin;
-               StackBrowserWindow * stackBrowseWin;
-               CPUBrowserWindow * cpuBrowseWin;
-               OPBrowserWindow * opBrowseWin;
-               M68KDasmBrowserWindow * m68kDasmBrowseWin;
-               RISCDasmBrowserWindow * riscDasmBrowseWin;
-               VideoOutputWindow * VideoOutputWin;
-               AllWatchBrowserWindow * allWatchBrowseWin;
-               ExceptionVectorTableBrowserWindow *exceptionvectortableBrowseWin;
-               HeapAllocatorBrowserWindow *heapallocatorBrowseWin;
-               Memory1BrowserWindow ** mem1BrowseWin;
-               DasmWindow * DasmWin;
-               QTabWidget *dasmtabWidget;
-               //QDockWidget *dasmtabWidget;
-               m68KDasmWindow *m68kDasmWin;
-               GPUDasmWindow *GPUDasmWin;
-               DSPDasmWindow *DSPDasmWin;
-               BrkWindow *brkWin;
-               QTimer * timer;
-               bool running;
-               int zoomLevel;
-               bool powerButtonOn;
-               bool showUntunedTankCircuit;
-       public:
-               bool cartridgeLoaded;
-       private:
-               bool allowUnknownSoftware;
-               bool CDActive;
-//             bool alpineLoadSuccessful;
-               bool pauseForFileSelector;
-               bool loadAndGo;
-               bool keyHeld[8];
-               bool fullScreen;
-               bool scannedSoftwareFolder;
-       public:
-               bool plzDontKillMyComputer;
-               uint32_t oldTimestamp;
-               uint32_t ringBufferPointer;
-               uint32_t ringBuffer[RING_BUFFER_SIZE];
-       private:
-               QPoint mainWinPosition;
-//             QSize mainWinSize;
-               int lastEditedProfile;
-               QMenu * fileMenu;
-               QMenu * helpMenu;
-               QMenu * debugMenu, * debugWindowsMenu, *debugWindowsBrowsesMenu, *debugWindowsWatchMenu, *debugWindowOutputMenu, *debugWindowExceptionMenu, *debugWindowsMemoryMenu, *debugNewBreakpointMenu;
-               QToolBar * toolbar;
-               QToolBar * debugbar;
-               QToolBar * debuggerbar;
-
-               QActionGroup * zoomActs;
-               QActionGroup * tvTypeActs;
-
-               QAction * quitAppAct;
-               QAction * powerAct;
-               QAction * pauseAct;
-               QAction * x1Act;
-               QAction * x2Act;
-               QAction * x3Act;
-               QAction * ntscAct;
-               QAction * palAct;
-               QAction * blurAct;
-               QAction * aboutAct;
-               QAction * helpAct;
-               QAction * filePickAct;
-               QAction * configAct;
-               QAction * emustatusAct;
-               QAction * useCDAct;
-               QAction * frameAdvanceAct;
-               QAction *traceStepOverAct;
-               QAction *traceStepIntoAct;
-               QAction *restartAct;
-               QAction * fullScreenAct;
-
-               QAction *memBrowseAct;
-               QAction *stackBrowseAct;
-               QAction *cpuBrowseAct;
-               QAction *opBrowseAct;
-               QAction *m68kDasmBrowseAct;
-               QAction *riscDasmBrowseAct;
-               QAction *VideoOutputAct;
-               QAction *DasmAct;
-               QAction *heapallocatorBrowseAct;
-               QAction *allWatchBrowseAct;
-               QAction **mem1BrowseAct;
-               QAction *newBreakpointFunctionAct;
-               QAction *exceptionVectorTableBrowseAct;
-
-               QIcon powerGreen;
-               QIcon powerRed;
-               QIcon blur;
-               uint32_t testPattern[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT_PAL];
-               uint32_t testPattern2[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT_PAL];
-};
-
-#endif // __MAINWIN_H__
+//\r
+// mainwin.h: Header file\r
+//\r
+// by James Hammons\r
+// (C) 2010 Underground Software\r
+//\r
+\r
+#ifndef __MAINWIN_H__\r
+#define __MAINWIN_H__\r
+\r
+//Hrm. uh??? I thought this wasn't the way to do this stuff...???\r
+#include <QtWidgets>\r
+#include "tom.h"\r
+\r
+#define RING_BUFFER_SIZE 32\r
+\r
+// Forward declarations\r
+class GLWidget;\r
+class VideoWindow;\r
+class AboutWindow;\r
+class HelpWindow;\r
+class FilePickerWindow;\r
+class MemoryBrowserWindow;\r
+class StackBrowserWindow;\r
+class CPUBrowserWindow;\r
+class OPBrowserWindow;\r
+class M68KDasmBrowserWindow;\r
+class RISCDasmBrowserWindow;\r
+class VideoOutputWindow;\r
+class DasmWindow;\r
+class m68KDasmWindow;\r
+class GPUDasmWindow;\r
+class DSPDasmWindow;\r
+class EmuStatusWindow;\r
+class AllWatchBrowserWindow;\r
+class LocalBrowserWindow;\r
+class HeapAllocatorBrowserWindow;\r
+class Memory1BrowserWindow;\r
+class BrkWindow;\r
+class ExceptionVectorTableBrowserWindow;\r
+\r
+class MainWin: public QMainWindow\r
+{\r
+       // All Qt apps require this macro for signal/slot functionality to work\r
+       Q_OBJECT\r
+\r
+       public:\r
+//             MainWin(QString);\r
+               MainWin(bool);\r
+               void LoadFile(QString);\r
+               void SyncUI(void);\r
+               void    RefreshDebuggerWindows(void);\r
+               void    RefreshAlpineWindows(void);\r
+\r
+       protected:\r
+               void closeEvent(QCloseEvent *);\r
+               void keyPressEvent(QKeyEvent *);\r
+               void keyReleaseEvent(QKeyEvent *);\r
+\r
+       private slots:\r
+               void Open(void);\r
+               void Configure(void);\r
+               void Timer(void);\r
+               void TogglePowerState(void);\r
+               void ToggleRunState(void);\r
+               void SetZoom100(void);\r
+               void SetZoom200(void);\r
+               void SetZoom300(void);\r
+               void SetNTSC(void);\r
+               void SetPAL(void);\r
+               void ToggleBlur(void);\r
+               void ShowAboutWin(void);\r
+               void ShowHelpWin(void);\r
+               void InsertCart(void);\r
+               void Unpause(void);\r
+               void LoadSoftware(QString);\r
+               void ToggleCDUsage(void);\r
+               void FrameAdvance(void);\r
+               void TraceStepOver(void);\r
+               void TraceStepInto(void);\r
+               void ToggleFullScreen(void);\r
+               void Restart(void);\r
+               void NewBreakpointFunction(void);\r
+               void ShowMemoryBrowserWin(void);\r
+               void ShowStackBrowserWin(void);\r
+               void ShowCPUBrowserWin(void);\r
+               void ShowOPBrowserWin(void);\r
+               void ShowM68KDasmBrowserWin(void);\r
+               void ShowRISCDasmBrowserWin(void);\r
+               void ShowVideoOutputWin(void);\r
+               void ShowDasmWin(void);\r
+               void ShowEmuStatusWin(void);\r
+               void ShowAllWatchBrowserWin(void);\r
+               void ShowLocalBrowserWin(void);\r
+               void ShowHeapAllocatorBrowserWin(void);\r
+               void ShowMemory1BrowserWin(int NumWin);\r
+               void ShowExceptionVectorTableBrowserWin(void);\r
+\r
+       private:\r
+               void HandleKeys(QKeyEvent *, bool);\r
+               void HandleGamepads(void);\r
+               void SetFullScreen(bool state = true);\r
+               void ResizeMainWindow(void);\r
+               void ReadUISettings(void);\r
+               void ReadSettings(void);\r
+               void WriteSettings(void);\r
+               void WriteUISettings(void);\r
+\r
+//     public:\r
+               GLWidget * videoWidget;\r
+               QMdiArea *mainWindowCentrale;\r
+               QMdiSubWindow *VideoOutputWindowCentrale;\r
+               AboutWindow * aboutWin;\r
+               HelpWindow * helpWin;\r
+               FilePickerWindow * filePickWin;\r
+               EmuStatusWindow * emuStatusWin;\r
+               MemoryBrowserWindow * memBrowseWin;\r
+               StackBrowserWindow * stackBrowseWin;\r
+               CPUBrowserWindow * cpuBrowseWin;\r
+               OPBrowserWindow * opBrowseWin;\r
+               M68KDasmBrowserWindow * m68kDasmBrowseWin;\r
+               RISCDasmBrowserWindow * riscDasmBrowseWin;\r
+               VideoOutputWindow * VideoOutputWin;\r
+               AllWatchBrowserWindow * allWatchBrowseWin;\r
+               LocalBrowserWindow * LocalBrowseWin;\r
+               ExceptionVectorTableBrowserWindow *exceptionvectortableBrowseWin;\r
+               HeapAllocatorBrowserWindow *heapallocatorBrowseWin;\r
+               Memory1BrowserWindow ** mem1BrowseWin;\r
+               DasmWindow * DasmWin;\r
+               QTabWidget *dasmtabWidget;\r
+               //QDockWidget *dasmtabWidget;\r
+               m68KDasmWindow *m68kDasmWin;\r
+               GPUDasmWindow *GPUDasmWin;\r
+               DSPDasmWindow *DSPDasmWin;\r
+               BrkWindow *brkWin;\r
+               QTimer * timer;\r
+               bool running;\r
+               int zoomLevel;\r
+               bool powerButtonOn;\r
+               bool showUntunedTankCircuit;\r
+       public:\r
+               bool cartridgeLoaded;\r
+       private:\r
+               bool allowUnknownSoftware;\r
+               bool CDActive;\r
+//             bool alpineLoadSuccessful;\r
+               bool pauseForFileSelector;\r
+               bool loadAndGo;\r
+               bool keyHeld[8];\r
+               bool fullScreen;\r
+               bool scannedSoftwareFolder;\r
+       public:\r
+               bool plzDontKillMyComputer;\r
+               uint32_t oldTimestamp;\r
+               uint32_t ringBufferPointer;\r
+               uint32_t ringBuffer[RING_BUFFER_SIZE];\r
+       private:\r
+               QPoint mainWinPosition;\r
+//             QSize mainWinSize;\r
+               int lastEditedProfile;\r
+               QMenu * fileMenu;\r
+               QMenu * helpMenu;\r
+               QMenu * debugMenu, * debugWindowsMenu, *debugWindowsBrowsesMenu, *debugWindowsWatchMenu, *debugWindowOutputMenu, *debugWindowExceptionMenu, *debugWindowsMemoryMenu, *debugNewBreakpointMenu;\r
+               QToolBar * toolbar;\r
+               QToolBar * debugbar;\r
+               QToolBar * debuggerbar;\r
+\r
+               QActionGroup * zoomActs;\r
+               QActionGroup * tvTypeActs;\r
+\r
+               QAction * quitAppAct;\r
+               QAction * powerAct;\r
+               QAction * pauseAct;\r
+               QAction * x1Act;\r
+               QAction * x2Act;\r
+               QAction * x3Act;\r
+               QAction * ntscAct;\r
+               QAction * palAct;\r
+               QAction * blurAct;\r
+               QAction * aboutAct;\r
+               QAction * helpAct;\r
+               QAction * filePickAct;\r
+               QAction * configAct;\r
+               QAction * emustatusAct;\r
+               QAction * useCDAct;\r
+               QAction * frameAdvanceAct;\r
+               QAction *traceStepOverAct;\r
+               QAction *traceStepIntoAct;\r
+               QAction *restartAct;\r
+               QAction * fullScreenAct;\r
+\r
+               QAction *memBrowseAct;\r
+               QAction *stackBrowseAct;\r
+               QAction *cpuBrowseAct;\r
+               QAction *opBrowseAct;\r
+               QAction *m68kDasmBrowseAct;\r
+               QAction *riscDasmBrowseAct;\r
+               QAction *VideoOutputAct;\r
+               QAction *DasmAct;\r
+               QAction *heapallocatorBrowseAct;\r
+               QAction *allWatchBrowseAct;\r
+               QAction *LocalBrowseAct;\r
+               QAction **mem1BrowseAct;\r
+               QAction *newBreakpointFunctionAct;\r
+               QAction *exceptionVectorTableBrowseAct;\r
+\r
+               QIcon powerGreen;\r
+               QIcon powerRed;\r
+               QIcon blur;\r
+               uint32_t testPattern[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT_PAL];\r
+               uint32_t testPattern2[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT_PAL];\r
+};\r
+\r
+#endif // __MAINWIN_H__\r
index b11ec3f..98f2ce5 100644 (file)
@@ -1,48 +1,49 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource>
-       <file>../../res/vj-icon.png</file>
-       <file>../../res/power-off.png</file>
-       <file>../../res/power-on-red.png</file>
-       <file>../../res/power-on-green.png</file>
-       <file>../../res/pause-off.png</file>
-       <file>../../res/pause-on.png</file>
-       <file>../../res/frame-advance.png</file>
-       <file>../../res/StepOver.png</file>
-       <file>../../res/StepInto.png</file>
-       <file>../../res/Restart.png</file>
-       <file>../../res/zoom100.png</file>
-       <file>../../res/zoom200.png</file>
-       <file>../../res/zoom300.png</file>
-       <file>../../res/blur-off.png</file>
-       <file>../../res/blur-on.png</file>
-       <file>../../res/fullscreen.png</file>
-       <file>../../res/Watch.png</file>
-       <file>../../res/tool-memory.png</file>
-       <file>../../res/tool-stack.png</file>
-       <file>../../res/tool-cpu.png</file>
-       <file>../../res/tool-op.png</file>
-       <file>../../res/tool-68k-dis.png</file>
-       <file>../../res/tool-risc-dis.png</file>
-       <file>../../res/generic.png</file>
-       <file>../../res/cart-blank.png</file>
-       <file>../../res/label-blank.png</file>
-       <file>../../res/vj_title_small.png</file>
-       <file>../../res/controller.png</file>
-       <file>../../res/insert.png</file>
-       <file>../../res/software.png</file>
-       <file>../../res/ntsc.png</file>
-       <file>../../res/pal.png</file>
-       <file>../../res/compact-disc.png</file>
-       <file>../../res/wrench.png</file>
-       <file>../../res/upper-left.png</file>
-       <file>../../res/upper-right.png</file>
-       <file>../../res/alpine-file.png</file>
-       <file>../../res/skunkboard-file.png</file>
-       <file>../../res/homebrew-file.png</file>
-       <file>../../res/unknown-file.png</file>
-       <file>../../res/ELF-file.png</file>
-       <file>../../res/test-pattern.jpg</file>
-       <file>../../res/test-pattern-pal.jpg</file>
-       <file>../../res/help.html</file>
-</qresource>
-</RCC>
+<!DOCTYPE RCC><RCC version="1.0">\r
+<qresource>\r
+       <file>../../res/vj-icon.png</file>\r
+       <file>../../res/power-off.png</file>\r
+       <file>../../res/power-on-red.png</file>\r
+       <file>../../res/power-on-green.png</file>\r
+       <file>../../res/pause-off.png</file>\r
+       <file>../../res/pause-on.png</file>\r
+       <file>../../res/frame-advance.png</file>\r
+       <file>../../res/StepOver.png</file>\r
+       <file>../../res/StepInto.png</file>\r
+       <file>../../res/Restart.png</file>\r
+       <file>../../res/zoom100.png</file>\r
+       <file>../../res/zoom200.png</file>\r
+       <file>../../res/zoom300.png</file>\r
+       <file>../../res/blur-off.png</file>\r
+       <file>../../res/blur-on.png</file>\r
+       <file>../../res/fullscreen.png</file>\r
+       <file>../../res/Watch.png</file>\r
+       <file>../../res/Local.png</file>\r
+       <file>../../res/tool-memory.png</file>\r
+       <file>../../res/tool-stack.png</file>\r
+       <file>../../res/tool-cpu.png</file>\r
+       <file>../../res/tool-op.png</file>\r
+       <file>../../res/tool-68k-dis.png</file>\r
+       <file>../../res/tool-risc-dis.png</file>\r
+       <file>../../res/generic.png</file>\r
+       <file>../../res/cart-blank.png</file>\r
+       <file>../../res/label-blank.png</file>\r
+       <file>../../res/vj_title_small.png</file>\r
+       <file>../../res/controller.png</file>\r
+       <file>../../res/insert.png</file>\r
+       <file>../../res/software.png</file>\r
+       <file>../../res/ntsc.png</file>\r
+       <file>../../res/pal.png</file>\r
+       <file>../../res/compact-disc.png</file>\r
+       <file>../../res/wrench.png</file>\r
+       <file>../../res/upper-left.png</file>\r
+       <file>../../res/upper-right.png</file>\r
+       <file>../../res/alpine-file.png</file>\r
+       <file>../../res/skunkboard-file.png</file>\r
+       <file>../../res/homebrew-file.png</file>\r
+       <file>../../res/unknown-file.png</file>\r
+       <file>../../res/ELF-file.png</file>\r
+       <file>../../res/test-pattern.jpg</file>\r
+       <file>../../res/test-pattern-pal.jpg</file>\r
+       <file>../../res/help.html</file>\r
+</qresource>\r
+</RCC>\r
index 613bfdf..d209466 100644 (file)
@@ -114,6 +114,7 @@ HEADERS = \
        src/debugger/VideoWin.h \\r
        src/debugger/ELFManager.h \\r
        src/debugger/allwatchbrowser.h \\r
        src/debugger/VideoWin.h \\r
        src/debugger/ELFManager.h \\r
        src/debugger/allwatchbrowser.h \\r
+       src/debugger/localbrowser.h \\r
        src/debugger/DWARFManager.h \\r
        src/debugger/memory1browser.h \\r
        src/debugger/heapallocatorbrowser.h \\r
        src/debugger/DWARFManager.h \\r
        src/debugger/memory1browser.h \\r
        src/debugger/heapallocatorbrowser.h \\r
@@ -161,6 +162,7 @@ SOURCES = \
        src/debugger/VideoWin.cpp \\r
        src/debugger/ELFManager.cpp \\r
        src/debugger/allwatchbrowser.cpp \\r
        src/debugger/VideoWin.cpp \\r
        src/debugger/ELFManager.cpp \\r
        src/debugger/allwatchbrowser.cpp \\r
+       src/debugger/localbrowser.cpp \\r
        src/debugger/DWARFManager.cpp \\r
        src/debugger/memory1browser.cpp \\r
        src/debugger/heapallocatorbrowser.cpp \\r
        src/debugger/DWARFManager.cpp \\r
        src/debugger/memory1browser.cpp \\r
        src/debugger/heapallocatorbrowser.cpp \\r