/* CMP contains standrd comparison functions for use with qsort */ #include #include #include #include"cmp.h" int icmp( const void *A, const void *B ){ int *a = (int*)A; int *b = (int*)B; return *a-*b; } int licmp( signed long int *a,signed long int *b) { return *a-*b; } int Icmp(a,b) int **a, **b; { return **a - **b; } int fcmp(const void *a, const void *b) { float *A = (float*)a, *B = (float*)b; float x = *A - *B; if ( x > 0.0 ) return 1; else if ( x < 0.0 ) return -1; else return 0; } int lfcmp(const void *a, const void *b) { double *A = (double*)a, *B = (double*)b; double x = *A - *B; if ( x > 0.0 ) return 1; else if ( x < 0.0 ) return -1; else return 0; } int Fcmp(a,b) float **a, **b; { return fcmp(*a,*b); } int Rstrcmp(a,b) /* string comparison with strings reversed, case insensitive */ char *a, *b; { int la = strlen(a)-1; int lb = strlen(b)-1; int n; while ( la && lb ) { if (n = ( ((int)a[la--]) - ((int)b[lb--]) ) ) return n; } return la-lb; } int Strcmp(a,b) char **a, **b; { return strcmp(*a,*b); } /* a version of strcmp which works with null strings */ int nStrcmp(a, b ) char *a, *b; { if ( a && b ) return strcmp(a,b); else return 0; } int SStrcmp(a,b) char ***a, ***b; { return Strcmp(*a,*b); } int uscmp(a,b) unsigned short *a, *b; { return (int)(*a-*b); }