static int SortByAddr( heap_list **p1, heap_list **p2 ) { DWORD b1,b2; if( !ListingDPMI ) { b1 = (*p1)->info.ge.dwAddress; b2 = (*p2)->info.ge.dwAddress; } else { descriptor *d1,*d2; d1 = &((*p1)->info.mem.desc); d2 = &((*p2)->info.mem.desc); b1 = GET_DESC_BASE( *d1 ); b2 = GET_DESC_BASE( *d2 ); } if( b1 < b2 ) return( -1 ); if( b1 > b2 ) return( 1 ); return( 0 ); } /* SortByAddr */
/* * FormatSel - format selector info */ static void FormatSel( char *which, WORD sel, char *buff ) { descriptor desc; DWORD base; DWORD limit; buff[ 0 ] = 0; _buff = buff; GetADescriptor( sel, &desc ); if( which != NULL ) { AddToBuff( " %s = %04x ", which, sel ); if( sel == 0L ) { AddToBuff( "******** ******** **** **** * *** *\n" ); return; } } else { AddToBuff( " %04x ", sel ); } base = GET_DESC_BASE( desc ); limit = GET_DESC_LIMIT( desc ); AddToBuff( "%08lx %08lx ", base, limit ); if( desc.granularity ) { AddToBuff( "page " ); } else { AddToBuff( "byte " ); } if( desc.type == 2 ) { AddToBuff( "data " ); } else { AddToBuff( "code " ); } AddToBuff( "%1d ", (WORD) desc.dpl ); if( desc.type == 2 ) { AddToBuff( "R" ); if( desc.writeable_or_readable ) AddToBuff( "/W" ); else AddToBuff( " " ); AddToBuff( " " ); } else { AddToBuff( "Ex" ); if( desc.writeable_or_readable ) AddToBuff( "/R" ); else AddToBuff( " " ); AddToBuff( " " ); } if( desc.big_or_default ) { AddToBuff( "Y" ); } else { AddToBuff( " " ); } } /* FormatSel */
/* * memDumpHeader - put summary information at the top of a memory dump */ static void memDumpHeader( int hdl, MemWndInfo *info ) { time_t tm; char buf[80]; unsigned len; unsigned type_index; char *rcstr; #ifndef __NT__ GLOBALENTRY ge; descriptor desc; char access[20]; #endif tm = time( NULL ); RCsprintf( buf, MWND_MEM_DMP_CREATED, asctime( localtime( &tm ) ), &len ); write( hdl, buf, len ); #ifndef __NT__ if( info->isdpmi ) { rcstr = AllocRCString( MWND_DPMI_ITEM ); len = strlen( rcstr ); write( hdl, rcstr, len ); FreeRCString( rcstr ); GetADescriptor( info->sel, &desc ); RCsprintf( buf, MWND_SELECTOR, info->sel, &len ); write( hdl, buf, len ); RCsprintf( buf, MWND_BASE, GET_DESC_BASE( desc ), &len ); write( hdl, buf, len ); RCsprintf( buf, MWND_LIMIT, GET_DESC_LIMIT( desc), &len ); write( hdl, buf, len ); if( desc.type == 2 ) { RCsprintf( buf, MWND_TYPE_DATA, &len ); } else { RCsprintf( buf, MWND_TYPE_CODE, &len ); } write( hdl, buf, len ); sprintf( buf, "DPL: \t%1d\n%n", desc.dpl, &len ); write( hdl, buf, len ); if( desc.granularity ) { RCsprintf( buf, MWND_GRANULARITY_PAGE, &len ); } else { RCsprintf( buf, MWND_GRANULARITY_BYTE, &len ); } write( hdl, buf, len ); createAccessString( access, &desc ); RCsprintf( buf, MWND_ACCESS, access, &len ); write( hdl, buf, len ); } else { ge.dwSize = sizeof( GLOBALENTRY ); GlobalEntryHandle( &ge, (HGLOBAL)info->sel ); RCsprintf( buf, MWND_BLOCK_ADDR, ge.dwAddress, &len ); write( hdl, buf, len ); RCsprintf( buf, MWND_BLOCK_HDL, ge.hBlock, &len ); write( hdl, buf, len ); RCsprintf( buf, MWND_BLOCK_SIZE, ge.dwBlockSize, &len ); write( hdl, buf, len ); RCsprintf( buf, MWND_LOCK_CNT, ge.wcLock, &len ); write( hdl, buf, len ); RCsprintf( buf, MWND_PAGE_LOCK_CNT, ge.wcPageLock, &len ); write( hdl, buf, len ); } #endif type_index = info->disp_type - MEMINFO_BYTE; rcstr = AllocRCString( Disp_Types[type_index] ); sprintf( buf, "%s\n\n%n", rcstr, &len ); FreeRCString( rcstr ); write( hdl, buf, len ); } /* MemDumpHeader */