<\body> Konfiguration und Kompilierung eines sehr einfachen Plugins, , findet sich in |../plugin/plugin-binary.de.tm> im Kapitel über . \ Wir beginnen mit der Analyse des Quellcodes . Das Hauptprogramm, , besteht im wesentlichen aus: <\cpp-fragment> int main () { \ \ \ \ while (true) { \ \ \ \ \ \ \ \ \ \ } \ \ return 0; } Gemä˙ Vorgabe sendet eine Zeichenkette, die mit endet an die Anwendung. Dem entsprechend besteht der Code für > aus folgenden Zeilen <\cpp-fragment> char buffer[100]; cin.getline (buffer, 100, '\\n'); Die Ausgabe ist etwas komplizierter, denn muss eindeutig feststellen können, dass die Ausgabe beendet ist. Das wird erreicht, in dem jedwede Ausgabe, in Blockform eingekapselt wird. Das ist im vorliegenden Fall ein Begrü˙ungstext, banner, und die interaktive Reaktion der Anwendung. Die Kapselung sieht folgenderma˙en aus: <\quotation> :>> Hier stehen und für spezielle Steuer-Buchstaben: <\cpp-fragment> #define DATA_BEGIN \ \ ((char) 2) #define DATA_END \ \ \ \ ((char) 5) #define DATA_ESCAPE \ ((char) 27) Der Steuer-Buchstabe dient zur Maskierung und innerhalb des kommunizierten Textes <\quotation> <\framed-fragment> <\with|font-family|tt> >|>>|>>|>|>>|>>|>|>>|>>>>> > spezifiziert das Format für den zu übertragenden Text, >. In unserem Beispiel ist der Code, ,> Übertragung und Darstellung der Begrü˙ungs-Botschaft in folgender <\cpp-fragment> cout \\ DATA_BEGIN \\ "verbatim:"; cout \\ "Hi there!"; cout \\ DATA_END; fflush (stdout); Entsprechend wurde > so programmiert <\cpp-fragment> cout \\ DATA_BEGIN \\ "verbatim:"; cout \\ "You typed " \\ buffer; cout \\ DATA_END; fflush (stdout); <\remark> geht davon aus, dass keine Ausgabe mehr kommt, wenn ein ein abschlie˙t. Deshalb muss jegliche Ausgabe in einen äu˙eren --Block eingeschlossen werden. Es ist möglich, solche abgeschlossenen - Blöcke in einander zu verschachteln. Sie dürfen aber keinesfalls mehr als einen in sich geschlossenen Block senden, da sofort die Kontrolle übernimmt, wenn der äu˙ere Block abgeschlossen ist. <\remark> In unserem Beispiel wurde der Code der Anwendung in die Schnittstelle übernommen. Der übliche Weg, wenn Sie eine -Schnittstelle für eine bereits existierende Anwendung > schreiben, besteht darin, in der Anwendung eine Start-Option zu implementieren. Dann braucht man die Verzeichnisse /src> und /bin> nicht mehr. Es reicht das Plugin zu konfigurieren, indem man z.B. so etwas wie die folgenden Zeilen in eine Initialisierungs-Datei /progs/init-.scm> einfügt: <\scheme-fragment> (plugin-configure \ \ (:require (url-exists-in-path? "")) \ \ (:launch " --texmacs") \ \ (:session "")) Wenn der Quellcode der Anwendung > nicht verändert werden kann oder darf, dann bleibt immer noch die Möglichkeit, ein Ein-/Ausgabe-Filter > zu schreiben, der die Umsetzung vornimmt. Unter den Standard-Plugins im Verzeichnis\ <\verbatim> \ \ \ \ plugins finden Sie mehrere Beispiele. <\initial> <\collection>