FLEX 
Dokumentation der Makrosprache 
Tip: Strg+f = Finden, Strg+g = Weitersuchen  

_5 Sorry, Ihre Berechtigung reicht nicht
FLEX ist eine Skript- oder Makrosprache für das allegro-System. Fast alle Vorgänge, die man mit der Hand auslösen kann, sind auch über einen FLEX-Befehl ausführbar, aber auch noch viele andere. 
Die `Befehlssprache` des Konsolprogramms `acon` (und damit auch des avanti -Servers) ist weitgehend kompatibel und ist in diese Dokumentation integriert; auf Besonderheiten wird jeweils hingewiesen.  (Hinweis: Das Programm  avanti  für die Web-Oberflächen führt nicht selber FLEX-Befehle aus (wie a99), sondern es startet  acon, übergibt ihm die Befehle und erhält zurück die Ergebnisse, diese schickt  avanti  an den Browser.) 
 
    `Voll-Dokumentation `  `Kurz-Dokumentation` 

 `Alphabetisches Gesamtregister` `Alphabetische Liste der Befehlswörter` 

`Beispiele` 
`FLEXe für Systemfunktionen`  `Liste der Standard-FLEXe`  
 `Alle FLEX-Dateien sichten`   `Neue FLEX-Datei anlegen `
Für den Einstieg gibt es ein
`Online-FLEX-Lehrbuch` 
Und für Fortgeschrittene eine Sammlung von Tricks:
`Schnell mal eben...` 
Das Wichtigste zuerst:  
Es gibt eine `interne Variable` (kurz iV). Das ist eine temporäre Zeichenfolge, die nur so lange besteht, bis sie durch einen weiteren Befehl überschrieben wird. Das geschieht z.B. durch die Befehle `ask`,  `message`, `yesno` und ganz besonders `variable.` Diese vier sollte man zuerst lernen (der vierte ist der wichtigste!) und dabei die Methode, wie man mit der iV umgeht. Dazu wird eine Anzahl von ganz `einfachen Beispielen` bereitgestellt, die man bequem sofort ausprobieren kann.  
Die iV hat und braucht keinen Namen, das vereinfacht einiges. 
Man verwendet die interne Variable in der Regel sofort z.B. in einem  insert-Befehl, z.B.  insert #98 , um die iV in die Kategorie #98 zu kopieren.  
Der zweitwichtigste Befehl ist`insert`. Will man einen momentanen iV-Inhalt länger aufbewahren, dann kopiert man ihn mit   insert #uxy   in eine Uservariable #uxy. Und mit   var #uxy   von dort später wieder zurück in die iV zu weiterer Verwendung.
Viele der FLEX-Befehle nutzen automatisch den Inhalt der iV, wenn nichts anderes angegeben ist, z.B. `find` oder `open` und viele andere. 

Außerdem gibt es eine interne Zahlenvariable (kurz iZ), die für `Berechnungen` verwendet werden kann.  

NEU ab V25.6: `Freie Variablen`. Auch dieser werden mit  insert  belegt. Im Gegensatz zu den Uservariablen sind sie aber nicht in den Exportparametern verwendbar.

Nur die Kurzformen sind "amtlich"
Alle Befehlswörter außer  erase  kann man bis auf die ersten drei Buchstaben kürzen. Der Rest des Befehlswortes darf sogar anders lauten, nur die ersten drei Zeichen sind signifikant. Z.B. ist  keychk  statt  keycheck  möglich, aber auch  key  klappt. Anders gesagt: Nur die dreibuchstabigen Formen (sog. "Trigramme" oder "Triliterale") sind die offiziellen Befehle, der Rest ist optional, ist Konzession an Verständlichkeit und Lesbarkeit, wird vom Programm aber ignoriert.
 
So erstellt man FLEXe 
Tip: Immer ein Fenster mit der `Demo-Datenbank` zusätzlich öffnen. In diesem Fenster kann man dauernd die FLEX-Dokumentation geöffnet haben. Im Schreibfeld  h xa  eingeben, dann kommt die Liste aller Befehle. Jeden kann man anklicken, um seine Beschreibung zu erhalten. 
Ein FLEX-Makro ist eine Befehlsfolge und wird kurz FLEX genannt, der FLEX (nicht die oder das). Wenn eine solche Befehlsfolge dauerhaft aufbewahrt werden soll, speichert man sie in einer Datei vom Typ .flx (siehe unten D), für die Ausführung durch  acon  aber Typ .job
 
A.  Einen FLEX von Hand eingeben  
(erfordert mindestens Berechtigung  access=4 in der `INI-Datei`) 
 
Der einfachste Weg, einen FLEX einzugeben und sofort auszuführen, ist die unmittelbare Eingabe im Schreibfeld. Man muss "x " vorweg setzen und die einzelnen Befehle mit \ trennen.  
Oder: ein großes "X " vorweg setzen und den Namen einer FLEX-Datei dahinter (siehe D). 
   Beispiel: Geben Sie im Schreibfeld ein (und dann Enter) 
                 x ask Ihr Name bitte\message 
oder           x var "Die Datenbank liegt auf: " D\mes 
 
In der Praxis ist das nur in wenigen Fällen sinnvoll, sehr wohl aber zum Lernen und Testen, weil man so am schnellsten etwas ausprobieren kann. 
 
Der zweit-einfachste Weg, einen FLEX zu erstellen und auszuführen ist folgender; er wird dann aber auch für mehrfache Verwendung gespeichert: 
1. Befehlsfolge im Schreibfeld eingeben, vorn am Anfang  #uXi  mit einer Ziffer  i=0, 1, ... 9 
    Beispiel: man gibt im Schreibfeld ein 
              #uX9 x message Index 1 wird gezeigt\index |1 shakesp 
                Enter drücken. Der FLEX wird in Variable  #uX9  gespeichert 
2. Ausführen: Alt+Ziffer  (Alt+9 für das Beispiel, um  #uX9  zu aktivieren) 
3. Ändern: Alt+r um den Reservespeicher zu sehen, Zeile  #uX9  auswählen, dann [Enter]; Befehle ändern, nochmals [Enter] zum Zurückspeichern. 
 
Auf diese Weise kann man sich bis zu 10 FLEX-Makros einrichten. Sie werden dann zusammen mit den Phrasen abgespeichert (Datei phrase.a99) und bleiben somit für nachfolgende Sitzungen erhalten. Die Makros 1 bis 8 liegen dann auf den Flip-Buttons links vom Schreibfeld. Deren Beschriftung kann man mit dem Befehl  `flip`  ändern. Um z.B. auf den Button 8 die Beschriftung "Sonder" anzubringen, gibt man ein:  flip 8&8 Sonder (Die Angabe &8 bewirkt, dass auf dem Button eine unterstrichene 8 erscheint, und nur dann kann er mit Alt+8 ausgelöst werden. 
Nur die FLEXe in den Variablen #uXi kann man mit der Alt-Taste auslösen, sie haben also eine Sonderstellung. Auf andere Weise kann aber auch die Strg-Taste beim FLEXen helfen, siehe C. 
Noch ein  Beispiel.  Geben Sie ein:   #uX0 set d 
Von da an können Sie mit  Alt+0  das Anzeigefeld zwischen groß und normal schalten. (Kann man mit F11 aber sowieso). 

B.  Einbettung in `Hilfedateien` oder Anzeigeparameter 
Andere Wege, FLEXe bereitzustellen, sind das Einbetten in Hilfedateien oder in die Anzeigeparameter. Das jedoch sind Aufgaben für den Allegrologen. Im Gesamtpaket sind viele vorbereitete Hilfedateien wie z.B. doku.rtf oder catger.rtf, die man als Muster heranziehen kann.  
Beispiel: Geben Sie im Schreibfeld ein: h alf.rtf  (statt nur h alf), dann sehen Sie auch die eingebetteten FLEXe (die Zeilen am Ende, die mit '?' anfangen).  
Sie erkennen, dass die Flip-Texte immer vorn und hinten durch einen "accent grave" begrenzt sind, und dass in den Zeilen unten, die mit ? beginnen, immer genau der Fliptext wiederholt wird und dann mit = der FLEX-Befehl angeschlossen ist. Das Zeichen \ ist in den Flip-Zeilen meistens durch ` ersetzt. Hier wirkt er als Befehlstrenner. 

C.  FLEXe im Phrasenspeicher 
Zum Dritten kann man FLEXe im Phrasenspeicher unterbringen. Wird dann die Phrase angefordert, wird statt dessen der FLEX ausgeführt.  
Beispiele: wenn in der Datei PHRASE.A99 steht: 
6   (steht für Strg+f) 
x var #uSW(1,0)\ins #uSW\var "="\ask +Suchwort?=#uSW\help\ins #uSW 
7   (steht für Strg+g) 
x var ">" #uSW(1,0)\ins #uSW\help 
Dann wird mit Strg+f die Phrase 6 und mit Strg+g die Phrase 7 ausgeführt. Und zwar braucht dabei der Cursor nicht im Schreibfeld zu sein, das klappt auch, wenn er woanders ist. 
Aber Achtung: die Werte 8,9,10,13,27 dürfen nicht belegt werden, das sind die Funktionen "Backspace", "TAB", "Enter", "Return" und "Esc". Einige Werte sind in der mitgelieferten PHRASE.A99 durch Sonderbuchstaben belegt, z.B.  Strg+p = ç. Noch nicht belegt:  2  5 15  17  23  25 ( Strg+b  e  o  q  w  y) 
Wenn man aber dennoch Phrase 9 belegt, kann man diesen FLEX auch mit der TAB-Taste auslösen. 
Phrasen können statt mit der Hand oder durch Eintragung in die Datei PHRASE.A99 auch aus einem FLEX heraus mit dem FLEX-Befehl `phrase` belegt werden (s.u.) 

D.  FLEX-Dateien 
Eine FLEX-Befehlsfolge für a99/alcarta kann in einer Datei stehen, diese sollte dann den Typ  .flx  haben. Für  acon ist .job üblich. 
Jeder Befehl muss auf einer neuen Zeile ganz vorn beginnen. 
Besonderheit: Zeilen, die mit Leerzeichen beginnen, gelten in a99 nicht, in acon aber doch. 
Auf einen  if-Befehl können mehrere Befehle auf derselben Zeile folgen, die dann mit ; zu trennen sind. 
Eine solche Datei wird aufgerufen, wenn man z.B. die Flip-Variable  #uXi bzw. #uZi mit X statt mit x beginnen lässt, 
Beispiel:  #uX1X o-bestel.flx.    Mit Alt+1 wird dann o-bestel.flx ausgelöst. 
FLEX-Dateien können auch von außen aktiviert werden (Hilfsprogramm FLEX.EXE), dann spricht man von einem ExFLEX. Mehr dazu unter H. und `activate`. 
Von Hand startet man eine FLEX-Datei  name.flx, indem man im Schreibfeld eingibt  X name . Probieren Sie es mal mit Eingabe von  X euro  oder   X cockpit  oder   X dbinfo . 

FLEX-Dateien können im Datenverzeichnis liegen, im Programmverzeichnis oder auch im Arbeitsverzeichnis des Nutzers. Zusätzlich gibt es die Möglichkeit, an das Programmverzeichnis ein Unterverzeichnis FLEX anzuhängen und dort FLEX-Dateien zu lagern. Bei der Installation werden dort die Standard-FLEXe der Auslieferung abgelegt.  
Die Suchreihenfolge für FLEXe ist:  DbDir / ProgDir\FLEX / ProgDir / Lokal 
Ein besonderer FLEX ist der MyFlex, den man in der INI-Datei einrichten kann. Wenn dort steht: 
MyMenu=Sonderfunktion 
MyFlex=X meinflex.flx
Dann erscheint oben im Menü vor dem Punkt "Löschen" der eigene Punkt "Sonderfunktion", und er bewirkt die Auslösung des meinflex.flx.

Eine Befehlsdatei für das Konsolprogramm `acon` wird Jobdatei genannt und sollte die Namensendung .job erhalten. Zum Testen: Man lässt eine solche Datei  name.job  ausführen, indem man z.B. in einem DOS-Fenster eingibt: 
acon -jname .

E.  AutoFLEXe  
Eine Sonderstellung haben die Variablen #uX:, #uX; und #uX= . Wenn man sie mit einem FLEX-Befehl (z.B. #uX:X Groesse  oder  #uX=x var jb;ins #ujb ) belegt, wird dieser automatisch ausgeführt, und zwar bei 
#uX:  nach Fertigstellung der Anzeige, wenn gerade kein Index- und kein Ergebnisfenster geöffnet ist, 
#uX;  in jedem Fall sofort nach Fertigstellung der Anzeige, 
#uX=  nach dem Laden des Satzes in den Arbeitsspeicher, aber vor dem Ausführen der Anzeigeparameter. 

Die Setzung kann aus einem Anzeigeparameter heraus oder auch in einem FLEX geschehen, dabei werden die Variablen #uX: und  #uX; nach Ausführung sofort gelöscht, #uX= bleibt dagegen bestehen und kann daher z.B. schon in dem  _start.flx  besetzt werden. 
Tip: Insbesondere kann man eine FLEX-Datei  variablen.flx  definieren, die beliebige interne Sondervariablen für die Exportparameter zur Verfügung stellt: 
Für jede Sondervariable würde man in  variablen.flx  eine Zeile setzen in der Form 
var jb; ins #ujb
und in  _start.flx  würde man 
#uX=X Variablen
setzen. Natürlich ist die Bezeichnung der Variablen  #u..  frei wählbar. 

F.  SonderFLEXe  für Start und Ende der Sitzung 
Zwei FLEXe nehmen eine Sonderstellung ein, wenn sie existieren: _start.flx und _endflx.flx. Sie werden direkt nach dem Start bzw. unmittelbar vor Ende der Sitzung ausgeführt. 
_start.flx kann man nutzen, um sofort bestimmte Vorbesetzungen von #u-Variablen, Flip-Buttons oder Phrasen vorzunehmen. In der INI-Datei kann man mit dem Befehl  StartFLEX=  auch mehrere, durch ; getrennte FLEX-Dateinamen angeben, diese FLEXe werden dann beim Start nacheinander abgearbeitet.
 
G.  PV-FLEX 
Das Einrichten von Programmierten Validierungen ist nicht jedermanns Sache, muss man doch dafür die Exportsprache meistern. 
Deshalb gibt es, zumindest für den wichtigen Punkt direkt vor dem Speichern des Datensatzes, den PV-FLEX. Ist ein solcher vorhanden, wird er bei Druck auf [Speichern] ausgeführt. Das eigentliche Speichern muss dann in Form eines "put" in den FLEX eingebaut sein. Ansonsten kann man im PV-FLEX jede erdenkliche Aktion durchführen, um den aktuellen Satz vor dem Speichern zu prüfen und zu behandeln.  
Der Name der PV-FLEX-Datei ist beliebig. Als Standort kommen die für FLEXe insgesamt möglichen Verzeichnisse in Frage, je nach Gutdünken. 
Und so wird der PV-FLEX aktiviert: in der INI-Datei gibt es den Befehl  SaveAsk=0/1, wo die Werte "0" (nicht fragen) bzw. "1" (immer fragen) möglich sind. Außer diesen Werten kann man aber auch schreiben: 
 
SaveAsk=X pruef 
 
wenn  pruef.flx  der Name der PV-FLEX-Datei ist, oder auch 
 
SaveAsk=x FLEX-Befehlsfolge 
 
wenn es sich um eine kurze Befehlsfolge handelt (bis 127 Zeichen).  
Es muss also "X " bzw. "x " auf  SaveAsk=  folgen, wenn ein PV-FLEX ausgeführt werden soll. 
Weil aus einem FLEX heraus auch externe Programme gestartet werden können, ist es ganz klar, dass diese erweiterte PV-Möglichkeit äußerst mächtig ist. 
Im Vergleich mit relationalen Datenbanken kommt diese Methode dem sog. "Trigger"-Konzept gleich. Dieses ermöglicht bei RDBMS, dass die Datenbank bei jeder Veränderung gewisse Bedingungen prüft und dann in bestimmten Fällen programmierte Aktionen durchführt. 
 
H.  ExFLEXe = Aufträge von außen
Einem laufenden a99 oder alcarta kann auch von außen ein FLEX-Auftrag erteilt werden. Einen solchen nennt man ExFLEX. Er besteht aus einer normalen FLEX-Datei, und das Senden derselben an a99 besorgt ein Hilfsprogramm namens FLEX.EXE. Ist  check.flx  der auszuführende FLEX, dann gibt man im DOS-Fenster den Befehl  
   flex check
und a99 führt dann  check.flx  aus. 
Mehr dazu in einem `eigenen Text`. 
 
FLEX-Beispiele 
In einer eigenen Datei findet man eine Reihe von `einfachen Beispielen` zum sofortigen Ausprobieren. 
Nach einer Standard-Installation hat man die Verzeichnisse c:\allegro\FLEX und c:\allegro\HELP. Darauf findet man zahlreiche Beispiele, die für bestimmte Aufgaben mitgeliefert werden. An der Datei  super.rtf  kann man beginnen, die Zusammenhänge kennenzulernen: Man gibt im Schreibfeld ein   
`h super.rtf`, dann sieht man das Supervisor-Menü und darunter die Aufrufe der eingebetteten FLEXe bzw. weiteren Hilfedateien. So kann man auch bei den anderen Hilfedateien vorgehen, z.B.   
`h adm.rtf`eingeben, dann sieht man, welche FLEXe jeweils dahinter stecken. 
Die mitgelieferten FLEX-Dateien liegen alle auf  c:\allegro\FLEX. 
 
Deshalb folgen hier nur wenige weitere Beispiele als Muster für eigene Aktionen. 
Wichtig:
Eingerückte Zeilen gelten als Kommentare und werden vom System nicht beachtet. Zur Verdeutlichung erscheinen die wirksamen Zeilen in Fettschrift. (In einer FLEX-Datei ist eine solche Hervorhebung nicht möglich.)  
 
Beispiel 1 : Ergebnismenge durcharbeiten 
Aufgabe : Man hat eine Ergebnismenge und möchte in jedem Satz das Feld #31 bearbeiten. 
.
  Den ersten Satz der Erg.Menge holen
first 
:anfang 
  Kategorie #31 zum Bearbeiten vorlegen 
ask bitte bearbeiten (Esc : Schleife abbrechen)=#31 
  Wenn man mit Esc beendet hat, Bearbeitung beenden 
if cancel end 
  Sonst den bearb. Text wieder in #31 kopieren 
insert #31 
  und den Satz dann (mit Nachfrage) wieder speichern 
Put 
  Nächsten Satz holen 
next 
  Wenn's noch einen gibt, dann zurück zum Anfang der Schleife 
if yes jump anfang 

Man kann auch die gesamte Datenbank durcharbeiten lassen. Rezept dazu in einem `anderen Hilfetext`. 

Beispiel 2 : Teil-Automatisierung einer Bearbeitung 
Die Aufgabe ist folgende: Man hat eine Menge Datensätze zu bearbeiten, die man jeweils über die Inventarnummer aufruft, dann eine bestimmte Kategorie hinzufügt oder ändert und den Satz dann wieder abspeichert - manchmal aber auch nicht. 
Annahme: es gibt ein Register INV im Index 9 mit der Inventarnummer. 
Dazu eignet sich ein FLEX nach diesem Muster: 
 
  Inventarnummer abfragen (Vorgabe: Inhalt von #uib) Index 9 bei Druck auf [Index] 
:anfang 
ask  |9Inventarnummer=#uib 
  Ist die Eingabe leer? Dann Abfrage wiederholen 
if "" jump anfang 
  Wurde [Esc] gedrückt? Dann Ende 
if cancel end 
  Eingegebene Nummer wieder in #uib kopieren: 
insert #uib 
  Text der internen Variablen zusammensetzen aus "inv " und #uib  
var "inv " #uib 
  und als find-Befehl ausführen (d.h. "find inv ...") 
find 
  Kategorie #xyz mit Inhalt Text einfügen in den geladenen Satz 
#xyz Text 
  den so veränderten Satz anzeigen 
disp 
sho rec
  Fragen, ob er gespeichert werden soll 
yesno Speichern? 
  und Speicherung ausführen, wenn Antwort "OK" 
if yes put 
Statt der beiden letzten Befehle kann man auch  Put  setzen, dann kommt ebenfalls die Aufforderung zur Bestätigung 
 
Beispiel 3 : Eingabe-Unterstützung 
Neue Datensätze sollen immer schon mit einer Anzahl fester Kategorien vorbesetzt werden. Statt über die Formulartechnik kann man auch einen FLEX anlegen, indem man im Schreibfeld eingibt: 
 
#uX3x new\#nn1 Text1\#nn2 Text2\#nn3 Text3\trans #nn4\form 2 
 
Dadurch wird zuerst ein neuer (leerer) Satz angelegt, dieser mit drei vorbereiteten Kategorien belegt, Kategorie #nn4 wird aus dem Hintergrundspeicher übernommen, dann Formular 2 aktiviert für die weitere Eingabe. Mit Alt+3 aktiviert man diesen FLEX. Man sieht leicht, wie man dieses Beispiel ausbauen kann. 
Man kann mehrere solche FLEXe  für unterschiedliche Satztypen anlegen. 
  
Beispiel 4 : Export der aktuellen Ergebnismenge 
Aufgabe: Es soll mit Hilfe von P-W.APR (Ausgabe im RTF-Textformat) die Ergebnismenge in die Datei LISTE.RTF geschrieben werden, wobei die Hilfsdatei  LONGHEAD.RTF vorangestellt und am Ende noch als Abschluss die Zeichen }}} anzufügen sind. 
 
  Dateinamen für den Export setzen 
export f liste.rtf 
  Dateikopf zuerst ausgeben 
write Flonghead.rtf  
  Parameter laden 
export p p-w  
  Ergebnismenge ausgeben 
export set 
  Abschluaazeichen: 
write "}}}" 
 
Jetzt kann die fertige Datei sofort von WinWord aus eingelesen werden.   

FLEXe für System-Funktionen 
 
Es gibt eine Anzahl von FLEXen, die automatisch vom System in bestimmten Fällen aufgerufen werden. Dadurch wird mehr FLEXibilität gewonnen. Keiner von diesen muss unbedingt vorhanden sein. Wenn einer fehlt, fehlt eben dessen Funktion. Änderungen an diesen FLEXen erfordern besondere Umsicht, das ist klar. Alle diese FLEXe enthalten Kommentare zu ihrer Wirkungsweise. 
Folgende SystemFLEXe gibt es: (Die Namen beginnen alle mit _ ) 
 
_door.flx 
Wird durch den Button mit der Tür aktiviert. Startet standardmäßig DOOR.BAT und setzt die dazu nötigen  Optionen. 
 
_rs.flx 
Wird in A99 vom Menue  "Datei | DOS-Programm" aktiviert 
Ruft standardmäßig PRESTO auf, und zwar mit denselben Randbedingungen wie das gerade aktive A99. 
 
_as.flx 
Wird in ALCARTA vom Menue  "Datei | DOS-Programm" aktiviert 
Ruft APAC auf, und zwar mit denselben Randbedingungen wie das gerade laufende ALCARTA 
 
_otherdb.flx 
Wird in A99 vom Menue  "Datei | Weitere Datenbank" aktiviert 
 
_new.flx 
Sehr spezieller Fall: Wird automatisch gestartet, wenn bei noch leerer Datenbank [Index] gedrückt wird. Startet dann die Erfassung des ersten Datensatzes. 
 
_newdb.flx 
Wird gestartet aus NEWDB.RTF heraus, nachdem man eine neue Datenbank anlegen will und eine Struktur gewählt hat. (Menüpunkt NEWDB auf dem Menue SUPER.RTF) 
 
_initial.flx 
Nur beim ersten Start einer noch leeren Datenbank: zur Belegung der Flip-Buttons. 
 
_psw.flx 
Wird unmittelbar nach Programmstart und vor dem ersten Zugriff ausgelöst. Dies ist der Ort für eine `Passwort-Abfrage`. Normalerweise hat man keinen _psw.flx. Der mitgelieferte password.flx  kann umbenannt werden in _psw.flx, damit erreicht man, dass eine Passwort-Abfrage erfolgt.

 _start.flx 
Wird unmittelbar nach Programmstart und nach _psw.flx ausgelöst. Geeigneter Ort, um die Flip-Buttons zu belegen. 

_endflx.flx 
Wird unmittelbar vor dem Schließen der Datenbank ausgelöst. Hier können noch datenbankspezifische Prüfungen eingebaut werden. Wenn dieser FLEX das Wort "no" in die iV schreibt, wird das Beenden des Programms unterbunden. Schreibt man andererseits STOP hinein, kann man die Nachfrage unterbinden, ob das Programm wirklich beendet werden soll. 
 
On-FLEXe 
Folgende FLEXe werden, wenn sie existieren, bei Betätigung bestimmter Buttons oder Funktionen ausgelöst: 
Ist einer dieser FLEXe nicht vorhanden, wird eine Default-Aktion ausgelöst, anders als bei den SystemFLEXen. 
Nicht für alle dieser Fälle wird deshalb ein FLEX mitgeliefert, z.B. nicht für onfind.flx. 
 
oninput.flx 
Wird beim Druck auf den Button [Neusatz] = F9 ausgeführt. Darin muss dann  new  oder  copy  vorkommen, wenn eine Eingabe gewünscht wird. 
 
oncopy.flx 
Wird beim Anlegen eines neuen Datensatzes ausgeführt, wenn dieser als Kopie eines anderen angelegt wird und oninput.flx nicht existiert. 
 
onnew.flx 
Wird beim Anlegen eines neuen Datensatzes ausgeführt, wenn oninput.flx nicht existiert: 
 
onforms.flx 
Wird beim Druck auf den Button [Form.# ] ausgeführt. Darin muss dann  form i  vorkommen, wenn ein Formular gewünscht wird. In diesem FLEX kann man es einrichten, dass ein Formular aufgemacht wird, das zum aktuellen Satz passt. 
 
ondfile.flx 
Wird bei dem Menüpunkt "Datei /  Anzeige speichern als..." ausgeführt.
Muss den Befehl file enthalten, wenn gespeichert werden soll. Wenn dieser FLEX  fehlt, wird die normale Funktion ausgeführt. 
 
onput.flx 
Wird bei Druck auf den [Speichern]-Button ausgeführt, aber nur, wenn in der INI-Datei der Wert  saveask=2  gesetzt ist. 
Muss den Befehl put enthalten, wenn gespeichert werden soll. Um zu checken, ob das Speichern funktioniert hat, sollte man nach  put  noch einen Befehl  if no ...  ergänzen. 
 
onerase.flx 
Wird bei Betätigung der "Löschen"-Funktion ausgeführt. 
Löschen verhindern: 
Wenn dieser FLEX das Wort "NO" in die iV schreibt, wird das Löschen nicht ausgeführt. 
 
onerror.flx 
Wird ausgelöst, wenn im Schreibfeld etwas eingegeben wird, was kein Befehl und keine Kategorie ist. (Wenn onerror.flx nicht existiert: Meldung "falsche Eingabe") 
Der Inhalt des Schreibfeldes steht dann in der iV. Wenn a99/alcarta nach Ende des onerror.flx keine weiteren Aktionen ausführen soll, muss vor Beendigung des Flexes die iv gelöscht werden.
onexprec.flx 
onexpset.flx 
Wenn diese FLEXe existieren, wird beim Menuepunkt "Export | Aktueller Satz" bzw. bei 
"Export | Aktuelle Erg.Menge" dieser FLEX ausgeführt. Darin muss dann, wenn wirklich exportiert werden soll, der Befehl  exp  bzw.  exp set  stehen. 
Existieren diese FLEXe nicht, wird normal exportiert. 
 
onxportf.flx 
onxportp.flx 
Wenn diese FLEXe existieren, wird beim Menuepunkt "Export | Andere Exportdatei" bzw. bei 
"Export | Andere Exportparameter" dieser FLEX ausgeführt.  
Existieren diese FLEXe nicht, wird a99 die Normalfunktion ausführen, alcarta aber nichts machen. 
 
onviewrs.flx 
Auslösung bei "Ansicht / Aktuelle Erg.menge". Default: Anzeige mit Printparameter 

onextern.flx 
Wird ausgelöst, wenn Alt+t gedrückt wird. Fehlt er, wird die bisherige Funktion des externen Editierens ausgeführt. Man könnte z.B. den notepad.flx auf diesen Namen umkopieren. 
 
onglobal.flx 
Wird ausgelöst, wenn einer der drei Punkte des Menüs "Global" ausgelöst wird. In der iV steht dann eine Ziffer, und zwar 1 für Ersetzung, 2 für Manipulation und 3 für Löschung. Nur wenn diese Ziffer dann wieder zurückgegeben wird, erfolgt die Ausführung der Aktion. D.h. man kann noch eigene Aktionen davorschalten. 
 
onhlpa99.flx 
Wenn der Menüpunkt "Füllhorn" ausgelöst wird in a99 (Default: h doku) 
onhlpalc.flx  
bzw. in alcarta.  (Default:  h alcm) 
 
onfind.flx 
Wenn der Find-Button (Fernglas) gedrückt wurde. Wenn  das Find-Menü dann wirklich erscheinen soll, kann der Befehl  
button f  eingebaut werden. 
(Default: Find-Menü) 
 
onfnda99.flx 
Wenn in der Suchbefehlszeile kein ausführbarer Befehl eingegeben wurde. 
(Default: Indexanzeige)  Tip: Automatisch steht in #ux0 der Eingabetext. 
Man kann sich mit diesem FLEX neue Kommandozeilen-Befehle einrichten. 
onfndalc.flx  
bzw. dasselbe in alcarta. 
 
onlist.flx   (ab V28) 
Kontextmenü (rechte Maustaste) für das Listenfeld auf der linken Seite: Umschalten zw. den div. Inhalten 
 
onoffl.flx   (ab V25.2) 
Menüpunkt  "Datei / Weitere Offline-Datei laden" . Wenn dieser FLEX nicht existiert, wird die bisherige Funktion ausgeführt: Offline-Datei auswählen und laden. 
 
onprint.flx 
Wird ausgelöst, wenn der Printer-Button betätigt wird. Wenn wirklich gedruckt werden soll, muss dann innerhalb des FLEXes der Befehl  print vorkommen, der den Inhalt des Anzeigefeldes ausdruckt. 
 
onprop.flx 
Wird ausgelöst, wenn auf dem Kontextmenü (rechte Maustaste) des Anzeigefelds der Punkt "Eigenschaften" gewählt wird. Wenn nicht vorhanden, passiert dann gar nichts.
 
onlist.flx 
Wird ausgelöst, wenn die rechte Maustaste auf dem Auswahlfeld gedrückt wird. 
Wenn nicht vorhanden, wird F11 aktiviert.
 
onf2.flx  onf3.flx  onf4.flx 
Wird bei Druck auf F2, F3 bzw. F4 ausgelöst. 
Für F2 wird onf2.flx mitgeliefert und bewirkt, dass die Schreibmarke und der Focus in das Anzeigefeld gesetzt wird. F3 und F4 sind frei, d.h. onf3.flx und onf4.flx werden nicht mitgeliefert. 
 
onf8.flx 
Wird bei Druck auf F8 ausgelöst. 
Wenn nicht vorhanden: Hintergrundspeicher -> Anzeige (= display reserve) 
 
onf11.flx 
Wird bei Druck auf F11 ausgelöst. 
Wenn nicht vorhanden: Anzeige umschalten breit<->schmal (= set d) 
 
onf12.flx 
Wird bei Druck auf F12 ausgelöst. 
Wenn nicht vorhanden: Hilfeseite Tastenbelegung HE_SP  (= h he_sp) 
 
onflips.flx 
Wird bei rechtem Mausklick auf einen der Flip-Buttons ausgelöst. 
Als Argument wird die Nummer des Buttons uebergeben, also z.B. 5, wenn es Button 5 ist (als hätte man  X onflips 5  eingegeben).
Fehlt dieser FLEX, liefert die rechte Maustaste ein Auswahlmenue, in dem schlicht die Beschriftungen der Flip-Buttons stehen und der jeweils ausgewählte dann ausgeführt wird.

?Beispiele=x h =FLEX-Beispiele 
?Liste der Befehle=x h flex 
?Hilfedateien=h help=FLEX-Einbettung 
?Kurz-Dokumentation=h flexk 
?h super.rtf=x set wm`h super.rtf 
?h adm.rtf=x set wm`h adm.rtf 
?activate=h xactivat 
?INI-Datei=h a99.ini 
?Voll-Dokumentation =h xa 
?Alphabetisches Gesamtregister=x set i9FLEX kann folgendes:`set i8FLEXIKON`View flex`set i9`set i8 
?phrase=h xphrase 
?ask=h xask 
?message=h xmessage 
?variable.=h xvar 
?yesno=h xyes 
?insert=h xinsert 
?eigenen Text=h exflex.txt 
?Liste der Standard-FLEXe=X flexikon 
?flip=h xflip 
?FLEXe für Systemfunktionen=x h =System-Funktionen 
?Demo-Datenbank=x get env comspec`ins #uwC`var #uwC " /c " P "a99 " P "demo2\\orda"`Call 
?einfachen Beispielen=h flexw 
?anderen Hilfetext=h xnext=Beispiel 2 
?Befehlssprache=h xacon 
?interne Variable=h xiv 
?Alle FLEX-Dateien sichten=x #uwz *.flx\exec X param.flx 
?Neue FLEX-Datei anlegen =X leer flex 
?Freie Variablen=h xfreevar 
?Passwort-Abfrage=h npw 
?find=h xfind 
?open=h xopen 
?Online-FLEX-Lehrbuch=x janas http://www.allegro-c.de/doku/flex/ 
?Berechnungen=h xiz 
?acon=h acon 
?Schnell mal eben...=x jan tricks.htm
?Alphabetische Liste der Befehlswörter=h xal 
?acon=h acon