OpenCores
URL https://opencores.org/ocsvn/minimips_superscalar/minimips_superscalar/trunk

Subversion Repositories minimips_superscalar

[/] [minimips_superscalar/] [trunk/] [gasm_with_mult2_instruction/] [src/] [dialogue.c] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 mcafruni
#include "dialogue.h"
2
 
3
#include <stdio.h>
4
#include <stdlib.h>
5
 
6
#include <debogueur.h>
7
 
8
int err_code=0;
9
 
10
int verbose=0;
11
 
12
/* Texte de l'aide en ligne.                                                                 */
13
char help[]="\n\
14
Assembleur pour le microprocesseur miniMIPS version 1.0\n\
15
Utilisation : asmips [options] [fichier]\n\
16
\n\
17
        Exemple : asmips -vo a.obj -l a.lst source.asm\n\
18
\n\
19
Options disponibles :\n\
20
\n\
21
        -v              active le mode verbeux\n\
22
\n\
23
        -n              désactive la liste d'assemblage\n\
24
\n\
25
        -o nom_fichier  nom du fichier de sortie, par défaut a.obj\n\
26
\n\
27
        -p              assemble vers la sortie standard\n\
28
\n\
29
        -l nom_fichier  nom du fichier pour la liste d'assemblage\n\
30
                        par défaut, a.lst est utilisé\n\
31
\n\
32
        -s nom_fichier  nom du fichier de syntaxe, par défaut \'Syntaxe\'\n\
33
\n\
34
        -m nom_fichier  nom du fichier de macros par défaut, contenant les\n\
35
                        pseudo-instructions de l'assembleur\n\
36
\n\
37
Notes d'utilisation :\n\
38
\n\
39
        Si aucun fichier d'entrée n'est spécifié, asmips tente d'assembler\n\
40
        l'entrée standard. Ce mode n'est pas encore compatible avec la liste\n\
41
        d'assemblage qui sera donc automatiquement désactivée.\n\
42
\n\
43
        La sélection du fichier de macro en ligne de commande est prioritaire\n\
44
        par rapport au fichier spécifié par la syntaxe qui sera donc ignoré.\n\
45
\n\
46
Merci de signaler les éventuels bugs à :\n\
47
\n\
48
        shangoue@enserg.fr\n\
49
        lmouton@enserg.fr\n\
50
";
51
 
52
 
53
typedef struct
54
{
55
        int code;
56
        char * chaine;
57
} type_paire_msg;
58
 
59
static type_paire_msg message[] =
60
 
61
{{ NO_ERR, "Pas d'erreur trouvée" }
62
/* Erreurs génériques :                                                                     */
63
,{ F_FLUX_NULL, "Tentative de lecture/écriture dans un flux NULL" }
64
,{ F_ERR_LECT, "Erreur de lecture imprévisible dans le flux" }
65
,{ F_ERR_OUV, "Erreur d'ouverture du fichier" }
66
,{ F_ERR_MEM, "Erreur d'allocation (mémoire insuffisante ?)" }
67
/* Erreurs du formateur :                                                                   */
68
,{ S_ERR_FORMAT, "Mauvaise utilisation d'un caractère" }
69
,{ S_CAR_INVALID, "Caractère non reconnu" }
70
,{ S_ALPHA_LONG, "Lexème de type ALPHA trop long" }
71
,{ S_ALPHA_INVALID, "Caractère non valide dans l'identificateur" }
72
,{ S_INT_INVALID, "Caractère non valide dans l'entier" }
73
/* Erreurs du préprocesseur :                                                               */
74
,{ S_CIRCULAR_FILE, "Inclusion circulaire de fichier(s)" }
75
,{ S_CIRCULAR_MACRO, "Inclusion circulaire de macro" }
76
,{ S_FICH_NON_TROUVE, "Impossible d'ouvrir le fichier indiqué" }
77
,{ S_DEF_MACRO_EOF, "Fin du fichier inattendue lors de la définition de macro" }
78
,{ S_USE_MACRO_EOF, "Fin du fichier inattendue lors de l'utlisation d'une macro" }
79
,{ S_NOM_MAC_INVALID, "Nom de la macro dans sa déclaration invalide" }
80
,{ S_NOM_INCFICH_INVALID, "Nom du fichier à inclure invalide" }
81
,{ S_MAC_NO_MATCH , "L'utilisation de la macro est incompatible avec sa définition" }
82
,{ S_MAC_TROP_PARAM, "Paramètre(s) non utlisé(s) dans la macro" }
83
/* Erreurs du préparateur :                                                                 */
84
,{ S_ERR_DCL, "Déclaration incorrecte" }
85
,{ S_DCL_VIDE, "Déclaration d'instruction vide" }
86
,{ S_DCL_NON_TERM, "Déclaration d'instruction non terminée '}' manquante" }
87
,{ S_REDEF_INS, "Instruction déjà existante, la nouvelle déclaration sera ignorée" }
88
,{ S_BAD_PROP, "Propriété incorrecte" }
89
,{ S_BAD_VAL, "Valeur de la propriété incorrecte" }
90
,{ S_BAD_FUN, "Fonction non définie" }
91
,{ S_BAD_ARG, "Mauvais argument pour la commande SET" }
92
,{ S_BAD_SST_DEC, "Déclaration du nombre de sous-types absente ou insuffisante" }
93
,{ S_DEP_FUNC_NB, "Dépassement de la capacité d'enregistrement des fonctions" }
94
,{ S_DEP_SST, "Dépassement de la capacité de codage des sous-types" }
95
,{ S_SEC_SST_DEC, "Répétition de la commande SSTNUM non autorisée" }
96
/* Erreurs de l'analyseur :                                                                 */
97
,{ S_SYN_ERR, "Erreur de syntaxe" }
98
,{ S_FUN_ERR, "Masques incompatibles dans la définition d'une instruction" }
99
,{ S_ADAP_ERR, "Erreur dans la valeur de retour d'une fonction de l'adaptateur" }
100
/* Erreurs de l'adaptateur :                                                                */
101
,{ S_FUN_INAP, "Fonction génératrice de masque inapplicable" }
102
,{ S_ARG_INCOMP, "Inadéquation des arguments avec une fonction de l'adaptateur" }
103
,{ S_SIGNED_TL, "Entier trop long pour le codage signé sur les bits disponibles" }
104
,{ S_UNSIGNED_TL, "Entier trop long pour le codage non signé sur les bits disponibles" }
105
,{ S_UNSIGNED_EXPECTED, "Entier non signé attendu" }
106
,{ S_REDEF_ETIQ, "Redéfinition d'étiquette non prise en compte" }
107
,{ S_BAD_ETIQ, "Etiquette inexistante" }
108
,{ S_ADR_INCONNUE, "L'adresse d'implantation est indéterminée" }
109
,{ S_BAD_ALIGN, "Saut à une étiquette non alignée sur 32 bits" }
110
,{ S_TOO_FAR, "Saut à une adresse n'appartenant pas à la région courante de 256 Mo" }
111
/* Erreurs du synthetiseur.                                                                 */
112
 
113
/* Warnings :                                                                               */
114
,{ W_SEPLEX_INIT, "Valeur du séparateur d'instruction non initialisé dans fichier Syntaxe" }
115
,{ W_REGLE_TYPAGE, "Regle de sous-typage invalide dans le fichier Syntaxe; elle est ignorée" }
116
,{ W_ARG_INC, "Argument incorrect" }
117
,{ W_FICH_DEF_MACRO, "Le fichier des macros par défaut n'a pas été trouvé" }
118
,{ W_MACRO_MANQ, "Auncun fichier des macros par défaut chargé" }
119
,{ W_NO_LIST_INC, "L'utilisation des inclusions désactive la liste d'assemblage" }
120
,{ W_NO_LIST_STDIN, "La lecture dans le flux standard interdit la liste d'assemblage" }
121
,{ W_NO_SYNTAX, "Pas de fichier de syntaxe" }
122
,{ W_SRCE_MOD, "Flux source modifié. Echec de la création de la liste d'assemblage" }
123
,{ W_REDEF_MAC, "Redéfinition d'une macro" }
124
,{ W_UNDEF_NOMAC, "Tentative de suppression d'une macro non définie" }
125
,{ W_REDEF_CODE, "Réutilisation du code, les sous-types seront confondus" }
126
,{ W_REDEF_SST, "Nom de sous-type existant, seule la première définition sera accessible" }
127
 
128
/* Commentaires                                                                              */
129
 
130
/* Main                                                                                      */
131
,{ B_INIT_SYNTAX, "Initialisation de la syntaxe de l'assembleur..." }
132
,{ B_INIT_MACRO, "Chargement des pseudo-instructions..." }
133
,{ B_LECT_SRC, "Lecture des sources..." }
134
,{ B_STR_OBJ, "Enregistrement du fichier objet..." }
135
,{ B_STR_LST, "Creation de la liste d'assemblage..." }
136
,{ B_ERR_REP, "Rapport d'erreurs :" }
137
,{ B_NBR_ERR_SYN, "\tErreurs détectées lors de la synthèse :" }
138
,{ B_NBR_ERR_ANA, "\tErreurs détectées lors de l'analyse :" }
139
,{ B_SYN, "Synthèse..." }
140
,{ B_ANA, "Analyse du code..." }
141
/* Preparateur                                                                               */
142
,{ B_CASSE, "Basculement en mode sensible à la casse" }
143
,{ B_NOCASSE, "Basculement en mode insensible à la casse" }
144
,{ B_MAC_DEF, "Détection d'un fichier de pseudo-instructions par défaut dans la syntaxe" }
145
,{ B_INIT_D, "Activation du support des macros" }
146
,{ B_INIT_U, "Activation du support de la supression de macros" }
147
,{ B_INIT_I, "Activation du support de l'inclusion de fichiers" }
148
,{ B_INIT_SEP, "Initialisation du séparateur d'instructions" }
149
,{ B_PREP_SST, "Préparation pour l'ajout de sous-types" }
150
,{ B_ADD_SST, "Nouveau sous-type détecté" }
151
/* Preprocesseur                                                                             */
152
,{ B_NO_MACRO, "Aucune macro définie." }
153
,{ B_MACRO_DISPO, "Macros disponibles :" }
154
/* Adaptateur                                                                                */
155
,{ B_TABLAB, "Table des étiquettes :" }
156
 
157
/* Terminateur de la table, ne pas supprimer !                                               */
158
,{ 0, NULL }
159
};
160
 
161
char sep_fich_inclus[] = " inclus depuis ";
162
 
163
char * search_msg()
164
{
165
        type_paire_msg * pmsg=message;
166
        while(pmsg->chaine!=NULL)
167
        {
168
                if (pmsg->code==err_code) return pmsg->chaine;
169
                pmsg++;
170
        }
171
        return message->chaine;
172
}
173
 
174
void affiche_message(char * origine, int ligne)
175
{
176
        if (err_code>=1000)     /* Warning                                                   */
177
        {
178
                if (origine && ligne)
179
                        fprintf(stderr, "Attention ! \'%s\' : %d : %s.\n"
180
                                        , origine, ligne, search_msg());
181
                else if (origine)
182
                        fprintf(stderr, "Attention ! \'%s\' : %s.\n",  origine, search_msg());
183
                else
184
                        fprintf(stderr, "Attention ! %s.\n",  search_msg());
185
        }
186
        else if (err_code < 0)  /* Commentaire                                               */
187
        {
188
                if (verbose)
189
                {
190
                        if (origine && ligne)
191
                                fprintf(stderr, "-- \'%s\' : %d : %s\n"
192
                                                , origine, ligne, search_msg());
193
                        else if (origine)
194
                                fprintf(stderr, "-- %s %s\n", search_msg(), origine);
195
                        else
196
                                fprintf(stderr, "-- %s\n",  search_msg());
197
                }
198
        }
199
        else if (err_code<100)  /* Fatal Error                                               */
200
        {
201
                if (origine && ligne)
202
                        fprintf(stderr, "Erreur fatale ! \'%s\' : %d : %s.\n"
203
                                        , origine, ligne, search_msg());
204
                else if (origine)
205
                        fprintf(stderr, "Erreur fatale ! \'%s\' : %s.\n"
206
                                        , origine, search_msg());
207
                else
208
                        fprintf(stderr, "Erreur fatale ! %s.\n",  search_msg());
209
                exit(err_code);
210
        }
211
        else    /* Erreur de Syntaxe                                                         */
212
        {
213
                if (origine && ligne)
214
                        fprintf(stderr, "\'%s\' : %d : %s.\n"
215
                                        , origine, ligne, search_msg());
216
                else if (origine)
217
                        fprintf(stderr, "\'%s\' : %s.\n",  origine, search_msg());
218
                else
219
                        fprintf(stderr, "%s.\n",  search_msg());
220
        }
221
}
222
 
223
void display_help()
224
{ /* fonction d'affichage de l'aide en ligne.                                                */
225
        fprintf(stderr, help);
226
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.