static void FuncRefresh( a_window *wnd ) { func_window *func = WndFunc( wnd ); mod_handle mod; if( UpdateFlags & UP_SYM_CHANGE ) { if( func->is_global ) { FuncNewMod( wnd, func->mod ); } else if( DeAliasAddrMod( GetCodeDot(), &mod ) == SR_NONE ) { FuncNoMod( wnd ); } else { FuncNewMod( wnd, mod ); } } else if( ( UpdateFlags & UP_CODE_ADDR_CHANGE ) && !func->is_global ) { if( DeAliasAddrMod( GetCodeDot(), &mod ) == SR_NONE ) { FuncNoMod( wnd ); } else { FuncNewMod( wnd, mod ); } } else if( UpdateFlags & UP_BREAK_CHANGE ) { if( func->toggled_break ) { func->toggled_break = FALSE; } else { WndRepaint( wnd ); } } }
unsigned DefaultSize( default_kind dk ) { dip_type_info info; mad_type_info mti; if( DIPModDefault( CodeAddrMod, dk, &info ) != 0 ) { info.kind = TK_NONE; info.size = 0; } mti.b.kind = MTK_BASIC; if( info.size == 0 ) { GetMADTypeDefaultAt( GetCodeDot(), ( dk == DK_INT ) ? MTK_INTEGER : MTK_ADDRESS, &mti ); info.size = BITS2BYTES( mti.b.bits ); if( mti.b.kind == MTK_ADDRESS ) { info.size -= BITS2BYTES( mti.a.seg.bits ); } } if( info.kind == TK_POINTER && info.modifier == TM_FAR ) { if( mti.b.kind == MTK_BASIC ) { /* haven't gotten the info yet */ GetMADTypeDefaultAt( GetCodeDot(), MTK_ADDRESS, &mti ); } info.size -= BITS2BYTES( mti.a.seg.bits ); } return( info.size ); }
static void DumpSource( void ) { char buff[256]; DIPHDL( cue, ch ); if( _IsOn( SW_TASK_RUNNING ) ) { printf( "I don't know where the task is. It's running\n" ); } if( DeAliasAddrCue( NO_MOD, GetCodeDot(), ch ) == SR_NONE || !DUIGetSourceLine( ch, buff, sizeof( buff ) ) ) { UnAsm( GetCodeDot(), buff, sizeof( buff ) ); } printf( "%s\n", buff ); }
void SrcExam( void ) { address addr; // bool prompt; addr = GetCodeDot(); OptMemAddr( EXPR_CODE, &addr ); // prompt = true; ReqEOC(); WndSrcInspect( addr ); }
void AsmExam() { address addr; // bool prompt; addr = GetCodeDot(); OptMemAddr( EXPR_CODE, &addr ); // prompt = TRUE; ReqEOC(); WndAsmInspect( addr ); }
void DlgCmd( void ) { char buff[256]; printf( "DBG>" ); fflush( stdout ); // not really necessary gets( buff ); if( buff[0] != NULLCHAR && buff[1] == NULLCHAR ) { switch( tolower( buff[0] ) ) { case 'u': WndAsmInspect( GetCodeDot() ); break; case 's': DumpSource(); break; case 'l': DumpLocals(); break; case 'i': RunRequest( REQ_TRACE_INTO ); break; case 'o': RunRequest( REQ_TRACE_OVER ); break; case 'g': RunRequest( REQ_GO ); break; case 'x': if( _IsOn( SW_REMOTE_LINK ) ) { printf( "Can't break remote task!\n" ); } else { HMODULE hmod; PFN proc = NULL; DosQueryModuleHandle( TrapParms, &hmod ); DosQueryProcAddr( hmod, 5, 0, &proc ); // if( proc != NULL ) // proc(); } // break the task break; default: printf( "Error - unrecognized command\n" ); } } else { DoCmd( DupStr( buff ) ); DoInput(); } }
void DlgCmd( void ) { char buff[256]; printf( "DBG>" ); fflush( stdout ); gets( buff ); if( buff[0] != NULLCHAR && buff[1] == NULLCHAR ) { switch( tolower( buff[0] ) ) { case 'u': WndAsmInspect( GetCodeDot() ); break; case 's': DumpSource(); break; case 'l': DumpLocals(); break; case 'i': RunRequest( REQ_TRACE_INTO ); break; case 'o': RunRequest( REQ_TRACE_OVER ); break; case 'g': RunRequest( REQ_GO ); break; case 'x': if( _IsOn( SW_REMOTE_LINK ) ) { printf( "Can't break remote task!\n" ); } else { HANDLE hmod; FARPROC proc; hmod = GetModuleHandle( TrapParms ); proc = GetProcAddress( hmod, (LPSTR)5 ); if( proc != NULL ) proc(); CloseHandle( hmod ); } // break the task break; default: printf( "Error - unrecognized command\n" ); } } else { DoCmd( DupStr( buff ) ); DoInput(); } }
void DbgUpdate( update_list flags ) { mod_handle prev_mod; input_stack *inp; UpdateFlags |= flags; if( flags & ( UP_SYM_CHANGE ) ) { BrkAddrRefresh(); } if( flags & (UP_REG_CHANGE|UP_CSIP_CHANGE) ) { InitLC( &Context, TRUE ); } if( flags & UP_NEW_PROGRAM ) { SetStackPos( &Context, 0 ); } if( flags & (UP_SYM_CHANGE+UP_STACKPOS_CHANGE+UP_REG_CHANGE+UP_CSIP_CHANGE+UP_CSIP_JUMPED) ) { SymCompFini(); prev_mod = ContextMod; if( DeAliasAddrMod( Context.execution, &ContextMod ) == SR_NONE ) ContextMod = NO_MOD; if( prev_mod != ContextMod ) { HookNotify( FALSE, HOOK_NEW_MODULE ); } } if( flags & (UP_CODE_ADDR_CHANGE | UP_SYM_CHANGE ) ) { prev_mod = CodeAddrMod; if( DeAliasAddrMod( GetCodeDot(), &CodeAddrMod ) == SR_NONE ) { CodeAddrMod = NO_MOD; } if( prev_mod != CodeAddrMod ) { for( inp = InpStack; inp != NULL; inp = inp->link ) { inp->type |= INP_NEW_LANG; } } } DUIUpdate( flags ); }
static void FileTrack( a_window *wnd, cue_handle *ch ) { unsigned active, old_active; unsigned end_line; int slack; file_window *file = WndFile( wnd ); mod_handle mod; cue_fileid id; wnd_row curr_row; int curr_piece; if( ch == NULL ) { mod = NO_MOD; id = 0; } else { mod = CueMod( ch ); id = CueFileId( ch ); } if( file->viewhndl == NULL || file->mod != mod || file->file_id != id ) { if( file->viewhndl != NULL ) { FDoneSource( file->viewhndl ); } file->mod = mod; file->file_id = id; FileSetDotAddr( wnd, GetCodeDot() ); if( file->mod == NO_MOD ) { file->viewhndl = NULL; } else { file->viewhndl = OpenSrcFile( ch ); } FileSetTitle( wnd, mod ); SeekToTheEnd( file ); file->eof = UINT_MAX; WndZapped( wnd ); FilePosInit( wnd ); file->active = NOT_ACTIVE; FilePos( wnd, 0 ); DbgUpdate( UP_OPEN_CHANGE ); } active = ActiveLine(); if( active != file->active ) { FileSetDotAddr( wnd, GetCodeDot() ); WndGetCurrent( wnd, &curr_row, &curr_piece ); WndNoCurrent( wnd ); if( curr_row != WND_NO_ROW ) { WndRowDirty( wnd, curr_row ); } } old_active = file->active; file->active = NOT_ACTIVE; slack = WndRows( wnd ) / 4; if( slack > 2 ) slack = 2; end_line = WndTop( wnd ) + WndRows( wnd ) - 1; if( old_active == NOT_ACTIVE || active > end_line ) { WndZapped( wnd ); WndScroll( wnd, active - slack - WndTop( wnd ) ); } else if( active > end_line - slack ) { WndRowDirtyImmed( wnd, old_active ); WndScroll( wnd, WndRows( wnd ) - 2 * slack ); } else if( active < WndTop( wnd ) ) { WndRowDirtyImmed( wnd, old_active ); WndScroll( wnd, active - WndTop( wnd ) - slack ); } else { WndRowDirty( wnd, old_active ); } WndNewCurrent( wnd, active, PIECE_SOURCE ); WndRowDirty( wnd, active ); file->active = active; }