Trick 69: Schiebereien mit der Maus  
                Feldinhalt manuell sinnvoll sortieren durch Verschieben mit Maus

Aufgabe: Im Feld #31 stehen 25 Schlagwörter, mit ; getrennt.
         Sieht ja chaotisch aus, Schnell mal eben sinnvoll umordnen!

Warum: Alphabetische Ordnung in einem Feld (s. Trick 56) ist leicht
       herzustellen, seit es den FLEX-Befehl  sort  gibt.
       Aber "sinnvolle Ordnung"?
       Mit Cut&Paste kann man das eine oder andere Schlagwort an
       eine andere Stelle verschieben, auf die Dauer ist das aber
       zeitraubend. Kann man sowas nicht heutzutage auch mit der Maus
       machen - wie in jedem vernünftigen Programm einfach rauf und
       runter verschieben oder so?

Lösung:
Genau das kann man machen, Und zwar mit aresqa! Vermutlich ist es
wenig bekannt: wenn man eine aresqa-Liste vor sich hat, kann man
jede Zeile mit der Maus ergreifen und beliebig verschieben. Sie wird
dann VOR diejenige Zeile geschoben, auf die man zeigt, im Moment des
Loslassens der linken Maustaste.

Prima, aber wie kriegt man den Feldinhalt von #31 (oder was immer es
sei) in eine aresqa-Liste? Und von da wieder zurück?
Man muß dafür sorgen, daß die zu ordnenden Elemente durch Zeilenwechsel
(Codes 13 10) getrennt sind. Das ist mit einer lokalen Ersetzung zu
lösen, aber es gibt subtile Klippen zu umschiffen dabei.
Damit es unter allen Umständen klappt, haben wir ein Unterprogramm
gemacht, das man leicht aufrufen kann. Als Vorbereitung muß man
den zu ordnenden Inhalt in  $fu  so bereitstellen, daß zwischen den
Elementen die Zeichenfolge %%% steht. Das Ergebnis kriegt man in $fs
zurück und kann die %%% wieder entsprechend zurückumwandeln.
(Warum %%%? Jede andere eindeutige (sonst nicht vorkommende) Zeichen-
folge würde es auch tun, also warum nicht diese?)
SonderBonus: In der aresqa-Liste kann man sogar jede Zeile bearbeiten:
einfach Balken drauf, Enter, Zeile bearbeiten, Enter.

Damit geht es dann folgendermaßen (statt #31 das Feld, um das es
bei Ihnen geht):

var #31
ins _; _;_
ins _;_%%%_
ins $fu
  Unterprog. f. manuelles Ordnen aufrufen:
perf feld-mord
var $fs
ins _%%%_; _
ins #31
...

include fsort.inc

---------------------------------------------------------------------

Hier ist die neue Unterprogrammdatei:
http://websvn.allegro-c.de/index/UBBS-Quelltexte/allegro/standard/flex/fsort.inc

Damit sich's aber lohnt, ist in  fsort.inc  auch gleich noch ein
Unterprogramm für das alphabetische Sortieren mit drin. Man ruft es
auf mit  perf feld-asort.

Und wie sieht es aus, das Unterprogramm  :feld-mord  für das
manuelle Ordnen? Gar nicht lang:

:feld-mord
mes Zeilen mit Maus verschieben, dann Liste mit OK speichern
var $fu
ins _%%%_^M^J_
  Liste zeigen, Nutzer kann sie bearbeiten
aresqa
  Wurde Esc gegeben? Dann $fu in $fs kopieren
if "" var $fu;ins $fs;return
  Bearbeitete Liste steht in aresqa.lst
var Faresqa.lst
ins _^M^J_%%%_
var (F"% ")
ins $fs
del aresqa.lst
return