#include #include typedef struct DESC_STRUCT { char desc[60]; char date[13]; long incident_no; char user[9]; int status; } desc_struct; #define NRECS 1000 desc_struct desc_array[NRECS]; static void show_array(int kount) { int i = 0; while (i < kount) { (void) printf("'%s' '%s' %5ld\n",desc_array[i].desc,desc_array[i].date, desc_array[i].incident_no); ++i; } return; } /* show_array */ static int compare_desc_structs(const void *a, const void *b) { desc_struct *pa = (desc_struct *) a, *pb = (desc_struct *) b; int diff = 0; long ldiff = 0L; ldiff = strcmp(pa->date,pb->date); if (ldiff == 0L) { ldiff = pa->incident_no - pb->incident_no; } if (ldiff != 0L) diff = (ldiff < 0L) ? -1 : 1; return(diff); } /* compare_desc_structs */ #define STOP 200 static int load_array() { int i = 0; desc_struct *p = NULL; while (i < STOP) { p = &(desc_array[i]); (void) sprintf(p->desc,"Test Description %05d",i + 1); (void) sprintf(p->date,"020131%02d%02d00",i / 60,i % 60); p->incident_no = (long) 1000 + i; (void) sprintf(p->user,"mmouse"); p->status = i % 10; ++i; } /* while */ return(i); } /* load_array */ int main() { int cc = 0,count = 0; count = load_array(); cc = (count > 0) ? 0 : 255; (void) printf("BEFORE\n"); show_array(count); qsort((void *) desc_array,(size_t) count,sizeof(desc_struct), compare_desc_structs); (void) printf("AFTER\n"); show_array(count); return(cc); } /* main */