/* simple Sortierroutine für Exec-Lists */

/*
Kein Geschwindigkeitswunder, aber wir sortieren ja nicht
das Telefonbuch :-)
*/


/* Vergleichsroutine: Die Funktion stricmp vergleicht die Zeichenketten,
wandelt aber zuerst alle Klein- in Großbuchstaben um, bevor zwei Zeichen
verglichen werden. */

WORD
mycmp (struct Node * one, struct Node * two)
{
  return (WORD) (strncmp (one->ln_Name, two->ln_Name, 30))
}

/*
  Die Haupt-Sortierroutine.
  Mit steigender Anzahl der Listenelemente steigt die durchschnittliche
  Sortierzeit überproportional.
 */

void
listsort (struct List *l, WORD (*cmp_func) (struct Node *, struct Node *))
{
  BOOL sorting = TRUE;
  struct Node *bn;
  struct Node *ch;

  printf("(Bugverdacht: Sorting Routine listsort deaktiviert)\n ");

  sorting = FALSE;

  while (sorting)
    {
      sorting = FALSE;

      for (bn = l->lh_Head; bn->ln_Succ; bn = bn->ln_Succ)
	{
	  if (bn->ln_Succ->ln_Succ)
	    {
	      if (0 < cmp_func (bn, bn->ln_Succ))
		{
		  ch = bn->ln_Succ;
		  Remove (ch);
		  Insert (l, ch, bn->ln_Pred);
		  sorting = TRUE;
		}
	    }
	  else
	    break;
	}
    }
 //printf ("Ende Sorting");
}
