<\body> Die Kommunikation zwischen und einer Anwendung kann auÿer über eine \RPipeline`` auch dadurch erfolgen, dass die Anwendung als \Rdynamically linked library'', DLL, eingebunden wird. \ Pipelines sind meist leichter zu implementieren, oft sehr robust und flexibel in Bezug auf Daten, die nur nach und nach erzeugt werden. Aber DLLs sind schneller. Die folgenden Schritte müssen getan werden, um eine Anwendung als DLL in \ einzubinden: <\enumerate> Die Anwendung Muÿe so umgestaltet werden, dass das Hauptprogramm als DLL eingebunden werden kann. Damit erhalten Sie ein sehr kleines Binär-Programm, das die wörtliche Ein- und Ausgabe steuert und das erst zur Laufzeit mit den DLLs der Anwendung gelinkt wird. Kopieren die Datei \RTeXmacs.h`` aus dem -Unterverzeichnis in das Include-Verzeichnis Ihrer Anwendung und schreiben Sie die laut -Kommunikations-Protokoll benötigten Eingabe/Ausgabe-Routinen wie weiter unten beschrieben:\ Schreiben Sie eine Zeile der Form <\verbatim> \ \ \ \ (package-declare "myplugin" "libmyplugin.so" "get_name_package" "init") in die Datei , die für den Fall der Kommunikation über Pipelines bereits beschrieben wurde. Hier ist die entsprechende DLL, die Funktion, die aufruft, um Ihre Anwendung mit zu linken und eine Initialisierungs-Zeichenkette, die Ihre Anwendung vielleicht benötigt. Weiter geht es analog zum Pipeline-Fall. Kommunikations-Protokoll.> Das Kommunikations-Protokoll dient dazu, DLLs dynamisch in einzubinden. Die Datei enthält die Definition aller Daten-Strukturen und Funktionen, die von dem Protokoll benutzt werden. In Zukunft erwarten wir eine Folge von unterschiedlichen Protokollen, die alle die abstrakten Daten-Strukturen und gemein haben, in denen die Informationen über die Protokoll-, - und Anwendungs-Version, enthalten ist. Die -te konkrete Version des Kommunikations-Protokolls sollte zwei Datenstrukturen und bereitstellen. Die erste davon enthält alle Routinen und Daten von , die in der Anwendung benötigt werden könnten. Die zweite enthält alle \ Routinen und Daten der Anwendung, die innerhalb gebraucht werden könnten. Um die Anwendung mit zu linken, müssen Sie die Funktion <\verbatim> \ \ \ \ package_exports* get_my_package (int version); implementieren. Die Funktion übernimmt das oberste Kommunikations-Protokoll, das von Ihrer -Version unterstützt wird. Es sollte einen Zeiger zurückgeben, der auf eine Instanz einer konkreten Struktur zeigt mit n kleiner oder gleich \R''. Kommunikations-Protokolls.> In der ersten Version des Kommunikations-Protokolls sollte Ihre Anwendung eine Instanz der folgenden Daten-Struktur exportieren: <\verbatim> \ \ \ \ typedef struct package_exports_1 { \ \ \ \ \ char* version_protocol; /* "TeXmacs communication protocol 1" */ \ \ \ \ \ char* version_package; \ \ \ \ \ char* (*install) (TeXmacs_exports_1* TM, char* options, char** errors); \ \ \ \ \ char* (*evaluate) (char* what, char* session, char** errors); \ \ \ \ \ char* (*execute) (char* what, char* session, char** errors); \ \ \ } package_exports_1; Die Zeichenkette sollte und die Zeichenkette die Version Ihrer Anwendung enthalten. Die Funktion wird einmal von mit den Optionen aufgerufen, um Ihre Anwendung zu initialisieren. Es überträgt die Routinen, die von exportiert werden, als . Diese Routine sollte, sofern erfolgreich, eine Statusmeldung zurückgeben, z.B.: <\verbatim> \ \ \ \ "Ihre CAS-Version wurde erfolgreich in TeXmacs eingebunden" Wenn die Installation ohne Erfolg blieb, sollten Sie zurückgeben und sollte eine erklärende Meldung enthalten. Sowohl als auch die zurückgegebene Zeichenkette haben ein spezielles Format, in dem beliebige -Dokumente kodiert werden können. Dieses Format wird im nächsten Abschnitt beschrieben. Die -Funktion dient zur Evaluierung von in einer -Sitzung mit dem Namen . Sie sollte das Ergebnis der Evaluierung von zurückgeben, falls erfolgreich, oder , wenn ein Fehler auftrat. kann, je nach Verlauf der Evaluierung, eine oder mehrere Warnungen enthalten oder eine Fehlermeldung, wenn die Evaluierung versagte. Der Befehl <\verbatim> \ \ \ \ (package-format "yourcas" "input-format" "output-format") wird analog zur Verwendung von Pipelines zur Spezifikation der Ein- und Ausgabe-Formate benutzt. Die Routine ähnelt dient aber nicht zur Evaluierung innerhalb einer -Sitzung sondern zur Kommunikation zwischen und Ihrer Anwendung. <\remark> Alle Zeichenketten, die von den Routinen , und , sowie alle Warn- und Fehlermeldungen müssen Speicherplatz mit reservieren. Der Speicherplatz wird von mit wieder freigegeben.. In der ersten Version des Kommunikations-Protokoll muss eine Instanz folgender Daten-Struktur exportieren: <\verbatim> \ \ \ \ typedef struct TeXmacs_exports_1 { \ \ \ \ \ char* version_protocol; /* "TeXmacs communication protocol 1" */ \ \ \ \ \ char* version_TeXmacs; \ \ \ } TeXmacs_exports_1; Die Zeichenkette enthält und die vorliegende Version von . <\initial> <\collection>