`Register` 

if-Befehle : Bedingungsprüfungen    

Das allgemeine Schema der Bedingungsprüfungen ist 
 
if bedingung command     acon 
	Wenn die  bedingung   erfüllt ist, wird command  ausgeführt. (Fehlt command , geschieht nichts.)  
	Es kann sich bei command  auch um einen weiteren if-Befehl handeln, d.h. man kann mehrere Bedingungen hintereinander prüfen, und nur wenn sie alle zutreffen, wird der Befehl ausgeführt. 
Hinweis auf einen Mangel: Ein  else  gibt es nicht. Ggfls. verwendet man einen  jump  nach woanders, dann hat die nachfolgende Zeile die Wirkung, die man mit  else  erzielen würde. Oder man macht zwei Befehle: 
if bedingung command1      
if not bedingung command2   
	 Aber bedenken, ob nicht  command1  die  bedingung  verändern könnte.

Ab V25.2 kann command aus mehreren Befehlen bestehen,  die alle auf derselben Zeile stehen und durch  ;   getrennt sein müssen. Das gilt für alle nachfolgend beschriebenen Fälle, ab V29.5 auch für acon. Aber Vorsicht: Schiefgehen kann das, wenn einer der Befehle ein  perform   oder ein    write  oder  var  mit Manipulationen ist; dann lieber mit  jump  zu einem eigenen Abschnitt springen oder ein Unterprogramm machen und dieses mit  perform  ablaufen lassen. (Wobei leider in einem Unterprogramm kein weiteres  perform  stehen kann.)

Hinweise:  Unbedingt auf die Schreibweise achten!  Z.B.muß es  if Help  heißen - d.h.  if help  geht nicht! 
Die Bedingungswörter können, soweit es eindeutig ist, alle bis auf das erste Zeichen verkürzt werden, d.h.  if H   geht auch.

Jede Bedingung kann durch vorgesetztes  not  in ihr Gegenteil verkehrt werden:
if not bedingung command     acon 
	d.h. wenn die bedingung  nicht erfüllt ist, wird command ausgeführt. 

command  kann jeweils auch ein weiterer  if-Befehl sein! 
  
Nun zu den einzelnen Bedingungen. Dabei handelt es sich um festgelegte Ausdrücke, bis auf den ersten Typ.
Mit acon sind diejenigen markiert, die auch für das Konsolprogramm  acon  gelten, denn dieses bearbeitet für acon die Jobs.  

Prüfung des Vorhandenseins von Datenfeldern und Variablen
if #nnn command    acon 
if #nnn$a command     acon ab V28.8
	Wenn #nnn bzw. Unterfeld a in #nnn existiert (besetzt ist), wird command ausgeführt, 
 
if #nn. command    acon
if #n.. command    acon
	Wenn ein Feld #nnx  bzw. ein  #nxx  existiert (x beliebig), wird command ausgeführt; auch hier kann man $a anhängen 

if $abc command   [ab V26]     acon
	Wenn die Variable  $abc  belegt ist, wird command ausgeführt. 

Prüfung des Ergebnisses eines vorangegangenen Befehls
Die nächsten drei Befehle können in vielen Fällen benutzt werden, um das Ergebnis des vorangegangenen Befehls zu checken. 
In den Befehlsbeschreibungen ist jeweils vermerkt, wie  yes/no/cancel  in dem Zusammenhang zu verstehen sind.  

if yes command    [gleichwertig: if ok...]      acon 
	Ging z.B. eine `yesno`-Frage voran und wurde sie mit "Ja" beantwortet, dann wird command  ausgeführt.
 
if no command     acon         oder gleichwertig: 
if error command  acon 
	Ging z.B. eine `yesno`-Frage voran und wurde sie mit "Nein" beantwortet, dann wird command  ausgeführt.
	Hinweis: acon kennt eine Anzahl von besonderen `Fehlerprüfungen`. 
 
if cancel command 
	Ging z.B. eine `yesno`-Frage voran und wurde sie mit "Abbrechen" beantwortet, dann wird command  ausgeführt.  
	Diese Bedingung tritt auch in anderen Situationen auf, etwa beim Lesen aus Dateien oder bei Nutzereingaben mit ask oder form.

Prüfungen auf Gleichheit/Ungleichheit oder Vorkommen von Zeichen(folgen) 

if z>N command        acon
if z=N command 
if z<N command 
	Wenn der `interne Zähler`  größer  bzw. gleich bzw. kleiner als die Zahl N ist, wird command ausgeführt. N  und iz werden für den Vergleich als Dezimalzahlen behandelt! 
 
if Z>N command        acon
if Z=N command 
if Z<N command 
	Wenn die `interne Zahl`  größer  bzw. gleich bzw. kleiner als N ist, wird command ausgeführt. N  und  iZ werden als Dezimalzahl behandelt. 
 
if >N command        acon
if =N command 
if <N command 
	Wenn die `iV `als Zahl größer bzw. gleich  bzw. kleiner als  N  ist, wird command ausgeführt. 
Mit der `iZ` hat das nichts zu tun. Will man diese prüfen, dann zuerst in die iV kopieren mit  var Z  - oder siehe oben!
 
if >"abc" command        acon
if <"abc" command 
	Wenn die `iV `als Zeichenfolge alphanumerisch größer  bzw. kleiner als "abc" ist, wird command  ausgeführt. 
Achtung : hier als Begrenzer nur " erlaubt, nicht ' . 
 
if >#nnn command        acon: Leider etwas anders, `siehe unten`
if <#nnn command 
	Wenn die `iV ` größer  bzw. kleiner als der Inhalt von #nnn  ist, wird command ausgeführt. 
Wenn der Inhalt von #nnn in "..." eingeschlossen ist (d.h. die Anführungszeichen müssen mit in #nnn stehen), wird alphanumerisch verglichen, sonst numerisch. 
 
if "xyz" command  oder  if 'xyz' command        acon
if "~xyz" command  oder  if '~xyz' command       acon
Wenn die iV mit xyz anfängt, wird command ausgeführt. Soll der Inhalt einer Kategorie oder eines Unterfelds abgeprüft werden, bringt man diesen Inhalt zunächst mit `var` ... in die iV und wendet darauf dann if "xyz" an. Hat man  ~  gesetzt, erfolgt der Vergleich ohne Berücksichtigung von Groß- und Kleinschreibung. 
Hinweise: Maskierung einzelner Zeichen gibt es hierbei nicht. 
		   Vor dem " bzw. ' kann ein '=' stehen, das macht keinen Unterschied.
Wichtiger Sonderfall: Mit if "" ... kann man prüfen, ob die iV leer ist 
(z.B. nach `ask` oder nach var #nnn oder var $name ) 

	Beispiel: Wenn die in der INI-Datei eingestellte Sprache Englisch ist, mache unter der Sprungmarke  :engl  weiter
var L 
if "~eng" jump engl 

if =#nnn command    (vgl. oben den Befehl  if #nnn ... : nicht dasselbe!) 
if =$abc command    (vgl. oben den Befehl  if $abc ... : nicht dasselbe!) 
	acon : etwas anders, außerdem sind $-Variablen nicht zulässig, mehr `siehe unten`
Wenn die iV mit dem Anfang des Inhalts von #nnn bzw. $abc  übereinstimmt, wird command  ausgeführt. 
Beginnt der Inhalt von #nnn mit ~, wird ohne Rücksicht auf Groß-/Kleinschreibung verglichen, siehe oben. 
#nnn kann eine Kategorie oder eine #u-Variable sein, $abc irgendeine freie Variable. 
Achtung : bei der Variante if "xyz" ist es etwas anders: dort muß die iV mit "xyz" beginnen (die iV kann aber länger sein), hier muß #nnn mit dem Inhalt der iV beginnen (aber #nnn kann länger sein). 
 
if %%abc%% command         acon 
if %%~abc%%% command         acon 
Wenn die iV die Zeichenfolge abc enthält, wird command  ausgeführt. (Siehe auch unten if _abc_ )  
Ist ~ gesetzt, findet der Vergleich ohne Rücksicht auf Groß-/Klein statt, jedoch klappt das nur mit Grundbuchstaben, nicht mit Umlauten etc. 
Nützlich ist das z.B. dann, wenn der Inhalt der iV mit  `fetch` eingelesen wurde.  
Hinweis: Wenn man prüfen will, ob der Inhalt einer #u-Variablen  #uxy  in der iV vorkommt, kann man so vorgehen: 
var +"Z"         (um es abzufangen, wenn #uxy ganz am Ende der iV steht, weil b"..." dann leer wäre)
var (b"#uxy")             (`Mehr  dazu`)
if not "" command

Hinweis: Eine Möglichkeit der Maskierung gibt es hier nicht, aber beim nächsten Befehl:

Tip: Besser ist in diesem und im nächsten Fall die Suchfunktion `srx`  mit RegEx-Suchtechnik. Sie ermöglicht u.a. auch das Suchen nach nicht druckbaren Sonderzeichen sowie variable Maskierung.
 
if _abc_ command         acon
Wenn der aktuelle, gesamte Datensatz die exakte Zeichenfolge  abc  enthält, wird command  ausgeführt. 
Mit ? kann man einzelne Zeichen maskieren. Wenn in der Zeichenfolge ein Unterstrich auftritt, kann man if ,..., schreiben. 
(Siehe auch oben   if %%...%% ) 
Hinweis: Besser ist  `find _xyz_`, weil dabei die Groß-Kleinschreibung nicht exakt stimmen muß. 
 
if *#nnn_abc_ command       acon
Wenn Kategorie #nnn im aktuellen Datensatz die exakte Zeichenfolge abc enthält, wird command ausgeführt. 
Hier kann #nnn keine #u-Variable sein.   (Siehe auch   if %%...%% )

if space command     (ab V29)
Wenn das erste Zeichen der  iV  ein Spatium oder sonstiges "Whitespace"-Zeichen ist, wird command ausgeführt.  

Prüfungen der Satzstruktur 

if main command    acon 
	Ist der aktuelle Satz der Hauptsatz einer verknüpften Familie? (D.h. gibt es verknüpfte Untersätze dazu?)
if fam command    acon 
	Ist der Satz ein Mitglied einer verkn. Familie (Haupt- oder Untersatz)? ... 
	Achtung! Es wird keine Erg.Menge gebildet (dies tut der Befehl fam), aber die Anzahl verknüpfter 
	Untersätze steht anschließend in der iV.
if sub command    acon 
	Ist der Satz ein verknüpfter Untersatz? ...
if hierarchy command   acon 
	Ist es ein hierarchischer Satz? ... Siehe dazu auch `next sub`  und  `prev sub` 
if hs command 
	Ist der Balken in einem hierarchischen Untersatz? ... [funktioniert nur, wenn gerade links die Satzanzeige aktiv ist]

Andere Bedingungsprüfungen 

if Artic command      acon 
Wenn der Inhalt der iV mit Artikel beginnt, wird command  ausgeführt.  Die Artikel sind in der CFG definiert. 
Groß-/Kleinschreibung ist dabei nicht relevant, d.h. 'der' ist identisch mit 'Der' und  'DER' usw. 
Mit  if ARtic  (also großem R) wird darüber hinaus das Wort dann mit Nichtsortierzeichen markiert. Bei diesem Befehl kann das  command  auch entfallen! Das Nichtsortierzeichen ist immer der Code N aus der CFG , bei Bedarf ersetzt man dies durch einen anderen , und zwar z.B. mit   insert _^170_@_, wenn es @ sein soll  

if b command     acon 
	Wenn der Inhalt der iV eine ISBN oder ISSN ist und die Prüfziffer nicht stimmt, wird 
 	command  ausgeführt. `Mehr dazu` unter dem Sonderbefehl  `hyphen`. 
	Anwendung nach diesem Muster: 
	... 
	if not b jump ok 
	mes "Pr.Ziff. falsch"  
	end 
	:ok 
      ... 
if deleted command    acon
	... ein gelöschter Satz? ... 
 
if Deleted command    nur acon
	... ein gelöschter Satz, der mit  fetch rec  eingelesen wurde? 
 
if diff command    
Wenn der aktuelle Satz vorher verändert wurde (Hintergrund gelb!) wird command ausgeführt, z.B. `put`.  
 
if empty command      acon
	Wenn die aktuelle Erg.menge leer ist, wird command ausgeführt.  

if gN command   acon 
if lN command   acon 
	Wenn die aktuelle Erg.menge größer bzw. kleiner als N (>= 0) ist, wird command ausgeführt.  
Spezialfall:  if g0 :  Ist bei dem vorangehenden find-Befehl etwas herausgekommen? 
bzw.  if l1 : blieb der find-Befehl ergebnislos? Dies prüft man meistens aber direkt nach 
dem find ...  mit  if no ... 
 
if Help command    
Wenn momentan ein Hilfetext in der Anzeige steht, wird command ausgeführt.  
 
if Lock command       acon
	... ein gesperrter Satz? ...   Dann wird  command  ausgeführt. (Freigabe mit  set unlock)  
	Will man's genauer wissen, dann macht man es so: 
	if not Lock jump nol   
	command    // auszuführen, wenn der Satz gesperrt ist 
	und unter  :nol  wertet man evtl. die Variable sL aus (var sL\if "9" ...) 
	Zur Variable  sL  siehe Doku zu  `set lock`. 
	
if Lock #Num command       acon
	Damit wird der Satz mit der internen Nummer  Num  geprüft, ohne ihn erst zu laden. 
	Fehlt  Num , dann wird dafür der iV-Inhalt genommen. 
	Ansonsten gilt zur Bedingungsprüfung, was oben unter  if Lock  steht. 
 
if New command 
	... ein neuer Satz? ... 

if off command 
Falls eine `Offline-Datei` beim Start geladen wurde, dann command 
 
if res command        acon
Falls die Datenbank über Restriktionen verfügt  (.RES-Datei), wird command ausgeführt.  
 
if Stop command      acon 
Wenn der Inhalt der iV ein Stoppwort ist, wird command  ausgeführt. Die Stoppwörter sind in der Index-Parameterdatei definiert. Die Schreibweise braucht nicht exakt zu stimmen, d.h. groß/klein ist irrelevant. 

if tbl command       acon
	Wenn die TBL-Datei gesperrt ist, wird command ausgeführt.  
 
if usr command       acon   [ab V33] 
	Wenn die Datenbank gerade (durch andere User oder in anderen Fenstern) in Benutzung ist, wird command ausgeführt.  
Ob die Nutzung durch a99/alcarta/acon  oder die alten Programme  PRESTO/APAC etc. erfolgt, spielt dabei keine Rolle. 
 
if v14 command        acon
	Wenn die Datenbank mit V14-Verknüpfungen arbeitet, wird command ausgeführt.  
Die Werte i5 und i6 der Indexparameter erhält man mit  var V14, z.B. _9 oder _:

Sonderfall: Tastaturprüfung  
Wenn man prüfen will, ob die Taste [Esc] gedrückt wurde, z.B. innerhalb einer Schleife (um den Abbruch zu ermöglichen), geht das mit dem `keychk`-Befehl, den man VOR einen  if-Befehl zu setzen hat: 
 
keychk 
if yes jump ... 

ACHTUNG:
NUR für acon  gilt (also in .job-Dateien): 

if #nnn = #kkk command          Statt  =  kann auch  <  oder  >  stehen
	Vergleiche Inhalt von  #nnn  mit Inhalt von  #kkk 
	 Bei Gleichheit bzw. größer/kleiner: command  ausführen 
   	 #nnn  und/oder  #kkk  können auch Anwendervariablen sein (#u-Variablen) aber keine $-Variablen oder &-Variablen. 

Wenn  #kkk  nicht besetzt ist, gilt die Bedingung (korrekt) als nicht erfüllt. 
Wenn  #nnn  beide nicht besetzt sind, gilt Bedingung "no" 

Statt  #kkk  kann auch eine Zahl stehen, dann wird ein Zahlenvergleich durchgeführt, sonst Stringvergleich. 

Beachte: Im Gegensatz zum Vergleich in einer Flex-Datei (s.o.) wird jeweils der vollständige Inhalt der Variablen verglichen und nicht nur eine anfängliche Übereinstimmung geprüft.

Unterfelder können nicht angegeben werden, dazu muß man erst Anwendervariablen erzeugen, z.B. 

var #123$a   // $a aus #123 in #uv1 kopieren 
ins #uv1 
var #234$b   // $b aus #234 in #uv2 kopieren 
ins #uv2 
if #uv1 = #uv2 ... 

?jump=h xjump 
?yesno=h xyes 
?noyes=h xyes 
?put=h xput 
?iV =h xiv 
?iZ=h xiz 
?var=h xvar 
?ask=h xask 
?Register=h xa 
?fetch=h xfetch 
?keychk=h xkeychk 
?Offline-Datei=h off 
?next sub=h xnext 
?prev sub=h xprev 
?interne Zähler=h xiz 
?interne Zahl=h xiz 
?find=h xfind=find _xyz_ 
?Fehlerprüfungen=h xavanti=Fehlerbedingungen 
?find _xyz_=h xfind=find _xyz_ 
?siehe unten=h =ACHTUNG: 
?srx=h xsrx 
?Mehr dazu=h xisbn 
?hyphen=h xisbn 
?set lock=h xset=set lock 
?Mehr  dazu=h xcstring#56