/* SORT.C symbols in this file: 00080360 0060: _code_00080360 (0000) 000803C0 0050: _code_000803c0 (0000) 00080410 0150: _qsort_2byte (0000) 00080560 0140: _qsort_4byte (0000) */ /* ---------- headers */ #include "cseries.h" /* ---------- constants */ enum { QSORT_STACK_SIZE = 30, QSORT_CUTOFF = 8 }; /* ---------- macros */ /* ---------- structures */ /* ---------- prototypes */ static void code_00080360( word *hi, word *lo, boolean (*compare)(word, word)); static void code_000803c0( long *hi, long *lo, boolean (*compare)(long, long)); void qsort_2byte( word *elements, unsigned long element_count, boolean (*compare)(word, word)); void qsort_4byte( long *elements, unsigned long element_count, boolean (*compare)(long, long)); /* ---------- globals */ /* ---------- public code */ void qsort_2byte( word *elements, unsigned long element_count, boolean (*compare)(word, word)) { word *lo_stack[QSORT_STACK_SIZE]; word *hi_stack[QSORT_STACK_SIZE]; word *lo, *hi, *i, *j, *mid; long depth; unsigned long size; word temp; if (element_count<2) return; lo = elements; depth = 0; hi = elements+element_count-1; for (;;) { size = hi-lo+1; if (size<=QSORT_CUTOFF) { code_00080360(hi, lo, compare); } else { mid = lo+(size>>1); temp = *mid; *mid = *lo; *lo = temp; i = lo; j = hi+1; for (;;) { do { i++; } while (i<=hi && !compare(*i, *lo)); do { j--; } while (j>lo && compare(*j, *lo)); if (j=(char *)hi-(char *)i) { if (lo+1>1); temp = *mid; *mid = *lo; *lo = temp; i = lo; j = hi+1; for (;;) { do { i++; } while (i<=hi && !compare(*i, *lo)); do { j--; } while (j>lo && compare(*j, *lo)); if (j=(char *)hi-(char *)i) { if (lo+1lo) { best = lo; for (scan = lo+1; scan<=hi; scan++) { if (compare(*scan, *best)) best = scan; } temp = *best; *best = *hi; *hi = temp; hi--; } return; } static void code_000803c0( long *hi, long *lo, boolean (*compare)(long, long)) { long *best, *scan; long temp; while (hi>lo) { best = lo; for (scan = lo+1; scan<=hi; scan++) { if (compare(*scan, *best)) best = scan; } temp = *best; *best = *hi; *hi = temp; hi--; } return; }