Added logic to display a label showing the address of the cursor selected memory location in hex editor.

This commit is contained in:
Matthew Budd 2020-05-22 09:00:07 -04:00
parent c05c85bcfd
commit 475464cca2
1 changed files with 59 additions and 3 deletions

View File

@ -89,6 +89,7 @@ struct memViewWin_t
GtkTextView *textview;
GtkTextBuffer *textbuf;
GtkTreeStore *memview_store;
int selAddr;
int row_vis_start;
int row_vis_end;
int row_vis_center;
@ -119,6 +120,7 @@ struct memViewWin_t
row_vis_start = 0;
row_vis_end = 64;
row_vis_center= 32;
selAddr = 0;
mode = MODE_NES_RAM;
mbuf = NULL;
numLines = 0;
@ -180,6 +182,7 @@ struct memViewWin_t
void showMemViewResults (int reset);
int calcVisibleRange( int *start_out, int *end_out, int *center_out );
int getAddrFromCursor( int CursorTextOffset = -1 );
};
@ -206,13 +209,56 @@ static void initMem( unsigned char *c, int size )
}
}
int memViewWin_t::getAddrFromCursor( int CursorTextOffset )
{
int line, offs, byte0, byte, bcol, addr = -1;
if ( CursorTextOffset < 0 )
{
gint cpos;
g_object_get( textbuf, "cursor-position", &cpos, NULL );
CursorTextOffset = cpos;
}
line = CursorTextOffset / numCharsPerLine;
offs = CursorTextOffset % numCharsPerLine;
if ( offs < 10 )
{
return addr;
}
else if ( offs < 73 )
{
byte0 = (offs - 10);
byte = byte0 / 4;
bcol = byte0 % 4;
if ( byte < 16 )
{
if (bcol < 2)
{
addr = (line*16) + byte;
}
}
}
else
{
if ( (offs >= 73) && (offs < 89) )
{
addr = (line*16) + (offs-73);
}
}
return addr;
}
void memViewWin_t::showMemViewResults (int reset)
{
int addr, memSize = 0;
int lineAddr = 0, c, un, ln;
int i, row, row_start, row_end, totalChars;
gint cpos;
char addrStr[16], valStr[16][8], ascii[18];
char addrStr[128], valStr[16][8], ascii[18];
char row_changed;
std::string line;
GtkTextIter iter, start_iter, end_iter;
@ -271,6 +317,8 @@ void memViewWin_t::showMemViewResults (int reset)
g_object_get( textbuf, "cursor-position", &cpos, NULL );
selAddr = getAddrFromCursor( cpos );
//printf("CPOS: %i \n", cpos );
gtk_text_buffer_get_start_iter( textbuf, &start_iter );
@ -372,6 +420,16 @@ void memViewWin_t::showMemViewResults (int reset)
gtk_text_buffer_get_iter_at_offset( textbuf, &iter, cpos );
gtk_text_buffer_place_cursor( textbuf, &iter );
if ( selAddr >= 0 )
{
sprintf( addrStr, "Selected Addr: 0x%08X", selAddr );
}
else
{
addrStr[0] = 0;
}
gtk_label_set_text( GTK_LABEL(selCellLabel), addrStr );
}
int memViewWin_t::calcVisibleRange( int *start_out, int *end_out, int *center_out )
@ -710,8 +768,6 @@ void openMemoryViewWindow (void)
g_signal_connect (mv->textview, "button-press-event",
G_CALLBACK (textview_button_press_cb), mv);
mv->textbuf = gtk_text_view_get_buffer( mv->textview );
g_signal_connect (mv->textbuf, "insert-text",