예제 #1
0
bool DispBPMsg( bool stack_cmds )
{
    brkp    *bp, *next;
    char    *p;
    bool    ret;
    cmd_list    *cmds;

    ret = FALSE;
    for( bp = BrkList; bp != NULL; bp = bp->next ) {
        if( !bp->status.b.hit ) continue;
        if( !bp->status.b.silent ) {
            if( bp->th != MAD_NIL_TYPE_HANDLE ) {
                p = GetBPAddrText( bp, TxtBuff );
                p = StrCopy( " - ", p );
                p = StrVal( LIT( OldVal ), bp, p );
                GetWPVal( bp );
                p = StrVal( LIT( NewVal ), bp, p );
                *p = NULLCHAR;
            } else {
                p = GetBPAddrText( bp, TxtBuff );
            }
            DUIInfoBox( TxtBuff );
        }
        if( stack_cmds && bp->status.b.resume ) {
            cmds = AllocCmdList( "go/keep", sizeof( "go/keep" ) );
            PushCmdList( cmds );
            TypeInpStack( INP_HOOK );
            FreeCmdList( cmds );
            ret = TRUE;
        }
        if( stack_cmds && ( bp->cmds != NULL ) && bp->status.b.use_cmds ) {
            bp->status.b.cmds_pushed = TRUE;
            PushCmdList( bp->cmds );
            TypeInpStack( INP_BREAK_POINT );
            ret = TRUE;
        }
    }
    for( bp = BrkList; bp != NULL; bp = next ) {
        next = bp->next;
        if( bp->status.b.autodestruct ) {
            DUIRemoveBreak( bp );
        }
    }
    if( UserTmpBrk.status.b.hit ) {
        p = Format( TxtBuff, LIT( Break_on_execute ) );
        Format( p, BrkFmt(), UserTmpBrk.loc.addr );
        DUIDlgTxt( TxtBuff );
    }
    return( ret );
}
예제 #2
0
static void RecordBreakEvent( brkp *bp, brk_event event )
{
    GetBPCmd( bp, event, TxtBuff, TXT_LEN );
    RecordEvent( TxtBuff );
    if( event == B_SET && !IS_NIL_ADDR( bp->loc.addr ) ) {
        GetBPAddrText( bp, TxtBuff );
        DUIStatusText( TxtBuff );
    }
}