Compiler le projet
Première chose à savoir, vous avez besoin d'être sous Linux pour compiler le projet, et non ça ne marche pas sur lunix121 (do-do-dommage). Je vous renvoie à /users/morignot2011/passer_a_linux pour ceux qui n'ont pas encore linux.
Vous êtes maintenant sous linux, bien ! Tout d'abord, vous devez installer la librairie curses pour ocaml (en version développement). Sous Ubuntu et Linux Mint, il s'agit du paquet libcurses-ocaml-dev. Voici la marche à suivre ensuite :
copiez votre code source dans le répertoire contenant les fichiers fournis par XU
renommez le en base.ml
ouvrez une console
rendez vous dans le répertoire cité ci-dessus à grands coups de cd
lancez la commande make
Pour tester votre programme, lancez le avec la commande ./editeur (en étant toujours dans le bon dossier).
Problèmes
Tout d'abord, il faut savoir que si votre fichier base.ml ne contient pas tous les types et fonctions demandées par XU, la compilation échouera.
Une fois ceci passé, le principal problème que vous pouvez avoir concerne la version d'ocaml. Il semblerait en effet que la compilation échoue avec la version 3.12. Pour savoir quelle version d'ocaml vous utilisez, lancez tout simplement l'interpréteur ocaml avec la commande ocaml (ctrl + d pour le quitter). Si vous avez effectivement la version 3.12 (ce qui est le cas sur la plupart des distributions récentes), nous allons utiliser un chroot.
L'idée principale du chroot est de dire à votre système « maintenant la racine n'est plus / mais /mon/dossier/ ». Ainsi, faire un ls dans un chroot ne lancera pas /bin/ls mais /mon/dossier/bin/ls. L'intérêt est donc d'avoir un deuxième système à l'intérieur du premier. C'est un peu comme une machine virtuelle, sauf que vous partagez des choses avec le système principal (notamment le noyau linux) et que c'est plus simple à mettre en place.
Nous allons donc utiliser un chroot en mettant la distribution Debian dedans. L'avantage de Debian est que ocaml est encore en version 3.11.2 (et oui, c'était quand même ça notre problème au départ). Voici la marche à suivre :
téléchargez l'archive suivante : chroot.tar.gz
décompressez la
ouvrez une console et rendez vous dans le dossier où vous avez décompressé l'archive
lancez sudo chroot ./
Félicitation, vous êtes maintenant dans une Debian ! Il faut maintenant installer ocaml, libcurses-ocaml-dev et build-essential. Je ne l'ai pas fait avant de vous donner l'archive car ça rajoute tout de même 200 Mo. On installe donc : toujours dans le chroot faites aptitude install build-essential ocaml libcurses-ocaml-dev. On peut maintenant commencer à bosser. Dans le chroot :
un cd pour aller dans son répertoire personnel, c'est toujours mieux
on télécharge le code de XU :``` wget http://www.ensiie.fr/~urbain/enseignement/Projet_IPF.tar.gz
on le décompresse :``` tar zxvf Projet_IPF.tar.gz
Pour copier le fichier contenant votre code, il faut passer par une autre console. En effet, on ne peut pas sortir d'un chroot une fois que l'on est dedans. Par contre, on peut y accéder depuis le système hôte (c'est un répertoire comme les autres). Dans une console, hors du chroot donc :
sudo cp mon_fichier.ml chroot/root/Projet_IPF/base.ml.Voilà, vous pouvez maintenant suivre la démarche standard décrite plus haut. Pour quitter le chroot il suffit de vous déconnecter avec ctrl + d ou exit. Si vous avez un autre problème, viendez sur irc.
Aide
Buffer
Un buffer correspond juste au contenu de votre fichier. En effet, on ne travaille pas directement sur le fichier : on le charge dans un buffer, on modifie ce buffer, et on l'enregistre éventuellement ensuite. À vous de décider quel structure lui donner.
Save f
La sauvegarde n'est pas si compliqué que ça. En fait, c'est la fonction f fournie à l'action Save qui fait le boulot. Vous n'avez qu'à l'appelez avec le buffer converti en une grande string en paramètre.
Saut à la ligne
Astuce : un saut à la ligne est codé par le caractère '\n' (oui, c'est bien un seul caractère). Cela peut vous être utile pour savoir quand créer une nouvelle ligne dans votre buffer, ou pour le convertir en une string (je n'en dis pas plus).
Quitter
Bon, votre machin se compile, cool, vous le lancez et … comment je le quitte ?? Annuler, charger un fichier, enregistrer, et quitter il est où ?
En fait c'est assez simple. Il suffit de faire ctrl + c. En console ce raccourci envoit un message SIGINT au processus, ce qui a pour effet de l'interrompre.
Gestion du curseur
Il se peut que votre curseur ne bouge pas. C'est parce que la description de la fonction get_buffer_content n'est pas très explicite. Elle doit renvoyer un couple de string (s1, s2) où s1 est « l'ensemble des lignes précédents la ligne actuelle ainsi que les caractères précédents le curseur » et s2 est « l'ensemble des caractères suivant le curseur et les lignes suivantes ».