 ;MDOC
 ;&---------------------------------------------------------------------------
$Package ModPar
$Modul MP-FINDM:2009-09-06
 ;
 ;FKT:		Volltextsuche mit Export-Manipulationsbefehlen

 ;&---------------------------------------------------------------------------
 ;(C)		Anando Eger 2008-2009
 ;		Kritiken/Korrekturen/Hinweise an a.eger@aneg-dv.de

 ;todo:		- Syntaxprüfung der eingegebenen Manipulationsbefehlsfolge
 ;		- Prüfung auf gültige Kategorie
 ; 		  (display p setzt kein Fehlerflag zur Auswertung)
 ;
 ;HIST:		aneg: 2009-09-06 auf Ergebnismenge erweitert

 
 ;&
 +---------------------------------------------------------------------------+
 | Anzeigeparameter retten						     |
 |---------------------------------------------------------------------------|
 | Erläuterungen anzeigen						     |
 ;&
 
var #nr\ins $NR
var a\ins $anzeige

var "\\par\\tab Alle Datensätze einer Datenbank oder Egebnismenge ermitteln,"
var +"\\par\\tab die eine Kategorie mit gewünschten Bedingungen enthalten."
var +"\\par\\par\\par\\tab Die Bedingung wird als Export-Manipulationsbefehl"
var +"\\par\\tab formuliert. Wenn der Manipulationsbefehl ausgeführt"
var +"\\par\\tab werden kann bzw. ein positives Ergebnis ergibt, gilt"
var +"\\par\\tab der Test als erfolgreich und der gefundene Satz wird "
var +"\\par\\tab in die Ergebnismenge aufgenommen."
var +"\\par "
var +"\\par\\tab An den Manipulationsbefehl wird automatisch ' e0' angehängt"
var +"\\par"\ins $dis\show IV\keycheck

 ;&
 |---------------------------------------------------------------------------|
 |   | ! solange Leereingabe                  				     |
 |   |   +-------------------------------------------------------------------|
 |   |   | Kategorie abfragen						     |
 ;&
:MP-FINDM_01
var "Kategorienummer:=" $MP_FINDM_kat\ask
if can jump MP-FINDM_Ende
if "" jump MP-FINDM_01
ins $MP_FINDM_kat\var (B"#")\ins $MP_FINDM_kat\if "" jump MP-FINDM_01

 ;&
 |   |-----------------------------------------------------------------------|
 |   | ! solange Leereingabe                  				     |
 |   |   +-------------------------------------------------------------------|
 |   |   | Manipulationsbefehle abfragen				     |
 ;&
:MP-FINDM_02
var "Manipulationsbefehlskette:=" $MP_FIND_cmd\ask
if can jump MP-FINDM_Ende
if "" jump MP-FINDM_02
ins $MP_FIND_cmd

 ;&
 |   +-----------------------------------------------------------------------|
 | ! solange Eingaben nicht für gut befunden                                 |
 ;&
var "#" $MP_FINDM_kat " " $MP_FIND_cmd " o.k.?"
yesno
if can jump MP-FINDM_Ende
if no jump MP-FINDM_01

 ;&
 |---------------------------------------------------------------------------|
 | ? | Ergebnismenge aktiv						     |
 |---+-----------------------------------------------------------------------|
 | j | auf Wunsch First/Next-Modifikatorflag setzen                          |
 ;&

if l1 jump MP-FINDM_OpenTmpPar
yesno Aktuelle Ergebnismenge verwenden
if yes var "1";ins $em
if can jump MP-FINDM_Ende

 ;&
 |---------------------------------------------------------------------------|
 | Dateinamen der temp. Datei erstellen 				     |
 |---------------------------------------------------------------------------|
 | ? | Parameterdatei zum Schreiben öffnen o.k.				     |
 |---+-----------------------------------------------------------------------|
 | n | Fehlermeldung 
 ;&
:MP-FINDM_OpenTmpPar
var W "\\MP-FINDM_tmp.apr"\ins $apr\open x
if no var "kann " $apr " nicht zum Schreiben öffnen";mes;jump MP-FINDM_Ende

 ;&
 |---+-----------------------------------------------------------------------|
 | j | Parameterdatei mit Kategorie und Manipulationsbefehlen schreiben      |
 |   |-----------------------------------------------------------------------|
 |   | Parameterdatei schließen						     |
 ;&
var '#nr drs e0' n\write
var "#" $MP_FINDM_kat " +O " $MP_FIND_cmd " e0" n\write

 ; #usr wird gesetzt, wenn Manipulationsbefehle Sprung auslösen

var "#+#" n "#-O" n '#nr "1!" e"!" ars' n "#+#" n\write
close x\sleep 1
 ;&
 |   |-----------------------------------------------------------------------|
 |   | ? | Parameterdatei als Anzeigeparameter laden erfolgreich	     |
 |   |---+-------------------------------------------------------------------|
 |   | n | Fehlermeldung 						     |
 |   |---+-------------------------------------------------------------------|
 |   | j | Vorbereitung der Zähler					     |
 |   |   |-------------------------------------------------------------------|
 |   |   | Suchbefehle in Anzeige schreiben				     |
 ;&

var $apr\fsize\if no mes "kann " $par " nicht lesen";mes;jump MP-FINDM_Ende

  ; Falls in den Parametern jetzt Mist steht, bricht a99 V29.9 ab - und
  ; löscht die Datei !!!
  
var $apr\dis p
var "0"\z=\Z=
var $dis "\\par\\tab "
var +"Gesucht wird "
if $em var +"in der akt. Ergebnismenge "
if not $em var +"in der Datenbank "
var + "nach: #" $MP_FINDM_kat " " $MP_FIND_cmd "\\par" n
var +"\\tab Abbruch mit <ESC> möglich\\par" n
ins $dis\sho IV

 ;&
 |   |   |-------------------------------------------------------------------|
 |   |   | ? | Ergebnismengendatei anlegen o.k.				     |
 |   |   |---+---------------------------------------------------------------|
 |   |   | n | Fehlermeldung                   				     |
 ;&
var W "\\MP-FINDM_res.set"\ins $res\open x
if no var "kann " $res " nicht zum Schreiben öffnen";mes;jump MP-FINDM_Ende

 ;&
 |   |   |---+---------------------------------------------------------------|
 |   |   | j | Kopfzeile schreiben             				     |
 |   |   |   |---------------------------------------------------------------|
 |   |   |   | ersten Satz laden               				     |
 ;&
var "Fundstellen #" $MP_FINDM_kat " " $MP_FIND_cmd n\write
if $em first
if not $em first #

 ;&
 |   |   |   |---------------------------------------------------------------|
 |   |   |   |   | ? | Bedingung erfüllt       				     |
 |   |   |   |   |---+-------------------------------------------------------|
 |   |   |   |   | j | Satznummer in Ergebnismengendatei		     |
 |   |   |   |   |   |-------------------------------------------------------|
 |   |   |   |   |   | Fund zählen / Info ausgeben			     |
 |   |   |   |   +-----------------------------------------------------------|
 |   |   |   | ! solange noch nächster Satz verfügbar & nicht Abbruch	     |
 ;&
:MP-FINDM_LoopStart
deposit\if not #urs jump MP-FINDM_Nothing
var #nr n\write\z+1

:MP-FINDM_Nothing
Z+1\var $dis "\\par\\tab " Z " durchsucht, " z " gefunden"\show IV
keycheck\if yes jump MP-FINDM_LoopExit
if not $em next #;if yes jump MP-FINDM_LoopStart
if $em next;if yes jump MP-FINDM_LoopStart

 ;&
 |   |   |   |---------------------------------------------------------------|
 |   |   |   | Ergebnismengendatei schließen \ Anzeigeparameter restaurieren |   				     |
 ;&
:MP-FINDM_LoopExit
close x

 ;&
 |---------------------------------------------------------------------------|
 | ? | Ergebnisse vorhanden						     |
 |---+-----------------------------------------------------------------------|
 | j | Ergebnismenge anzeigen						     |
 ;&
if z<1 mes nichts gefunden;jump MP-FINDM_Ende
var $res\read set\var $anzeige\dis p\sho list

 ;&
 +---------------------------------------------------------------------------+
 ;&
:MP-FINDM_Ende
var "#" $NR\f1nd\var $anzeige\dis p
end

