|
|
| version 1.6, 2025/04/09 19:52:02 | version 1.11, 2025/05/05 23:09:19 |
|---|---|
| Line 24 | Line 24 |
| * along with FreeM. If not, see <https://www.gnu.org/licenses/>. | * along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
| * | * |
| * $Log$ | * $Log$ |
| * Revision 1.11 2025/05/05 23:09:19 snw | |
| * Revert errors in E notation parsing | |
| * | |
| * Revision 1.10 2025/05/05 23:02:39 snw | |
| * More fixes around E notation | |
| * | |
| * Revision 1.9 2025/05/05 22:52:32 snw | |
| * Make E notation error message more appropriate | |
| * | |
| * Revision 1.8 2025/05/05 19:34:46 snw | |
| * Fix E notation code to disallow more than one minus sign after the E | |
| * | |
| * Revision 1.7 2025/04/10 01:24:38 snw | |
| * Remove C++ style comments | |
| * | |
| * Revision 1.6 2025/04/09 19:52:02 snw | * Revision 1.6 2025/04/09 19:52:02 snw |
| * Eliminate as many warnings as possible while building with -Wall | * Eliminate as many warnings as possible while building with -Wall |
| * | * |
| Line 38 | Line 53 |
| #include "mpsdef.h" | #include "mpsdef.h" |
| #include <stdlib.h> | #include <stdlib.h> |
| #include <math.h> | #include <math.h> |
| #include <ctype.h> | |
| int unit (char *str); | int unit (char *str); |
| extern void cond_round (char *a, int digits); /* defined in expr.c */ | extern void cond_round (char *a, int digits); /* defined in expr.c */ |
| Line 1126 void mdiv (char *uu, char *v, short typ) | Line 1142 void mdiv (char *uu, char *v, short typ) |
| case '#': | case '#': |
| snprintf (uu, STRLEN - 1, "%ld\201", (((long) fp_uu) % ((long) fp_v))); | snprintf (uu, STRLEN - 1, "%ld\201", (((long) fp_uu) % ((long) fp_v))); |
| //snprintf (uu, STRLEN - 1, "%ld\201", ((long) fp_uu < 0 ? (((long) fp_uu % (long) fp_v) + (long) fp_v) % (long) fp_v : (long) fp_uu % (long) fp_v)); | /*snprintf (uu, STRLEN - 1, "%ld\201", ((long) fp_uu < 0 ? (((long) fp_uu % (long) fp_v) + (long) fp_v) % (long) fp_v : (long) fp_uu % (long) fp_v)); */ |
| break; | break; |
| } | } |
| Line 1970 int numlit (char *str) | Line 1986 int numlit (char *str) |
| } | } |
| continue; | continue; |
| } | } |
| if (expflg) { | if (expflg) { |
| if (ch == MINUS) { | if (ch == MINUS) { |
| /* TODO: revisit this; it breaks string coercion | |
| if (str[i + 1] == '-') { | |
| merr_raise (INVEXPR); | |
| return (0); | |
| } | |
| if (!isdigit (str[i + 1])) { | |
| merr_raise (INVEXPR); | |
| return (0); | |
| } | |
| */ | |
| expflg = (-expflg); | expflg = (-expflg); |
| continue; | continue; |
| } | } |
| if (ch == PLUS) | if (ch == PLUS) { |
| /* TODO: revisit this; it breaks string coercion | |
| if (str[i + 1] == '+') { | |
| merr_raise (INVEXPR); | |
| return (0); | |
| } | |
| if (!isdigit (str[i + 1])) { | |
| merr_raise (INVEXPR); | |
| return (0); | |
| } | |
| */ | |
| continue; | continue; |
| } | |
| } | } |
| if ((result = unit (&str[i]))) | if ((result = unit (&str[i]))) |
| ch = str[i] = EOL; | ch = str[i] = EOL; |