Type of callback function used to compare two items of the sorted data according to the specified criterium.
A special pseudofunction called AUTOARRANGE indicates that sorted data is autoarrangeable. AUTOARRANGE is defined as ((SORTFUNC *)1).
typedef int SORTFUNC(const t_sorthdr *sh1,const t_sorthdr *sh2,const int sort);
Parameters:
sh1
(In) Pointer to the first data item
sh2
(In) Pointer to the second data item
sort
(In) Sorting criterium. This is the zero-based index of the column on the screen
Return values:
This function should return -1 if item pointed to by sh1 is "less" than sh2, +1 if sh1 is "larger" and 0 if sh1 and sh2 are "equal"
Example:
This is the original code of the sorting function used by the module table:
int Modulesortfunc(const t_sorthdr *sh1,const t_sorthdr *sh2,const int sort) {
int i=0;
ulong t1,t2;
t_module *mod1,*mod2;
mod1=(t_module *)sh1;
mod2=(t_module *)sh2;
if (sort==1) { // Sort by module size, largest first
if (mod1->size>mod2->size) i=-1;
else if (mod1->size<mod2->size) i=1; }
else if (sort==2) { // Sort by address of entry point
if (mod1->entry<mod2->entry) i=-1;
else if (mod1->entry>mod2->entry) i=1; }
else if (sort==3) // Sort by short module name
i=_wcsicmp(mod1->modname,mod2->modname);
else if (sort==4) { // Sort by module type
t1=mod1->type & (MOD_NETAPP|MOD_HIDDEN);
t2=mod2->type & (MOD_NETAPP|MOD_HIDDEN);
if (t1>t2) i=-1;
else if (t1<t2) i=1; }
else if (sort==6) // Sort by full path
i=_wcsicmp(mod1->path,mod2->path);
if (i==0) { // Additionally sort by base address
if (mod1->base<mod2->base) i=-1;
else if (mod1->base>mod2->base) i=1; };
return i;
};
int Modulesortfunc(const t_sorthdr *sh1,const t_sorthdr *sh2,const int sort) {
int i=0;
ulong t1,t2;
t_module *mod1,*mod2;
mod1=(t_module *)sh1;
mod2=(t_module *)sh2;
if (sort==1) { // Sort by module size, largest first
if (mod1->size>mod2->size) i=-1;
else if (mod1->size<mod2->size) i=1; }
else if (sort==2) { // Sort by address of entry point
if (mod1->entry<mod2->entry) i=-1;
else if (mod1->entry>mod2->entry) i=1; }
else if (sort==3) // Sort by short module name
i=_wcsicmp(mod1->modname,mod2->modname);
else if (sort==4) { // Sort by module type
t1=mod1->type & (MOD_NETAPP|MOD_HIDDEN);
t2=mod2->type & (MOD_NETAPP|MOD_HIDDEN);
if (t1>t2) i=-1;
else if (t1<t2) i=1; }
else if (sort==6) // Sort by full path
i=_wcsicmp(mod1->path,mod2->path);
if (i==0) { // Additionally sort by base address
if (mod1->base<mod2->base) i=-1;
else if (mod1->base>mod2->base) i=1; };
return i;
};
See also: