summaryrefslogtreecommitdiff
path: root/lib/pile.c
diff options
context:
space:
mode:
authorPixel <Pixel>2001-05-02 22:14:21 +0000
committerPixel <Pixel>2001-05-02 22:14:21 +0000
commitecd16166cde1ffa3edfbaa897b049d532e234ab6 (patch)
tree192b47251b141e0dd0f53530e3a4a2a5f961ea0f /lib/pile.c
parent8626b278cdccd95e628f14c027ae8a1c47133c48 (diff)
Pouet
Diffstat (limited to 'lib/pile.c')
-rw-r--r--lib/pile.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/lib/pile.c b/lib/pile.c
index dd43a6e..11f1327 100644
--- a/lib/pile.c
+++ b/lib/pile.c
@@ -18,8 +18,10 @@ pile_elem result_pile[PILE_MAX];
unsigned int pile_ptr = 0;
unsigned int result_pile_ptr = 0;
-/* fonctions basiques sur la pile d operandes */
+/* Fonctions basiques sur la pile d'opérandes. Elle seront appelées par le parser. */
+/* La fonction push_pile est générique. Le parser lui transmet une chaîne de caractères, et cette
+fonction va tenter de la convertir en ce qui lui semble le mieux pour empiler */
void push_pile(char *st)
{
int valid1, valid2, valid3;
@@ -35,23 +37,23 @@ void push_pile(char *st)
r_number = char_to_rat(st, &valid2);
valid3 = is_mute(st);
poly = (polynome) NomVarToVar(st, variables, &valid4);
- if (valid1) { /* il s agit d un entier */
+ if (valid1) { /* il s'agit d'un entier */
pushcontext(_("it's an integer"));
push_pile_poly(ply_constr(rat_constr(i_number, 1), 0));
popcontext();
- } else if (valid2) { /* il s agit d un flottant */
+ } else if (valid2) { /* il s'agit d'un flottant */
pushcontext(_("it's a float"));
push_pile_poly(ply_constr(r_number, 0));
popcontext();
- } else if (valid3) { /* il s agit de x */
+ } else if (valid3) { /* il s'agit de x */
pushcontext(_("it's X"));
push_pile_poly(ply_constr(rat_constr(1, 1), 1));
popcontext();
- } else if (valid4) { /* il s agit d une variable */
+ } else if (valid4) { /* il s'agit d'une variable */
pushcontext(_("it's a variable"));
push_pile_poly(ply_copy(poly));
popcontext();
- } else { /* il s agit d un nom */
+ } else { /* il s'agit d'un nom */
pushcontext(_("it's a name"));
if (*st == '\'') {
st++;
@@ -61,14 +63,12 @@ void push_pile(char *st)
popcontext();
}
popcontext();
-
-
#ifdef DEBUG
-
fprintf(stderr, "exiting push_pile\n");
#endif
}
+/* Fonctions "atomiques" appelées par push_pile() */
void push_pile_poly(polynome poly)
{
@@ -108,6 +108,8 @@ void push_pile_string(char *st)
}
+/* Dépilement */
+
pile_elem pop_pile(unsigned int count)
{
char buf[50];
@@ -121,6 +123,8 @@ pile_elem pop_pile(unsigned int count)
return pile[pile_ptr];
}
+/* Vidage (appelée en cas d'erreur) */
+
void flush_pile(void)
{
int i;
@@ -144,8 +148,8 @@ void flush_pile(void)
-/* fonctions basiques sur la pile de resultats */
-
+/* Fonctions basiques sur la pile de resultats. Grâce à cette pile résultat, nous pouvons passer un résultat
+à l'interface, dès que le parser aura terminé son travail. */
void move_to_resultat_pile(void)
{ pile_elem temp;
@@ -189,7 +193,6 @@ char * pop_resultat(void)
return result;
}
-
polynome return_last(int *valid)
{
if (!result_pile_ptr) {
@@ -202,12 +205,12 @@ polynome return_last(int *valid)
}
-
int has_resultat(void) {
return (result_pile_ptr ? 1 : 0);
}
-/* fonctions avancees sur la pile d operandes */
+/* Fonctions avancées sur la pile d'opérandes. Nous allons surtout manipuler les opérandes de la pile, à l'aide
+des opérateurs que le parser nous enverra. */
char *affichage_level_1(void)
{
@@ -223,7 +226,6 @@ char *affichage_level_1(void)
break;
case T_INT:
result = (char *) Emalloc(11 * sizeof(char));
-
sprintf(result, "%10d", pile[pile_ptr - 1].val);
break;
}
@@ -237,7 +239,7 @@ int is_mute(char *st)
return !(strcmp(st, mute));
}
-
+/* Cette fonction est appelée par le parser, et est donc un énorme switch qui va tester l'opérateur passé en paramètre */
void act_pile(int func)
{
pile_elem operande1, operande2;
@@ -423,11 +425,7 @@ void act_pile(int func)
exception(1, _("act_pile: OP_FUNC_CALL need only one argument for a polynom evaluation"));
}
if (operande[0].poly->degre == 0) {
- push_pile_poly(ply_constr
- (rat_constr_from_double
- (ply_valuation
- (operande2.poly, rat_to_double(operande[0].poly->coef))),
- 0));
+ push_pile_poly(ply_constr(ply_valuation(operande2.poly, operande[0].poly->coef), 0));
if (operande[0].poly)
ply_destruct(operande[0].poly);
ply_destruct(operande2.poly);
@@ -453,7 +451,7 @@ void act_pile(int func)
popcontext();
}
-
+/* Fonction de déboguage uniquement */
void affichage_pile(void)
{
int i;