<?php
// avanti Bibliotheksfunktion av_find()
// Datensatz oder -saetze holen, optional nur bestimmte Felder
// Doku: av_find.htm

include("av_core.php");   // enth. av_send()

// $recnums = "rn1,rn2,rn3,..."   oder   "rn1-rn2"  oder  find-Befehl, z.B. "PER shakesp?"
// $fields="fn1,fn2,fn3"
//   Kurzform av_fnd($recnums,$fields)  siehe unten

function av_find($fa)  // $fa = assoz. array
{
$recnums=$fa["cmd"];
$fields= $fa["fld"];
$param=  $fa["par"];

if(!isset($param) || $param=="") $param= "av-utf8"; 
if(in_array("max",$fa)) $maxn = $fa["max"]; else $maxn ="";
global $Server, $Port;

$bis=strstr($recnums,"-");
if($bis==false) $bis="";
else $bis=substr($bis,1)+1;
// Wenn - angegeben: Anzahl auf 50 begrenzen
if($bis-substr($recnums,1) > 50) 
{ $bis=substr($recnums,1)+50;
  echo "Es werden maximal 50 Sätze ausgegeben<br><p>";
}
if($bis=="" && $maxn!="") $bis=$maxn;

  // Kommas durch : ersetzen, wenn Suchbefehl mit # anfaengt:
if(!strncmp($recnums,"#",1)) $recnums=str_replace(",",":",$recnums);


// Job fuer avanti zusammenstellen:


$job = array(
              // FLEX-Befehle  ******************************
// zuerst Suchbefehl -> interne Variable #u2

"set U1",           // UTF-8 -> ASCII
"switch coding",    // keine Umwandl. ANSI -> ASCII
"var '$recnums'",
"ins #u2",
"set U0",           // UTF-8 -> ASCII wieder aus
// #u2 gibt es immer! enthaelt jetzt Suchbefehl in ASCII, kopieren in #urn
"var #u2",
"ins #urn",
"var '$fields'",
"ins #ufn",
"xport p $param",
"if no jump perr",


"var 'T' '$recnums'",   // # moeglicherweise jetzt in #urn verschwunden
"if not ='T#' jump findcom",
"var #urn(f'#')",
"ins #urn",

"var '$bis'",
"ins #ure",
"if #ure jump range",


":loop",
// "wri 'Suche jetzt Satz ' #urn(e':') n",
// "wri 'urn=' #urn '<br>' n",

"var '#' #urn(e':')",

"find",
// "if error jump notf",
"if not #ufn dow",
"if #ufn perf fields",
"jump nxtrec",
":notf",
"wri 'Sorry, not found: ' #urn(e':') n ",
":nxtrec",
"var #urn(b':')",
"ins #urn",
"wri '$$$' n",
"if #urn jump loop",
"end",

":fields",
"var #ufn",
"ins #uff",
"wri i n",     // Satznummmer zuerst
":fld",
"dow wX",         // Export bei Sprungmarke #-X in $param
"wri #uff(e',')",
"dow w0",
"wri n",
"var #uff(b',')",
"ins #uff",
"if #uff jump fld",
"return",

"var #urn(b',')",
"ins #urn",
"if #urn wri n '$$$' n",
"if #urn jump fields",
"end",

"end",

":perr",
"wri 'Sorry, problem with parameters $param' n",
"end",

":range",
"var #urn(e'-')",
"ins #urn",
":rlo",
"var '#' #urn",
"find",
// "if error jump nof",
"if not #ufn dow",
"if #ufn perf fields",
"wri '$$$' n",
"var #urn",
"=",
"var '1'",
"+",
"var Z",
"ins #urn",
"var #urn",
"if <$bis jump rlo",
"end",

":findcom",   // normal find command
"var #urn",
"find",       // ausfuehren
"if l1 jump :nof",
"dow set",  //Erg.Menge als Ganzes exportieren

/*
"get first",
":floop",
"if not #ufn dow",
"if #ufn perf fields",
"get next",
"if no end",
"wri '$$$' n",
"jump floop",
*/

"end",

":nof",
"wri 'Sorry, record ' #urn 'not found.' n",
"end"
);      // Ende der FLEX-Befehle **********************

// Job senden (jetzt enthalten in der Variablen $job)
return av_send($job);  // Rueckgabe ist array von Zeilen

}


function av_fnd($recnums,$fields="")   // Kurzform
{
   $fa = array("cmd" => $recnums,
               "fld" => $fields,
            );
   return av_find($fa);
}


?>