<?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"];
if(in_array("par",$fa)) $param= $fa["par"]; else $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);
}
?>