9#include <manux/string.h>
12#include <manux/errno.h>
64static void parametreMettreAJour(
parametre * p)
74static void parametreAffecterValeur(
parametre * p,
char * v)
88 parametreMettreAJour(p);
94static void parametreAffecterNom(
parametre * p,
char * n)
106static void parametreAffecterMiseAJour(
parametre * param,
111 param->
prive = prive;
114 parametreMettreAJour(param);
120static parametre * parametreCreer(
char * nom,
char * valeur,
125 if (result !=
NULL) {
127 parametreAffecterNom(result, nom);
128 parametreAffecterValeur(result, valeur);
129 parametreAffecterMiseAJour(result, prive, miseAJour);
145 if (result !=
NULL) {
207 if (result !=
NULL) {
226 for (ch =
b->parametres->premier ; (ch !=
NULL) && (result ==
NULL) ; ch = ch->
suivant) {
247 listeParametresInserer(reg->
parametres, param);
264 result = registreChercherSousRegistre(reg, nomSr);
267 if (result ==
NULL) {
273 sRParam = parametreCreer(nomSr,
NULL, (
void *) result,
NULL);
277 registreAjouterParametre(reg, sRParam);
289#ifndef REGISTRE_NOM_SEPARATEUR
290# define REGISTRE_NOM_SEPARATEUR '.'
292#ifndef REGISTRE_AFFECTATION
293# define REGISTRE_AFFECTATION '='
296void registreAjouterC(
registre * reg,
char * chaine)
330 memcpy(nom, debut, lgNom);
337 regSS = registreChercherSousRegistre(reg, nom);
339 regSS = registreAjouterSousRegistre(reg, nom);
350 param = listeParametresChercher(regSS->
parametres, nom);
352 param = parametreCreer(nom, valeur,
NULL,
NULL);
353 listeParametresInserer(regSS->
parametres, param);
355 parametreAffecterValeur(param, valeur);
390void registreAffecterParametreT(
registre * reg,
396 char * chaine, * prochaine;
400 chaine =
va_arg(argList,
char *);
401 prochaine =
va_arg(argList,
char *);
404 while (chaine !=
NULL) {
407 if (prochaine !=
NULL) {
408 regSS = registreChercherSousRegistre(reg, chaine);
410 regSS = registreAjouterSousRegistre(reg, chaine);
418 param = listeParametresChercher(reg->
parametres, chaine);
421 param = parametreCreer(chaine, valeur, prive, miseAJour);
422 listeParametresInserer(reg->
parametres, param);
425 if (miseAJour ==
NULL) {
426 parametreAffecterValeur(param, valeur);
432 parametreAffecterValeur(param, valeur);
434 parametreAffecterMiseAJour(param, prive, miseAJour);
440 prochaine =
va_arg(argList,
char *);
458 registreAffecterParametreT(reg, valeur, prive, miseAJour, argList);
472 char * chaine, * prochaine;
477 chaine =
va_arg(argList,
char *);
478 prochaine =
va_arg(argList,
char *);
480 while (chaine !=
NULL) {
482 if (prochaine !=
NULL) {
483 regSS = registreChercherSousRegistre(reg, chaine);
499 prochaine =
va_arg(argList,
char *);
509void registreAfficher(
registre * reg,
int profondeur)
514 for (p = 0 ; p < profondeur; p++) {
printk(
" ");}
518 for (p = 0 ; p < profondeur; p++) {
printk(
" ");}
541 A FAIRE : introduire les masque de debug avec la valeur par défaut
554 registreAjouterC(registreSysteme, chaine);
573 registreAffecterParametreT(registreSysteme, valeur, prive, miseAJour, argList);
582 registreAfficher(registreSysteme, 0);
Définition des fonctions de base d'entrée-sortie du noyau.
void printk(char *format,...)
Fonction principale d'affichage dans le noyau.
Gestion des registres (outils permettant de stocker des paramètres)
void(* registreMiseAJour)(void *, char *)
La fonction de mise-à-jour d'un registre.
#define va_start(ap, last)
__builtin_va_list va_list
int strcmp(const char *s1, const char *s2)
int strlen(const char *s)
void * memset(void *dest, int val, size_t n)
void * memcpy(void *dest, const void *src, size_t n)
char * prochainDelimiteur(char *chaine, char delimiteur)
Recherche d'un délimiteur dans une chaîne.
void * kmalloc(size_t n)
Allocation d'une zone de n octets.
void kfree(void *p)
Libération d'une zone mémoire allouée.
struct _registre registre
Un registre est simplement une liste (nommée) de paramètres. Les paramètres peuvent être eux-mêmes de...
void registreSystemeAfficher(void)
Affichage du registre système.
void registreSystemeInitialiser(void)
Création du registre du système.
#define REGISTRE_NOM_SEPARATEUR
Ajouter dans un registre un paramètre décrit dans une chaîne de caractères.
struct _parametre parametre
Un paramètre est simplement une valeur sous forme de chaîne de caractères associée à un nom.
void registreSystemeAjouterC(char *chaine)
Ajouter dans un registre système un paramètre décrit dans une chaîne de caractères.
#define REGISTRE_AFFECTATION
struct _listeParametres listeParametres
registre * registreCreer(char *nom)
Création d'un registre vide.
void registreAffecterParametre(registre *reg, char *valeur, void *prive, registreMiseAJour miseAJour,...)
La fonction fournie pour affecter un paramètre dans un registre.
struct _chainonParametre chainonParametre
On va construire des listes de paramètres.
void registreSystemeAffecterParametre(char *valeur, void *prive, registreMiseAJour miseAJour,...)
Ajouter au registre système un paramètre dont le nom est donné comme une liste de paramètres.
On va construire des listes de paramètres.
struct _chainonParametre * suivant
struct _chainonParametre * precedent
chainonParametre * dernier
chainonParametre * premier
Un paramètre est simplement une valeur sous forme de chaîne de caractères associée à un nom.
registreMiseAJour miseAJour
Un registre est simplement une liste (nommée) de paramètres. Les paramètres peuvent être eux-mêmes de...
listeParametres * parametres