<\body> La meilleure façon d'implémenter votre première interface avec est d'examiner soigneusement l'exemple , que vous trouverez dans le répertoire . Le fichier , dont le contenu est inclus à la fin de cette section, contient un programme très simple que l'on peut interfacer avec . Pour tester ce programme, compilez-le avec : <\verbatim> \ \ \ \ g++ mycas.cpp -o mycas et déplacez le fichier binaire obtenu dans un répertoire connu de la variable d'environnement système PATH. Quand vous démarrerez , un nouvel article sera intégré dans le menu . NdT: Si vous utilisez le port Fink de , le plus simple est de copier le fichier , situé dans le répertoire /sw/share/TeXmacs.../plugins/mycas/examples, dans ~/bin (créez le répertoire auparavant s'il n'existe pas déjà), puis compilez-le comment indiqué ci-dessus. Étudions le code source de pas à pas. Tout d'abord, toutes les communications se font via les entrées et sorties standards à l'aide de tubes. Pour permettre à de savoir quand les sorties système sont terminées, toutes les sorties doivent être encapsulées dans des blocs contenant trois caractères de contrôle spéciaux :\ <\verbatim> \ \ \ \ #define DATA_BEGIN \ \ ((char) 2) \ \ \ #define DATA_END \ \ \ \ ((char) 5) \ \ \ #define DATA_ESCAPE \ ((char) 27) Le caractère suivi de n'importe quel autre caractère est utilisé pour générer , y compris dans le cas où est l'un des trois caractères de contrôle mentionnés ci-dessus. Le message affiché au démarrage de la session montre comment utiliser et :\ <\verbatim> \ \ \ \ int \ \ \ main () { \ \ \ \ \ cout \\ DATA_BEGIN \\ "verbatim:"; \ \ \ \ \ cout \\ "------------------------------------------------------\\n"; \ \ \ \ \ cout \\ "Welcome to my test computer algebra system for TeXmacs\\n"; \ \ \ \ \ cout \\ "This software comes with no warranty whatsoever\\n"; \ \ \ \ \ cout \\ "(c) 2001 \ by Joris van der Hoeven\\n"; \ \ \ \ \ cout \\ "------------------------------------------------------\\n"; \ \ \ \ \ next_input (); \ \ \ \ \ cout \\ DATA_END; \ \ \ \ \ fflush (stdout); La première ligne du stipule que le message de démarrage sera imprimé en format verbatim. La fonction , qui est appelée après la sortie du message, est utilisée pour afficher une invite et sera expliquée plus loin. Le final ferme le bloc de message de démarrage et indique à que est en attente d'entrée. N'oubliez de vider la sortie standard, de façon à ce que puisse recevoir le message dans son entier. La boucle principale commence par demander une saisie à partir de l'entrée standard :\ <\verbatim> \ \ \ \ \ \ while (1) { \ \ \ \ \ \ \ char buffer[100]; \ \ \ \ \ \ \ cin \\ buffer; \ \ \ \ \ \ \ if (strcmp (buffer, "quit") == 0) break; La sortie générée doit de nouveau figurer dans un bloc -.\ <\verbatim> \ \ \ \ \ \ \ \ cout \\ DATA_BEGIN \\ "verbatim:"; \ \ \ \ \ \ \ cout \\ "You typed " \\ buffer \\ "\\n"; À l'intérieur de ce type de bloc, on peut envoyer récursivement d'autre blocs qui peuvent utiliser des formats différents. Par exemple, le code suivant envoie une formule :\ <\verbatim> \ \ \ \ \ \ \ \ cout \\ "And now a LaTeX formula: "; \ \ \ \ \ \ \ cout \\ DATA_BEGIN \\ "latex:" \\ "$x^2+y^2=z^2$" \\ DATA_END; \ \ \ \ \ \ \ cout \\ "\\n"; Dans certains cas, il peut être utile d'envoyer directement la sortie en format en utilisant une représentation :\ <\verbatim> \ \ \ \ \ \ \ \ cout \\ "And finally a fraction "; \ \ \ \ \ \ \ cout \\ DATA_BEGIN \\ "scheme:" \\ "(frac \\"a\\" \\"b\\")" \\ DATA_END; \ \ \ \ \ \ \ cout \\ ".\\n"; À la fin, il faut de nouveau envoyer et vider la sortie standard :\ <\verbatim> \ \ \ \ \ \ \ \ next_input (); \ \ \ \ \ \ \ cout \\ DATA_END; \ \ \ \ \ \ \ fflush (stdout); \ \ \ \ \ } \ \ \ \ \ return 0; \ \ \ } Notez qu'il ne faut jamais envoyer plus d'un bloc -. Dès que le premier bloc - est reçu par , le système se met en attente d'entrée. Si vous voulez envoyer plusieurs blocs -, vous devez les inclure dans un bloc principal. Un canal spécifique est utilisé pour envoyer l'invite. Les canaux sont spécifiés comme des blocs - spéciaux :\ <\verbatim> \ \ \ \ static int counter= 0; \ \ \ void \ \ \ next_input () { \ \ \ \ \ counter++; \ \ \ \ \ cout \\ DATA_BEGIN \\ "channel:prompt" \\ DATA_END; \ \ \ \ \ cout \\ "Input " \\ counter \\ "] "; \ \ \ } À l'intérieur d'un canal d'invite, vous pouvez aussi utiliser des blocs - imbriqués. Ceci permet, par exemple, d'utiliser une formule comme invite. Il existe trois canaux standards :\ <\description> .>Canal de sortie normale par défaut. .>Canal d'envoi d'une invite de saisie. .>Canal servant à envoyer une valeur par défaut à la prochaine entrée. On peut envoyer des images PostScript en sortie. À supposer qu'il existe une image dans votre répertoire utilisateur, si vous insérez les lignes suivantes : <\verbatim> \ \ \ \ \ \ \ \ cout \\ "A little picture:\\n"; \ \ \ \ \ \ \ cout \\ DATA_BEGIN \\ "ps:"; \ \ \ \ \ \ \ fflush (stdout); \ \ \ \ \ \ \ system ("cat $HOME/picture.ps"); \ \ \ \ \ \ \ cout \\ DATA_END; \ \ \ \ \ \ \ cout \\ "\\n"; à l'endroit approprié dans la boucle principale, votre image s'affichera dans la sortie. <\verbatim> #include \stdio.h\#include \stdlib.h\#include \string.h\#include \iostream.h\#define DATA_BEGIN \ \ ((char) 2)#define DATA_END \ \ \ \ ((char) 5)#define DATA_ESCAPE \ ((char) 27)static int counter= 0;voidnext_input () { \ counter++; \ cout \\ DATA_BEGIN \\ "channel:prompt" \\ DATA_END; \ cout \\ "Input " \\ counter \\ "] ";}intmain () { \ cout \\ DATA_BEGIN \\ "verbatim:"; \ cout \\ "------------------------------------------------------\\n"; \ cout \\ "Welcome to my test computer algebra system for TeXmacs\\n"; \ cout \\ "This software comes with no warranty whatsoever\\n"; \ cout \\ "(c) 2001 \ by Joris van der Hoeven\\n"; \ cout \\ "------------------------------------------------------\\n"; \ next_input (); \ cout \\ DATA_END; \ fflush (stdout); \ while (1) { \ \ \ char buffer[100]; \ \ \ cin \\ buffer; \ \ \ if (strcmp (buffer, "quit") == 0) break; \ \ \ cout \\ DATA_BEGIN \\ "verbatim:"; \ \ \ cout \\ "You typed " \\ buffer \\ "\\n"; \ \ \ cout \\ "And now a LaTeX formula: "; \ \ \ cout \\ DATA_BEGIN \\ "latex:" \\ "$x^2+y^2=z^2$" \\ DATA_END; \ \ \ cout \\ "\\n"; \ \ \ cout \\ "And finally a fraction "; \ \ \ cout \\ DATA_BEGIN \\ "scheme:" \\ "(frac \\"a\\" \\"b\\")" \\ DATA_END; \ \ \ cout \\ ".\\n"; \ \ \ next_input (); \ \ \ cout \\ DATA_END; \ \ \ fflush (stdout); \ } \ return 0;} <\initial> <\collection> <\references> <\collection> |?>> > |?>> > > |?>> <\auxiliary> <\collection> <\associate|idx> |Mycas>>|> |Insérer>||Session>>|> <\associate|toc> |math font series||1Studying the source code step by step> |math font series||2Graphical output> |math font series||3The complete listing>