Bonjour,

Je cherche à développer un shell sur un µControlleur : j'ai donc des ressources limitées.
Je voudrais que mon shell gère l'auto-completion

Actuellement, la description des répertoires/fichiers est directement stockée dans la ROM du µControlleur (elle est donc figée) mais peut-être que par la suite je la stockerais dans une mémoire flash externe avec possibilité de pouvoir créer/modifier/supprimer des fichiers/répertoires (tout dépendra des ressources nécessaires pour faire cette fonctionnalité).

Je pensais donc partir sur cette structure (liste simplement chainée sous forme d'arbre) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 
 
typedef enum _PATH_TYPE {
	PATH_FOLDER = 0,
	PATH_FILE
} PATH_TYPE;
 
 
typedef struct _pathElement {
	char *name;					// nom du fichier/repertoire
	PATH_TYPE type;				// type : dossier ou fichier
 
	pathElement* next;			// pointeur vers le prochain élément
									// => vaut NULL si on est à la fin de la liste du dossier
	pathElement* firstChild;	// pointeur vers le premier enfant de cet element (utilisé que pour les dossiers)
								// => vaut NULL si pas d'enfant
 
	void (*callBack)(void);		// adresse de la fonction à executer si on lance la commande
 
} pathElement;
 
 
// *************************************************
// creation de l'arborescence suivante
// +--> folder1
// |      |
// |      +--> file2_1
// |      |
// |      +--> file2_2
// |
// +--> file1  
// |
// +--> file2  
// |
// +--> file3  
 
// remarque : ROM => stocke la variable en ROM
ROM pathElement file3 = {
	.name = "monFichier3.csv",
	.type = PATH_FILE,
 
	.next = NULL
	.firstChild = NULL,
 
	.callBack = myFunc3
}
 
ROM pathElement file2 = {
	.name = "monFichier2.txt",
	.type = PATH_FILE,
 
	.next = &file3
	.firstChild = NULL,
 
	.callBack = myFunc2
}
 
ROM pathElement file1 = {
	.name = "monFichier1.bat",
	.type = PATH_FILE,
 
	.next = &file2
	.firstChild = NULL,
 
	.callBack = myFunc1
}
 
ROM pathElement file2_2 = {
	.name = "monFichier2_2.bat",
	.type = PATH_FILE,
 
	.next = NULL
	.firstChild = NULL,
 
	.callBack = myFunc2_2
}
 
ROM pathElement file2_1 = {
	.name = "monFichier2_1.bat",
	.type = PATH_FILE,
 
	.next = &file2_2
	.firstChild = NULL,
 
	.callBack = myFunc2_1
}
 
ROM pathElement folder1 = {
	.name = "monDossier",
	.type = PATH_FOLDER,
 
	.next = &file1
	.firstChild = &file2_1,
 
	.callBack = NULL
}
 
ROM pathElement* racine = &folder1; // premier élément de la liste
pathElement* elementSelected = NULL; // element en cours de selection
char pathNameSeleted[50] = ""; // nom du chemin actif
Qu'en pensez-vous ?
Avec ce type de structure, je pourrais bien naviguer dans mon arborescence avec des chemins relatifs/absolus ?
Je pourrais bien faire mon auto-complétion ?

Pour la suite :
- Est-ce cette structure est bien adaptée pour etre modifiée et enregistrée dans une flash externe ?
- Est-ce que je pourrais faire de l'auto-completion sur les arguments aussi ?


=> vous voyez des améliorations à apporter ?

Merci d'avance,