<\body> Au lieu de connecter votre système à via un tube, vous pouvez aussi le lier en tant que librairie dynamique. Bien que la communication via des tubes soit généralement plus facile à implémenter, plus robuste et compatible avec une sortie graduelle, la seconde option est plus rapide. Voici les étapes à suivre pour lier votre système en tant que librairie dynamique : <\enumerate> Modifiez l'architecture de votre système de telle façon que sa plus grande partie puisse être liée en tant que librairie partagée ; le binaire deviendra alors un tout petit programme que gérera les entrées et sorties verbatim et qui sera lié à votre libraire partagé lors de l'exécution. Copiez le fichier dans le répertoire include de votre source et écrivez les routines d'entrée/sortie en suivant le dernier protocole de communication de décrit ci-dessous. Incluez une ligne de la forme : <\verbatim> \ \ \ \ (package-declare "myplugin" "libmyplugin.so" "get_name_package" "init") dans le fichier qui a été décrit dans le cas de la communication via des tubes. Ici, est la librairie partagée, la fonction qui sera appelée par pour lier votre système à et une chaîne d'initialisation pour votre package. Procédez ensuite de la même façon que dans le cas de la communication par tubes. > Le protocole de communication de est utilisé pour lier dynamiquement des librairies à . Le fichier contient les déclarations de toutes les structures de données et toutes les fonctions utilisées par le protocole. En fait, nous prévoyons une succession de différents protocoles. Ils possèdent tous en commun les structures de données abstraites et , ainsi que des informations sur les versions du protocole, de et de votre package. La > version \ concrète du protocole de communication doit fournir deux structures de données et . La première structure contient toutes les routines et données de nécessaires au package. La seconde structure contient toutes les routines et données de votre package qui doivent être visibles dans . Pour lier votre système à , vous devez implémenter une fonction : <\verbatim> \ \ \ \ package_exports* get_my_package (int version); Cette fonction prend en entrée le dernier protocole de communication de accepté par votre système. Il doit retourner un pointeur vers une instance d'une structure concrète , où est inférieur ou égal à . > Dans la première version du protocole de communication de , votre package doit exporter une instance de la structure de données suivante : <\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; La chaîne doit contenir et la chaîne la version de votre package. La routine est appelée par pour initialiser votre système avec les options . Elle communique à votre système les routines exportées par sous la forme de . La routine doit retourner un message de statut tel que : <\verbatim> \ \ \ \ "yourcas-version successfully linked to TeXmacs" Si l'installation échoue, vous devez retourner et doit contenir un message d'erreur. et la chaîne retournée ont tous les deux un format spécial, dans lequel il est possible d'encoder des documents . Ce format sera décrit dans la prochaine section. La routine est utilisée pour évaluer l'expression dans une session dont le nom est . Elle doit retourner l'évaluation de ou en cas d'erreur. contient soit un ou plusieurs message d'attention ou un message d'erreur, si l'évaluation échoue. La commande : <\verbatim> \ \ \ \ (package-format "yourcas" "input-format" "output-format") est utilisée pour spécifier les formats d'entrée/sortie des évaluations, de la même façon que dans le cas des tubes. La routine possède une spécification similaire à celle de , sauf qu'elle n'est pas utilisée pour l'évaluation d'expressions dans une session , mais plutôt pour d'autres besoins de communication entre et votre package. <\remark> Toutes les chaînes retournées par les routines , et , ainsi que les messages d'attention et d'erreur doivent être allouées avec . Elle seront libérées par avec . La première version du protocole de communication de suppose aussi que exporte une instance de la structure de données : <\verbatim> \ \ \ \ typedef struct TeXmacs_exports_1 { \ \ \ \ \ char* version_protocol; /* "TeXmacs communication protocol 1" */ \ \ \ \ \ char* version_TeXmacs; \ \ \ } TeXmacs_exports_1; La chaîne contient la version du protocole et la version courante de . <\initial> <\collection> <\references> <\collection> |?>> > > |?>> > > <\auxiliary> <\collection> <\associate|toc> |math font series||1Connections via dynamically linked libraries> |math font series||2The TeXmacs communication protocol> |math font series||3Version 1 of the TeXmacs communication protocol>