static walk_result FindTypeName( mad_type_handle th, void *d ) { struct type_name *nd = d; char *p; char *q; unsigned len; GetMADTypeNameForCmd( th, TXT_LEN, TxtBuff ); p = nd->start; q = TxtBuff; for( ;; ) { if( tolower( *p ) != tolower( *q ) ) break; if( *q == '\0' ) break; ++p; ++q; } if( isalnum( *p ) ) return( WR_CONTINUE ); len = q - TxtBuff; if( *q == '\0' ) { /* an exact match */ nd->len = len; nd->th = th; return( WR_STOP ); } if( len > nd->len ) { nd->len = len; nd->th = th; } return( WR_CONTINUE ); }
static char *GetBPCmd( brkp *bp, brk_event event, char *buff, unsigned buff_len ) { char *cmds; char *cond; char *p; char *end = buff + buff_len ; cmds = cond = LIT_ENG( Empty ); if( bp != NULL ) { if( bp->cmds != NULL ) cmds = bp->cmds->buff; if( bp->condition != NULL ) cond = bp->condition; } p = Format( buff, "%s", GetCmdName( CMD_BREAK ) ); switch( event ) { case B_SET: *p++ = '/'; if( IS_BP_EXECUTE( bp->th ) ) { p = GetCmdEntry( PointNameTab, B_SET, p ); } else { p += GetMADTypeNameForCmd( bp->th, p, end - p ); *p++ = ' '; } if( bp->status.b.resume ) { *p++ = '/'; p = GetCmdEntry( PointNameTab, B_RESUME, p ); } if( !bp->status.b.active ) { *p++ = '/'; p = GetCmdEntry( PointNameTab, B_DEACTIVATE, p ); } *p++ = ' '; *p++ = '/'; p = GetCmdEntry( PointNameTab, B_INDEX, p ); p = Format( p, " %d, ", bp->index ); if( bp->loc.image_name != NULL ) { *p++ = '/'; p = GetCmdEntry( PointNameTab, B_UNMAPPED, p ); *p++ = ' '; *p++ = '/'; p = GetCmdEntry( PointNameTab, B_MAPADDRESS, p ); *p++ = ' '; p = StrCopy( bp->loc.image_name, p ); *p++ = ' '; p = AddHexSpec( p ); p = CnvULongHex( bp->loc.addr.mach.segment, p, end - p ); *p++ = ' '; p = AddHexSpec( p ); p = CnvULongHex( bp->loc.addr.mach.offset, p, end - p ); *p++ = ','; } else if( bp->image_name != NULL && bp->mod_name != NULL ) { *p++ = '/'; p = GetCmdEntry( PointNameTab, B_UNMAPPED, p ); *p++ = ' '; *p++ = '/'; p = GetCmdEntry( PointNameTab, B_SYMADDRESS, p ); *p++ = ' '; p = StrCopy( bp->image_name, p ); *p++ = ' '; p = StrCopy( bp->mod_name, p ); *p++ = ' '; p = StrCopy( bp->sym_name, p ); *p++ = ' '; p = AddHexSpec( p ); p = CnvULongHex( bp->cue_diff, p, end - p ); *p++ = ' '; p = AddHexSpec( p ); p = CnvULongHex( bp->addr_diff, p, end - p ); *p++ = ','; } else { p = AddrToString( &bp->loc.addr, MAF_FULL, p, end - p ); // p = Format( p, " %A", bp->loc.addr ); } p = Format( p, " {%s} {%s}", cmds, cond ); if( bp->initial_countdown != 0 ) { p = StrCopy( " ", p ); p = AddHexSpec( p ); p = CnvULongHex( bp->initial_countdown, p, end - p ); } return( p ); case B_CLEAR: case B_ACTIVATE: case B_DEACTIVATE: case B_RESUME: case B_UNRESUME: *p++ = '/'; p = GetCmdEntry( PointNameTab, event, p ); if( bp == NULL ) { p = StrCopy( "*", p ); } else { p = AddrToString( &bp->loc.addr, MAF_FULL, p, end - p ); // p = Format( p, " %A", bp->loc.addr ); } return( p ); } return( NULL ); }