summaryrefslogtreecommitdiff
path: root/lib/numbers.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/numbers.c')
-rw-r--r--lib/numbers.c148
1 files changed, 75 insertions, 73 deletions
diff --git a/lib/numbers.c b/lib/numbers.c
index 9c2814f..9dd306c 100644
--- a/lib/numbers.c
+++ b/lib/numbers.c
@@ -4,95 +4,97 @@
*
*/
-
#include "numbers.h"
#include "scalaires.h"
-/* Cette fonction lit un nombre. Elle va chercher absolument à traduire la chaîne passée en argument en un nombre. Si
-ce nombre n'est pas valide, alors l'int valid est mis à faux. Cette fonction reconnait les nombres en décimaux, les nombres
-en octal préfixés avec 0 et les nombres en hexadécimal préfixés avec 0x.
-*/
+/*
+ * Cette fonction lit un nombre. Elle va chercher absolument a traduire la chaine passee en
+ * argument en un nombre. Si ce nombre n'est pas valide, alors l'int valid est mis a faux. Cette
+ * fonction reconnait les nombres en decimaux, les nombres en octal prefixes avec 0 et les nombres
+ * en hexadecimal prefixes avec 0x.
+ */
int char_to_number(char *st, int *valid)
{
- int whattype = 0, result = 0;
+ int whattype = 0, result = 0;
- *valid = 0;
+ *valid = 0;
- if (*st == '0') {
- st++;
- if (*st == 'x') {
- whattype = 1;
- st++;
- } else if (*st) {
- whattype = 2;
- } else {
- *valid = 1;
- return 0;
- }
+ if (*st == '0') {
+ st++;
+ if (*st == 'x') {
+ whattype = 1;
+ st++;
+ } else if (*st) {
+ whattype = 2;
+ } else {
+ *valid = 1;
+ return 0;
}
+ }
- while (*st) {
- switch (whattype) {
- case 0:
- if ((*st < '0') || (*st > '9')) {
- return 0;
- }
- result *= 10;
- result += *st - '0';
- break;
- case 1:
- if (((*st < '0') || (*st > '9'))
- && ((*st < 'A') || (*st > 'F'))
- && ((*st < 'a') || (*st > 'f'))) {
- return 0;
- }
- result *= 16;
- if ((*st >= '0') && (*st <= '9')) {
- result += *st - '0';
- } else if ((*st >= 'A') && (*st <= 'F')) {
- result += *st - 'A' + 10;
- } else {
- result += *st - 'a' + 10;
- }
- break;
- case 2:
- if ((*st < '0') || (*st > '7')) {
- return 0;
- }
- result *= 8;
- result += *st - '0';
- break;
- }
- st++;
+ while (*st) {
+ switch (whattype) {
+ case 0:
+ if ((*st < '0') || (*st > '9')) {
+ return 0;
+ }
+ result *= 10;
+ result += *st - '0';
+ break;
+ case 1:
+ if (((*st < '0') || (*st > '9'))
+ && ((*st < 'A') || (*st > 'F'))
+ && ((*st < 'a') || (*st > 'f'))) {
+ return 0;
+ }
+ result *= 16;
+ if ((*st >= '0') && (*st <= '9')) {
+ result += *st - '0';
+ } else if ((*st >= 'A') && (*st <= 'F')) {
+ result += *st - 'A' + 10;
+ } else {
+ result += *st - 'a' + 10;
+ }
+ break;
+ case 2:
+ if ((*st < '0') || (*st > '7')) {
+ return 0;
+ }
+ result *= 8;
+ result += *st - '0';
+ break;
}
+ st++;
+ }
- *valid = 1;
- return result;
+ *valid = 1;
+ return result;
}
-
rationnel char_to_rat(char *st, int *valid)
-{ /* cette fonction tente de traduire une chaine en rationnel */
- int dotnum = 0, deci = 1, temp = 0;
+{ /*
+ * cette fonction tente de traduire une chaine en rationnel
+ */
+ int dotnum = 0, deci = 1, temp = 0;
- while (*st) {
- if (*st == '.') {
- dotnum++;
- } else {
- if ((*st < '0') || (*st > '9') || (dotnum > 1)) {
- *valid = 0;
- return rat_constr_zero();
- } else {
- temp *= 10;
- temp += *st - '0';
- if (dotnum == 1)
- deci *= 10;
- }
- }
- st++;
+ while (*st) {
+ if (*st == '.') {
+ dotnum++;
+ } else {
+ if ((*st < '0') || (*st > '9') || (dotnum > 1)) {
+ *valid = 0;
+ return rat_constr_zero();
+ } else {
+ temp *= 10;
+ temp += *st - '0';
+ if (dotnum == 1)
+ deci *= 10;
+ }
}
+ st++;
+ }
- *valid = 1;
- return rat_constr(temp, deci);
+ *valid = 1;
+ return rat_constr(temp, deci);
}