DllLoad , StubApiCStart , StubApiCShortIntegerConstant , StubApiCInclude , StubApiCFunction , StubApiCRemark , StubApiCSetEnv , StubApiCFile , StubApiCStruct .

Die Plugin-Technik von Yacas

Yacas unterstützt dynamisch ladbare Bibliotheken, mit denen die Funktionalität zur Laufzeit vergrößert werden kann. Mit einem entsprechenden Plugin wäre es z.B. möglich, spezielle Funktionen für numerische Berechnungen einzubinden.

Die Plugin-Schnittstelle ist zurzeit noch im experimentellen Stadium. Einige Beispiele für Plugins befinden sich im plugins/ Verzeichnis. Die Plugins müssen nach der Installation von Yacas gesondert compiliert werden. Das plugins/ Verzeichnis enthält eine README-Datei mit weiteren Hinweisen.

Neben dem Plugin-Mechanismus gibt es das ebenfalls noch in der Entwicklung befindliche Modul 'cstubgen', mit dem Plugins ohne größeren Aufwand erstellt werden können. Das 'cstubgen' Modul erzeugt eine c++ Datei, die sich compilieren und mit der Standardbibliothek linken lässt. Funktionen aus dem Plugin lassen sich dann so wie die eingebauten Yacas Funktionen aufrufen. Das plugins/ Verzeichnis enthält auch hierfür Beispiele (Dateien mit der Endung api.stub).

Zusätzlich zur c++ Datei generiert 'cstubgen' automatisch eine Dokumentationsdatei mit der Endung 'Beschreibung'.

Zurzeit arbeitet der Plugin-Mechanismus nur auf Betriebssystemen, die das ELF-Binärformat unterstützen, wie z.B. Linux.

Der folgende Abschnitt erfordert Kenntnisse in der C++ Programmierung.


DllLoad

interne Funktion
Funktionsaufruf:
DllLoad(file)
Parameter:
file - Dateiname des Plugins
Beschreibung:
Die Funktion lädt eine dynamische Bibliothek (unter Linux eine Datei mit der Endung .so). Der Dateiname ist mit vollständigem Pfad anzugeben.
Beispiele:
In> DllLoad("./libopengl.so");
Out> True;
siehe auch:


StubApiCStart

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCStart()
Parameter:
Beschreibung:
Der Quellcode zum Erzeugen einer c "stub"-Datei muss mit dieser Funktion beginnen.
siehe auch:
StubApiCShortIntegerConstant , StubApiCInclude , StubApiCFunction , StubApiCFile , StubApiCSetEnv .


StubApiCShortIntegerConstant

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCShortIntegerConstant(const, value)
Parameter:
const - ein String, der eine globale Variable repräsentiert
value - eine pos. ganze Zahl
Beschreibung:
Mit dieser Funktion wird die Zahl "value" der Variablen "const" zugewiesen. Die Zahl sollte den Typ "short integer" haben. Damit lassen sich mit #define definierte Konstanten in Yacas einbinden. Enthält die Bibliothek z.B. die Anweisung
#define FOO 10
Dann wird dieser Wert aus der Quelldatei mit
StubApiCShortIntegerConstant("FOO", "FOO")
der globalen Yacas Variablen "FOO" zugewiesen.
siehe auch:
StubApiCStart , StubApiCInclude , StubApiCFunction , StubApiCFile , StubApiCSetEnv .


StubApiCInclude

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCInclude(file)
Parameter:
file - Dateiname
Beschreibung:
Mit dieser Funktion kann eine "include"-Datei spezifiziert werden (z.B. eine "header"-Datei der Bibliothek). Die Begrenzer müssen mit angegeben werden. So wird z.B. die "header"-Datei der opengl-Bibliothek mit
StubApiCInclude("<GL/gl.h>")
eingebunden. Liegt die Datei im aktuellen user-Verzeichnis, dann lautet der Funktionsaufruf:
StubApiCInclude("\"GL/gl.h"\")
siehe auch:
StubApiCStart , StubApiCShortIntegerConstant , StubApiCFunction , StubApiCFile , StubApiCSetEnv .


StubApiCFunction

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCFunction(returntype, fname, args)
StubApiCFunction(returntype, fname, fname2, args)
Parameter:
returntype - Type der Bibliotheksfunktion
fname - interner Funktionsname
fname2 - (optional) Yacas-Funktionsname
args - Liste von Argumenten der Funktion
Beschreibung:
Mit dieser Funktion wird eine Bibliotheksfunktion deklariert. Der c++ Code wird dann durch 'cstubgen' generiert.

Alle Argumente sind als Strings (eingeschlossen in Anführungszeichen) anzugeben.

Wird "fname2" nicht angegeben, dann wird hierfür "fname" angenommen.

Zurzeit werden die Funktionstypen "int", "double" und "void" unterstützt.
Die unterstützten Argumenttypen sind "int", "double" und "input_string".
Argumenttypen werden als String wie z.B. "int" angegeben oder als Liste mit einem zusätzlichen Element für den Namen der Variablen, z.B. {"int", "n"}. Die Variable wird dann in die automatisch erzeugte Dokumentationsdatei übernommen.
Beispiele:
Im folgenden wird die opengl-Funktion glVertex3d definiert. Die Funktion vom Typ "void" hat drei Argumente vom Typ "double".

StubApiCFunction("void", "glVertex3d", {"double","double","double"});
siehe auch:
StubApiCStart , StubApiCShortIntegerConstant , StubApiCInclude , StubApiCFile , StubApiCSetEnv .


StubApiCRemark

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCRemark(string)
Parameter:
string - ein String
Beschreibung:
Die Funktion fügt den String "string" zur automatisch erzeugten Dokumentationsdatei .description hinzu. Wird die Funktion unmittelbar nach einer Funktionsdeklaration aufgerufen, dann kann mit dem String ein Kommentar zur Beschreibung dieser Funktion eingefügt werden.
siehe auch:
StubApiCShortIntegerConstant , StubApiCInclude , StubApiCFunction , StubApiCSetEnv , StubApiCFile .


StubApiCSetEnv

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCSetEnv(func)
Parameter:
func - ein String
Beschreibung:
Dieser Befehl lässt das Plugin die Funktion "func" aufrufen. Als Argument von "func" wird LispEnvironment& aEnvironment angenommen. Damit wird die Umgebungsklasse, die für fast alles innerhalb von Yacas notwendig ist, einer globalen Variablen zugewiesen.

Das Plugin muss eine Funktion der Form

static LispEnvironment* env = NULL;
void GlutSetEnv(LispEnvironment& aEnv)
{
    env = &aEnv;
}

enthalten.
Der Aufruf von

StubApiCSetEnv("GlutSetEnv");

ruft die Funktion GlutSetEnv beim Laden des Plugins auf. Alle Funktionen des Plugins haben damit Zugriff auf die Yacas Umgebungsklasse.
siehe auch:
StubApiCStart , StubApiCShortIntegerConstant , StubApiCInclude , StubApiCFunction , StubApiCFile .


StubApiCFile

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCFile(basename)
Parameter:
basename - ein String
Beschreibung:
Die Funktion generiert die c++ "stub" Datei "basename.cc" sowie die Dokumentationsdatei "basename.description".
siehe auch:
StubApiCStart , StubApiCShortIntegerConstant , StubApiCInclude , StubApiCFunction , StubApiCSetEnv .


StubApiCStruct

mathematische Standardbibliothek
Funktionsaufruf:
StubApiCStruct(name)
StubApiCStruct(name, freefunction)
Parameter:
name - ein String
freefunction - ein String
Beschreibung:
Die Funktion deklariert eine Struktur "name". Der Name sollte mit einem "*" abschließen, um zu verdeutlichen, dass es sich um einen Zeiger handelt. Die Struktur kann als Argument oder Ergebnis von Plugin-Funktionen verwendet werden.

Fehlt das zweite Argument "freefunction", dann wird die Struktur mit einem Aufruf von free(...) aus dem Speicher entfernt, ansonsten wird die Funktion "freefunction" aufgerufen. Damit lassen sich evtl. erforderlich Operationen vor dem Entfernen der Struktur aus dem Speicher ausführen.
Beispiele:
Eine Struktur wird in der "header"-Datei definiert:

typedef struct SomeStruct
{
  int a;
  int b;
} SomeStruct;

In der "stub"-Datei erfolt die Deklaration durch Aufruf von:

StubApiCStruct("SomeStruct*")