File size: 2,565 Bytes
2ed5595
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
101
102
103
104
105
106

# Guide de développement Maya

## Comment ajouter de nouvelles fonctionnalités

### Structure du code

Le code Maya est organisé de manière modulaire :

1. **Déclarations** : Toutes les fonctions sont déclarées en haut du fichier
2. **Fonctions utilitaires** : `trim()`, `maya_error()`, etc.
3. **Gestion des variables** : `get_variable_value()`, `set_variable()`
4. **Handlers** : Une fonction `handle_xxx()` pour chaque type de commande
5. **Interpréteur principal** : `interpret_line()` qui dispatche vers les handlers

### Ajouter une nouvelle fonctionnalité

#### Étape 1 : Ajouter le prototype de fonction
```c
void handle_nouvelle_fonction(char *line);
```

#### Étape 2 : Implémenter la fonction
```c
void handle_nouvelle_fonction(char *line) {
    // Votre code ici
    // Utilisez maya_error() pour les erreurs
    // Utilisez trim() pour nettoyer les chaînes
}
```

#### Étape 3 : Ajouter la condition dans interpret_line()
```c
else if (strstr(line, "my.nouvelle")) {
    handle_nouvelle_fonction(line);
}
```

### Exemples de nouvelles fonctionnalités possibles

#### 1. Fonction my.time (afficher l'heure)
```c
void handle_time(char *line) {
    time_t t = time(NULL);
    struct tm *tm = localtime(&t);
    printf("Heure actuelle: %02d:%02d:%02d\n", 
           tm->tm_hour, tm->tm_min, tm->tm_sec);
}
```

#### 2. Fonction my.random (nombre aléatoire)
```c
void handle_random(char *line) {
    char *start = strchr(line, '(');
    char *end = strrchr(line, ')');
    
    if (!start || !end) {
        maya_error("Parenthèses manquantes pour my.random", 0);
        return;
    }
    
    start++;
    *end = '\0';
    
    int max = evaluate_expression(start);
    printf("Nombre aléatoire: %d\n", rand() % max);
}
```

#### 3. Fonction my.file (écrire dans un fichier)
```c
void handle_file_write(char *line) {
    // Parser le nom du fichier et le contenu
    // Écrire dans le fichier
    // Gérer les erreurs
}
```

### Conventions de nommage Maya

- Toutes les fonctions commencent par `my.`
- Les sous-catégories utilisent le point : `my.math.add`, `my.file.write`
- Les noms sont en français pour rester cohérent avec l'esprit du langage

### Gestion des erreurs

Toujours utiliser `maya_error()` pour signaler les erreurs :
```c
maya_error("Description de l'erreur", numero_ligne);
```

### Tests

Testez vos nouvelles fonctionnalités en :
1. Ajoutant des exemples dans `test.my`
2. Testant en mode interactif
3. Vérifiant la gestion d'erreurs

### Compilation et test

```bash
make clean
make
./main test.my
```