paarweise Sortierung

Sortierung muss paarweise erfolgen, weil der MAND
gelegentlich ein Array zurueckliefert, in dem bei
der bisherigen Sortierweise die eigentlich zusammengehoerigen
Elemente nicht zusammenbleiben. Daher muss nach dem
jeweils ersten Element eines Wertepaars sortiert werden.

Change-Id: Ibfdcb362b0e25b4dcfd69a94ee909c2b8bb7c63d
diff --git a/std/shells/magier/fileview.c b/std/shells/magier/fileview.c
index 0db06f6..beeab8f 100644
--- a/std/shells/magier/fileview.c
+++ b/std/shells/magier/fileview.c
@@ -409,6 +409,35 @@
 //############################### MAN ###################################
 //                              #######
 
+/* Sortiert ein Array paarweise, wobei von jedem Wertepaar der erste Wert
+   fuer die Sortierung herangezogen wird. */
+private string* SortInPairs(string* arr) {
+  if (!sizeof(arr))
+    return arr;
+
+  string** helper = ({});
+
+  /* In Sub-Arrays zerlegen, die jeweils ein Wertepaart enthalten:
+     ({s0, s1, s2, s3}) => ({({s0,s1}), ({s2,s3})}) */
+  int listsize = sizeof(arr);
+  for(int i ; i<listsize ; i+=2) {
+    helper += ({ arr[i..i+1] });
+  }
+
+  // Nach dem ersten Element jedes Sub-Arrays sortieren.
+  helper = sort_array(helper, function int (string* h1, string* h2) {
+              return lower_case(h1[0]) > lower_case(h2[0]);
+            });
+
+  // Eingabe-Array loeschen und aus den sortierten Wertepaaren neu aufbauen.
+  arr = ({});
+  foreach(string* h : helper) {
+    arr += h;
+  }
+
+  return arr;
+}
+
 static int _man(string cmdline)
 {
   int i, flags;
@@ -465,12 +494,7 @@
     input = ({string *})MAND->locate(args[0], flags&(MAN_M|MAN_R));
     // Sortierung case-insensitive, ggf. vorhandene Pfade dabei ignorieren
     // Wird fuer die spaetere Ausgabe der Liste benoetigt.
-    input = sort_array(input, function int (string t1, string t2)
-            {
-              t1 = explode(t1, "/")[<1];
-              t2 = explode(t2, "/")[<1];
-              return lower_case(t1) > lower_case(t2);
-            });
+    input = SortInPairs(input);
   }
 
   /* Alte Such-Treffer werden entsorgt. */