wpsamp.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 1,543 行 · 第 1/4 页
C
1,543 行
}
if( image->exe_changed ) {
if( !multi_level ) {
ErrorMsg( LIT( Exe_Has_Changed ), image->name );
image->exe_changed = B_FALSE;
}
}
curr_sio->level_open++;
curr_sio->curr_image = image;
gatherSort( curr_sio );
return( 0 );
}
STATIC int smodDetailLine( a_window *wnd, int row, bint multi_level )
/*******************************************************************/
{
sio_data *curr_sio;
mod_info *mod;
curr_sio = WndExtra( wnd );
mod = SModGetModule( wnd, row );
if( mod->agg_count == 0 && mod->file_count == 2 ) {
if( !multi_level ) {
ErrorMsg( LIT( No_Symbol_Info ), mod->name );
}
return( row );
}
curr_sio->level_open++;
curr_sio->curr_mod = mod;
gatherSort( curr_sio );
return( 0 );
}
STATIC int sfileDetailLine( a_window *wnd, int row, bint multi_level )
/********************************************************************/
{
sio_data *curr_sio;
file_info *curr_file;
curr_sio = WndExtra( wnd );
curr_file = SFileGetFile( wnd, row );
if( curr_file->rtn_count == 0 ) {
if( !multi_level ) {
ErrorMsg( LIT( No_Routine_Names ), curr_file->name );
}
return( row );
}
curr_sio->level_open++;
curr_sio->curr_file = curr_file;
gatherSort( curr_sio );
return( 0 );
}
STATIC int srtnDetailLine( a_window *wnd, int row, bint multi_level )
/*******************************************************************/
{
sio_data *curr_sio;
rtn_info *curr_rtn;
int line;
multi_level = multi_level;
curr_sio = WndExtra( wnd );
curr_rtn = SRtnGetRoutine( wnd, row );
curr_sio->curr_rtn = curr_rtn;
line = srtnOpenDetail( curr_sio, B_TRUE );
return( line );
}
STATIC int srtnOpenDetail( sio_data *curr_sio, bint go_down )
/***********************************************************/
{
a_window *wnd;
wp_srcfile *src_file;
int line;
int top_line;
wnd = curr_sio->sample_window;
src_file = curr_sio->src_file;
if( src_file == NULL ) {
src_file = WPSourceOpen( curr_sio, B_TRUE );
if( src_file == NULL ) {
if( go_down ) {
curr_sio->level_open = LEVEL_ROUTINE;
line = ssrcDetailLine( wnd, 0, B_TRUE );
if( curr_sio->level_open == LEVEL_ROUTINE ) {
curr_sio->level_open = LEVEL_FILE;
}
return( line );
}
curr_sio->level_open = LEVEL_FILE;
return( 0 );
}
}
curr_sio->level_open = LEVEL_ROUTINE;
line = src_file->samp_line;
if( line < 1 ) {
line = src_file->rtn_line;
}
top_line = line - 1 - WndRows( wnd ) / 2;
if( top_line >= 0 ) {
WndSetTop( wnd, top_line );
}
return( line-1 );
}
STATIC int ssrcDetailLine( a_window *wnd, int row, bint multi_level )
/*******************************************************************/
{
sio_data *curr_sio;
wp_asmfile *asm_file;
int top_line;
curr_sio = WndExtra( wnd );
asm_file = WPAsmOpen( curr_sio, row+1, multi_level );
if( asm_file == NULL ) {
return( row );
}
curr_sio->level_open++;
curr_sio->asm_file = asm_file;
top_line = asm_file->entry_line - WndRows( wnd ) / 2;
if( top_line >= 0 ) {
WndSetTop( wnd, top_line );
}
return( asm_file->entry_line );
}
STATIC int sasmDetailLine( a_window *wnd, int row, bint multi_level )
/*******************************************************************/
{
wnd=wnd;
multi_level=multi_level;
Ring();
return( row );
}
STATIC void sampleRefresh( a_window *wnd )
/***************************************/
{
WndZapped( wnd );
}
extern void WPZoomIn( a_window *wnd, int row )
/********************************************/
{
sio_data *curr_sio;
int detail_rows;
int top_line;
int old_level;
int curr_line;
bint multi_level;
curr_sio = WndExtra( wnd );
if( row >= curr_sio->level_open && row < STATUS_ROW ) {
Ring();
return;
}
if( row < curr_sio->level_open ) {
curr_sio->level_open = row;
WndSetTop( wnd, 0 );
gatherSort( curr_sio );
if( curr_sio->level_open == LEVEL_ROUTINE ) {
curr_line = srtnOpenDetail( curr_sio, B_FALSE );
} else {
curr_line = WPGetRow( curr_sio );
}
} else {
row = row - STATUS_ROW - 1;
curr_line = row;
detail_rows = SampleNumRows( wnd );
if( detail_rows < row+1 ) {
Ring();
return;
}
multi_level = B_FALSE;
for( ;; ) {
old_level = curr_sio->level_open;
curr_line = overviewDetailRtns[curr_sio->level_open](
wnd, row, multi_level );
if( old_level == curr_sio->level_open ) break;
detail_rows = SampleNumRows( wnd );
if( detail_rows != 1 ) break;
row = 0;
multi_level = B_TRUE;
}
}
curr_sio->curr_proc_row = -WND_MAX_ROW;
curr_sio->curr_display_row = -WND_MAX_ROW;
detail_rows = SampleNumRows( wnd );
top_line = WndTop( wnd );
row = curr_line - top_line;
if( row >= WndRows( wnd ) ) {
top_line = curr_line - WndRows( wnd ) / 2;
}
if( row < 0 ) {
top_line = curr_line;
}
if( detail_rows-top_line < WndRows( wnd ) ) {
top_line = detail_rows - WndRows( wnd );
if( top_line < 0 ) {
top_line = 0;
}
}
WndSetTop( wnd, top_line );
WndNewCurrent( wnd, curr_line, PIECE_DETAIL_NAME );
WndDirty( wnd );
if( curr_sio->level_open < LEVEL_SOURCE
&& curr_sio->asm_file != NULL ) {
WPAsmClose( curr_sio->asm_file );
curr_sio->asm_file = NULL;
}
if( curr_sio->level_open < LEVEL_ROUTINE
&& curr_sio->src_file != NULL ) {
WPSourceClose( curr_sio->src_file );
curr_sio->src_file = NULL;
}
}
extern void WPBackOut( a_window * wnd )
/*************************************/
{
sio_data * curr_sio;
curr_sio = WndExtra( wnd );
if( curr_sio->level_open == 0 ) {
Ring();
return;
}
WPZoomIn( wnd, curr_sio->level_open-1 );
}
extern void WPDoPopUp( a_window * wnd, gui_menu_struct * gui_menu )
/*****************************************************************/
{
sio_data * curr_sio;
WndPopUp( wnd, gui_menu );
WndNoSelect( wnd );
curr_sio = WndExtra( wnd );
curr_sio->curr_proc_row = -WND_MAX_ROW;
curr_sio->curr_display_row = -WND_MAX_ROW;
}
extern void WPFindDoPopUp( a_window * wnd, int id )
/*************************************************/
{
gui_menu_struct * gui_menu;
int index;
index = 0;
for( ;; ) {
gui_menu = &sampleMenu[index++];
if( gui_menu->id == id ) break;
}
WPDoPopUp( wnd, gui_menu );
}
STATIC void gatherSort( sio_data * curr_sio )
/*******************************************/
{
GatherCurrent( curr_sio );
SortCurrent( curr_sio );
}
STATIC void setDisplay( a_window * wnd, sio_data * curr_sio, bint do_top )
/************************************************************************/
{
curr_sio->curr_proc_row = -WND_MAX_ROW;
curr_sio->curr_display_row = -WND_MAX_ROW;
if( do_top ) {
WndSetTop( wnd, 0 );
WndNewCurrent( wnd, 0, PIECE_DETAIL_NAME );
}
WndDirty( wnd );
}
STATIC void sampleMenuItem( a_window * wnd, unsigned id, int row, int piece )
/***************************************************************************/
{
sio_data * curr_sio;
int sort_type;
piece=piece;
curr_sio = WndExtra( wnd );
row += STATUS_ROW + 1;
switch( id ) {
case MENU_INITIALIZE:
if( row <= STATUS_ROW ) {
WndMenuGrayAll( wnd );
if( row < 0 || row-1 >= curr_sio->level_open ) break;
WndMenuEnable( wnd, MENU_SAMP_ZOOM_IN, B_TRUE );
break;
}
WndMenuEnableAll( wnd );
WndMenuCheck( wnd, MENU_SAMP_GATHER, GetCurrentGather( curr_sio ) );
WndMenuCheck( wnd, MENU_SAMP_BAR_MAX_TIME, GetCurrentMaxBar( curr_sio ) );
WndMenuCheck( wnd, MENU_SAMP_ABS, GetCurrentAbsBar( curr_sio ) );
WndMenuCheck( wnd, MENU_SAMP_REL, GetCurrentRelBar( curr_sio ) );
sort_type = GetCurrentSort( curr_sio );
WndMenuCheck( wnd, MENU_SORT_COUNT, sort_type==SORT_COUNT );
WndMenuCheck( wnd, MENU_SORT_NAME, sort_type==SORT_NAME );
if( row <= STATUS_ROW || curr_sio->level_open >= LEVEL_ROUTINE ) {
WndMenuEnable( wnd, MENU_SAMP_GATHER, B_FALSE );
WndMenuEnable( wnd, MENU_SAMP_SORT, B_FALSE );
WndMenuEnable( wnd, MENU_SORT_COUNT, B_FALSE );
WndMenuEnable( wnd, MENU_SORT_NAME, B_FALSE );
if( row <= STATUS_ROW ) {
WndMenuEnable( wnd, MENU_SAMP_BAR_MAX_TIME, B_FALSE );
WndMenuEnable( wnd, MENU_SAMP_ABS, B_FALSE );
WndMenuEnable( wnd, MENU_SAMP_REL, B_FALSE );
}
}
break;
case MENU_SAMP_ZOOM_IN:
WPZoomIn( wnd, row );
break;
case MENU_SAMP_BACK_OUT:
WPBackOut( wnd );
break;
// case MENU_SAMP_DATA:
// WPSImageOpen( curr_sio );
// break;
case MENU_SAMP_GATHER:
FlipCurrentGather( curr_sio );
WndMenuCheck( wnd, MENU_SAMP_GATHER, GetCurrentGather( curr_sio ) );
gatherSort( curr_sio );
setDisplay( wnd, curr_sio, B_TRUE );
break;
case MENU_SAMP_BAR_MAX_TIME:
FlipCurrentMaxBar( curr_sio );
WndMenuCheck( wnd, MENU_SAMP_BAR_MAX_TIME, GetCurrentMaxBar( curr_sio ) );
setDisplay( wnd, curr_sio, B_FALSE );
break;
case MENU_SAMP_ABS:
FlipCurrentAbsBar( curr_sio );
WndMenuCheck( wnd, MENU_SAMP_ABS, GetCurrentAbsBar( curr_sio ) );
setDisplay( wnd, curr_sio, B_FALSE );
break;
case MENU_SAMP_REL:
FlipCurrentRelBar( curr_sio );
WndMenuCheck( wnd, MENU_SAMP_ABS, GetCurrentRelBar( curr_sio ) );
setDisplay( wnd, curr_sio, B_FALSE );
break;
case MENU_SORT_COUNT:
case MENU_SORT_NAME:
WndMenuCheck( wnd, MENU_SORT_COUNT, id==MENU_SORT_COUNT );
WndMenuCheck( wnd, MENU_SORT_NAME, id==MENU_SORT_COUNT );
if( id == MENU_SORT_COUNT ) {
SetCurrentSort( curr_sio, SORT_COUNT );
} else {
SetCurrentSort( curr_sio, SORT_NAME );
}
SortCurrent( curr_sio );
setDisplay( wnd, curr_sio, B_TRUE );
break;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?