Programmation fonctionnelle : projet 2011

Cette page peut être mise à jour, avec informations complémentaires, précisions, questions bonus, etc. Pensez à y revenir souvent.

Correction d'un problème ncurses dans l'interface pour les questions bonus : nouvelle interface ICI [tar.gz].
Projet à rendre pour le 18/11 à 17h, aucun retard ne sera toléré.
Des soutenances pourront être organisées ensuite.

Un rendu de projet comprend :

*** Protocole de dépôt

Vous devez rendre

rassemblés dans une archive tar gzippée identifiée comme votre_prénom_votre_nom.tgz.
La commande devrait ressembler à :
tar cvfz randolph_carter.tgz rapport.pdf base.ml autres_truc_éventuels.ml* ...
Lisez le man ! et testez le contenu de votre archive (une commande comme par exemple :
tar tvf randolph_carter.tgz doit lister les fichiers et donner leur taille). Une archive qui ne contient pas les fichiers demandés ne sera pas excusable.

Votre archive doit être déposée sur la machine lunix31 dans le dépôt IIE1-IPF1-1. Suivez les indications.

Le dépôt sera ouvert à partir de lundi 13. Il sera fermé le 18. Je relèverai les archives à 17h.



Sujet

On souhaite programmer un éditeur de texte « à la emacs » avec des fonctions simples : insérer ou effacer un caractère, se déplacer avec les flèches, sauver ou charger un ficher de texte, revenir à un état précédent (undo).

La notion principale à manipuler est la notion de buffer. On travaille localement dans un buffer au niveau d'une ligne (le buffer contient une séquence de lignes). Le curseur est positionné localement dans une ligne, laquelle contient une séquence de caractères. Un environnement contient un buffer courant et les moyens de revenir à un état précédent.

Vous devrez déclarer au moins les deux types buffer et env (noms imposés).

Pour simplifier, on ne considérera que des caractères non accentués.

Interface

Les événements clavier et l'affichage seront gérés à l'aide d'un code que nous vous fournirons ICI [tar.gz] (archive tar gzippée à copier dans votre compte école) et avec lequel vous interagirez au moyen de quelques fonctions très simples imposées. L'affichage se fera dans une fenêtre de 5 lignes, la ligne du milieu étant dans la mesure du possible la ligne où on travaille localement. Les commandes spéciales seront :

Le type des actions possibles est le type somme suivant (imposé) :

type action =
| Undo
| Save of (string -> unit)
| Load of string
| Left
| Right
| Up
| Down
| Backspace
| Delete
| Char of char

Description des fonctions

Un appui sur une touche du clavier doit se traduire par un déplacement du curseur, une insertion ou un effacement de caractère, un appel à sauvegarde du buffer courant ou à son remplissage par la lecture d'un fichier enregistré. On pourra s'inspirer du comportement d'emacs en cas de doute.

Déplacements

Une action provenant d'une pression sur les touches fléchées (Left, Right, Up, Down) entraîne une modification de la position du curseur (position courante).

Modification du contenu

Les touches non fléchées entraînent pour la plupart des modifications du buffer. Les comportements attendus sont :

Sauvegarde et lecture de fichier
Fonctions imposées



Questions bonus

Vous pouvez au choix traiter une (ou plusieurs) question bonus parmi les suivantes. Ne pas essayer d'y répondre ne retire pas de point.

Une nouvelle interface est disponible ICI [tar.gz] (nouvelle version avec pb. ncurses corrigé). Le type action comporte désormais un constructeur supplémentaire Special retourné lors de l'appui sur [f12].

Au choix :