home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9202 / borhot / qs.c < prev    next >
C/C++ Source or Header  |  1991-11-28  |  2KB  |  74 lines

  1. /* ------------------------------------------------------ */
  2. /*                       QS.C                             */
  3. /*            Sorting arrays of structures                */
  4. /*            (c) 1990 Borland International              */
  5. /*                 All rights reserved.                   */
  6. /* ------------------------------------------------------ */
  7. /*  veröffentlicht in: DOS toolbox 1'91/92                */
  8. /* ------------------------------------------------------ */
  9.  
  10. /*
  11.   The following code demonstrates how to use qsort() to sort
  12.   an array of structures. After entering this small program,
  13.   step through it with the IDE debugger, placing a watch on
  14.   the variables in sort_function() to better understand what
  15.   is happening.
  16. */
  17.  
  18. #include <stdio.h>        // for printf()
  19. #include <stdlib.h>       // for qsort()
  20. #include <string.h>       // for strcmp()
  21. #include <dos.h>          // for MK_FP()
  22.  
  23. int sort_function(const void *a, const void *b);
  24.  
  25. struct foo {
  26.   char *c;
  27.   int  xx;
  28. };
  29.  
  30. struct foo *list[4];
  31. struct foo a1 = {"cat",3 };
  32. struct foo a2 = {"cab",3};
  33. struct foo a3 = {"cap",2 };
  34. struct foo a4 = {"cal",1 };
  35.  
  36. // ------------------------------------------------------- *
  37. int main(void)
  38. {
  39.   int  x;
  40.   list[0] = &a1;
  41.   list[1] = &a2;
  42.   list[2] = &a3;
  43.   list[3] = &a4;
  44.  
  45.   qsort((void *) list, 4, sizeof(list[0]), sort_function);
  46.   for (x = 0; x < 4; x++)
  47.     printf("%s\n", list[x]->c);
  48.   return 0;
  49. } // end of main()
  50.  
  51. /* ------------------------------------------------------ */
  52. /*  sort_function -                                       */
  53. /* ------------------------------------------------------ */
  54.  
  55. int sort_function(const void *a, const void *b) {
  56.   unsigned int aa, bb;    // Will be used for offset address
  57.   struct   foo *ap,*bp;
  58.  
  59.   aa = *(unsigned*) a;    // a and b point to an address
  60.                           // which in turn
  61.   bb = *(unsigned*) b;    // points to the offset address of
  62.                           // the struct
  63.  
  64.                      // Make a far pointer to struct address
  65.  
  66.   ap = (struct foo*) MK_FP(_DS, aa);
  67.   bp = (struct foo*) MK_FP(_DS, bb);
  68.  
  69.   return(strcmp(ap->c,bp->c));
  70. } // end of sort_function()
  71. /* ------------------------------------------------------ */
  72. /*                     Ende von QS.C                      */
  73.  
  74.