Bartels :: Bartels AutoEngineer :: BAE Dokumentation :: User Language Programmierhandbuch :: Programmiersystem :: Interpreter |
Bartels User Language - Programmierhandbuch3.3 Interpreter |
Der Bartels User Language Interpreter ist in verschiedenen Programmumgebungen integriert. Im Bartels AutoEngineer sind dies der Schaltplaneditor, der Layouteditor, der Autorouter, der CAM-Prozessor, das CAM-View-Modul sowie der Chipeditor. Aus all diesen Programmteilen können mit Hilfe des User Language Interpreter User Language-Programme gestartet werden.
Die Aktivierung des User Language Interpreter erfolgt durch den Aufruf eines User Language-Programms aus einer der gültigen Interpreterumgebungen. Die Abarbeitung eines User Language-Programmaufrufs durch den User Language Interpreter erfolgt in den nachfolgend beschriebenen Arbeitsschritten.
Zunächst muss der
User Language Interpreter das
User Language-Maschinenprogramm über den beim Aufruf spezifizierten Programmnamen aus der Datei
ulcprog.vdb
(im BAE-Programmverzeichnis) laden (Program Load). Beim Laden des Maschinenprogramms führt der Interpreter eine Kompatibilitätsprüfung durch; eine Konsistenzprüfung ist hierbei nicht mehr nötig, da diese zeitaufwändige Arbeit bereits durch den Compiler erledigt wurde. Ein zu ladendes
User Language-Programm gilt in der aktuellen Interpreterumgebung als kompatibel und damit ablauffähig, wenn die
User Language Compiler-Version, mit der das Programm erzeugt wurde, identisch mit der des
User Language Interpreter ist, und wenn das Programm keine Referenzen auf Index-Variablen-Typen oder Systemfunktionen enthält, die in der aktuellen Interpreterumgebung nicht implementiert sind.
User Language-Programme können Anforderungen zur Laufzeiteinbindung von User Language-Libraries enthalten (Dynamic Link Requests). Die Einbindung des Maschinencodes der benötigten Dynamic Link Libraries (DLLs) erfolgt automatisch während der Programmladephase. Grundvoraussetzung für die erfolgreiche Durchführung des Dynamic-Link-Prozesses ist die Verfügbarkeit der benötigten Libraries. Außerdem müssen die im Maschinencode der einzubindenden Dynamic Link Libraries enthaltenen Definitionen (Variablen, Funktionen, Funktionsparameter) mit dem bei der Kompilierung durch den User Language Compiler überprüften Maschinencode übereinstimmen, damit bei der Ausführung des Programms nicht etwa fehlende oder falsche Libraryobjekte referenziert werden können (was zu einem undefinierten Verhalten des User Language Interpreter oder sogar zum Programmabsturz mit möglichem Datenverlust führen könnte). Der im User Language Interpreter integrierte Linker führt entsprechende Kompatibilitätsprüfungen durch und verweigert im Falle von Inkonsistenzen die Programmausführung mit der Fehlermeldung . In solchen Fällen ist das auszuführende User Language-Programm neu zu kompilieren.
Nachdem das User Language-Maschinenprogramm geladen (und dynamisch gelinkt) ist, beginnt der Interpreter mit der Ausführung des Programms (Program Execute). Die Programmausführung entspricht dabei der Simulation der User Language-Maschinenarchitektur durch Abarbeitung der Instruktionen des Maschinenprogramms. Die Abarbeitung beginnt bei der ersten Instruktion des Maschinenprogramms und ist beendet, wenn der Programmzähler auf eine nicht mehr existente Instruktion des Maschinenprogramms verweist.
Nach der Ausführung des Maschinenprogramms muss eine Terminierung durchgeführt werden. Dabei wird zunächst der während des Programmlaufs belegte Speicher wieder freigegeben (Program Cleanup), und anschließend wird das Programm selbst entladen (Program Unload).
Beim Aufruf eines User Language-Programms aus einer der definierten Interpreterumgebungen ist in jedem Fall der Name des auszuführenden Programms zu spezifizieren. Dies kann entsprechend den nachfolgend beschriebenen Methoden entweder explizit oder implizit erfolgen.
Zum expliziten Aufruf von User Language-Programmen ist die Funktion aus dem Menü zu benutzen. aktiviert einen Dialog zur Programmnamensabfrage. Der Programmname kann entweder direkt über Tastatur eingegeben oder nach Anwahl der Schaltfläche aus der Liste der aktuell verfügbaren Programme selektiert werden:
Datei |
Anwenderfunktion |
Programmname ? | programname |
Wird auf die Abfrage nach dem Programmnamen ein Fragezeichen
(?
) eingegeben oder eine Maustaste aktiviert, dann zeigt das System ein Popupmenü mit den Namen aller aktuell in
ulcprog.vdb
verfügbaren
User Language-Programme an; hieraus kann das zu startende Programm über Mauspick selektiert werden.
Eine Möglichkeit des impliziten Programmaufrufs besteht durch den Programmaufruf über die Tastatur. Hierzu muss sich der Anwender in der Menüleiste der Interpreterumgebung befinden, d.h. diese Art des Programmaufrufs ist immer dann möglich, wenn nicht gerade eine andere interaktive Eingabe über Tastatur erwartet wird. Die Spezifikation des Programmnamens erfolgt dabei implizit durch Drücken einer speziellen Taste. Tabelle 3-2 enthält die Liste der definierten Zuordnung von Tasten zu User Language-Programmnamen innerhalb der unterschiedlichen Interpreterumgebungen. Durch Drücken einer der in dieser Tabelle angegebenen Tasten wird - sofern verfügbar - automatisch das entsprechend benannte User Language-Programm gestartet. Mit bae_* benannte Programme haben dabei Priorität vor den Programmen mit modulspezifischen Namen.
Tastenbezeichnung | Interpreterumgebung / Programmname | ||||||
---|---|---|---|---|---|---|---|
BAE | SCM | GED | AR | CAM | CV | CED | |
Funktionstaste F1 | bae_f1 | scm_f1 | ged_f1 | ar_f1 | cam_f1 | cv_f1 | ced_f1 |
Funktionstaste F2 | bae_f2 | scm_f2 | ged_f2 | ar_f2 | cam_f2 | cv_f2 | ced_f2 |
Funktionstaste F: | bae_f: | scm_f: | ged_f: | ar_f: | cam_f: | cv_f: | ced_f: |
Funktionstaste F12 | bae_f12 | scm_f12 | ged_f12 | ar_f12 | cam_f12 | cv_f12 | ced_f12 |
Zifferntaste 0 | bae_0 | scm_0 | ged_0 | ar_0 | cam_0 | cv_0 | ced_0 |
Zifferntaste 1 | bae_1 | scm_1 | ged_1 | ar_1 | cam_1 | cv_1 | ced_1 |
Zifferntaste : | bae_: | scm_: | ged_: | ar_: | cam_: | cv_: | ced_: |
Zifferntaste 9 | bae_9 | scm_9 | ged_9 | ar_9 | cam_9 | cv_9 | ced_9 |
Standardtaste a | bae_a | scm_a | ged_a | ar_a | cam_a | cv_a | ced_a |
Standardtaste b | bae_b | scm_b | ged_b | ar_b | cam_b | cv_b | ced_b |
Standardtaste c | bae_c | scm_c | ged_c | ar_c | cam_c | cv_c | ced_c |
Standardtaste : | bae_: | scm_: | ged_: | ar_: | cam_: | cv_: | ced_: |
Eine spezielle Möglichkeit des impliziten Programmaufrufs besteht im ereignisgesteuerten Aufruf von User Language-Programmen. Dabei lösen spezielle Ereignisse bzw. Operationen (BAE-Modulstart, Laden bzw. Speichern eines Elements, Ändern des Zoomfaktors oder Selektion eines Toolbarelements) automatisch den Aufruf von User Language-Programmen mit definiertem Namen aus. Tabelle 3-3 enthält die Zuordnung der vordefinierten User Language-Programmnamen zu den entsprechenden Ereignissen bzw. Operationen der einzelnen Interpreterumgebungen. Mit bae_* benannte Programme haben dabei Priorität vor den Programmen mit modulspezifischen Namen. Der Aufruf über die Startupsequenz der Interpreterumgebung eignet sich besonders zur automatischen Voreinstellung von Parametern sowie zur Tastaturprogrammierung und Menübelegung (siehe auch unten). Der implizite Aufruf von User Language-Programmen nach dem Laden bzw. vor dem Speichern von Elementen ermöglicht die automatische Aktivierung elementspezifischer Bearbeitungsparameter wie z.B. des zuletzt selektierten Zoombereichs oder spezieller Farbeinstellungen.
Ereignis | Interpreterumgebung / Programmname | ||||||
---|---|---|---|---|---|---|---|
BAE | SCM | GED | AR | CAM | CV | CED | |
Bei BAE-Modulstart | bae_st.ulc | scm_st | ged_st | ar_st | cam_st | cv_st | ced_st |
Vor BAE-Modulende | bae_exit.ulc | scm_exit | ged_exit | ar_exit | cam_exit | cv_exit | ced_exit |
Nach Element laden/schließen | bae_load.ulc | scm_load | ged_load | ar_load | cam_load | cv_load | ced_load |
Nach Element erzeugen | bae_new.ulc | scm_new | ged_new | ar_new | cam_new | cv_new | ced_new |
Bevor Element speichern | bae_save.ulc | scm_save | ged_save | ar_save | cam_save | cv_save | ced_save |
Nach Element speichern | bae_savd.ulc | scm_savd | ged_savd | ar_savd | cam_savd | cv_savd | ced_savd |
Bei Dialogaktivierung | bae_dial.ulc | scm_dial | ged_dial | ar_dial | cam_dial | cv_dial | ced_dial |
Bei Toolbarselektion | bae_tool.ulc | scm_tool | ged_tool | ar_tool | cam_tool | cv_tool | ced_tool |
Bei Zoomfaktoränderung | bae_zoom.ulc | scm_zoom | ged_zoom | ar_zoom | cam_zoom | cv_zoom | ced_zoom |
Bei Mausinteraktion (Drücken linke Maustaste) |
bae_ms | scm_ms.ulc | ged_ms.ulc | ar_ms.ulc | cam_ms.ulc | cv_ms.ulc | ced_ms.ulc |
Bei Rahmenauswahl mit der Maus | bae_rect.ulc | scm_rect | ged_rect | ar_rect | cam_rect | cv_rect | ced_rect |
Nach Symbol-/Bauteilplatzierung | bae_plc | scm_plc.ulc | ged_plc.ulc | ar_plc | ced_plc | ||
Nach Gruppenladeoperationen | bae_grpl | scm_grpl.ulc | ged_grpl | ced_grpl | |||
Bei eingehender Meldung (BAE HighEnd) |
bae_msg | scm_msg.ulc | ged_msg.ulc | ar_msg | cam_msg | cv_msg | ced_msg |
Mit der Bartels User Language werden Systemfunktionen zur Tastaturprogrammierung und Menübelegung zur Verfügung gestellt. Damit ist es möglich, User Language-Programmaufrufe oder BAE-Menüfunktionen auf die Tastatur zu legen (z.B. Taste m zur Aktivierung des User Language-Programms mirron oder Taste U zur Aktivierung der BAE-Menüfunktion ). Durch die Zuweisung spezieller User Language-Programmaufrufe oder Menüfunktionen auf neue bzw. bestehende Menüs oder Menüeinträge können die Menüoberflächen der AutoEngineer-Module mit integriertem User Language Interpreter nach Belieben konfiguriert werden. Die Tastaturprogrammierung bzw. die Menübelegung lässt sich vollautomatisch über die jeweiligen User Language-Startupprogramme durchführen (siehe hierzu das mit der BAE-Software ausgelieferte User Language-Programm uifsetup welches indirekt über die in Tabelle 3-3 aufgeführten Startupprogramme aufgerufen wird). Mit einem geeigneten User Language-Programm ist sogar die dynamische Änderung der Tastatur- und Menübelegung (d.h. online während der Arbeit im AutoEngineer) möglich. Derartige Features sind z.B. in dem mit der BAE-Software ausgelieferten User Language-Programm keyprog implementiert. Damit besteht völlige Freiheit bei der Konfiguration der Benutzeroberflächen der AutoEngineer-Module mit integriertem User Language Interpreter.
In BAE-Pulldownmenüoberflächen unterstützt das über Taste
5
aufrufbare
User Language-Programm
keyprog die direkte Zuweisung von Menüfunktionen zu Tasten. Dazu ist nach Selektion der zu programmierenden Taste über
und
und Anklicken der Schaltfläche
im Programmauswahlmenü einfach die gewünschte Menüfunktion zu selektieren.
Über
User Language-Programmaufrufen über die Funktion
ulsystem, bei der Definition von Tasten und Menüfunktionen in der Datei
bae.ini
sowie bei der Online-Tastenprogrammierung mit dem
User Language-Programm
keyprog kann anstatt eines einfachen
User Language-Programmnamens eine komplette Bearbeitungssequenz angegeben werden. Die einzelnen Bearbeitungsschritte sind durch das Zeichen
:
zu trennen. Ein
User Language-Programmname, der nicht am Anfang der Bearbeitungssequenz steht, ist durch ein vorangestelltes
p
zu kennzeichnen. Ein vorangestelltes
#
referenziert direkt eine interne BAE-Funktion entsprechend dem Aufruf von
bae_callmenu. In einfachen Anführungszeichen gesetzte Texte werden als Texteingaben übernommen. Mit
t
wird auf die Eingabe eines Textes durch den Benutzer gewartet.
s
wartet auf eine Menuselektion, gefolgt von
l
,
m
oder
r
und einem Menüindex (Start der Zählung bei 0) wird eine Menuselektion entsprechend dem Aufruf von
bae_storemenuiact durchgeführt. Ein alleinstehendes
m
wartet auf einen Mausklick. Folgt darauf ein
l
,
m
oder
r
, dann wird ein Mausklick mit der entsprechenden Maustaste an der zu Beginn der Bearbeitungssequenz ermittelteten Mausposition durchgeführt. Folgen der Maustaste noch durch Komma getrennte Koordinatenangaben, so wird die Maustaste an der angegebenen Position aktiviert.
Damit ist es möglich, Untermenüpunkte, wie z.B.
scmpart:s5:m:t:mr
) direkt auf Tasten zu legen. Auch ganze Abfolgen von immer wiederkehrenden Arbeitsschritten sind möglich. So wird z.B. im
Schaltplaneditor mit der Sequenz
#500:ml:mr:sl3:'4':'0':mr:sl0
von der aktuellen Mausposition aus ein waagerechtes 4mm langes Stück Grafiklinie nach rechts gezeichnet, wie man es immer wieder bei der Bearbeitung von Symbolen zur grafischen Anbindung von Pins an eine Symbolbox benötigt.
Zur vereinfachten Handhabung von benutzerspezifischen Einstellungen können Parameterdefinitionen, Tastaturbelegungen und Menüerweiterungen in die Datei
bae.ini
im BAE-Programmverzeichnis eingetragen werden. Die Definitionen aus dieser Datei werden einmalig beim BAE-Programmstart in den Speicher geladen und können anschließend mit der
User Language-Systemfunktion
varget abgefragt werden.
Die mit der BAE-Software ausgelieferten
User Language-Programme berücksichtigen relevante Definitionen und Parametereinstellungen aus
bae.ini
. Zur Aktivierung von Änderungen in
bae.ini
ist somit lediglich ein Neustart des von den Änderungen betroffenen BAE-Programmmoduls erforderlich. Benutzerspezifische Parametereinstellungen können damit komfortabel zwischen verschiedenen BAE-Versionen bzw. BAE-Installationen ausgetauscht werden.
Die Datei
bae.ini
ist in Sektionen für die einzelnen BAE-Module unterteilt. Beim Modulstart werden nur die Einstellungen des aktiven Moduls berücksichtigt. Die Definitionen aus der Sektion
std
gelten für alle Module.
Neben einfachen Parameterzuweisungen können mit den Schlüsselwörtern
key
und
fkey
Standard- und Funktionstasten mit Bearbeitungssequenzen belegt werden. Die Schlüsselwörter
addmenu
,
addmenuitem
,
addsmenuitem
und
addioitem
erlauben die Erweiterung der Menüstruktur. Es können jeweils nur Menüpunkte an das Ende eines Hauptmenüs oder des Import/Export-Menüs angehängt werden. Ein Einfügen von Menüpunkten in Menüs ist nicht möglich, da dadurch die Topic-Zuweisung für die Online-Hilfe durcheinander geraten würde.
Die Syntax der einzelnen Kommandos ist aus der Inlinedokumentation der mitgelieferten Datei
bae.ini
zu ersehen. In ihrer Originalversion definiert diese Datei die Parametereinstellungen aus den mit der BAE-Software ausgelieferten
User Language-Programmen, also die Standardeinstellungen, die auch dann verwendet werden, wenn die Datei
bae.ini
beim BAE-Programmaufruf nicht im BAE-Programmverzeichnis verfügbar ist.
Während der Bearbeitung eines User Language-Programmaufrufs durch den User Language Interpreter können Fehler auftreten. Diese Fehler werden der Interpreterumgebung zurückgemeldet, und es wird ggf. eine entsprechende Fehlermeldung in der Mitteilungszeile der Interpreterumgebung angezeigt. Die möglichen Fehlermeldungen sind nachfolgend aufgelistet.
Die folgenden internen Interpreter-Fehler beziehen sich entweder auf die Speicherverwaltung oder weisen auf Implementierungslücken im Interpreter selbst hin; diese Fehler sind so schwerwiegend (Fatal Errors), dass auch die Interpreterumgebung abgebrochen werden muss:
FEHLER : Zu wenig Speicherplatz! FEHLER : Allgemeiner User Language-Interpreter-Fehler! FEHLER : INTERNER FEHLER -- BITTE MELDEN!
Die folgenden Fehler können beim Laden des User Language-Programms auftreten:
FEHLER : Programm 'n' bereits geladen (rekursiver Aufruf)! FEHLER : Programm 'n' nicht gefunden! FEHLER : User Language-Programm-Version inkompatibel! FEHLER : Inkompatible Index-/Funktions-Referenz(en)!
Die folgenden Fehler können während der Ausführung des
User Language-Programms, d.h. zur Laufzeit des Programms auftreten; der in der Fehlermeldung angezeigte Programmzähler
(PCl
) gibt dabei die Zeile im
User Language-Maschinenprogramm an, in der der Fehler aufgetreten ist (sofern durch den
User Language Compiler eine entsprechende Listing-Datei für das betreffende Programm erzeugt wurde, lässt sich mit deren Hilfe die entsprechende Zeile im Quellcode ermitteln):
(PCl) FEHLER : Stack Unterlauf (Programm-Struktur beschaedigt)! (PCl) FEHLER : Stack Ueberlauf! (PCl) FEHLER : Division durch Null! (PCl) FEHLER : Funktions-Aufruf fehlgeschlagen! (PCl) FEHLER : System-Funktion in dieser Umgebung nicht verfuegbar! (PCl) FEHLER : System-Funktion nicht implementiert! (PCl) FEHLER : User-Funktion nicht gefunden! (PCl) FEHLER : Referenzierte Funktion ist vom falschen Typ! (PCl) FEHLER : Ungueltige Parameter fuer referenzierte Funktion! (PCl) FEHLER : Fehler beim Zugriff auf Array! (PCl) FEHLER : Ungueltiger Array-Index! (PCl) FEHLER : Datei-Zugriffs-Fehler! (PCl) FEHLER : Datei-Lese-Fehler! (PCl) FEHLER : Datei-Schreib-Fehler!
Die folgenden Fehler können beim Zugriff auf die Design Datenbank (DDB) des Bartels AutoEngineer auftreten; treten derartige Fehler beim Laden von User Language-Programmen auf, dann liegt unter Umständen eine fehlerhafte Installation der Bartels AutoEngineer Software vor; treten Datenbank-Zugriffsverletzungen hingegen während der Programmlaufzeit auf, dann bezieht sich die entsprechende Fehlermeldung in aller Regel auf Implementierungs-Fehler im abzuarbeitenden User Language-Programm:
FEHLER : Datenbankdatei 'n' kann nicht angelegt werden! FEHLER : Schreib-/Lesefehler beim Zugriff auf Datei 'n'! FEHLER : Zu viele offene Dateien im System! FEHLER : Datei 'n' ist keine Datenbank/DDB-Datei! FEHLER : Die Datenbankstruktur in Datei 'n' ist beschaedigt! FEHLER : Der Dateiaufbau ist fehlerhaft in Datei 'n'! FEHLER : Funktion fuer altes Format nicht verfuegbar! FEHLER : Datenbank Limit ueberschritten! FEHLER : Datei 'n' ist zur Programmversion inkompatibel! FEHLER : Element 'n' nicht gefunden! FEHLER : Element 'n' existiert bereits! FEHLER : Datei 'n' nicht gefunden! FEHLER : Record-Ende erreicht! FEHLER : Allgemeiner Datenbankfehler!
Bartels :: Bartels AutoEngineer :: BAE Dokumentation :: User Language Programmierhandbuch :: Programmiersystem :: Interpreter |
Interpreter
© 1985-2024 Oliver Bartels F+E