III- Analyse détaillée:
3.1 - Présentation et justification de la
structure :
Afin de
stocker le texte en mémoire, on a utilisé deux structures représentant
respectivement les caractères et les lignes:
Les caractères :
Les lignes :
Différentes
structures de données auraient pu être utilisées mais la plus simple s’est
avérée être deux listes doublement chaînées, permettant d’accéder à tous
les caractères stockés via un compteur tout en restant liés aux caractères précédents et suivants.
3.2 – Présentation et justification des
fichiers :
Les
fichiers que peut ouvrir cet éditeur n’obéissent à aucun format particulier.
Il est cependant logique d’ouvrir des fichiers ASCII, qui contiennent du texte
brut. Cependant nous n’avons pas fixé de barrières : avec ou sans
extension, d’un *.txt à un *.c ou *.exe, tous les fichiers peuvent être
chargés. Il suffit d’en indiquer le nom complet accompagné de l’extension
éventuelle.
3.3 – Architecture détaillée :
On a séparé le code source du projet en plusieurs modules, réunis autour
d’une fonction principale « main ». On va ici vous présenter
l’architecture de ce découpage modulaire :
3.4 – Description
des modules :
a. main :
Le rôle de la fonction main est axé
essentiellement sur l’initialisation des différents modules composant cet éditeur, en plus de l’ouverture du fichier directement à partir du système
d’exploitation ou le chargement du fichier si on l’ouvre à partir de l’application
proprement dite.
b. Structure de donnée :
Ce module comporte les
structures qui mettent en place les listes doublement chaînées déjà citées.
c. Opérations élémentaires :
Ce module assure la gestion élémentaire de
l’éditeur du texte, ceci via la gestion du fichier et celle des structures
·
Gestion du fichier : Cette opération
consiste au chargement du fichier et l’enregistrement des caractères dans la
structure d’une part. Et, lors d’une opération de sauvegarde, enregistrer les
caractères dans le fichier à partir de la structure, d’autre part.
·
Gestion des structures : Ce fichier
comprend :
o
une
fonction qui assure l’ajout des lignes ajouterLigne(ptr_ligne *ligneEnCour),
o
une
autre fonction qui assure leur surpression supprimerLigne(ptr_ligne
*ligneEncour )
o
Une troisième qui permet l’insertion du
caractère avant le caractère en cours ajouterCaractere(ptr_ligne *LigneEnCour, ptr_charLigne
*charEncour,long val),
o
une
qui libère l’espace du caractère en cour
de la structure et renvoi au caractère suivant supprimerCaractere(ptr_ligne
*premiereLigne, ptr_ligne *LigneEnCour, ptr_charLigne *charEncour) ;
o
Et une dernière qui permet de remplacer un mot
donné par l’utilisateur par un autre au choix, remplacerMot(ptr_ligne
*premierLigne,ptr_ligne *ligneEnCour, ptr_charLigne *CharEnCour, char *mot,
char *mot2,ptr_charLigne dernierChar,ptr_buffer *lebuffer).
d. Module pleine page :
En plus du sous modèle qui permet de gérer le curseur
en fonction des flèches et autres, Ce module
comprend :
·
Module pleine page : qui contient 4
fonctions qui gèrent les actions propres aux touches:
o
‘ del’ qui permet de supprimer le caractère où est
basé le curseur ;
o
‘retour’ ou ‘ß’ qui permet de supprimer le caractère à gauche
du curseur avec le même principe de la touche ‘del’ seulement avec des
conditions différentes ;
o
‘ajouter caractère’ qui permet d’ajouter le caractère saisie su r
l’emplacement de celui-ci tout en le déplaçant vers la droite ;
o
‘entrée’ qui permet de créer une nouvelle ligne et de
faire passer les caractères après le curseur à la ligne.
e.
Module
commande :
Ce module permet de gérer les fonctionnalité
basées sur un jeu de commandes (relatées dans le help), et ceci grâce au :
·
Menu commande
qui comprend une fonction Menucommande( ) qui permet, après récupération
de la commande , d’assurer sa traduction, avant de passer à l’exécution en
cas d’absence d’une erreur de syntaxe.
·
Module commande :qui contient les
différentes fonctions traitant chaque commande à part. dont voici la
liste :
Ce module joue un rôle essentiel quand à la sauvegarde temporaire de la
saisie avant que l’utilisateur décide d’enregistrer lui-même. En effet, on a
représenté ce buffer sous forme d’une structure de pile :
h. Module Conio :
Ce module, comporte les différentes fonctions
assurant des fonctionnalités techniques dont on a eu besoin pour la bonne
exécution de notre éditeur ;
Exemple: la fonction gotoxy( ).