CARA
4
Windows

Dokumentation zu der Script-Sprache CARA (Create Any Rdbms Application)

Mit CARA kann man professionelle Datenbank-Applikationen in kurzer Zeit entwickeln.

Was CARA bietet:

	* Schnelle Programm-Entwicklung
	* Robuste Programme unter Windows 95 und Windows NT
	* Individuell anpassbare Programme (auch von Ihrem Kunden)
	* Kleine übersichtliche Programm-Module
	* Als Entwicklungsoberfläche genügt ein einfacher Editor (z.B. das Notepad)
	* 100% SQL-Datenbank-Zugriffe
	* Opcode-Compiler
	* Online Script-Monitor
	* Online SQL-Monitor

Programmierer die schon mit C++, Pascal, Delphi, Omnis, COBOL oder ähnlichen Hochsprachen gearbeitet haben, können mit CARA innerhalb kürzester Zeit erfolgreich arbeiten. Besonders geeignet ist CARA, wenn ein DOS-Programmierer auf WINDOWS umsteigen will.

Diese Sprache ist jedoch nicht als Ersatz für eine Hochsprache wie z.B. C++, PASCAL, VisualBasic oder DELPHI gedacht. Wenn Anwendungen entwickelt werden sollen, die ganz speziellen Bedürfnissen genügen müssen und nicht durch CARA realisierbar sind, sollte man auf eine der vorgenannten Sprachen ausweichen.
Inhalt

Allgemeine Einführung									3

Aufbau einer Applikations-INI-Datei							5

Beispiel für eine Batch-Jobs-INI-Datei mit integriertem Script		11

Beispiel für eine Applikation-INI-Datei							11

Aufbau einer Stations-INI-Datei								12

Allgemeine Syntax für alle Dateitypen							12

Aufbau einer Menü-Datei									14

Aufbau einer Masken-Datei								14

Aufbau eines Choicer-Menüs								20

Spezielle Syntax für Script-Dateien							22

Liste der Befehle der Scriptsprache CARA						22

Spezielle Syntax für Select-Statements							22

Allgemeine Einführung:

1. 	Jeder der mit CARA arbeiten möchte und Datenbanken nutzen möchte, sollte über Kenntnisse in der Datenbank-Abfragesprache SQL verfügen. Wer darüber hinaus mehrplatzfähige Anwendungen mit CARA schreiben möchte und einen Datenbank-Server seiner Wahl mit CARA verwenden will, sollte sich auch mit dem speziellen "SQL-Dialekt" dieses Servers auskennen. Für alle die in diesem Bereich noch keinerlei Erfahrungen haben gilt folgendes: Es gibt jede Menge Beispiele die mit CARA geliefert werden, an denen man lernen kann. Außerdem ist zu dem Thema SQL in jeder Computerbuchhandlung gute einführende und weiterführende Literatur zu finden.

2. 	Mit CARA kann man sowohl Applicationen (mit und ohne Datenbank-Zugriff) als auch Batch-Jobs programmieren. 

3. 	Jede CARA-Application und jeder CARA-Batch-Job beginnt mit einer INI-Datei. Die Beschreibung der INI-Datei befindet sich im Kapitel "Aufbau einer Applikations-INI-Datei".

4. 	Jede CARA-Application startet mit einem Menü. Die Beschreibung für Menü-Definitionen befindet sich im Kapitel "Aufbau einer Menü-Datei".

5. 	Aus jedem Menü-Punkt heraus startet man ein Script. Innerhalb eines Scriptes können Befehle, Prozeduren, INCLUDE-Dateien und auch weitere SCRIPTE ausgeführt bzw. eingebunden werden. Die Beschreibung der Befehle befindet sich im Kapitel "Liste der Befehle der Scriptsprache CARA"

6. 	Jedes Script kann völlig "unsichtbar" im Hintergrund ablaufen oder auch sichtbare Elemente wie Eingabebildschirme (Masken) und Datenbanklisten (Browser) zeigen.

7. 	Jede Maske ist in einer ASCII-Datei definiert. Die Beschreibung für Masken-Definitionen befindet sich im Kapitel "Aufbau einer Masken-Datei".

8. 	Jede Maske und jeder Browser kann "Knöpfe" (Buttons) zeigen auf die ein Benutzer (User) drücken kann. Jeder Button kann daher zu einem bestimmten Ereignis, das der User auslösen möchte, führen. Jedes dieser Ereignisse kann in den Scripten mit extra Prozeduren (Hooks) programmiert und beeinflußt werden. In jeder Maske können außerdem über einen speziellen Button Auswahlmenüs (Choicer) gezeigt werden, die weitere Kontext bezogene Scripte aufrufen können. Die Beschreibung für Choicer-Definitionen befindet sich im Kapitel "Aufbau eines Choicer-Menüs". Chocier können auch an selbstdefinierte Buttons gekoppelt werden.

9. 	Masken und Browser sind bereits Elemente die CARA zur Verfügung stellt und diese sind mit einigen Funktionen ausgestattet. So kann man mit jeder Maske sofort Datensätze suchen, Datensätze verändern und Datensätze erzeugen. Dabei ist jedes Feld einer Maske, daß mit einem Datenbankfeld korrespondiert, automatisch ein Feld, das als Suchkriterium verwendet werden kann.

10. 	Jede Datentabelle die mit CARA verwendet werden soll, muß mindestens 8 Felder enthalten die für die Verwaltung der speziellen Vorzüge von Masken und Browsern nötig sind. Diese Felder müssen folgende Namen tragen : RecordID ,numerisch mit 13 Stellen vor dem Komma, keine Stelle hinter dem Komma (num 13,0);  IDUser (integer), LevelUser (integer), Mandant (integer), UpdateID (integer), UpdateTime (num 13,0), RecFlag (integer) und EventFlag (integer). Bis auf das Feld RecordID muß keines dieser Felder indiziert werden. Für das Feld RecordID muß jedoch sichergestellt werden (mittels Index), daß jeder Datensatz einen eindeutigen, einzigartigen Wert darin enthält (unique oder besser Primary Key). CARA stellt speziell für die Erzeugung dieser einzigartigen Datensatz-ID's einen Befehl zur Verfügung. Die RecordID einer jeden Tabelle sollte als einziges relationales Verknüpfungsfeld mit anderen Tabellen verwendet werden. Die oben genannten Felder sollten vom Programmierer nirgends angezeigt oder zur Veränderung an den Benutzer weitergereicht werden, sie dienen ausschließlich der relationalen Verküpfung und einigen hervorragenden Eigenschaften von CARA, die weiter unten noch beschrieben werden.

11. 	Jede Maske und jeder Browser verfügt über eine ganze Reihe von Funktionen, die man automatisch in jeder Anwendung, ganz ohne zusätzlichen Programmieraufwand, an den Benutzer weiterreichen kann: So kann man z.B. auf jeden Datensatz einer jeden Tabelle beliebig viele Notizen "kleben", die man außerdem mit einer Volltextsuche durchsuchen kann. Jede Datenbankabfrage kann über einen Listengenerator ausdrucken bzw. exportieren.

12. 	Zu jeder Maske kann eine Standard - Abfrage gespeichert werden (Unterverzeichnis SQL), diese kann automatisch vom Endbenutzer konfiguriert und individuell angepaßt werden.

13. 	Im Paket ist außerdem eine ausführliche Benutzerrechte-Verwaltung integriert, die sich automatisch auf jeden neuen Menüpunkt sofort und unkompliziert anwenden läßt.

14. 	Jede Datenbankbewegung wird automatisch benutzerbezogen mitprotokolliert: Datum, Uhrzeit und UserID werden automatisch jedem neuen Datensatz zugeordnet, bzw. bei Änderungen mit in der Datenbank gespeichert.

15. 	Ein spezieller Algorithmus zum Record-Locking erlaubt auch auf SQL-Servern, die diese Funktion  nicht zur Verfügung stellen, ein sicheres Arbeiten bei Client-Server-Anwendungen.

16. 	Für das Drucken in CARA wurde ein spezielles Programmierwerkzeug eingebaut: Die Virtual Print Engine (VPE) der Firma IDEAL-Software in Neuss (Germany), Tel. 02131/980023.

17. 	Für die fehlerfreie Ausführung eines CARA-Programms wird eine bestimmte Verzeichnisstruktur benötigt. Die Applikation sollte ein eigenes Verzeichnis erhalten (z.B. IDEAL). In diesem Verzeichnis müssen mindestens folgende Dateien enthalten sein:
I.	 "IDEAL.INI" (die Applikations-INI-Datei)
II.	"Default.mnu" (das Hauptmenü der Applikation).
Folgende Unterverzeichnisse werden außerdem erwartet (bitte lesen Sie auch das Kapitel "Aufbau einer Applikations-INI-Datei"): 
A.	"DIC" (Abkürzung für DICTIONARY): In diesem Verzeichnis müssen sich alle Daten-Dateien befinden. 
B.	"SQL": In diesem Verzeichnis müssen sich alle Standard-SQL-Anweisungen für Masken befinden. 
C.	"SETDOC": In diesem Verzeichnis müssen sich alle Masken-Definitions-Dateien der Anwendung befinden.
D.	"SCRIPT": in diesem Verzeichnis müssen sich alle SCRIPTE bzw. der Programm-Code der Applikation befinden.

18. 	Der Aufruf einer Applikation geschieht folgendermaßen: 
	"Laufwerk:\Pfad von CARA\CARA.EXE  Laufwerk:\Pfad der Applikation\Name der Applikations-INI-Datei"

Aufbau einer Applikations-INI-Datei

Die Applikations-INI-Datei ist in drei Sektionen unterteilt.

Sektion [CONFIG]
UseDataBase=		Soll die Anwendung auf eine Datenbank zugreifen können ? (ja=1, nein=0). Die Vorgabe ist ja=1. Bei Batch-Jobs wird beispielsweise meistens keine Datenbank benötigt.

UseMenu=		Soll die Anwendung ein Menü laden ? (ja=1, nein=0). Die Vorgabe ist ja=1. CARA erwartet dann die Datei "default.mnu" im Anwendungsverzeichnis. Bei Batch-Jobs wird beispielsweise kein Menü benötigt.

UseMainWindow=	Soll die Anwendung das Hauptfenster verwenden, in dem z.B. normalerweise das Menü zu sehen ist ? (ja=1, nein=0). Die Vorgabe ist ja=1. Bei Batch-Jobs wird beispielsweise kein Hauptfenster benötigt.

UseScript=		Soll die INI-Datei auch gleich als Script verwendet werden ? (ja=1, nein=0). Die Vorgabe ist nein=0. Bei Batch-Jobs wird diese Option jedoch benötigt. Ein Beispiel für einen Batch-Job finden Sie im Kapitel "Beispiel für eine Batch-Jobs-INI-Datei mit integriertem Script". Wenn in der INI-Datei die Option "MainScript" (s.u.) verwendet wird, dann wird UseScript nicht mehr berücksichtigt!

ProgName=		Name der Applikation, der im Hauptfenster eingeblendet wird. Wenn der Wert für DataAlias nicht gesetzt wird, wird der ProgName auch als DataAlias verwendet. In diesem Fall ist es notwendig, daß der ProgName keine Leerzeichen enthält und ansonsten den Bedingungen eines korrekten Dateinamens genügt.

DataAlias=		Name, der für den Datenbank-Treiber als Daten-Alias verwendet wird. Sollte dieser Wert nicht gesetzt sein, wird der ProgName als DataAlias verwendet. Der DataAlias darf keine Leerzeichen enthalten und muß ansonsten den Bedingungen eines korrekten Dateinamens genügen.

DataBase=		Wenn hier ein gültiger Dateiname (auch mit Pfad) für eine ACCESS-Datenbank angegeben wird, so greift das Programm via DAO auf diese Datenbank zu. Sollte ein CONNECT-String angegeben werden wie z.B. "ODBC;DATABASE=IDEAL;UID=Master;PWD=Master;DSN=IDEAL", so wird CARA eine Verbindung zu der Datenbank IDEAL über ODBC herstellen. Weitere Möglichkeiten : "dBaseIII;C:\MyFiles\DBase" oder "FroxPro 2.6;" oder "Btrieve;F:\GROUPS\DataBase\File.ddf"

DataUser=		Name des Datenbank Benutzers z.B. "Admin" oder "Master". "@" bedeutet, dass der User als Name einen Leerstring hat.

DataPassword=		Passwort für die Datenbank z.B. "Master". "@" bedeutet, dass das Passwort ein Leerstring ist.

DataPath=		Pfadangabe für das Verzeichnis in dem sich die Daten befinden. Wenn DataPath nicht gesetzt wird, sucht CARA die Daten im Unterverzeichnis DIC der Applikation.

SQLPath=		Pfadangabe für das Verzeichnis in dem sich die Standard-SQL-Anweisungen befinden. Wenn SQLPath nicht gesetzt wird, sucht CARA die Standard-SQL-Anweisungen im Unterverzeichnis SQL der Applikation.

SetDocPath=		Pfadangabe für das Verzeichnis in dem sich die Masken-Definitionen befinden. Wenn SetDocPath nicht gesetzt wird, sucht CARA die Masken-Definitionen im Unterverzeichnis SetDoc der Applikation.

PicturePath=		Pfadangabe für das Verzeichnis in dem sich Bilder bzw. Icons befinden. Wenn PicturePath nicht gesetzt wird, sucht CARA Bilddateien im Unterverzeichnis "Pictures" der Applikation.

DocumentPath=	Pfadangabe für das Verzeichnis in dem sich Dokumente bzw. Texte befinden. Wenn DocumentPath nicht gesetzt wird, sucht CARA Dokumente im Unterverzeichnis Document der Applikation.

ScriptPath=		Pfadangabe für das Verzeichnis in dem sich die Scrpite (der Programm-Code) befinden. Wenn ScriptPath nicht gesetzt wird, sucht CARA die Scripte im Unterverzeichnis Script der Applikation.

HelpPath=		Pfadangabe für das Verzeichnis in dem sich die Hilfe-Datei(en) befinden. Wenn HelpPath nicht gesetzt wird, sucht CARA die Hilfe im Unterverzeichnis Help der Applikation.

PrintSetPath=		Pfadangabe für das Verzeichnis in dem sich die Drucker-Einstellungen der verschiedenen Stationen zu den verschiedenen Druckjobs befinden. Wenn PrintSetPath nicht gesetzt wird, sucht CARA die Drucker-Einstellungen im Unterverzeichnis PrintSet der Applikation.

SpecialPath=		Pfadangabe für das Verzeichnis in dem sich spezielle Scripte (z.B. individuelle Anpassungen, die vom Standard abweichen) befinden. Wenn SpecialPath nicht gesetzt wird, sucht CARA alle Scripte im Unterverzeichnis Script der Applikation. Auch alle SQL-Anweisungen und SetDoc-Dateien, die angepaßt wurden sollten in diesem Verzeichnis abgelegt sein.

CoordinatesFlag=	CARA legt zu jeder Applikation eine INI-Datei mit dem gleichen Namen wie die hier beschriebene Applikations-INI-Datei im Windows-Verzeichnis jeder Station an, die eine CARA-Applikation aufruft. Eine Beschreibung dieser INI-Datei finden Sie im Kapitel "Aufbau einer Stations-INI-Datei". Zu jeder Maske und jedem Standard-Browser und dem Hauptfenster der Applikation können die aktuellen Einstellungen, die der User an der Position und Größe der Fenster vornimmt in der Stations-INI-Datei gespeichert werden. Wie diese Koordinaten zu behandeln sind, wird durch CoordinatesFlag verwaltet. CoordinatesFlag kann eine Kombination der aufgelisteten Optionen sein. Der Vorgabewert ist 31 (d.h. alle Optionen).
1	Lesen der in der Stations-INI-Datei gespeicherten Werte und entsprechende Anzeige der Fenster.
2	Speichern der aktuellen Einstellungen der Fenster in der Stations-INI-Datei.
4	Die Optionen 1 und 2 (insofern diese gesetzt sind) anwenden auf Eingabe-Masken.
8	Die Optionen 1 und 2 (insofern diese gesetzt sind) anwenden auf Standard-SQL-Abfrage-Fenster.
16	Die Optionen 1 und 2 (insofern diese gesetzt sind) anwenden auf das Hauptfenster.

MainImage=		Wenn hier ein gültiger Dateiname (auch mit Pfad) für eine Bitmap-Datei angegeben wird (erlaubte Formate : gif (auch animierte), bmp, emf, wmf, ico), so wird dieses Bild als Logo im Hauptfenster der Applikation sichtbar. Wenn hinter dem Dateinamen, durch Kommas getrennt, noch Zahlen angegeben werden (z.B. C:\CARC.BMP,50,50,5,0), dann entsprichten diese Zahlen dem Abstand in Prozent, den das Bitmap von den Rändern des Hauptfensters der Applikation entfernt sein wird. Die erste Zahl entspricht der Entfernung vom linken Rand, die zweite der Entfernung vom oberen Rand, die dritte der Entfernung vom rechten Rand und die letzte der Entfernung vom unteren Rand. Sollte die erste Zahl negativ übergeben werden (und sonst keine weitere Zahl angegeben werden), so wird das Bitmap zentriert mit dem Absolutwert als Abstand in Prozent von allen Rändern dargestellt.

MainScript=		Wenn hier ein gültiger Dateiname (auch mit Pfad) für ein CARC-Script angegeben wird, so wird dieses Script beim Programmstart ausgeführt. Wichtig: alle Variablen, die in diesem Script definiert werden, sind globale Variablen für die gesamte Applikation.

AppLoadedScript =		Wenn hier ein gültiger Dateiname (auch mit Pfad) für ein CARC-Script angegeben wird, so wird dieses Script nach dem vollständigen Laden und zeigen der Applikation ausgeführt. Hier kann man dann auch z.B. die Hauptseite im Navigationsfenster wechseln.

MainMenu=		Wenn hier ein gültiger Dateiname (auch mit Pfad) für eine Menü-Datei angegeben wird, wird diese datei als Menü-Datei verwendet. 

MainMsg=		Wenn hier ein gültiger Dateiname (auch mit Pfad) für eine Message-Datei angegeben wird, wird diese datei als Message-Datei verwendet. Messages (Nachrichten) können dazu verwendet werden, um multilinguale Applikationen zu erstellen. Die Message-Datei kann die Masken-Bezeichner, SQL-Bezeichner und die Nachrichten, die an den User ausgegeben werden enthalten. Wenn diese Datei durch eine Datei mit anderen Inhalten (einer anderen Sprache) ausgetauscht wird, werden alle Bildschrimausgaben in dieser Sprache erscheinen. Mit dieser Möglichkeit werden zusätzlich folgende globale Variablen vom Typ VAR_STR zur Verfügung gestellt (nähere Anweisungen sind in der IDEAL.MSG Datei dokumentiert) [GLOB_MSG_PARAM1]..[GLOB_MSG_PARAM4]. Im Befehl MESSAGE kann damit in der Head-Angabe und / oder in der Info-Angabe folgende Syntax verwendet werden: MESSAGE '@Msg-Nummer Bemerkung'. Dann wird nach die entsprechnede Nachricht aus dem Message-File angezeigt. Wenn die Msg-Nummer durch ein Leerzeichen getrennt weitere Informationen enthält, so werden diese als Bemerkung gewertet. Falls die Nachricht nicht gefunden werden kann, wird Bemerkung als Nachricht verwendet. Das gleiche gilt für SQL-Anweisungen mit der CSH-Syntax N "" und für die Masken-Definitionselemente HINT und ITEM-Element "Inhalt", Menü- und Choicer-Zeilen.

AdvanceOnEnter=	Wenn AdvanceOnEnter=1 ist (also TRUE) dann wird in den Eingabemasken bei dem Betätigen der Enter-Taste von einem Feld zum anderen gesprungen.

SearchOnEnter=	Wenn SearchOnEnter=1 ist (also TRUE) dann wird in den Eingabemasken bei dem Betätigen der Enter-Taste die Suche ausgelöst.

SaveAndClearOnHash=	Wenn SaveAndClearOnHash=1 ist (also TRUE) dann wird in den Eingabemasken bei dem Betätigen der Raute-Taste (#) gespeichert und gleich danach die Maske gesäubert.

UseSounds=		Wenn UseSounds=1 ist (also TRUE) dann wird nach dem erfolgreichen Speichern die im Schlüssel SaveSoundFile angegebene Sound-Datei abgespielt.

SaveSoundFile=		Sound-Datei-Name, der nach dem erfolgreichen Speichern abgespielt werden soll.

ForceDBDrvInstall=	0	Es erfolgt nur eine Installation wenn notwendig, d.h. wenn
		 	weder DAO 3.5 mit JetEngine 3.0, noch DAO 3.6 mit
			JetEngine 4.0 installiert ist. In diesem Fall wird, wenn der
			InternetExplorer 5 (oder höher) installiert ist, DAO 3.6 mit
			JetEngine 4.0 installiert, anderenfalls DAO 3.5 mit JetEngine 3.0.
		1	Es erfolgt eine erzwungene Installation der zuletzt
			verwendeten DAO-Version. CARA findet dabei selbständig
			heraus, welche Version vorhanden ist. Sollten beide
			Versionen vorhanden sein, wird nur DAO 3.6 mit JetEngine 4.0 neu
			installiert.
		5	Es erfolgt eine erzwungene Installation der von DAO 3.5 mit
			JetEngine 3.0.
		6	Es erfolgt eine erzwungene Installation der von DAO 3.6 mit
			JetEngine 4.0. Wichtig : der InternetExplorer 5 (oder höher)
			muß installiert sein.

FontName=		Welche Schriftart soll innerhalb der Cara-Anwendung verwendet werden ? Dies gilt für alle Masken und Browser.

NoteManagerFontName=	Welche Schriftart soll innerhalb des Notitz-Managers verwendet werden? Eine vom Standard-Font abweichende Definition ist möglich, um im Notiz-Manager genau den Schrifttyp zu verwenden, der auch beim Ausdruck verwendet wird.

NoteManagerFontSize=	Welche Schriftröße soll die Schriftart im Notitz-Managers haben?

UserLogin=		Soll man sich an der Anwendung anmelden bzw. soll das Rechte-System angewandt werden? Sollten Sie sich versehentlich "ausgeschlossen" haben können Sie bei der Creative Soft- & Hardware ein "Master-Passwort" erhalten. Falls der Lizenz-Schlüssel der Anwendung ein UserLogin verlangt, werden die hier gemachten Einstellungen ignoriert.

UserTableName=	In welcher Tablle sind die Daten enthalten, die beim UserLogin benötigt werden? In dieser Tabelle müssen folgende Datenfelder vertreten sein:
				"RightID numeric" für das Zuordnen eines Rechtemodells, 
				"UserID numeric" 	eine 5-stellige eindeutige Nummer, 
							(nicht mit dem Feld IDUser verwechseln!)
				"Passwort text (21)" wird verschlüsselt abgelegt,
				"Shortname text (21)" für das Anmelden im Programm, 
				"NetContext text (41)"	für den Aufruf anderer Netzwerk-
							orientierter Programme, 
				"LoginName text (21)"  für den Aufruf anderer Netzwerk-
							orientierter Programme,
				"UserLevel numeric" 	Priorität der Users, 0=minimal und
							10000=maximal
							(nicht mit LevelUser verwechseln!)
				"Name1 text (41)" um einen Namen anzeigen zu können,
				"Name2 text (41)" um einen Namen anzeigen zu können.
				Bemerkung:
				Die Felder LevelUser und IDUser werden beim Anlegen und Verändern von 
				Datensätzen jedesmal mit ausgefüllt. Diese Werte werden aus den hier 
				genannten Feldern UserID und UserLevel der Login-Daten.

UserClause=		Welche SQL-WHERE-Bedingung muß berücksichtigt werden, um aus der UserTableName die Mitarbeiter heraus zu filtern. Beispiel: Alle Adressen einer Anwendung sind in der Tabelle "Adressen" gespeichert. Mitarbeiter sind davon jedoch nur die Adressen, die in dem Tabellen-Feld "Maktiv" den Wert 1 haben. Daher muß "UserTableName=Adressen" und "UserClause=Maktiv = 1" gesetzt weden.

 HelpDevice=		Hier kann ein Programm-Name incl. Pfad angegeben werden, mit dem sich die Hilfe-Datei(en) starten lassen. Sollte hier keine Angabe gemacht werden, so wird die Hilfe mit dem Pragramm  gestartet, das zu der unter HelpExtension angegebenen Dateierweiterung standardgemäß gehört.

HelpExtension=		Hier kann eine Dateierweiterung wie z.B. ".htm" angegeben werden. Wenn unter HelpDevice keine Angaben gemacht wurden, dann wird das zu dieser Dateierweiterung gehörende Standard-Programm aus der Registry ermittelt.

HelpMain=		Hier kann der Dateiname für die Standard-Hilfe Datei der Application angegeben werden.

ShowLinePanel=	Soll unterhalb des Hauptmenüs der Applikation eine Unterteilungslinie eingeblendet werden ?

CurrencyStr=		Beinhaltet das Kürzel für die Systemwährung, die verwendet werden soll. Der Wert ist durch die System-Variable [CURRENCY_STR] im Script verfügbar und kann über diese Variable auch zur Laufzeit geändert werden. Darüber hinaus kann man das Wort "CURRENCY_STR" in Maskendefinitionen für den Default-Wert eines Items verwenden, um dort die aktuelle Systemwährung anzeigen zu lassen. Der Inhalt dieser Variable sollte nur im Zusammenhang mit der Varibale [CURRENCY_ID] verändert werden.

CurrencyID=		Beinhaltet die RecordID der Systemwährung, die verwendet werden soll. Der Wert ist durch die System-Variable [CURRENCY_ID] im Script verfügbar und kann über diese Variable auch zur Laufzeit geändert werden. Darüber hinaus kann man das Wort "CURRENCY_ID" in Maskendefinitionen für den Default-Wert eines Items verwenden, um dort die aktuelle Systemwährung zu hinterlegen. Der Inhalt dieser Variable sollte nur im Zusammenhang mit der Varibale [CURRENCY_STR] verändert werden.

FloatDigitsShort=		Legt die Anzahl der Nachkommastellen bei Zahlen mit wenigen Nachkommastellen fest. Die Korrespondierende Global-Variable in CARA heißt [FLOAT_DIGITS_SHORT].

FloatDigitsNormal=		Legt die Anzahl der Nachkommastellen bei Zahlen mit normal vielen  Nachkommastellen fest. Die Korrespondierende Global-Variable in CARA heißt [FLOAT_DIGITS_NORMAL].

FloatDigitsLong=		Legt die Anzahl der Nachkommastellen bei Zahlen mit vielen  Nachkommastellen fest. Die Korrespondierende Global-Variable in CARA heißt [FLOAT_DIGITS_LONG]

FloatDigitsExtend=		Legt die Anzahl der Nachkommastellen bei Zahlen mit sehr vielen  Nachkommastellen fest. Die Korrespondierende Global-Variable in CARA heißt [FLOAT_DIGITS_EXTEND]

ShortDatePicture=		Gibt das Format für kurze Datumseingaben an. Beispiel: "dd.MM.yyyy" . Dies  trägt dann beim Programmstart ohne weitere Warnung die entsprechenden Werte in die Registry ein. Das Format ist normalerweise "dd.MM.yy" und muß nur dann "hochgeschaltet" werden, wenn innerhalb der Anwendung häufig Datumswerte mit einem Datum größer als das Jahr 2030 eingegeben werden muß. Man kann unabhängig von CARA mit START /  Einstellungen / Systemsteuerung / Ländereinstellungen im Register "Datum" rechnerabhängige Einstellungen vornehmen. Die dort gezeigte Datumsgrenze (nur Win98 und Win2000 oder besser)  kann natürlich auch verändert werden, anstelle das Format zu ändern. Man sollte sich die Verwendung dieses INI-Schlüssels reiflich überlegen, da noch eine Menge Programme im Umlauf sind, bei denen das Verstellen des kurzen Datumformates zu Problemen führt (Beispiel : ältere Paradox-Anwendungen).

StationIniFile=		Legt fest, ob eine Stations-INI-Datei angelegt wird. In dieser werden z.B. die gewählte Auflösung und die gewählte Lage und Größe der geöffneten Fenster abgelegt. Der Defaultwert ist TRUE (d.h. 1).

ShowIconErrors=		Legt fest, ob Fehler beim Laden der Programme-Icons angezeigt werden.  Der Defaultwert ist TRUE (d.h. 1). Bei Hintergundjobs werden oft keine Icons verwendet und man benötigt keine Fehlermeldungen.

UpdateScript=		Wenn hier ein Script-Name angegeben wurde, wird dieser beim Programmstart ausgeführt. Wenn nach der Ausführung im [GLOB_RES_STR1] der Wert [UPDATE_ABORT] enthalten ist, wird die Applikation nicht gestartet sondern die Ausführung abgebrochen. Der Default ist “Update.CSH“. Wenn dieser Schlüssel nicht in der INI-Datei enthalten ist, wird trotzdem nach dem Script “Update.CSH“ gesucht.

PrintRightsScript=		Wenn hier ein Script-Name angegeben wurde, wird dieses beim Auslösen des Druck-Icons im Benutzerrechte-Dialog ausgeführt. Der Default ist “Rights_Prn.CSH“. Wenn dieser Schlüssel nicht in der INI-Datei enthalten ist, wird trotzdem nach dem Script “Rights_Prn.CSH“ gesucht.

Sektion [SQL]

HasBeginsWith=	Hat der verwendete SQL-Treiber eine Syntax für Where-Clauses die folgendermaßen lautet WHERE Name BEGINS WITH "D" (HasBeginsWith=1) oder muß für den Fall daß nur eine WildCard am Ende eines Feldes verwendet wurde die Syntax WHERE Name LIKE "D*" verwendet werden (HasBeginsWith=0, dies ist auch der Vorgabewert) ? NetwareSQL/ScaleableSQL hat beispielsweise eine solche Syntax.

FilterNeedsUpper=	Kann der verwendete SQL-Treiber Abfragen wie z.B. WHERE Name LIKE "*t*e*s*t*" verarbeiten (FilterNeedsUpper=0, dies ist auch der Vorgabewert) oder muß die entsprechende Syntax folgendermaßen lauten WHERE UPPER(Name) LIKE "*T*E*S*T*" (FilterNeedsUpper=1) ? Für Paradox-Datenbanken ist FilterNeedsUpper=1 notwendig.

WildCardMulti=		Wie lautet das Jokerzeichen/WildCard für null, ein oder mehrere Zeichen in einem Feld (WildCardMulti=% ist der Vorgabewert) für ACCESS-Datenbanken muß hier WildCardMulti=* eingegeben werden.

WildCardSingle=	Wie lautet das Jokerzeichen/WildCard für ein Zeichen in einem Feld (WildCardSingle=_ ist der Vorgabewert) für ACCESS-Datenbanken muß hier WildCardMulti=? eingegeben werden.

BooleanTrue=		Wie lautet der Wert, der für einen "wahren" boolschen Ausdruck an den SQL-Treiber weitergegeben werden muß? Vorgabewert ist BooleanTrue=TRUE, bei ACCESS-Datenbanken muß hier BooleanTrue=-1 angegeben werden.

BooleanFalse=		Wie lautet der Wert, der für einen "falschen" boolschen Ausdruck an den SQL-Treiber weitergegeben werden muß? Vorgabewert ist BooleanFalse=FALSE, bei ACCESS-Datenbanken muß hier BooleanTrue=0 angegeben werden.

BooleanQuotation=	Wie müssen boolsche Ausdrücke "verpackt" werden, wenn sie an den SQL-Treiber weiter gegeben werden sollen. Der Vorgabewert ist BooleanQuotation=" dabei wird z.B. bei einem INSERT-Statement ein Wahrheitswert mit "TRUE" übergeben und bei einem SELECT-Statement z.B. WHERE Kunde = "TRUE". Wenn keinerlei Anführungszeichen verwendet werden sollen, so muß BooleanQuotation= übergeben werden. Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_BOOLEAN_QUOTATION] verwendet werden, da der Wert BooleanQuotation aus der INI-Datei an diese Variable weitergegeben wird.

DateQuotes4Select=	Wie müssen Datum-Ausdrücke "verpackt" werden, wenn sie bei einer SELECT-Anweisung an den SQL-Treiber weiter gegeben werden sollen. Der Vorgabewert ist DateQuotes4Select=" dabei wird z.B. WHERE Geburt = "1/1/58" erzeugt. Wenn keinerlei Anführungszeichen verwendet werden sollen, so muß DateQuotes4Select= übergeben werden. Dies ist bei ACCESS-Datenbanken erforderlich. Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_DATE_QUOTES_4_SELECT] verwendet werden, da der Wert DateQuotes4Select aus der INI-Datei an diese Variable weitergegeben wird.

DateQuotes4Modify=	Wie müssen Datum-Ausdrücke "verpackt" werden, wenn sie bei einem INSERT oder UPDATE-Satement an den SQL-Treiber weiter gegeben werden sollen. Der Vorgabewert ist DateQuotes4Modify=" dabei wird z.B. INSERT INTO Adress VALUES (..... "1/21/58", ....) erzeugt. Wenn keinerlei Anführungszeichen verwendet werden sollen, so muß DateQuotes4Modify= übergeben werden. Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_DATE_QUOTES_4_MODIFY] verwendet werden, da der Wert DateQuotes4Modify aus der INI-Datei an diese Variable weitergegeben wird.

TimeQuotes4Select=	Wie DateQuotes4Select.

TimeQuotes4Modify=	Wie DateQuotes4Select.

DatePicture4Select=	In welchem Format müssen Datumswerte an den SQL-Treiber weitergegeben werden, wenn das Datum in einer WHERE-Clause auftauchen soll. Z.B. DatePicture4Select=mm/dd/yyyy (Vorgabewert). Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_DATE_PICTURE_4_SELECT] verwendet werden, da der Wert DatePicture4Select aus der INI-Datei an diese Variable weitergegeben wird.

DatePicture4Modify=	In welchem Format müssen Datumswerte an den SQL-Treiber weitergegeben werden, wenn das Datum in einer INSERT- oder UPDATE-Clause auftauchen soll. Z.B. DatePicture4Modify=mm/dd/yyyy (Vorgabewert). Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_DATE_PICTURE_4_MODIFY] verwendet werden, da der Wert DatePicture4Modify aus der INI-Datei an diese Variable weitergegeben wird.

TimePicture4Select=	In welchem Format müssen Zeitwerte an den SQL-Treiber weitergegeben werden, wenn eine Zeit in einer WHERE-Clause auftauchen soll. Z.B. TimePicture4Select=hh:mm:ss (Vorgabewert). Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_TIME_PICTURE_4_SELECT] verwendet werden, da der Wert TimePicture4Select aus der INI-Datei an diese Variable weitergegeben wird.

TimePicture4Modify=	In welchem Format müssen Zeitwerte an den SQL-Treiber weitergegeben werden, wenn eine Zeit in einer INSERT- oder UPDATE-Clause auftauchen soll. Z.B. TimePicture4Modify=hh:mm:ss (Vorgabewert). Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_TIME_PICTURE_4_MODIFY] verwendet werden, da der Wert TimePicture4Modify aus der INI-Datei an diese Variable weitergegeben wird.

UninitedString=		Wenn ein neuer Datensatz in einer Tabelle erzeugt wurde, und darin ein String-feld enthalten ist, das beim Einfügen nicht initialisiert wurde, welchen Wert enthält dann das Feld. Z.B. UninitedString=NULL (Vorgabewert). Im Embedded-SQL der CARA-Scripte sollte die System-Variable [SQL_UNINITED_STRING] verwendet werden, da der Wert UninitedString aus der INI-Datei an diese Variable weitergegeben wird.
UninitedNum=		wie UninitedString, zugehörige System-Variable [SQL_UNINITED_NUM].
UninitedFloat=		wie UninitedString, zugehörige System-Variable [SQL_UNINITED_FLOAT]
UninitedBoolean=	wie UninitedString, zugehörige System-Variable [SQL_UNINITED_BOOLEAN]
UninitedDate=		wie UninitedString, zugehörige System-Variable [SQL_UNINITED_DATE]
UniniteTime=		wie UninitedString, zugehörige System-Variable [SQL_UNINITED_TIME]

DefineRecordID=	Um ein Feld in einer Tabelle anfügen zu können, muß man die Syntax der Felddefinition kennen. Bei einer RecordID in einer ACCESS-Tabelle muß man z.B. das Wort "numeric" (Default) verwenden – in einer PervasiveSQL-Definition heißt es aber "numeric (13,0)". Die entsprechende Systemvariable heißt [SQL_DEFINE_RECORDID].
DefineFloat=		wie DefineRecordID, Default: Double, Variable [SQL_DEFINE_FLOAT]
DefineString=		wie DefineRecordID, Default: text, Variable [SQL_DEFINE_STRING]
DefineLongint=		wie DefineRecordID, Default: integer, Variable [SQL_DEFINE_LONGINT]
DefineBoolean=	wie DefineRecordID, Default: bit, Variable [SQL_DEFINE_BOOLEAN]
DefineDate=		wie DefineRecordID, Default: date, Variable [SQL_DEFINE_DATE]
DefineTime=		wie DefineRecordID, Default: time, Variable [SQL_DEFINE_TIME]

FreeInterfaceDisconnect=	FreeInterfaceDisconnect=0 bedeutet, dass nicht nach jedem Ausführen eines Querys im freien SQL-Interface die Datenbank geschlossen und wieder geöffnet wird. Dies ist besonders für den Fall gedacht, dass man beim Einloggen in eine Datenbank unbedingt das Passwort eingeben muss, obwohl man dies normalerweise in der INI-Datei angeben kann. Der Default-Wert ist  FreeInterfaceDisconnect=1. Die globale Scriptvariable [SQL_INTERFACE_DISCONNECT] bezieht sich auf diesen Wert.

SingelCharAsBool=		Bei verschiedenen SQL-Servern bzw. Datenbanken kommt es vor, daß es den Datentyp „boolean“ nicht gibt. Dann kann man mit diesem Schalter verlangen, daß alle Strings innerhalb der Tabellen, die genau die Länge 1 Zeichen haben, wie boolean zu behandeln sind. Der Default-Wert ist SingelCharAsBool=0. Die globale Scriptvariable [SQL_SINGLE_CHAR_AS_BOOL] bezieht sich auf diesen Wert.

YearOfDateField=		Um aus einem Datum innerhalb einer SQL-Anweisung nur den Jahreswert herausholen zu können, muß die hier angegebene Syntax verwendet werden. Der  Default-Wert ist YearOfDateField=year( für die MS-AccessDatenbank. Die globale Scriptvariable [SQL_YEAR_OF_DATE_FIELD] bezieht sich auf diesen Wert.

MonthOfDateField=		Um aus einem Datum innerhalb einer SQL-Anweisung nur den Monatswert herausholen zu können, muß die hier angegebene Syntax verwendet werden. Der  Default-Wert ist MonthOfDateField=month( für die MS-AccessDatenbank. Die globale Scriptvariable [SQL_MONTH_OF_DATE_FIELD] bezieht sich auf diesen Wert.

DayOfDateField=		Um aus einem Datum innerhalb einer SQL-Anweisung nur den Tageswert herausholen zu können, muß die hier angegebene Syntax verwendet werden. Der  Default-Wert ist DayOfDateField=day( für die MS-AccessDatenbank. Die globale Scriptvariable [SQL_DAY_OF_DATE_FIELD] bezieht sich auf diesen Wert.

CloseQuerys4Transact=		Bei verschiedenen SQL-Servern bzw. Datenbanken ist es notwendig, daß alle Querys, die an einer Transaktion teilnehmen sollen vorher geschlossen werden müssen. Der Default-Wert ist CloseQuerys4Transact=1. Die globale Scriptvariable [SQL_CLOSE_QUERY_4_TRANSACT] bezieht sich auf diesen Wert.

DatabaseBDEParam=		In der BDE wird der Name der Datenbank von SQL-Server zu SQL-Server mit unterschiedlichen Parameterbezeichnungen genannt. Bei einem Hersetller heißt es DATABASE NAME= beim anderen nur DATABASE= oder sogar BD NAME=. Um den Namen der Datenbank innerhalb der Scriptsprache verwenden zu können kann man die globale Variable [SQL_DATABASE_FILE_NAME] verwenden. Um den Wert aber aus der BDE extrahieren zu können, benötigt CARA die Angabe des Bezeichners innerhalb der BDE, der es erlaubt den Namen der Datenbank zu ermitteln. Der Default-Wert ist DatabaseBDEParam=DATABASE NAME.

StringQuote=		Die meisten SQL-Server bzw. Datenbanken erlauben es, doppelte Anführungszeichen (“) zum Einkapseln von Strings zu verwenden. Wenn hier jedoch ein einfaches Hochkomma (') angegeben wird, so wird CARA alle doppelten Anführungszeichen durch einfache Hochkommata ersetzen. Der Default-Wert ist StringQuote=". Die globale Scriptvariable [SQL_STRING_QUOTE] bezieht sich auf diesen Wert.

StringQuoteDefault=	Dieser Schlüssel is unmittelbar mit dem vorher genannten (StringQuote) verknüpft. Die meisten Applikationen sind in der üblichen Schreibweise geschrieben worden (mit doppelten Anführungszeichen) und auch CARA verwendet oft selber zum Einkapseln von Strings die doppelten Anführungszeichen. Wenn jedoch  StringQuote=' (also mit einem einfachen Hochkomma) angegeben wurde und hier eine davon abweichende Angabe, wie der Default-Wert StringQuoteDefault=“, dann erst tritt der Effekt ein, daß alle doppelten Anführungszeichen durch einfache Hochkommata ersetzt werden.

Vendor=		In manchen Fällen reicht die Parametrisierung des verwendetetn SQL-Servers über INI-Datei-Einträge nicht aus, um das Verhalten von CARA so zu beeinflussen, daß man den SQL-Server „unter“ der Applikation wechseln kann und trotzdem keine Probleme auftauchen. Für diesen Fall muß dann innerhalb von CARA auf den spezifischen Herseller (Vendor) eingegangen werden. Der Default-Wert ist Vendor=   d.h. Es muß nichts spezielles passieren, die INI-Datei-Einträge reichen aus um den SQL-Server bzw. die Datenbank zu parametrisieren. 
				Bisher wurde für folgende Werte ein spezielles Verhalten von CARA einprogrammiert : Vendor=ORACLE, wobei hier speziell zum Kodieren und Dekodieren von Datums- und Zeitfeldern Anpassungen vorgenommen wurden.

CommentSign=		Um einen einzeiligen Kommentar oder den hinteren Teil einer Zeile als Kommentar innerhalb einer SQL-Anweisung nutzen zu können, kann dieser Wert gesetzt werden. Der Default-Wert ist CommentSign=  d.h. Es wird auch gar nicht versucht irgendwelche Kommentare aus den Querys zu entfernen, CARA reagiert dann bei der Ausführung kaum merklich schneller. Für PervasiveSQL oder ORACLE kann hier der dort übliche Wert  CommentSign=-- angegeben werden.

InitScript=		Wenn zur Initialisierung der Datenbank die Ausführung eines Scriptes (unmittelbar nach dem Datenbank-Connect) notwendig ist, so kann hier der ScriptName hinterlegt werden. Wenn nach der Ausführung im [GLOB_RES_STR1] der Wert [UPDATE_ABORT] enthalten ist, wird die Applikation nicht gestartet sondern die Ausführung abgebrochen.

MaxFlds4Update=	Maximale Anzahl der Felder, die innerhalb einer Update-Anweisung geändert werden dürfen. Der Vorgabewert ist 10000, wodurch keinerlei Update-Anweisungen innerhalb der CARA-Engine gesplittet werden. Unter Access kam es gelegentlich vor, dass Updates von mehr als 150 Feldern innerhalb einer Anweisung fehlschlugen.

SQLExportRoundDec=	Der hier angegebene Wert wird im Listengenerator als Vorgabewert für das Feld “Dezimalzahl runden” verwendet und hat auch Auswirkungen auf den Befehl ASCII_2_TABLE.

Sektion [FreeNotes]

Wenn im Notzimanager noch weitere Texte als TEXT1, TEXT2, INTERN oder IMMER verwendet werden sollen, so müssen die entsprechenden Überschriften hier angemeldet werden. Jede Überschrift muß mit einer eindeutigen ID versehen werden. Mit dieser ID kann man von den Scripten auf diese Texte zugreifen. Eine einmal verwendete ID sollte nicht erneut an eine andere Überschrift vergeben werden. Alle ID's müssen größer oder gleich 100 sein. 
Beispiele:
Englisch=100
Portugiesisch=101
Französisch=102
Einkaufsbemerkung=200
Einlagerungsinfo=300
Produktionstext=400
Im Notizmanger werden dann unter den vier Standard-Texten noch die hier aufgeführten Überschriften angeboten.

Sektion [Help]

Wenn die Hilfe des Programms mit Dateien z.B. im HTML-Format oder in einer normalen HLP-Datei angeboten wird, stehen dieser Sektion die Parameter oder Index-Werte, mit denen zu den Standard-Komponenten von CARA Hilfe verknüpft werden kann. So kann man eine Eigene Hilfe für den Notizmanager, den Browser etc. anbieten.

Browser =		Standardhilfe für alle Browser/Datenlisten.
Masks=			Standardhilfe für alle Eingabe-Masken.
Tools=			Standardhilfe für den Werkzeugkasten.
Notes=			Standardhilfe für den Notizmanager.
Lists=			Standardhilfe für den ListDisplay-Dialog.
Monitor=		Standardhilfe für das Monitorfenster.
Import=			Standardhilfe für den ASCII-Daten-Import (Hauptfenster).
ImportFields=		Standardhilfe für den ASCII-Daten-Import (Felderzuordnungsfenster).
SQL=			Standardhilfe für das freie SQL-Interface.
Compiler=		Standardhilfe für den Opcode-Compiler.
Display=		Standardhilfe für das Bildschirm-Scalierungs-Werkzeug.
Documents=		Standardhilfe für den Dokumenten-Manager.

Sektion [ICONS]
MenuItemID=		Zu jedem Menu-Item (jedoch max. 32) kann ein Icon im Hauptfensetr einer CARA-Anwendung platziert werden. Hinter dem Gleichheitszeichen werden dann durch Komma getrennt die folgenden Parameter an das Programm übergeben:  
	BitMapFileNameAndPath 	Wo sich das Bitmap für das Icon ? Die 
						Konstanten	APPLICATION_PATH,
										SCRIPT_PATH
										SETDOC_PATH
										PICTURE_PATH
										DOCUMENT_PATH
										DATA_PATH
										SQL_PATH
										SPECIAL_PATH
										HELP_PATH
										PRINTSET_PATH
						können ebenfalls verwendet werden.
	Title					Soll zu dem Bitmap auch ein Text im Icon
						Sichtbar sein ?
	Hint					Wie lautet der Hilfetext, der angezeigt wird,
						Wenn man mit der Maus über das Icon fährt ?
	Width					Wie breit soll das Icon sein ?
	Space2LeftIcon			Wie weit soll das Icon vom linken Rand bzw. von 
						nächst linken Icon entfernt sein ?
	Height				Wie hoch soll das Icon sein ?
	Space2Top				Wie weit soll das Icon vom oberen Rand bzw. 
						von nächst darüberliegenden Icon entfernt sein ?
	ItemPanelNo				Die 32 Icons können in zwei Reihen á 16 Icons 
						untergebracht werden. Mit dieser Ziffer wird 
						bestimmt in welcher Reihe das Icon plaziert 
						werden soll. Sollte eine der Reihen unbenutzt 
						bleiben, wird sie ausgeblendet.
	KeyCode				Mit welcher Taste soll das Icon angesprochen 
						werden ? Wichtig : Das Hauptmenü darf nicht
						den Focus haben, wenn eine solche Taste 
						gedrückt wird, sonst reagiert das Programm 
						nicht.
	ShiftState				In welchem Zustand muß die KeyCode-Taste 
						gedrückt werden, damit das Programm reagiert ? 
						(1=normal, 2=shift, 3=ctrl, 4=alt).

Auch in der Stations-INI-Datei kann diese Sektion deklariert werden. Wichtig : Alle Icons die in der Applikations-INI-Datei und in der Stations-INI-Datei deklariert werden, werden angezeigt. (Doppelte ebenfalls!)

Beispiel für eine Batch-Jobs-INI-Datei mit integriertem Script

[Config]
UseDataBase=0
UseMenu=0
UseMainWindow=0
UseScript=1

SCRIPT_BEGIN
  VAR_NUM YNRes

CALC [YNRes]  AS [ID_YES]

  GET_YES_NO 'Achtung','Möchten Sie die AUTOEXEC.BAT bearbeiten ?',[YNRes]
  
  IF [YNRes]=[ID_YES]
    EXTERN 'NOTEPAD C:\AUTOEXEC.BAT', [EXTERN_SHOW]
  ELSE
    MESSAGE 'Info','Die Funktion wird nicht ausgeführt !'
  END_IF
SCRIPT_END

Beispiel für eine Applications-INI-Datei

[Config]
ProgName=IDEAL
MainImage=IDEAL.BMP,50,50,5,0
MainScript=Main.CSH
DataUser=Admin
DataPassword=

; ACCESS - SQL
[SQL]
HasBeginsWith=0
FilterNeedsUpper=0
WildCardMulti=*
WildCardSingle=?
BooleanTrue=-1
BooleanFalse=0
BooleanQuotation=
DatePicture4Select=mm/dd/yyyy
DatePicture4Modify=dd.mm.yyyy
DateQuotes4Select=#
DateQuotes4Modify="
TimeQuotes4Select=
TimeQuotes4Modify="

[FreeNotes]
; NoteTextName=NoteID
Englisch=101

[Icons]
1110=APPLICATION_PATH\Kunden.bmp,,Kunden-Stammdaten (F1),25,0,1,112,1
Aufbau einer Stations-INI-Datei

Die Stations-INI-Datei ist in zwei Sektionen unterteilt.

CARA legt zu jeder Applikation eine INI-Datei mit dem gleichen Namen wie die Applikations-INI-Datei im Windows-Verzeichnis jeder Station an, die eine CARA-Applikation aufruft. Eine Beschreibung dieser Applikations-INI-Datei finden Sie im Kapitel "Aufbau einer Applikations-INI-Datei". 

Sektion [Station]

StationID=		Dieser Wert beim ersten Aufruf einer Applikation mittels CARA erzeugt und sollte für die "Lebenszeit" der Applikation auf der entsprechenden Station nicht mehr geändert oder gelöscht werden. Das System kann damit die Station erkennen auf der gerade gearbeitet wird.

Display=		CARA unterteilt die Standard-Bildschirm-Auflösung der jeweiligen Station in 96*32 Koordinaten-Einheiten. Wenn z.B. ein 17-Zoll Bildschirm vorhanden ist und darauf eine Auflösung von 1024x768 Punkten eingestellt ist, dann muß die Applikation nicht den gesamten Bildschrim ausfüllen um gut lesbar präsentiert zu sein. In diesem Fall kann man z.B. Display=78 eingeben und die CARA-Applikation füllt beim nächsten Aufruf auf dieser Station nur noch 78% des Bildschirms aus.

ListDisplay=		Hier wird der Prozentsatz festgelegt, das das Verhältnis der Listen-Schriften zu denen der Masken-Felder bestimmt.

Screen=		Wie Display, jedoch ist die Angabe in Punkten möglich z.B.: Screen=800x600

Sektion [WindowCoords]

Unter dieser Sektion speichert CARA in Abhängigkeit von der Einstellung "CoordinatesFlag" in der Applikation-INI-Datei, die vom User getätigten Fenster-Koordinaten und Größen ab. Diese Sektion kann jederzeit (z.B. wenn Bildschirmeinstellungen geändert wurden) wieder gelöscht werden. Die Sektion baut sich automatisch wieder auf.

Sektion [ICONS]
Siehe auch bei der Deklaration der Applikations-INI-Datei. Wichtig : Alle Icons die in der Applikations-INI-Datei und in der Stations-INI-Datei deklariert werden, werden angezeigt. (Doppelte ebenfalls!)

Allgemeine Syntax für alle Dateitypen

1. 	Leitende Leerzeichen in einer Zeile werden stets unterdrückt, dies erlaubt eine verschachtelte Zeilen-Anordnung ähnlich einem C oder PASCAL Source-Code.

2. 	Leerzeilen sind erlaubt.

3. 	Jede sinnvolle Zeile beginnt mit einem Befehl.

2. 	Bemerkungen haben stets ein Semikolon ";" als erstes Zeichen in einer Zeile. Bemerkungen können nicht hinter einem sinnvollen Befehl angeordnet werden, sie müssen immer in extra Zeilen untergebracht werden.

3. 	Jeder Befehl kann durch einen oder mehrere Parameter charakterisiert werden.

4. 	Parameter werden durch ein Komma (,) getrennt.

5. 	Numerische Parameter werden ohne, alphanumerische werden in Hochkommata (') geschrieben.

Aufbau einer Menü-Datei

Syntax

1.	Es gilt die "Allgemeine Syntax für alle Dateitypen die innerhalb von CARA Verwendung finden."

2.	Eine Menüdefinition startet mit dem Befehl MAINMENU_BEGIN und endet mit dem Befehl MAINMENU_END.

3.	In einem Menü werden alle Menüpunkte durch die Befehle SUBMENU_BEGIN, ITEM und SUBMENU_END definiert.

Beschreibung der Befehle

MAINMENU_BEGIN		Start einer Menü Definition	(ohne Parameter)

MAINMENU_END		Ende  einer Menü Definition	(ohne Parameter)

ITEM				Start einer Menüpunkt Definition.
				Parameterliste:
				Nr	Bedeutung	Typ	Bemerkung	
				1	ID		Zahl int.	Für jedes ITEM und SUBMENU außer ITEM's
								mit dem Bezeichnerinhalt "-" muß diese Zahl
								eindeutig sein	
				2	Bezeichner	String	Wenn nur ein "-" übergeben wird, entsteht im
								Menü eine Unterteilung in Form einer Linie.
								Das Zeichen "&" vor einem  Bezeichner-
								buchstaben legt den "Hotkey" des Menü-
								punktes fest.	
				3	Script		String	"Script" muß einen existierenden Dateinamen
								eines CARA-Scriptes bezeichnen. Wenn das
								Reservierte Wort "TERMINATION" in diesem
								Parameter übergeben wird, dann führt das
								Auslösen des zugehörigen Menüpunktes zum
								Beenden des laufenden Programms. Das
								reservierte Wort "TOOLS" führt zu dem Aufruf
								der Programmierer-Werkzeuge und
								"SQL_INTERFACE" zu Aufruf der freien SQL-
								Schnittstelle. An das aufzurufende Script kann
								man auch numerische Parameter übergeben,
								indem man diese, mit Kommata getrennt hinter
								den Script-Namen aufführt.
				4	Hint		String	Hilfezeile, die eingeblendet werden soll, wenn 
								man mit der Maus über den Menüpunkt fährt.
				5	ItemImage	String	Dateiname eine Image-Datei, die dem 
								Menüpunkt im Tree-Menü zugeordnet werden 
								soll.
				6	ImageSelected	String 	Dateiname einer Image-Datei, die angezeigt 
								werden soll wenn der Menüpunkt ausgewählt 
								wurde.
				7	MenuExclusions	Zahl int.	Bitte die Erweiterung 8.06.87/731/HB vom 
								01.02.2005 lesen.
				8	DMS-Index	Zahl int.	Jedem Menüpunkt kann ein DMS-Index 
								zugeordnet werden. Dieser DMS-Index verweist 
								auf die Dokumentenart, der der Menüpunkt im 
								DMS entspricht. Damit beim Aufruf des DMS 
								gleich angegeben werden kann, was angezeigt 
								werden soll. Der DMS-Index wird in der Datei 
								CARA2DMSFlags.txt gezeigt.

SUBMENU_BEGIN		Start einer Untermenü-Definition.
				Parameterliste
				Nr	Bedeutung	Typ	Bemerkung	
				1	ID		Zahl int.	Für jedes ITEM und SUBMENU außer ITEM's
								mit dem Bezeichnerinhalt "-" muß diese Zahl
								eindeutig sein. Das Zeichen "&" vor einem
								Bezeichnerbuchstaben legt den "Hotkey" des
								Menüpunktes fest.	
				2	Bezeichner	String	Hier darf kein "-" übergeben werden	

SUBMENU_END		Ende einer Untermenü-Definition.

Beispiel für eine Menü-Definition (Dateiname "Default.mnu")

MAINMENU_BEGIN

  ; *********************  A D R E S S E N ******************** 
  SUBMENU_BEGIN 1000,'A&dressen'
    ; An das Script KNDSTAMM.CSH wird der Parameter 1 übergeben, dieser steht
    ; im Script als Wert in der Variable [RECORD_ID1] zur Verfügung.
    ; Weitere (bis zu 32) Parameter können angegeben werden.
    ITEM 1100,'&Kunden','KNDSTAMM.CSH,1'
    ITEM    0,'-',''
    ITEM 1200,'&Lieferanten','LIFSTAMM.CSH'
    ITEM    0,'-',''
    ITEM 1300,'&Mitarbeiter','MITSTAMM.CSH'
  SUBMENU_END

  ; *********************  H I L F E N ************************
  SUBMENU_BEGIN 9000,'&Hilfen'
    ITEM 9200,'&SQL','SQL_INTERFACE'
    ITEM    0,'-',''
    ITEM 9300,'&Werkzeuge','TOOLS'
    ITEM    0,'-',''

    SUBMENU_BEGIN 9400,'&Definitonen'
      ITEM 9410,'&Kunden Zahlungsbedingungen','ZahlBed.CSH'
      ITEM    0,'-',''
      ITEM 9420,'Kunden L&ieferbedingungen','LiefBed.CSH'
    SUBMENU_END
  SUBMENU_END

  ITEM 9999,'&Ende','TERMINATION'
MAINMENU_END

Aufbau einer Masken-Datei

Syntax

1.	Es gilt die "Allgemeine Syntax für alle Dateitypen die innerhalb von CARA Verwendung finden."

2.	Eine Menüdefinition startet mit dem Befehl BEGIN und endet mit dem Befehl END.

3.	In einer Maske werden alle Dialogelemente  durch der Befehle ITEM,VIEW, HINT und ev. TEXT definiert. ITEM und VIEW müssen dabei auf jeden Fall pro Dialogelement aufgeführt werden.

Beschreibung der Befehle

BEGIN		Start einer Masken Definition

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	Maskenname	String			Name der Maske	
		2	Titel		String			Überschrift für den User in der Fenster-Titel-
								Leiste	
		3	MaskTabelle	String			Tabellenname der Tabelle mit der die
								Datenfelder der Maske korrespondieren sollen		4	Query		String.			Standard-QueryID der Abfrage die im SQL-
								Verzeichnis unter dem Dateinamen
								"QueryID.SQL" gespeichert ist. z.B.
								"110001.SQL"	
		5	ViewTabelle	String			Tabellenname der Tabelle mit der die
								Datenfelder der Maske korrespondieren sollen
								die in einer Übersichtsliste unter der
								eigentlichen Maske zu sehen sein sollen.
		6	View		String			Übersichtslisten-QueryID der Abfrage, die im
								SQL-Verzeichnis unter dem Dateinamen
								"QueryID.SQL" gespeichert ist. z.B.
								"110002.SQL"	
		7	X		Zahl	1.0 bis 90.0	X-Koordinate der oberen linken Ecke des
								Masken-Fensters	
		8	Y		Zahl	1.0 bis 25.0	Y-Koordinate der oberen linken Ecke des
								Masken-Fensters	
		9	Breite		Zahl	10.0 bis 96.00	Breite des Masken-Fensters	
		10	Höhe		Zahl	  5.0 bis 32.0	Höhe des Masken-Fensters	
		11	Optionen	String	SEARCH SAVE	Die Optionen können mit einem Pluszeichen 
						DELETE CLEAR	verbunden und gleichzeitig gesetzt werden.
						INFO PRINT 	Die Masken Optionen können lediglich 
						CALENDAR	abgeschaltet/ausgeblendet werden.  
						SPINNER 	SEARCH+SAVE' blendet die Knöpfe für  
						CALCULATOR 	Suchen und Speichern aus.
						HELP DOOR 
						NOTES PANEL  
						DOCUMENTS
						MODAL  	Soll das Fenster modal gezeigt werden?
						MANDANT	Blendet die Mandantenliste in die Maske, auch 
wenn in Tablefld die Tabelle NICHT als 
Mandantenfähig gekennzeichnet wurde.
						PRNMENU  	Schaltet das Drucker-PopUp-Menu aus. 
						SNDMENU  	Schaltet das Senden-PopUp-Menu aus. 
						MODUS  	Liste für Arbeitsmodus.
						RECLOCK	Schaltet automatisches Record-Locking für
								diese Maske ein.
						SHRINK		Soll die Maske nach dem Ausblenden von
								Feldern “verkürtzt“ werden?
						FORCE_FILTER	Muss in mindestens einem Feld ein Suchwert
								eingegeben werden, bevor gesucht werden
								soll?
QFILTER	Soll die Filterbox unten links im Dialog angezeigt werden?
FAVORITES	Soll das Favoriten-Icon eingeblendet werden?
BOOKMARKS	Soll das Bookmark-Icon eingeblendet werden?
DMS	Soll das DMS-Icon eingeblendet werden?
SCALEH1.0	Scaliert innerhalb der Maske alle horizontalen Werte mit dem hier angegebenen Faktor. So wird mit SCALEH0.8 alles auf 80% der normalen Höhe berechnet. So hat man mehr Zeilen innerhalb einer Maske.
SCALEV1.0	Scaliert innerhalb der Maske alle vertikalen Werte mit dem hier angegebenen Faktor. So wird mit SCALEV0.8 alles auf 80% der normalen Breite berechnet. So hat man mehr Platz innerhalb einer Maske.
COLOR$faebd7	Mit welcher Farbe soll der Hintergrund gezeichnet werden? Die Angabe der Farbe kann natürlich frei angegeben werden.
AMPEL	Soll das AMPEL-Icon ganz rechts in der Maske angezeigt werden?
						FTS_NOTES	Sollen alle Notizen des Datensatzes im Falle 
einer Volltextsuche auch durchsucht werden?
						FTS_NOTE1	Soll im Falle einer Volltextsuche nur die dem 
Datensatz zugeordnete Notiz des Textes 1 
ebenfalls mit durchsucht werden? (In diesem 
Fall macht natürlich die Option FTS_NOTES 
keinen Sinn, aber FTS_NOTE2 kann durchaus ebenfalls verwendet werden.)
						FTS_NOTE2	Soll im Falle einer Volltextsuche nur die dem 
Datensatz zugeordnete Notiz des Textes 2 
ebenfalls mit durchsucht werden? (In diesem 
Fall macht natürlich die Option FTS_NOTES 
keinen Sinn, aber FTS_NOTE1 kann durchaus ebenfalls verwendet werden.)
						FULL_SCREEN	Die Maske wird im Vollbildmodus gestartet.
						USER1 USER2 	Diese Optionen können eingeschaltet werden. 
						USER3 USER4 	Sie zeigen innerhalb einer Maske-Icon-
						USER5  	Leiste bis zu 5 frei definierbare Knöpfe. 
								Diese Knöpfe lösen im laufenden Script bei
								Betätigung das MASK_HOOK_BUTTON-
								Ereignis aus. Die
								[Mask!MASK_ACT_FIELD_ID] hat innerhalb
								des Ereignisses den Wert 1 bis 5 und der
								[Mask!MASK_ACT_FIELD_NAME] zeigt dann
								den Wert "USER_BUTTON_1" bis
								"USER_BUTTON_5".     	

		12	FirstFocus	String			Welches Feld soll nach dem Öffnen der Maske
								den Focus erhalten.
		13	XRef		String			Auf welche Xreferenz soll beim Öffnen des
								Document-Managers zugegriffen werden.
		14	HelpID		String			In welcher Datei befindet sich die Hilfe zu
								dieser Maske?

END		Ende einer Masken Definition

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	Maskenname	String			Dieser String muß mit dem Maskennamen
								in der BEGIN-Zeile übereinstimmen	

ITEM		Start einer Dialog-Element-Definition

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	ID		Zahl int.			Für jedes ITEM muß diese Nummer innerhalb
								der Definitionsdatei einzigartig sein.
		2	TYP		String	LABEL  
						GROUP_BOX 	Vor einem Set von CHECK_BOXen bzw.
						RADIO_BOX  	RADIO_BUTTONs zu verwenden.
						BIT_BUTTON 	Knopf der durch Betätigen der TAB-Taste
 						SPEED_BUTTO	Ninnerhalb der Maske nicht erreicht
								werden kann. Wenn in VIEW.Inhalt  der
								Dateiname einer BMP-Datei angegeben wird,
								so wird das zugehörige Bild als Knopf-ICON
								geladen und verwendet. 
						BYTE  		Integer Werte von 0 bis 255  
						LONGINT   	Integer Werte von 2147483648 bis
								+2147483647
						EXTENDED    	Werte von -3.4 * 19 bis 3.4 * 20
						STRING  	Zeichenkette für max. 2147483646 Zeichen
						DATE  		Datums-Werte
						TIME  		ZeitWerte
						CHECK_BOX  	Ja/Nein-Werte
						RADIO_BUTTON	Entweder/Oder-Werte
						PANEL  	Rahmen und Unterteilungen
						LIST_TEXT      	Dem Typ LIST_TEXT kann eine Textdatei
								zugewiesen werden, der Dateiname kann im
								VIEW.Maske hinterlegt werden. Der
								LIST_TEXT mit der ITEM.ID = 0 definiert die
								Liste für den Arbeitsmodus 
						REGISTER   	Register-Karten
						MEMO       	Langtexte (die erste Zeile wird beim Suchen
								berücksichtigt - das Masken-Query / View-
								Query muß auf jeden Fall mit Alias aufgesetzt
								werden. Wird mit dem Befehlen MEMO_SET
								und MEMO_GET gesteuert.
						PICTURE      	Bilder (*.tif; *.tiff; *.jpg; *.jpeg; *.jpe; *.pcx;
								*.bmp; *.ico; *.cur; *.png; *.wmf; *.emf, *.gif
								(keine Animationen). Wird mit den Befehlen
								PICTURE_SET und PICTURE_SAVE 
gesteuert. 
						TREE		Daten-Baum-Feld. Wird mit den Befehlen
								TREE_SET, TREE_ITEM, TREE_ADD,
								TREE_MODIFY und  TREE_DELETE
								gesteuert.     
						GRID		Daten-Browser-Feld. Wird mit dem Befehl
								GRID_SET gesteuert.	
						METER		Fortschrittsbalken mit und ohne Prozent-
								Anzeige. Wird mit dem Befehl METER_SET
								gesteuert.	
						NAVIGATE	Voll funktionsfähiges Web-Browser-Feld. 
								Die Seiten darin können per Klick oder mit 
Dem Befehl NAVIGATE angesteuert werden.

		3	X		Zahl	0.1 bis 95.0	X-Koordinate für die obere linke Ecke des
								Dialogelementes. Wenn VIEW.Mother gesetzt
								ist, bezieht sich diese Angabe auf das
								Dialogelement mit der ITEM.ID =
								VIEW.Mother, ansonsten bezieht sich dieser
								Wert auf das Fenster selbst.	
		4	Y		Zahl	0.1 bis 31.0	Y-Koordinate für die obere linke Ecke des
								Dialogelementes. Wenn VIEW.Mother gesetzt
								ist, bezieht sich diese Angabe auf das
								Dialogelement mit der ITEM.ID =
								VIEW.Mother, ansonsten bezieht sich dieser
								Wert auf das Fenster selbst.	
		5	Breite		Zahl	0.1 bis 95.0	Breite des Dialogelementes	
		6	Höhe		Zahl	0.1 bis 31.0	Höhe des Dialogelementes	
		7	Optionen	String			Die Optionen können mit einem Pluszeichen
								verbunden und gleichzeitig gesetzt werden.
								Diese Optionen können nur eingeschaltet
								werden.  
						PROTECTED	Das Feld kann nicht verändert werden.
						HIDDEN 	Das Feld ist nicht sichtbar.
						BLOCKED 	Der Inhalt des Feldes wird beim Säubern der
								Maske nicht entfernt.
						MODIFIED_ALWAYS
								Das Feld wird bei jedem Suchvorgang, den 
Der User auslöst, wird der Inhalt dieses Feldes
								ebenfalls als Suchfilter verwendet.
						FTS		Ist nur bei Feldern vom Typ “String” möglich,
								es signalisiert der Engine, dass dieses Feld an
								der Volltextsuche (FullTextSearch) teilnehmen
								soll.
						DEMAND	Wenn der User versucht zu speichern, wird 
(nur wenn das Feld nicht PROTECTED und 
nicht HIDDEN ist) untersucht ob diese Felder 
mit Daten gefüllt sind. Falls das Feld nicht gefüllt (oder noch 0) ist, wird es rot unterlegt 
und das Speichern mit einer Meldung 
verhindert. Wenn die Maske gesäubert wird, werden diese Felder wieder „normal“ hinterlegt.
						CLIENT 	Bei PANEL, GRID, NAVIGATE und REGISTER
 						BOTTOM	Items können diese Optionen definieren wie 
						LEFT 		das Panel im Fenster anliegen soll. Die Werte 
						RIGHT 		für Breite und Höhe spielen dann jeweils eine 
						TOP    		Rolle bei entsprechender Option. Ohne Option 
						LOWER 	wird das Panel mit seinen Koordinaten im 
						RAISED       	Fenster positioniert.  Zusätzlich kann bei 
								PANEL-Items noch das Aussehen bestimmt 
								werden. Default ist RAISED, d.h. das PANEL 
								sieht aus, als ob es sich von der Maske 
abhebt. 
								Bei LOWER sieht das PANEL aus, als ob es 
								eine Vertiefung in der Maske wäre. Beispiel für 
								eine kombinierte Option: 'TOP+LOWER'
								Bei einem METER wird hiermit gesteuert, ob 
er mit “Vertiefung” bzw. Rand im Fenster liegt
								(RAISED) oder nicht (LOWER).
								Diese Optionen gelten auch für EXTENDED, 
LONGINT und STRING Felder, sowie LABEL. 
ALIGNR	Bei LABEL muss man zum Ausrichten 
ALIGNL	innerhalb der Maske jedoch ALINGL und 
ALIGNR verwenden, da RIGHT und LEFT zum 
Ausrichten des Textes innerhalb des Labels 
verwendet werden.
						CENTER	Bei einem LABEL kann der Text mit dieser 
								Option zentriert abgebildet werden.
						AUTO_CHR	Bei Eingabe-Feldern kann hiermit 
eingeschaltet
						AUTO_U_D 	werden, ob das Feld automatisch verlassen
						AUTO_L_R	wird, wenn mehr als die erlaubte Anzahl
								Zeichen eingegeben wurde. Ausschalten, 
dass man ein Eingabe-Feld mit der 
Cursor-Taste Up oder Down bzw. Left oder 
Right verlassen kann.  

						BOLD		Der Text des Dialog-Elementes wird fett 									gedruckt abgebildet.

						WORDWRAP	Bei Memofeldern wird ein Zeilenumbruch 
								erzwungen.

						FONTCOLOR	Soll die dem Dialogelement zugewiesene
								Farbe auf den Hintergrund wirken, braucht
								diese Option nicht gesetzt zu werden (default),
								anderenfalls, kann mittels dieser Option die
								Textfarbe umgestellt werden. 
   						Farben:
						MAROON 	Jedem Dialogelement kann noch eine vom
						GREEN 	Standard abweichende Farbe zugewiesen
						OLIVE 		werden. Es können auch hexadezimale 
						NAVY 		Farbwerte (wie bei HTML) angegeben werden.
						PURPLE 	Z.B. $0475AB (RGB)
						TEAL 
						GRAY 
						SILVER 
						RED 
						LIME 
						BLUE 
						FUCHSIA 
						AQUA 
						BLACK 
						WHITE 
						YELLOW	
						WINDOW 	Windows-Hintergrundfarbe

						PASSWORD	Verdeckt die Eingaben mit Sternchen (*) bei
								ITEM.Typ = STRING oder Zahl. 

						FONTSIZEn.n 	Multipliziert die Schriftgröße mit dem Faktor
"n.n". Die Darstellung eines solchen Feldes, Grids oder Labels wird entsprechend größer oder kleiner sein.  

						FONTNAMEArial Setzt den Fontnamen “Arial“ für das 
								Dialogelement. Standard ist der in der 
								Applikations-INI-Datei angegeben FontName. 
								Bitte keine Leerzeichen im Fontnamen 
								verwenden. Folgende Zeichen werden zu 
								Leerzeichen umgewandelt “#“, “@“, “_“. 
								Folgende Zeichen werden als Ende der 
Angabe für den Fontnamen gewertet: “,“ “;“ 
“ “, “-“ und “ ‘ “.

						RS_OR		Wenn ein “RelaSearch” vorgenommen wird,
								kann mit dieser  Option erwirkt werden, dass
								alle Rela-Felder innerhalb einer einzigen
								Abfrage mittels einer ODER-Verknüpfung
								durchsucht werden. Wenn diese Option nicht
								gesetzt ist, werden alle Felder in separaten
								Abfragen nacheinander durchsucht. Dies
								macht besonders bei grossen Datenmengen
								Sinn, da die Antwortzeiten dadurch erheblich
								reduziert werden.

						SHOW_%	Muss gesetzt werden, wenn bei einem METER
								die Prozentanzeige sichtbar sein soll.

						INVERT_%	Muss gesetzt werden, wenn die Fontfarbe der
								Prozentanzeige eines METER invertiert 
werden soll.

						PHONETIC	Soll dieses Feld bei der phonetischen Suche 
								berücksichtigt werden? Achtung: es muss 
								dann ein gleichnamiges Feld mit der Endung 
								“Phntc“ in der Datentabelle existieren.
					
						CALWEEK	Das Feld muss eine Fließkommazahl sein.
Soll dieses Feld für die Eingabe von 
Kalenderwochen verwendet werden können? 
Wenn ja, wird bei fehlender Eingabe der 
Nachkommastellen, automatisch das aktuelle 
Jahr in den Wert hinter dem Komma eingefügt.
					
						CURSOR2TOP  Setzt den Cursor an den Anfang des Textes, 
eines MEMO-Feldes anderenfalls wird der 
Cursor am Ende platziert.

						NUMSETxxx	Wenn im Nummernkreis “xxx“ im Feld
“FirstChars“ ein Wert angegeben wurde, wird 
dieser Wert bei einer Suche mit einer Wildcard
an erster Stelle des Suchtextes automatisch 
dem Suchtext vorangestellt um dem 
SQL-Server 
eine auf dem Index beruhende Suche zu 
ermöglichen. Aus “*04556*“ wird z.B. “2*04556*“ (wenn im Feld “FirstChar“ des Nummernkreises “xxx“ die Zeichenfolge “2“ hinterlegt wurde).
Dies beschleunigt die Suche erheblich und 
minimiert die Rechenzeit des SQL-Servers.

		8	Level		Zahl			Ein User, dessen Rechtelevel für den aktuellen
								Menüpunkt großer oder gleich diesem Wert
								ist, kann das Feld sehen, für andere wird das
								Feld ausgeblendet. 
								Default ist dieser Wert 0 und muss auch nicht
								angegeben werden, außer, wenn eine
								RelaSearch oder QueryExt-Angabe folgen 
soll.

		9	RelSearch	String			Durch Kommata getrennt, können hier
								Feldnamen angegeben werden, die ebenfalls
								durchsucht werden sollen, wenn das aktuelle
								Feld vom User zum Suchen verwendet wurde
								und kein Ergebnis erzielt wurde. So kann es
								z.B. Sinn machen, dass der User im 
(aktuellen)
								Feld “Artikelnummer” eine Eingabe macht und
								die Suche auslöst, ein entsprechender Treffer
								nicht erzielt werden konnte, und dann einfach
								im Feld “AlternativeNum” weitergesucht
								werden soll, und danach, falls wieder kein
								Treffer erzielt wurde soll das Feld “ExtraNum”
								untersucht werden. Dann müsste hier
								'AlternativeNum,ExtraNum' eingetragen
								werden. 
								Default ist dieser Wert leer und muss auch
								nicht angegeben werden, außer, wenn eine
								QueryExt – Angabe folgen soll.

		10	QueryExt	String			Erweiterung des Such-Querys um die hier
								hinterlegte Where-Clause, wenn die ebenfalls
								hier hinterlegte Bedingung erfüllt ist. Der String
								ist folgendermassen aufzubauen:

								'Bedingung1{|Bedingung2{|...}}:Where-Clause'

								Die eigentliche "Where-Clause" ist am Ende 								mit einem ":" von den "Bedingungen" getrennt.

								Bedingung = wann soll die Where-Clause 
								eingesetzt werden. Mögliche Bedingungen:
								REL 	Die Where-Clause soll beim
									RelaSearch eingesetzt werden
FTS     Die Where-Clause soll bei der FTS-
									Suche eingesetzt werden
								QueryID	Die Where-Clause soll bei dem Query
									mit der angegebenen ID eingesetzt
									werden

								Wichtig	1. Wenn keinerlei Bedingung
									angegeben wurde, wird die 
Bedingung nicht angebaut.

									2. Wenn die Bedingung immer
									eingesetzt werden soll, muss man
									also "FTS|REL|QueryID1|..." 
angeben.
									Aber: dann kann man die Where-
									Clause auch weglassen, denn in so
									einem Fall kann sie im Query
									standardmäßig untergebracht werden
									und hier muss keine Rechen-Zeit
									vergeudet werden.

								Default ist dieser Wert leer und muss auch
								nicht angegeben werden.

		11	LevelProtect	Zahl			Ein User, dessen Rechtelevel für den aktuellen
								Menüpunkt großer oder gleich diesem Wert
								ist, kann das Feld sehen und bearbeiten, für
andere wird das Feld protected. 
								Default ist dieser Wert 0 und muss auch nicht
								angegeben werden.

VIEW		Beschreibt den Inhalt eines zuvor in ITEM definierten Dialog-Elements. Diese Zeile muss 
ZWINGEND zu einer ITEM-Definition erscheinen.

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	Inhalt		String	TODAY 		Bei ITEM.Typ = DATE kann hier das aktuelle
								Datum durch das reservierte Wort TODAY im
								Feld angezeigt werden. 
						NOW		ei ITEM.Typ = TIME kann hier die aktuelle
								Zeit durch das reservierte Wort NOW im Feld
								angezeigt werden. 
						KW		ITEM.Typ = EXTENDED kann hier durch
								das reservierte Wort KW die aktuelle
								Kalenderwoche angezeigt werden.
								Bei ITEM.Typ = REGISTER kann hier der
								Name des Default-Tabs angegeben werden.
								Bei ITEM = PICTURE kann hier der 
Dateiname des Bildes hinterlegt werden. 
								Bei ITEM = BIT_BUTTON und 
								SPEED_BUTTON kann hier die Zeichenkette
								für den Knopfbezeichner hinterlegt werden.	
								Bei ITEM = METER kann hier der Start-
								Prozentwert angeben werden.

		2	Maske		String	'#########.##' 	Extended oder Longint
						'9999999999' 		
						'hh:mm'		Time 
						'dd.mm.yyyy'	Date
						'XXXXXXXXX' 	String, legt die Anzahl der Zeichen fest, die
						'13'		eingegeben werden dürfen.
						'AutoSize'	Picture, bei AutoSize wird das Bild in
								Originalgröße dargestellt. Wenn keine der
								Optionen verwendet wird, wird von dem Bild
								nur der Teil gezeigt, der durch die
								vorgegebenen Koordinaten möglich ist.
						'BUTNLIKE'	Picture, bei BUTNLIKE agiert das Bild wie ein 
Knopf. Ein Click auf das Bild löst den 
ButtonHook aus.
.
						'Table;		Memo, legt die Tabelle fest, aus der die Notiz
						MaskField;	gelsen werden soll, das Feld in der aktuellen
						NoteID' 		Maske, in dem sich die RecordID befindet, die 
								sich auf den Datensatz in der genannten
								Tabelle bezieht und die NotizID (1=Text1,
								2=Text2, 3=Intern und 4=Immer etc)

						'TabName1;	Register, legt die Überschriften der einzelnen 
						TabName2;....' 	Register-Tabs fest. Wenn hier ein 
Pipe-Zeichen gefolgt von einer 1 angehängt 
wird, werden die Reiter des Registers mit 
dynamischer Breite angeordnet, anderenfalls mit starrer Breite z.B. ’Tab1;Tab2;Tab3|1’

						'Test.bmp|1' 	BIT_BUTTON und SPEED_BUTTON, Angabe
								der Bilddatei. Mit Pipe getrennt, wieviele Bilder
								in der Bilddatei hinterlegt sind. Es können 
auch die Standard-Pfad-Konstanten verwendet werden:
'PICTURE_PATH\Test.bmp|1'. Wenn
								mit einem weiteren Pipe-Zeichen noch ein
								Ausrufungszeichen angehängt wird
								'PICTURE_PATH\Test.bmp|1|!', dann wird das
								angegebene Bild bei einem Mask-Clear
								wiederhergestellt, falls es mit SET_LABEL
								währen der Laufzeit verändert wurde.
								'Used.bmp|Unused.bmp'
								METER, Angabe des Bitmaps, das für den
								verwendeten Bereich und nicht verwendeten
								Bereich der Prozentanzeige.

		3	DataField	String			Hier wird der Name des zugehörigen
								Datenfeldes hinterlegt. Sollten im Standard-
								Query mehrere Tabellen angesprochen
								werden, so muß der Feldname mit Alias
								angegeben werden. Wenn trotzdem kein Alias
								angegeben wurde, wird als Alias der erste
								Buchstabe der MaskTabelle eingesetzt	

		4	Mother		Zahl int.			Die ID eines übergeordneten Feldes z.B. die 
einer GROUP_BOX, RAIDO_GROUP oder
								eines PANEL.

		5	FromField	String			Name des Tabs eines übergeordneten
								REGISTERs. wenn bei Mother die ID eines
								Registers eingetragen wurde.	

		6	Language-Form	String			Name eines Scriptes, dass für Übersetzungen
verwendet werden soll. Standard ist der 
Dialog, der durch den INI-Datei-Schlüssel 
“LanguageDialog= definierte Dialog.
Wenn nach dem Script-Namen noch ein Pipe-
Zeichen folgt und danach die Nummer eines 
Langtext-Indexes (NoteID in der Tabelle 
„notes“) folgt, so kann das Übersetzungsscript die Notiz mit dem gegebenen Index (kommt als RECORD_ID2 an das Script) zum Übersetzten anbieten. 	

HINT	Beschreibt den Hilfetext der zu einem Dialog-Element (online) erscheint, wenn man sich mit der Maus darüber befindet. Diese Zeile muß nicht zwingend zu einer ITEM-Definition erscheinen.

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	Hilfetext		String			

TEXT	Eine Zeile des Textes der zu einem LIST_TEXT Feld gehört. Für die MODUS-BOX der Maske wird der LIST_TEXT mit ItemID = 0 verwendet. Innerhalb des Textes kann dann am Ende mit einem Pipezeichen (|) noch der Benutzerrechtelevel angegeben werden, den der Benutzer mindestens durch sein Rechtemodell haben muss um die Zeile auswählen zu dürfen. Beispiel: TEXT ‘Archiv|3‘

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	Zeile		String	(oder String|Level)		

CHOICER_BEGIN
	Beginn eines Choicers bzw. Auswahl-Menues. Weitere Beschreibung s.u.

		Parameterliste
		Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
		1	ItemID		Zahl int.			Wenn für ItemID eine 0 übergeben wird, dann
								wird der Choicer für den Informations-Knopf
								der Maske definiert. Falls ItemID die ID einer
								Item-Zeile beschreibt, so wird der Choicer dem
								entsprechenden Dialog-Element zugeordnet.
								Die Zuordnung eines Choicers macht nur Sinn,
								wenn es sich Dabei um eine xxxx_BUTTON
								Dialog-Element handelt. Eine Fehlerkontrolle
								für diesen Fall unterbleibt im Sinne einer
								schnellen Masken-Interpretation	

Beispiel für eine Masken-Definition (Dateiname "218.doc")

;* START **** Warengruppen ******** MASKE NR. 218 **************

BEGIN '218','Warengruppen','WARENGRP','218001','','',10,5,71,32,'PRINT'

  ; Definition eines Info-Menüs mit Choicer.ID = 0
  CHOICER_BEGIN 0
    ITEM   21801, '&Warengruppen/Artikel Liste', 'WarArt.CSH', '', 'PICTURE_PATH\apic.bmp' 
    ITEM       0, '-', '', ''
    ITEM   21802, 'bisher nicht verwendete Warengruppen', 'WarNot.CSH', ''
  CHOICER_END

  ; Definition einer Arbeits-Modus-Box mit ITEM.Typ = LIST_TEXT & ITEM.ID = 0
  ITEM       0, 'LIST_TEXT', 0, 0, 15, 00, ''
  VIEW          'bearbeiten', '', '', 0
  HINT          'Arbeitsmodus'
  TEXT          'Neuanlage'
  TEXT          'bearbeiten'

  ITEM 2180201, 'LABEL', 3, 2, 12, 1, ''
  VIEW          'Warengruppe', '', '', 0
  HINT          'Bitte geben Sie hier die Warengruppen-Nummer ein'

  ITEM 2180001, 'LONGINT', 19, 2, 5, 1, ''
  VIEW          '1', '####', 'Gruppe', 0
  HINT          'Bitte geben Sie hier die Warengruppen-Nummer ein'

  ITEM 2180202, 'LABEL', 3, 4, 12, 1, ''
  VIEW          'Bezeichnung', '', '', 0

  ITEM 2180002, 'String', 19, 4, 41, 1, ''
  VIEW          '', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', 'Bezeichnung', 0

  ITEM 2180003, 'BYTE', 2, 1, 3, 1.00, 'HIDDEN'
  VIEW          '1', '###', 'AKTIV', 0
END '218'
;* ENDE **** Warengruppen ******** MASKE NR. 218 **************

Aufbau eines Choicer-Menüs

Syntax

1.	Es gilt die "Allgemeine Syntax für alle Dateitypen die innerhalb von CARA Verwendung finden."

2.	Eine Choicer-Definition startet mit dem Befehl CHOICER_BEGIN und endet mit dem Befehl CHOICER_END.

3.	In einem Choicer werden alle Verzweigungen in "Unter-Choicer" durch die Befehle SUBCHOICER_BEGIN und SUBCHOICER_END definiert.

Beschreibung der Befehle

CHOICER_BEGIN	Start einer Choicer-Definition

			Parameterliste
			Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
			1	ItemID		Zahl int.			ID des Dialogelementes mit dem der
									Choicer verbunden ist bzw. über den
									er aufgerufen wird. Siehe Ende des
									Kapitels "Aufbau einer Masken-Datei
									für CARA-Programme"	

CHOICER_END		Ende einer Choicer-Definition			(ohne Parameter)

ITEM			Start einer Choicer-Zeilen-Definition.

			Parameterliste
			Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
			1	ID		Zahl int.			Für jedes ITEM und SUBCHOICER
									außer ITEM's mit dem Bezeichner-
									Inhalt "-" muß diese Zahl eindeutig
									sein. Wird die ItemID negativ	
									übergeben, dann wird eine neue
									Menüspalte begonnen. Die ID wird	
									allerdings innerhalb des Programms
									absolut, d.h. mit ihrem positiven Wert
									weiterverarbeitet	
			2	Bezeichner	String			Wenn nur ein "-" übergeben wird,
									entsteht im Choicer eine Unterteilung
									in Form einer Linie.
			3	Script		String			"Script" muß einen existierenden
									Dateinamen eines CARA-Scriptes
									bezeichnen. An das aufzurufende
									Script kann man auch numerische
									Parameter übergeben, indem man
									diese, mit Kommata getrennt hinter
									den Script-Namen aufführt. Die
									jeweils erste Zahl wird jedoch immer
									durch die RecordID des aktuell in der
									Maske geladenen datensatzes ersetzt.	
			4	Hint		String			Was soll dem User angezeigt werden
									wenn er die Maus über den Choicer-
									Punkt bewegt	

			5	Picture		String			(optional) Datei, die als Symbol vor 
dem Item angezeigt werden soll. Pfad-
Konstanten sind erlaubt. Z.B. PICTURE_PATH.

SUBCHOICER_BEGIN	Start einer Unter-Choicer -Definition.

			Parameterliste
			Nr	Bedeutung	Typ	mögl. Werte	Bemerkung	
			1	ID		Zahl int.			Für jedes ITEM und SUBCHOICER
									außer ITEM's mit dem Bezeichner-
									Inhalt "-" muß diese Zahl eindeutig
									sein	
			2	Bezeichner	String			Hier darf kein "-" übergeben werden	.
			3	Hint		String			Was soll dem User angezeigt werden
									wenn er die Maus über den Choicer-
									Punkt bewegt	
			4	Picture		String			(optional) Datei, die als Symbol vor 
dem Item angezeigt werden soll. Pfad-
Konstanten sind erlaubt. Z.B. PICTURE_PATH.

SUBCHOICER_BEGIN	Ende einer Unter-Choicer-Definition	(ohne Parameter)

Beispiel für eine Choicer-Definition

;* START **** Choicer ******************************************************

  CHOICER_BEGIN 110001
    ; An das Script TestScr1.CSH wird die RecordID des aktuell geladenen Datensatzes 
    ; der Maske übergeben - dieser steht als Wert in der Variablen [RECORD_ID1] zur
    ; Verfügung (wodurch der Wert 0 ersetzt wird) und der Wert 3 steht in der 
    ; Variablen [RECORD_ID2] zur Verfügung. Weitere (bis zu 32) Parameter können
    ; angegeben werden.
    ITEM   110010, 'Test-Menü-Punkt &1', 'TestScr1.CSH,0,3', ''
    ITEM        0, '-', '', ''
    ITEM   110020, 'Test-Menü-Punkt &2', 'TestScr2.CSH', ''

    ; Beginn einer neuen Spalte
    ITEM  -110030, 'Test-Menü-Punkt &3', 'TestScr3.CSH', ''
    ITEM        0, '-', '', ''
    ITEM   110040, 'Test-Menü-Punkt &4', 'TestScr4.CSH', ''
    ITEM        0, '-', '', ''

    ; Beispiel für einen Unter-Choicer
    SUBCHOICER_BEGIN  110050, 'Test-Menü-Punkt &5', '', 'PICTURE_PATH\apic.bmp' 
      ITEM   110051, 'Test-Menü-Punkt &1', 'TestScr5.CSH', ''
      ITEM        0, '-', '', ''
      ITEM   110052, 'Test-Menü-Punkt &2', 'TestScr6.CSH', ''
    SUBCHOICER_END

  CHOICER_END 

;* END ****** Choicer ******************************************************

Spezielle Syntax für Script-Dateien

1.	Die meisten Befehle der Scriptsprache werden mit Parametern (variable und absolute) aufgerufen. Wenn ein Parameter als Variable übergeben werden muß, wird er im Folgenden in eckigen Klammern (z.B. [name]) aufgeführt. Wenn ein Parameter nicht zwingend übergeben werden muß, wird er in geschwungenen Klammern (z. B. {[optional]}) angezeigt. Parameter die nicht als Variable übergeben werden müssen können als absoluter Wert übergeben werden, dies wird dann im Folgenden ohne jede Klammer (z.B. num) aufgeführt. Absolute Parameter, die als String übergeben werden müssen sind in Hochkommata dargestellt (z.B. 'Zeichenkette'). Alle Parameter, die als absolute Parameter dargestellt sind, können natürlich auch als Variablen übergeben werden. Ersetzt man einen absoluten String-Parameter durch eine Variable, sollten keine Hochkommata angegeben werden (aus 'string' wird dann [string]).

Liste der Befehle der Scriptsprache CARA

	SCRIPT_BEGIN			Signalisiert den Beginn des Scriptes.

	SCRIPT_ENDE			Signalisiert das Ende des Scriptes, unterhalb
						dieser Zeile wird keine weitere sinnvolle
						Script-Zeile mehr erwartet (also nur noch Kommentare).

	INCLUDE			filename	Bindet die Include-Datei "filename" mit in das
						aktuelle Script ein. INCLUDE-Dateien können
						beliebig tief verschachtelt werden.

	GLOBAL_NUM		name	Deklaration einer globalen Variable für Integer-Zahlen. Eine 
						globale Variable kann in allen Scripten verwendet werden. 
						Globale-Variablen werden im Programmverlauf nicht wieder 
						abgemeldet – man sollte sie sparsam verwenden.
	VAR_NUM			name	Deklaration einer Variable für Integer-Zahlen 
	LOCAL_NUM			name	In dieser Zeile können auch Variablen selbst
						verwendet werden. "name" steht für den Namen
						der Variablen. (Kurzform VN)
						LOCAL_NUM	deklariert ebenfalls eine Variable 
										für Integer-Zahlen, die Variable
										ist aber dann nur in der jeweils
										aktuellen Prozedur verfügbar.
						WICHTIG : 	Innerhalb von SCRIPT_BEGIN
													und SCRIPT_END können
													keine LOCAL_XXXX Variablen
													angemeldet werden!
						Beispiel:		VAR_NUM TestNummernVariable
									oder
									VAR_NUM [ARRAY_NAME][ARRAY_CNT]
	CONST_NUM		name,num	
						Deklaration einer Konstante für Integer-Zahlen.
						Wie VAR_NUM, die "Variable" kann jedoch nicht verändert 
						werden, es handelt sich um eine Konstante mit dem Inhalt 
						num. (Kurzform CN)

	GLOBAL_STR		name	Deklaration einer globalen Variable für Zeichenketten (string).
	VAR_STR			name	Deklaration einer Variable für Zeichenketten (string).
	LOCAL_STR			name	Ansonsten genau wie VAR_NUM. (Kurzform VS)
	CONST_STR			name,'str'	Deklaration einer Konstante für Zeichenketten,
						vergleichbar mit CONST_NUM. (Kurzform CS).

	GLOBAL_FLOAT		name	Deklaration einer globale Variable für Dezimal-Zahlen.
	VAR_FLOAT			name	Deklaration einer Variable für Dezimal-Zahlen.
	LOCAL_FLOAT		name	Ansonsten genau wie VAR_NUM. (Kurzform VF)
	CONST_FLOAT		name,float	Deklaration einer Konstante für Dezimal-Zahlen,
						vergleichbar mit CONST_NUM. (Kurzform CF).

	GLOBAL_BOOL		name	Deklaration einer globalen Variable für Wahrheitswerte.
	VAR_BOOL			name	Deklaration einer Variable für Wahrheitswerte boolean
	LOCAL_BOOL		name	Ansonsten genau wie VAR_NUM. (Kurzform VB)
	CONST_BOOL		name,bool	Deklaration einer Konstante für Wahrheitswerte,
						vergleichbar mit CONST_NUM. (Kurzform CB).

	GLOBAL_DATE		name	Deklaration einer global Variable für Datumswerte.
	VAR_DATE			name	Deklaration einer Variable für Datumswerte.
	LOCAL_DATE		name	Ansonsten genau wie VAR_NUM. (Kurzform VD)
	CONST_DATE		name,date	Deklaration einer Konstante für Datumswerte,
						vergleichbar mit CONST_NUM. (Kurzform CD).
						Datumswerte können unter anderem mit folgenden Befehlen 
						bearbeitet werden:
						IS_LEAP_YEAR
						DAYS_IN_MONTH
						KW_2_DATE
						DATE_2_KW
						DATE_2_DMY
						DMY_2_DATE
						DATE_DIFF
						DATE_2_WEEK_DAY							
						Datums- und Zeitwerte können außerdem gemeinsam mit 
						folgenden Befehlen bearbeitet werden:
						DATE_TIME_2_REC_ID
						REC_ID_2_DATE_TIME
						ACT_REC_ID
						DATE_TIME_2_UNIX
						UNIX_2_DATE_TIME

	GLOBAL_TIME		name	Deklaration einer globalen Variable für Zeitwerte.
	VAR_TIME			name	Deklaration einer Variable für Zeitwerte.
	LOCAL_TIME		name	Ansonsten genau wie VAR_NUM. (Kurzform VT)
	CONST_TIME		name,time	Deklaration einer Konstante für zeitwerte,
						vergleichbar mit CONST_NUM. (Kurzform CT).
						Zeitwerte können unter anderem mit folgenden Befehlen 
						bearbeitet werden:
						TIME_DIFF
						TIME_2_HMS
						HMS_2_TIME

	GLOBAL_OBJECT		name	Deklaration einer globalen Variable für Objecthandle.
	VAR_OBJECT		name	Deklaration einer Script-Variable für Objecthandle.
	LOCAL_OBJECT 		name	Deklaration einer Prozedure-Variable für Objecthandle. (Kurzform VO)
						Kann nicht zum Speichern oder Berechenen verwendet werden. Die
						Variable wird von der Enginbe gesetzt und gelesen. In folgenden
						Befehlen wird dieser Variablen Typ eingesetzt:
						PICTURE_POP

	GLOBAL_LIST		name	Deklaration einer globalen Variable für Listen.
	VAR_LIST			name	Deklaration einer Variable für Listen.
	LOCAL_LIST		name	Ansonsten genau wie VAR_NUM.
						List-Variablen erlauben es eine Liste von
						Strings zu halten. (Langtexte)
						Listen werden mit folgenden Befehlen bearbeitet:
						LIST_2_LIST
						LIST_2_LIST_STR
						LIST_STR_2_BASE64
						LIST_STR_2_LIST
						LIST_STR_2_LIST_STR
						LIST_ITEM_GET
						LIST_ITEM_SET
						LIST_STR_COPY
						LIST_STR_FIND
						LIST_STR_GET
						LIST_STR_LEN
						LIST_STR_PART
						LIST_STR_SET
						LIST_STR_CONCAT
						LIST_STR_REPLACE
						LIST_CLR
						LIST_SORT
						LIST_MOVE
						LIST_APPEND
						LIST_DELETE
						LIST_DISPLAY
						LIST_VAL_BY_NAME
						LIST_FILE_READ
						LIST_FILE_WRITE
						LIST_2_QUERY
						QUERY_2_LIST
						LIST_TAG_GET
						LIST_TAG_COUNT
						LIST_TAG_SET
						LIST_TAG_INSERT
						LIST_TAG_DELETE
						LIST_2_LINKS
						CSV_FILE_READ

	GLOBAL_QUERY		name	Deklaration einer globalen Variable für Datenbank-Abfragen.
	VAR_QUERY		name	Deklaration einer Variable für Datenbank-Abfragen.
	LOCAL_QUERY		name	Ansonsten genau wie VAR_NUM.
						Query-Variablen erlauben es SQL-Anweisungen
						zu behandeln.
						Querys werden mit folgenden Befehlen bearbeitet:
						QUERY
						END_QUERY
						EXECUTE
						GET_DATA
						QUERY_CLOSE
						QUERY_LOAD
						QUERY_COUNT
						QUERY_ADD_WHERE
						QUERY_ADD_STRING
						QUERY_DESCR_TOP
						QUERY_DESCR_NEXT
						QUERY_REFRESH
						QUERY_LIST_ADD
						QUERY_LIST_FIRST
						QUERY_LIST_NEXT
						QUERY_LIST_DELETE
						QUERY_LIST_COUNT
						QUERY_LIST_AVAIL
						QUERY_LIST_SET_STATUS
						QUERY_LIST_SELECT
						QUERY_LIST_2_LIST
						QUERY_SET_DATABASE
						QUERY_2_LIST      
						LIST_2_QUERY
						QUERY_SET_EDIT_FIELD
						QUERY_COLUMN_VALUES
						DATABASE_CHANGE

	GLOBAL_BROWSER		name	Deklaration einer globalen Variable für Datenbank-Listen.
	VAR_BROWSER		name	Deklaration einer Variable für Datenbank-Listen.
	LOCAL_BROWSER		name	Ansonsten genau wie VAR_NUM.
						Browser-Variablen arbeiten genau wie Query-Variablen
						und können mit den gleichen Befehlen bearbeitet werden.
						Zusätzlich können die dort behandelten Abfragen auch noch
						angezeigt werden. Browser könne außerdem noch mit
						folgenden Befehlen bearbeitet werden:
						VIEW
						VIEW_INFO
						END_VIEW
						QUERY_SET_WINDOW

	GLOBAL_MASK		name,id	Deklaration einer globalen Variable für Eingabe-Masken.
	VAR_MASK			name,id	Deklaration einer Variable für Eingabe-Masken.
	LOCAL_MASK		name,id	id ist ein numerischer Wert und bezeichnet die Nummer 
						der Maske. Eine Definitionsdatei mit dem Filename "id.msk"
						wird dann in dem Unterverzeichnis "SetDoc" gesucht und 						sofort eingelesen. Der Aufbau dieser Dateien ist in der 						Dokumentations-Datei "SetDoc.CSH" beschrieben. Masken
						können mit folgenden Befehlen bearbeitet werden:
						MASK_PROCESS
						MASK_COMMAND
						MASK_UPDATE
						MASK_CLEAR
						MASK_STMNT
						MASK_NEXT_FOCUS
						MASK_TIMER
						MASK_BLOCK
						MASK_NOTES
						MASK_ICON_SET
						DATA_2_MASK
						FIELD_FLAG_GET
						FIELD_FLAG_SET
						FIELD_FLAG_ON_OFF
						FIELD_INFO_GET 
						SET_LABEL

	GLOBAL_TEXT		name	Deklaration einer global Variable für Text-/ASCII-Datei-
						Operationen.
	VAR_TEXT			name	Deklaration einer Variable für Text-/ASCII-Datei-Operationen.
	LOCAL_TEXT 		name	Text-Dateien können mit folgenden Befehlen bearbeitet 
						werden:
						FILE_OPEN
						FILE_CLOSE
						FILE_WRITE
						FILE_READ

	GLOBAL_STREAM		name	Deklaration einer global Variable für binäre Datei-
						Operationen.
	VAR_STREAM		name	Deklaration einer Variable für binäre Datei-Operationen.
	LOCAL_STREAM		name	binäre Dateien können mit folgenden Befehlen bearbeitet 
						werden:
						FILE_OPEN
						FILE_CLOSE
						FILE_WRITE
						FILE_READ

	GLOBAL_PRINT		name{,num_with{,num_height{,num_orientation{,bool_capture_dialog_print}}}}
						Deklaration einer globalen Variable für Druckjobs.

	VAR_PRINT			name{,num_with{,num_height{,num_orientation{,bool_capture_dialog_print
						{, e-mail-script {, MaskName4Embed, PanelName4Embed{, 
						Flag4Embed}}}}}}}
						
						Deklaration einer Variable für Druckjobs. num_width ist als
						Vorgabe –1 dies entspricht DIN A4 Breite, sonst wird die 
						Breite der Seite 1/10 mm angegeben d.h. 10 cm entsprcht der 
						Zahl 1000. num_height entspricht der Höhe der Seite in 
						1/10 mm auch hier ist die Vorgabe –1 für die Höhe einer
						DIN A4 Seite.
						Die Ausrichting der Seite kann mit num_orientation angegeben 
						Werden:
						[PRINT_PAGE_PORTRAIT] 	(1)=Portrait / Hochformat
						[PRINT_PAGE_LANDSCAPE] 	(2)=Landscape / Querformat
					Wenn bool_capture_dialog_print TRUE ist, wird der Standardknopf 
					zum Ausdrucken aus dem Vorschaudialog versteckt und ein anderer 
					Knopf ist zum Drucken wird dem User angeboten. Diesen 
					Druckknopf kann die Engine überwachen und dem Script mitteilen, 
					ob dieser verwendet wurde. Das dient dazu, dass man im Script 
					"wissen" kann, ob der Benutzer den angezeigten Text gedruckt hat 
					oder nicht. Dies ist beispielsweise wichtig, wenn man ein DMS mit 
					Druckdaten beliefern will, aber nur, wenn auch wirklich etwas 
					ausgedruckt wurde.
E-Mail-Script kann einfach ein Minus-Zeichen sein, dann wird der E-Mail-Sende-Knopf versteckt, oder leer, dann wird der E-Mail-Sende-Knopf normal zu sehen sein, oder es wird ein Script-Datei-Name (mit bis zu 8 Parametern, durch Pipe-Zeichen getrennt) übergeben. Der E-Mail-Knopf ist dann ganz links in der Icon-Leiste der Druckvorschau und das Script wird dann beim Klick auf dieses Icon aufgerufen. 
Die Vorschaudaten werden mit dem Aufruf des Scriptes automatisch (mit dem in PRINT_FILE zuvor angegebenen Dateinamen) in den Temp-Ordner des Benutzers gespeichert. Der Dateiname (inklusive Pfad) befindet sich immer im [PAR_STR9] des angegebenen Scriptes.
					Nur bei der Scriptweiten-Variable (also nicht bei der globalen und 
					auch nicht bei localen Version dieses Variablentyps) kann eine 
					Maskenname (MaskName4Embedd) und ein Panelname 
					(PanelName4Embed) übergeben werden, in dem die visuelle 
					Darstellung der Druckvorschau stattfinden soll.
					Die Art der Darstellung und die dem Benutzer zur Verfügung						gestellten Dialogelemente kann mit der Flag4Embed angegeben 
					werden. Flag4Embed kann sich als Summe aus den folgenden 
					Zahlen ergeben:
						Toolbar not visible				1
						Print-Button invisible				8
						Mail-Button invisible				16 
						No Scale Buttons in Toolbar			32
						Grid Toolbar-Button visible				64
						Move Buttons invisible				128
						Help-Button invisible				256
						Info-Button invisible				512
						Close-Button invisible and Sys-Menu disabled	1024    
						Statusbar invisible				2048
						Page Scroller in Statusbar invisible			4096
						Status Segment in Statusbar invisible		8192
						Rulers invisible					16384
						Preview is made child window of parent window	32768
						Document file is opened with read-only permission	65536
						Messages are not registered by Windows 		131072
						No File Open Button				262144 
						No File Save Button				524288    
Der Inhalt der Druckvariable kann in der Maske angezeigt werden, indem man den Befehl PRINT_OUT [print], [PRINT_OUT_PREVIEW] aufruft. Wenn das Fenster in seiner Größe geändert wurde und das Panel auf dem der Druck angezeigt wird in siner Größe mitgeändert werden kann, dann kann man im MASK_HOOK_RESIZE den selben Befehl (PRINT_OUT [print], [PRINT_OUT_PREVIEW]) aufrufen, um die Darstellung anzupassen.

 
	LOCAL_PRINT		name{,num_with{,num_height{,num_orientation{,bool_capture_dialog_print}}}}
						Druckvariablen können mit folgenden Befehlen bearbeitet werden:
						PRINT_OUT
						PRINT_PIC
						PRINT_STR
						PRINT_BAR
						PRINT_BOX
						PRINT_POS
						PRINT_LINE
						PRINT_PAGE
						PRINT_CLR
						PRINT_SAVE
						PRINT_LOAD
						PRINT_LIST
						PRINT_RECT
						PRINT_RTF
						PRINT_CHART
						PRINT_ESC
						PRINT_FILE
						PRINT_DEVICE
						PRINT_PDF_VERSION
						PRINT_PDF_ENCRYPTION
						PRINT_PDF_PROTECTION

	GLOBAL_PF			name {,  filename.lst}
						Deklaration einer globalen Variable für List- & Label Druckjobs.
	VAR_PF			name{,  filename.lst}
						Deklaration einer Variable für Druckjobs. Der Filename muss eine der
						folgenden Extensions haben: “.lbl”, “.crd” oder (bevorzugt) “.lst”.

						Eine Variable von diesem Typ hat folgende “eigene” Variablen:
						[name!PF_ACTION] (VAR_NUM) 
							Mögliche Werte	[PF_CALL_FAILED] 		(-1)
          										[PF_CALL_SUCCESS]		(0)
          										[PF_WRN_REPEAT_DATA]	(-998)

						[name!PF_DEFINE_VARS_PROC] (VAR_STR) 
							Name der Script-Procedure die zum Festlegen der Druck-
							Variablen des LL-Jobs ausgeführt werden soll
						[name!PF_DEFINE_FLDS_PROC] (VAR_STR) 
							Name der Script-Procedure die zum Festlegen der Druck-
							Felder des LL-Jobs ausgeführt werden soll
						[name!PF_PRINT_OUT_PROC] (VAR_STR) 
							Name der Script-Procedure die zum Drucken des LL-Jobs
							ausgeführt werden soll.
						[name!PF_SOURCE_FILE_NAME] (VAR_STR) 
							Der Dateiname, in dem die LL-Definition zu finden ist (kann
							optional bei der Variablen-Definition mit nagegeben werden) Der
							Filename muss eine der folgenden Extensions haben: “.lbl”,
							“.crd” oder (bevorzugt) “.lst”.
						[name!PF_HEADER] (VAR_STR) 
							Überschrift die beim Drucken des LL-Jobs angezeigt werden soll.
						[name!PF_PROCESS_PERCENT] (VAR_NUM) 
							Angabe für den Fortschritt des Drucks. Wird vom Programmierer
							während der Jobs permanent neu gesetzt. 
						[name!PF_PROCESS_INFO] (VAR_STR) 
							“Überschrift” für die Fortschrittsanzeige währen des Drucks.
						[name!PF_COPIES] (VAR_NUM) 
							Anzahl der Kopien des abschließenden Ausdrucks.
						[name!PF_OPTIONS] (VAR_NUM) 
							Diverse Optionen, die man für den Druck setzten kann, die
							Option wird als Binärflagge verwendet, d.h. mehrere Optionen
							können durch Addition gleichzeitig gesetzt werden:
							[PRINT_OUT_DIRECT]		Direkte Ausgabe  ohne
														Anzeige eines
														Druckoptionen-Dialogs.
							[PRINT_OUT_DIRECT_SETUP]	Direkte Ausgabe mit
														Anzeige eines
														Druckoptionen-Dialogs.
							[PRINT_OUT_PREVIEW]		Ausgabe mit Anzeige eines
														Druckoptionen-Dialogs.
							[PRINT_OUT_PAGE_COUNT_RET]Diese Option führt den
														Druck vollständig verdeckt
														aus und  ermittelt damit die
														Anzahl der benötigten
														Seiten. Diese werden in der
														Variable
														[name!PF_PAGE_COUNT]
														abgelegt. 

						[name!PF_PAGE_COUNT] (VAR_NUM) 
							Anzahl der Seiten eines Druckjobs. Dieser Wert kann nur nach
							einmaligem Durchlaufen des Druckjobs erhalten werden. Dies
							geschieht durch setzen der Option
							[PRINT_OUT_PAGE_COUNT_RET] (s.o.).

						LL-Druckvariablen können mit folgenden Befehlen bearbeitet 
						werden:
						PF_EXECUTE
						PF_SET_VAR

	LOCAL_PF			name{,  filename.lst}

	GLOBAL_EE			name
						Deklaration einer globalen Variable für Excel-Export-Reports.

	VAR_EE			name
						Deklaration einer Variable für Excel-Export-Reports.
						Eine Variable von diesem Typ hat folgende “eigene” Variablen:
						[ee!EE_ACTION]		Zeigt den aktuellen Zustand an. Z.Zt.
											Nichtgenutzt.

						[ee!EE_TEMPLATE]	Dateiname der Vorlage des Reports. (Eine
											Excel-Datei.)

						[ee!EE_TEMPLATE_SHEET]		
											Name des Arbeitsblattes in der Vorlage Datei.

						[ee!EE_TITLE]		Titel der Reports.

						[ee!EE_OPTIONS]	Folgende Optionen stehen, durch Addition
											kombinierbar zur Verfügung:
											[EE_OPTION_HOURGLAS_CURSOR] 
											Soll eine Sanduhr während der
											Reporterstellung gezeigt werden.
											[EE_OPTION_SHOW_PROGRESS]
											Soll der Fortschritt währen der Reporterstellung
											gezeigt werden.
											[EE_OPTION_TOTALS_AS_FORMULA]
											Sollen Summen, die ggf. am Ende eine Liste
											angezeigt werden sollen, als Formel hinterlegt
											werden?
											[EE_OPTION_VISIBLE_WHEN_ERROR]
											Sollen ev. Bei der Erstellung des Reports
											auftretende Fehler angezeigt werden?

						[ee!EE_USER_DATA_MAX]		
											Wieviel Datensätze umfasst ein Report, bei
											dem nicht eine Datenbankabfrage als
											Datenquelle angegeben wurde, sondern bei
											dem der Programmierer jede Zeile selbst mit
											Daten “füttert”. Dieser Wert muß vom 
											Programmierer selbst gesetzt werden. Er kann
											jedoch auch “offen” bleiben, wenn der
											Programmierer einen
											[EE_HOOK_DATA_EOF] definiert und den
											Abbruch des  Datenstroms in diesem Hook
											setzt.

						[ee!EE_USER_DATA_ACT]		
											Bei welchem Datensatz befindet sich ein
											Report, bei dem nicht eine Datenbankabfrage
											als Datenquelle angegeben wurde, sondern bei
											dem der Programmierer jede Zeile selbst mit
											Daten “füttert”. Diese Variable kann vom
											Report selber gezählt werden,aber auch vom
											Programmierer in den Hooks
											[ee!EE_HOOK_DATA_FIRST],
											[ee!EE_HOOK_DATA_NEXT] und
											[ee!EE_HOOK_DATA_PREV]. Wenn der
											Programmierer den Wert
											[ee!EE_USER_DATA_MAX] angiebt und
											ansonsten keine Hooks setzt, wird dieser Wert
											automatisch von der Engine gezählt und im
											Falle des Erreichens des Maximalwertes, wird
											der Report als beendet erachtet.

						[ee!EE_USER_DATA_EOF]		
											Wenn diese Variable TRUE ist, wird ein Report,
											bei dem nicht eine Datenbankabfrage als
											Datenquelle angegeben wurde, sondern bei
											dem der Programmierer jede Zeile selbst mit
											Daten “füttert”, als beendet erachtet.

						[ee!EE_USER_DATA_FIELD]		
												In welchem “Feld” der Vorlage befindet sich
												der Report gerade.

						[ee!EE_USER_DATA_VALUE]		
											Wie lautetder Wert, der in das gerade aktuelle
											Feld des	Reports geschrieben werden soll.
	
						[ee!EE_GROUP_VALUE]			
											Dieser Wert entscheidet über den Wechsel in
											einer Datengruppiereung in einem Report.
											Wenn sich dieser Wert von seinem vorherigen
											Inhalt unterscheidet, wird im Report eine neue
											Daten-Gruppe begonnen.

						[ee!EE_ACT_BAND_TYPE]		
											Jeder Report besteht aus sogenannten
											“Bändern”, in denen Variablen der Vorlage
											durch Daten-Werte ersetzt. diese Variable gibt
											den Typ des jeweils aktuell verarbeiteten
											Bandes an.
											Folgende “Band-Typen” können verarbeitet
											werden:
											[EE_BAND_TYPE_DETAIL_DATA]
											Z. Zt. noch  ungenutzt. Wenn ein Master-
											Dataensatz (z.B. ein Auftrag) auf
											untergeordnete Daten verweist (z.B. die
											Positionen des Auftrags), sind die Felder dieses
											Bandes der Vorlage zu verwenden.
											[EE_BAND_TYPE_DETAIL_FOOTER]
											Fuß eines Detail-Bandes. 
											[EE_BAND_TYPE_DETAIL_HEADER]
											Kopf eines Detail-Bandes. 
											[EE_BAND_TYPE_GROUP_FOOTER]
											Fuß eines Gruppen-Bandes. 
											[EE_BAND_TYPE_GROUP_HEADER]
											Kopf eines Gruppen-Bandes. 
											[EE_BAND_TYPE_MASTER_DATA]
											Die Hauptdaten des Reports.
											[EE_BAND_TYPE_SUMMARY]
											Das Band, dass die Summen enthält.
											[EE_BAND_TYPE_TITLE]
											Das Band für die Titel-Daten.

						[ee!EE_ACT_ROW_REPORT]		
											In welcher Zeile im Report befindet sich die
											Enginec aktuell?.
						[ee!EE_ACT_ROW_TEMPLATE]		
											In welcher Zeile in der Vorlage befindet sich die
											Engine aktuell?.
						[ee!EE_ACT_COL_REPORT]		
											In welcherSpalte im Report befindet sich die
											Engine aktuell?

						[ee!EE_ACT_CELL_VALUE]		

											Welchen Inhalt die die aktuelle Zelle?
	
						[ee!EE_ROWS]		Wieviel Zeilen hat der Report?

						[ee!EE_COLS]		Wieviele Spalten hat der Report?

						[ee!EE_HOOK_BEFORE_BUILD]		
											Spript-Procedure bevor der Report generiert
											wird.

						[ee!EE_HOOK_AFTER_BUILD]		
											Spript-Procedure nachdem der Report generiert
											wurde.

						[ee!EE_HOOK_GET_FIELD_VALUE]	
											Spript-Procedure die beim Abrufen eines Feld-
											Wertes angesteuert werden kann.

						[ee!EE_HOOK_FORMAT_CELL]		
											Spript-Procedure die beim Formatieren von
											Zellen angesteuert werden kann.

						[ee!EE_HOOK_SET_CELL_VALUE]	
											Spript-Procedure die beim Festlegen der
											Inhalte von Zellen angesteuert werden kann.

						[ee!EE_HOOK_DATA_FIRST]		
											Im Falle eines Reportes, bei dem nicht eine
											Datenbankabfrage als Datenquelle angegeben
											wurde, sondern bei dem der Programmierer
											jede Zeile selbst mit Daten “füttert”, kann man
											hier z.B. den Zähler für den aktuellen Datensatz
											initialisieren.

						[ee!EE_HOOK_DATA_NEXT]		
											Im Falle eines Reportes, bei dem nicht eine
											Datenbankabfrage als Datenquelle angegeben
											wurde, sondern bei dem der Programmierer
											jede Zeile selbst mit Daten “füttert”, kann man
											hier z.B. den Zähler für den aktuellen Datensatz
											inkrementieren.

						[ee!EE_HOOK_DATA_PREV]
											Im Falle eines Reportes, bei dem nicht eine
											Datenbankabfrage als Datenquelle angegeben
											wurde, sondern bei dem der Programmierer
											jede Zeile selbst mit Daten “füttert”, kann man
											hier z.B. den Zähler für den aktuellen Datensatz
											dekrementieren.

						[ee!EE_HOOK_DATA_EOF]		
											Im Falle eines Reportes, bei dem nicht eine
											Datenbankabfrage als Datenquelle angegeben
											wurde, sondern bei dem der Programmierer
											jede Zeile selbst mit Daten “füttert”, kann man
											hier den Abbruch des Reportes festlegen,
											indem man den Inhalt der Variable
											[ee!EE_USER_DATA_EOF] setzt.

						[ee!EE_HOOK_DATA_GET]	
											Im Falle eines Reportes, bei dem nicht eine
											Datenbankabfrage als Datenquelle angegeben
											wurde, sondern bei dem der Programmierer
											jede Zeile selbst mit Daten “füttert”, kann man
											in der  hier angegebenen Spript-Procedure die
											Feldinhalte setzen.

	LOCAL_EE			name	EE-Variablen können mit folgenden Befehlen bearbeitet  werden:
						EE_EXECUTE

	GLOBAL_COM		name,com{{{{{{,mode},baud},parity},databits},stopbits},display}
						Deklaration einer globalen Variable für den Zugriff auf eine 
						serielle Schnittstelle.
	VAR_COM			name,com{{{{{{,mode},baud},parity},databits},stopbits},display}
						Deklaration einer Variable für den Zugriff auf eine serielle 
						Schnittstelle. Alle Parameter (außer der Name) sind 
						numerisch. com bestimmt die Schnittstelle (1-9). 
						mode kann folgende Werte annehmen:
						[COM_WRITE]				Auf die Schnittstelle wird nur
													schreibend zugegriffen.
						[COM_READ_AND_WRITE]	Auf die Schnittstelle wird sowohl
													schreibend als auch lesend zu-
													gegriffen.
						[COM_TERMINAL]			Auf die Schnittstele wird sowohl
													schreibend als auch lesend zu-
													gegriffen. Dabei ist ein Schnitt-
													stellenmonitor sichtbar, in dem 
													man auch Tastatureingaben 
													machen kann.
						baud bestimmt die Baudrate, sinnvolle Werte sind z.B.: 
						150, 300, 600, 1200, 2400, 4800, 9600,
						19200, 38400, 57600, 115200
						parity kann folgende Werte annehmen:
						[PARITY_NONE]
						[PARITY_ODD]
						[PARITY_EVEN]
						[PARITY_MARK]
						[PARITY_SPACE]
						databits bestimmt die Datenbits bei der Übertragung, sinnvoll 
						sind die Werte 7 oder 8.
						stopbits bestimmt die Stopbits bei der Übertragung, sinnvoll 
						sind die Werte 0 bis 2.
						display ist nur sinnvoll wenn mode=[COM_TERMINAL] ist, 
						folgende Werte sind möglich:
						[DISPLAY_ASCII]	Darstellung der ein- und ausgegebenen
											Zeichen in ASCII-Format.
						[DISPLAY_DEC]		Darstellung der ein- und ausgehenden
											Zeichen als Dezimal-Zahlen.
						[DISPLAY_HEX]		Darstellung der ein- und ausgehenden
											Zeichen als Hexadezimal-Zahlen.

	LOCAL_COM		name,com{{{{{{,mode},baud},parity},databits},stopbits},display}
						COM-Variablen können mit folgenden Befehlen bearbeitet 
						werden:
						COM_OPEN
						COM_CLOSE
						COM_WRITE
						COM_READ
						COM_TERMINAL

	GLOBAL_DATABASE		name,alias{,user{,password{,path or connectinfo}}}
						Deklaration einer globalen Variable für den Zugriff auf eine 
						weitere Datenbank.

	VAR_DATABASE		name,alias{,user{,password{,path or 
										connectinfo{,Port{,Host{,CharSet{,Collation}}}}}}}
						Deklaration einer Variable für den Zugriff auf eine weitere
						Datenbank. 
						name		=	Variablenbezeichner
						alias			=	siehe Abschnitt "Application-INI-Datei", 
										Sektion "[config]", Schlüssel "DataAlias"
						user			=	User, der an der Datenbank angemldet wird
						password	=	Passwort, mit dem sich der User anmeldet. Wenn
										sowohl user  und passwort  leer übergeben
										werden, wird der Datenbank-Login-Dialog
										gezeigt
						path/connect	=	siehe Abschnitt "Application-INI-Datei", 
										Sektion "[config]", Schlüssel "DataBase"
						Bei einer MySQL-Datenbank-Verbindung können auch noch Port, 
						Host , CharSet und Collation angegeben werden.

						Wenn ein Alias unter ODA (oder BDE in der Folgeversion 
						CARA 5.x) bereits korrekt angelegt ist, kann natürlich die
						Angabe für path/connect entfallen. Falls kein Kontakt zur
						Datenbank hergestellt werden kann, wird die Varaiable gar
						nicht angemeldet. Man muß also nach der Anmeldung der
						Datenbank zunächst prüfen, ob es die Varaibale überhaupt
						gibt:
						VAR_STR      MyDBPath
						CALC [MyDBPath] AS CON([DATA_PATH],'Test.mdb')
						VAR_BOOL     Ores
						VAR_BROWSER  MyDBQ
						VAR_DATABASE MyDB,Test,Admin,,[MyDBPath]
						IDENTIFIER_EXIST 'MyDB',[QRes]
						IF [QRes]=FALSE
						  MESSAGE 'Fehler','Datenbank nicht geöffnet'
						END_IF       
						DATABASE-Variablen können mit folgendem Befehlen verwendet
						werden:
						QUERY_SET_DATABASE

	PANEL_INFO		'info'	Zeigt im Infopanel des aktuell sichtbaren Fensters die Info an.

	PANEL_SET			{[browser oder mask]}
						Panel-Infos sollen im übergebenen Dialogelement angezeigt
						werden. Es ist darauf zu achten, daß das übergebene Fenster
						aktiv ist. Wenn kein Parameter übergeben wird, so wird der 
						Fokus an das Fenster zurückgegeben, das den Fokus beim 
						Scriptbeginn besaß.

	WAIT_CURSOR		bool	Zeigt für bool (true) die Sanduhr als Mauscursor, bzw.
						Schaltet die Sanduhr wieder ab bool (false)

	MESSAGE			'head','info'{,option}
						Hiermit können Nachricht gezeigt werden. 'head' ist die 
						Überschrift und 'info' die Nachricht, die gezeigt wird. In option
						können folgende Werte übergeben werden:
						[MESSAGE_INFO]			Zeigt eine Information
						[MESSAGE_ERROR]			Zeigt einen Fehler
						[MESSAGE_WARNING]	Zeigt eine Warnung

	QUERY			[name]	Signalisiert den Beginn einer Datenabfrage. [name]
						bezeichnet eine Query- bzw. Browser-Variable.

	END_QUERY				Ende einer Query- bzw. Browser-Definition

	EXECUTE			[name], [bool] {, boolExitOnError {, strErrorMsg {, boolLeaveWaitWinOpen
									 {, boolJustDescription} {, boolPlainExecute}}}}	

						Ausführen des Querys- bzw. eines Browsers ohne, daß auf 
						dem Bildschirm eine Anzeige erfolgt. Mit [name] muß eine 
						Query- oder Browser-Variable übergeben werden. Wenn 
						zusätzlich noch eine Boolean-Variable [bool] übergeben wird, 
						so wird das Ergebnis der Query-Ausführung darin abgelegt. 
						Wobei [bool]=TRUE ist wenn die Abfrage fehlerfrei 
						ausgeführt werden konnte und [bool]=FALSE ist wenn ein 
						Fehler aufgetreten ist.

						Wenn boolExitOnError TRUE ist, wird die aufrufende Prozedur 
						verlassen, wenn ein Fehler beim Ausführen des SQL-Strings auftrat.	
						Wenn strErrorMsg nicht leer ist, wird der angegebene String im Falle 
						eines Fehlers als Abbruch-Meldung angezeigt. Wenn strErrorMsg den 
						Wert ’~’ enthält, wird eine im System als Standard hinterlegte Nachricht 
						angezeigt, die auch den Script-Namen und den Namen der aktuellen
						Prozedur enthält.
		
						Wenn die Prozedure im Falle eines Fehlers verlassen wird: Wenn
						boolLeaveWaitWinOpen FALSE ist (Standard), wird auch eine 
						eventuell geöffnete WAIT_INFO geschlossen. Wenn man nicht möchte, 
						dass das WAIT_INFO-Fenster geschlossen wird, muss man 
						boolLeaveWaitWinOpen TRUE setzten.

						Wenn boolJustDescription TRUE ist, und der SQL-String eine 
						SELECT-Anweisung ist und in der Feldliste der SELECT-Anweisung 
						keine Wildcards benutzt wurde, wird der SQL-String NICHT übersetzt 
						und lediglich die Feldbeschreibung von der Engine zurück geliefert.

						Wenn boolPlainExecute TRUE ist, wird das Query ohne irgendwelche 
						Interpretationen an den SQL-Server versendet

						Wenn eine SELECT-Datenbankanweisung ausgeführt wurde 
						stehen neue Untervariablen zur Verfügung. Die Schreibweise 
						für Query-/Browser-Variablen ist stets [name!Untervariable].
						Folgende Untervariablen für Querys und Browser existieren:
						[name!QUERY_DESCR_BASE] 	Tabellenname der
													Tabelle die zu der
													ersten in der Abfrage
													angeforderten RecordID
													gehört.
						[name!QUERY_DESCR_REC_ID]	Feldbezeichner der
													ersten RecordID in
													der Abfrage
						[name!VIEW_ACT_FIELD_NAME]	Letztes fokussiertes Feld in 
													einem Grid oder einem
													Browser. Z.B. das Feld das
													doppelt angeklickt wurde.

						Wenn auf ein Query ausgeführt wird, kann eine im Script definierte
						Procedure angesteuert werden. Folgende Untervariablen stehen für
						diesen Hook zur Verfügung:
						[name!QUERY_HOOK_REC_CHANGE]	Dieser Hook wird nur bei
														Querys angesteuert, die
														an ein GRID gebunden
														sind oder bei
														BROWSERN. Der Hook
														wird immer dann
														angesteuert, wenn im
														GRID oder BROWSER
														der Datensatz gewechselt
														wird.

						[name!Feldname]					Alle Felder der Abfrage.

	QUERY_DESCR_TOP	
			[name], [string], [numDataType] {, [numDataSize] {, [boolIsIndex]{, [strIndexInfo]}{, [strOriName]}}}
						Wenn ein Query mit einer SELECT-Anweisung vom
						SQL-Compiler übersetzt wurde, dann steht eine
						Beschreibung der angeforderten Felder zurVerfügung.
						Um an den Kopf dieser Liste zu gelangen und gleich auch 
						den Namen und den DatenTyp des ersten Feldes zu erhalten 
						verwendet man diesen Befehl. [name] ist dabei der Name des
						Querys/Browsers von dem man die Beschreibungsliste
						anfordert. Der Name des Feldes wird in [string] abgelegt.
						Falls [numDataSize] angefordert wird, enthält diese Variable
						vom Typ VAR_NUM die Größe des Feldes. Falls
						[boolIsIndex] angefordert wird, wird diese Variable vom Typ
						VAR_BOOL TRUE, wenn das Feld indiziert ist anderenfalls
						ist es FALSE. Der Daten-Typ wird in [numDataType] abgelegt.
						Mögliche Werte sind :
						Unknown		=	0
						String			=	1	(VAR_STR)
						Smallint			=	2	(VAR_NUM)
						Integer			=	3	(VAR_NUM)
						Word			=	4	(VAR_NUM)
						Boolean			=	5	(VAR_BOOL)
						Float				=	6	(VAR_FLOAT)
						Currency		=	7	(VAR_FLOAT)
						BCD				=	8
						Date				=	9	(VAR_DATE)
						Time				=	10	(VAR_TIME)
						DateTime		=	11	(VAR_TIME or VAR_DATE)
						Bytes			=	12
						VarBytes		=	13
						Blob				=	14
						Memo			=	15
						Graphic			=	16
						AutoInc			=	17	(VAR_NUM)
						Largeint			=	18	(VAR_NUM)
						Die DatenTypen ohne entsprechneden Script-Typ können 
						mittels eines Scriptes nicht behandelt werden.

						In [strIndexInfo] enthält mit Pipe-Zeichen getrennt folgende
						Informationen :
						Name				der dem Index von der Datenbank vergeben
											wurde
						CaseInsFields 		meistens leer, Feldname(n) wenn
											CaseInsensitive angegeben wurde
						DescFields 			meistens leer, Feldname(n) wenn Descending
											angegeben wurde
						Expression			meistens leer, Schlüsselausdruck, wenn einer
											angegeben wurde
						Source				enthält den Namen für einen gewarteten
											dBASE-Index (MDX-Datei)
						Abrev   				Vorschlag für Abkürzung, die vor den
											FeldNamen gesetzt werden könnte um den
											Index zu Bezeichnen. Beruhend auf den
											Syntax-Gewohnheiten der CSH-Entwickler:
											Jeder Index startet mit dem Kürzel “Ind”, gefolgt
											von einem Kürzel für den Tabellen-Namen und
											daran wird der Feldbezeichner angehängt.
						Suggestion			Vorschlag für die Index-Benennung
						Optionen des Index	Folgende Werte können mit Kommata getrennt
											zurückgegeben werden:
											PRIMARY	Primärschlüssel
											UNIQUE		eindeutiger Schlüssel
											DESC		absteigend sortiert
											NOTCASE	unabhängig von Groß- und
														Kleinschreibung
											EXPRESSION	dBASE-Schlüsselausdruck
														(nur dBASE)
											NOTMAINT	nicht automatisch aktualisiert

						[strOriName] enthält den Feldnamen in Original-Schreibweise.

	QUERY_DESCR_NEXT
			[name], [string], [numDataType] {, [numDataSize] {, [boolIsIndex]{, [strIndexInfo]}{, [strOriName]}}}
						Funktioniert genau wie QUERY_DESCR_TOP, geht jedoch 
						zum jeweils nächsten Feld seit dem letzten Abrufen. Wenn 
						keine weiteren Felder mehr verfügbar sind, wird [string] leer 
						zurückgegeben.

	GET_DATA			[name]{,[bool],{direction}}
						Signalisiert das Abrufen von Daten aus dem Query/Browser 
						[name]. [bool] hat die gleiche Bedeutung wie bei EXECUTE.
						Der VAR_NUM Wert direction zeigt an, in welche Richtung die
						Daten gesucht werden sollen. direction kann folgende Werte 
						annehmen:
						[FIRST_REC]					holt den ersten Datensatz
						[NEXT_REC] (default)			holt den nächsten Datensatz
						[PREV_REC]					holt den vorherigen Datensatz
						[LAST_REC]					holt den letzten Datensatz

	QUERY_CLOSE		[name],[bool]{,boolClrQuery}
						Schließt das Query / den Browser oder die Maske [name]. In der
						Boolean-Variable [bool] wird das Ergebnis der Operation
						zurückgegeben. Es ist sinnvoll Querys, die an einer Transaction
						beteiligt sind, vor dem Start der Transaction zu schließen.
						Wenn boolClrQuery (TRUE) ist, werden auch die Query-Zeilen des 
						Querys gelöscht.

	QUERY_LOAD		[name],[bool],'str'
						Läd in das Query / den Browser / die Maske [name] die in der
						Tabelle QUERYS gespeicherte Datenbankanweisung mit der 
						Bezeichnung str. In der Boolean-Variable [bool] wird das 
						Ergebnis der Operation zurückgegeben.

	QUERY_COUNT		[name],[numRes]
						Gibt von dem Query / dem Browser [name] die Anzahl der 
						Records in der VAR_NUM [numRes] zurück, die verfügbar sind.
						Diese Anweisung kann nach dem EXECUTE noch vor dem
						GET_DATA erfolgen. 

	QUERY_COLUMN_VALUES 	[query browser mask],[boolRes],[strValues],'strFieldName' {,boolOnlyMarkedLines}
						Gibt zu einer bestimmten Spalte (strFieldName) eines Querys die
						Auswertung zurück. Wenn die Operation erfolgreich war, ist boolRes
						TRUE. Ausserdem befinden sich folgende Werte durch Pipe-Zeichen
						(''|'') getrennt im Ergebnis-String [strValues]:
						Cnt|Sum|Min|Max|Avg|	=Anzahl, Summe, minimal-, maximal-Wert,
												Durchschnitt aller Zeilen.
						Cnt|Sum|Min|Max|Avg|	=Anzahl, Summe, minimal-, maximal-Wert,
												Durchschnitt aller positiven Zeilen.
						Cnt|Sum|Min|Max|Avg|	=Anzahl, Summe, minimal-, maximal-Wert,
												Durchschnitt aller negativen Zeilen.
						CntMarked			= Anzahl der markierten Zeilen.
						boolOnlyMarkedLines ist per Default TRUE – sollten Zeilen markiert 
						worden sein, werden nur die darin enthaltenen Werte summiert – 
						anderenfalls werden trotz Markierung alle Zeilen ausgewertet.

	QUERY_ADD_WHERE	[name],union,'where-clause'{|boolAddWhereOrAnd}
						Baut an das Query/Browser/Maske [name] die 'where-clause'
						union (num) ist der Teil des Querys (bei union) in den 
						die Where-Bedingung eingebaut werden soll.
						Für union gilt:	0	an die erste Where-Bedingung anbauen
									254	an die letzte Where-Bedingung anbauen
									255	an alle Where-Bedingungen anbauen
						Wenn boolAddWhereOrAnd TRUE ist (default), wird im Query
						nachgesehen, ob schon ein “WHERE“ existiert und, falls nicht, wird
						dieses angefügt, falls doch, wird ein “AND“ angefügt. Wenn
						boolAddWhereOrAnd FALSE ist, wird die Bedingung zwar eingefügt,
						aber kein “WHERE“ oder “AND“ angefügt, dies muss in der
						Bedingung schon vorhanden sein (z.B. “OR“). 

						ACHTUNG:	Der neue optionale Parameter ist mit einem Pipe-Zeichen
									von der Where-Clause zu trennen NICHT MIT EINEM
									KOMMA!

	QUERY_ADD_STRING	[name],'string' oder [strings]{,[add_kommas] oder [values] {, numStart {, numLines}}} 
						Baut an das Query/Browser/Maske [name] den 'string'.
						Wenn anstelle 'string' eine Variable vom Typ VAR_LIST
						übergeben wird, so werden alle Zeilen der VAR_LIST an
						Query/Browser angefügt.
						Sollte neben einer VAR_LIST von [strings] auch eine 
						VAR_BOOL [add_kommas] (auch als absolut Wert TRUE 
						oder FALSE möglich) übergeben werden, so wird am Ende
						eines jeden Strings (außer dem jeweils letzten String) ein
						Komma angehängt.
												ODER
						Sollte neben einer VAR_LIST von [strings] auch eine 
						VAR_LIST mit [values] übergeben werden, so werden die
						übergeben Listen wie eine UPDATE-Anweisung zusammen 
						gebaut. Dabei wird jeder String in [strings] wie der Feldname 
						aufgefaßt, daran wird (durch Leerzeichen getrennt) ein 
						Gleichheitszeichen angefügt und schließlich der jeweils 
						korrespondierende String der Values-Liste angefügt und 
						dahinter wird noch ein Komma angebaut (außer bei dem 
						letzten Feld). In diesem Fall können die optionalen Parameter
 						numStart und numLines verwendet werden um zu sagen, ab welcher
						Zeile und wieviele Zeilen zum Query addiert werden sollen.

	QUERY_REFRESH		[query oder browser oder maske]{, boolReload {, 'strStartingWithClause'}}
						Wenn ein Query oder Browser oder auch Maske (d.h. deren 
						Query) erneuert werden soll, weil z.B. im Hintergrund Daten 
						eingefügt oder gelöscht wurden, so können diese Änderungen 
						hiermit im Query auf den neuesten Stand gebracht werden. 
						Der Datencursor steht nach dieser Aktion wieder auf dem 
						ersten Datensatz außer, wenn eine Maske übergeben wurde, 
						die einen offen View hat, dann steht der Datencursor auf dem 
						zuletzt aktiven Datensatz. Falls boolReload TRUE wurde, wird das
						zugehörige Query anhand der zur Maske gehörenden QueryID bzw.
						ViewID erneut geladen und dann ausgeführt. So kann man z.B.
						während eine Maske offen ist das im View sichtbare Query
						wechseln. Mit dem neuen optionalen Parameter
						'strStartingWithClause' kann man nach dem Refresh einen Sprung
						zu einem bestimmten Datensatz fordern.

	QUERY_SET_EDIT_FIELD		[query o. browser], 'strFldName', 'strValue', floatID, boolNeedUpdate
						Verändert den Inhalt des editierbaren Feldes mit dem Namen
						'strFldName', wobei der Inhalt durch 'strValue' ersetzt wird. Dies
						geschieht in dem Datensatz mit der RecordID floatID. Falls
						boolNeedUpdate TRUE ist, wird der Datensatz im Hintergrund auch
						gleich per Update in die Tabelle geschrieben, anderenfalls dient dieser
						Befehl nur zum Verändern der Darstellung.

	QUERY_SET_DATABASE		[query oder browser oder maske]{, [database]}
						Mit diesem Befehl kann man eine Variable vom Typ
						VAR_QUERY, VAR_BROWSER oder VAR_MASK an eine
						Variable vom Typ VAR_DATABASE binden - alle
						Datenzugriffe werden dann mit der angegebenen [database]
						durchgeführt. Sollte keine [database] übergeben worden sein,
						wird die Standard-Datenbank an die Abfrage-Variable
						gebunden. Beispiel:
						QUERY_SET_DATABASE [MyDBQ],[MyDB]		
						Alle Datenbank-Operationen, diesem Zeitpunkt mit dem
						Browser [MyDBQ] vorgenommen werden, wenden sich direkt
						an die Datenbank [MyDB].

	QUERY_2_LIST		[query oder browser oder maske], [liste]
						Fügt die Definitions-Zeilen des [querys] (oder browsers oder maske)
						an die [liste] an.

	LIST_2_QUERY		[liste], [query oder browser oder maske]
						Fügt die Zeilen der [liste]  and das [querys] (oder browsers oder
						 maske) 	an.

	VIEW			[browser]{,[bool]{,'Head'{,'Info'{,ReturnOnOne{,NoExecute}}}}
						Ausführen und Anzeigen des [browsers] mit der 
						Wartenachricht  'Info'. In dem Fenster wird als Überschrift der
						Parameter 'Head' verwendet. Wenn der Browser mit dem 
						Auswählen einer gezeigten Zeile geschlossen wurde, wird in 
						der Boolean-Variable [bool] ein TRUE, anderenfalls ein 
						FALSE zurückgegeben.

						Falls der VAR_BOOL-Wert ReturnOnOne TRUE ist, 
						wird, falls die Ergebnismenge des Browsers genau ein Record 
						beträgt, der Browser gar nicht geöffnet sondern sofort im 
						Hintergrund ein GET_DATA ausgeführt und zurück zur 
						Scriptverarbeitung gesprungen. Falls mehr als ein Record 
						gefunden wird, wird der Browser geöffnet. Wenn 
						ReturnOnOne FALSE ist (default) wird der Browser 
						gleichgültig von der Anzahl der gefundenen Records geöffnet.

						Falls der VAR_BOOL-Wert NoExecute TRUE ist (default = FALSE), 
						wird davon ausgegangen, dass das Query bereits mit EXECUTE 
						ausgeführt wurde, und nur noch gezeigt werden muss. 

						Die Möglichkeiten, die ein Browser dem User zur Verfügung 
						stellt werden durch den Inhalt der Untervariable 
						[browser!VIEW_FLAG] festgelegt, folgende Werte durch 
						Addition gesetzt werden
						[BROWSER_FLAG_NONE]		Keine Flag ist gesetzt.

						[BROWSER_FLAG_PANEL]		Soll der Button-Panel 
													zu sehen sein?

						[BROWSER_FLAG_ICON_OK]	Soll der OK-Knopf zu
													sehen sein?

						[BROWSER_FLAG_ICON_EXIT]	Soll der ESC-Knopf zu
													sehen sein?

						[BROWSER_FLAG_ICON_DELETE]	Soll der Lösch-Knopf
													zu sehen sein?

						[BROWSER_FLAG_REC_LAST]	Soll der Daten-Cursor
													nach dem Öffnen des
													Browsers gleich an das
													Ende der Liste springen

						[BROWSER_FLAG_SELECT_ALLOWED]
													Sollen Datensätze mit 
													der Leertaste markiert 
													werden können?

						[BROWSER_FLAG_ICON_NOTES]	Soll der Notizmanager
													aufgerufen werden
													können?

						[BROWSER_FLAG_ICON_PRINT]	Soll ein Druck-Icon gezeigt 
													werden?

						[BROWSER_FLAG_ICON_DOC_MGR]	Soll der Dokumenten-
													Manager aufgerufen 
													werden können?

						[BROWSER_FLAG_ICON_LIST_GEN]	Soll der Listengenerator
													aufgerufen werden
													können?

						[BROWSER_FLAG_ICON_SEARCH]	Soll die Schnellsuche
													aufgerufen werden
													können? Diese Option
													funktioniert nur wenn in
													der Datenbankabfrage
													eine "ORDER BY" - Be-
													dingung enthalten ist.

						[BROWSER_FLAG_ICON_HELP]	Soll die Hilfe 
													Aufgerufen werden 
													können? Dies ist nur 
													möglich wenn das Hilfe-
													System richtig 
													initialisiert wurde ist.

						[BROWSER_FLAG_ICON_USER]	Soll eine Aktion vom 
													Browser aus 
													aufgerufen/eingeleitet
													werden können? Dies 
													ist nur möglich wenn 
													gleichzeitig eine 
													entsprechende HOOK-
													Routine angemeldet 
													wird.

						[BROWSER_FLAG_NOT_MODAL]	Soll das Browserfenster 														nicht modal gezeigt werden?

						[BROWSER_FLAG_SHOW_DEMAND_NOTE]
													Soll, falls vorhanden,
													die Immer-Notiz des 
													gewählten Datensatzes
													angezeigt werden ?

						[BROWSER_FLAG_ICON_INSERT]	Soll ein Datensatz vom 
													Browser aus eingefügt
													werden können? Dies 
													ist nur möglich wenn 
													gleichzeitig eine 
													entsprechende HOOK-
													Routine angemeldet 
													wird.

						[BROWSER_FLAG_SET_UPDATE_TIME]
													Soll bei einer UPDATE 
													Anweisung automatisch
													die UpdateTime des/der
													betroffenen Record/s
													gesetzt werden?

						[BROWSER_FLAG_SET_USER]	Soll bei einer UPDATE 
													Anweisung automatisch
													das Feld IDUser des/der
													betroffenen Record/s
													gesetzt werden? Wichtig: 
													Wenn die UpdateTime nicht
													gesetzt wird, wird der User
													automatisch auch nicht
													gesetzt.

						[BROWSER_FLAG_EDIT_ON_ENTER]	Soll der Browser bzw. das
													Grid automatisch in den
													Editiermodus wechseln,
													wenn es den Fokus erhält. 
													Achtung: nicht verwenden 														bei Abfragen, in denen
													Zeilen enthalten sein
													können, die "protected"
													sind.

						[BROWSER_FLAG_OK_ON_STARTING] 
													Bei einem Browser, bei
													dem sowohl der
										BROWSER_HOOK_OK
													gesetzt ist, als auch eine
													STARTING WITH -
													Anwesiung im SQL-
													Statement enthalten ist,
													direkt nach erfolgreichem
													Auffinden des
													Datensatzes aus der
													STARTING WITH -
													Anwesiung den OK-Hook
													anzusteuern, ganz so als
													ob der Benutzer den
													Datensatz mit ENTER
													oder einem Maus-
													Doppelklick ausgewählt
													hätte. Damit kann man
													kaskadische Auswahlen
													z.B. nacheinander
													geschalteter Choicer
													öffnen. Diese neue Flagge
													wird unmittelbar nach dem
													ersten Ausführen wieder														aus der VIEW_FLAG
													gelöscht. D.H. man muß
													sie vor jedem "Gebrauch"
													neu setzten.

						[BROWSER_FLAG_COLUMN_COLOR_ONLY]
													Wenn nur die Spalte eines
													Browsers oder Grids oder 
													Mask-Such-Browsers, die 
													farblich unterlegt werden 
													soll, hervorgehoben werden 
													soll und nicht die ganze 
													Breite der angezeigten Zeile. 

						[BROWSER_FLAG_TRIM_STRINGS]	Sollen Strings in getrimmt 
													dargestellt werden (das ist 
													eigentlich Standard, nur bei 
													WideStrings in der ADO-
													Version ist dieser Schlüssel 
													bisher notwendig geworden).

						[BROWSER_FLAG_SCROLL_H_NO]	Soll kein horizontaler Scrollbar 
													angezeigt werden?

						[BROWSER_FLAG_SCROLL_V_NO]	Soll kein vertikaler Scrollbar 
													angezeigt werden?

						[BROWSER_FLAG_HAVE_LINE_FEEDS]
 													Soll beim Einfügen von einer 
													Variable des Typs VAR_LIST 
													innerhalb einer Query-Definition 
													nach jeder Zeile der Liste ein 
													CRLF (Zeilenumbruch) eingefügt 
													werden?

						[BROWSER_FLAG_NO_SORT]	Wenn diese Option gesetzt wird, 														kann weder durch einen Klick auf 
													den Kopf einer Browser oder Grid-
													Spalte neu sortiert werden, noch 
													kann im Kontextmenü, das sich 
													öffnet, wenn man einen Rechts-
													Klick auf den Kopf einer Spalte 
													eines Browsers oder eines Grids 
													macht, die Punkte "Sortieren 
													aufwärts", "Sortieren abwärts", 
													"Schnellsuche erweitern" und 
													"Filtern" wählen.

						Wenn keine Angaben gemacht werden, so ist die Vorgabe:
						[BROWSER_FLAG_PANEL]			+
						[BROWSER_FLAG_ICON_OK]		+
						[BROWSER_FLAG_ICON_EXIT]		+
						[BROWSER_FLAG_ICON_NOTES]		+
						[BROWSER_FLAG_ICON_DOC_MGR]		+
						[BROWSER_FLAG_ICON_LIST_GEN]		+
						[BROWSER_FLAG_ICON_SEARCH]		+
						[BROWSER_FLAG_ICON_HELP]		+
						[BROWSER_FLAG_SET_UPDATE_TIME]

						Wenn auf einen der sichtbaren Knöpfe des Browsers gedrückt
						wird, kann eine im Script definierte Procedure angesteuert 
						werden. Folgende Untervariablen stehen für diese Hooks zur
						Verfügung:
						[browser!BROWSER_HOOK_DELETE]	Wenn der Lösch-
												Knopf gedrückt 
												wurde.
						[browser!BROWSER_HOOK_OK]	Wenn ein Datensatz
												gewählt wurde.
						[browser!BROWSER_HOOK_EXIT]	Wenn der Browser
												geschlossen werden
												soll.
						[browser!BROWSER_HOOK_USER]	Wenn im Browser 
												das Informations 
												/Aktions-Icon zu 
												sehen ist, soll sie 
												hier hinterlegte 
												Routine aufgerufen 
												werden.
						[browser!BROWSER_HOOK_FOKUS_GET]
												Wenn der Daten-
												sichter den Focus 
												erhält.
						[browser!BROWSER_HOOK_FOKUS_LET]
												Wenn der Daten-
												sichter den Focus 
												verliert.
						[browser!BROWSER_HOOK_INSERT]	Wenn im Browser 
												das "Neuer 
												Datensatz"-Icon zu 
												sehen ist, soll sie 
												hier hinterlegte 
												Routine aufgerufen 
												werden.
						[browser!BROWSER_HOOK_MARK]	Wenn im Browser 
								eine Zeile markiert/demarkiert wurde. Ist die 
								[browser!VIEW_ACTION] ungleich 0, wird die
								User-Aktion wieder zurückgenommen.

						[browser!QUERY_HOOK_REC_CHANGE]	Siehe oben bei 
												EXECUTE.

						[browser!BROWSER_HOOK_MOUSE_OVER]	Wenn gleichzeitig 
								die Varibale [browser!VIEW_MOUSE_TIME] > 0 ist, wird die
								angegeben Hook-Procedure immer dann angestoßen, wenn
								wenn die Maus für die angegebene Zeit in Millisekunden 
								unbewegt über dem Browser verweilt.

						[browser!QUERY_LOCKED_COLS]	Legt die Anzahl der 
								fixierten Spalten am linken Rand des Browsers oder Grids fest.

						[browser!QUERY_ROW_HEIGHT]	Legt Zeilenhöhe des
								 Browsers oder Grids fest..

						[browser!BROWSER_HOOK_PRINT]	
								Prozedurname einer Routine, die aufgerufen werden soll, 
								wenn ein Druck direkt aus dem Browser heraus aufgerufen 
								werden soll.

						[browser!BROWSER_HOOK_POST_EDIT]
								Wenn im Browser Felder direkt durch Editieren 
								verändert wurden, bevor gespeichert wird, wird die 
								hier hinterlegte Routine ausgeführt. Innerhalb dieses
								Hooks sind die Variablen 
								[browser!VIEW_EDIT_VALUE], 
								[browser!VIEW_EDIT_REC_ID] und 
								[browser!VIEW_EDIT_FIELD] verfügbar, die 
								anzeigen, was der User eingegeben hat und in 
								welchem Feld und Datensatz das geschehen ist.
								Innerhalb eines Querys kann man Felder editierbar 
								machen, indem man die CSH-SQL-Syntax 
								[E "feldmaske"] dem Feldnamen voranstellt

						Bsp:		CALC [browser!BROWSER_HOOK_OK] AS 'Test'
								Wenn 'Test' eine im Script bekannte Procedure ist,
								wird diese in dem Fall ausgeführt, wenn der User 
								einen Datensatz ausgewählt hat.

						Wenn innerhalb einer Hook-Procedure die Untervariable
						[browser!VIEW_ACTION] auf einen Wert der ungleich 0
						gesetzt wird, so wird der Browser nicht geschlossen und der 
						User muß erneut eine Aktion auslösen. Ausnahme: Wenn 
						nach einem [browser!BROWSER_HOOK_USER] die
						[browser!VIEW_ACTION] auf 0 gesetzt wird, ist das Resultat 
						nach einem VIEW TRUE, wenn ein Wert kleiner als 0 
						zurückgegeben wird, so wird das Resultat nach einem VIEW 
						FALSE.

	VIEW_INFO 			[browser] {, [maskDoc2Right] {, numX, numY, numW, numH {, boolStFocus}}}} 
						Zeigt den [browser] in einem modalen Fenster an, dass nicht 
						geschlossen werden kann.
						Wenn man beim Öffnen des Views eine Maske als Parameter übergibt, 
						wird (allerdings nur beim ersten Öffnen) die VIEW_INFO rechts an das 
						Maskenfenster gedockt. Die Breite entspricht dem neuen optionalen 
						Parameter numW. Wenn keine Breite angegeben wird, wird die Breite 
						auf 20 Einheiten gesetzt. Wenn keine Maske übergeben 
						wurde, kann man auch direkt die Koordinaten der VIEW_INFO mit den 
						Parametern numX, numY, numW und numH angeben. Der Parameter 
						boolSetFocus darf erst verwendet werden, wenn die VIEW_INFO 
						bereits geöfnet ist und sorgt dafür, dass die VIEW_INFO den Focus 
						erhält.
						Bitte nicht vergessen die Variable [browser!QUERY_ID] zu setzen, 								damit die Koordinaten des Fensters gespeichert werden.

	END_VIEW				Schließt das VIEW_INFO Fenster.

	QUERY_SET_WINDOW		[browser],left,top,width,height
						Setzt die Fenster-Koordinaten für das Datensichtfenster des 
						[Browsers]. Left ist der Abstand vom linken Rand. Top ist der 
						Abstand vom oberen Rand. Width ist die Breite und Height
						die Höhe des Fensters. Diese Werte sind nach dem gleichen 
						Muster zu berechnen wie die Felder in einer Maske. (Siehe 
						SetDoc.CSH). Wird einer der Werte mit 0 übergeben, so 
						werden die Vorgabe-Einstellung wieder hergestellt.

	QUERY_LIST_COUNT		[browser oder query oder mask],[num]
						Gibt an die Variable [num] die Anzahl der Selektionen zurück 
						die sich in der Selektions-Liste eines Browsers, eines Query oder
						einer Maske befinden.
						[num] = 0 bedeutet, daß keine Selektionen vorhanden ist.

	QUERY_LIST_CLEAR		[browser oder query oder mask]
						Setzt die Selektions-Liste eines Browsers, eines Query oder
						einer Maske zurück, d.h. daß nach dem Aufruf dieses Befehls keine
						Datensätze mehr selektiert sind.

	QUERY_LIST_ADD		[browser oder query oder mask],float{,status}
						Fügt zur Selektions-Liste einen weiteren Datensatz hinzu. Der 
						Wert in float bestimmt die Datensatz-RecordID, der status 
						kann ggf. gleichzeitig gesetzt werden.

	QUERY_LIST_FIRST		[browser oder query oder mask],[float]{,[status]}
						Setzt den Selektions-Listen-Zeiger auf den ersten Eintrag in 
						der Selektions-Liste eines Browsers, eines Query oder
						einer Maske. In [float] wird die RecordID des Datensatzes 
						zurückgegeben auf den der Selektions-Listen-Zeiger gerade
						verweist. In [status] kann der Status des Eintrages abgelesen
						werden.

	QUERY_LIST_NEXT		[browser oder query oder mask],[float]{,[status]}
						Setzt den Selektions-Listen-Zeiger auf den nächsten Eintrag 
						in der Selektions-Liste eines Browsers, eines Query oder
						einer Maske. In [float] wird die RecordID des Datensatzes
						zurückgegeben auf den der Selektions-Listen-Zeiger gerade
						verweist. In [status] kann der Status des Eintrages abgelesen
						werden.

	QUERY_LIST_DELETE		[browser oder query oder mask],float
						Löscht den Eintrag in der Selektions-Liste eines Browsers, eines
						Query oder einer Maske mit der RecordID float. Der Selektions-
						Listen-Zeiger zeigt nach dieser Operation wieder auf den Anfang der
						Selektions-Liste.

	QUERY_LIST_AVAIL		[browser oder query oder mask],float, [bool],{[status]}
						Gibt in der Boolean-Variable [bool] zurück ob die RecordID 
						float in der Selektions-Liste eines Browsers, eines Query oder
						einer Maske enthalten ist. Wenn in [status] eine Boolean-Variable
						übergeben wird, so kann der Status des List-Items darin abgelesen
						werden.

	QUERY_LIST_SET_STATUS	[browser oder query oder mask],float,status,{[bool]}
						Setzt den status des List-Items float in der Selektions-Liste 
						eines Browsers, eines Query oder einer Maske. In [bool] kann
						abgelesen werden ob die Operation erfolgreich ausgeführt wurde.

	QUERY_LIST_SELECT		[browser oder query oder mask], boolVal
						Wenn [boolVal] TRUE ist, werden alle Records des [querys, mask, 
						browsers] selektiert. Mit [boolVal] FALSE werden alle deselktiert.

	QUERY_LIST_2_LIST		[browser oder query oder mask], [listVar]
						Alle RecordIDs der selektierten Zeilen des [querys, mask, browsers] 
						werden an die Liste [listVar] weitergegeben.

	DEBUG_ALL_ON			Ist gleichzeitig DEBUG_ON und DEBUG_SQL_ON.

	DEBUG_ON				Schaltet den Script-Debugger ein.

	DEBUG_CLEAR			Säubert den Debug-Monitor.

	DEBUG_ON_ERROR			Schaltet den Script-Debugger nur bei Fehlern ein.

	DEBUG_ON_ERROR_EXIT		Das Script wird nach dem Auftreten des ersten Fehlers, der 
						durch Script-Warnungen, SQL-Warnungen oder den 
						Entwickler-Modus angezeigt wird .verlassen. Der Monitor 
						bleibt geöffnet.

	DEBUG_ALL_ON			Ist gleichzeitig DEBUG_OFF und DEBUG_SQL_OFF.

	DEBUG_OFF				Schaltet den Script-Debugger aus.

	DEBUG_SQL_ON			Schaltet den SQL-Debugger ein.

	DEBUG_SQL_OFF			Schaltet den SQL-Debugger aus.

	DEBUG_PROCS_ON			Schaltet den Prozeduren-Lister ein.

	DEBUG_PROCS_OFF			Schaltet den Prozeduren-Lister aus.

	DEBUG_INFO		'str'	Zeigt im Monitor den String 'str'. Der Monitor wird 
						automatisch angeschaltet wenn er noch nicht geöffnet ist.

	VARS				Gibt alle bekannten Variablen mit ihrem Inhalt im Monitor 
						aus.

	COMMANDS		bool	Gibt alle bekannten Befehle nach Befehlsgruppen sortiert im 
						Monitor aus. Wenn bool TRUE ist, werden die Befehle in 
						alphabetischer Reihenfolge ausgegeben.

	SHOW_VAR		[name]	Gibt den Inhalt der Variable name im Monitor aus.

	CALC .. AS 				In dieser Zeile erfolgt eine Berechnung von Variablen der 	
						Typen NUM,FLOAT,STR,BOOL,DATE oder TIME.

						Für Zahlen sind folgende Operatoren verfügbar:
						+,-,*,/,^,ABS,SQRT,SQR,SIN,COS,ARCTAN,LN,LOG,
						EXP,FACT,INT,ROUND,DIV,MOD
						NUR bei Zahlen sind Kombinationen erlaubt, hier können 
						ganze Formeln mit beliebig vielen Klammern berechnet 
						werden.
						Ausnahmen :	POS(S1,S2) gibt die Position des Strings S1
									in S2 zurück.
									CRC(S1) gibt die Check-Summe des Strings S1
									zurück.
									I_EXTRACT(S1) extrahiert den Binärwert in S1 so,
									daß er in einer Variable vom Typ VAR_NUM
									verwendet werden kann.
									F_EXTRACT(S1) extrahiert den Binärwert in S1
									so, daß er in einer Variable vom Typ VAR_FLOAT
									verwendet werden kann.

						Innerhalb einer CALC – Operation können auch Format-
						Anweisungen untergebracht werden. Format-Anweisungen 
						sind nur für folgende Variablen-Typen möglich : VAR_DATE, 
						VAR_STRING, VAR_TIME, VAR_FLOAT, VAR_NUM. Eine 
						Format-Anweisung muß innerhalb der Variablen-Klammer, 
						direkt hinter dem Variablen-Namen untergebracht werden. 
						Der Variablen-Name ist von der Format-Anweisung durch das 
						Pipe-Zeichen (|) zu trennen. 
						Beispiel CALC [TmpStr] AS [TmpFloat|R9,2], hierbei wird der 
						Inhalt der Float-Variable [TmpFloat] so an den den String 
						[TmpStr] übergeben, daß der String hinterher exakt 9 Zeichen 
						lang ist, es sei denn, die Variable [TmpFloat] enthält eine 
						Zahl deren Darstellung mehr Zeichen benötigt. Die Zahl in 
						[TmpStr] wird rechtsbündig ("R") und mit zwei 
						Nachkommastellen übertragen. So könnte der Inhalt von 
						[TmpStr] dann etwa "   123.56" lauten.
						Wird die Angabe der Nachkommastellen negativ angegeben, werden 
						alle Nullen, die sich rechts vom Dezimalpunkt, und sich genau am 
						Ende des Ausgebstrings befinden, abgeschnitten. Sollte dann nur noch
						der Dezimalpunkt übrig bleiben, wird dieser auch abgeschnitten. Diese 
						Darstellung liefert also nur so viele Nachkommastellen, wie wirklich
						benötigt werden. Die Zahl 123.00 wird also zu “123“, wahrend 123.07 
						unverändert zurück kommt und 123.50 zu “123.5“ wird.
						Eine Formatanweisung ist nach folgendem Prinzip aufgebaut 
						JustifyWidth, Picture. D. h. Justify gibt die Möglichkeit zur
						 Ausrichtung an (nur interessant, wenn ein String das Ziel 
						einer Berechnung ist). Mögliche Werte sind:
						"R"		Rechtsbündig
						"L"		Linksbündig
						"C"		Centered/Zentriert
						Width (nur interessant, wenn ein String das Ziel einer 
						Berechnung ist) gibt an, wie breit der String insgesamt sein 
						soll. So würde "R20" einen zwanzig Zeichen breiten String 
						ergeben.
						Picture gibt an wie das Ergebnis aussehen soll. Dies ist im 
						Wesentlichem von der Variable abhängig, die formatiert 
						werden soll. Folgende Varianten sind möglich:
						Variablentyp			Picture
						VAR_TIME				hh:mm:ss
												hh:mm
												hh:mm:ss,cc
												mm:ss,cc	als Trennzeichen 
														können auch andere 
														Zeichen als z.B. der 
														Doppelpunkt 
														verwendet werden.

						VAR_DATE				dd.mm.yy
												dd.mm.yyyy
												mm/dd/yyyy	etc.

						VAR_STRING		Picture = wird nicht ausgewertet.

						VAR_NUM			Picture = Anzahl der Nachkommastellen.
						VAR_FLOAT			Picture = Anzahl der Nachkommastellen.

						Bei den Variablen-Typen VAR_NUM und VAR_FLOAT sind 
						noch weitere Justify-Anweisungen möglich:
						"K"		Rechtsbündig		Dez.Slash
						"M"		Rechtsbündig		Dez.Punkt, Tausenderkomma
						"N"		Linksbündig		Dez.Punkt, Tausenderkomma
						"O"		Centered/Zentriert	Dez.Punkt, Tausenderkomma
						"U"		Rechtsbündig		Dez.Komma
						"V"		Linksbündig		Dez.Komma
						"W"		Centered/Zentriert	Dez.Komma
						"X"		Rechtsbündig		Dez.Komma, Tausenderpunkt
						"Y"		Linksbündig		Dez.Komma, Tausenderpunkt
						"Z"		Centered/Zentriert	Dez.Komma, Tausenderpunkt
						Wichtig ist bei diesen Variablen-Typen auch, daß der Wert, 
						der für Width in der Formatanweisung angegeben werden 
						kann dann ignoriert wird, wenn die Darstellung des Wertes 
						einer solchen Variable mehr Platz benötigt, als in Width 
						gefordert wird.

						Für Strings sind folgende Operatoren verfügbar:
						CON(S1,S2,...)		Concat (Zusammenfügen) der Strings S1 											und S2 
						COPY(S,Pos,Len)	Gibt einen Teilstring von S zurück. 											Beginnend an der Position Pos in dem 											String S, mit der Länge Len.
											In der Copy-Operation sind keine Feld-											Format-Anweisungen gestattet. 
											RICHTIG:
											COPY([STRING4],2,[NUM1])
											COPY('ABCDE',[NUM4],5)
											FALSCH: 
											COPY([STRING4],1,[FLOAT4])
											COPY([STRING4|R20],6,[NUM1])
						UPCASE(S)			Gibt der String S in Großbuchstaben aus.
						LOWCASE(S)			Gibt der String S in Kleinbuchstaben aus.

						CHAR(#x#xxx#xx)	Gibt ASCII-Zeichen an einen String 
											weiter. Jedem Dezimalwert eines ASCII-
											Zeichens muß ein "#" vorangestellt 
											werden. Das Zeichen muß im 
											Dezimalwert angegeben werden. 
											Beispiele:
											CALC [Test] AS CHAR(#13#10)
											oder
											CALC [Test] AS CHAR(#245#0)
											oder 
											CALC [Test] AS CHAR(#25#120#3#34)
						VAL(S)				Gibt an eine Variable des Typs NUM
											oder FLOAT den Wert der in dem String 
											S enthaltenen Zahl zurück.
						LEN(S)				Gibt an eine Varible des Typs NUM oder
											FLOAT den Wert der Länge des Strings 
											S.
						ORD(C)				Gibt an eine Varible des Typs NUM oder 
											FLOAT den ordinal Wert des ASCII-
											Zeichens C aus.
							OSTR(S)			Gibt an eine Variable vom Typ STR die 
												Zeichen des Strings S als dreistellige 
												ORD-Werte zurück. 

						DEOSTR(S)			Ist die Umkehroperation für OSTR().
						DIGITS(S {, F})		Gibt von dem String S nur die Zeichen 
											zurück die Ziffern sind. So wird aus 
											''Tel.: 0234/7832-0'' einfach nur noch
											''023478320''. Sollte noch der String "F"
											(Filter) übergeben werden, so werden auch
											alle die Zeichen in S belassen, die sich auch
											in F befinden.
						DWORD(S o. N o. F{{,boolCompleteWords},numLanguageID}) 	
											Gibt von dem String S oder der Zahl N oder 
											der Gleitkommazahl F die Ziffern (ohne
 											Nachkommastellen) als Worte zurück. Dies
											wird beispielsweise benötigt, wenn man auf
											Schecks die Ziffern in geschriebener Form
											ausgeben will. So wird aus "4325" der String 
											"vier - drei - zwei – fünf".
											Ist der Parameter boolCompleteWords TRUE,
											wird aus “325”  “dreihundert fünf und zwanzig”. 
											Der Parameter numLanguageID kann folgende
											Werte annnehmen:
											[LANGUAGE_ID_GERMAN],
											[LANGUAGE_ID_ENGLISH] und
											[LANGUAGE_ID_FRENSH] 
											(0=default=ist auch Deutsch) dadurch wird die
											Zahl in entsprechenden “Sprechweise” 
											zurückgegeben. Dann wird aus “325” der String
											z.B. “three hundret zwenty five”.
											Die verwedneted Worte befinden sich in der
											CARA.msg Datei  (Msg-IDs 720 - 754)
						TRIM(S)				Gibt den String S ohne führende und 
											anhängende Leerzeichen aus.
						DBL_BACK_SLASH(S)	Verdoppelt alle Backslashes von S.
						SGL_BACK_SLASH(S) Reduziert alle doppelten Backslashes von S
											 auf einfache.
						TRLEAD(S)			Gibt den String S ohne führende
											 Leerzeichen aus.
						TRTRAIL( S)			Gibt den String S ohne  anhängende 
											Leerzeichen aus.
						CRYPT(S)			Gibt den String S in cryptifizierter Form 
											aus.

						EXT(S,L,F,J,C)		Gibt den String S mit der Länge der Zahl
											L aus. Wenn S verlängert werden muß,
											wird das Füllzeichen F verwendet. 
											F ist eine Zahl und beinhaltet den ASCII-
											Wert des Füllzeichens. J (Justification) 
											ist eine Zahl und steht für:
												1 = linksbündig
												2 = rechtsbündig
												3 = zentriert
												4 = kein auffüllen
											Falls S zu lang sein sollte wird er 
											gekürtzt: C (cut) ist eine Zahl und steht 
											für:
												1 = rechts abschneiden
												2 = links abschneiden
												3 = zentriert abschneiden
												4 = nicht abschneiden
											Beispiel:
											CALC [Test] AS EXT('4',5,48,2,1)
											Ergebnis in [Test] = '00004'
											S='4', L=5, F=48 ('0'), J=2, C=1
						H2ASCII(S)			Gibt den String S der Zeichen im 													HTML-Format enthält in ASCII aus.
											So werden die HTML-Kürzel wieder in 
											Sonderzeichen verwandelt.
						A2HTML(S)			Gibt den String S der Zeichen im ASCII-
											Format enthält in HTML aus. So werden
											Sonderzeichen in HTML-Kürzel gewandelt. 
						N4F(S,F)			(NORMALIZE_4_FILENAME)
											Gibt den String S ohne Sonderzeichen und 
											Leerzeichen so zurück, dass man ihn als 
											Dateinamen, auch unter Unix/Linux oder auch 
											als Teil einer URL verwenden kann.
											Alle Zeichen, die im String „F“ (wie „finden“)
											enthalten sind, werden nicht unterdrückt oder 
											Ersetzt.
	
						EBCDIC2ASCII(S)	Gibt den String S der Zeichen im 													EBCDIC-Format enthält in ASCII aus.
						ASCII2EBCDIC(S)	Gibt den String S der Zeichen im ASCII-
											Format enthält in EBCDIC aus.
						A2UTF8(S)			Gibt den String S der Zeichen im
											ASCII-Format enthält in UTF8 aus.
						UTF82A(S)			Gibt den String S der Zeichen im
											UTF8-Format enthält in ASCII aus.
						ANSI2OEM(S)		Gibt den String S der Zeichen im
											ANSI-Format (WINDOWS) enthält in 
											OEM-Format (DOS/ASCII) aus.
						OEM2ANSI(S)		Gibt den String S der Zeichen im OEM-
											Format (DOS/ASCII) enthält in ANSI-Format 
											(WINDOWS) aus.
						PHONETIC(S)		Gibt den String S in phonetische Schreibweise 
											aus.
						FILTER(S,F)			Entfernt aus S alle Zeichen die In F
											enthalten sind. Jedes Zeichen von 
											F wird dabei getrennt abgearbeitet,
											und, egal wo es sich in S befindet,
											entfernt. ACHTUNG diese Operation ist
											case sensitive d.h. Groß- und Klein-
											schreibung werden berücksichtigt.
						REPLACE(S,F,R)	Ersetzt jedes Vorkommen von F in S
											durch R. R und F können Strings sein.
											R und F können unterschiedlich lang 
											sein. ACHTUNG diese Operation ist
											case sensitive d.h. Groß- und Klein-
											schreibung werden berücksichtigt.
						VAR_REPLACE(S)	Ersetzt alle in S vorkommenden 
											Variablen durch deren Inhalt.
											Beispiel :	CALC [ANum] AS 42
												CALC [AStr] AS 'Test [ANum]'
												VAR_REPLACE [Astr]
												In [Astr] steht nun 'Test 42'.
						PART(S,P,D)			Extrahiert aus dem String S den P'ten
											Teil, der durch den Delimiter D getrennt
											ist. 
											Beispiel: 
											CALC [S] AS 'P1;P2;P3;;5;;P7'
											CALC [PStr] AS Part([S],2,';')
											Dann steht in [PStr] der Wert 'P2'.
											Nach CALC [PStr] AS Part([S],6,';')
											steht in [PStr] der Wert ''.
											
											Wenn P negativ ist, wir von [S] alles bis 
											einschließlich dem P-ten Teil in [PStr] zurück 
											gegeben (am Ende steht dann IMMER ein 
											Delimiter).
											Nach CALC [PStr] AS Part([S],-6,';')
											steht in [PStr] der Wert ''P1;P2;P3;;5;;'.

											Wichtig:	PART() kann auf VAR_STR, 
													VAR_NUM, VAR_FLOAT und 
													VAR_BOOL angewendet 
													werden. 
											
											Beispiel:	CALC [Num] AS Part([S],5,';')
												Dann enthält [Num] den Wert 5.

						REVERSE_PART(S,P,D)
											Extrahiert aus dem String S den P'ten
											Teil, der durch den Delimiter D getrennt
											ist von rechts ausgehend. 
											Beispiel: 
											CALC [S] AS 'P1;P2;P3;;5;;P7'
											CALC [PStr] AS Part([S],2,';')
											Dann steht in [PStr] der Wert ''.
											Nach CALC [PStr] AS Reverse_Part([S],6,';')
											steht in [PStr] der Wert 'P2'.
											
											Wenn P negativ ist, wir von [S] alles bis 
											einschließlich dem P-ten Teil in [PStr] zurück 
											gegeben (am Anfang steht dann IMMER ein 
											Delimiter).
											Nach CALC [PStr] AS Reverse_Part([S],-6,';')
											steht in [PStr] der Wert ';P2;P3;;5;;P7'.

											Wichtig:	PART() kann auf VAR_STR, 
													VAR_NUM, VAR_FLOAT und 
													VAR_BOOL angewendet 
													werden. 

											Beispiel:	CALC [Num] AS Part([S],3,';')
												Dann enthält [Num] den Wert 5.

						ASIGN_PART(S,P,PD,D{,F{,Upper}})
											Extrahiert aus dem String S den durch P
											erkennbaren Teil. Alle Teile sind durch den
											Delimiter D getrennt. Wenn P erkannt wurde,
											wird versucht den "rechten" Teil des durch P
											gekennzeichneten Teils zu ertrahieren.
											"Links" und "Rechts" wird dabei durch den
											Delimiter PD unterschieden. Wenn F nicht
											leer ist, werden alle Zeichen von F aus dem
											Ergebnis gefiltert. Wenn Upper TRUE ist,
											wird das Ergebnis in Großbuchstaben
											zurückgegeben.
											Wichtig:	ASIGN_PART() kann auf
													VAR_STR, VAR_NUM,
													VAR_FLOAT und 
													VAR_BOOL
													angewendet werden.
											Beispiel:	
									CALC [S] AS 'P1=1;P2=2;P3=3;;P5=5;;P7=7'
 									CALC [P] AS ASIGN_PART([S],'P3','=',';',' ',TRUE),
									dann steht in [P] '3'.

						PLACE(Src,SP,L,R)	Ersetzt in dem String Src ab der 
											Startposition SP genau L Zeichen durch 
											den Inhalt vom Replacestring (R). Sollte 
											L=0 übergeben werden, werden genau 
											soviele Zeichen aus Src entfernt wie R 
											lang ist. Sollte R keine Zeichen 
											enthalten, so werden L-Zeichen aus Src 
											entfernt. Wenn R über die Länge von Src 
											hinausreicht, wird Src länger.
						HEX(num)			Gibt den Wert num (VAR_NUM oder absolut)
											in Hex-Format zurück.
						OCT(num)			Gibt den Wert num (VAR_NUM oder absolut)
											in Octal-Format zurück.
						BIN(num)			Gibt den Wert num (VAR_NUM oder absolut)
											in Binär-Format zurück.

						MOVE_INT(num,len)	Legt den Wert num (VAR_NUM oder
											absolut) mit der Länge len in einem String so
											ab, daß er binär in eine Datei gespeichert
											werden kann. len darf nur die Werte 1,2,4
											oder 8 annehmen.
						RANDOM(numRange)	Damit erhält man eine Zufallszahl zwischen 0 
											und numRange. Das Ergebnis kann vom Typ 
											VAR_NUM und auch VAR_FLOAT sein.
						POWER(base,exp)	Das Ergebnis kann vom Typ VAR_FLOAT und 
											VAR_NUM sein und ist gleich “base hoch exp”.
											Base und Exp können sowohl vom Typ 
											Die n-te Wurzel kann man z.B. errechnen, indem 
											man den Kehrwert von exp = 1/exp verwendet.
											VAR_NUM als auch vom Typ VAR_FLOAT sein.
						FLOOR(float)			Gibt die nächste ganze Zahl < oder = float 
											zurück. Das Ergebnis kann vom Typ 
											VAR_NUM und auch VAR_FLOAT sein.

						Für Date sind folgende Operatoren verfügbar:
						+,-  Hierbei können Werte addiert bzw. subtrahiert werden.
						Es gibt nur drei gestattete Schreibweisen für Datum-
						Berechnungen 
						1.	Die direkte Variablen-Zuweisung
							CALC [EKDatum] AS [VKDatum] 
						2.	Die direkte variable Zuweisung mit DAHINTER
							stehender Berechnung 
							CALC [EKDatum] AS [VKDatum] + 20
							oder z.B.
							CALC [EKDatum] AS [EKDatum] - 1 
							wenn nicht Tage addiert oder subtrahiert
							werden sollen, verwendet man
							CALC [EKDatum] AS [VKDatum] + M2
							bzw.
							CALC [EKDatum] AS [VKDatum] - M4
							um in Monaten zu rechnen 
							oder 
							CALC [EKDatum] AS [VKDatum] + Y1
							bzw.
							CALC [EKDatum] AS [VKDatum] - Y3
							um in Jahren zu rechnen.
						3.	Die direkte absolute Zuweisung in Anführungszeichen.
							CALC [0EKDatum] AS '12.12.1994' 

						Für Time-Variablen sind folgende Operatoren verfügbar:
						+,-  Hierbei können Sekunden addiert bzw. subtrahiert 
						werden.
1.	Die direkte variable Zuweisung
	CALC [EatTime] AS [HighNoon] 
						2.	Die direkte Variablen-Zuweisung mit DAHINTER
							stehender Berechnung
							CALC [Sleep] AS [SpareTime] + 3600 
							oder z.B.
							CALC [KillTime] AS [SoSoon] - 12000 
						3.	Die direkte, absolute Zuweisung in Anführungszeichen.
							CALC [SuccessTime] AS '08:00:00' 

						Boolean-Variablen können nur direkt gesetzt werden. Z.B. 						CALC [BOOL] AS TRUE

	INC 				[num]	Inkrementiert die Variable [num] um den Wert 1. 
						Die [num] muß vom Datentyp NUM oder FLOAT sein

	DEC 				[num]	Dekrementiert die Variable [num] um den Wert 1. 
						Die [num] muß vom Datentyp NUM oder FLOAT sein

	IF					Nach diesem Befehl kann max. ein Vergleich von zwei 
						Variablen erfolgen, der folgende Operatoren zulässt:
						=, >, <, <>, >=, <= 
						und
						>> (like) bzw. << (not like) für SQL-String-Vergleiche, 
						Wildcards sind an jedweder Position gestattet.

						Bei dem Vergleich von DATE-Feldern mit absoluten Werten 
						muß stets das Format 'dd.mm.yyyy' verwendet werden. 
						Bsp. IF [DATE|R0,dd.mm.yyyy]='21.01.1994' 
						Bei dem Vergleich von TIME-Feldern mit absoluten Werten 
						muß stets das Format 'hh:mm:ss' verwendet werden.
						Bsp. IF [TIME|R0,hh:mm:ss]>='23:49:00'   

	END_IF				Ende einer IF Anweisung.

	EXIT_IF				Sprung zum Ende der aktuellen IF-Bedingung

	ELSE				Alternative zur vorausgehenden IF-Anweisung.
						Der hierauf folgende Code wird nur dann ausgeführt, wenn
						die IF-Bedingung fehlschlug. 

	ELSE_IF				Wie ELSE, jedoch wird das Ausführen des hierauf folgenden 
						Codes nur dann erfolgen, wenn die hinter dem Befehl 
						ELSE_IF stehende Bedingung erfüllt ist.

	BACK_MARK			Sprungmarke zu der mit dem Befehl BACK_JUMP zurück
						“gesprungen“ 	werden kann. Diese Befehle können nur innerhalb einer
						PROCEDURE verwendet, und auch nur jeweils einmal werden.

	BACK_JUMP				Rücksprung zur Sprungmarke, die mit dem Befehl BACK_MARK 
						gesetzt wurde. Diese Befehle können nur innerhalb einer 								PROCEDURE verwendet werden.

	FORE_JUMP 			Mit diesem Befehl wird zu der nächsten Zeile, die den Befehl
						FORE_MARK enthält “gesprungen“. Diese Befehle können nur
						innerhalb einer PROCEDURE verwendet werden, dort jedoch
						mehrfach hintereinander. Wenn der Abbruch-Befehl FORE_MARK
						nicht gefunden werden kann, wirkt der Befehl FORE_JUMP wie ein
						EXIT_PROC.

	FORE_MARK			Abbruch-Marke, das Ende des Befehls FORE_JUMP signalisiert.

	WHILE				Nach diesem Befehl kann ein Vergleich von zwei Feldern 
						erfolgen, genau wie im IF-Befehl.

	END_WHILE			Ende einer WHILE Anweisung.

	EXIT_WHILE			Sprung zum Ende der aktuellen WHILE-Schleife

	PROCEDURE		name	Nach diesem Befehl beginnt eine Prozedur, die aus anderen 
						Script-Teilen heraus aufgerufen werden kann. name steht für 
						den Namen der PROCEDURE.
						Auf den Ausdruck name können nach einem weiteren 
						Leerzeichen auch Parameter, die durch Kommata "," getrennt 
						werden müssen, übergeben werden:
						z.B. VAR_NUM n, VAR_STR S, ~VAR_STR Res
						oder VN n, VS S, ~VS Res
						Ein Parameter der mit einem "~" beginnt kann innerhalb der 
						PROCEDURE verändert werden und diese Veränderung 
						schlägt sich auch auf die übergebene Variable nieder. 
						(Variabler Parameter)
						Als Parameter können/dürfen nur Variablen vom Typ	NUM, 
						FLOAT, STR, BOOL, DATE, und TIME verwendet werden

	END_PROC				Ende einer PROCEDURE.
	EXIT_PROC				Sprung zum Ende der aktuellen PROCEDURE.

	EXIT_SCRIPT			Unverzügliches Verlassen des aktuellen Scriptes..

	CALL 			name	Aufruf einer vorher definierten PROCEDURE.

	EXTERN			'name', option {, [listParams] {, boolWait {, strDirectory 
					{, [boolRes] {, [numReturnCode]}}}}}
						Startet ein Fremdprogramm und führt es aus. Für Option 
						können folgende Werte mit folgender Wirkung angegeben 
						werden (dieser Parameter wird nur berücksichtigt, wenn nach ihm 
						keine weiteren Parameter mehr übergeben werden):
						[EXTERN_HIDE]			Versteckt das Fenster
						[EXTERN_MAXIMIZE]		Maximiert das Fenster
						[EXTERN_MINIMIZE]		Minimiert das Fenster
						[EXTERN_RESTORE]		Stellt ein minimiertes 
														oder maximiertes 
														Fenster normal dar.
						[EXTERN_SHOW]				Aktiviert das Fenster
						[EXTERN_SHOWDEFAULT]		Aktiviert das Fenster in
														der Weise wie es in 
														den Eigenschaften des 
														Programms angegeben 														wurde.
						[EXTERN_SHOWMAXIMIZED]	Aktiviert das Fenster 
														und stellt es in 
														maximierter Form dar.
						[EXTERN_SHOWMINIMIZED]	Aktiviert das Fenster 
														und stellt es in 
														minimierter Form dar.
						[EXTERN_SHOWMINNOACTIVE]	Stellt das Fenster in 
														minimierter Form dar, 														das aktive Fenster 
														bleibt aber aktiv.
						[EXTERN_SHOWNA]		Stellt das Fenster in 														seiner derzeitigen Form 
														dar, das aktive Fenster 
														bleibt aber aktiv.
						[EXTERN_SHOWNOACTIVATE]	Stellt das Fenster in 														seiner zuletzt gewählten 
														Form dar, das aktive 
														Fenster bleibt aber 
														aktiv.
						[EXTERN_SHOWNORMAL]		Aktiviert das Fenster 
														und stellt es in normaler
														nicht minimierter und 
														nicht maximierter Form 
														dar. Diese Option sollte 
														man stets beim 
														erstmaligen Öffnen 
														eines Fensters wählen.
						Falls eine Liste mit Parametern [listParams] übergeben wird, werden 
						die in der Liste enthaltenen Zeilen ohne Leerzeichen zwischen 
						einander  aneinandergefügt (es sei denn, sie enthalten selber 
						Leerzeichen) und als Programmparameter übergeben. 
						Wenn boolWait = TRUE ist, arbeitet die Applikation erst dann weiter, 
						wenn das externe Programm beendet wurde. Wenn das externe 
						Programm gestartet wird, wird die System-Variable 
						[EXTERN_TERMINATE] automatisch FALSE gesetzt. Während der 
						Wartezeit kann der Warte-Prozess durch Setzten von 
						[EXTERN_TERMINATE]=TRUE jederzeit abgebrochen werden.
						Der Wert ’directory’ wird verwendet um ein Startverzeichnis für das 
						externe Programm anzugeben.
						[boolRes] gibt zurück, ob das externe Programm überhaupt ausgeführt 
						werden konnte.
						[numReturnCode] gibt den Rückgabewert des externen Programms 
						weiter.

	GET_EXTERN_DEVICE	'ext',delquots,delparams,[str]{,[sys]}
						Gibt zu der Dateierweiterung (Extension) 'ext' in [str] den Pfad 
						und den Namen des Programms zurück, mit dem die Dateien 
						des entsprechenden Dateityps ausgeführt oder gesichtet 
						werden können.  In der Registry stehen diese Anweisungen
						häufig in doppelten Anführungszeichen, wenn der Boolean-
						Wert delquots TRUE ist, werden diese Anführungszeichen 
						entfernt. Darüber hinaus können sich in der Registry hinter 
						dem eigentlichen Programmnamen Parameter befinden. 
						Diese werden entfernt, wenn der Boolean-Wert delparams 
						TRUE ist. Falls VAR_NUM [sys] übergeben wird, wird
						darin abgelegt, in welchem Betriebssystem sich die 
						Applikation bewegt. [sys] kann folgende Werte annehmen:
						[WIN_UNKNOWN], [WIN_3X], [WIN_95], [WIN_98], [WIN_ME],
						[WIN_NT3X], [WIN_NT4X], [WIN_2K], [WIN_XP], [WIN_VISTA]
						Beispiel:	GET_EXTERN_DEVICE '.htm', true,true,[res]
						res:			C:\PROGRA~1\INTERN~1\iexplore.exe

	SHELL_EXECUTE		'operation', 'filename'|[listFName], 'parameters'|[listParams], 'directory', option 
						Startet ein Fremdprogramm und führt es aus. Für option 
						können die gleichen Werte wie bei EXTERN angegeben 
						werden. 'filename', 'parameters' und 'directory' sprechen für sich,
						'filename' kann allerdings ein Dateiname mit einer Extension sein,
						die sich mit dem Explorer durch doppeltes anklicken öffnen läßt.
						Z.B. "http://www.cshgermany.com" (eine URL)  oder
						"mailto:info@cshgermany.com" (eine E-Mail) oder
						"http://www.cshgermany.com/index.htm" (eine HTML-Seite) ) oder
						"Mein Dokument.txt" (ein Text) oder "Meine Vorlage.dot" (eine MS-
						Word-Vorlage)
						Wenn anstelle eines Strings filename als Liste [listFName] übergeben 
						wird oder anstelle parameters die Liste [listParams], werden alle Zeilen 
						der jeweiligen Liste aneinandergehängt und dann im Gesamten 
						ausgeführt. Dadurch können diese Werte auch länger als 255 Zeichen 
						sein. 

LIST_REPLACE			[aList], [findList], [replaceList]
		Ersetzt in [aList] alle Vorkommnisse des Textes, der sich in [findList] befindet, 
durch den Text, der sich in Liste [replaceList] befindet.

LIST_INSERT 			[list] {, num, {, 'str' {, [numRes]}}}
					Fügt eine Zeile in eine Liste ein und schiebt die Zeile selbst (und alle 
					darunter befindlichen) eine Zeile weiter runter.
					LIST_INSERT [aList]			Fügt ganz oben eine Zeile ein.
					LIST_INSERT [aList], 1000	Fügt an Zeile 1000 eine leere Zeile 
										ein. Hat die Liste 	keine 1000 
										Zeilen werden sie solange 
										Leerzeilen angebaut bis 1000 
										Zeilen erreicht sind. 
					LIST_INSERT [aList], 11, 'ah'	Funktioniert wie die beiden 
										Beispiele zuvor, fügt jedoch 
										in Zeile 11 den übergebenen String 
										ein.
					LIST_INSERT [aList], 42, 'aha', [nRes] 
										Funktioniert wie die Beispiele zuvor 
										gibt jedoch zusätzlich in [nRes] 
										zurück, wieviele Zeilen eingefügt wurden.

	LIST_ITEM_GET		[list],[num]{,[count]}
						Gibt in [num] die Nummer des aktuell aktiven Strings der [list] 
						zurück. Wenn noch eine weitere numerische Variable 
						übergeben wird, so wird darin die aktuelle Anzahl der in der 
						[list] verfügbaren Strings zurückgegeben.

	LIST_ITEM_SET		[list],num	Setzt den aktuell aktiven String der [list] auf den Wert in 
						num. Falls num zu klein gesetzt werden sollte, wird der erste 
						verfügbare String der [list] aktuell. Sollte num zu groß gesetzt 
						werden, wird der letzte verfügbare String der [list] aktuell.

	LIST_SORT 			[list] {, numPart, strDelim {, boolDesc}}
						Sortiert die Liste aufsteigend.
						Wenn numPart > 0 ist und strDelim <> ‘‘ werden die Strings der Liste 
						wie bei der String-Berechnung PART() in Teile zerlegt und nach 
						aufsteigend nach dem numPart-en Teil sortiert. 
						Wenn boolDesc = TRUE ist wird die Liste absteigend sortiert. 
						Um ganze Zeilen (also nicht Teilstrings) absteigend zu sortieren,
						einfach numPart = 0 und strDelim = ‘‘ setzten.

	LIST_MOVE	[list], numIdxSource, [numRes], Opt{, boolBefore{, strCompVal{, strOp{, numPart, strDelim}}}}

						Mit diesem Befehl können Listenzeilen verschoben werden. 
						numIdxSource	gibt den Index der Zeile an, die verschoben werden 
										soll
						[numRes]		gibt Auskunft darüber ob die Zeile verschoben 
										wurde,  es kann folgende 
										Werte annehmen:
										[LM_RES_NOTHING]	Die Zeile wurde nicht 
													Verschoben
										[LM_RES_UP]	Die Zeile wurde Richtung 
													Listenanfang verschoben.
										[LM_RES_DOWN]	Die Zeile wurde Richtung 
													Listenende verschoben.	
						Opt				gibt an, wohin verschoben werden soll:
										[LM_TO_TOP]	An den Listenanfang
										[LM_TO_END]	An das Listenende
										[LM_FIND_POS]	Durch die Angabe weiterer 
													Parameter wird ein Wert
													gesucht wohin die Zeile 
													geschoben werden soll.
						Ein Wert >=0 		eine exakte Angabe der Zeile, in die verschoben 
										werden soll. Sollte die Angabe zu groß sein, wird 
										an das Listenende verschoben.
						boolBefore		gibt an, ob vor die Zielzeile verschoben oder in die 
										Zielzeile (Standard) verschoben wird. Sollte der
										Wert < 1 werden wird an den Listenanfang 
										verschoben.

						Wenn Opt = [LM_FIND_POS] ist, kann man verlangen, dass die 
						Zeile so verschoben wird, dass sie einer Bedingung entspricht, dies 
						geschieht mittels der folgenden Parameter:
						strCompVal		der Wert, der gesucht werden soll. Wenn dieser 
										Wert leer ist, wird der entsprechende Wert aus der 
										Zeile entnommen, die verschoben werden soll. 
						strOpt			Vergleichsoperator ‘=‘, ‘>=‘, ‘<=‘, ‘<>‘, ‘>‘, ‘<‘, ‘>>‘ 
										(like) oder ‘<<‘ (not like).
						numPart			Wenn dieser Wert angegeben wird, wird nicht der 
									gesamte String verglichen, sondern der hier 
									angegebene Teil der durch strDelim getrennt wird.
					strDelim			Ist der Seperator, mit dem die Teilstring 
									unterschieden werden können.
					Siehe Beispieldatei “ListMove.csh“

	LIST_STR_GET		[list],[str]{,num}
						Gibt in [str] den String mit der Nummer num aus der [list] 
						zurück. Sollte num nicht übergeben werden, so wird der 
						aktuell aktive String zurückgegeben. Man kann für num auch 
						den Wert [LIST_ITEM_ACTUAL] übergeben um den gleichen 
						Effekt zu erhalten; das Script wird jedoch leichter lesbar.

	LIST_STR_SET		[list],'str',num
						Ersetzt in der [list] den String mit der Nummer num durch den 
						Wert der in 'str' übergeben wurde. Man kann für num auch
						den Wert [LIST_ITEM_ACTUAL] übergeben um den aktuell 
						aktiven String zu ersetzten. Falls num zu klein gesetzt werden 							sollte, wird der erste verfügbare String der [list] ersetzt. Sollte 
						num zu groß gesetzt werden, wird der letzte verfügbare String 
						der [list] ersetzt.

	LIST_STR_FIND [list],'str' {, [boolRes]|[numRes] {, strOp, {numPart, strDelim {, [destList] {, boolParts, strParts, strPDlim}}}}
						Sucht in der [list] den String 'str'. Wenn dieser String 
						gefunden werden kann, wird er der aktuell angezeigte String, 
						und [LIST_ITEM_ACTUAL] wird ebenfalls aktualisiert. Groß- 
						und Kleinschreibung werden bei der Suche nicht 
						unterschieden. Sollte die Suche fehlschlagen, wird der erste 
						verfügbare String der aktuelle.
						
						Falls [boolRes] vom Typ VAR_BOOL übergeben wird, wird TRUE 
						zurückgegeben, wenn der Suchstring gefunden werden konnte und 
						FALSE, wenn es keinen Treffer gab.

						Falls [numRes] vom Typ VAR_NUM übergeben wird, wird die 
						Zeilennummer des ersten Treffers zurückgegeben, wenn der 
						Suchstring gefunden werden konnte und 0, wenn es keinen Treffer 
						gab.

						Wenn strOp leer ist, wird “=“ als Operator verwendet, andere mögliche 
						Operatoren sind “>“, “<>“, “<“, “>=“, “<=“, “>>“ (like) und “<<“ (not like)

						numPart und strDelim beziehen sich auf einen Teilstring, der durch 
						strDelim abgegrenzt werden kann.

						Wenn [destList] angegeben wird, wird das Ergebnis an diese Liste 
						angehängt. [destList] wird NICHT bereinigt. Das Ergebnis wird einfach 
						hinten angehängt. Wenn keine Angabe für [destList] gemacht wird, 
						bildet der jeweils erste Treffer in der Liste das Ergebnis.

						Wenn boolParts=TRUE ist, werden nur die Teile, die in strParts 
						angegeben sind an die Zielliste weitergegeben, wobei diese Teile 
						wiederum mit dem Delimiter strPDelim getrennt werden.

						Beispiel 1: LIST_STR_FIND [aList],‘‘,‘<>‘,4,‘|‘,[dList],TRUE,’1,4’,’,’
						Hierbei wird in [aList] untersucht, ob der vierte durch ein Pipe-Zeichen 
						getrennte Teil nicht leer ist. Aus allen Zeilen, in denen das zutrifft wird 
						dann der erste und vierte Teil der Zeile aus [aList] mittels eines 
						Kommas getrennt zusammengebaut und an [dList] angefügt.

						Beispiel 2: LIST_STR_FIND [aList],‘Test*‘,‘>>‘,4,‘|‘,[dList]
						Alle Zeilen, die in [aList] gefunden werden können, bei denen der vierte 
						Teilstring der Zeile mit dem Wort “Test“ beginnt, werden an [dList] 
						angefügt.

						Beispiel-Datei: document\examples\lists\TestListStrFind.csh

	LIST_STR_LEN		[list],[numLen]{,num}
						Gibt in [numLen] die Länge des Strings der [list] zurück.
						Man kann für num auch den Wert [LIST_ITEM_ACTUAL] übergeben 
						um den aktuell aktiven String zu messen. Falls num zu klein gesetzt							oder zu groß gesetzt werden, wird die Operation abgebrochen

	LIST_STR_COPY		[list],[strRes], numPos, numLen {, num}
						Gibt in [strRes] einen Teil des Strings der [list] zurück. Der Teil startet 
						beim Zeichen numPos und ist numLen (max. 250 Zeichen) lang.
						Man kann für num auch den Wert [LIST_ITEM_ACTUAL] übergeben 
						um den aktuell aktiven String zu kopieren. Falls num zu klein gesetzt							oder zu groß gesetzt werden, wird die Operation abgebrochen.

	LIST_STR_PART		 [list], [strRes|listRes], numPart, strDelim {,num {, boolAddDelimToEndIfMissing}}
						Gibt den numPart-en Teilstring eines Strings der [list] in [strRes] 
						zurück. Die Funktion arbeitet genau wie CALC [aStr] AS PART(…) 
						sie ist jedoch auch auf extrem lange Strings der Liste anwendbar.
						Man kann für num auch den Wert [LIST_ITEM_ACTUAL] übergeben 
						um den aktuell aktiven String zu kopieren. Falls num zu klein gesetzt						oder zu groß gesetzt werden, wird die Operation abgebrochen. Wenn 
						boolAddDelimToEndIfMissing TRUE ist, wird am Ende des 
						Quellstrings ein strDelim angefügt, damit man auch den letzten 
						“Part“ noch auslesen kann.
						Wenn als Ergebnis eine Liste angegeben wird, dann wird die Liste 
						von diesem Befehl zunächst geleert. Das Ergebnis wird dann in der 
						ersten Zeile der Ergebnisliste abgelegt.

	LIST_STR_REPLACE		 [list], str2Find, str2Replace, numPart
						Ersetzt im numPart-en String der Tabelle den Wert str2Find durch 
						str2Replace. Man kann für numPart auch den Wert 
						[LIST_ITEM_ACTUAL] übergeben.

	LIST_STR_CONCAT		 [list], str2Add, numPart {, boolAdd2Front}
						Baut str2Add an den numPart-en String der Tabelle. Wenn 
						boolAdd2Front = TRUE ist, wird str2Add nicht hinten, sondern vorne 
						angebaut. Man kann für numPart auch den Wert 
						[LIST_ITEM_ACTUAL] übergeben.

	LIST_STR_2_BASE64			[list],num{,boolDeCode}
							Codiert oder Decodiert einen List-String nach  oder von BASE64.

	LIST_STR_2_LIST	[list],[listDest], strDelim, numLines {,num{,boolAddDelimToEndIfMissing {,strStringDelim}}}
						Zerlegt einen Strings der [list] und schreibt die Teile in [listDest]. 
						strDelim wird zum Erkennen der Teile verwandt. Wenn numLines > 0 
						ist, werden in [listDest] mindestens numLines zurück gegeben. 
						Sollten die Teile des Quell-Strings nicht ausreichen um numLines in 
						der Zielliste zurück zu geben, werden Leerstings an die Zielliste 
						angehängt.
						Man kann für num auch den Wert [LIST_ITEM_ACTUAL] übergeben 
						um den aktuell aktiven String zu zerlegt. Falls num zu klein gesetzt							oder zu groß gesetzt werden, wird die Operation abgebrochen. Wenn
						boolAddDelimToEndIfMissing TRUE ist wird am Ende des 
						Quellstrings 
						ein strDelim angefügt, damit man auch den letzten “Part“ noch 
						auslesen kann und damit auch die letzte Zeile der Zielliste erzeugt 
						wird.
						Wenn der Parameter strStringDelim Zeichen enthält (z.B. >"<), wird 
						der Feld-Separator strDelim NICHT in Zeichenketten gesucht, die 
						von strStringDelim eingeschlossen sind. 

	LIST_STR_2_LIST_STR	[listSource], [listDest], numLineSource, numLineDest
						Schreibt den numLineSource-ten String der Liste [listSource] in den 
						numLineDest-ten String der Liste [listDest] egal wie lang der String ist.
						numLineSource kann als [LIST_ITEM_ACTUAL] übergeben werden. 
						numLineDest kann als [LIST_ITEM_UNDEFINED] übergeben werden. 
						Wenn numLineSource größer als die maximale Anzahl der Strings in 
						[listSource] ist, dann wird numLineSource auf den String der Liste 
						gestellt.
						Wenn numLineDest größer als die maximale Anzahl der Strings in 
						[listDest] ist, dann wird numLineDest auf den String der Liste gestellt. 
						Wenn numLineDest als [LIST_ITEM_UNDEFINED] übergeben wurde, 
						wird der String an das Ende der Liste angehängt.

	LIST_2_LIST_STR		[list],[listDest], strDelim, num {, boolDoNotAddDelim2End}
						Baut den Inhalt der [list] mit strDelim getrennt zusammen in einen 
						String der [listDest]. Wenn [num]= [LIST_ITEM_UNDEFINED] ist, wird 
						an [listDest] eine Zeile angehängt, anderenfalls wird genau die 
						angegebene Zeile gefüllt.
						Wenn der optionale Parameter boolDoNotAddDelim2End TRUE ist, 
						wird am Ende des Zielstrings KEIN strDelim angefügt.

	LIST_2_LIST			[listSource],[listDest], boolClearDestBefore, numStartAtSourceLine
						Kopiert den Inhalt von [listSource] in die [listDest]. Wenn 
						boolClearDestBefore TRUE ist, wird [listDest] vorher gesäubert, 
						anderenfalls werden die String von [listSource] angehängt. Gestartet 
						wird mit dem numStartAtSourceLine -String der Liste [listSource]

	LIST_2_LINKS		[listSource],[listDest] {,[listEmoticons]}
						Es werden die Zeilen der [listSource] daraufhin untersucht, ob sich 							darin eine URL (html://) enthalten ist, und ersetzt den Link durch den 
						entsprechenden HTML-Verweis. Das gleiche gilt für Links des Typs 
						"erp://" (diese werden im Chat-Tool / SendManager.csh verwendet).
						Wenn die [listEmoticons] übergeben wird, muss diese folgenden 
						Zeilenaufbau haben:
						"happy01×:-)×;-)¦emoicon_happy_01.gif"	Hier wird "(happy01)" und 
													":-)" und ";-)" durch das Bild 
													"emoicon_happy_01.gif" 
													ersetzt.
						Trennzeichen "¦" = ASCII-0166 und "×" = ASCII-0215, diese Zeichen 
						kommen in "normalen" Emoiticons nicht vor.
						Das jeweils erste Wort der Zeile wird IMMER in runden Klammern 
						gesucht  "(happy01)".
						Wenn der Name einer Bilddatei eines Emoticons ohne Pfadangabe ist, 
						wird der Pictures-Pfad als Vorgabe verwendet. Es findet keine 
						Überprüfung statt, ob die Bilddatei des Emoticon vorhanden ist oder 
						nicht.
						Darüberhinaus wird versucht Telefonnummern innerhalb des Textes zu 
						erkennen und ebenfalls mit einem Link vom Typ "call://nummer" zu 
						versehen.
						Jede Zeile, die untersucht wurde, wird an die [listDest]  angefügt.
						[listDest] wird nicht geleert beim Start der Routine.
						Dieser Befehl ist insbesondere auf die Verwendung im Chat-Tool / 
						SendManager.csh abgestimmt. Dort dient er zum extrem schnellen 
						Aufbau der Chat-Historie.

	LIST_CLR			[list]	Löscht alle Strings aus der [list].

	LIST_APPEND		[list],'str'  {, [boolRes] {, boolOnlyIfNotFound, {, strOp {, numPart, strDelim}}}}	
						Fügt an die [list] den 'str' an.
						Wenn [boolRes] übergeben wird, wird dessen Wert TRUE, wenn der 
						String angefügt wurde und FALSE, wenn dies nicht der Fall war.
						Wenn boolOnlyIfNotFound TRUE ist, wird ‘str‘ nur angefügt, wenn 
						dieser selbst nicht in den bereits vorhandenen Zeilen der Liste 
						gefunden werden kann. Der Vergleichsoperator für die Suchfunktion 
						kann mittels strOp angegeben werden. Es kann sich um einen der 
						folgenden Werte handeln: ‘=‘, ‘>=‘, ‘<=‘, ‘<>‘, ‘>‘, ‘<‘, ‘>>‘ (like) oder ‘<<‘ 
						(not like). Wenn numPart und strDelim zusätzlich auch noch übergeben 
						werden, wird die Suche lediglich im numParten, durch strDelim 
						separierten, Teilsting der Listen-Zeile ausgeführt.

	LIST_DELETE		[list], num {, boolToEnd}
						Löscht aus der [list] den String mit der Nummer num. Man 
						kann für num auch den Wert [LIST_ITEM_ACTUAL] 
						übergeben um den aktuell aktiven String zu löschen. Falls 
						num zu klein gesetzt werden sollte, wird der erste verfügbare 
						String der [list] gelöscht. Sollte num zu groß gesetzt werden, 
						wird der letzte verfügbare String der [list] gelöscht.
						Falls booToEnd TRUE ist, wird die gesamte Liste von (einschießlich) 
						num an gelöscht.

	LIST_DISPLAY		[list]{,'head''{,options{,[bool]}}}
						Zeigt die [list] mit der Überschrift 'head' unter 
						Berücksichtigung der options. Falls der User eine Bestätigung 
						für zu den angezeigten Strings abgeben muß, kann das 
						Ergebnis in [bool] abgelesen werden. Sollte kein 'head' 
						übergeben werden, so wird die Überschrift 'List-Editor' 
						erscheinen. Die options werden als numerischer Wert 
						übergeben und können sich folgendermaßen, additiv 
						zusammensetzten:
						[TEXT_DISP_OPT_NONE] 	Keine Option.
						[TEXT_DISP_OPT_LOAD_ICON]	Zeigt den Knopf zum 
												Laden eines Textes.
						[TEXT_DISP_OPT_SAVE_ICON]	Zeigt den Knopf zum 
												Textspeichern.
						[TEXT_DISP_OPT_SAVE_EXIT_ICON]	Zeigt den Knopf zum
												Speichern und Ver-
												lassen des Textes.
						[TEXT_DISP_OPT_CLEAR_ICON]	Zeigt den Knopf zum
												Säubern des Text-
												bzw. Eingabefeldes.
						[TEXT_DISP_OPT_CLEAR_ICON]	Zeigt den Knopf für
												die Hilfe (wenn das
												Hilfe-System richtig 
												Initialisiert wurde.)
						[TEXT_DISP_OPT_MODIFY]	Läßt ein Editieren 
												des Textes zu.
						[TEXT_DISP_OPT_SHOW_ONLY]	Setzt alle vorherigen
												Optionen außer 
												Kraft, und zeigt
												lediglich den Text
												zur Kenntnisnahme,
												ohne daß eine
												Änderung möglich ist
						[TEXT_DISP_OPT_SHOW_YES_NO]	Wie ...SHOW_ONLY
												der User kann jedoch 
												OK bzw. NEIN als 
												Antwort auf den Text
												geben.
						[TEXT_DISP_OPT_DEFAULT]	Besteht aus 
												..LOAD.. ..SAVE..
												..CLEAR.. ..HELP..
												..SAVE_EXIT.. und
												..MODIFY

						Über die Variablen	[TEXT_WINDOW_TOP], 
											[TEXT_WINDOW_LEFT],
											[TEXT_WINDOW_WIDTH] und
											[TEXT_WINDOW_HEIGHT] kann die 						Größe des Textfensters beieinflußt werden. Diese Werte sind 
						nach dem gleichen Muster zu berechnen wie die Felder in 
						einer Maske. (Siehe SetDoc.CSH).

	LIST_VAL_BY_NAME	[res], [namelist], [valuelist], [value], [num], 'name'
						Gibt in VAR_STR [value] den String aus der VAR_LIST 
						[valuelist] zurück, der zu dem Item mit dem Inhalt 
						'name' in der VAR_LIST [namelist] paßt. Dabei müssen 
						in [namelist] und [valuelist] die gleiche Anzahl an Items 
						übergeben werden. Die Funktion ordnet dabei jedem Item 
						in [namelist] das in der Reihenfolge entsprechende Item 
						der [valuelist] zu. Sollte ein Fehler auftreten, wie z.B., 
						daß 'name' nicht der [namelist] existiert, so wird in 
						VAR_BOOL [res] FALSE zurückgegeben, anderenfalls wird 
						[res] TRUE. In [num] wird außerdem zurückgegeben 
						welches Item den gesuchten String enthielt.

	LIST_FILE_READ		[list],[result],'filename' {, boolLeaveUTF8 {, boolLoadInOne {, 
					boolCaseSensitiveFilename }}}
						Erlaubt es in die Variable [list] vom Typ VAR_LIST den Inhalt der
						Textdatei 'filename' einzulesen. Wenn die Operation erfolgreich ist,
						wird die Variable [result] vom Typ VAR_BOOL TRUE.
						Wenn eine Datei vom Format UTF8 eingelesen wird, werden die 
						Strings der Liste automatisch nach ANSI konvertiert - es sei denn, 
						dass boolLeaveUTF8 TRUE ist.
						Wenn boolLoadInOne TRUE ist, wird die Datei direkt in den Speicher 
						gelesen (nicht zeilenweise), der Parameter boolLeaveUTF8 wird 
						dann NICHT beachtet.
						boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) Der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?

	LIST_FILE_WRITE	[list],[result],'filename' {, boolSaveAsUTF8 {, boolSaveInOne {, boolNoUTF8LeadChars {, 
				boolCaseSensitiveFilename }}}}
						Erlaubt es den Inhalt Variable [list] vom Typ VAR_LIST in die
						Textdatei 'filename' zu schreiben. Wenn die Operation erfolgreich
						ist, wird die Variable [result] vom Typ VAR_BOOL TRUE. 
						Wenn boolSaveAsUTF8 = TRUE ist, wird jede Zeile der Liste im
						UTF8-Format in die Datei geschrieben.
						Wenn boolSaveInOne = TRUE ist, wird die Datei aus dem 
						Speicher in einem Stück gespeichert (nicht zeilenweise). der 
						Parameter boolSaveAsUTF8 wird dann NICHT beachtet.
						Wenn boolNoUTF8LeadChars TRUE ist, wird im Falle einer 
						UTF8-Datei die Dateikennung am Dateianfang weggelassen.
						boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) Der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?

	CSV_FILE_READ		[list], [res], 'filename' {, boolisUTF8 {, strReplaceFieldDelim {, strReplaceCRLF {, 
					strReplaceDoubleQuote {, boolEscapeStrings {, boolCaseSensitiveFilename {,
					strTableName}}}}}}}
						Liest in die Liste [list] eine mit 'filename' erreichbare CSV-Datei ein. 
						Wenn boolisUTF8 TRUE ist, dann werden alle eingelesenen Daten 
						von UTF8 nach ANSI konvertiert. Default = FALSE
						Mit strReplaceFieldDelim kann man den Feld-Delimiter (also das 
						Semikolon) durch eine andere Zeichensequenz ersetzen. Das dient 
						dazu, dass Semikolons, die in Zeichenketten auftreten, also Inhalt 
						der Daten (und nicht Feldtrenner) sind unterschieden werden 
						können. Default = ;
						Mit strReplaceCRLF kann man im Inhalt vorkommenden 
						Zeilenumbrüche ersetzen.Default = CRLF
						Mit strReplaceDoubleQuote kann man im Inhalt vorkommende 
						doppelte Anführungszeichen ““ ersetzen. Default = “
						Wenn boolEscapeStrings TRUE ist, werden die eingelesenen 
						Zeichenketten direkt so behandelt, dass man sie per SQL 
						störungsfrei speichern kann. Default = FALSE
						Wenn boolCaseSensitiveFilename TRUE ist, wird der Dateiname 
						nicht in lowercase umgewandelt. Default = FALSE
						Wenn strTableName den Namen einer existierenden Tabelle der 
						Datenbank beinhaltet und Spaltenbezeichner der Kopfzeile der 
						CSV-Datei mit FeldNamen der Tabelle übereinstimmen, werden die 
						CSV-Inhalte passend zum Datentyp des korrelierenden Feldes 
						eingefügt. In der Dokumentation im Verzeichnis „examples“ befindet 
						sich ein Ordner mit dem Namen „csv“ in dem sich ein Beispiel 
						befindet.

	MASK_NEXT_FOCUS		[mask], 'AfterFieldName'
						Setzt den Focus auf das Feld das dem Feld 'AfterFieldName' folgt.

	MASK_PROCESS		[mask]	Zeigt die [mask] und erlaubt die Dateneingabe. Wenn auf 
						einen der sichtbaren Knöpfe der Maske gedrückt wird, kann 
						eine im Script definierte Procedure angesteuert werden. 
						Folgende Untervariablen stehen für diese Hooks zur 
						Verfügung:
						[mask!MASK_HOOK_PRE_EDIT]	Bevor ein Feld "be-
												treten wird.
						[mask!MASK_HOOK_POST_EDIT]	Nachdem ein Feld
												der Maske verlas-
												sen wurde. Bei 
												Listen-Feldern nur 
												nach Änderungen.
						[mask!MASK_HOOK_PRE_SEARCH]	Nachdem der Such-
												Knopf gedrückt 
												wurde - bevor
												gesucht wurde
												(auch bei Spinner-
												Betätigung).
						[mask!MASK_HOOK_SEARCH]	Nachdem der Such-
												Knopf gedrückt 
												wurde und gesucht
												wurde.
						[mask!MASK_HOOK_SPINNER]	Nachdem einer der 
												Knöpfe zum 
												Wechseln der 
												Datensätze 
												innerhalb der Maske 
												gedrückt wurde
						[mask!MASK_HOOK_INFO]	Nachdem der Info-
												Knopf gedrückt 
												wurde
						[mask!MASK_HOOK_DATE]	Nachdem der
											Kalender aufgerufen wurde. In der Variable
											[mask!MASK_DATE_RESULT] kann man
											das eingegebene Datum ablesen.
						[mask!MASK_HOOK_PRE_SAVE]	Nachdem der 
												Speicher-Knopf 
												gedrückt wurde aber
												bevor gespeichert 
												wurde.
						[mask!MASK_HOOK_POST_SAVE]	Nachdem der 
												Speicher-Knopf 
												gedrückt wurde und 
												bereits gespeichert 
												wurde.
						[mask!MASK_HOOK_DELETE]	Nachdem der 
												Lösch-Knopf 
												gedrückt wurde.
								Wenn die MASK_ACTION nach diesem Hook den 
								Wert 11111 enthält, wird das Query "refreshed", 
								wodurch die gelöschte(n) Zeile(n) sofort sichtbar 
								werden, mit der Löschroutine von CARA wird danach 
								nicht fortgefahren (wie bei jedem Wert der ungleich 
								Null ist). Ausnahme: Enthält die MASK_ACTION den 
								Wert 22222 wird mit der Löschroutine von CARA 
								weitergemacht, ohne jedoch die Frage zu stellen, ob 
								die Daten wirklich gelöscht werden sollen.
						[mask!MASK_HOOK_POST_DELETE]	Nachdem der 
												gelöscht wurde.
								Wenn die MASK_ACTION nach diesem Hook den 
								Wert 11111 enthält, wird das Query "refreshed".
						[mask!MASK_HOOK_PRE_CLEAR]	Nachdem der 
												Clear-Knopf 
												gedrückt wurde aber
												bevor die Maske 
												gesäubert wird.
						[mask!MASK_HOOK_POST_CLEAR]	Nachdem der 
												Clear-Knopf 
												gedrückt wurde aber
												nachdem die Maske 
												gesäubert wird.
						[mask!MASK_HOOK_EXIT]	Nachdem der 
												Exit-Knopf 
												gedrückt wurde aber
												bevor die Maske 
												verlassen wurde.
						[mask!MASK_HOOK_BUTTON]	Nachdem einer der 
												selbstdefinierten 
												Knöpfe gedrückt 
												wurde.
						[mask!MASK_HOOK_PRINT]	Nachdem der 
												Print-Knopf 
												gedrückt wurde.
						[mask!MASK_HOOK_SEND]	Nachdem der 
												Send-Knopf 
												gedrückt wurde.
						[mask!MASK_HOOK_SHOW]	Bevor die Maske
												gezeigt wird.
						[mask!MASK_HOOK_MODUS]	Wenn in der Modus-
												liste in der Masken-
												Symbol-Leiste eine 
												andere Auswahl 
												getroffen wurde.
						[mask!MASK_HOOK_FOCUS_GET]	Wenn eine Maske 
												den Focus erhält.
						[mask!MASK_HOOK_FOCUS_LET]	Wenn eine Maske 
												den Focus verliert.

						[mask!MASK_HOOK_IS_READY]	Wenn die Maske 
												fertig für eine 
												Eingabe ist. Jedes 
												Mal, wenn Sie fertig 
												vom Betriebssystem 
												gezeichnet wurde.

						[mask!MASK_HOOK_HELP]	Wenn in der Maske 
												der Hilfeknopf 
												betätigt wurde.
 
						[mask!MASK_HOOK_KEY]	Wenn in der Maske 
										eine Taste betätigt wurde. In diesem Hook 
										kann man die Variablen 
										[mask!MASK_ACT_KEY] und 
										[mask!MASK_ACT_STATE] befragen (s.u.)
										Wenn in einer Maske der
										[mask!MASK_HOOK_KEY] angemeldet
										wurde, kann unter Umständen die
										Tastatureingabe etwas zu langsam werden,
										da dieser Hook bei jedem Tastendruck
										angesteuert wird. Will man aber, das dies nur
										bei ganz bestimmten Tasten geschieht, füllt
										man die Variable 
										[mask!MASK_HOT_KEY_LIST], die vom Typ
										VAR_STR ist, auf folgende Weise:
										Key1@State1|Key2@State2|...|KeyN|StateN
										CALC [mask!MASK_HOT_KEY_LIST] AS '107@1|13@1'
										Dadurch wird der Tastatur-Hook nur
										angesteuert, wenn die Taste 107 (NUM+)
										gedrückt wurde - ohne daß gleichzeitig ALT,
										SHIFT oder STRG gedrückt wurde und wenn
										die Taste 13 (ENTER) gedrückt wurde.
										Um die Tasten-Codes zu erhalten, kann man
										im Werkzeugkasten den Punkt "Key-Code
										anzeigen" ausführen.
						[mask!MASK_HOOK_CATCH]	Dieser Hook wird nur
										angesteuert, wenn eine der Masken-Variablen
										 [mask!MASK_CATCH_DEF1] oder
										[mask!MASK_CATCH_DEF2] sinnvolle Werte
										enthalten. Diese Variablen  müssen mit einer
										speziellen Syntax gefüllt werden. Beispiel: 
CALC [mask!MASK_CATCH_DEF1] AS '51@2@Scanner@Eingabe@XXXXXXXXXXXXXXXXXXXXXXXXX' 
										Dabei ist der erste Wert ein Key-Code (z.B.
										"51" = §) und der zweite ein Key-State (z.B. "2" =
										SHIFT). Wenn die Taste mit dem Key-Code
										gedrückt wird und der entsprechende Key-State
										vorliegt (ALT, SHIFT, CTRL oder keiner), dann
										öffnet sich ein String-Eingabefenster dessen Head
										der dritte Parameter ist (z.B. "Scanner") und
										dessen Prompt der vierte Parameter ist (z.B.
										"Eingabe"). Die Eingabemaske ist der fünfte
										Parameter (z.B. "XXXXXXXXXXXXXXXXXXXXX").
										In diesem Eingabefenster werden alle weiteren
										Eingaben gesammelt bis ENTER eingegeben wird.
										Anschließend stehen die Eingaben in
										[mask!MASK_CATCH_VAL1] oder
										[mask!MASK_CATCH_VAL2] zur Verfügung.
										Wenn [mask!MASK_HOOK_CATCH] auf eine
										PROCEDURE verweist, wird diese dann
										angesteuert. Innerhalb des Hooks ist immer nur
										entweder [mask!MASK_CATCH_VAL1] oder
										[mask!MASK_CATCH_VAL2] mit Werten gefüllt,
										dadurch kann man unterscheiden von welcher
										...CATCH_DEF... die Eingabe stammt.
										Diese Technik dient dazu Barcode-Scanner-
										Eingaben oder Kartenleser-Eingaben abzufangen,
										egal in welchem Dialogelement der User gerade
										steht.
						[mask!MASK_HOOK_REG_TAB]	Wenn in der Maske 
										ein Register-Tab betätigt wurde. In diesem 
										Hook kann man die Variablen 
										[mask!MASK_ACT_REG_ID] (als ID des 
										gesamten Registers) und 
										[mask!MASK_ACT_REG_TAB] (als 
										Name des betroffenen Tabs) befragen.

						[mask!MASK_HOOK_TREE]	Wenn in der Maske 
										ein TREE (Daten-Baum) Feld existiert und auf
										 eine der Baumzeilen ein Doppelklick ausgeübt
										 wurde. In diesem Hook kann man die Variablen 
										[mask!MASK_ACT_FIELD_ID] (als ID des 
										gesamten Trees) und 
										[mask!MASK_ACT_FIELD_NAME] (als 
										ID der betroffenen Baumzeile) befragen.

						[mask!MASK_HOOK_TREE_CHANGE]	Wenn in der Maske 
										ein TREE (Daten-Baum) Feld existiert und von
										 einer Baumzeilen auf eine andere gewechselt
										 wurde. In diesem Hook kann man die Variablen 
										[mask!MASK_ACT_FIELD_ID] (als ID des 
										gesamten Trees) und 
										[mask!MASK_ACT_FIELD_NAME] (als 
										ID der betroffenen Baumzeile) befragen.

						[mask!MASK_HOOK_GRID_POST_EDIT]	Wenn ein GRID
										editierbar ist und ein Feld geändert wurde.
										Innerhalb dieses Hooks stehen folgende Variablen
										zur Verfügung:
										[mask!MASK_GRID_EDIT_VALUE]
										[mask!MASK_GRID_EDIT_FIELD]
										[mask!MASK_GRID_EDIT_REC_ID]. 
										(wie [browser!BROWSER_HOOK_POST_EDIT])

						[mask!MASK_HOOK_GRID_OK]		Wenn in einem
										GRID ein Datensatz gewählt wurde.

						[mask!MASK_HOOK_GRID_PRINT]		Wenn in einem GRID 
										mittels der rechten Maustaste im Kontextmenü 
										"Drucken"  gewählt wurde.

						[mask!MASK_HOOK_GRID_ENTER]		Wenn ein GRID
										den Fokus erhält.

						[mask!MASK_HOOK_GRID_EXIT]		Wenn ein GRID
										den Fokus verliert.

						[mask!MASK_HOOK_GRID_DELETE]		Wenn in einem
										GRID ein Datensatz gelöscht werden soll. (Wie
										[MASK_HOOK_DELETE])

						[mask!MASK_HOOK_GRID_POST_DELETE]	Nachdem in
										einem GRID ein Datensatz gelöscht wurde. (Wie
										[MASK_HOOK_POST_DELETE])

						[mask!MASK_HOOK_GRID_USER]		Wenn in einem
										GRID eine User-Aktion ausgelöst werden soll.

						[mask!MASK_HOOK_GRID_INSERT]		Wenn in einem
										GRID ein Datensatz hinzu gefügt werden soll.

						[mask!MASK_HOOK_GRID_MARK]		Wenn in einem
										GRID eine Zeile markiert/demarkiert wird. Wenn
										die [Mask!MASK_ACTION] ungleich 0 ist, wird die
										User-Action wieder zurückgenommen.

						[mask!MASK_HOOK_GRID_MOUSE_OVER]	Wenn in gleichzeitig 
										die Variable des [gridQuerys!VIEW_MOUSE_TIME]  
										größer als 0 ist, wird die angegebene Hook-
										Procedure immer dann angestoßen, wenn die Maus 
										die angegebene Zeit im Millisekunden unbewegt über 
										dem Grid verweilt.
s
						Innerhalb der GRID-Hooks stehen folgende Variablen zur
						Verfügung:
						[mask!MASK_ACT_GRID_ID] die ID des aktuellen GRIDs
						und der [Mask!MASK_ACT_GRID_NAME] der Name des
						aktuellen GRIDs.

						Wenn innerhalb einer Hook-Procedure die Untervariable
						[mask!MASK_ACTION] auf einen Wert der ungleich 0
						gesetzt wird, so wird die angeforderte Aktion nicht von CARA 
						fortgesetzt und der User muß erneut eine Aktion auslösen.

						[mask!MASK_HOOK_DOCMGR_EXIT]	Wenn der
										Dokumentenmanager aufgerufen wurde, oder eine
										Maske an einen der Befehle DOCUMENTS,
										DOCUMENT_DIRECT oder DOCUMENT_CREATE
										übergeben wurde.

						[mask!MASK_HOOK_NOTEMGR_EXIT]	Wenn der
										Notizmanager aufgerufen wurde.

						[mask!MASK_HOOK_MANDANT]	Wenn der Mandant
										gewechselt wurde.

							[mask!MASK_HOOK_DROP]		Wenn Dateien aus dem 
											Explorer auf eine Maske gezogen werden. In diesem 
											Falle sind die Dateinamen in der Liste 
										[mask!MASK_DROP_LIST]  zu finden.

						[mask!MASK_HOOK_TIMER]	Wenn der Masken-Timer feuert.
										Siehe Befehl MASK_TIMER. Der Timer wird
										während der Hook-Prozedur ausgeschaltet und zählt
										nach der Ausführung der Hook-Prozedur wieder von
										0 an aufwärts.

						[mask!MASK_HOOK_PRE_NAVIGATE]
										Bevor eine Seite in einem NAVIGATE-Element in 
										einer Maske angezeigt wird.

						[mask!MASK_HOOK_POST_NAVIGATE]	
										Nachdem eine Seite in einem NAVIGATE-Element in 
										einer Maske angezeigt wurde.

						Folgende Untervariablen für Masken existieren:
						[mask!MASK_ID] 		ID der Maske
						[mask!MASK_FLAG] 		Flagge mit allen 
										Optionen, die im SetDoc gesetzt wurden. Wenn diese 
										oder eine andere Maskenvaribale verändert wird, 
										muß man die Veränderungen mit dem Befehl 
										MASK_UPDATE an die CARA-Engine melden. 
										Folgende Werte können durch Addition gesetzt 
										werden:
						[MASK_FLAG_MODAL]		Maske ist modal.
						[MASK_FLAG_HIDDEN]		Maske ist unsichtbar bzw. 
													sehr klein und kann nur 
													programmgesteuert genutzt 
													und geschlossen werden.
						[MASK_FLAG_SHRINK]		Die Maske verkürzt oder
													verlängert sich
													automatisch, wenn das
													jeweils "unterste"
													Dialogelement sichbar
													bzw. unsichtbar gestellt
													wird.
						[MASK_FLAG_PRINT_MENU]		Die Maske hat ein 
													Drucker-PopUp-Menü.
 						[MASK_FLAG_ICON_MODI]		Maske hat eine Modus-
													box. Diese muß aber 
													Zeilen enthalten, die in 
													der Maske definiert 
													wurden. Während der 
													Laufzeit kann amn auch 
													die Masken-Variable 
													[mask!MASK_MODUS_LIST] 
													verändern. Wenn dann 
													in der Modusliste keine 
													Zeilen mehr sind, wird 
													diese Flagge 
													automatisch auf FALSE 
													gesetzt. Umgekehrt gilt 
													das Gleiche: Wenn die 
													Modusliste Zeilen 
													enthält, wird diese 
													Flagge automatisch auf 
													TRUE gesetzt.
						[MASK_FLAG_ICON_NOTES]		Notizmanager Icon 
													sichtbar.
						[MASK_FLAG_ICON_DOC_MGR]	Dokumente-Manager 
													Icon sichtbar.
						[MASK_FLAG_ICON_SEARCH] 	Such-Icon sichtbar.
						[MASK_FLAG_ICON_SAVE]		Speicher-Icon sichtbar.
						[MASK_FLAG_ICON_DELETE]	Lösch-Icon sichtbar.
						[MASK_FLAG_ICON_CLEAR]		Maske säubern-Icon
													sichtbar.
						[MASK_FLAG_ICON_INFO]		Info-Icon sichtbar
						[MASK_FLAG_ICON_PRINT]		Druck-Icon sichtbar.
						[MASK_FLAG_ICON_CALENDAR]	Kalender-Icon siichtbar.
						[MASK_FLAG_ICON_SPINNER]	Spinner-Icons sichtbar.
						[MASK_FLAG_ICON_CALCULATOR]Rechner-Icon sichtbar.
						[MASK_FLAG_ICON_HELP]		Hilfe-Icon sichtbar. (Nur
													möglich, wenn das
													Hilfe-System richtig  
													Initialisiert wurde.)
						[MASK_FLAG_ICON_DOOR]		Exit-Icon sichtbar.
						[MASK_FLAG_PANEL]		Soll das Icon-Panel 
													 (wenn keine Icons mehr 
													sichtbar sind) gezeigt 
													werde?

						[mask!MASK_ACT_MODUS]	Welches Item ist in der 
													Masken-Liste zur Zeit
													Ausgewählt ? Dieser 
													Wert kann auch 
													verändert werden. Nach 
													einem MASK_UPDATE 
													wird dann eine andere 
													Textzeile im Modus 
													angezeigt.
						[mask!MASK_MODUS_LIST]	Beinhaltet die Liste der 
													möglichen Modi. Diese 
													kann wie alle 
													VAR_LIST Variablen 
													bearbeitet werden. 
													Anstelle von 
													LIST_ITEM_SET sollte 
													jedoch die 
													Maskenvariable 
													MASK_ACT_MODUS 
													verändert werden.

						[mask!LAST_CHOICE] 		Wenn über einen
													Knopf ein Choicer 
													aktiviert wurde, und der 
													User einen der 
													angebotenen Choicer-
													Punkte gewählt hat, so 
													wird dessen ID in dieser 
													Variable ablesbar. Der 
													Aufbau von Choicern 
													wird in der Datei 
													Choicer.CSH 
													beschrieben.
						[mask!MASK_QUERY_ID] 		Die im SetDoc 
													hinterlegte Standard-
													Query-Nummer. 
						[mask!MASK_QUERY_MSG] 		Frei definierbare Nachricht für den 	
													Fall, dass keine Daten gefunden 
													wurden. 
						[mask!MASK_QUERY_FLAG]	Die Optionen des 
													Masken-Standard-
													Querys. Siehe auch:
													[browser!VIEW_FLAG]
						[mask!MASK_BASE] 		Der im SetDoc 
													hinterlegte Daten-
													Tabellen-Name der 
													Maske.
						[mask!VIEW_ID] 				Die im SetDoc 
													hinterlegte Standard-
													View-Nummer. 
						[mask!VIEW_BASE] 			Der im SetDoc 
													hinterlegte Daten-
													Tabellen-Name des 
													Views.
						[mask!MASK_RECORD_ID] 		Die Datensatz-ID des
													Datensatzes, der aktuell 
													in der Maske angezeigt 
													wird.
						[mask!MASK_RECORD_ID_DESCR]	Die Feldbeschreibung 
													der Datensatz-ID der 
													Daten, die in die Maske 
													geladen wurden.
						[mask!MASK_HEAD_LINE] 		Die Übeschrift der 
													Maske.
						[mask!MASK_RECORD_FLAG]	Die Datensatz-Flagge
													des Datensatzes, der 
													aktuell in der Maske 
													angezeigt wird.
						[mask!MASK_EVENT_FLAG]	Die Datensatz-Ereignis-
													Flagge des Datensatzes 														der aktuell in der Maske 
													angezeigt wird.
						[mask!Feldname]				Alle Felder der Maske,  
													dabei werden alle 
													Felder, zu denen ein 
													Datenbank-Feldname
													angegeben wurde, mit 														diesem Namen 
													aufgeführt, alle anderen
													mit der Feld-ID des 
													SetDocs.
						[mask!MASK_IS_MODIFIED]		Wurde ein Feld der Maske 
													geändert?
													Wenn man in einem 
													MASK_HOOK_EXIT diese 
													Variable auf FALSE setzt, wird
													 die Engine NICHT 
													nachfragen, ob eventuell noch 
													gespeichert werden sollte?
						[mask!MASK_IS_READONLY]		Soll bzw. wird die Maske im 
													“Nur-Lese”-Modus verwendet?
						[mask!MASK_QUERY_REFRESH]	Normalerweise ist diese
													Variable TRUE, woduch 
													in Masken-Querys im 
													Hintergrund upgedated 
													werden, wenn Inserts 
													oder Updates 
													ausgeführt werden. Der 
													User hat dadurch stets 
													seine Eingaben sofort 
													sichtbar. Wenn dieses 
													Verhalten unterbunden 
													werden soll, muß diese 
													Variable FALSE gesetzt 
													werden.

						Darüber hinaus kann man in Hook-Proceduren 
						[mask!MASK_HOOK_MODUS]	Wenn der Modus in der 
													Masken-Modus-Liste 
													Geändert wurde.

						[mask!MASK_HOOK_POST_EDIT],
						[mask!MASK_HOOK_PRE_EDIT]	und 
						[mask!MASK_HOOK_BUTTON] 	der Maske noch 
													folgende Untervariablen 
													finden:
						[mask!MASK_ACT_FIELD_ID]		Die ID des Feldes von 
													dem aus in die Hook-
													Procedure verzweigt 
													wurde.
						[mask!MASK_ACT_FIELD_NAME]	Der Name des Feldes 
													von dem aus in die 
													Hook-Procedure 
													verzweigt wurde. Bei
													Feldern, die ohne 
													Datenbank-Feldname 
													ausgestattet sind, 
													werden darin ebenfalls 
													die Feld-ID's abgelegt.
						[mask!MASK_ACT_FIELD_MODIFIED]	Dieser Wert ist BOOL 
													und gibt an, ob das Feld
													von dem aus in die 
													Hook-Procedure 
													verzweigt wurde vom 
													User verändert wurde.
						[mask!MASK_ACT_KEY]		Nummerischer Wert der 
													die letzte gedrückte 
													Taste reflektiert.
						[mask!MASK_ACT_STATE]		Nummerischer Wert der 
													den Status der letzten 
													gedrückten Taste 
													reflektiert.
													1=Normal
													2=Shift
													3=Ctrl/Strg
													4=Alt
						[mask!MASK_ACT_PRINT_MODE]	Nummerischer Wert der 
											die letzte vom Benutzer gewünschte 
											Druckausgabe-Form reflektiert. Folgende 
											Werte sind möglich : 
									          	[PRINT_OUT_DEFAULT] Der Benutzer
											 hat die linke Maustaste 	bzw. [Strg P]
											 gedrückt.
											[PRINT_OUT_DIRECT] Der Benutzer
											 hat mit der rechten Maustaste das
											 Drucker-PopUp-Menü aufgerufen und
											 Direkten-Druck gewählt oder [Alt P]
											 gedrückt.
											[PRINT_OUT_DIRECT_SETUP] Der
											 Benutzer hat mit der rechten Maustaste
											 das Drucker-PopUp-Menü aufgerufen
											 und Vorschau gewählt oder [Alt V]
											 gedrückt.
											[PRINT_OUT_PREVIEW] Der Benutzer
											 hat mit der rechten Maustaste das
											 Drucker-PopUp-Menü aufgerufen und
											 Direkten-Druck mit Setup gewählt oder
											 [Alt S] gedrückt.

						[mask!MASK_CHANGES_PROTOCOL]	Boolean-Wert. Wenn dieser
											Wert TRUE ist, werden bei einem Update alle
											Änderungen mit  Feldnamen und deren Inhalte
											mit Datum, Uhrzeit und Benutzer in der Tabelle
											“changes” protokolliert. Mit ALT+F12 kann
											man diese Historie pro Datensatz sichten. Die
											Tabellendefinition befindet sich in der
											Dokumentation der CARA-Engine im
											Verzeichnis SQL/DDF. 

						[mask!MASK_ACT_URL]
											Hält die letzte angesteuerte URL (egal in 
											welchem NAVIGATE-Element der Maske).
						[mask!MASK_ACT_URL_CANCELLED]
											Wurde die Navigation im PRE_NAVIGATE-
											Hook abgebrochen?
						[mask!MASK_SEARCH_VALUE]
											Inhalt des letzten Suchstrings.
						[mask!QUERY_LOCKED_COLS]
											Legt die Anzahl der links im Such-Browser 
											sichtbaren und fixierten Spalten fest.
						[mask!QUERY_ROW_HEIGHT]
											Legt die Zeilenhöhe des Such-Browsers fest.

	MASK_COORD_GET 		[mask],[numX],[numY],[numW],[numH]
			Holt die Werte Left, Top, Width und Height der Maske in die übergebenen
Variablen.

	MASK_COORD_SET 		[mask],numX,numY,numW,numH
			Setzt die Werte Left, Top, Width und Height der Maske mit den übergebenen
Variablen.

	MASK_COMMAND		[mask],num1{,num2{,num3{,strFieldname}}}
						Führt das Ereignis num1 in der [mask] aus. num1 kann
						folgende Werte annehmen:
						[MASK_COMMAND_DATE]		Kalender	(Shift F3)
						[MASK_COMMAND_CLEAR]		"Reinigen"	(Shift F8)
						[MASK_COMMAND_NOTES]		Notizen		(Shift F6)
													num3 kann hier die ID der
													Notiz sein, direkt gezeigt
													werden soll
						[MASK_COMMAND_DOC_MGR]	Dokumente	(Alt F6)
						[MASK_COMMAND_SPINNER]	Datensatz wechseln
													num3 kann hier
													folgende Werte
													annehmen:
													[FIRST_REC]
													[LAST_REC]
													[NEXT_REC]
													[PREV_REC]

						[MASK_COMMAND_EXIT]	Verlassen (ESC)
												num2 kann hier auch
												folgenden Wert
												annehmen:
												[MASK_OPT_EXIT_ALL_HOOKS]
												dadurch wird die Maske 
												geschlossen, egal 
												welche "Hooks" noch 
												offen sind.
												Die offenen "Hooks" 
												werden nicht mehr 
												ausgeführt.

						[MASK_COMMAND_SEARCH]		Suchen 	(F7)
						[MASK_COMMAND_SEARCH_FULLTEXT]
													Volltext-Suche (Strg+T)
													strFieldname gibt an in 
													welchem Feld die Suchinfo 
													steht
						[MASK_COMMAND_SAVE]		Speichern (F2)
						[MASK_COMMAND_INFO]		Info-Choicer (F5)
						[MASK_COMMAND_DELETE]		Löschen	(F8)
						[MASK_COMMAND_PRINT]		Drucken	(Strg P)
						[MASK_COMMAND_MODI]		Modus wechseln (F6)
						[MASK_COMMAND_SEND]		Senden

						Mit einem Wert in num2 kann man steuern, welcher Hook 
						nach dem Ausführen des Ereignisses nicht ausgeführt werden 
						soll. num2 ist wie eine Option-Flag aufgebaut, d.h. durch 
						Addition mehrerer Werte kann man das Ausführen mehrerer 
						Hooks vermeiden. Außerdem kann man durch Addition des 
						Wertes [MASK_HOOK_SKIP_ENGINE_FUNCTIONS] 
						erreichen, daß nicht nur die Script-Hook übersprungen 
						werden, sondern auch noch die Ausführung der Hook-
						Prozesse der CARA-Engine. num2 kann folgende Werte 
						Annehmen : 
						[MASK_HOOK_ID_POST_EDIT]
						[MASK_HOOK_ID_PRE_EDIT]
						[MASK_HOOK_ID_SEARCH]
						[MASK_HOOK_ID_SPINNER]
						[MASK_HOOK_ID_INFO]
						[MASK_HOOK_ID_POST_SAVE]
						[MASK_HOOK_ID_PRE_SAVE]
						[MASK_HOOK_ID_DELETE]
						[MASK_HOOK_ID_PRE_CLEAR]
						[MASK_HOOK_ID_POST_CLEAR]
						[MASK_HOOK_ID_EXIT]
						[MASK_HOOK_ID_BUTTON]
						[MASK_HOOK_ID_PRINT]
						[MASK_HOOK_ID_SHOW]
						[MASK_HOOK_ID_MODI]
						[MASK_HOOK_ID_FOCUS_GET]
						[MASK_HOOK_ID_FOCUS_LET]
						[MASK_HOOK_ID_IS_READY]
						[MASK_HOOK_ID_HELP]
						[MASK_HOOK_ID_KEY]

						Warnung:	Dieser Befehl kann unter folgenden Umständen 
									zum Absturz des Computers führen: Wenn z.B. 
									innerhalb einer Ereignisroutine das gleiche
									Ereignis mittels dieses Befehles wieder 
									aufgerufen wird und dadurch eine endlose 
									Verschachtelung verursacht wird. Oder, wenn 
									Die Maske mit dem EXIT Befehl geschlossen 
									wird und danach noch auf Dialogelemente, die 
									sichtbar sein müssen zugegriffen wird.

	MASK_UPDATE		[mask] {, boolUnmodify {, boolProtectAll}}
						Schreibt den Inhalt der [mask] neu und gibt auch alle Ver-
						änderungen der Untervariablen an die Maske weiter. Wenn  
						boolUnmodify = TRUE ist (Default-Wert=FALSE), werden alle
						Masken-Variablen auf unmodified gesetzt (außer Maskenvariablen
						mit der Option ALWAYS_MODIFIED). 
						Wenn boolProtectAll = TRUE ist (Default-Wert=FALSE), werden alle
						Masken-Felder protected gesetzt.

	MASK_CLEAR		[mask] {, boolChange2Def}
						Säubert die [mask] genau wie in dem Fall, wenn ein User den
						Clear-Knopf betätigt. Der [mask!MASK_HOOK_CLEAR] wird 
						jedoch nicht aufgerufen. Felder die mit der Flagge 
						[FIELD_FLAG_BLOCKED] geschützt wurden werden nicht 
						gesäubert. Wenn  boolChange2Def=TRUE ist, was gleichzeitig der
						Defaultwert ist, werden alle Felder so dargestellt, wie dies in der
						Maskendefinition angegeben ist, anderenfalls werden nur die
						Feldinhate entfernt und die Modified-Flags zurückgestellt.

	MASK_TIMER		[mask], numInterval, boolOnOff
						Startet einen Timer mit numInterval Millisekunden. Der Wert
						boolOnOff schaltetet den Timer an und aus.

	MASK_BLOCK		[mask], boolOnOff{,boolButtonsOnly}
						Blockiert die Maske gegen jegliche Eingaben. Der Wert
						boolOnOff schaltetet den Block an und aus.
						ACHTUNG:	Die Maske kann dann auch nicht mehr geschlossen
									werden. Außerdem muss man den Block aufheben,
									wenn man ein anderes Feld fokussieren möchte.
						Wenn der Parameter boolButtonsOnly gegeben ist, verliert die 
						Anwendung nicht den Fokus, aber alle Knöpfe der Maske (inkl. Icon-
						Leiste) sind geblockt.

	MASK_NOTES		[mask]	Zeigt die per NoteShow definierten „Immernotizen“ einer Maske. Dieser 
						Befehl sollte nur dann im Script aufgerufen werden, wenn Daten 
						beispielsweise im Hintergrund geladen wurden. Normalerweise werden 
						diese Notizen nach einer Suche automatisch angezeigt.

	MASK_STMNT		[mask],[qb]
						Bildet das Query oder den Browser  [qb] als Select-
						Anweisung aus den Filtern, die in der [mask] gesetzt sind.
						[qb] wird dabei aus dem in der Maske hinterlegten Standard-
						Query [mask!MASK_QUERY_ID] aufgebaut.

	MASK_ICON_SET 		[mask], numIconIdx, strIconFName, strIconFNameMouseOver
						numIconIdx kann folgende Werte annehmen:
					MASK_FLAG_ICON_BOOKMARKS
					MASK_FLAG_ICON_CALENDAR
					MASK_FLAG_ICON_CLEAR
					MASK_FLAG_ICON_DELETE
					MASK_FLAG_ICON_DMS
					MASK_FLAG_ICON_DOC_MGR
					MASK_FLAG_ICON_DOOR
					MASK_FLAG_ICON_FAVORITES
					MASK_FLAG_ICON_GLOBAL
					MASK_FLAG_ICON_HELP
					MASK_FLAG_ICON_INFO
					MASK_FLAG_ICON_NOTES
					MASK_FLAG_ICON_PRINT
					MASK_FLAG_ICON_SAVE
					MASK_FLAG_ICON_SEARCH
					MASK_FLAG_ICON_SEND
					MASK_FLAG_ICON_USER_1
					MASK_FLAG_ICON_USER_2
					MASK_FLAG_ICON_USER_3
					MASK_FLAG_ICON_USER_4
					MASK_FLAG_ICON_USER_5
						strIconFName 			muss eine Bitmap bezeichnen, das auf 
												dem Knopf angezeigt werden soll.
						strIconFNameMouseOver	muss eine Bitmap bezeichnen, das auf 
												dem Knopf angezeigt werden soll, 
												wenn man sich der Mauszeiger darüber 
												befindet.

	DATA_2_MASK		[mask],[qb] {, boolEtractRecordID}
						Liest die im Query oder dem Browser [qb] aktuelle Daten-
						Zeile aus und ordnet die Inhalte der dort lesbaren Variablen 
						der [mask] zu.
						Wenn boolExtractRecordID (TRUE=DEFAULT) ist, wird die im Query 
						angegebene RecordID an die MASK_RECORD_ID weitergegeben.

	FIELD_FLAG_GET		[mask],'field',[num]
						Gibt die aktuelle Flagge des Feldes 'field' (Name oder ID des 
						Feldes als String übergeben) aus der [mask] an [num] weiter.
						Folgende Flaggen können bei einem Feld einzeln oder auch 
						in Kombination zutreffen:
						[FIELD_FLAG_NONE]	Kein Flagge.
						[FIELD_FLAG_PROTECTED]	Das Feld kann nicht 
												vom User verändert 
												werden, ist aber
												sichtbar.
						[FIELD_FLAG_HIDDEN]	Das Feld ist 
												unsichtbar
						[FIELD_FLAG_MODIFIED]	Das Feld wurde vom 
												Benutzer während der 
												Eingabe verändert, 
												daher wird es 	bei der 
												nächsten Suche 
												mit berücksichtigt.
						[FIELD_FLAG_MODIFIED_ALWAYS]	Das Feld wird stets 
												als verändert 
												gewertet und bei jeder 
												Suche berücksichtigt.
						[FIELD_FLAG_BLOCKED]	Das Feld wird beim 
												Säubern der Maske 
												nicht berücksichtigt, 
												sein Inhalt bleibt 
												unverändert.
						[FIELD_FLAG_ACTUAL]	Dieses Feld besitzt 
												zur Zeit den Focus, 
												d.h. der Eingabe-
												Cursor steht in 
												diesem Feld.
						[FIELD_FLAG_STDCOL]	Die Farbe des Feldes
												wird auf "Standard" 
												gesetzt, d.h. so, als 
												ob im SetDoc keine 
												Angaben zu einer 
												abweichenden Farbe 
												vorhanden sind.
						[FIELD_FLAG_DEFCOL]	Die Farbe des Feldes
												wird auf "Vorgabe" 
												gesetzt, d.h. so, als 
												wie die Angaben im 
												SetDoc.
						[FIELD_FLAG_MAROON]	Setzt die Farbe des
						[FIELD_FLAG_GREEN]	Feldes auf den hier 
						[FIELD_FLAG_OLIVE]	angegebenen Wert.
						[FIELD_FLAG_NAVY]		"
						[FIELD_FLAG_PURPLE]	"
						[FIELD_FLAG_TEAL]		"
						[FIELD_FLAG_GRAY]		"
						[FIELD_FLAG_SILVER]		"
						[FIELD_FLAG_RED]		"
						[FIELD_FLAG_LIME]		"
						[FIELD_FLAG_BLUE]		"
						[FIELD_FLAG_FUCHSIA]	"
						[FIELD_FLAG_AQUA]		"
						[FIELD_FLAG_WHITE]		"
						[FIELD_FLAG_BLACK]		"
						[FIELD_FLAG_YELLOW]	"

	FIELD_FLAG_SET		[mask],'field',num
						Setzt die Flagge des Feldes 'field' in der [mask] auf den Wert 
						num. Die möglichen Werte die num annehmen darf sind bei 
						dem Befehl FIELD_FLAG_GET erklärt.

	FIELD_INFO_GET 		[list], [mask], 'strFieldName|Idx'
						In [list] werden alle Eigenschaften des Dialogelementes aus der CARA-
						Engine angezeigt. So kann man beispielsweise den Dateinamen eines 
						Bildes, das gerade in einem Dialog angezeigt wird, in Erfahrung bringen:
			    		FIELD_INFO_GET [LocFInfo],[WorkMask],'Pic4Clip'
			    		LIST_STR_FIND [LocFInfo],'STR FDef:*', [LocNum], '>>'
			    		IF [LocNum]<=0
			    		  EXIT_PROC
			    		END_IF
			    		LIST_STR_GET [LocFInfo],[LocStr],[LocNum]
			    		CALC [LocStr] AS PART([LocStr],2,'STR FDef:')
					(Der Dateiname ist nun in [LocStr])

	FIELD_FLAG_ON_OFF		[mask],'field','optOn' {,'optOff' {, boolNoFastMode}}
						Liest die Flagge des Feldes 'field' in der [mask] und setzt dann die
						Optionen im String 'optOn' und schaltet die Optionen im String
						'optOff' aus. Die Optionen-String können sich aus mehreren
						Optionen zusammensetzten. Sollte boolNoFastMode den Wert TRUE
						enthalten, können auch Field-Flags gesetzt werden, die nicht zu den
						Flaggen [FIELD_FLAG_ACTUAL], [FIELD_FLAG_PROTECTED],
						[FIELD_FLAG_BLOCKED], [FIELD_FLAG_MODIFIED_ALWAYS],
						[FIELD_FLAG_MODIFIED] oder [FIELD_FLAG_HIDDEN] gehören
						(z.B. Farben).
						Beispiel:
						FIELD_FLAG_ON_OFF [M],'F','[FIELD_FLAG_BLOCKED]+[FIELD_FLAG_PROTECTED]',''

	SET_LABEL		[mask],'fieldName or fieldIdx or ChoicerID|ChocierIdemIdx','caption' {, 'picture'}
						Setzt die Überschrift des Labels oder des Buttons 'field' in der [mask]
						auf den Wert 'caption'. Für den Fall, dass es sich um einen Button
						handelt, kann mit 'picture' auch eine Bilddatei geladen werden.
						Wenn in fieldName  eine ChocierID gefolgt vom Pipe-Zeichen „|“ 
						gefolgt von einem ChoicerItemIdx angegeben wird, kann man die 
						Zeilen eines Choicers zur Laufzeit ändern.
						SET_LABEL [AuftragMask],'0|512150','Proforma-Rechnung' 
						Ändert im Info-Choicer der Auftragsmaske die Zeile mit dem Idx 
						512150 um den User danach „Proforma-Rechnung“ anzuzeigen.

	FLAG_SET			[flag],num{,bool}
						Setzt in der NUM-Variable [flag] den Wert num so, wie dies 
						in bool angegeben ist. Wenn bool nicht übergeben wird, so 
						wird TRUE angenommen.

	FLAG_STATE		[flag],num,[bool]
						Gibt in [bool] zurück, ob die Flagge num in der [flag] gesetzt 						ist.

	IS_LEAP_YEAR		num,[bool]
						Gibt in [bool] zurück, ob das Jahr num ein Schaltjahr ist.

	DAYS_IN_MONTH		[date],[num]
						Gibt in [num] zurück,  wieviel Tage der Monat hat, der zur 
						Zeit in [date] gespeichert ist. Wenn im Debugger die Zeile 
						"...keine EXTENDED Variable übergeben..." auftaucht ist dies 
						dann unerheblich, wenn eine NUM Variable übergeben 
						wurde.

	DATE_2_KW		[date],[float]
						Gibt in [float] zurück, welche Kalenderwoche zur Zeit in [date]
						steht.

	KW_2_DATE			[float],[date]
						Gibt in [date] das Datum zurück, daß zu der in der [float]
						stehenden Kalenderwoche gehört.

	DATE_DIFF			[date1],[date2],[years],[months],[days] {, boolTotalDays}
						Gibt in der NUM oder FLOAT Variable [years] zurück, um
						wieviel Jahre sich [date1] von [date2] unterscheidet, in 
						[months] stehen die Monate und in [days] die Tage.
						Wenn boolTotalDays TRUE ist, wird in [days] die Differenz von [date1] 
						und [date2] in Gesamttagen ausgegeben. 

	DATE_2_WEEK_DAY		[date],[str],bool
						Gibt in [str] den Wochentag zurück, der zu [date] gehört. 
						Wenn in bool ein TRUE steht, wird die Abkürzung des 
						Wochentags mit einer Länge von zwei Zeichen in [str] 
						abgelegt. (Kurze Antworten = Mo, Di, Mi, Do, Fr, Sa, So)

	DATE_2_DMY		[date],[day],[month],[year]
						Gibt den Inhalt von [date] an die NUM Variablen [day] (die 
						Tage), [month] (die Monate) und [year] (die Jahre) weiter.

	DMY_2_DATE		day,month,year,[date]
						Weist [date] die Werte Tage day, Monate month und Jahre 
						year zu.

	TIME_2_HMS			[time],[hour],[min],[sec]
						Gibt den Inhalt von [time] an die NUM Variablen [hour] (die 
						Stunden), [min] (die Minuten) und [sec] (die Sekunden) weiter

	HMS_2_TIME			hour,min,sec,[time]
						Weist [time] die Werte Stunden hour, Minuten min und 
						Sekunden sec zu.

	TIME_DIFF			[time1],[time2],[hours],[mins],[secs]
						Gibt in der NUM oder FlOAT Variable [hours] zurük, um
						wieviel Stunden sich [time1] und [time2] unterscheiden, in 
						[mins] stehen die Minuten und in [secs] die Sekunden.

	DATE_TIME_2_REC_ID		[date],[time],[float]
						Packt den Inhalt von [date] und [time] in [float] in Form einer 
						Datensatz-ID/Record-ID.

	REC_ID_2_DATE_TIME		[float],[date],[time]
						Entpackt den Inhalt der Datensatz-ID/Record-ID [float] in die 
						Variablen [date] und [time].

	DATE_TIME_2_UNIX		[date], [time], [numRes] {, boolUseBias}
						Packt das übergebene Datum und die übergebene Zeit in die Variable 
						[numRes] in Form eines Unix-TimeStamps. Wenn boolUseBias TRUE 
						ist, dann wird die aktuelle Zeitzone berücksichtigt.

	UNIX_2_DATE_TIME		[numRes], [date], [time] {, boolUseBias}
						Entpackt den übergebenen Unix-TimeStamp in die übergebene 
						Datums- und Zeit-Variable. Wenn boolUseBias TRUE ist, dann wird die 
						aktuelle Zeitzone berücksichtigt.

	REC_ID_2_FILENAME		floatID, [strFName]
						Wandelt den in RecID enthaltenen TimeStamp in einen String von der 
						Form yyyymmdd_hhmmss um.

	ACT_REC_ID			[float]	Packt den Inhalt des aktuellen Datums und der aktuellen Zeit 
						in [float] in Form einer Datensatz-ID/Record-ID.

	SET_FLOAT_DEC		num	Setzt die Anzahl der Dezimalstellen auf num Stellen fest, die 
						bei einer FLOAT Wiedergabe bzw. Eingabe verwendet 
						werden sollen.

	DELAY			num	Macht eine Pause von num Millisekunden. Dabei wird mit 
						PROCESS_MESSAGES Rechenzeit an andere Applikationen 
						abgegeben.

	TEXT_FILE			'filename',options
						Bearbeiten der Datei 'filename' unter Berücksichtigung der 
						options. Der Wert und die Eigenschaften von options sind 
						genau wie bei dem Befehl LIST_DISPLAY zu verstehen.

	SCRIPT			'filename',id1 oder str1... id32 oder str32
						Ruft das Script 'filename' aus einem Script heraus auf. 
						id1 bis id32 sind NUM oder FLOAT Werte, die an das Script 
						weitergereicht werden und dort durch die Variabalen
						[RECORD_ID1] bis [RECORD_ID32] verfügbar sind wenn anstelle
						eines NUM- oder FLOAT-Wertes ein STRING übergeben wird, so ist
						dieser über die Variablen [PAR_STR1] bis [PAR_STR32]
						anzusprechen. 
						Wichtig: In allen absoluten String-Parameter-Wert-Angaben
						dürfen keine Kommata enthalten sein, in Variabel-Werten ist
						dies 	gestattet. Beispiele:
						VAR_STR AString, 'an initial value, for example'
						SCRIPT 'ATest.CSH',1,'AStringValue',3	> alles ok
						SCRIPT 'ATest.CSH',1,[AString],3		> alles ok
						SCRIPT 'ATest.CSH',1,'AString, AValue',3	> NICHT OK,
							in der Parameterangabe für den zweiten Parameter
							wurde ein String absolut (also direkt in Hochkommata)
							übergeben, der ein Komma enthält.

	GET_DIR			[str]	Gibt den aktuellen Pfad an die Variable [str] weiter.

	GO_DIR			'str'{,[bool]}
						Wechselt den aktuellen Pfad so wie dieser in 'str' angegeben 
						wird. Wenn [bool] als Parameter verfügbar ist, kann man 
						darin ablesen ob der Verzeichniswechsel erfolgreich war.

	FORCE_DIR			[bool], 'strDirectoryPath'
						Erzeugt den gesamten Pfad der in 'strDirectoryPath' übergeben wird
						(das angegebene Laufwerk muß natürlich existieren). Der Befehl
						wurde erfolgreich ausgeführt, wenn in [boolRes] TRUE zurück- 
						gegeben wird.

	FILE_OPEN			[file],'filename',num{,[bool] {, boolCaseSensitiveFilename }}
						Öffnet die Datei [file]. [file] kann vom Variablentyp 
						VAR_TEXT oder VAR_STREAM sein. Wenn die Datei
						bereits geöffnet ist, wird die Operation abgebrochen. 
						'filename' legt den Namen der zu öffnenden Datei fest. 
						boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?
						Durch num wird bestimmt wie die Datei zu öffnen ist. num kann 
						folgende Werte annehmen:
						[FILE_OPEN_OUT]		Öffnet die Datei für die Aufnahme 
												von Daten. Sollte die Datei zuvor 
												existieren, so wird sie durch diese 
												Operation ohne jede Vorwarnung 
												komplett gelöscht, d.h. über- 
												schrieben. Mit dem Befehl 
												FILE_WRITE kann man dann Daten 
												in der Datei ablegen. Auf Dateien, die 
												mit diesem Modus geöffnet sind kann 
												nicht mit dem Befehl FILE_READ 
												zugegriffen werden.

						[FILE_OPEN_IN]			Öffnet die Datei für die 
												Entnahme von Daten. Mit dem 
												Befehl FILE_READ kann man 
												dann Daten aus der Datei 
												entnehmen. Auf Dateien, die 
												mit diesem Modus geöffnet sind 
												kann nicht mit dem Befehl 
												FILE_WRITE zugegriffen werden.

						[FILE_OPEN_APPEND]	Dieser Befehl ist nur für Dateien 
												vom Typ VAR_TEXT 														verfügbar! Hiermit wird die 
												Datei ebenfalls zur Aufnahme 
												von Daten geöffnet. Dies 
												geschieht jedoch nicht durch 
												Überschreiben bzw. Neuanlage 
												der Datei sondern so, dass 
												anschließend mit dem Befehl 
												FILE_WRITE am Ende der 
												Datei weitergeschrieben wird. 
												D.h. die Datei wird zum 
												Erweitern bzw. Anhängen 
												geöffnet. Auf Dateien, die 
												mit diesem Modus geöffnet sind 
												kann nicht mit dem Befehl 
												FILE_READ zugegriffen 
												werden.

	FILE_CLOSE		[file]	Schließt die Datei [file]. [file] kann vom Variablentyp 
						VAR_TEXT oder VAR_STREAM sein. Wenn die Datei nicht 
						geöffnet ist führt dies zu keinerlei Fehlern.

	FILE_WRITE		[file],'str'{,[bool]}
						Schreibt 'str' in die Datei [file]. [file] kann vom Variablentyp 
						VAR_TEXT oder VAR_STREAM sein. In [bool] wird das 
						Resultat der Operation gespeichert, wenn dieser Parameter 
						übergeben wurde.

	FILE_READ			[file],[str]{,[bool]{,buf{,'Filter'{,'Event1'{,Event2}}}}}
						Dieser Befehl ist für die beiden Datei-Typen VAR_TEXT und 						VAR_STREAM unterschiedlich zu verwenden.
						Verwendung für VAR_TEXT:
						Liest aus der Datei [file] den String [str]. In [bool] wird das 
						Resultat der Operation gespeichert, wenn dieser Parameter 
						übergeben wurde. Alle anderen Parameter entfallen.
						Verwendung für VAR_STREAM:
						Liest aus der Datei [file] in den String [str] buf Zeichen. buf 
						darf max. 2147483646 Zeichen betragen. In [bool] wird das Resultat 
						der Operation gespeichert, dieser Parameter muß übergeben 
						werden. Falls 'Filter' übergeben wird, werden alle Zeichen die 
						sich in 'Filter' befinden aus [str] herausgefiltert. Falls 'Event1' 
						oder 'Event1' und 'Event2' übergeben werden, werden 
						solange Zeichen in [str] gelesen bis entweder das Dateiende 
						erreicht wurde oder die Zeichenkette 'Event1' bzw. 'Event2' 
						gefunden wurde, buf muß in einem solchen Fall genau den 
						Wert 1 enthalten.

	FILE_COPY			[boolRes], 'strSourceName', 'strDestName' {, boolCaseSensitiveFilename }
						Kopiert die Datei ' strSourceName' nach 'strDestName'. [boolRes] ist
						vom Typ VAR_BOOL und erhält den Wert TRUE, wenn die
						Operation erfolgreich war.
						boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?

	FILE_DELETE		[res], 'filename' {, boolCaseSensitiveFilename }
						Löscht die Datei 'filename'. [res] ist vom Typ VAR_BOOL und 
						erhält den Wert TRUE, wenn die Operation erfolgreich war.
						boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) Der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?

	FILE_DOWNLOAD		'strURL'|[listURL], 'filename' {, [boolRes]{, numTimeOut{, numSSLVersion:1,2,3 {, 
					boolCaseSensitiveFilename }}}}
						Läd die Datei strURL aus dem Internet und speichert sie unter
						dem strFilename.
						Der erste Parameter kann von nun an auch als Liste übergeben 
						werden. Alle Zeilen der Liste werden dann hintereinander gehängt u. 
						dann als URL verwendet. Dadurch kann dieser Wert auch länger als 
						2147483646 Zeichen sein.
						Der optionale Parameter [boolRes] wird nur dann TRUE, wenn auch 
						tatsächlich Daten in die Datei geschrieben wurden, die mit dem 
						Namen der in [strFilename] bezeichnet wurde. Die Fehler 301, 302, 
						307 und 404 (URL konnte nicht gefunden werden) werden nicht 
						angezeigt und ignoriert.
						Wenn die URL mit “https“ beginnt, wird versucht eine SSL-Verbindung 
						herzustellen. Auf dem Rechner muss dann aber OpenSSL installiert 
						sein. Das kann man hier kostenlos herunterladen: 
						http://www.slproweb.com/products/Win32OpenSSL.html
						Wenn numTimeOut > 0 ist wird die Zeit in Millisekunden als Timeout 
						für die Serveranfrage verwandt.
						Wenn numSSLVersion > 0 ist, die die hinterlegte SSL-Version am 
						Web-Server erwartet. Hier wird per Vorgabe versucht sowohl Version 
						2 als auch Version 3 vorzufinden.										boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) Der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?

	FILE_RENAME		[res], 'old_filename','new_filename' {, boolCaseSensitiveFilename }
						Benennt die Datei 'old_filename' in 'new_filename' um. [res] 
						ist vom Typ VAR_BOOL und erhält den Wert TRUE, wenn 
						die Operation erfolgreich war.
						boolCaseSensitiveFilename = TRUE die Schreibweise des 
						Dateinamens wird genauso wie übergeben verwendet.   		
						boolCaseSensitiveFilename = FALSE (default) Der Dateiname wird 
						komplett in Kleinbuchstaben gewandelt?

	FILE_EXT			[strResult], 'FullFileName'
						Gibt aus einem Dateinamen ('FullFileName') mit Pfad nur die
						Dateinamenserweiterung (inkl. Dem Punkt) in [strResult] zurück.

	FILE_NAME			[strResult], 'FullFileName'
						Gibt aus einem Dateinamen ('FullFileName') mit Pfad nur den
						Dateinamen ([strResult]) zurück.

	FILE_PATH			[strResult], 'FullFileName'
						Gibt aus einem Dateinamen ('FullFileName') mit Pfad nur den
						Pfad ([strResult]) zurück.

	FILE_SLASH			[strResult], boolHaveSlash 
						Gibt den Dateipfad ([strResult]) mit einem BackSlash am Ende 
						Zurück wenn boolHaveSlash TRUE ist anderenfalls ohne BackSlash. 
						Die Funktion verifiziert natürlich vorher, ob überhaupt eine Änderung 
						Des übergebenen Strings in [strResult] vorgenommen werden muss.

	FILE_LIST			[listResult], 'strFileFilter', 'strStartDirectory' {, boolWithSubDirs {, boolWithPath 
						{, boolJustDirs {, boolNoDirs {, boolCompleteDirs}}}}}

						Gibt in [listResult] vom Typ VAR_LIST alle Dateinamen und 
						Verzeichnisnamen von 'strStartDirectory' zurück, die dem Dateifilter
						'strFileFilter' genügen. Wenn boolWithSubDirs den Wert TRUE 
						enthält, werden auch alle Unterverzeichnisse mit Inhalt gelistet.
						Wenn boolWithPath TRUE ist, wird er Pfad, ab dem Verzeichnis, von 
						dem aus ausgelesen wird, mit zurückgegeben. Wenn boolJustDirs 
						TRUE ist, werden nur Verzeichnisse, keine Dateien zurückgegeben. 
						Wenn boolNoDirs TRUE ist, werden nur Dateien, keine 
						Verzeichnisse zurückgegeben.
						Wenn boolCompleteDirs TRUE ist, werden die Dateinamen mit 
						komplettem Pfad zurückgegeben.

	FILE_INFO			[dC], [tC], [dA], [tA], [dW], [tW], [nSz], [nAttr], [sN], [sDos], 'sFN' {{, 'sDir'}, boolSet }
						Gibt die Dateiinformationen der Datei mit dem Namen  'sFN' (string)
						zurück, wenn boolSet FALSE (default) ist. Wenn boolSet TRUE ist
						werden die übergebenen Informationen zu der angegebenen Datei 							gespeichert (dazu benötigt man natürlich Schreibrechte für die Datei).
						Optional kann der Dateiname und das zugehörige Verzeichnis 'sDir'
						(string) separat übergeben werden. Folgende Daten können abgerufen
						bzw. gesetzt werden:
						[dC]		(date)	Datum der Anlage
						[tC]		(time)	Zeit der Anlage
						[dA]		(date)	Datum des letzten Zugriffs
						[tA]		(time)	Zeit des letzten Zugriffs
						[dW]		(date)	Datum der letzten Änderung
						[tW]		(time)	Zeit der letzten Änderung
						[nSz]		(num)	Grösse in Byte
						[nAttr]	(num)	Datei-Attribut als Flagge, kann folgende Werte
										beinhalten:
										[FILE_ATTR_ARCHIVE]
										[FILE_ATTR_COMPRESSED]
										[FILE_ATTR_DIRECTORY]
										[FILE_ATTR_HIDDEN]
										[FILE_ATTR_NORMAL]
										[FILE_ATTR_OFFLINE]
										[FILE_ATTR_READ_ONLY]
										[FILE_ATTR_SYSTEM]
										[FILE_ATTR_TEMPORARY]
						[sN]		(string)	Name der Datei im Dateisystem (32bit)
						[sDos]	(string)	Alternativer Dateiname im DOS-Dateisystem

	FILE_STR_SEARCH		[numRes], FileName, SearchStr {, SearchOpt}
						Sucht in der Datei "FileName" den "SearchStr" und gibt die Position
						an welcher der Such-String gefunden wurde (0=kein Ergebnis). Es
						können nur Datein mit einer maximalen Grösse von 2MB verwendet
						werden. "SearchOpt" kann wie eine Binär-Flagge aus folgenden
						Werten zusammengesetzt werden: 
						[FIND_AND_REPLACE_OPT_NONE]
												keine Effekte (0 = DEFAULT)  
						[FIND_OPT_CASE_SENSITIVE] 
											Soll auf die Groß- und Kleinschreibung des
											"SearchStr" Rücksicht genommen werden?

	FILE_STR_READ		[boolRes], FileName, numStart, numCount, [strBuffer]
						Liest aus der Datei “Filename” ab dem Byte numStart genau numCount 
						Zeichen in den [strBuffer]. numCount sollte die maximale Länge eines 
						Strings nicht überschreiten (250).

	FILE_STR_WRITE		[boolRes], FileName, numStart, numCount, strBuffer
						Schreibt in die Datei “Filename” ab dem Byte numStart den String 
						strBuffer. Wenn numCount der Länge des Strings entspricht, wird 
						einfach überschrieben. Wenn numCount kleiner als die Länge des 
						Strings ist, werden numCount Zeichen überschrieben und die Datei um 
						den „fehlenden Rest“ verlängert, d.h. der „überschüssige“ Text wird 
						eingeschoben. Wenn numCount größer als die Länge des Strings ist, 
						überschreibt der String ab numStart und die Datei wird um den Rest 
						der Differenz der Zeichen verkürzt. Beisipiel-Datei in der 
						Dokumentation “ FileStr_Read_Write.csh“

	FILE_STR_REPLACE		[boolRes], FileName, SearchStr, ReplaceStr {, ReplaceOpt {, Filler}}.
						Sucht in der Datei "FileName" den "SearchStr" und ersetzt diesen
						durch den "ReplaceStr". Es können nur Datein mit einer maximalen
						Grösse von 2MB verwendet werden. Es werden alle Vorkommen
						von "SeachStr" ersetzt. Sollte ein Fehler auftauchen, ist das
						Ergebnis FALSE, anderenfalls, auch wenn keinerlei Änderungen an
						der Datei vorgenommen wurden, ist das Ergebnis TRUE. Die
						"ReplaceOpt" kann wie eine Binär-Flagge aus folgenden Werten
						zusammengesetzt werden:
						[FIND_AND_REPLACE_OPT_NONE]
												keine Effekte (0 = DEFAULT)  
						[REPLACE_CHANGE_FILE_LENGTH_NO]
												die Dateilänge bleibt unverändert, falls der
												"ReplaceStr" kleiner als der "SearchStr" ist,
											 wird der Rest der Zeichen durch das erste
											 Zeichen im Filler ersetzt. Wenn der Filler
												nicht übergeben wird, wird ein Leerzeichen
												(#32) als Filler verwendet. Wenn der
												"ReplaceStr" länger als der "SearchStr" ist,
												wird der ReplaceStr gekürzt.
						[REPLACE_ONLY_FIRST]
												Soll nur das erste Vorkommen von 
												"SearchStr" ersetzt werden ?
						[FIND_OPT_CASE_SENSITIVE] 
											Soll auf die Groß- und Kleinschreibung des
											"SearchStr" Rücksicht genommen werden?

	CHOOSE_FILE		[filename],num,'header','filters'{,[bool] {, ‘initialDirectory’}}
						Öffnet einen Dateiwähler. [filename] muß vom Typ VAR_STR
						sein. num gibt die Option an mit er der Dateiwähler geöffnet 
						wird und kann folgende Werte annehmen:
								[CHOOSE_FILE_4_OPEN]
								[CHOOSE_FILE_4_SAVE]
						'header' wird als Überschrift im Dateiwähler erscheinen.
						'filters' beinhaltet Angaben darüber welche Dateitypen 
						ausgewählt werden können. Beispiel:
						'Text Dateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*' gibt dem User 
						die Möglichkeit *.txt und *.* Dateien auswählen zu können. In 
						[bool] wird das Resultat der Operation gespeichert, wenn 
						dieser Parameter übergeben wurde. Falls kein Dateiname 
						angegeben wurde ist [filename] anschließend leer.
						Wenn initialDirectory angegeben wird, ist dies das Start-Verzeichnis für 
						die Auswahl.

	EXIST_FILE			'filename',[bool]{, [numFilesize]{, [date]{, [time]{, [numAttribut]}}}}
						Gibt in [bool] zurück, ob die Datei mit dem 'filename' existiert.

	EXIST_DIR			'path',[bool]
						Gibt in [bool] zurück, ob das Verzeichnis in 'path' existiert.

	SOUND_PLAY		'filename'	Spielt die WAV-Datei 'filename' im Hintergrund ab. Es sind 
						keinerlei Aktionen während dieser Zeit möglich. Das System 
						wartet ab bis der komplette Sound abgespielt wurde. Auf dem 						Bildschirm werden keinerlei Steuerelemete sichtbar, die das 
						Abspielen beeinflussen können. Dieser Befehl sollte nicht den 
						MediaPlayer vom Windows-System ersetzen. Diesen kann 
						man z.B. folgendermaßen einsetzen:
						EXTERN	'MPlayer.exe /play /close c:\GoodTime.avi', 
									[EXTERN_SHOWNORMAL]
						Wobei /play dafür sorgt, daß das Medium gleich abgespielt 
						wird und durch /close wird nach einmaligem Abspielen der
						MediaPlayer wieder geschlossen.

	GET_YES_NO		'head','question',[num],option
						Öffnet ein Abfragefenster mit der Überschrift 'head' und der 
						Frage 'question'. Der Benutzer kann drei verschiedene 
						Knöpfe drücken : JA, NEIN und ABBRUCH. Dem 
						entsprechend kann das Ergebnis, das in [num] 
						zurückgegeben wird, folgende Werte annehmen:
						[ID_YES]		Der Benutzer hat JA gewählt.
						[ID_NO]	 		Der Benutzer hat NEIN gewählt.
						[ID_CANCEL]		Der Benutzer hat ABBRUCH gewählt.
						Durch den Inhalt in [num] beim Aufruf von GET_YES_NO 
						steuert man, welche Taste die Default-Taste in dem 
						angezeigten Dialog sein soll. option ist ein vom Typ VAR_NUM und
						kann folgende Werte annehemen:
						[ALIGN_LEFT]		Der Anzeigetext ist am linken Rand
											ausgerichtet.
						[ALIGN_RIGHT]		Der Anzeigetext ist am rechten Rand 											ausgerichtet.
						[ALIGN_CENTER]	Der Anzeigetext wird mittig ausgerichtet.

	GET_STRING		[str],'head','prompt','mask',{,[bool] {,FldOpt}}
						Öffnet ein Eingabefenster mit der Überschrift 'head' und dem 
						Eingabeprompt 'prompt'. Der Inhalt von [str] wird dem 
						Benutzer vorgegeben. Bei einem Eingabeabbruch bleibt [str] 
						unverändert. 'mask' legt die Eingabemake fest, dies 
						geschieht genau wie bei den Angaben zu VIEW.Maske, dies
						ist im SetDoc.CSH beschrieben. [bool] wird TRUE wenn die 
						Eingabe mit OK abgeschlossen wurde, anderenfalls ist der 
						Rückgabewert stets FALSE.
						Der optionale numerische Parameter FldOpt kann folgende Werte
						enthalten:
						[GET_OPT_AUTO_SEL]	Der Vorgabewert soll markiert sein,
												so dass man ihn mit einer beliebigen
												Eingabe sofort überschreiben kann.
						[GET_OPT_BEEP]		Soll ein Warnton im Falle einer
												Fehleingabe ertönen?
						[GET_OPT_PUSH]		Wenn man innerhalb eines Eingabe-
												Feldes, dessen maximale
												Zeichenlänge bereits erreicht ist, ein
												weiteres Feld eingibt, werden rechts
												Zeichen abgeschnitten, anderenfalls
												kann man nichts mehr eingeben.

						Die folgenden Optionen wurden bereits “durchgereicht”, obwohl sie nur
						innerhalb einer Maske mit mehreren Feldern einen Sinn ergeben. Im
						Falle der GET_XXX-Befehle sind sie ohne Wirkung.
						[GET_OPT_AUTO_L_R]	AutoAdvanceLeftRight (ist nur
												innerhalb einer Maske sinnvoll)
						[GET_OPT_AUTO_CHR]	AutoAdvanceChar (ist nur innerhalb
												einer Maske sinnvoll)
						[GET_OPT_AUTO_U_D]	AutoAdvanceUpDown(ist nur
												innerhalb einer Maske sinnvoll)
						Wenn die FldOpt nicht übergeben wird, werden alle Optionen ausser
						[GET_OPT_AUTO_SEL] gesetzt.

	GET_FLOAT		[float],'head','prompt','mask',{,[bool] {,FldOpt}}
						Öffnet ein Eingabefenster mit der Überschrift 'head' und dem 
						Eingabeprompt 'prompt'. Der Inhalt von [float] wird dem 
						Benutzer vorgegeben. Bei einem Eingabeabbruch bleibt
						[float] unverändert. 'mask' legt die Eingabemake fest, dies 
						geschieht genau wie bei den Angaben zu VIEW.Maske, dies
						ist im SetDoc.CSH beschrieben. [bool] wird TRUE wenn die 
						Eingabe mit OK abgeschlossen wurde, anderenfalls ist der 
						Der optionale numerische Parameter FldOpt kann folgende Werte
						enthalten:
						[GET_OPT_AUTO_SEL]	Der Vorgabewert soll markiert sein,
												so dass man ihn mit einer beliebigen
												Eingabe sofort überschreiben kann.
						[GET_OPT_BEEP]		Soll ein Warnton im Falle einer
												Fehleingabe ertönen?
						[GET_OPT_PUSH]		Wenn man innerhalb eines Eingabe-
												Feldes, dessen maximale
												Zeichenlänge bereits erreicht ist, ein
												weiteres Feld eingibt, werden rechts
												Zeichen abgeschnitten, anderenfalls
												kann man nichts mehr eingeben.

						Die folgenden Optionen wurden bereits “durchgereicht”, obwohl sie nur
						innerhalb einer Maske mit mehreren Feldern einen Sinn ergeben. Im
						Falle der GET_XXX-Befehle sind sie ohne Wirkung.
						[GET_OPT_AUTO_L_R]	AutoAdvanceLeftRight (ist nur
												innerhalb einer Maske sinnvoll)
						[GET_OPT_AUTO_CHR]	AutoAdvanceChar (ist nur innerhalb
												einer Maske sinnvoll)
						[GET_OPT_AUTO_U_D]	AutoAdvanceUpDown(ist nur
												innerhalb einer Maske sinnvoll)
						Wenn die FldOpt nicht übergeben wird, werden alle Optionen ausser
						[GET_OPT_AUTO_SEL] gesetzt.
						Rückgabewert stets FALSE.

	GET_DATE			[date],'head','prompt','mask',{,[bool] {,FldOpt}}
						Öffnet ein Eingabefenster mit der Überschrift 'head' und dem 
						Eingabeprompt 'prompt'. Der Inhalt von [date] wird dem 
						Benutzer vorgegeben. Bei einem Eingabeabbruch bleibt 
						[date] unverändert. 'mask' legt die Eingabemake fest, dies 
						geschieht genau wie bei den Angaben zu VIEW.Maske, dies
						ist im SetDoc.CSH beschrieben. [bool] wird TRUE wenn die 
						Eingabe mit OK abgeschlossen wurde, anderenfalls ist der 
						Rückgabewert stets FALSE.
						Der optionale numerische Parameter FldOpt kann folgende Werte
						enthalten:
						[GET_OPT_AUTO_SEL]	Der Vorgabewert soll markiert sein,
												so dass man ihn mit einer beliebigen
												Eingabe sofort überschreiben kann.
						[GET_OPT_BEEP]		Soll ein Warnton im Falle einer
												Fehleingabe ertönen?
						[GET_OPT_PUSH]		Wenn man innerhalb eines Eingabe-
												Feldes, dessen maximale
												Zeichenlänge bereits erreicht ist, ein
												weiteres Feld eingibt, werden rechts
												Zeichen abgeschnitten, anderenfalls
												kann man nichts mehr eingeben.

						Die folgenden Optionen wurden bereits “durchgereicht”, obwohl sie nur
						innerhalb einer Maske mit mehreren Feldern einen Sinn ergeben. Im
						Falle der GET_XXX-Befehle sind sie ohne Wirkung.
						[GET_OPT_AUTO_L_R]	AutoAdvanceLeftRight (ist nur
												innerhalb einer Maske sinnvoll)
						[GET_OPT_AUTO_CHR]	AutoAdvanceChar (ist nur innerhalb
												einer Maske sinnvoll)
						[GET_OPT_AUTO_U_D]	AutoAdvanceUpDown(ist nur
												innerhalb einer Maske sinnvoll)
						Wenn die FldOpt nicht übergeben wird, werden alle Optionen ausser
						[GET_OPT_AUTO_SEL] gesetzt.

	GET_TIME			[time],'head','prompt','mask',{,[bool] {,FldOpt}}
						Öffnet ein Eingabefenster mit der Überschrift 'head' und dem 
						Eingabeprompt 'prompt'. Der Inhalt von [time] wird dem 
						Benutzer vorgegeben. Bei einem Eingabeabbruch bleibt 
						[time] unverändert. 'mask' legt die Eingabemake fest, dies 
						geschieht genau wie bei den Angaben zu VIEW.Maske, dies
						ist im SetDoc.CSH beschrieben. [bool] wird TRUE wenn die 
						Eingabe mit OK abgeschlossen wurde, anderenfalls ist der 
						Rückgabewert stets FALSE.
						Der optionale numerische Parameter FldOpt kann folgende Werte
						enthalten:
						[GET_OPT_AUTO_SEL]	Der Vorgabewert soll markiert sein,
												so dass man ihn mit einer beliebigen
												Eingabe sofort überschreiben kann.
						[GET_OPT_BEEP]		Soll ein Warnton im Falle einer
												Fehleingabe ertönen?
						[GET_OPT_PUSH]		Wenn man innerhalb eines Eingabe-
												Feldes, dessen maximale
												Zeichenlänge bereits erreicht ist, ein
												weiteres Feld eingibt, werden rechts
												Zeichen abgeschnitten, anderenfalls
												kann man nichts mehr eingeben.

						Die folgenden Optionen wurden bereits “durchgereicht”, obwohl sie nur
						innerhalb einer Maske mit mehreren Feldern einen Sinn ergeben. Im
						Falle der GET_XXX-Befehle sind sie ohne Wirkung.
						[GET_OPT_AUTO_L_R]	AutoAdvanceLeftRight (ist nur
												innerhalb einer Maske sinnvoll)
						[GET_OPT_AUTO_CHR]	AutoAdvanceChar (ist nur innerhalb
												einer Maske sinnvoll)
						[GET_OPT_AUTO_U_D]	AutoAdvanceUpDown(ist nur
												innerhalb einer Maske sinnvoll)
						Wenn die FldOpt nicht übergeben wird, werden alle Optionen ausser
						[GET_OPT_AUTO_SEL] gesetzt.

	GET_NUM			[num],'head','prompt','mask',{,[bool] {,FldOpt}}
						Öffnet ein Eingabefenster mit der Überschrift 'head' und dem 
						Eingabeprompt 'prompt'. Der Inhalt von [num] wird dem 
						Benutzer vorgegeben. Bei einem Eingabeabbruch bleibt
						[num] unverändert. 'mask' legt die Eingabemake fest, dies 
						geschieht genau wie bei den Angaben zu VIEW.Maske, dies
						ist im SetDoc.CSH beschrieben. [bool] wird TRUE wenn die 
						Eingabe mit OK abgeschlossen wurde, anderenfalls ist der 
						Rückgabewert stets FALSE.
						Der optionale numerische Parameter FldOpt kann folgende Werte
						enthalten:
						[GET_OPT_AUTO_SEL]	Der Vorgabewert soll markiert sein,
												so dass man ihn mit einer beliebigen
												Eingabe sofort überschreiben kann.
						[GET_OPT_BEEP]		Soll ein Warnton im Falle einer
												Fehleingabe ertönen?
						[GET_OPT_PUSH]		Wenn man innerhalb eines Eingabe-
												Feldes, dessen maximale
												Zeichenlänge bereits erreicht ist, ein
												weiteres Feld eingibt, werden rechts
												Zeichen abgeschnitten, anderenfalls
												kann man nichts mehr eingeben.

						Die folgenden Optionen wurden bereits “durchgereicht”, obwohl sie nur
						innerhalb einer Maske mit mehreren Feldern einen Sinn ergeben. Im
						Falle der GET_XXX-Befehle sind sie ohne Wirkung.
						[GET_OPT_AUTO_L_R]	AutoAdvanceLeftRight (ist nur
												innerhalb einer Maske sinnvoll)
						[GET_OPT_AUTO_CHR]	AutoAdvanceChar (ist nur innerhalb
												einer Maske sinnvoll)
						[GET_OPT_AUTO_U_D]	AutoAdvanceUpDown(ist nur
												innerhalb einer Maske sinnvoll)
						Wenn die FldOpt nicht übergeben wird, werden alle Optionen ausser
						[GET_OPT_AUTO_SEL] gesetzt.

	RECORD_LOCK    'tablename',float,boolLockYesNo,[boolRes]{,boolHaveMsg{,numEvent{,‘strLockClause‘{,msWait{,numRetrys}}}}}
						Dieser Befehl funktioniert nur, wenn die boolean Variable
						[RECORD_LOCKING_IS_ACTIVE] den Wert TRUE hat.
						Wenn bool1 den Wert TRUE enthält wird hiermit in die 
						Tabelle "LockRecs" der 'tablename', die RecordID float, die 
						StationsID und die aktuelle SessionID geschrieben. Der 
						Datensatz ist dann für andere Stationen als "gelockt" 
						gekennzeichnet.
						Wenn boolLockYesNo den Wert FALSE enthält, wird versucht 
						den entsprechenden Datensatz aus der Tabelle "LockRecs" zu
						entfernen, dies entspricht dem "entlocken" der Datensatzes.
						Der Datensatz ist dann für andere Stationen wieder 
						freigegeben. Nach erfolgter Operation kann in [boolRes] der 
						Erfolg abgelesen werden. [boolRes] (TRUE) bedeutet, daß die 
						Operation erfolgreich war und [boolRes] (FALSE), daß der 
						Vorgang nicht ordnungsgemäß abgeschlossen werden 
						konnte. Die Option boolHaveMsg zeigt CARA an, ob dem 
						Benutzer eine Nachricht angezeigt werden soll, wenn der 
						Lock-Versuch fehlschlagen sollte. 
						Mit msWait (default = 0) kann die Anzahl der Millisekunden 
						angegeben werden, die jeweils zwischen den Lockversuchen 
						gewartet werden soll, mit numRetrys (default = 0) kann die Anzahl 
						der Lockversuche bestimmt werden. Wenn auch nur einer der beiden 
						Werte msWait oder numRetry gleich 0 ist, dann wird kein erneuter 
						Lock-Versuch unternommen.					
						Wenn die Variable [RECORD_LOCKING_IS_ACTIVE] auf 
						den Wert FALSE gesetzt wird, werden alle RecordLocks der 
						aktiven Session wieder freigegeben.
						Normalerweise wird aus einem Script automatisch der Event 2 
						(SCRIPT_LOCK) und aus einer Maske 1 (MASK_LOCK). Wenn man 
						abweichende Meldungen haben möchte, kann man den LockEvent 
						hier mit numEvent übergeben und im Choicer mit der Listenummer 
						1001 im Feld „Auswahl“ beschreiben und das Feld „Wert1“ mit 
						numEvent füllen. 
						Die Engine gibt den Auswahl-Text dann aus.
						Mit strLockClause kann der Programmierer die where-Bedingung der
						Abfrage erweitern, die überprüft ob ein Datensatz bereits gelockt ist. 
						Damit können Ausnahmen definiert werden. 
						Beispiel: „AND LockEvent <> 10“. Wichtig ist, dass das „AND“ in 
						strLockClause mit angegeben werden muss. Da aus 
						Geschwindigkeitsgründen nur die Tabelle lockrecs befragt wird, können 
						natürlich auch nur Felder der lockrecs-Tabelle zur Definition einer
						Ausnahme herangezogen werden.

	TRANSACTION		num1	Mit diesem Befehl kann eine Transaktion beginnen, beenden
						(commit) und abbrechen. num1 kann folgende Werte 
						annehmen:			[TRANSACTION_START]
											[TRANSACTION_END]
											[TRANSACTION_ABORT]
						Anhand der Systemvariable [TRANSACTION_IS_ON], die
						vom Typ VAR_BOOL ist, kann man erkennen, ob bereits 
						eine Transaktion im Gange ist.

	PRINT_STR			[print], x1num, y1num, 'str1..str20'
						Schreibt in den Druckjob [print] an der Stelle x1num, y1num
						Die strings 'str1..str20'. Dabei werden die Koordinaten in 
						1/10 mm gemessen. Wenn in 'str1..str20' eine eckige 
						Klammer mit Druckanweisungen enthalten ist und diese den 
						Folgenden Konventionen entsprechen, so werden diese 
						ebenfalls ausgeführt:
						"NoHold", "N"
						Dieser Befehl muss als erster "eingebauter Befehl (eB) in 
						einer Sequenz auftauchen. Er bedeutet, dass sich die 
						folgenden Befehle nicht permanent und auf die folgenden 
						Druckbefehle wirken werden.

						"PenSize"			"PS"	num	Stiftstärke in 1/10 mm
						"PenColor"			"PC"	str 	Striftfarb-Bezeichner
						"PenColorRGB"		"PCRGB"  red green blue
													Stiftfarbe als RGB-Wert
					*	"PSSolid"			"PSS"		Der Stift schreib ausgefüllt.
					*	"PSDash"			"PSDA"		Der Stift schreib gestrichelt.
					*	"PSDot"				"PSDO"		Der Stift schreib gepunktet.
					*	"PSDoshDot"			"PSDADO"	Der Stift schreib _.
					*	"PSDoshDotDot"		"PSDADODO"	Der Stift schreib _..

						'font'							Bezeichner einer Schriftart in 
													einfachen Anführungszeichen!
						"FontSize"			"S"	num	Schrifthöhe in Punkten
						"Color"				"C" 	str	Textfarb-Bezeichner

						"ColorRGB"			"RGB"	red green blue
														Textfarbe als
														RGB-Wert
						"BkgColor"			"BC"	str	Hintergrundfarb-Bez.
						"BkgColorRGB"		"BCRGB"   red green blue
														Hintergrundfarbe als 
														RGB-Wert
						"HSNone"			"HSN"		Kein Muster
						"HSHorizontal"		"HSH"		Horizontal-Muster
						"HSVertical"			"HSV"		Vertikal-Muster
						"HSFDiagonal"		"HSFD"		Diagonal-Muster 1
						"HSBDiagonal"		"HSBD"		Diagonal-Muster 2
						"HSCross"			"HSC"		Kreuz-Muster
						"HSDiagCross"		"HSDC"		Diagonal-Kreuz-Muster
						"HatchColor"		 	"HC"	str	Muster-Farbbezeichner
						"HatchColorRGB"	"HCRGB"   red green blue
													Musterfarbe als RGB-Wert

						"Transparent"			"T"		Transparentmodus an
						"TransparentOff"		"TO"		Transparentmodus aus

					*	"GradientLine"		"GRDL"		Farbverlauf Linie	
					*	"GradientRect"		"GRDR"		Farbverlauf Rechteck	
					*	"GradientEllipse"		"GRDE"		Farbverlauf Ellipse	
					*	"GradientTwoColor"	"GRDTWO" str	Farbverlauf von Start- zu 
													Endfarbe verwenden	
					*	"GradientTwoColor"	"GRDTRI" str	Farbverlauf von Start- über 
													Mittel- bis zur Endfarbe 
													verwenden	
					*	" GradientStartColor"	"GRDSC" str	Farbverlaufsstartfarbe 
					*	" GradientStartColorRGB"  "GRDSCRGB" red green blue
													Farbverlaufsstartfarbe in RGB
					*	" GradientMiddleColor"	"GRDMC" str	Farbverlaufsmittelfarbe 
					*	" GradientMiddleColorRGB" "GRDMCRGB" red green blue	
													Farbverlaufsmittelfarbe RGB
					*	" GradientEndColor"	"GRDEC" str	Farbverlaufsendfarbe 
					*	" GradientEndColorRGB"  "GRDECRGB" red green blue 
													Farbverlaufsendfarbe in RGB

						"Justified"			"J"		Bündigkeit des Textes "J" (der 
													Befehls "J" ohne weitere 
													nachfolgende Angabe steht für 
													Blocksatz.)
						"Right"				"R"		Rechtsbündig	"J R"
						"Left"					"L"		Linksbündig	"J L"
						"Center"				"CE"		zentriert		"J CE"
						"AutoBreak"			"A"		auto.-Textumbruch an
						"AutoBreakOff"		"AO"		auto.-Textumbruch aus
						"AutoBreakNoLimits"	"ANL"		keine Grenzen für den
														auto.-Textumbruch

						"Rotate"		"Rot"	winkel			Rotation im 
														Uhrzeigersinn.
														Jeweils 90 Grad 
														sind erlaubt. Der 
														Winkel wird in 1/10 
														Grad gemessen.

						"Bold"			"B"				Fettschrift an
						"BoldOff"		"BO"				Fettschrift aus
						"Underline"		"U"				Unterstreichen an
						"UnderlineOff"		"UO"				Unterstreichen aus
						"Italic"			"I"				Kursivschrift an
						"ItalicOff"		"IO"				Kursivschrift aus
					*	"StrikeOut"		"ST"				Durchgestrichen an
					*	"StrikeOutOff"		"STO"			Durchgestrichen aus

						[N 'Arial' S 30 R 900 B U JR] setzt die Schrift auf den Typ 
						ARIAL in 30-Punkt Größe, um 90 Grad gedrehter Text,
						Fettschrift an, Unterstrichen an, Rechtsbündig. Durch "N" am
						wirkt sich dies nur auf den aktuellen bzw. folgenden Text aus
						* Printflags sind nur mit VPE5 oder VPE6 verfügbar.

	PRINT_BOX		[print], x1num, y1num, x2num, y2num, 'str1..str20'
						Schreibt in den Druckjob [print] an der Stelle x1num, y1num
						Die strings 'str1..str20'. Dabei wird eine Box um den Text 
						gezeichnet die bis zum Punkt x2num, y2num reicht. Alle 
						Koordinaten werden in 1/10 mm gemessen. Auch hier können 
						eB's gegeben werden. Wenn für x2num, y2num 
						[PRINT_POS_FREE], [PRINT_POS_FREE] übergeben
						wird, so wird die Größe der benötigten Fläche automatisch 
						berechnet. Wenn negative für x2num, y2num übergeben 
						werden, so wird das Rechteck nicht zwischen den Punkten 
						x1num, y1num und x2num, y2num gezeichnet, sondern von 
						x1num, y1num ausgehend um den Wert abs(x2num) in 
						X-Richtung und abs(y2num) in Y-Richtung aufgespannt. 
						Diese Art der Koordinaten-Interpretation nennen wir relativ 
						Koordinaten (rK). Für x2num und y2num können auch noch
						Folgende Werte übergeben werden:
						[PRINT_POS_FREE]				s.o.
						[PRINT_POS_LEFT]				x1 des letzten 
														eingefügten Objektes
						[PRINT_POS_TOP]				y1 des letzten 
														eingefügten Objektes
						[PRINT_POS_RIGHT]				x2 des letzten 
														eingefügten Objektes
						[PRINT_POS_BOTTOM]		y2 des letzten 
														eingefügten Objektes
						[PRINT_POS_LEFTMARGIN]		max. linker Druckwert.
						[PRINT_POS_RIGHTMARGIN]		max. rechter Druckwert.
						[PRINT_POS_TOPMARGIN]		max. oberer Druckwert.
						[PRINT_POS_BOTTOMMARGIN]	max. unterer Druckwert.

	PRINT_LIST			[print], x1num, y1num, x2num, y2num, [varList]
						Wie PRINT_BOX, nur dass anstelle einzelner Strings eine Variable 
						VAR_LIST übergeben werden kann.

	PRINT_RTF			[print], x1num, y1num, x2num, y2num, 'filename'
						Druckt eine RTF-Datei (mit allen Farben, Fonts, Großen und Tabulatoren) 
						an die angegebene Stelle.

	PRINT_RECT			[print], x1num, y1num, x2num, y2num
						Legt die zu verwendende Schreibfläche fest. Die Standardeinstellung ist 
						das ganze Blatt. Diese Einstellung hilft beim automatischen Seitenumbruch. 
						Siehe auch PRINT_PAGE.

	PRINT_PIC			[print], x1num, y1num, x2num, y2num, 'filename'
						Zeichnet in den Druckjob [print] das Bild 'filename' zwischen
						den Punkten x1num, y1num und x2num, y2num. Auch hier 
						gelten die rK, d.h. wenn z.B. für x2num, y2num -1, -1 über- 
						geben wird, so wird die Größe der benötigten Fläche 
						automatisch berechnet. 'filename' kann vom Typ bmp, gif, 
						pcx, tif, wmf, jpg und dxf (AutoCad) sein.

	PRINT_OUT		[print], num {, optimized {, x, y {, [boolCapturePrintDialog] {, numCopies4Dialog}}}}
						Druckt oder zeigt den Druckjob [print] in Abhängigkeit von 
						num : 
						[PRINT_OUT_DIRECT]		sofortiger Ausdruck
						[PRINT_OUT_DIRECT_SETUP]	zeigen des Druckeraus-
													wahl-Dialogfensters und
													dann Ausdruck.

						[PRINT_OUT_PREVIEW]		
							Zeigen des Druckjobs in einer Vorschau. Nur wenn diese Option 
							gewählt wurde, kann man noch folgende Parameter übergeben: 
							der boolean Wert "optimized" sorgt dafür, dass das 
							Anzeigefenster in Bezug auf den bedruckten Bereich der ersten 
							Seite des Dokumentes angepasst wird. D.h. wenn z.B. nur ein 
							Bild angezeigt werden soll, so wird dieses Bild vermutlich nicht 
							den kompletten Bildschirm ausfüllen.
							Mit "optimized" TRUE wird dann im Fenster nur das Bild 
							angezeigt. Zusätzlich kann man noch die Position des Fensters 
							auf dem Bildschirm bestimmen, in dem man die num Parameter x 
							und y bestimmt. Die Parameter x und y müssen wie 
							Feldkoordinaten innerhalb einer Maske bestimmt werden. 
							[boolCapturePrintDialog] wird TRUE, wenn der Benutzer aus der 
							Vorschau heraus gedruckt hat UND die Druck-Variable mit dem 
							Parameter bool_capture_dialog_print = TRUE definiert wurde.
							NUR für VPE 5 und höher:
							Mit numCopies4Dialog wird angegeben, welche Anzahl an Kopien 
							im Vorschaufenster als Vorgabe angeboten werden soll 
							(Default=1).

	PRINT_SAVE		[print], 'strFilename', [boolRes]
							Speichert den Druck in eine Datei. Mögliche 
							Datei-Erweiterungen sind:
						.VPE (um die Datei mit dem VPE-Viewer sichten zu können)
						Ab VPE6 können auch noch .PDF, .HTM und .XML verwendet 
						werden. In boolRes steht, ob die Datei gespeichert werden konnte.

	PRINT_LOAD	[print], 'strFilename', [boolRes]
						läd man eine Datei (mit dem Namen 'strFilename') vom Typ *.vpe (ab 
						VPE 5.x auch *.xml), die zuvor mit der VPE gespeichert wurde, in die 
						Print-Variable [print]. Es können damit keine Dateien vom Typ *.pdf 
						geladen werden! Die Print-Variable sollte zuvor geleert werden. 
						Wenn die Datei erfolgreich geladen wurde, wird [boolRes] TRUE 
						zurück gegeben, anderenfalls ist das Ergebnis FALSE.

	PRINT_BAR		[print], x1num, y1num, x2num, y2num, typ, 'str1','str2', pos1, pos2
	oder
	PRINT_BAR		[print], x1num, y1num, x2num, y2num, 2d-typ, [listText]

						Zeichnet in den Druckjob [print] einen Barcode zwischen den 
						Punkten x1num, y1num und x2num, y2num. Hier gelten 
						ebenfalls die rK. Je nach typ des Barcodes werden die zwei 
						Strings 'str1' und 'str2' in den Barcode umgesetzt. In 
						Abhängikeit von pos1 (0) wird der Text von 'str1' über dem 
						Barcode oder darunter pos1 (1) angeordnet oder pos1 (2) gar 
						nicht gezeigt. Das gleiche gilt für pos2 im Zusammenhang mit 
						'str2'. Typ kann folgende Werte annehmen:
	[BCT_2OF5]
*[BCT_2OF5MATRIX]
 [BCT_CODABAR]
*[BCT_CODE11]
*[BCT_CODE128]
*[BCT_CODE128A]
*[BCT_CODE128B]
*[BCT_CODE128C]
 [BCT_CODE39]
*[BCT_CODE39EXT] 
 [BCT_CODE93]
*[BCT_CODE93EXT]
*[BCT_EAN128]
 [BCT_EAN128A]
 [BCT_EAN128B]
 [BCT_EAN128C]
 [BCT_EAN13]
 [BCT_EAN13_2]
 [BCT_EAN13_5]
*[BCT_EAN2]
*[BCT_EAN5]
 [BCT_EAN8]
 [BCT_EAN8_2]
 [BCT_EAN8_5]
*[BCT_IDENTCODE]
*[BCT_INTELLIGENT_MAIL]
 [BCT_INTERLEAVED2OF5]
*[BCT_ISBN]
*[BCT_ISBN5]
*[BCT_LEITCODE]
*[BCT_MSI]
 [BCT_POSTNET]
*[BCT_PZN]
*[BCT_RM4SCC]
*[BCT_TELEPENA]
 [BCT_UPCA]
 [BCT_UPCA_2]
 [BCT_UPCA_5]
 [BCT_UPCE]
 [BCT_UPCE_2]
 [BCT_UPCE_5]
 
*[BCT_2D_DATA_MATRIX]
*[BCT_2D_QRCODE]
*[BCT_2D_MAXICODE]
*[BCT_2D_PDF417]
*[BCT_2D_AZTEC]

						* Barcodetypen sind nur mit VPE5 oder VPE6 verfügbar.

	

	PRINT_POS		[print], [num], posnum
						Extrahiert aus dem Druckjob [print] eine Koordinate in
						Abhängikeit von posnum, das Ergebnis wird in [num] zurück-
						gegeben. posnum kann die Werte annahmen (s.o.)
						[PRINT_POS_FREE]			
						[PRINT_POS_LEFT]			
						[PRINT_POS_TOP]				
						[PRINT_POS_RIGHT]		
						[PRINT_POS_BOTTOM]		
						[PRINT_POS_LEFTMARGIN]	
						[PRINT_POS_RIGHTMARGIN]	
						[PRINT_POS_TOPMARGIN]		
						[PRINT_POS_BOTTOMMARGIN]	

	PRINT_FILE 		[print], ‘strFilename’
Wird hier ein Dateiname angegeben, so wird beim Speichern einer  Druckvorschau der entsprechende Dateiname vorgeschlagen. Neben sinnvollen Dateinamen kann hier auch nur eine Dateierweiterung angegeben werden um lediglich das Ausgabenformat umzuschalten. Z.B. ‘.odt‘ um dem Benutzer beim Abspeichern der Druckvorschau lediglich das Ausgabeformat ‘.odt‘ vorzuschlagen. 
	Mögliche Ausgabeformate sind .pdf, .vpe, .xml, .html, .odt
	Mit dem gleichen Befehl kann man Folgendes erreichen:
	Sollte ein Druckertreiber z.B. eine Datei als Ausgabe vorschlagen (z.B. der eDocPrintPro – Druckertreiber schlägt bei unveränderten Einstellungen meist eine PDF-Datei mit dem Namen der Anwendung vor) – dann kann dieser Ausgabedateiname mit PRINT_FILE festgelegt werden. 
	Sollte PRINT_FILE [print], ‘‘ aufgerufen werden, dann wird der Ausgabedateiname zurückgesetzt und das Ausgabeformat auf AUTO gesetzt. Die Druckengine schlägt dann “vpe“ aus Ausgabeformat per Default vor.

	PRINT_CHART		[print], strOption, param1 {, param2{, param3{, param4{, param5}}}}
					Erstellen von Charts in einem Druck.
						
					Mit strOption = ‘AddChart‘ muss immer gestartet werden. Hier 
					werden mit den nächsten zwei Parametern die Anzahl der Spalten 
					und Reihen des Charts angegeben: p1=numColumns, p2=numRows

					Mit strOption = ‘FontTitle‘ kann im Parameter 1 der Name für den 
					Font für Titel und Untertitel angegeben werden. (Nur ab VPE7x)
		
					Mit strOption = ‘FontTitleFaktor‘ kann im Parameter ein Wert zur Skalierung der 
					Fontgröße des Titels angegeben werden. Erlaubte Werte sind 1 bis 100, 
					Standard ist 10.

					Mit strOption = ‘FontSubTitleFaktor‘ kann im Parameter ein Wert zur Skalierung 
					der Fontgröße des Untertitels angegeben werden. Erlaubte Werte sind 1 bis 100, 
					Standard ist 10.

					Mit strOption = ‘FontFootNote‘ kann im Parameter 1 der Name für den Font für 
					die Fußnotiz angegeben werden. (Nur ab VPE7x)

					Mit strOption = ‘FontFootNoteFaktor‘ kann im Parameter ein Wert zur 
					Skalierung der Fontgröße der Fußnotiz angegeben werden. Erlaubte Werte sind 
					1 bis 100, Standard ist 10.

					Mit strOption = ‘FontAxes‘ kann im Parameter 1 der Name für den Font für die 
					x- und y-Achse angegeben werden. (Nur ab VPE7x)

					Mit strOption = ‘FontAxesTitelFaktor‘ kann im Parameter ein Wert zur 
					Skalierung der Fontgröße der Achsenüberschrift angegeben werden. Erlaubte 
					Werte sind 1 bis 100, Standard ist 10.

					Mit strOption = ‘FontLegend‘ kann im Parameter 1 der Name für den Font für die 
					Legende angegeben werden. (Nur ab VPE7x)

					Mit strOption = ‘FontLegendFaktor‘ kann im Parameter ein Wert zur Skalierung 
					der Fontgröße die Legende angegeben werden. Erlaubte Werte sind 1 bis 100, 
					Standard ist 10.

					Mit strOption = ‘FontLabels‘ kann im Parameter 1 der Name für den Font für die 
					Label angegeben werden. (Nur ab VPE7x)

					Mit strOption = ‘FontXLabelFaktor‘ kann im Parameter ein Wert zur Skalierung 
					der  Fontgröße die X-Achen-Label angegeben werden. Erlaubte Werte sind 1 bis 
					100, Standard ist 10.

					Mit strOption = ‘FontYLabelFaktor‘ kann im Parameter ein Wert zur Skalierung 
					der  Fontgröße die Y-Achen-Label angegeben werden. Erlaubte Werte sind 1 bis 
					100, Standard ist 10.

					Mit strOption = ‘Title‘ kann im Parameter 1 der Titel des Charts 
					angegeben werden p1 = strText

					Mit strOption = ‘Subtitle‘ kann im Parameter 1 der Untertitel des 
					Charts angegeben werden p1 = strText

					Mit strOption = ‘Footnote‘ kann im Parameter 1 der Fußtext des 
					Charts angegeben werden p1 = strText

					Mit strOption = ‘XAxisTitle‘ kann im Parameter 1 die 
					X-Achsen-Beschriftung des Charts angegeben werden 
					p1 = strText

					Mit strOption = ‘YAxisTitle‘ kann im Parameter 1 die 
					Y-Achsen-Beschriftung des Charts angegeben werden 
					p1 = strText

					Mit strOption = ‘LegendPos‘ kann im Parameter 1 die 
					Position der Legende angegeben werden p1 = numWhere
					-1	none 
					0	right 
					1	right top 
					2	right bottom 
					3	left 
					4	left top 
					5	left bottom 
					6	top 
					7	bottom

					Mit strOption = ‘LegendBorder‘ kann im Parameter 1 die 
					Sichtbarkeit des Rahmens der Legende angegeben werden 
					p1 = numBool (0=FALSE, 1=TRUE)

					Mit strOption = ‘LegendPercent‘ kann im Parameter 1 die 
					Sichtbarkeit der Prozentwerte der Legende angegeben werden 
					(nur bei Charts vom Typ PIE) p1 = numBool (0=FALSE, 1=TRUE)

					Mit strOption = ‘AddLegend‘ kann im Parameter 1 die 
					Beschriftung der Legende(n) hinzugefügt werden.
					p1 = strText, für jede Spalte kann eine Text angegeben werden.
					Der Befehl wird dazu einfach wiederholt ausgeführt.

					Mit strOption = ‘AddValue‘ kann im Parameter 1 die 
					Spalte angegeben werden (mit 1 startend) und im Parameter 2 der 
					zugehörige Wert.
					p1 = numColumn, p2 = floatValue
					Der Befehl wird dazu einfach solange wiederholt ausgeführt, bis alle 
					Werte abgefüllt sind.

					Mit strOption = ‘AddGap‘ kann im Parameter 1 die Spalte angegeben werden (mit 1 startend) um das Fehlen eines Wertes anzuzeigen (wenn man 0 eingäbe, würde der Chart an der Stelle einen echten 0-Wert anzeigen. p1 = numColumn

			Mit strOption = ‘AddColumn‘ kann eine Spalte zum Chart 
			hinzugefügt werden.

			Mit strOption = ‘AddRow‘ kann eine Zeile zum Chart hinzugefügt 
			werden.

					Mit strOption = ‘XLabelStart‘ kann im Parameter 1 der Wert 
					angegeben werden, mit dem die Spaltenbeschriftung starten soll   
					p1 = numStartvalue

					Mit strOption = ‘BkgColor‘ kann im Parameter 1 die Farbe für den Hintergrund 
					des Charts angegeben werden. p1 = numColor

					Mit strOption = ‘BkgMode‘ kann im Parameter 1 der Hintergrund-Modus gesetzt 
					werden. 
					p1 = numBool   0 fest    oder   1 transparent

					Mit strOption = ‘GridType‘ kann im Parameter 1 der Modus angegeben werden 
					mit dem die Chart-Grid-Achsen gezeichnet werden.
					p1 = numType   -1 keine   
							0 beide Achsen   
							1 nur X-Achse   
							2 nur Y-Achse

					Mit strOption = ‘GridColor‘ kann im Parameter 1 die Farbe für das Grid 
					angegeben werden.  p1 = numColor

					Mit strOption = ‘ValColor‘ kann im Parameter 1 die Spalte und im Parameter 2 
					die Farbe für die Spalte angegeben werden.  p1 = numColumn, p2 = numCOlor

					Mit strOption = ‘ScrollBars‘ kann im Parameter 1 die Anzeige der Scrollbars 
					festgelegt werden. 
					p1 = numBool   0 unsichtbar   oder   1 sichtbar

					Mit strOption = ‘Draw‘ können im Parameter 1-4 die Koordinaten des 
					Charts angegeben werden, der Parameter 5 gibt den Typ des Charts 
					an.
					p1-p4 = x1num, y1num, x2num, y2num (rK ist möglich)
					p5 = numType
						0	Point 
						1	Line 
						2	Bar 
						3	Stacked Bar Absolute 
						4	Stacked_Bar Percent 
						5	3D Bar 
						6	3D Stacked Bar Absolute 
						7	3D Stacked Bar Percent 
						8	Pie 
						9	3D Pie 
						10	Area Absolute 
						11	Area Percent

	PRINT_LINE		[print], x1num, y1num, x2num, y2num
						Zeichnet in dem Druckjob [print] zwischen den Punkten 
						x1num, y1num und x2num, y2num eine Linie. rK ist nicht 
						möglich.

	PRINT_PAGE		[print]{, num {, numPageBreakType}}
						Wenn num übergeben wird, so wird im Druckjob [print] auf 
						diese Seite gewechselt, anderenfalls wird eine neue Seite 
						begonnen.
						Der Wert PageBreakType bestimmt wie sich der Seitenumbruch für 
						die VPE verhalten soll:
						[VPE_AUTO_BREAK_ON] 	Automatischer Seitenumbruch 
												angeschaltet 
												Der obere und untere Rand der 
												vorgegebenen Schreibfläche wird 
												verwendet. Das ist normalerweise 
												das ganze Blatt. Die Fläche kann mit 
												PRINT_RECT festgelegt werden.		
						[VPE_AUTO_BREAK_OFF] 	verhält sich genau wie 
												[VPE_AUTO_BREAK_ON] jedoch 
												wird kein automatischer 
												Seitenumbruch verwendet.
						[VPE_AUTO_BREAK_NO_LIMITS] Kein automatischer 
												Seitenumbruch 
												und keinerlei Begrenzungen beim 
												Schreiben (Standard-Einstellung in 
												CARA).	
						[VPE_AUTO_BREAK_FULL] 	Automatischer Seitenumbruch ist 
												eingeschaltet und die gesamte 
												vorgegebene Schreibfläche wird 
												verwendet 
												(nur ab VPE 5.0).

	PRINT_CLR		[print]
						Säubert den gesamten print-Job von allen "Eingaben" und gibt 
						allen damit verbundenen Speicher frei. print kann dann neu
						beschrieben werden.

	PRINT_SET		[print],'str', {bool|num {, boolNoVPE}}
						Ruft einen Drucker-Setup-Dialog für den aktuellen print-Job 
						auf. Mit 'str' muß ein gültiger Dateiname (inkl. Pfad) 
						übergeben werden. Die getätigten Einstellungen werden in 
						der darin angegebenen Datei gespeichert. Wenn der Aufruf 
						erneut ausgeführt wird und der User bereits einmal eine 
						Einstellung vorgenommen hat, wird der Dialog nicht mehr 
						angezeigt und die gespeicherten Einstellungen geladen. Falls 
						bool übergeben wird TRUE ist, wird der Einstellungsdialog in 
						jedem Fall gezeigt.
						Besipiel :	Hier wird in [Str] ein Dateiname zusammen-
									gebaut, der auf das Spezial-Verzeichnis der 
									CARA-Anwendung verweist. Darin wird eine
									Datei angelegt die mit den Buchstaben "RG"
									beginnt (z.B. für einen Rechnungsdruck) und
									dann einen Kürzel für die ausführende Station 
									enthält. Dadurch kann jede Station eine eigne
									Einstellung für den Rechnungsdruck erstellen,
									ohne die Einstellungen anderer zu überschrei-
									ben. Als Dateierweiterung wurde ".PST" 
									verwendet (z.B. als Kürzel für PrintSeT).
						CALC [S] AS CON([PRINTSET_PATH],'RG',[STATION_SHORT],'.pst')
						PRINT_SET [PrnList],[S]
						
						Wenn num anstelle von bool übergeben wird, so kann man mit 
						folgende Werte verwendet:
						0=Standard-Drucker
						1=kein Dialog (wie bool FALSE)
						2=zeige Dialog (wie bool TRUE)
			
						Wird boolNoVPE TRUE übergeben, ändert sich einiges:
						Dann wird nicht mehr der von der VPE stammende Drucker-Auswahl-
						Dialog und die damit verbundene Technik, die in der VPE zum 
						Speichern der Einstellungen verwendet wird, eingesetzt. Anstelle des 
						VPE-Dialogs, wird (ebenfalls) der Standard-Windows-Dialog 
						eingeblendet, jedoch eine eigene Technik zum Speichern der 
						Einstellungen verwendet. Vorteil dieser Option ist, dass auch 
						IP- und Netzwerk-Drucker unter Windows-XP direkt angesprochen 
						werden können. Dieser Dialog muss aber VOR dem Anlegen der 
						VAR_PRINT (für den VPE-Druck) angesprochen werden, da mit der 
						neuen Technik der Standard-Drucker nach dem Laden der 
						Einstellungen umgestellt wird und dann die VPE auf den Standard-
						Drucker umgeleitet wird (und dies ist ja dann der Drucker, dessen 
						Einstellungen zuvor geladen wurden). Wenn kein VPE-Dialog 
						verwendet werden soll, kann man einfach anstelle der [print] Variable, 
						irgendeine andere Variable z.B. [dummyBool] übergeben werden. Der 
						Dialog muss nicht geladen werden, wenn eine Vorschau erzeugt wird. 
						Diese Speichertechnik verwendet NICHT die gleichen Dateinamen, 
						wie die VPE. Es entstehen zwei Dateien pro Einstellung. Der 
						Einfachheit halber wird an den VPE-Dateinamen ein „d“ für die erste 
						Datei und ein „s“ für die zweite Datei angehängt. Wenn man also 
						„Test.pst“ als Dateinamen verwendet, so entstehen die Dateien 
						„test.pstd“ und „test.psts“.

	PRINT_DEVICE		[printVar], [strVar] {, boolGetOrSet}
						Wenn GetOrSet nicht übergeben wird oder wenn es FALSE 
						übergeben wird, dann HOLT der Befehl den aktuell im Druckjob 
						eingestellten Druckernamen ab und übergibt ihn in [resStr] – daran 
						hat sich nichts geändert.
						Wenn GetOrSet TRUE ist, wird der in [resStr] angegebene bzw. 
						übergebene Druckername verwendet um den aktuellen Druckjob dort 
						hin umzuleiten und den Drucker zu SETZEN. 

	PRINT_PDF_VERSION 	[printVar], [numVersion] {, boolGetOrSet}
						Wenn boolGetOrSet nicht übergeben wird oder wenn es FALSE 
						übergeben wird, dann HOLT der Befehl die aktuell im Druckjob 
						eingestellte PDF-Version ab und übergibt sie in [numVersion].
						Wenn boolGetOrSet TRUE ist, wird die in [numVersion] angegebene 
						bzw. übergebene PDF-Version verwendet um im aktuellen Druckjob 
						die PDF-Version zu SETZEN. 
						Der Wert numVersion kann sich aus folgenden Werten 
						zusammensetzen:
						PDF_VERSION_ACROBAT_4		1300
						PDF_VERSION_ACROBAT_5		1400

	PRINT_PDF_ENCRYPTION	[print], [numEncryption] {, boolGetOrSet  {, UserPassword {, OwnerPassword}}}
						Wenn boolGetOrSet nicht übergeben wird oder wenn es FALSE 
						übergeben wird, dann HOLT der Befehl die aktuell im Druckjob 
						eingestellte PDF-Verschlüsselung ab und übergibt sie in 
						[numEncryption].
						Wenn boolGetOrSet TRUE ist, wird die in [numEncryption] 
						angegebene bzw. übergebene PDF- Verschlüsselung verwendet um 
						im aktuellen Druckjob die PDF- Verschlüsselung zu SETZEN. 
						Wenn die aktuelle PDF-Version = PDF_VERSION_ACROBAT_4 ist, 
						wird die maximale Passwortlänge automatisch auf 40 Zeichen 
						gesetzt. Bei der PDF_VERSION_ACROBAT_5 beträgt die maximale 
						Passwortlänge 128 Zeichen.
						Wenn die Verschlüsselung eingeschaltet wird, sollte ein Passwort für 
						den User und den Owner übergeben werden.  
						Der Wert numEncryption kann sich aus folgenden Werten 
						zusammensetzen:
						PDF_ENCRYPT_NONE	0
						PDF_ENCRYPT_STREAM	1

	PRINT_PDF_PROTECTION 	[printVar], [numFlag] {, boolGetOrSet}
						Wenn boolGetOrSet nicht übergeben wird oder wenn es FALSE 
						übergeben wird, dann HOLT der Befehl den aktuell im Druckjob 
						eingestellten PDF-Schutz ab und übergibt ihn in [numFlag].
						Wenn boolGetOrSet TRUE ist, wird die in [numFlag] angegebene
						bzw. übergebene PDF-Schutz-Flag verwendet um im aktuellen 
						Druckjob den PDF_Schutz zu SETZEN. 
						WICHTIG: die PRINT_PDF_PROTECTION kann nur gesetzt werden, 
						wenn auch die PRINT_PDF_ENCRYPTION eingeschaltet wurde.
						Der Wert numFlag kann sich aus folgenden Werten 
						zusammensetzen:
						PDF_ALLOW_NONE		0	vollständiger Schutz, kein 
													Flag wird gesetzt
						PDF_ALLOW_PRINT         	4  	erlaubt den Druck des 
													Dokuments (siehe auch das 
													Flag																PDF_ALLOW_HIQ_PRINT)
						PDF_ALLOW_MODIFY        	8  	erlaubt die Änderung des 
													Dokumentinhalts durch 
													andere Operationen als die, 
													die durch die Flags 
													PDF_ALLOW_TA_IFF, 
													PDF_ALLOW_FILL_IFF und 
													PDF_ALLOW_ASSEMBLE 
													gesteuert werden
						PDF_ALLOW_COPY         	16  	Nur PDF v1.4: erlaubt das 
													Kopieren oder anderweitige 
													Extrahieren von Text und 
													Grafiken aus dem 
													Dokument durch andere 
													Operationen als die 
													von 
													PDF_ALLOW_EXTRACT 
													Gesteuerten
						PDF_ALLOW_TA_IFF       	32  	Erlaubt das Hinzufügen 
													oder Ändern von 
													Textanmerkungen, das 
													Ausfüllen interaktiver 
													Formularfelder und - wenn 
													PDF_ALLOW_MODIFY 
													ebenfalls verwendet wird – 
													das Erstellen oder Ändern 
													interaktiver Formularfelder 
													(einschließlich 
													Unterschriftenfelder)
						PDF_ALLOW_FILL_IFF    	256  	Nur PDF v1.4: erlaubt das 
													Ausfüllen vorhandener 
													interaktiver Formularfelder 
													(einschließlich
													 Unterschriftsfelder), auch 
													wenn PDF_ALLOW_TA_IFF 
													nicht verwendet wird
						PDF_ALLOW_EXTRACT     	512  	Nur PDF v1.4: Erlaubt das 
													Extrahieren von Text und 
													Grafiken (zur Unterstützung 
													der Zugänglichkeit für 
													behinderte Benutzer oder 
													für andere Zwecke)
						PDF_ALLOW_ASSEMBLE   	1024  	Nur PDF v1.4: Erlaubt das 
													Zusammensetzen des
													Dokuments (Einfügen, 
													Drehen oder Löschen von 
													Seiten und Erstellen von 
													Lesezeichen oder 
													Miniaturbildern), auch wenn 
													PDF_ALLOW_MODIFY 
													nicht verwendet wird
						PDF_ALLOW_HIQ_PRINT  	2048  	Nur PDF v1.4: Erlaubt das 
													Drucken des Dokuments 
													in einer Darstellung, aus der 
													eine originalgetreue digitale 
													Kopie des PDF-Inhalts 
													erzeugt werden kann. Wenn 
													dieses Flag NICHT 
													angegeben ist (und 
													PDF_ALLOW_PRINT 
													verwendet wird), ist der 
													Druck auf eine Darstellung 
													auf niedriger Ebene 
													beschränkt, die 
													möglicherweise von 
													schlechterer Qualität ist.
						PDF_ALLOW_ALL        	3900  	kein Schutz, alle Flags sind 
													gesetzt

	PRINT_CHOOSE			Öffnet einen Dialog zum Auswählen des Druckers unter 
						Windows. Dieser Dialog steht für allgemeine Windows-An-
						Wendungen zur Verfügung. CARA-Print-Jobs sollten mit 
						PRINT_SET eingestellt werden.

	PRINT_ESC			'str'	Sendet direkt an den aktuellen Drucker eine ESC-
						Sequenz.
						Bevor jedoch ein beliebiger 'str' an den Drucker versendet 
						wird, muß der Befehl "gestartet" werden. Dies geschieht durch 
						den Aufruf PRINT_ESC [PRINT_ESC_START]. Wenn ein
						oder mehrere 'str' an den Drucker verschickt wurden, muß er
						Befehl "beendet" werden. Dies geschieht durch den Aufruf
						PRINT_ESC [PRINT_ESC_END]

	IDENTIFIER_EXIST		'str',[bool]{,[num1]{,[num2]}}
						Gibt in [bool] zurück ob der Identifier 'str' existiert. An [num1]
						kann man erkennen welche Art von Variable gefunden wurde.
						[num1] kann folgende Werte annehmen:
						[IDENTIFIER_NONE]	Keine Varibale
						[IDENTIFIER_GLOBAL]	globale Variable
						[IDENTIFIER_SCRIPT]	Script Variable
						[IDENTIFIER_LOCAL]	lokale Variable
						An [num2] kann man den Variablen-Typ erkennen:
						[SCRIPT_NUM]
						[SCRIPT_FLOAT]
						[SCRIPT_STRING]
						[SCRIPT_BOOLEAN]
						[SCRIPT_DATE]
						[SCRIPT_TIME]
						[SCRIPT_LIST]
						[SCRIPT_QUERY]
						[SCRIPT_BROWSER]
						[SCRIPT_MASK]
						[SCRIPT_TEXT]
						[SCRIPT_STREAM]
						[SCRIPT_PRINT]

	COM_OPEN		[com]{,[bool]}
						Öffnet die Schnittstelle auf die die Variable [com] verweist. 
						[com] muß vom Typ [VAR_COM] sein. In [bool] wird das 
						Ergebnis des Vorgangs abgelegt.
	COM_CLOSE		[com]	Schließt die Schnittstelle auf die die Variable [com] verweist. 
						[com] muß vom Typ [VAR_COM] sein.
	COM_WRITE		[com],'str'{,[bool]}
						Schreibt auf Schnittstelle auf die die Variable [com] verweist 
						den String 'str'. [com] muß vom Typ [VAR_COM] sein. In 
						[bool] wird das Ergebnis des Vorgangs abgelegt.
	COM_READ		[com],[str]{,[bool]}
						Liest aus Schnittstelle auf die die Variable [com] verweist 
						den String [str]. [com] muß vom Typ [VAR_COM] sein. In 
						[bool] wird das Ergebnis des Vorgangs abgelegt.
	COM_TERMINAL		[com]	Öffnet das Terminal-Fenster für die Schnittstelle auf die die 
						Variable [com] verweist. [com] muß vom Typ [VAR_COM] 
						sein.

	NOTE_READ			[list],[bool],'str',num,float
						Läd in [list] den Text einer Notiz-Manager-Bemerkung ein.
						Das Ergebnis der Operation wird in [bool] abgelegt.
						'str' muß den Namen der Tabelle enthalten zu der der 
						Datensatz mit der RecordID float gehört. In num muß die 
						Notiz-ID übergeben werden. Als Standard liegen für num 
						folgende Werte vor:
						1 : Text 1
						2 : Text 2
						3 : Intern
						4 : Immer
						Wenn in der Applikations-INI-Datei unter der Sektion
						[FreeNotes] weitere Notitz-Typen veranlagt wurden, so 
						können die dort verwendeten ID's ebenfalls eingesetzt 
						werden.

	NOTE_WRITE		[list],[bool],'str',num,float{, 'strXRefName'{, boolNoWordWrap}}
						Schreibt den in [list] befindlichen Text in eine Notiz-Manager-
						Bemerkung zu einem bestehenden Datensatz.
						Das Ergebnis der Operation wird in [bool] abgelegt.
						'str' muß den Namen der Tabelle enthalten zu der der 
						Datensatz mit der RecordID float gehört. In num muß die 
						Notiz-ID übergeben werden. Als Standard liegen für num 
						folgende Werte vor:
						1 : Text 1
						2 : Text 2
						3 : Intern
						4 : Immer
						Wenn in der Applikations-INI-Datei unter der Sektion
						[FreeNotes] weitere Notitz-Typen veranlagt wurden, so 
						können die dort verwendeten ID's ebenfalls eingesetzt 
						werden.
						Falls 'strXRefName' übergeben wird, wird die Notizbreite nicht aus 
						dem Tabellennamen sondern aus der Xreferenz des entsprechenden
						Eintrags in der Tabelle “TableFld“ ermittelt.
						Falls boolNoWordWrap FALSE ist wird mit der unter 'str' 
						(TableName) oder 'strXRefName' verfügbaren Notizbreite der Text 
						umgebrochen. Default für boolNoWordWrap ist TRUE.
						Wenn eine Notiz gespeichert wird und die Notiz keinerlei Zeilen 
						enthält, wird die Notiz gelöscht.

	NOTE_SHOW		'str',num,float,bool{,'xRef'}
						Zeigt den Text einer Notiz-Manager-Bemerkung an.
						'str' muß den Namen der Tabelle enthalten zu der der 
						Datensatz mit der RecordID float gehört. In num muß die 
						Notiz-ID übergeben werden. Als Standard liegen für num 
						folgende Werte vor:
						1 : Text 1
						2 : Text 2
						3 : Intern
						4 : Immer
						Wenn in der Applikations-INI-Datei unter der Sektion
						[FreeNotes] weitere Notitz-Typen veranlagt wurden, so 
						können die dort verwendeten ID's ebenfalls eingesetzt 
						werden. Ist bool TRUE wird die Notiz ReadOnly angezeigt, 
						anderenfalls kann die Notiz sogar editiert werden.
						Wenn die Notiz ReadOnly gezeigt werden soll und die Notiz keinen 
						Text enthalten sollte, wird sie ohne Kommentar gar nicht angezeigt.
						Falls 'xRef' angegeben wird, wird anstelle des Tabellennamens beim
						Öffnen der Notiz die X-Referenz in der Tabelle “TableFld“ zum 
						Ermitteln der Notizfenster-Breite verwendet.

	PROCESS_MESSAGES		Gibt Rechenzeit an den Rechner zurück, so daß andere 
						Prozesse zwischenzeitlich abgearbeitet werden können.

	CARA_HALT			Beendet die laufende CARA-Application sofort.

	LOGIN_DATA		float {, numMode}
						Zeigt einen Dialog in dem man die Login-Daten zu der
						ID float aus der Tabelle, die in der INI-datei als 
						 UserTabelName angegeben wurde.
						Wenn numMode > 0 ist, werden die Felder User-Level und 
						UserID protected gesetzt. Falls numMode > 1 ist, wird auch der Login-
						Name protected gesetzt.

	INI_READ			[res],[value],type,'filename','key','section'
						Liest aus der INI-Datei 'filename' aus der 'section' den 'key' 
						vom Typ type in die zu type passende Variable [value], in der 
						boolean Variable [res] steht, ob die Funktion erfolgreich 
						ausgeführt werden konnte. type muß numerisch übergeben 
						werden und kann folgende Werte annehmen:
						[SCRIPT_NUM]			für VAR_NUM
						[SCRIPT_STRING]			für VAR_STR
						[SCRIPT_BOOLEAN]	für VAR_BOOL
						Der Inhalt der Variable [value] ist der Default-Wert für den 
						Schlüssel.

	INI_WRITE			[res],[value],type,'filename','key','section'
						Schreibt in die INI-Datei 'filename' in die 'section' in den 'key' 
						vom Typ type den Inhalt der zu type passenden Variable 
						[value], in der boolean Variable [res] steht, ob die Funktion 
						erfolgreich ausgeführt werden konnte. type muß numerisch 
						übergeben werden und kann folgende Werte annehmen:
						[SCRIPT_NUM]			für VAR_NUM
						[SCRIPT_STRING]			für VAR_STR
						[SCRIPT_BOOLEAN]	für VAR_BOOL

	INI_READ_SECTION		[res],[names],[values],'filename','section'
						Liest aus der INI-Datei 'filename' die 'section', wobei in die 
						VAR_LIST [names] die einzelnen Schlüssel der Section 
						gelesen werden und die zugehörigen Werte der Schlüssel in 
						die VAR_LIST [values]. In der boolean Variable [res] steht, ob
						die Funktion erfolgreich ausgeführt werden konnte.

	INI_WRITE_SECTION	[res],[names],[values],'filename','section'
						Schreibt in die INI-Datei 'filename' die 'section', wobei in der 
						VAR_LIST [names] die einzelnen Schlüssel der Section 
						stehen müssen und die zugehörigen Werte der Schlüssel in 
						der VAR_LIST [values] angegeben werden müssen. In der 
						boolean Variable [res] steht, ob die Funktion erfolgreich 
						ausgeführt werden konnte.

	INI_DELETE_SECTION	[res],'filename','section'
						Löscht in der INI-Datei 'filename' die 'section'. In der boolean 
						Variable [res] steht, ob die Funktion erfolgreich ausgeführt 
						werden konnte.

	SET_MAIN_HEADER		'header'
						Setzt den Header der Anwendung und den Titel, der in der
						Taskleiste angezeigt wird.

	TIMER_START		[res],'name','script',num
						Startet einen Timer, der CARA gegenüber mit 'name' 
						identifiziert wird. Alle num Millisekunden wird dann das 'script' 
						ausgeführt (außer wenn das Script bereits gerade läuft).
						[res] muß vom Typ VAR_BOOL sein, [res] wird TRUE, wenn 
						der Timer gestartet werden konnte.

	TIMER_STOP		[res],'name'
						Stoppt den Timer 'name'. [res] muß vom Typ VAR_BOOL 
						sein, [res] wird TRUE, wenn der Timer gestoppt werden 
						konnte.

	WAIT_INFO			'head','info'{,bool {,floatWifth {,floatHeight {,FontFactor}}}}
						Zeigt ein Fenster mit der Überschrift 'head' und dem Inhalt 
						'info'. Das Fenster wird beim Verlassen des Scriptes 
						automatisch geschlossen (falls in dem Script nicht der Befehl
						END_WAIT verwendet wurde). Wenn der Befehl wiederholt 
						verwendet wird, wird kein zweites Fenster geöffnet sondern 
						lediglich der Fenster-Inhalt und die Überschrift erneuert.
						Wenn bool TRUE gesetzt wird, so wird ein Abbruch-Knopf 
						eingeblendet. Falls der User diesen Knopf betätigt, wird die 
						globale Script-Variable [WAIT_BREAK] den Wert TRUE 
						erhalten, man kann dann im Script auf diese Useraktion 
					    reagieren. . Wichtig : Wenn die WAIT_INFO ohne Abbruch-
						Knopf schon geöffnet wurde, kann durch ein reines Update 
						des Fensters der Abbruch-Knopf nicht eingeblendet werden, 
						man muß dann das Fenster mit END_WAIT einmal schließen 
						und erneut öffnen um den Knopf einblenden zu können.
						Mit floatWidth und floatHeight kann man die Höhe und die Breite des 
						Fensters im gleichen Maße verändern, wie dies bei 
						Dialog-Elementen der Eingabe-Masken der Fall ist.
						Mit FontFactor kann die Größe der Darstellung skaliert werden.
						Standard ist der Wert 1 (oder das was in der Systemvariable 
						[WAIT_FONT_FACTOR] hinterlegt ist (Ini-Datei-Schlüssel 
						WaitFontFactor). Ein Wert von 2 würde die Darstellung verdoppeln.
						
	END_WAIT				Schließt das Fenster, daß mit WAIT_INFO geöffnet wurde.

	NEW_RECORD		[boolRes],'tablename',[recordid]{{{, boolUseDefRec}, boolUseID}, boolCopyID}
						Legt in der Tabelle 'tablename' einen Datensatz mit einer 
						neuen Recordid an und gibt die neu erzeugte Datensatzid in
						[recordid] (VAR_FLOAT) zurück. Der Erfolg der Operation 
						kann in [boolRes] (VAR_BOOL) abgelesen werden. Es 
						werden max. 10 Versuche unternommen den Datensatz in 
						der Tabelle anzulegen. Zwischen den Versuchen werden 
						500ms lange Pausen eingelegt. Wenn der optionale Parameter 
						boolUseDefRec den Wert TRUE hat, geht das Anlegen eines
						Records sehr viel schneller - wenn sich in der Tabelle 'tablename'
						ein Datensatz befindet, dessen RecordID = 0 oder 1 ist. (Welcher
						 Wert genau verwendet wird, ist von der Definition in der Tabelle
						 "TableFld" abhängig.) Wenn der optionale Parameter boolUseID
						 den Wert TRUE hat, wird versucht mit der RecordID zu speichern,
						 die in [recordid] übergeben wurde es wird vom System dann nur mit
						dieser RecordID und nur ein einziges Mal versucht zu speichern!
						Wenn boolCopyID = TRUE ist, muß in [recordid] eine bereits
						bestehende RecordID übergeben werden und  boolUseID muß in
						diesem Fall mit FALSE übergeben werden. Dann wird ein neuer
						Datensatz mit dem Inhalt vom Ausgangsdatensatz angelegt und die
						neue ID in [recordid] zurückgegeben.

	DOCUMENTS		'tablename', recordid {,'header'{, ItemID{,[mask]}}}
						Ruft den Dokumenten-Manager zu dem Datensatz mit der
						Datensatz-ID recordID aus der Tabelle tablename auf.
						Der Dokumenten-Manager wird nur geöffnet, wenn die 
						Tabelle tablename existiert und die DatensatzID recordID in 
						dieser Tabelle existiert – oder wenn recordID genau den Wert 
						0 enthält (globale Ordner für eine spezifische Tabelle).
						Ausnahme: Wenn tablename den Wert [GLOBAL_FILES] 
						enthält, dann wird der Dokumenten-Manager in jedem Fall 
						geöffnet– auf diese Weise kann man eine beliebige Anzahl 
						von Datensatz- und Tabellen unabhängigen Dokumenten-
						Ordnern anlegen. Falls 'header' übergeben wird, wird in der 
						Fenstertitel-Leiste des Dokumenten-Managers diese 
						Information mit angezeigt. Dies soll dem User besonders bei 
						freien Ordnern helfen einen Bezug zu den angezeigten Daten 
						zu erkennen. Wenn ItemID die RecordID eines gültigen
						Aktenordner-Eintrags ist, dann wird das Detail-Fenster direkt nach
						dem Ordner-Fenster geöffnet. Wird eine [mask] angegeben, so wird
						im Anschluß der [mask!MASK_HOOK_DOCMGR_EXIT] ausgeführt.

	DOCUMENT_DIRECT		recordid {,[mask]}
						Erlaubt es mit der RecordID eines Ordner-Eintrages
						(DocMgrI.RecordID)  direkt das hinterlegte Dokument mit dem
						dazugehörigen Programm aufzurufen. Sollt das Dokument nicht
						existieren und eine Vorlage angegeben worden sein, wird die
						Vorlage automatisch kopiert. Wird eine [mask] angegeben, so wird
						im Anschluß der [mask!MASK_HOOK_DOCMGR_EXIT] ausgeführt.

	DOCUMENT_CREATE		[boolRes] {,[mask]}
						Erlaubt es einen Dokumentenordner-Eintrag aus der Engine heraus
						anzulegen, wobei alle in der Detail-Maske des
						Dokumentenmanagers vorkommnenden Felder über einen neuen
						Satz an globalen Variablen vorbelegt werden kann:
					[DOCU_MGR_REL_REC_ID] 			(VAR_FLOAT)
													RecordID des relationalen
													Datensatzes
					[DOCU_MGR_REL_REC_FLAG]			(VAR_NUM)
													RecFlag des relationalen
													Datensatzes
					[DOCU_MGR_TABLE_NAME]			(VAR_STR)
													Tabellen-Name des relationalen
													Datensatzes
					[DOCU_MGR_HEADER]					(VAR_STR)    Überschriften-
													Anhang für den Ordner (nur
													Anzeige, wird nicht gespeichert)
					[DOCU_MGR_REGISTER_NO]			(VAR_NUM)    
													Welches Register soll im DocMgr
													geöffnet sein
					[DOCU_MGR_HEADER_ID]				(VAR_FLOAT)
													ID des zugehörigen Ordners
					[DOCU_MGR_ITEM_NOTE]				(VAR_STR)
													Bemerkungszeile
					[DOCU_MGR_ITEM_ID]					(VAR_FLOAT)
													RecordID des (neuen) Ordner-
													Eintrages
					[DOCU_MGR_NOTE_FILE_NAME]	(VAR_STR)
													Textdatei mit dem Langtext
					[DOCU_MGR_LEVEL]					(VAR_NUM)
													Dokumentenlevel 
					[DOCU_MGR_CREATOR_ID]			(VAR_FLOAT)  
													Anleger (Mitarbeiter) ID
					[DOCU_MGR_CREATE_DT_ID]			(VAR_FLOAT)  
													gepackt: Date & Time vom
													Anlagebeginn
					[DOCU_MGR_CREATE_RUN_DT_ID]       	(VAR_FLOAT)
													gepackt: Date & Time vom
													Anlageende
					[DOCU_MGR_CREATE_TYPE_ID]         	(VAR_FLOAT)
													ID des Choicereintrages für die
													Anageart
					[DOCU_MGR_NEXT_PROC_ID]			(VAR_FLOAT)
													Wiedervorlage (Mitarbeiter) ID
					[DOCU_MGR_NEXT_PROC_DT_ID]	(VAR_FLOAT)
													gepackt: Date & Time vom
													Wiedervorlagebeginn
					[DOCU_MGR_NEXT_PROC_RUN_DT_ID] 	(VAR_FLOAT)  
													gepackt: Date & Time vom
													Wiedervorlageende
					[DOCU_MGR_NEXT_PROC_TYPE_ID]	(VAR_FLOAT)  
													ID des Choicereintrages für die
													Wiedervorlage
					[DOCU_MGR_FINISH_ID]				(VAR_FLOAT)
													Erlediger (Mitarbeiter) ID
					[DOCU_MGR_FINISH_DT_ID]			(VAR_FLOAT)
													gepackt: Date & Time vom
													Erledigerbeginn
					[DOCU_MGR_FINISH_RUN_DT_ID]	(VAR_FLOAT)  
													gepackt: Date & Time vom
													Erledigerende
					[DOCU_MGR_FINISH_TYPE_ID]			(VAR_FLOAT)  
													ID des Choicereintrages für das
													Erledigen
					[DOCU_MGR_FILE_PATH]				(VAR_STR)
													Zugeordnete Datei
					[DOCU_MGR_FILE_TYPE_ID]			(VAR_FLOAT)
													ID des Choicereintrages für den
													Dateityps
					[DOCU_MGR_PROGRAM_ID]			(VAR_FLOAT)
													ID des Choicereintrages für das
													Programms
					[DOCU_MGR_TEMPLATE]				(VAR_STR)
													Vorlage-Datei
					[DOCU_MGR_X_REF_ID_01]			(VAR_FLOAT)  
													RecordID einer X-Referenz
					[DOCU_MGR_X_REF_ID_02]			(VAR_FLOAT)
													RecordID einer X-Referenz
					[DOCU_MGR_X_REF_ID_03]			(VAR_FLOAT)
													RecordID einer X-Referenz
					[DOCU_MGR_X_REF_ID_04]			(VAR_FLOAT)
													RecordID einer X-Referenz
					[DOCU_MGR_X_REF_ID_05]			(VAR_FLOAT)
													RecordID einer X-Referenz
					[DOCU_MGR_X_REF_ID_06]			(VAR_FLOAT)
													RecordID einer X-Referenz
					[DOCU_MGR_X_REF_ID_07]			(VAR_FLOAT)
													RecordID einer X-Referenz
													(unbenutzt)
					[DOCU_MGR_X_REF_ID_08]			(VAR_FLOAT)
													RecordID einer X-Referenz
													(unbenutzt)
					[DOCU_MGR_X_REF_ID_09]			(VAR_FLOAT)
													RecordID einer X-Referenz
													(unbenutzt)
					[DOCU_MGR_X_REF_ID_10]			(VAR_FLOAT)
													RecordID einer X-Referenz
													(unbenutzt)
					[DOCU_MGR_CATEGORY_ID]			(VAR_FLOAT)
													RecordID der Dokumenten-
													Manager-Kategory
					[DOCU_MGR_THREAD_NO]				(VAR_NUM)
													Gesprächsfaden Nummer
					[DOCU_MGR_SEND_CONFIRM]			(VAR_NUM)
													Empfangsbestätigung
					 Wird eine [mask] angegeben, so wird im Anschluß der
					[mask!MASK_HOOK_DOCMGR_EXIT] ausgeführt.

	MEMO_GET			[mask],[list],'fieldname'
						Läd den Text des Memo 'fieldname' aus der Maske [mask] in die
						VAR_LIST [list].

	MEMO_SET			[mask],[list],'fieldname'{,x,y,w,h}
						Läd den Text der VAR_LIST [list] in das Memo 'fieldname' der
						Maske [mask]. Optional können auch noch die Koordinaten der
						Memo-Position gesetzt werden.

	MEMOS_READ		[mask]	Aktualisiert den Inhalt aller in der Maske [mask] befindlichen
						Memos, indem deren Inhalt erneut aus der Datenbank gelesen
						wird.

	MEMOS_WRITE		[mask]	Schreibt den Inhalt aller in der Maske [mask] befindlichen Memos in
						die Datenbank (dies geschieht aber auch automatisch bei jedem
						vom User initiiertem Speichern).

	MEMO_CURSOR_POS		[mask], 'strMemoVarName', numOpt, [numLine], [numColumn] {, strFind } 
						Dieser Befehl erlaubt es die Cursor-Position in einem Memo-Feld 
						(mit dem Namen 'strMemoVarName') der [mask] zu setzten und auch 
						auszulesen. Die erste Zeile des Textes hat die Nummer 1. Das erste 
						Zeichen einer Zeile hat die Nummer 1.
						Folgende Werte kann numOpt annehmen:
						[MCP_GET_ACT]	Liest die aktuelle Cursorposition in 
											die Variablen [numLine] und [numColumn]
						[MCP_GET_POS]	Sucht nach [strFind] und, wenn der Text 
											gefunden werden konnte, setzt es die 
											Cursorposition an die Fundstelle und liest 
											diese Position in die die Variablen [numLine] 
											und [numColumn]. 
											Wenn das Memo den Fokus hat, dann wird 
											der Text (insofern er gefunden werden 
											konnte) hervorgehoben, wie wenn er markiert 
											wurde.

						[MCP_SET_ACT]		Setzt den Cursor an die Position, die durch 
											die Variablen [numLine] und  [numColumn] 
											bestimmt wird.
						[MCP_SET_MAX]	Setzt den Cursor an das Ende des Textes.

	PICTURE_SAVE		[mask],'strFieldname|numIdx','strFilename' {,''strDefaultDir}
						Speichert das Bild, das in dem Dialogelement 'strFieldName' (vom 
						Typ PICTURE) der [mask] angezeigt wird, mit dem Dateinamen 
						'strFileName'. 
						Wenn der Dateiname 'choose' übergeben wird, wird ein Dateiwähler 
						zur Auswahl des Dateinamens geöffnet, in diesem Fall kann das 
						Verzeichnis, in dem die Auswahl des Dateinamens starten soll, 
						mittels 'strDefaultDir' angegeben werden.

	PICTURE_SET		[mask],'fieldname','filename'{,x,y,w,h}
						Läd das Bild 'filename' in das Picture 'fieldname' der
						Maske [mask]. Optional können auch noch die Koordinaten der
						Picture-Position gesetzt werden.

	TREE_SET			[mask],[QueryList],'TreeFieldID'{,x,y,w,h}
						Hierbei wird in der [Mask] der Baum 'TreeFieldID' mittels der
						VAR_LIST [QueryList] aufgebaut.
						[QueryList] muß eine Liste von Query-ID's (Dateinamen) enthalten,
						die zum Aufbau des Baumes notwendig sind. Begonnen wird mit
						dem ersten Query in der Liste. Für diese speziellen Querys wurde
						eine neue CSH-Syntax entwickelt: Wenn in eckigen Klammern []
						vor einem Feldnamen der Kenner "K" für Knoten (oder "X" für
						NICHT Knoten) und eine entsprechende Bedingung gesetzt wird,
						erkennt die CARA-Engine, daß der Baum hier einen in die Tiefe
						verweisenden Knoten enthält. In diesem Fall wird in der [QueryList]
						nach dem nächsten Query gesucht (falls kein weiteres Query
						angegeben wird, wird stets das letzte in der Hirarchie mögliche
						Query verwendet). Außerdem kann man innerhalb des entstehenden
						Query-Stacks (je nachdem wie tief der Baum verzweigt) auf das
						jeweils vorhergehende mittels des reservierten Wortes
						[TREE_MOTHER_QUERY!feldname] zugreifen.
						Die Zeilen, die im Baum angezeigt werden, setzen sich aus den
						Feldinhalten der ersten Felder zusammen, die im Query angefragt
						werden. Ab einschließlich dem ersten versteckten Feld (CSH-Syntax						HIDDEN [H]) wird kein weiterer Feldinhalt mehr angezeigt. Wichtig :
						Es ist sinnvoll Querys mit sehr wenigen Feldern zu verwenden, da
						der Baum dann sehr viel schneller aufgebaut wird.
						Zu jeder Zeile wird in Hintergrund die RecordID, RecFLag,
						TableName und die Hirarchie gehalten - damit dies möglich ist,
						sollte die RecordID und die RecFlag in der Feldliste von jedem Tree-
						Query aufgeführt werden!. Diese können mit dem Befehl
						TREE_ITEM abgerufen werden.

						Hier ein Beispiel für TREE_SET:
						
						PROCEDURE SetUpTree
						  WAIT_CURSOR TRUE
						
						  LIST_APPEND [TreeQuerys], '2421Tre1'
						  LIST_APPEND [TreeQuerys], '2421Tre2'
						
						  TREE_SET [WorkMask],[TreeQuerys],'2421001',1,1,50,28
						
						  WAIT_CURSOR FALSE
						END_PROC
						
						Und hier die zwei Querys aus diesem Beispiel:

						Beispiel für das Query 2421Tre1:
						
						Stücklisten-MainTree
						
						SELECT A.Artikelnummer, A.Bezeichnung1, S.StckListenName, 
						       [H KA="1"]A.StckFlag,
						       S.RecordID, S.RecFlag, S.ArtikelID, A.RecordID
						  FROM STCKLIST S, ARTIKEL A 
						 WHERE (S.ArtikelID = A.RecordID) 
						   AND (S.ArtikelID > 0)
						
						Beispiel für das Query 2421Tre1:
						
						Stücklisten-Positionen (SubTree n)
						
						  SELECT S.PosNr, A.Artikelnummer, S.Stckzahl, 
						         A.Bezeichnung1, A.Zeichnungsnummer, 
						         [H KA="1"]A.StckFlag, 
						         S.RecordID, S.RecFlag, A.RecordID 
						    FROM STCKPOS S, ARTIKEL A, StckList L 
						   WHERE (S.ArtikelID  = A.RecordID) 
						     AND (S.ArtikelID  > 10) 
						     AND (S.StckListID = L.RecordID)
						     AND (L.ArtikelID  = [TREE_MOTHER_QUERY!A.RecordID])
						ORDER BY S.StckListID, S.PosNr

						Die CSH-Syntax für Knoten kann an mehreren Feldern "und" und
						"oder" verknüpft werden: "K" für Knoten "A" für "AND", dann folgt
						der Vergleichsoperator "=" oder  ">" oder ">=" oder "<=" oder "" oder
						"<" oder "<>" oder ">>" (like) oder "<<" (not like), dann folgt der
						Vergleichswert, der immer in Hochkommata geschachtelt werden
						muss. 
						Mit dem Ereignis [Mask!MASK_HOOK_TREE] kann man auf einen
						Doppelklick auf eine Baumzeile reagieren. In der
						[Mask!MASK_ACT_FIELD_ID] steht dann die Feld-ID der Baumes
						und in [Mask!MASK_ACT_FIELD_NAME] steht die ID der
						Baumzeile.
						Mit dem Ereignis [Mask!MASK_HOOK_TREE_CHANGE] kann man
						auf einen Wechseln des Benutzers von einer Baumzeile auf eine
						andere reagieren. In der [Mask!MASK_ACT_FIELD_ID] steht dann
						die Feld-ID der Baumes und in [Mask!MASK_ACT_FIELD_NAME]
						steht die ID der Baumzeile.
						Mit dem Befehl TREE_ITEM kann man dann innerhalb des Baumes
						navigieren und auf die Zeilendaten zugreifen.

						In der [QueryList] werden in der hirarchischen Reihenfolge die
						Query-Dateinamen der einzelnen Tree-Ebenen übergeben - wie
						oben beschrieben. Einer der Dateinamen kann mittels des
						Zusatzes "dateiname_des_querys|EACH_ITEM_QUERY" eine
						Sonderfunktion übernehmen: Nach dem der Tree (ohne das speziell
						gekennzeichnete Query) vollständig aufgebaut wurde, werden alle
						Tree-Items nochmals durchlaufen und zu jedem Item wird das
						EACH_ITEM_QUERY ausgeführt - sollte dieses Query zu
						Ergebnissen führen, so werden die Ergebniszeilen an das jeweilge
						"Mutter-Item" angehängt. Mit der Variablen 
						[TREE_MOTHER_QUERY_REC_ID], kann man innerhalb des
						speziell gekennzeichneten Querys auf das "Mutter-Item" zu
						verweisen.

	TREE_ITEM			[Mask],'TreeFieldID',ActionID,[Result],[ItemID],{[RecordID]{,[TableName]{, 												[RecFlag]{,[Hirarchie]{,[Text]{, [IconName]}}}}}}
						Führt eine (oder mehrere) Action in dem Baum 'TreeFieldID' der
						[Maske] aus. Wenn die geforderte Action erfolgreich abgewickelt
						werden konnte, wird das Ergebnis in der VAR_BOOL [Result]
						abgelegt. Je nach Action wird aus der VAR_NUM [ItemID] eine
						Zeilen-ID des Baumes ausgelesen bzw. eine gewünschte Zeilen-ID
						zurückgegeben. Ebenfalls in Abhängigkeit der ActionID weden auf
						Wunsch die hinter dem Zeileneintrag gehaltenen Daten in der
						VAR_FLOAT [RecordID], der VAR_NUM [RecFlag], dem
						VAR_STR [TableName], der VAR_NUM [Hirarchie] und dem 
						VAR_STR [Text] (der angezeigte Text im Baum)
						VAR_STR [IconName] (das angezeigte Bitmap im Baum)
						zurückgegeben. Folgende Werte kann ActionID annehmen:

						TREE_ITEM_GET_FIRST		Gibt die ID der ersten
														 Baumzeile zurück.
						TREE_ITEM_GET_LAST		Gibt die ID der letzten
														Baumzeile zurück.
						TREE_ITEM_GET_PREV		Gibt die ID der nächsten
														Baumzeile zurück. Wenn
														diese Zeile in der
														Hirarchie tiefer liegt, wird
														trotzdem dahin verzweigt.
						TREE_ITEM_GET_NEXT		Gibt die ID der vorherigen
														Baumzeile zurück. Wenn
														diese Zeile in der
														Hirarchie tiefer liegt, wird
														trotzdem dahin verzweigt.
						TREE_ITEM_GET_FIRST_CHILD	Gibt die ID des ersten
														"Kindes" der aktuellen
														Baumzeile zurück. Wenn
														die aktuelle Zeile keine
														"Kinder" hat, geschieht
														nichts.
						TREE_ITEM_GET_LAST_CHILD	Gibt die ID des letzten
														"Kindes" der aktuellen
														Baumzeile zurück. Wenn
														die aktuelle Zeile keine
														"Kinder" hat, geschieht
														nichts.
						TREE_ITEM_GET_PREV_CHILD	Gibt die ID des vorherigen
														"Kindes" der aktuellen
														Baumzeile zurück. Wenn
														die aktuelle Zeile keine
														"Kinder" hat, geschieht
														nichts.
						TREE_ITEM_GET_NEXT_CHILD	Gibt die ID des nächsten
														"Kindes" der aktuellen
														Baumzeile zurück. Wenn
														die aktuelle Zeile keine
														"Kinder" hat, geschieht
														nichts.
						TREE_ITEM_GET_PREV_SIBLING	Gibt die ID der Baumzeile
														zurück, die in der
														Hirarchie gleichhoch
														angesiedelt ist wie die
														aktuelle Baumzeile und
														vor der akruellen
														Baumzeile liegt.
						TREE_ITEM_GET_NEXT_SIBLING	Gibt die ID der nächsten
														Baumzeile zurück, die in
														der Hirarchie gleichhoch
														angesiedelt ist wie die
														aktuelle Baumzeile.
						TREE_ITEM_GET_PREV_VISIBLE	Gibt die ID der Baumzeile
														zurück, die vor der
														aktuellen Baumzeile liegt
														und sichtbar ist.
						TREE_ITEM_GET_NEXT_VISIBLE	Gibt die ID der nächsten
														sichtbaren Baumzeile
														zurück.
						TREE_ITEM_GET_PARENT		Gibt die ID der "Mutter"
														zurück. Wenn keine
														"Mutter" verfügbar ist, wird
														das Resultat FALSE
														zurück gegeben.
						TREE_ITEM_GET_ACTUAL		Gibt die ID der aktuellen
														Baumzeile zurück.
						TREE_ITEM_GET_DIRECT		Gibt Werte der übergebenen 
														ID zurück.
														Wie z.B. [RecordID] 
														und
														[TableName] etc.
						TREE_ITEM_GET_NODE_4_RECID		Gibt die ID der Node 
														von der übergebenen 
														RecordID zurück.
						TREE_ITEM_IS_VISIBLE		Gibt zurück, od die
														Baumzeile mit der
														übergebenen ID sichtbar
														ist oder nicht.
						TREE_ITEM_EXPAND			Expandiert den aktuellen
														Konten und alle seine
														Kinder-Knoten und deren
														Kinder-Knoten etc.
						TREE_ITEM_COLLAPSE		Kollabiert den aktuellen
														Konten und alle seine
														Kinder-Knoten und deren
														Kinder-Knoten etc.
						TREE_ITEM_EXPAND_SINGLE		Expandiert den aktuellen
														Konten aber keines seiner
														Kinde-Knoten.
						TREE_ITEM_COLLAPSE_SINGLE	Kollabiert den aktuellen
														Konten aber keines seiner
														Kinde-Knoten.
						TREE_ITEM_EXPAND_ALL		Expandiert den gesamten
														Baum.
						TREE_ITEM_COLLAPSE_ALL		Kollabiert den gesamten
														Baum.
						TREE_ITEM_SET_ACTUAL		Setzt die aktuelle
														Baumzeile auf die die
														Zeile, zu der die
														übergebene ID passt.

	TREE_ADD	[Mask],'TreeFieldID',[Result],[ItemID],'Text',RecordID,'TableName',RecFlag,'IconName','ColorStr'
						Fügt eine neue Zeile in den Baum ein. 'Text' ist der im Baum
						angezeigte Text. RecordID, 'TableName' und RecFlag sollten so
						gewählt werden, daß der Programmierer in den Hooks ..._TREE
						und ..._TREE_CHANGE die angefügten Zeilen unterscheiden kann.
						Wenn ItemID einen Wert der größer oder gleich Null ist, so wird das
						neue Item des Baumes ein "Kind" der angegeben ID. Wenn die
						Operation erfolgreich war (VAR_BOOL [Result] = TRUE) wird die ID
						des neuen Baum-Items in VAR_NUM [ItemID] zurückgegeben.
						Wenn IconName den Namen einer der max. 9 Bitmapdateien 
						aus der Application-INI-Datei-Section [Pictures] enthält, wird dieses 
						Icon in der Tree-Zeile gezeigt. ColorStr kann einen HTML-Farbwert (ohne
						führendes $-Zeichen) enthalten, der Font-Farbe für die Treezeile verwendet 
						wird.

	TREE_MODIFY [Mask],'TreeFieldID',[Result],[ItemID],'Text',RecordID,'TableName',RecFlag,'IconName','ColorStr'
						Ändert eine Zeile im Baum. 'Text' ist der im Baum angezeigte Text.
						RecordID, 'TableName' und RecFlag sollten so gewählt werden, daß
						der Programmierer in den Hooks ..._TREE und ..._TREE_CHANGE
						die angefügten Zeilen unterscheiden kann.
						VAR_NUM [ItemID] muß die ID eines Items des Baumes enthalten.
						Wenn die Operation erfolgreich war, wird in der VAR_BOOL 
						[Result] TRUE zurückgegeben.
						Wenn IconName den Namen einer der max. 9 Bitmapdateien 
						aus der Application-INI-Datei-Section [Pictures] enthält, wird dieses 
						Icon in der Tree-Zeile gezeigt. ColorStr kann einen HTML-Farbwert (ohne
						führendes $-Zeichen) enthalten, der Font-Farbe für die Treezeile verwendet 
						wird.

	TREE_DELETE		[Mask],'TreeFieldID',[Result],[ItemID]
						Löscht eine Zeile und alle deren Kinden (wenn vorhanden) aus dem
						Baum. VAR_NUM [ItemID] muß die ID eines Items des Baumes
						enthalten. Wenn die Operation erfolgreich war, wird in der
						VAR_BOOL [Result] TRUE zurückgegeben.

	GRID_SET			[Mask], 'GridFieldID', [Query], [Res], Options {, x,y,w,h}
						Hierbei wird in der [Mask] das GRID 'GridFieldID' mittels der
						VAR_QUERY [Query] aufgebaut. In der VAR_BOOL [Res] wird
						zurückgegeben, ob die Operation erfolgreich verlaufen ist. Die
						VAR_NUM Options geben an, was der User alles mit dem GRID
						machen kann. Hierbei gelten alle Optionen, die auch für den
						Datentyp VAR_BROWSER gelten (suche nach
						"BROWSER_FLAG_".in der CARA-Dokumentation). Mit den
						Werten x,y,w,h können die Koordinaten verändert werden.
						Bevor der Befehl GRID_SET ausgeführt wird, muß das übergebene
						[Query] gesetzt werden und der Befehl EXECUTE muß ausgeführt
						werden. Beispiel:
						VAR_MASK  AMask,'Kreditor'
						VAR_QUERY Q
						VAR_BOOL  Qres
						VAR_NUM   Option 
						
						; Alle Optionen einschalten...
						CALC [Option] AS [BROWSER_FLAG_ICON_DOC_MGR]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_OK]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_DELETE]
						CALC [Option] AS [Option]+[BROWSER_FLAG_SELECT_ALLOWED]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_NOTES]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_LIST_GEN]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_SEARCH]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_HELP]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_USER]
						CALC [Option] AS [Option]+[BROWSER_FLAG_SHOW_DEMAND_NOTE]
						CALC [Option] AS [Option]+[BROWSER_FLAG_ICON_INSERT]
						
						; Ein editierbares Query geht auch:
						QUERY [Q]
						  SELECT [W15 C2A>>"*es*"  N"Nachname"]Name1,
						         [W15 E "XXXXXXXXXXXXXXXXXXXXXXX"]Name2,
						         [H]Kreditorennummer,
						         RecFlag, IDUser, LevelUser, UpdateTime, 
						         UpdateID, Mandant, EventFlag, RecordID
						    FROM Kreditoren
						END_QUERY
						EXECUTE [Q],[QRes]
						IF [QRes]
						  GRID_SET [AMask], '1000888', [Q], [QRes], [Option]
						END_IF

						Folgende Hooks stehen in der Maske zur Verfügung (s.o.):
						[mask!MASK_HOOK_GRID_POST_EDIT]
						[mask!MASK_HOOK_GRID_OK]
						[mask!MASK_HOOK_GRID_DELETE]
						[mask!MASK_HOOK_GRID_USER]
						[mask!MASK_HOOK_GRID_INSERT]

						Innerhalb dieser Hooks stehen folgende Variablen zur
						Verfügung:
						[Mask!MASK_ACT_GRID_ID] die ID des aktuellen GRIDs
						und der [Mask!MASK_ACT_GRID_NAME] der Name des
						aktuellen GRIDs.

						Innerhalb des [mask!MASK_HOOK_GRID_POST_EDIT]
						stehen folgende Variablen zur Verfügung:
						[mask!MASK_GRID_EDIT_VALUE]
						[mask!MASK_GRID_EDIT_FIELD]
						[mask!MASK_GRID_EDIT_REC_ID]

						Folgender Hook steht im Query zur Verfügung (s.o.):
						[query!QUERY_HOOK_REC_CHANGE]

						Um ein GRID mit anderen Daten auszustatten, ist es lediglich
						notwendig ein QUERY_REFRESH auf das an das GRID
						gebundene Query anzuwenden oder nach einer erneuten
						Definition des Querys eine EXECUTE durchzuführen.

	LIST_BUILD			[ResList],[QueryList]
						Hierbei wird die VAR_LIST [ResList] mittels der VAR_LIST
						[QueryList] aufgebaut.
						[QueryList] muß eine Liste von Query-ID's (Dateinamen) enthalten,
						die zum Aufbau der Liste notwendig sind. Begonnen wird mit
						dem ersten Query in der Liste. Für diese speziellen Querys wird
						die spezielle CSH-Syntax verwendet: Wenn in eckigen Klammern []
						vor einem Feldnamen der Kenner "K" für Knoten (oder "X" für
						NICHT Knoten) und eine entsprechende Bedingung gesetzt wird,
						erkennt die CARA-Engine, daß die Liste hier einen in die Tiefe
						verweisenden Knoten enthält. In diesem Fall wird in der [QueryList]
						nach dem nächsten Query gesucht (falls kein weiteres Query
						angegeben wird, wird stets das letzte in der Hirarchie mögliche
						Query verwendet). Außerdem kann man innerhalb des entstehenden
						Query-Stacks (je nachdem wie tief der Baum verzweigt) auf das
						jeweils vorhergehende mittels des reservierten Wortes
						[LIST_MOTHER_QUERY!feldname] zugreifen. 
						Die Zeilen der Liste bauen sich folgendermaßen auf:
						1. Hierarchie-Ebene + Semikolon
						2. RecFlag des Datensatzes + Semikolon
						3. RecordID des Datensatzes + Semikolon
						4. Tabellen-Name des Datensatzes + Semikolon
						5. Beschreibung der Datenzeile
						Die Beschreibung setzt sich aus den Feldinhalten der ersten Felder
						zusammen, die im Query angefragt werden. Ab einschließlich dem
						ersten versteckten Feld (CSH-Syntax HIDDEN [H]) wird kein
						weiterer Feldinhalt mehr angezeigt. Wichtig : Es ist sinnvoll Querys
						mit sehr wenigen Feldern zu verwenden, da die Liste dann sehr viel
						schneller aufgebaut wird.
						Zu jeder Zeile wird auf diese Weise die RecordID, RecFLag,
						TableName und die Hirarchie gehalten - damit dies möglich ist,
						sollte die RecordID und die RecFlag in der Feldliste von jedem List-
						Query aufgeführt werden!

						Hier ein Beispiel für LIST_BUILD:
						
						PROCEDURE SetUpList
						  WAIT_CURSOR TRUE
						
						  LIST_APPEND [ListQuerys], '2421Lst1'
						  LIST_APPEND [ListQuerys], '2421Lst2'
						
						  LIST_BUILD [ResList],[TreeQuerys]
						
						  WAIT_CURSOR FALSE
						END_PROC
						
						Und hier die zwei Querys aus diesem Beispiel:

						Beispiel für das Query 2421Lst1:
						
						Stücklisten-MainList
						
						SELECT A.Artikelnummer, A.Bezeichnung1, S.StckListenName, 
						       [H KA="1"]A.StckFlag,
						       S.RecordID, S.RecFlag, S.ArtikelID, A.RecordID
						  FROM STCKLIST S, ARTIKEL A 
						 WHERE (S.ArtikelID = A.RecordID) 
						   AND (S.ArtikelID > 0)
						
						Beispiel für das Query 2421Lst1:
						
						Stücklisten-Positionen (SubList n)
						
						  SELECT S.PosNr, A.Artikelnummer, S.Stckzahl, 
						         A.Bezeichnung1, A.Zeichnungsnummer, 
						         [H KA="1"]A.StckFlag, 
						         S.RecordID, S.RecFlag, A.RecordID 
						    FROM STCKPOS S, ARTIKEL A, StckList L 
						   WHERE (S.ArtikelID  = A.RecordID) 
						     AND (S.ArtikelID  > 10) 
						     AND (S.StckListID = L.RecordID)
						     AND (L.ArtikelID  = [LIST_MOTHER_QUERY!A.RecordID])
						ORDER BY S.StckListID, S.PosNr

						Die CSH-Syntax für Knoten kann an mehreren Feldern "und" und
						"oder" verknüpft werden: "K" für Knoten "A" für "AND", dann folgt
						der Vergleichsoperator "=" oder  ">" oder ">=" oder "<=" oder "" oder
						"<" oder "<>" oder ">>" (like) oder "<<" (not like), dann folgt der
						Vergleichswert, der immer in Hochkommata geschachtelt werden
						muss. 

	INTERPRET 			[boolRes],'FileName' o. [listLines] {, [listVars]}
						Der Befehl erlaubt während der Laufzeit eine Reihe von Script-
						Zeilen dynamisch nachzuladen und zu interpretieren. 

	Die geladenen Zeilen dürfen alle bekannten Befehle enthalten außer PROCEDURE und END_PROC und natürlich auch nicht SCRIPT_BEGIN und SCRIPT_END. Um die Interpretierung der dynamisch geladenen Zeilen vorzeitig zu beenden kann der Befehl EXIT_PROC verwendet werden. Interne Info: Die dynamisch geladenen Zeilen werden wie der Inhalt einer Procedur behandelt und angesteuert.

	Diese Scriptzeilen können entweder aus einer Text-Datei (FileName) kommen oder aus einer Variable vom Typ VAR_LIST ([listLines]). In [boolRes] wird zurück gegeben, ob der "nachgeladene" Source-Code interpretiert werden konnte. Es wird keine Interpretierung veranlasst, wenn die dynamisch geladenen Zeilen nicht die Syntax-Prüfung "bestehen". D.h. Es dürfen keine unvollendeten IF-Bedingungen, WHILE-Schleifen oder QUERYs im dynamischen Source enthalten sein.

	Die geladenen Zeilen können auf alle globalen Variablen und alle Script-Variablen zurückgreifen und diese auch verändern. Lokale Varaiablen der aufrufenden Procedur sind nicht erreichbar. Außerdem stehen folgende lokalen Variablen automatisch zur Verfügung : V01 bis V20 (alle vom Typ VAR_FLOAT)

	Zusätzlich zu den bekannten Variablen können für die Interpretierung der geladenen Zeilen lokale Variablen über eine Variable vom Typ VAR_LIST zur Verfügung gestellt werden ([listVars]).  Die Syntax für diese Liste ist folgendermaßen:
	VariablenName,Wert
	Beispiele	MeinString,'ho, ho, ho'	Erzeugt LOCAL_STR
						da ein Hochkomma in
						der Wertangabe
						vorhanden war.
		MeinDatum,17.09.1958	Erzeugt LOCAL_DATE
					da ein interpretierbares
					Datum in der 							Wertangabe übergeben
					wurde.
		MeineZeit,17:17:00	Erzeugt LOCAL_TIME
					da eine  interpretierbare
				 	Zeit in der Wertangabe
					übergeben wurde.
		MeineZahl,1.4151	Erzeugt
					LOCAL_FLOAT da in
					der Wertangabe eine
					Zahl mit Dezimalpunkt
					gefunden werden konnte.
		MeineGanzeZahl,20	Erzeugt LOCAL_NUM
					da in der Wertangabe
					eine Zahl ohne 
					Dezimalpunkt gefunden
					werden konnte.
		MeinBool1,TRUE	Erzeugt LOCAL_BOOL
					da in der Wertangabe
					ein Boolean-Ausdruck
					gefunden werden 
					konnte. Erlaubte 	
					Boolean-Ausdrücke
					sind : 
					(Ja, Nein),
					(Yes, No), 
					(True, False), 
					(Right,Wrong), 
					(Richtig, Falsch), 
					(1, 0),  
					(-1,0), 
					(on,off), 
					(ok, not ok)
		MeinTest1,     		Erzeugt gar nichts, da
					kein Wert übergeben
					wurde.
		MeinTest2     		Erzeugt gar nichts, da
					kein Wert übergeben
					wurde.

	GET_COLOR 		[ColorNameStr], 'header'
				Gibt in [ColorNameStr] (vom Typ VAR_STR) den Namen der selektierten
				Farbe zurück. Wenn 'header' übergeben wird, hat der Auswahldialog
				diese Überschrift. Als Farbnamen können alle Farben erwartet
				werden, dia auch bei der Farbangabe eines Dialogelementes in
				einer Masken-Definition angegeben werden können. (Siehe auch
				[FIELD_FLAG_MAROON]..[FIELD_FLAG_YELLOW])

				Returns in [ColorNameStr] (type VAR_STR) the name of the
				selected color. If 'header' is defined, the choose-dialog will have this
				headline. All the colors, that can be given to a dialog-element in a
				mask-definition could be aspected. (See also
				[FIELD_FLAG_MAROON]..[FIELD_FLAG_YELLOW])

	PF_SET_VAR 		[PF], [anyVAR] or 'anyName' {, numType {, 'initValue'}}
				Gibt an den Printjob [PF] eine Variable bzw. ein Feld mit dessen Wert
				weiter. 
				[anyVAR] ist eine beliebige Varibale vom Typ [VAR_STR], [VAR_NUM],
				[VAR_BOOL], [VAR_FLOAT], [VAR_DATE], [VAR_TIME], [VAR_QUERY]
				oder [VAR_LIST]. 
				NumType kann folgende Werte annehmen:
				[PF_VAR_TYPE_VAR]		(Default) Printjob-variable
          				[PF_VAR_TYPE_VAR_ABS]	Printjob-Variable wenn 'anyName'
								anstelle von [anyVAR] verwendet
								wurde.
          				[PF_VAR_TYPE_FLD]		Printjob-Feld (für Tabellen)
          				[PF_VAR_TYPE_FLD_ABS]	Printjob-Feld wenn 'anyName'
								anstelle von [anyVAR] verwendet
								wurde.
				Wenn 'initValue' kann für alle absoluten Variablen (mit 'anyName'
				übergeben) unad alle Variablen des Typs [VAR_STR], [VAR_NUM],
				[VAR_BOOL], [VAR_FLOAT], [VAR_DATE], [VAR_TIME] verwendet
				werden, um eine Initialisierung vorzunehmen.

	PF_EXECUTE 		[PF], [numRes], numOpt1 {, strOpt1 {, numOpt2}}
				Löst eine der folgenden Aktionen in [PF] aus und gibt einen Erfolgsstatus in
				[numRes] zurück:
          				[PF_EXECUTE_OPT_DESIGN]		
					Veranlasst den Aufruf des Designers um das Layout des
					Drucks gestalten zu können.
          				[PF_EXECUTE_OPT_PRINT_OUT]
					Startet den Ausdruck und arbeitet die Routine im Script ab, die in
					Printjob unter [pf!PF_PRINT_OUT_PROC] angegeben wurde.
          				[PF_EXECUTE_OPT_PRINT_VAR]	
					Wird innerhalb der Routine [pf!PF_PRINT_OUT_PROC]
					aufgerufen und löst ausschließlich den Druck der Variablen des
					Druckjobs aus.
          				[PF_EXECUTE_OPT_PROCESS_INFO]	
					Wird innerhalb der Routine [pf!PF_PRINT_OUT_PROC]
					aufgerufen und erzwingt ein Update auf die Fortschrittsanzeige.
          				[PF_EXECUTE_OPT_PRINT_FLD]	
					Wird innerhalb der Routine [pf!PF_PRINT_OUT_PROC] 
					aufgerufen und löst ausschließlich den Druck einer Felder-
					Sequenz (z.B. einer Tabellenzeile) aus. Wenn der Rückgabewert
					[numRes] = [PF_WRN_REPEAT_DATA] ist, bedeutet das, dass
					z.B. ein Seitenvorschub notwendig war und ev. die Druck-Job-
					Variablen erneut gedruckt werden müssen um z.B. den
					Seitenkopf erneut zu erzeugen.
          				[PF_EXECUTE_OPT_PRINT_FLD_END]
					Wird innerhalb der Routine [pf!PF_PRINT_OUT_PROC] 
					aufgerufen und löst den Druck der Fußzeile auf der letzten Seite
					aus (nur bei Listen-Printjobs notwendig).
          				[PF_EXECUTE_OPT_PRINT_END]
					Wird innerhalb der Routine [pf!PF_PRINT_OUT_PROC] 
					aufgerufen und beendet den Printjob.
          				[PF_EXECUTE_OPT_ENABLE_OBJECT]
					Wird innerhalb der Routine [pf!PF_PRINT_OUT_PROC] 
					aufgerufen und kann Printjob-Objekte enablen oder disablen:
					In strOpt1 muss der Name des Printjob-Objektes übergeben
					werden (nicht der Variablenname sondern der Name, der dem
					Objekt im Printjob gegeben wurde). Wenn strOpt1 leer ist, sind
					alle Printjob-objekte betroffen.
					In numOpt2 kann [PF_BOOL_FALSE] oder [PF_BOOL_TRUE]
					übergeben werden.

          				[PF_EXECUTE_OPT_GET_ITEMS_REST]
					Gibt die verbleibende Zahl der Zeilen (diese können aber aus
					multiplen Datenzeilen bestehen) in einer Tabelle zurück. In
					strOpt1 muss der Name des Printjob-Objektes übergeben
					werden (nicht der Variablenname sondern der Name, der dem
					Objekt im Printjob gegeben wurde). Wenn strOpt1 leer ist, wird
					der minimale Wert aller Tabellen ausgegeben.

          				[PF_EXECUTE_OPT_GET_ITEMS_PAGE]
					Gibt die Zahl der Etiketten einer Seite zurück (Spaltenzahl *
					Zeilenzahl) entsprechend den Einstellungen des Projekts.

          				[PF_EXECUTE_OPT_PAGE_FEED]
					Erzwingt einen Seitenvorschub.

          				[PF_EXECUTE_OPT_PAGE_GET]
					Gibt in [numRes] die aktuelle Seite des Printjobs zurück.

          				[PF_EXECUTE_OPT_GET_ITEMS_TABLE]
					Gibt die Datenzeilenanzahl der kleinsten Liste (diese können aber 
					aus multiplen Datenzeilen bestehen) einer Seite zurück.

				Mögliche Werte für [numRes]
					[PF_CALL_FAILED]		(-1)
					[PF_CALL_SUCCESS]		(0)
					[PF_WRN_REPEAT_DATA]	(-998)

				Hinweis:
					Objektnamen im List&Label  sind case-sensitiv. d.h. sie müssen
					in genau der Groß- & Kleinschreibweise angegeben werden, wie
					sie im Print-Projekt angelegt wurden.

	SEND_MAIL 		[boolRes], [listMailText] or strMailText, strSubject, strFromName, strFromEMail,
				([listToNames], [listToEmails]) or (strToName, strToEMail'), ([listFileNames],
				 [listFileDisplayNames]) or (strFileName, strFileDisplayName), {, boolShowDlg 
				{, boolShowMsg {, boolSMTP2FromAddress {, boolSMTP2ToAddress}}}}

[boolRes ]		Ist die Ausführung (ohne Versand) erfolgreich gewesen?

[listMailText]		List-Variable mit dem EMail-Text
oder
strMailText		EMail-Text 

strSubject 		Betreff
strFromName 		Absender-Name der im EMail-Client angezeigt werden soll
strFromEMail 		Absender-EMail-Adresse

strToName 		Empfänger-Name der im EMail-Client angezeigt werden soll
strToEMail 		Empfänger-EMail-Adresse

	ODER		man übergibt anstelle eines einzelnen Email-Adressaten und der 
dazugehörigen Email-Adresse die entsprechenden Parameter als 
Listen vom Typ VAR_LIST

			[listToNames]		jede Zeile der übergebenen Liste enthält einen Namen
			[listToEmails]		jede Zeile der übergebenen Liste enthält eine Email-Adresse
						In jeder Liste muss die gleiche Anzahl von Zeilen enthalten sein.
						Die Listen dürfen maximal 128 Zeilen enthalten.
						Wenn eine der Zeilen der Liste [listToEmails] vor dem Email-
Namen das Kürzel “CC:“ enthält (z.B. 
CC:dieterdasberg@web.de), dann wird die Adresse als Carbon-
Copy verwednet. Falls eine der Zeilen der Liste [listToEmails] vor 
dem Email-Namen das Kürzel “BCC:“ enthält (z.B. 
BCC:dieterdasberg@web.de), dann wird die Adresse als Blind-
Carbon-Copy verwednet.

strFileName		Dateiname des Anhangs (nur ein Dateiname)
strFileDisplayName	Dateiname der in EMail-Client angezeigt werden soll

	ODER		man übergibt anstelle eines einzelnen Dateinamens und des 
	dazugehörigen anzuzeigenden Dateinamens die entsprechenden 
	Parameter als Listen vom Typ VAR_LIST

			[listFileNames]		jede Zeile der übergebenen Liste enthält einen Dateinamen
			[listFileDisplayNames]	jede Zeile der übergebenen Liste enthält einen anzuzeigenden 
Dateinamen
						In jeder Liste muss die gleiche Anzahl von Zeilen enthalten sein.
						Die Listen dürfen maximal 32 Zeilen enthalten.

boolShowDlg		Soll der EMail-Client aufgerufen werden
boolShowMsg		Sollen Fehler und/oder Erfolg als Information angezeigt werden

				boolSMTP2FromAddress  Soll vor die Absender-E-Mail-Adresse(n) das Wort “SMTP:” 
							geschrieben werden? Default = FALSE.
				boolSMTP2ToAddress	Soll vor die Empfänger-E-Mail-Adresse(n) das Wort “SMTP:” 
							geschrieben werden? Default = TRUE. Bei Windows 8 sollte
							dieser Parameter auf FALSE gestellt werden.

	NAVIGATE 		'strAddress' or [strList] {, 'CompleteScript.csh' or 'strFileName4Save' {, boolClearIECache {, boolForceEndSession}}}
			OR	[mask], 'strField', 'strAddress' or [strList] {, 'strFileName4Save' {, boolClearIECache {, boolForceEndSession}}}

				Wenn eine Anwendung im html style gestartet wurde, kann hiermit der Inhalt des
				Browserfensters gesetzt werden. Wenn strScriptName angegeben wird, wird das darin 
				genannte Script nach dem vollständigen Laden der zuvor angegebenen Seite ausgeführt.

				Folgende Konstanten, die als strAddress übergeben werden können, lassen spezielle 
				Aktionen zu:
		          			[NAVIGATE_HOME]		Wechseln zur Startseite
		      			[NAVIGATE_STOP]		Stoppen aller Browseraktionen der Browser ist inaktiv
	          			[NAVIGATE_START]	Setzt den Browser wieder in interaktiven Zustand
	          			[NAVIGATE_ONLINE]	Schaltet den Browser offline
	          			[NAVIGATE_OFFLINE]	Schaltet den Browser online
	          			[NAVIGATE_SAVE]		Speichert den Quelltext der angezeigten Seite des 
									Browsers ab. In strScriptName muss dann der 
									Dateiname angegeben werden, der zum Speichern 
									verwendet werden soll.
					[NAVIGATE_PAGE_SETUP]		Zeigt den Dialog zum Festlegen des 
											Seitenlayouts
					[NAVIGATE_PRINT_DIRECT]	Druckt den Seiteninhalt direkt aus (ohne Dialog)
					[NAVIGATE_PRINT_DIALOG]	Druckt den Seiteninhalt mit Druckerdialog
					[NAVIGATE_PRINT_PREVIEW]	Zeigt die Druckvorschau

				Mit der Boolean-Variable [NAVIGATOR_IS_ONLINE] kann man feststellen, ob der 
				Browser bereits online ist.
				Wenn boolClearIECache TRUE ist, werden alle temporären Internetfiles gelöscht.
				Wenn boolForceEndSession TRUE ist, wird die bestehende Session beendet.

	EXPORT 		[browser], '' oder [mask], 'grid_name' {, numMode {,  strFormats}

				Exportiert die Daten des [browser] oder die des 'grid_name' aus der [mask]. 

				numMode kann folgende Werte annehmen:
			[EXP_VIEW_CHOOSE]	Zeigt den Export-Ausgabe-Dialog
			[EXP_VIEW_DIRECT]	Exportiert ohne Ausgabe-Dialog
			[EXP_PRINT]		Druckt den Export, zeigt den Drucker-Dialog
			[EXP_SAVE]		Speichert die Ausgabe direkt in eine Datei.

				strFormats ist ein String, der mit dem Pipe-Zeichen in 13-Teile aufgeteilt werden muss. 
				Alle Teile müssen korrekt ausgefüllt sein. Man kann mit dem Export-Dialog diese Settings 
				einfach ausprobieren.
				Für einen Standard-CSV-Export ist z.B. folgendes richtig (dann braucht man diesen String 
				auch gar nicht setzen):
				'#.###.##0|#.###.##0,00|dd.MM.yyyy|hh:mm|dd.MM.yyyy hh:mm|#.###.##0,00 €|true|false|,|.|.|:|"'
				Möchte man einen Export machen, der dem TABLE_2_ASCII sehr nahe kommt (und dann 
				beispielsweise mit ASCII_2_TABLE wieder eingelesen werden können soll), dann nehme 
				man:
				'########0|########0.00|dd.MM.yyyy|hh:mm|dd.MM.yyyy hh:mm|########0.00 €|true|false|.||.|:|'
				Mit CALC [EXP_FILE_TYPE] AS [EXP_FILE_TYPE_xxx] kann man die Art des Exportes 
				angeben. Es stehen folgende Möglichkeiten zur Verfügung:
				EXP_FILE_TYPE_EXCEL			.xls
				EXP_FILE_TYPE_WORD			.doc
				EXP_FILE_TYPE_RTF				.rtf
				EXP_FILE_TYPE_HTML			.html oder .htm
				EXP_FILE_TYPE_TEXT				.txt
				EXP_FILE_TYPE_XML				.xml
				EXP_FILE_TYPE_DBF				.dbf
				EXP_FILE_TYPE_PDF				.pdf
				EXP_FILE_TYPE_CSV				.csv
				EXP_FILE_TYPE_DIF				.dif
				EXP_FILE_TYPE_SYLK				.slk
				EXP_FILE_TYPE_LATEX			.tex
				EXP_FILE_TYPE_SQL				.sql
				EXP_FILE_TYPE_CLIPBOARD
				EXP_FILE_TYPE_ODS				.ods		(OpenOffice / LibreOffice calc-sheet)
				EXP_FILE_TYPE_ODT				.odt		(OpenOffice / LibreOffice document)
				EXP_FILE_TYPE_XLSX				.xlsx		(MS-Excel 2007)
				EXP_FILE_TYPE_DOCX			.docx	(MS-Word 2007)
				EXP_FILE_TYPE_MDB				.mdb 	(MS-Access)
				EXP_FILE_TYPE_ACCDB			.accdb	(MS-Access 2007)
				Mit CALC [EXP_FILE_NAME] AS CON([PRINTSET_PATH],'test.csv') kann man den 
				Dateinamen für die Ausgabe angeben.

	IDENTIFIER_DESTROY	'str', [boolRes]
				löscht die Variable mit dem Bezeichner 'str' aus dem Arbeitsspeicher, gleichgültig, ob es
				sich um eine globale, script oder locale Variable handelt. Am Rückgabewert [boolRes]
				kann der Erfolg abgelesen werden.
				
	SQL_INTERFACE	Ruft das freie SQL-Interface auf. Dadurch können alle globalen und script Variablen
				innerhalb der eingegebenen und geladenen SQL-Anweisungen verwendet werden.

    GET_DECISION	  'head', 'info', 'label button1', 'label button2', 'label button3', [numRes] {,Wifth  {,Height,
  {'label button4',{'label button5',{'label button6', {FontFactor}}}}}}
				Zeigt einen “Entscheidungsdialog”, ähnlich dem Dialog von GET_YES_NO, mit der
				Möglichkeit die Aufschrift auf den Knöpfen vorzugeben. Wenn ein Knopf keine Aufschrift
				hat, ist er nicht zu sehen. 
				Wird der erste Knopf vom User gedrückt, ist das Ergebnis in [numRes] = [ID_YES].
				Wird der zweite Knopf vom User gedrückt, ist das Ergebnis in [numRes] = [ID_NO].
				Wird der dritte Knopf vom User gedrückt, ist das Ergebnis in [numRes] = [ID_CANCEL].
				Wird der vierte Knopf gedrückt, ist das Ergebnis in [numRes] = [ID_BUTTON_4].
				Wird der fünfte Knopf gedrückt, ist das Ergebnis in [numRes] = [ID_BUTTON_5].
				Wird der sechste Knopf gedrückt, ist das Ergebnis in [numRes] = [ID_BUTTON_6].
				Der Knopf, der beim Anzeigen des Fensters den Fokus erhält, kann durch Zuweisen 
				des entsprechenden Knopf-Antwortwertes an [numRes] vor dem Aufruf von 
				GET_DECISION eingestellt werden.
				Mit floatWidth und floatHeight kann man die Höhe und die Breite des Fensters im 
				gleichen Maße verändern, wie dies bei Dialog-Elementen der Eingabe-Masken der Fall 
				ist.
				Mit FontFactor kann die Größe der Darstellung skaliert werden. Standard ist der Wert 1 
				(oder das was in der Systemvariable [WAIT_FONT_FACTOR] hinterlegt ist 
				(Ini-Datei-Schlüssel WaitFontFactor). Ein Wert von 2 würde die Darstellung verdoppeln.

	CHOICER_CHECK_SET	[mask], boolState, numItemID  {, numOption {, 'strLabel''}}
				Wenn boolState (TRUE) ist, setzt dieser Befehl an das Item mit der numItemID  eines
				Choicers in der [mask] einen “Haken”, so dass für den User erkennbar ist, dass dieses
				Item  “gesetzt” bzw.  “gechecked” ist. Wenn boolState (FALSE) ist, wird kein Haken
				gezeigt, bzw. der Haken entfernt, wenn er vor dem Aufruf sichtbar war. numOption kann
				den Wert [FIELD_FLAG_PROTECTED] und/oder [FIELD_FLAG_HIDDEN] enthalten.
				Dadurch kenn eine Zeile komplett ausgeblendet bzw. geschützt werden. 
				Mit 'strLabel'' kann die angezeigte Information in der betroffenen Choicer-Zeile neu
				setzten.

	METER_SET		[mask], 'FieldName', numOpt, 'strValue'
				Setzt die Optionen eines METER-Feldes mit dem 'FeldName' in der [mask].
				numOpt kann folgende Werte annehmen:
				[METER_OPT_PERCENT]				strValue wird in einen Interger-Wert gewandelt 
											und setzt den Prozentwert 
				[METER_OPT_USED_IMAGE]			strValue sollte einen gültigen Dateinamen
											enthalten, der das Hintergrund-Image für den
											verwendeten Bereich der Prozentanzeige setzt.
											Ein Leerstring entfernt das Hintergrund-Image.
				[METER_OPT_UNUSED_IMAGE]		strValue sollte einen gültigen Dateinamen
											enthalten, der das Hintergrund-Image für den
											nicht verwendeten Bereich der Prozentanzeige
											setzt. Ein Leerstring entfernt das Hintergrund-
											Image.
				[METER_OPT_SHOW_PERCENT]		strValue wird in ein Boolean-Wert übersetzt 												und bestimmt, ob die Schrift der 													Prozentanzeige angezeigt wird oder nicht.
				[METER_OPT_INVERT_PERCENT]		strValue wird in ein Boolean-Wert übersetzt 
											und bestimmt, ob die Schrift der
											Prozentanzeige invertiert dargestellt wird oder
											nicht.
				[METER_OPT_USED_COLOR]			strValue wird als Farb-Name interpretiert bzw. 											als HTML-HEX-Farbe und setzt die Farbe für
											den verwendeten Bereich der
											Fortschrittsanzeige.
				[METER_OPT_UNUSED_COLOR]		strValue wird als Farb-Name interpretiert bzw. 											als HTML-HEX-Farbe und setzt die Farbe für
											den nicht verwendeten Bereich der
											Fortschrittsanzeige.
				[METER_OPT_FONT_COLOR]			strValue wird als Farb-Name interpretiert bzw. 											als HTML-HEX-Farbe und setzt die Farbe für
											den Text der Prozentangabe.
				[METER_OPT_ORIENTATION]			Wenn strValue den Wert 'vertical' enthält, wird
							 				die Ausrichtung des Fortschrittbalkens vertikal
											anderenfalls horizontal verlaufen.

	ITEM_2_USER_TIMER	RecID,NextPID,Date,Time,Note,UserName1,UserName2,TableName,ScriptName, 
				XRefName{, SendConfirm, CreatorID}
				Mit diesem Befehl können zusätzliche Zeilen im User-Timer, der beim Programmstart
				gezeigt wird, wenn für einen User Termine im Dokument-Manager vorliegen, angezeigt
				werden. Dadurch kam man z.B. dem Buchhalter die “heute” fälligen Mahnungen mit
				 anzeigen. Die Parameter bedeuten Folgendes:
				RecID		Datensatz-ID, die dazu dient, die angezeigte Zeile (im Zusammenhang
						mit dem Tabellen- und Script-Namen) zu identifizieren, falls sie ein
						zweites Mal gemeldet	werden sollte. (Typ VAR_FLOAT)
				NextPID	Next-Process-ID (ein Timestamp, wie eine RecordID), zeigt an, wann
						der Termin fällig ist. Sinnvollerweise ist dies ein aus der übergebenen
						Zeit und dem 	übergenenen Datum zusammengesetzter Wert. Das
						“Triggern” der Liste, d.h. der Zeitpunkt wann die Liste gezeigt werden
						muß, richtet sich nach diesem Wert. (Typ VAR_FLOAT)
				Date		Datum, das in der Zeile mit angezeigt werden soll. Wenn keine
						Datums-Variable übergeben wird, muß hier ein String (als Variable
						oder auch absolut) übergeben werden. (Typ VAR_DATE oder
						VAR_STR)
				Time		Zeit, die in der Zeile mit angezeigt werden soll. Wenn keine Zeit-
						Variable übergeben wird, muß hier ein String (als Variable oder auch
						absolut) übergeben werden. (Typ VAR_TIME oder VAR_STR)
				Note		Notiz, die angezeigt werden soll. (Typ VAR_STR)
				UserName1 	Name1 des betroffenen Users. Kann auch “missbraucht” werden, da
						dies ebenfalls eine ausschließlich zur Anzeige benötigte Information
						ist. So kann man Mahnungen beispielsweise auch den Name1 des
						betroffenen Kunden anzeigen.  (Typ VAR_STR)
				UserName2 	Name2 des betroffenen Users. Kann auch “missbraucht” werden, da
						dies ebenfalls eine ausschließlich zur Anzeige benötigte Information
						ist. So kann man Mahnungen beispielsweise auch den Name2 des
						betroffenen Kunden anzeigen. (Typ VAR_STR)
				TableName 	Name der Tabelle aus der der Datensatz mit der “RecID” stammt. 
						(Typ VAR_STR) 
				ScriptName 	Name des Scriptes, das ausgeführt werden soll, wenn der User
						doppelt auf die Timer-Zeile klickt.  (Typ VAR_STR)
						An das Script werden folgende Informationen weitergeleitet:
						RECORD_ID1	RecID
						RECORD_ID3	reserved
						RECORD_ID2	reserved
						RECORD_ID4	reserved
						RECORD_ID5	NextPID
						PAR_STR6		StrNote
						PAR_STR7		Date
						PAR_STR8		Time
						PAR_STR9		UserName1
						PAR_STR10		UserName1
						PAR_STR11		TableName
						PAR_STR12		reserved
						PAR_STR13		ScriptName
				XRefName 	Falls der Tabellenname mehrfach in der Tabelle TableFld auftauchen
						sollte, kann hiermit die Bezeichnung einer XReferenz angegeben
						werden, die bei jedem Eintrag in der Tabelle TableFld separat 
						hinterlegt werden kann. Daduch wird der datensatz exakt 
						identifizierbar.
				SendConfirm 	VAR_BOOL, soll eine Empfangsbestätigung an den Anleger des
						Termins gesendet werden. Dieser muss dann auch als weitere 
						Parameter übergeben werden:
				CreatorID 	VAR_FLOAT, Anleger-ID der die Empfangsbestätigung gesendet 
						beokmmen soll

				Ca. alle 60 Sekunden wird die Timer-Liste intern aufgebaut bzw. überprüft. Wenn ein
				Termin erreicht ist, wird sofort die Liste angezeigt. Eine  Zeile wird in der Liste nicht
				mehraufgeführt, wenn sie nicht innerhalb des Neuaufbaus wieder gemeldet wird. 
				Es ist sicher jedem Entwickler klar, dass die hier ausgeführten Abfragen möglichst “klein”
				und “schnell” sein sollten, sonst verhindern sie einen eleganten Programmablauf!

ITEM_F_USER_TIMER 	[floatRecID]
				 (Item from user timer). Beim ersten Aufruf startet man mit dem Wert [floatRecID]=0, es 
				wird dann die RecordID (eines Records aus der Tabelle DocMgrI) des ersten 
				Listenelementes zurückgegeben. Danach übergibt man jeweils die zuletzt erhaltene 
				[floatRecID] und erhält die darauf folgende, bis man schließlich [floatRecID]=0 erhält. Dann 
				wurden alle Listen-Elemente zurückgegeben.

	EE_EXECUTE 	[EE], [numRes], [option], {parameter1, {parameter2, {parameter3, {parameter4}}}}

				[option] kann folgende Weret annehmen:
					[EE_SHOW] {, 'FileName'}		
									Zeigt den Excel-Report oder speichert ihn dierekt in
									die Datei “FileName'.

					[EE_EDIT]				Öffnet die Vorlage-Datei mit Excel und erlaubt eine
									Editieren der Vorlage.

					[EE_SET_QUERY], [QUERY] oder [BROWSER] oder [MASK], 
									Gibt an, mit welchen Daten der Report arbeiten soll.
									Wenn kein Parameter angegeben wird, gibt der
									Programmierer im Script selber die Daten an den
									Report weiter.

					[EE_SET_SUBREPORT], [EE]	
									Falls ein weiters Sheet in der Excel-Datei gleichzeitig mit
									dem Haupdatenstrom gefüllt werden soll, kann man hier
									die dafür zuständige EE-Variable angeben

					[EE_DIC_ADD], 'FieldName', 'Value'
									Fügt einen Variable mit Inhalt zum Report hinzu.

					[EE_DIC_GET], 'FieldName', [Value]
									Ruft den Inhalt einer Zustzlichen Variable ab.

					[EE_BAND_ADD], numBandType, 'range', {'FieldName','HookName'}
									Gibt den Typ und die “Koordinaten” eines Bandes an
									und kann für ein Band vom Typ
									[EE_BAND_TYPE_GROUP_HEADER] auch einen
									eigenen Hook setzten, der der bei jedem Wechsel des
									Datensatzes angeteuert wird und in dem der Wert
									gesetzt werden kann, der den Gruppenwechsel
									herbeiführt.

					[EE_SET_RANGE], 'StartRange', 'EndRange', numOption,  'value' 
									Verändert einen Zellenbreich im Report, der mit
									StartRange und EndRange festgelegt werden kann.
									Folgende Werte stehen für numOption yur Verfügung:
									[EE_RANGE_OPT_FONT_BOLD]
										Der Zelenbereich wird fett gedruckt, wenn value
										den Inhalt TRUE hat, ansonsten wird der
										Bereich normal gedruckt.
									[EE_RANGE_OPT_FONT_COLOR]
										Der Bereich erhält eine andere Schriftfarbe. Der
										Wert in value muß dem hex-Wert der Farbe
										entsprechen.
									[EE_RANGE_OPT_FONT_ITALIC]
										Der Zelenbereich wird kursiv gedruckt, wenn
										value den Inhalt TRUE hat, ansonsten wird der
										Bereich normal gedruckt.
									[EE_RANGE_OPT_FORMULAR]
										In dem angegebenen Bereich kann eine neue
										Formel platziert werden, die Formeldefinition
										wird in value an den Report übergeben.
									[EE_RANGE_OPT_INTERIOR_COLOR]
										Der Bereich erhält eine andere
										Hintergrundfarbe. Der Wert in value muß dem
										hex-Wert der Farbe entsprechen.
									[EE_RANGE_OPT_ROW_HEIGHT]
										Der Bereich erhält eine neue Zeilenhöhe. Die
										Höhe kann in value angegeben werden.

					[EE_START_MACRO], 'MacroName
									Startet ein Excel-Macro, z. B. in dem  Hook, der nach
									der Fertigstellung des Repoptes aufgerufen werden
									kann: [ee!EE_HOOK_AFTER_BUILD] 

					[EE_CHANGE_PROPERTY], numPropertyType, 'Value'
									Erlaubt die Veränderung einer Eigenschaft des
									Reportes. 
									Folgende Werte kann numPropertyType annehmen:
									[EE_PROPERTY_NAME]
										Erlaubt das Ändern des Namens des
										Arbeitsblattes des Reportes.
					Für diesen Variablen-Type wurden einige Beispielscripte und Excel-Dateien zur
					Dokumentation der Engine hinzugefügt. Sie befinden sich im Unterverzeichnis
					 “Example\EE”. 

					Grundsätzlich ist die Idee des Excel-Reportes folgende.
						In einer Excel-Datei, die als Vorlage dient, werden Feldnamen
						angegeben. Die Definition dieser Felder ist denkbar einfach: Man setzt
						vor den Feldnamen der Datenbank-Abfrage, die mit dem Report
						verbunden wird einfach ein Gatter-Zeichen und läßt den Alias weg.
	
						Eine Zeile oder auch mehrere Zeilen der Vorlage werden als Band
						bezeichnet. So kann es z.B. ein Band für den Kopf des Reportes
						geben, eines für die Daten und eines für den Fuß des Reportes. Im
						einfachsten Fall besteht ein Report nur aus dem “Datenband”. 

						Die Aufgabe der neuen Umgebung besteht darin, die Daten aus dem
						Programm über die Vorlage an den eigentlichen Report
						weiterzugeben.

	TS_EXECUTE [boolRes], [numFunction]... diverse parameter.
				Folgende Funktionen (numFunction) stehen zur Verfügung:

				TS_EXECUTE [boolRes], [TS_START] {, boolCompleteInit}
					Öffnet die serielle Schnittstelle und verbindet den PC mit der TimeScan-Hardware. 
					Die Parameter, mit der die serielle Schnittstelle zu öffnen ist, müssen in der
					Applikations-INI-Datei in der (neuen) Sektion [TimeScan] angegeben werden.
					Folgende Schlüssel stehen zur Verfügung:
					ComPortNumber=1	Serielle-Schnittstelle, mit der Verbunden werden soll.
					ComPortBaud=9600	Geschwindigkeit der Datenübertragung.
					ComPortEventChar=17	Ereignis-Zeichen. Wenn dieses Zeichen von der
									TimeScan-Hardware zum PC gesendet wird, sind Daten
									zum Abholen vorhanden.
					Beim Starten der Verbindung wird ebenfalls die Uhrzeitr zwischen PC und
					TimeScan (TS) verglichen. Wenn die Abweichung mehr als 2 Stunden beträgt wird
					das manuelle stellen der Uhrzeit erzwungen. Dafür steht der Befehl TS_SET_TIME
					(s.u.) zur Verfügung. Wenn die Abweichung geringer als zwei Stunden ist, werden
					die Zeiten zwischen PC und TS abgeglichen. Dabei ist die Einstellung des
					folgenden Schlüssels in der Applikation-INI-Datei dafür verantwortlich, ob der PC
					oder TS als “Time-Master” verwendet wird:
					UsePCTime=1		1 = PC ist der “Master”, 0 = TS ist es.

					Der Reihenfolge nach werden beim Start der Verbindung folgende Aufgaben
					erledigt:
				
 1_	                 ComPort öffnen
 2_	                 Senden eines Synchron-Zeichens und abwarten, ob TS antwortet.
 3_	                 Abrufen des Status der Hardware. Wenn sich hierbei herausstellt, dass ein
Datenfehler vorliegt oder, dass die Hardware Initialisiert wurde, werden (s.u.) alle
notwendigen Daten gesendet. (Fehlerfall)
 4_	                 Dann wird TS mitgeteilt, ob Informationen im Display angezeigt werden sollen.
 5_	                 Sodann wird TS mitgeteilt, welche Warte-Zeiten im Zusammenhang mit der
Kommunikation einzuhalten sind. Dazu sind die folgenden Schlüssel in der
Applications-INI-Datei einstellbar:
WaitMinTime=50			Display Anzeige-Zeit
WaitAddTime=30			Kommunikations-Zeit TS/PC
 6_	                 Falls “boolCompleteInit” angegeben wurde oder ein “Fehlerfall” vorliegt, werden noch folgende Speicher-Management-Einstellungen vorge-nommen:
a. Einstellen der Speicher-Verwaltung, Aufteilung in die Segmente
    Benutzer/Projekte/Maschienen/Aktionen mit deren maximalWerten.
b. Einstellen der Tastaturbelegungs-Tabelle.
 7_	                 Im “Fehlerfall” werden dann noch alle Mitarbeiter-Daten in TS gelöscht und neu an TS gesendet. Die Mitarbeiter Daten müssen sich in der Tabelle “tsmdata” befinden. Die Stuktur dieser Tabelle ist in der Datei “tsmdata.sql” angelegt.

				TS_EXECUTE [boolRes], [TS_STOP] 
					Schließt die Verbindung zu TS.

				TS_EXECUTE [boolRes], [TS_LOCK] {, boolOnOrOff}
					Sperrt TS für Benutzer, wenn boolOnOrOff=TRUE ist. D.h. auf dem Display
					erscheint die Zeichenkette “gesperrt” und die Annahme von Daten wird
					verweigert.Falls boolOnOrOff=FALSE ist (oder gar nicht übergeben wurde), wird
					TS wieder entsperrt.

				TS_EXECUTE [boolRes], [TS_READ] {, boolOnOrOff}
					Startet (boolOnOff=TRUE) und stoppt (boolOnOff=FALSE) das Datenlesen. Wenn
					Daten in TS vorliegen werden diese in die Tabelle “tsvdata” gespeichert.Die
					Stuktur dieser Tabelle ist in der Datei “tsvdata.sql” angelegt. Folgende Vorgänge”
					werden gespeichert:
					“K” (#75)	KOMMT
					“G” (#71)	GEHT
					“P” (#80)	PAUSE ANFANG
					“3” (#51)	PAUSE ENDE
					“D” (#51)	DIENSTGANG ANFANG
					“0” (#48)	DIENSTGANG ANFANG UND GEHT
					“1” (#49)	DIENSTGANG ANFANG UND KOMMT
					“2” (#50)	DIENSTGANG ENDE UND GEHT

					Der Vorgang '”I” (#73) wird nicht gespeichert. Der Benutzer fragt dabei lediglich
					Informationen ab. Folgende Daten können gezeigt werden:

					Globale Informationen. Diese werden jeweils direkt vor der Anzeige aus den
					folgenden Schlüsseln der Applikations-INI-Datei aus der Sektion [TimeScan]
					ausgelesen:		GlobInfo1=max. 17 Zeichen 
							GlobInfo2=max. 17 Zeichen 

					Private Informationen. Diese werden aus den Feldern InfoStr1 und InfoStr2 des
					Datensatzes des abrufenden Mitarbeiters aus der Tabelle tsmdata gelesen.

					Verstrichene Arbeitszeit seit der letzten Abrechnung und verbleibende Restarbeits-
					zeit für den laufenden Abrechnungsabschnitt. Diese werden aus den Feldern
					MinActual und MinLeft des Datensatzes des abrufenden Mitarbeiters aus der
					Tabelle tsmdata gelesen.

					Die Resturlaubstage des Mitarbeiters. Diese werden aus dem zugehörigen
					Datensatz des Mitarbeiters, aus dem Feld HoliDays der Tabelle tsmdata gelesen.

					Ein Geburtstagsgruß, falls der Mitarbeiter Geburtstag hat. Der Geburtstag des
					Mitarbeiters wird aus dem zugehörigen Datensatz, aus dem Feld Birthday der
					Tabelle tsmdata gelesen.

				TS_EXECUTE [boolRes], [TS_GET_M_DATA] {, numIdx}
					Falls numIdx ungleich 0 ist, werden die Daten eines bestimmter Mitarbeiters aus
					der Tabelle “tsmdata” aus TS ausgelesen und mit dem aktuellen Status
					in die Tabelle gespeichert, andersenfalls geschieht dies mit allen Datensätzen.
					Folgende Stati stehen zur Verfügung:
					0	“KOMMT” 						wurde eingegeben
					1	“GEHT” 							wurde eingegeben
					2	“DIENSTGANG ANFANG” 		wurde eingegeben
					3	“DIENSTGANG ANFANG UND GEHT” 	wurde eingegeben	
					4	“DIENSTGANG ENDE UND KOMMT” 	wurde eingegeben
					5	“DIENSTGANG ENDE UND GEHT” 	wurde eingegeben
					6	“PAUSE ANFANG”	 		wurde eingegeben
					7	“PAUSE ENDE”		 		wurde eingegeben

				TS_EXECUTE [boolRes], [TS_SET_M_DATA] {, numIdx {, boolDel}}
					Falls numIdx ungleich 0 ist, werden die Daten eines bestimmter Mitarbeiters aus
					der Tabelle “tsmdata” an TS weitergegeben, andersenfalls geschieht dies mit allen
					Datensätzen. Falls boolDel=TRUE ist, werden die Daten lediglich in TS deaktiviert.
					D.h. Man kann sie weiterhin mit dem Befehl TS_GET_M_DATA abrufen, aber der
					Mitarbeiter kann sich nicht mehr an TS an- und abmelden.

				TS_EXECUTE [boolRes], [TS_INIT_V_DATA] 
					Löscht alle in TS z.Zt. Verfügbaren Vorgangsdaten. Achtung: Die Daten werden
					damit ignoriert und unwiederruflich aus TS gelöscht.

				TS_EXECUTE [boolRes], [TS_GET_TIME], [dateVar], [timeVar], [boolIsSummer]
					Holt die Uhrzeit aus TS und gibt sie an die drei variable übergebenen Werte weiter.
					In boolIsSummer wird nicht gespeichert, ob das betreffende Datum wirklich zur
					Sommerzeit gehört, sondern wie die aktuelle Einstellung in TS ist.

				TS_EXECUTE [boolRes], [TS_SET_TIME], [dateVar], [timeVar], [boolIsSummer]
					Speichert die Uhrzeit, die mittels der drei variablen Parameter übergeben wurde in
					TS. boolIsSummer wird so an TS geschickt, wie es übergeben wurde. Es wird
					nicht überprüft, ob das angegebene Datum tatsächlich zur der SommerZeit-
					Angabe passt. Bei jedem Verstellen der Zeit wird ein Protokoll-Record in der
					Tabelle tsclock abgelegt, das auch eine Angabe enthält, um wieveile Minuten die
					Zeit vor (positiver Minuten-Wert) bzw. zurück gestellt wurde (negativer Minuten-
					Wert). Bei der Verrechnung der Zeiten der zum Zeitpunkt der Uhrumstellung
					aktiven Mitarbeiter, müssen diese Werte berücksichtigt werden. Schließlich ist ein
					Mitarbeiter nicht 5 Minuten weniger anwesend, wenn die Uhr um 5 Minuten
					zurückgestellt wurde.

				TS_EXECUTE [boolRes], [TS_CARD_USE], numCardID, [numRes]
					Gibt in numRes an, ob derKartenCode, der mit numCardID übergeben wurde,
					bereits in Benutzung ist. Folgende Ergebnisse sind möglich:
					0	der Karten-Code wird z. Zt. nicht verwendet 
					1	der Karten-Code ist einem Mitarbeiter zugeordnet
					2	der Karten-Code ist einem Projekt zugeordnet

				TS_EXECUTE [boolRes], [TS_CHECK]
					Gibt nur dann ein TRUE zurück, wenn TimeScan online und bereit ist.

				TS_EXECUTE [boolRes], [TS_INFO], numMIdx, numStationIdx, numInfoIdx
					Sendet an die TimeScan-Hardware die Informationen des Mitarbeiter numMIdx. 
					“numStationIdx” ist die Station, von der aus die Daten angefordert wurden und 
					“numInfoIdx” ist die interne Anfrage-Nummer die die TimeScan Hardware vergibt,
					wenn eine User eine Anfrage absendet.
					Im Zusammenhang mit dieser Befehls-Erweiterung wurde auch ein neuer
					Schlüssel für die Applikations-INI-Datei, in der Sektion [TimeScan] bereit gestellt:
					ScriptSendInfo=. 	Hiermit kann eine Script-Datei benannt werden, die ausgeführt
					werden soll ANSTELLE der in der CARA-Engine implementierten automatischen
					Auskunftslogik. An dieses Script werden drei Parameter als RECORD_ID1 bis
					RECORD_ID3 übergeben. Wobei der erste Parameter (RECORD_ID1) dem
					Mitarbeiter-Index in der Tabelle tsmdata entspricht. Der zweite Parameter
					(RECORD_ID2) ist der TimeScan-Sations-Index, von dem aus die
					Informationsanforderung ausgeführt wurde und der dritte Parameter
					(RECORD_ID2) ist schließlich der von der TimeScan-Hardware vergebene 
					Informations-Index. Ein Beispiel-Script ist verfügbar: TimeScanSendInfo.csh

	PICTURE_POP 'FileName'{,'Header'{,boolAutoFit{,[objName]{'ScriptName'{,'Table'{,RelRecID}}}}}}
	oder
	PICTURE_POP 'CLOSE', [objVar]
					Öffnet eine Bilddatei mit dem Dateinamen “filename” in einem eigenen Fenster mit
					der Überschrift “Header”. Mit boolAutoFit = TRUE wird das Bild an die
					Fenstergröße angepasst. Der Objekthandle wird an die optional übergebene
					VAR_OBJECT [objVar] übergeben. Mit diesem Handle kann das Fenster bei
					Bedarf auch wieder (geschlossen und) vom Speicher entfernt werden. Wenn der
					User das Fenster schließt, ist es NICHT automatisch aus dem Speicher entfernt.
					Zum Entfernen dieses “freien” Fensters, wird der Befehl folgendermaßen
					ausgeführt: PICTURE_POP 'CLOSE', [objVar].
					Die restlichen drei optionalen Parameter bedeuten Folgendes:
					VAR_STR	ScriptName 	Name des Scriptes, das bei einem Doppelclick auf das
									Bild ausgeführt werden soll. Als Parameter an dieses
									Script werden folgende Werte übergeben:
									RECORD_ID1	Die beim Aufruf übergebene
													RelRecID.
									PAR_STR2	Der Dateiname des Bildes
													('FileName').
									PAR_STR3	Der beim Aufruf angegebene
													Tabellen-Name.
					VAR_STR	Table		Name einer Tabelle, der an das Script weitergereicht
									wird.
					VAR_FLOATRelRecID	RecordID eines Datensatzes, die an das Script
									weitergereicht wird.

	COPY_2_CLIPBOARD	[var]
					Kopiert den Inhalt einer Variable in den Zwischenspeicher. Bei Listen, werden alle
					Zeilen übergeben. Bei Querys und Browsern werden die feldnamen und deren
					Inhalte übergeben. 

	PASTE_CLIPBOARD_2_LIST [aList]
					PASTE_CLIPBOARD_2_LIST [aList] übernimmt den Inhalt des Clipboards in 
					Liste [aList].

	MD5			[strResult],numOpt,’strValue’
					Gibt in der VAR_STR [strResult] den MD5-Wert des Strings ’strValue’ zurück, wenn 
					numOpt den Wert [MD5_STRING] enthält. Falls numOpt den Wert [MD5_FILE] 
					enthält wird der MD5-Wert der Datei zurück gegeben, die den Dateinamen 
					’strValue’ hat.

	GET_REGISTRY_INFO 	[boolRes], [listResult] or [strResult], numOpt, ‘strRegistryAdress’
	Gibt in [boolRes] zurück, ob die Funktion korrekt ausgeführt werden konnte.
	Mit numOpt können folgende Werte übergeben werden:
	[REG_VALUES] Liest die Inhalte der Schlüssel einer ganzen Sektion. Hier muss für die Rückgabe eine VAR_LIST verwendet werden. [REG_KEYS] List die Schlüssel einer ganzen Sektion. Hier muss für die Rückgabe eine VAR_LIST verwendet werden. [REG_READ] List den Inhalt eines bestimmten Schlüssels. Der Typ der Resultatsvariable ist frei wählbar. [REG_CHECK] Prüft das Vorhandensein eines Schlüssels. Der Typ der Resultatsvariable ist frei wählbar. In ’strRegistryAdress’ muss die Adresse angegeben werden, die ausgelesen bzw. referenziert werden soll. Hier muss auch der HKEY_ mit übergeben werden. Beispiel: 
GET_REGISTRY_INFO [ARes], [AStr], [REG_CHECK], ‘HKEY_LOCAL_MACHINE\SOFTWARE\Cara’

GET_HARDWARE_INFO 	[boolRes], [listResult]
			[boolRes] ist TRUE, wenn die Systemabfrage erfolgreich ausgeführt werden konnte.
			An [listInfo] werden die Hardware-Informationen angehängt. Die Liste wird zuvor 
			NICHT gesäubert. Siehe Beispiel-Script "GetHardwareInfo.csh".

ZIP_COMPRESS			[numRes], 'strZipFile', [listFileFilter] {, numOpt {, [listFileFilterEx] {, numOptEx}}}
						Archivieren von Dateien mit dem ZIP-Algorithmus.
						Gibt in numRes die Anzahl der komprimierten Dateien zurück. Als Dateiname wird 
						strZipFile verwendet. In der String-Liste [listFileFilter] können alle Dateien und 
						Dateimasken angegeben werden, die gepackt werden sollen. Mit dem Wert numOpt 
						können folgende Optionen gesetzt werden:
						[ZIP_OPT_RECURSE_DIRS]				Unterverzeichnisse einbeziehen
						[ZIP_OPT_STORE_EMPTY_SUB_DIRS]	Leere Verzeichnisse mit in das Archiv 
														übernehmen
						[ZIP_OPT_ZERO_ATTR]					Leere Dateien in das Archiv 
														aufnehmen
						[ZIP_OPT_ARCHIVE]					Archivdateien in das Archiv 
														aufnehmen
						[ZIP_OPT_DIRECTORY]					Verzeichnis in das Archiv aufnehmen
						[ZIP_OPT_HIDDEN]						Versteckte Dateien in das Archiv 
														aufnehmen.
						[ZIP_OPT_READ_ONLY]					Schreibgeschützte Dateien in das 
														Archiv aufnehmen
						[ZIP_OPT_SYS_FILE]					Systemdateien in das Archiv 
														Aufnehmen
						[ZIP_OPT_ENCRYPTED]					Dateien verschlüsseln. Diese 
														Archivdateien können dann nur noch 
														mit der CARA-Engine entpackt 
														werden.
						[listFileFilterEx] und numOptEx sind wie [listFileFilter] und numOpt zu verwenden, 
						aber sie bestimmen die Dateien, die NICHT in das Archiv übernommen werden 
						sollen.

ZIP_EXTRACT			[numRes], 'strZipFile', [listFileFilter], numOpt, 'strDestDir' {, 'strAskScript'}
					Enpacken von Dateien, die mit dem ZIP-Algorithmus gepackt wurden.
					Gibt in numRes die Anzahl der entpackten Dateien zurück. Es wird die Datei mit dem 
					Dateiname strZipFile entpackt. Aus dem Archiv werden alle die Dateien entpackt, die den 
					Dateifiltern in Liste [listFileFilter] entsprechen. Das Zielverzeichnis wird mit 'strDestDir' 
					bestimmt. numOpt kann folgende Werte annehmen:
					[ZIP_OPT_RECURSE_DIRS]	Unterverzeichnisse mit einbeziehen
					[ZIP_OPT_ENCRYPTED]		Verschluesselte Dateien entschlüsseln. Diese Option 
										wirkt nur auf Archive, die mit der Cara-Engine 
										verschlüsselt wurden.
					[ZIP_OPT_EXTRACT_DIR]		Sollen Verzeichnisse entpackt bzw. angelegt werden

					Von den folgenden Optionen kann sinnvollerweise jeweils nur eine gewählt werden:
					[ZIP_OPT_DO_OVERWRITE]	Sollen eventuell existierende Dateien überschrieben 
										werden?
					[ZIP_OPT_DO_SKIP]			Sollen eventuell existierende Dateien nicht 
										überschrieben werden?
					[ZIP_OPT_DO_ASK]			Soll der Anwender befragt werden, ob eine eventuell 
										existierende Datei überschrieben oder übersprungen 
										werden soll? In diesem Falle muss der Name eines 	
										Scriptes übergeben werden, um den Dialog mit dem 
										Anwender zu führen. Dazu wird der Parameter 
										'strAskScript' verwendet.
										In dem Script stehen zwei globale Variablen zur 
										Verfügung, die bei der Dialogführung benötigt werden:
										[ZIP_OVERWRITE_MODE]		In dieser Variable 
											gibt man der Engine zurück, wie mit der vorhandenen 
											Datei zu verfahren ist. Es können folgende Werte 
											verwendet werden:
										[ZIP_OPT_DO_SKIP]		Die Datei wird 
																übersprungen
										[ZIP_OPT_DO_OVERWRITE]	Die Datei wird 
																überschrieben
										 [ZIP_OVERWRITE_FILE]		In dieser Variable 
											steht der Name der Datei, die bereits vorhanden ist, 
											damit man sie dem Anwender anzeigen kann.

FIELD_COORD_GET		[mask],'field',boolPixel,[floatX],[floatY],[floatW],[floatH]
					Mit diesem neuen Befehl kann man die Koordinaten eines Feldes einer Maske 
					abfragen. Sollte der Parameter boolPixel = TRUE sein, dann werden die Werte in 
					Pixel zurückgegeben, anderenfalls in der im SetDoc verwendeten CSH-Matrix

COMPUTER_IS_ONLINE		[boolRes]
				Gibt in [boolRes] zurück, ob der Computer online ist oder nicht.

CATS 			[boolRes], [CATS_READ], boolOnOrOff {, strSubStation, strEvents, strFieldList}
			Schaltet des “Horchen” auf die CATS-Ereignisse an oder aus. Wenn es 
			angeschaltet wird, kann man im String [strSubStation] angeben, auf welchen 
			Stationen gehorcht werden soll. Wenn es sich um alle Stationen handelt, lässt man 
			den String leer, anderenfalls kann man mit Pipe-Zeichen getrennt die Station(en) 
			angeben, die beobachtet werden sollen. [strEvents] enhält die Liste der Ereignisse, 
			die beobachtet werden sollen. Wenn alle Ereignisse beobachtet werden sollen, lässt 
			man den String einfach leer, anderenfalls kann man mit Pipe-Zeichen getrennt die 
			Ereignisse auflisten (siehe CATS-Dokumentation).  [strFieldList] enthält mit Pipe-
			Zeichen getrennt die Feldnummern des CATS-Ereignisses, die weitergereicht 
			werden sollen (siehe CATS-Dokumentation), wenn dieser String leer übergeben 
			wird, wird der gesamte CATS-String als erster und einziger Parameter and das 
			CatsScript (s.o.) weitergegeben.. 
			
			oder auch

 			[boolRes], [CATS_DIAL], boolHaveMSg, strNumber	
			Wählt die Nummer [strNumber] über die der aktuellen Station zugeordnete 
			Nebenstelle.
			
			In den Beispielen ist ein Verzeichnis mit verschiedenen Scripten für CATS inkl. 
			Code-Dokumentation enthalten.

	DELETE_DIR 		[boolRes], ’strDir’
					Löscht ohne weitere Warnungen oder Dialoge das gesamte Verzeichnis ’strDir’ mit 
					allen darin befindlichen Dateien und Unterverzeichnissen. In [boolRes] wird 
					angezeigt, ob die Operation erfolgreich war.

	MOVE_DIR 			[boolRes], ’strFromDir’, ’strToDir’
					Bewegt ohne weitere Warnungen oder Dialoge das gesamte Verzeichnis 
					’strFromDir’ nach ’strToDir’ mit allen darin befindlichen Dateien und 
					Unterverzeichnissen. In [boolRes] wird angezeigt, ob die Operation erfolgreich war.

	COPY_DIR 			[boolRes], ’strFromDir’, ’strToDir’
					Kopiert ohne weitere Warnungen oder Dialoge das gesamte Verzeichnis 
					’strFromDir’ nach ’strToDir’ mit allen darin befindlichen Dateien und 
					Unterverzeichnissen. In [boolRes] wird angezeigt, ob die Operation erfolgreich war.

	RENAME_DIR 		[boolRes], ’strFromDir’, ’strToDir’
					Benennt ohne weitere Warnungen oder Dialoge das Verzeichnis ’strFromDir’ nach 
					’strToDir’ um. In [boolRes] wird angezeigt, ob die Operation erfolgreich war.

	MYSQL_DUMP 		[boolRes], 'strOutputFileNameWithPath', boolProgress2Monitor {, [listTableNames]} 
					Mit diesem Befehl kann man die gesamte Datenbank einer Anwendung in die Datei 
					“strOutputFileNameWithPath“ als SQL-Anweisung speichern. Wenn während des 
					Vorgangs der Monitor den Fortschritt anzeigen soll, so muss boolProgress2Monitor 
					TRUE sein. Wenn [listTableNames] übergeben wird und zeilenweise Tabellen-
					Namen enthält, so werden genau diese Tabellen exportiert, wenn [listTableNames] 
					leer ist oder nicht übergeben wird, werden alle Tabellen exportiert.

	HTTP			numPort, strURL, strHeader, strWaitInfo, [listSend], [listRead] oder strFileName
					Stellt mit numPort und strURL einen HTTP-Connect her. Während des Connects 
					wird ein Fenster eingeblendet, dessen Überschrift mit strHeader festgelegt werden 
					kann. Mit strWaitInfo kann darüber hinaus eine Info innerhalb des Fensters 
					ausgegeben werden. [listSend] enthält die Daten, die an den HTTP-Server 
					versendet werden sollen. In [listRead] werden die Rückgabewerte des HTTP-
					Servers abgelegt.  Falls anstelle von [listRead] ein Dateiname übergeben wird, 
					werden die Ergebnisse des HTTP-Servers in diese Datei gespeichert. Wenn 
					numTimeOut > 0 ist, wird numTimeOut-Millisekunden, nach dem das letzte Mal 
					Daten vom HTTP-Server kamen, Verbindung abgebrochen.

GET_FONT				[boolRes], [strFontSettings = Fontname|FontSize|Charset|Color|Style], 'strHeader'
			Damit kann wird dem User ein Dialog-Fenster (mit der Überschrift ’strHeader’) zur 
			Auswahl eines Fonts angeboten.  
			Der String [strFontSettings] kann mit Vorgaben gefüllt werden. Wenn 
			[boolRes]=TRUE ist, enthält dieser String anschließend das Ergebnis der gewählten 
			Einstellungen, die aus fünf Teilen bestehen:
			FontName	Name des gewählten Fonts
			FontSize		Schriftgröße   
			CharSet		ANSI_CHARSET
					SYMBOL_CHARSET
					SHIFTJIS_CHARSET
					HANGEUL_CHARSET
					GB2312_CHARSET
					CHINESEBIG5_CHARSET
					OEM_CHARSET
					JOHAB_CHARSET
					HEBREW_CHARSET
					ARABIC_CHARSET 
					GREEK_CHARSET
					TURKISH_CHARSET
					VIETNAMESE_CHARSET
					THAI_CHARSET
					EASTEUROPE_CHARSET
					RUSSIAN_CHARSET
					MAC_CHARSET
					BALTIC_CHARSET
			Color		Farbwert, der entweder den hexadezimalen Wert der Farbe 
					enthält (mit einem $ an der ersten Stelle) oder den Namen einer 
					der folgenden 16 Standardfarben 
					MAROON
					GREEN
					OLIVE	
					NAVY	
					PURPLE
					TEAL
					GRAY
					SILVER
					RED
					LIME	
					BLUE
					FUCHSIA
					AQUA
					YELLOW
					WHITE
					BLACK
			Style 		Ist eine numerischer Wert, eine Binärflagge, die sich aus 
					folgenden Werten Zusammensetzten kann:
					FONT_STYLE_BOLD
					FONT_STYLE_ITALIC
					FONT_STYLE_STRIKEOUT
						FONT_S	TYLE_UNDERLINE		

SCREEN_SCALE_EXEC				Berechnet die Bildschirmauflösung neu und schreibt die 
						Einstellungen in die Stations-INI-Datei. Die zugehörigen 
						Variablen sind:
					SCRIPT_FLOAT	[SCREEN_SCALE]	Welcher Wert wurde 
										bei der Auflösung im 
										Werkzeugkasten
										eingestellt?
					SCRIPT_FLOAT	[SCREEN_SCALE_HORI]	Welcher Wert wurde
										bei der Horizontal-
										Auflösung im
										Werkzeugkasten 
										eingestellt?
					SCRIPT_NUM	[SCREE_WIDTH]		Wieviele Pixel ist der
										Bildschirm breit.
					SCRIPT_NUM	[SCREE_HEIGHT]	Wieviele Pixel ist der
										Bildschirm hoch.
					SCRIPT_BOOL	[SCREEN_MULTI]	Wird die Anwendung 
										auf einem 
										erweiterten 
										Bildschirm 
										ausgeführt.
					SCRIPT_NUM	[SCREEN_LEFT_ADD]	Wenn auf einem 
										erweiterten 
										Bildschirm
										gearbeitet wird: Um 										wieviele Punkte ist 
										der Bildschirm nach 
										links verschoben?
					SCRIPT_NUM	[SCREEN_TOP_ADD]	Wenn auf einem 
										erweiterten 
										Bildschirm 
										gearbeitet wird: Um 
										wieviele Punkte ist 
										der Bildschirm nach
										oben verschoben?

MANDANT	numOpt, [numIdx], [strName], [floatID]
			numOpt kann folgende Wert annehmen:
			[MANDANT_OPT_CHECK_IDX]	Prüft, ob der Wert, der in [numIdx] übergeben 
							wurde, auf einen gültigen Mandanten verweist. 
							Wenn nicht, wird [numIdx] mit 0 , [strName] 
							mit ‘‘ und [floatID] mit 0.0 zurückgegeben. 
							Wenn ja, werden die übergebenen Variablen 
							mit den in der INI-Datei angegebenen werten 
							Gefüllt und [numIdx] bleibt unverändert.
			[MANDANT_OPT_CHECK_NAME]	Prüft, ob der Wert, der in [strName] übergeben 
							wurde, auf einen gültigen Mandanten verweist. 
							Wenn nicht, wird [strName] mit ‘‘, [numIdx] mit 0 
							und [floatID] mit 0.0 zurückgegeben. Wenn ja, 
							werden die übergebenen Variablen mit den in 
							der INI-Datei angegebenen werten Gefüllt und 
							[strName] bleibt unverändert.
			[MANDANT_OPT_CHECK_ID] 	Prüft, ob der Wert, der in [floatID] übergeben 
							wurde, auf einen gültigen Mandanten verweist. 
							Wenn nicht, wird [floatID] mit 0.0, [strName] 
							mit ‘‘ und [numIdx] mit 0 zurückgegeben. Wenn 
							ja, werden die übergebenen Variablen mit den 
							in der INI-Datei angegebenen werten Gefüllt 
							und [floatID] bleibt unverändert.

	SET_COLOR			[mask], ’fieldname’, ’colorname’
					Damit kann die Hintergrundfarbe von Eingabe-Dialogelementen (String / Longint /
					Extended / Date / Time / CheckBox / RadioBox/Memo / Panel / Label) zur 
					Laufzeit gewechselt werden. Diese Farbe wird durch das Säubern der Maske 
					nicht zurückgesetzt.
Neben der Möglichkeit dem Farbstring ein „$“ voranzustellen (und damit eine RGB-Angabe zu übermitteln) gibt es folgende Farben, die als String übergeben werden können:
					MAROON, GREEN, OLIVE, NAVY, PURPLE, TEAL, GRAY, SILVER, RED, LIME, 
					BLUE, FUCHSIA, AQUA, FONTCOLOR, YELLOW, WHITE, BLACK, 
					WINDOW			Fensterhintergrundfarbe 
					BACKGROUND		Hintergrundfarbe des Desktops
					BUTTONFACE		Standard Label- & Button-Farbe

	QUERY_FIELD_LINK		[query], 'strQFName', [mask], 'strMFName', boolFTS, boolDelLink
					Verlinkt ein Query-Feld mit einem Masken-Feld. Es wird davon ausgegangen, dass 
					die verlinkten Felder vom Typ VAR_STR sind. Wenn im Masken-Feld Daten 
					eingegeben werden und das Query „aktiv“ ist, werden die Eingabewerte zur Laufzeit 
					als Suchfilter verwendet.
					[query] 	ist die Query-Variable in der sich zur Laufzeit das Feld mit dem Namen 
						strQFName befindet.
					[mask] 	ist die Masken-Variable in der sich zur Laufzeit das Feld mit dem	
						Namen strMFName befindet.
					Wenn boolFTS TRUE ist, wird der eingegebene Text irgendwo im Query-Feld 
					vermutet, anderenfalls wird davon ausgegangen, dass der Text des Query-Feldes 
					so beginnt.
					Wenn boolDelLink TRUE ist, wird die Verlinkung aufgehoben.

SWITCH_USER			[boolRes], floatRecID.
					Setzt den aktuellen Anwendungs-Benutzer auf den Benutzer, dessen Datensatz mit 
					floatRecID in der Benutzer-Tabelle gefunden werden kann. Wenn floatRecID den 
					Wert 0 enthält, wird auf den Administrator umgestellt. In [boolRes] wird 
					zurückgegeben, ob der User umgestellt werden konnte.

GET_TABLE_LIST		[listVar]
					Gibt in der VAR_LIST [listVar] die Liste aller Tabellennamen in der korrekten Groß- 
					und Kleinschreibung einer Applikation zurück. Die Liste wird zuvor NICHT geleert. 
					Die Tabellennamen werden einfach an die Liste angehängt. 

CALENDAR			[aDate]
					Öffnet den Kalender und gibt das Datum modifiziert zurück, wenn der User nicht 
					abgebrochen hat.

PHONE_CALL			strNum {, strName}
					Wählt die Telefonnummer strNum und zeigt optional den Namen strName an. Dies
					funktioniert sowohl mit der CTI-Version, als auch mit der Standard-Version (dort 
					jedoch nur, wenn der Schlüssel “TAPIInterfaceAvail=1“ gesetzt ist oder im
					Werkzeugkasten der Station die Option “TAPI-Schnittstelle vorhanden“
					eingeschaltet ist).

LIST_TAG_COUNT		 [listXML], 'tag', [numCursorPos], [numRes] 
			Sucht in der Liste [listXML] beginnend an der Position [numCursorPos], wie häufig
			der 'tag' zu finden ist. Das Resultat wird in [numRes] zurückgegeben. 
			[numCursorPos] zeigt danach auf das letzte Vorkommen des 'tag'.
					Beispiel-Scripte: list_tag_get__simple_1.csh and list_tag_get__simple_2.csh

LIST_TAG_GET			[listXML], 'tag', [numCursorPos], [strVal | listVal], [boolRes] {, [strAttr | listAttr]}
					Sucht in der Liste [listXML] den 'tag' beginnend an der Position [numCursorPos] und 
					gibt den Wert an einen String ([strVal]) oder eine Liste ([listVal]) weiter. Wenn der 
					Rückgabewert leer ist, kann man an [boolRes] ablesen, ob der 'tag' gefunden
					wurde. [numCursorPos] wird jeweils hinter den 'tag' gesetzt, wenn dieser gefunden
					wurde. Durch nochmaliges Aufrufen des Befehls kann immer weiter gesucht
					werden. 
					Wenn ein String [strAttr] oder eine Liste [listAttr] mit übergeben werden, werden 
					eventuell vorhandene Attribute an diese Variable weitergegeben. 
					Beispiel-Scripte: list_tag_get__simple_1.csh and list_tag_get__simple_2.csh

LIST_TAG_SET 			[listXML], 'tag', [numCursorPos], [strVal | listVal], [boolRes]
			Sucht in der Liste [listXML] das nächste Vorkommen des 'tag' beginnend an der
			Position [numCursorPos] und ersetzt den Wert durch den String ([strVal]) oder die
			Liste ([listVal]). An [boolRes] kann man ablesen, ob der 'tag' gefunden wurde.
			[numCursorPos] wird jeweils hinter den 'tag' gesetzt, wenn dieser gefunden 
wurde.
			Durch nochmaliges Aufrufen des Befehls kann der nächste Wert ersetzt werden.
			Beispiel-Script: list_tag_get__simple_6.csh

LIST_TAG_DELETE 		[listXML], 'tag', [numCursorPos], [boolRes]
			Sucht in der Liste [listXML] das nächste Vorkommen des 'tag' beginnend an der
			Position [numCursorPos] und entfernt den gesamten Tag (nicht nur den Inhalt). An
			[boolRes] kann man ablesen, ob der 'tag' gefunden wurde. [numCursorPos] wird
			jeweils hinter den 'tag' gesetzt, wenn dieser gefunden wurde. Durch nochmaliges
			Aufrufen des Befehls kann der nächste Tag gelöscht werden.
			Beispiel-Script: list_tag_get__simple_6.csh

LIST_TAG_INSERT 		[listXML], [numCursorPos], [strVal | listVal], [boolRes]
			Setzt einfach den gesamten Inhalt vom String [strVal] oder der Liste [listVal] an der
			[numCursorPos] in die [listXML] ein. [numCursorPos] wird nicht verändert. Es ist
			wichtig, ggf. benötigte Tag-Start und das Tag-Ende Sequenzen mit in den String
			bzw. die Liste einzubauen. An [boolRes] kann man ablesen, ob der Befehl korrekt
			ausgeführt wurde.
			Beispiel-Script: list_tag_get__simple_6.csh

START_CALCULATOR 		[booleRes], [floatVal]
			Öffnet den Taschenrechner und bibt in boolRes zurück, ob der Rechner mit „OK“ 
geschlossen wurde. Der Wert von floatVal wird automatisch an den 
Taschenrechner weitergegeben. Sollte boolRes = TRUE sein, wird deas Ergebnis 
der Berechnung in floatVal zurückgegeben.

LOGIN_DIALOG	 		[strRes] {, strHeader {, strWhereClause {, boolForceSuper }}}
			Gibt [strRes] leer zurück, wenn der Login-Versuch erfolglos war. Wenn der 
			Login-Versuch erfolgreich war, werden in [strRes] folgende Daten mit 
			Pipe-Zeichen
			getrennt abgelegt: UserRecordID|UserID|UserLevel|RightID|ShortName. 
			strHeader ist für die Überschrift des Login-Dialoges. strWhereClause schränkt die 
			normale User-Tabellen-Abfrage noch weiter ein z.B, Personalnummer > “1000“.
			Wenn boolForceSuper=TRUE ist, muss sich der Supervisor (super) anmelden

DATABASE_CHANGE	 	[boolRes], strDBName, strAlias, strUser, strPwd, strHost, strPort, strChrSet,strColl
			Wechselt die System-Datenbank. Es ist zu bedenken, dass die Datenbankstruktur
			der Datenbanken gleich sein sollte (sie wird nicht erneut eingelesen) und auch, 
			dass die gleichen Benutzerrechte weiterhin gelten (auch sie werden nicht erneut
			eingelesen).
			Gibt [boolRes] zurück, wenn der Wechsel funktioniert hat.

CHOOSE_DIR 			[boolRes], [strPathName], strRoot, strHeader, numOptions
			Erlaubt das Auswählen eines Verzeichnisses. 
			[boolRes] 	gibt zurück ob erfolgreich ein Verzeichnis ausgewählt wurde. 
			[strPathName] 	ist zugleich das Startverzeichnis und enthält abschließend den 
					Namen des ausgewählten Verzeichnisses.
			strRoot 		ist das Laufwerk in dem gestartet werden soll (z.B. “c:\“). Falls 
					dieser String leer ist, wird das Laufwerk aus [strPathName] 
					extrahiert.
			strHeader 	ist die Überschrift des Dialogs.
			numOptions 	kann sich zusammensetzten aus:
			[CHOOSE_DIR_NEW_FOLDER]	Soll der User auch neue Verzeichnisse 
							anlegen dürfen?
			[CHOOSE_DIR_SHOW_EDIT]	Soll ein Eingabefeld unterhalb des Auswahl-
							fensters eingeblendet werden?
			[CHOOSE_DIR_SHOW_SHARE]	Sollen auch Freigaben gezeigt werden?
			[CHOOSE_DIR_NEW_UI]		Soll das neue Dialoglayout verwendet 
							werden?
			[CHOOSE_DIR_SHOW_FILES]	Sollen auch Dateien angezeigt werden?
			[CHOOSE_DIR_VALIDATE_DIR]	Soll ggf. die Eingabe des Benutzers überprüft 
							werden?

DMS_RIGHTS_2_LIST		[aList]
			Mit diesem Befehl werden die Rechtebinärflaggen, die zu den im Menü 
			gekennzeichneten DMS-Menüpunkten gehören, an in einer Liste ausgegeben. 
			Dabei enthält jede Zeile den DMS-Index und durch ein Komma getrennt die DMS-
			Rechte-Flagge. Diese kann sich folgendermaßen zusammensetzten: 
			DMS_RIGHT_READ_LEVEL_0 	(1)	
			DMS_RIGHT_READ_LEVEL_1 	(2)
			DMS_RIGHT_READ_LEVEL_2 	(4)
			DMS_RIGHT_READ_LEVEL_3 	(8)
			DMS_RIGHT_WRITE		(16)
			DMS_RIGHT_DELETE		(32)
			DMS_RIGHT_INSERT		(64)
			Diese Rechte ergeben sich automatisch aus den Rechten, die dem User bei dem 
			entsprechenden Menüpunkt im Rechtesystem zugeordnet wurden.

OPTIMIZE_1DX_START [listAvailLens], [listNeededLens], numBladeWidth, numOptLevel, numOptType

	Dieser Befehl ist durch nur Einbinden der DLL optimal1dx.dll der Firma "OptimalPrograms" (www.optimalprograms.com) möglich.

	Die DLL erlaubt das Optimieren von Längen-Zuschnitten. Die CARA-Engine muss extra für die Verwendung dieser kostenpflichtigen DLL kompiliert werden. Der Typen-Zusatz ist dann O1DX in der CARA-Versions-Info.

	Zur Lizensierung für die Serverversion erhält jeder Kunde eine Identifikationsnummer.
	Diese Identifikationsnummer wird von Optimal Programs vergeben und auf die eingespielte DLL genau angepasst. In der INI-Datei, Sektion [Config] kann mit dem Schlüssel "Optimal1DxIdentification=" diese Nummer angegeben werden.

	Man kann die Liste [listAvailLens] mit den "Längen" füllen, die im Lager verfügbar sind.
	Jede Länge kann einen eindeutigen Index bekommen (nicht höher als 2147483647). Eine Zeile dieser Liste muss dem Format LängeInMM{|Index{|Preis{|Priorität 0=max}}} entsprechen. 
	Alle Lagerbestände müssen dann so an diese Liste übergeben werden. Beispiel:
    	LIST_APPEND [listAvailLens],'5000|32'		oder, mit Preis '5000|32|33.45|0'
    	LIST_APPEND [listAvailLens],'5000|55'		oder, mit Preis '5000|55|31.22|0'
    	LIST_APPEND [listAvailLens],'5000|51'		oder, mit Preis '5000|51|29.80|0'
    	LIST_APPEND [listAvailLens],'13000|47'		oder, mit Preis '13000|47|91.10|0'
    	LIST_APPEND [listAvailLens],'13000|10'		oder, mit Preis '13000|10|98.30|0'

	Man kann die Liste [listNeededLens] mit den "Längen" füllen, die zugeschnitten werden sollen.
	Jede Länge kann einen eindeutigen Index bekommen (nicht höher als 2147483647). Eine Zeile dieser Liste muss dem Format LängeInMM{|Index{|Winkel-links{|Winkel-rechts}}} entsprechen. Alle Zuschnittswünsche müssen dann so an diese Liste übergeben werden. Beispiel:
    	LIST_APPEND [listNeededLens],'2500|8473'	oder, mit Winkel '2500|8473|45|50.5'
    	LIST_APPEND [listNeededLens],'2800|1457'	oder, mit Winkel '2800|1457|90|90'
    	LIST_APPEND [listNeededLens],'2800|3464'	oder, mit Winkel '2800|3464|170|30'
    	LIST_APPEND [listNeededLens],'2800|2348'	oder, mit Winkel '2800|2348|90|90'
    	LIST_APPEND [listNeededLens],'4000|9383'	oder, mit Winkel '4000|9383|80|130'
    	LIST_APPEND [listNeededLens],'4000|5678'	oder, mit Winkel '4000|5678|47|60'
	
	Die Breite des Sägeblattes (numBladeWidth) kann in Millimeter angegeben werden.
	Der Optimierungslevel (numOptLevel) ist normalerweise mit 50 gut gesetzt. 
	Der Optimierungstyp (numOptType) folgende Werte annehmen
		0 = Verschnittoptimierung
		1 = Kostenoptimierung

	Nach dem Aufruf passiert eigentlich nichts.

OPTIMIZE_1DX_GET   [listResult] mit diesem Befehl kann man das Ergebnis abrufen.

	Das Ergebnis hat Zeilen mit folgenden Formaten:
	1. Zu fertigende Zuschnitte
	availLen~availIdx|wasteLen|cutLen1~cutIdx1..cutLenN~cutIdxN	
	Beispiel (ohne Preise und Winkel):          
	13000~47|560|4000~5678|2800~2348|2800~1457|2800~3464
          	5000~32|990|4000~9383
          	5000~55|2490|2500~8473
	
	Beispiel (mit Preisen und Winkeln, kostenoptimiert):          
          	13000~47|565.65|2800~1457|2800~2348|4000~5678/120.00/133.00|2800~3464/30.00/170.00
          	5000~51|990.00|4000~9383/80.00/130.00
          	5000~55|2490.00|2500~8473/129.50/135.00
	
	2. Zuschnitte, die aufgrund von zu geringem Lagerbestand nicht bedient werden konnten:
	FAILS|needLen~needIdx
	
	3. Gesamtsumme des Ergebnisses
	TOTAL|LenFails|lenNeeds|lenUsed|lenWaste|Waste%|BladeWidth
	Beispiel (ohne Preise und Winkel):          
	TOTAL|0|18900|23000|4040|17.57|10
	Beispiel (mit Preisen und Winkeln, kostenoptimiert):          
          	TOTAL|0|18900|23000|4045.65|17.59|10

OPTIMIZE_2DX_START [listAvailSheets],[listNeededPieces]{,numBladeWidth {,numOptLevel {, numMaxCutLen 								{,numOptType {,numFirstDirection}}}}}

	Dieser Befehl ist durch nur Einbinden der DLL optimal2dx.dll der Firma "OptimalPrograms" (www.optimalprograms.com) möglich.
	
	Die DLL erlaubt das Optimieren von Längen-Zuschnitten. Die CARA-Engine muss extra für die Verwendung dieser kostenpflichtigen DLL kompiliert werden. Der Typen-Zusatz ist dann O2DX in der CARA-Versions-Info. 

	Zur Lizensierung für die Serverversion erhält jeder Kunde eine Identifikationsnummer.
	Diese Identifikationsnummer wird von Optimal Programs vergeben und auf die eingespielte DLL genau angepasst. In der INI-Datei, Sektion [Config] kann mit dem Schlüssel "Optimal2DxIdentification=" diese Nummer angegeben werden.

	Man kann die Liste [listAvailSheets] mit den Platten füllen, die im Lager verfügbar sind.
	Jede Platte kann einen eindeutigen Index bekommen (nicht höher als 2147483647). Eine Zeile dieser Liste muss dem Format width|height|idx{|prio} entsprechen. 
	Alle Lagerbestände müssen dann so an diese Liste übergeben werden. Beispiel:
    	LIST_APPEND [listAvailSheets],'3000|2000|501'
    	LIST_APPEND [listAvailSheets],'3000|2000|502'
    	LIST_APPEND [listAvailSheets],'3000|2000|503'

	Man kann die Liste [listNeededPieces] mit den Stücken füllen, die zugeschnitten werden sollen.
	Jedes Stück kann einen eindeutigen Index bekommen (nicht höher als 2147483647). Eine Zeile dieser Liste muss dem Format width|height|idx{|prio{|canrotate}} entsprechen. Alle Zuschnittswünsche müssen dann so an diese Liste übergeben werden. Beispiel:
    	LIST_APPEND [listNeededPieces],'600|400|201'
    	LIST_APPEND [listNeededPieces],'600|400|202'
    	LIST_APPEND [listNeededPieces],'480|400|203'
    	LIST_APPEND [listNeededPieces],'600|530|204'
    	LIST_APPEND [listNeededPieces],'450|450|205'
    	LIST_APPEND [listNeededPieces],'500|800|206'
	
	Die Breite des Sägeblattes (numBladeWidth) kann in Millimeter angegeben werden.
	Der Optimierungslevel (numOptLevel) ist normalerweise mit 50 gut gesetzt. 
	Die maximale Schnittlänge kann mit numMaxCutLen angegeben werden.
	Der Optimierungstyp numOptType kann folgende Werte annehmen
		0 = Standard = Guillotine 	Schnitte werden wie bei einer Stichsäge angesetzt
		1 = MultiStages 		Schnitte werden wie bei einer Kreissäge angesetzt 
					d.h. immer das gesamte Stück mit einem geraden Schnitt teilen
	WENN der  Optimierungstyp = 1 = MultiStages gewählt wurde, kann mit dem Wert numFirstDirection angegebene werden, ob der erste Schnitt 0=horizontal oder 1=vertikal erfolgen soll.

	Nach dem Aufruf passiert eigentlich nichts.

OPTIMIZE_2DX_GET   [listResult] mit diesem Befehl kann man das Ergebnis abrufen.

	Das Ergebnis hat Zeilen mit folgenden Formaten:
	1. Platte, die zugeschnitten werden muss: SHEET|0|90.70 |0|501|3000|2000|19|10|9|10
	SHEET|Counter|Sheet Cover%|SheetIdx|SheetID|Width|Height|Cuts|Pieces|Wastes|BladeWidth
	Hier soll also die 0-te (die Zählung beginnt bei 0) Platte zugeschnitten werden, Es wurde eine Ausnutzung der Oberfläche von 90,7% erreicht. Die ursprünglich 0-te (also erst) Platte aus der [listAvailSheets] mit der ID 501 wird hier verarbeitet. Die Platte hat die Länge 3000 und die Breite 2000. Es sind 19 Schnitte notwendig. Es werden hier 10 Stücke zugeschnitten und es entstehen 9 Abfälle. Die Sägeblattstärke ist 10mm.

	2. Schnitt, der ausgeführt werden muss: CUT|0|0|1100|0|1100|2000|10
	CUT|Sheet|Cut|TopX|TopY|BotX|BotY|Blade
	Hier soll auf der Platte mit dem Counter 0 ein Schnitt beginnend bei1100:0 nach 1100:2000 ausgeführt werden, das Sägeblatt hat die Stärke 10.

	3. Stück, das ausgeschnitten wird: PIECE|0|0|0|0|900|900|1|11|212|900|900|1|0
	PIECE|SHEET|Count|TopX|TopY|BotX|BotY|Rotated|PieceIdx|PieceID|width|height|CanRotate|Priority
	Hier wird ein Stück aus der Platte mit dem Counter 0 geschnitten. Die obere linke Ecke liegt bei 0:0 und die untere rechte Ecke bei 900:900. Die Platte wurde gedreht. Es handelt sich um das 11 Stück, das in der [listNeededPieces] angegeben wurde, mit der ID 212. Die Länge des Stückes ist 900 und die Breite auch. Das Stücke durfte per Definition gedreht werden. Die Priorität des Stückes war 0.
  	
	4. Abfall der entsteht: WASTE|0|0|0|1870|450|2000
	WASTE|Sheet|WasteCounter|TopX|TopY|BotX|BotY
	Hier entsteht der 0-te Abfall (die Zählung beginnt bei 0) aus der Platte mit dem Counter 0. Die obere linke Ecke liegt bei 0:1870 und die untere rechte Ecke bei 450:2000.

	ASCII_IMPORT_DIRECT	'strConfigFileNameINI', [numRes]
					Mit dem Befehl wird der Dialog des ASCII-Import-Tools geöffnet, dann wird die 
					Einstellung, die mit dem Parameter 'strConfigFileNameINI' angegeben wird 
geladen. Anschließend wird automatisch und sofort mit dem Import begonnen und 
					nach erfolgtem Import wird der Dialog geschlossen. Die Anzahl der importierten 
					Datensätze wird in der Variable [numRes] zurückgegeben. Falls ein Fehler 
					auftritt, wird in der Variable [numRes] der Wert -1 zurückgegeben. Während der 
					Ausführung des Befehls werden keinerlei Warn- oder Fehlermeldungen 
					angezeigt, sodass der Befehl auch im Hintergrund ausgeführt werden kann.

	GET_UUID 			[strRes]
						Gibt eine UUID V4 zurück, wenn keine UUID erzeugt werden kann, ist das 
						Resultat leer.

	QRCODE 			[listValue], [boolRes], strBitmapFileName, 
			{, numImageSize	-> find out with tool CaraQRCodes.exe 
			{, numEncoding 	-> ALPHA=0, BYTE=1, NUMERIC=2, KANJI=3, AUTO=4 (d) 
			{, numVersion 			-> 1(default)..40 
			{, numFNC1 			-> NO=0(d), FIRST=1, SECOND=2 
			{, numModulSize 		-> 4(default) 
			{, numCorrectionLevel		-> L=0(default), M=1, Q=2, H=3 
			{, numAppIdentifier 		-> -1(default) 
			{, boolAutoConfigure 		-> TRUE(default) 
			{, numMargin 			-> 10(default) 
			{, boolActivateStucturedAppend 	-> FALSE(default) 
			{, numActivateStucturedIndex 	-> 0(default) 
			{, numActivateStucturedTotal 	-> 0(default)}	}}}}}}}}}}}

			Es wird ein QRCode als Bitmap-Datei erzeugt und gespeichert. Die Größe des 
			Bitmaps kann vorgegeben werden. Wenn man ausprobieren möchte, wie groß ein 
			solches Bitmap für die eignen Anforderungen sein muss, dann kann dies mit dem 
			Programm CaraQRCodes.exe herausgefunden werden. 
			Der gesamte Inhalt der VAR_LIST [listValue] wird zu einem QRCode verarbeitet.
			In der VAR_BOOL [boolRes] kann abgelesen werden, ob die Barcodedatei 
			erzeugt werden konnte. Sollte eine Datei mit dem Namen beim Aufruf bereits 
			existieren, wird diese vor der Ausführung des Befehls zunächst gelöscht.

			Mit numImageSize kann man die Kantenlänge des QRCodes (der quadratisch ist) 
			in Pixeln festgelegt werden.

			Mit numEncoding steht auf AUTO, Info https://de.wikipedia.org/wiki/QR-Code
			Die Vorgabe für die Version steht in numVersion auf 1.
			
			numFNC1 steht auf NO – Info: https://www.barcodefaq.com/2d/qr-code/aim-gs1-fnc1/.

			numModulSize gibt in Pixeln an, wie groß ein Element des QRCodes sein soll. 

			Der numCorrectionLevel steht per Vorgabe auf 0=L = Low (der QR-Code bleibt 
			lesbar wenn weniger als 7% davon unlesbar sind, die maxiamle Anzahl der 
			Zeichen für einen solchen barcode beträgt 7089 Zeichen. 
			1 = M = Medium = 15% mit max 5596 Zeichen
			2 = Q = Quality = 25% mit max 3993 Zeichen
			3 = H = High = 30% mit max 3057 Zeichen
	
			numAppidentifier steht auf neutral, 
			Info: https://www.gs1.org/standards/barcodes/application-identifiers?lang=de
	
			boolAutoConfigure ist per Vorgabe TRUE
			
			Mit numMargin kann in Pixeln die Breite des Randes um den QRCode angegeben 
			werden.
	
			numActivateStucturedAppend https://segno.readthedocs.io/en/stable/structured-append.html
			Damit können die Informationen des QRCodes auf mehrere QRCodes verteilt 
			werden.

	NOTIFY 		[boolRes], strNotifyName, strTableName, RelRecID, strDescription, strRelations {,
                       strScriptAndListName}

			Mit diesem Befehl kann eine Benachrichtigung gemeldet werden.
	[boolRes] 	Gibt zurück, ob der Befehl erfolgreich ausgeführt werden konnte.
	strNotifyName	Hier muss der Name angegeben werden, der bei der Definition des 
			Benachrichtigungstypes angegeben wurde. Z.B. „Neuer Artikel“
			Wenn hier z.B. „Neuer Artikel*“ angegeben wird und in den 
			Benachrichtigungstypen mehrere Definitionen vorhanden sind, die alle mit 
			„Neuer Artikel…“ beginnen, so werden alle diese Benachrichtigungstypen ggf. 
			einen Eintrag bekommen.
	strTableName	Aus welcher Tabelle stammt der Datensatz, der hier gemeldet werden soll? 
			Z.B. „artikel“.
	RelRecID	Hier bitte die RecordID des zu meldenden Datensatzes angeben.
	strDescription	Die Liste der Ereignisse zeigt genau den hier übergebenen String an. Es ist 
			sehr sinvoll hier verständliche Angaben für den Benutzer zu machen. 
			Z.B. „Nr. 4711, Metallfeile, angelegt am 17.05.2022 um 18:30 von Dieter“
	strRelations	Neben dem der zuvor genannten Datensatzrelation (strTableName und 
			RelRecID) können hier noch weitere Relationen genannt werden.
			Will man beispielsweise das Anlegen einer neuen Auftragsposition „melden“, 
			dann kann man hier z.B. den beteiligten Artikel, den beteiligten Kunden und 
			ggf. auch die beteiligte Warengruppe übergeben.
			Beispiel: 
			‘Artikel|7896541230621,Kunde|789654189433,Warengruppe|78736363634674‘
			Hier werden keine Tabellennamen angegeben sondern die im Script 
			„NotifyAction.csh“ X-Referenz-Namen.
	
	strScriptAndListName	Wenn der neue Parameter strScriptAndListName den Namen eines Scriptes und mittels
			eines Pipe-Zeichens ( | ) separiert davon, den Namen einer globalen ListenVariable, enthält, 
			wird im Hintergrund nach dem Speichern der Notifikationen das genannte Script gestartet 
			und dies erhält als einen Parameter in PAR_STR1 den ebenfalls hier übergebenen Namen 
			der globalen Liste. Die Liste ist gefüllt mit Zeilen, deren Werte ebenfalls durch Pipe-Zeichen 
			getrennt sind und folgende Spalten enthalten: 
				RecordID des Users, der die Notification erhält
				RecordID des NotifyItems das „gefeuert“ hat
				RecordID der NotifyAction die „gefeuert“ hat

			Beispiel-Dateien in: document\examples\notification\...