nupa_substitute(), i ==> iptr - (const) s

This commit is contained in:
rlar 2016-05-15 20:12:30 +02:00
parent b832578f0e
commit b47123ac6a
1 changed files with 19 additions and 18 deletions

View File

@ -1194,7 +1194,7 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
bug: wont flag overflow!
*/
{
int i, level, nnest, ir = 0;
int level, nnest, ir = 0;
char c, d;
bool err = 0;
@ -1203,17 +1203,18 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
spice_dstring_init(&qstr);
spice_dstring_init(&tstr);
i = 0;
const char *iptr;
(iptr - s) = 0;
const char * const s_end = strchr(s, '\0');
const char *kptr;
while ((i < (s_end - s)) && !err) {
i++;
c = s[i - 1];
while (((iptr - s) < (s_end - s)) && !err) {
(iptr - s)++;
c = s[(iptr - s) - 1];
if (c == '{') {
/* try ps expression syntax */
kptr = s + i;
kptr = s + (iptr - s);
nnest = 1;
do
@ -1230,7 +1231,7 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
if (d == '\0') {
err = message(dico, "Closing \"}\" not found.\n");
} else {
pscopy(&tstr, s, i , (int) (kptr - s) - i - 1);
pscopy(&tstr, s, (int) (iptr - s) , (int) (kptr - s) - (int) (iptr - s) - 1);
/* exeption made for .meas */
if (strcasecmp(spice_dstring_value(&tstr), "LAST") == 0) {
spice_dstring_reinit(&qstr);
@ -1242,7 +1243,7 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
}
}
i = (int) (kptr - s);
(iptr - s) = (int) (kptr - s);
if (!err)
ir = insertnumber(dico, ir, r, &qstr);
else
@ -1251,16 +1252,16 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
} else if (c == Intro) {
/* skip "&&" which may occur in B source */
if ((i + 1 < (s_end - s)) && (s[i] == Intro)) {
i++;
if (((iptr - s) + 1 < (s_end - s)) && (s[(iptr - s)] == Intro)) {
(iptr - s)++;
continue;
}
i++;
while ((i < (s_end - s)) && (s[i - 1] <= ' '))
i++;
(iptr - s)++;
while (((iptr - s) < (s_end - s)) && (s[(iptr - s) - 1] <= ' '))
(iptr - s)++;
kptr = s + i;
kptr = s + (iptr - s);
if (s[(kptr - s) - 1] == '(') {
/* sub-formula */
@ -1284,12 +1285,12 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
if ((kptr - s) > (s_end - s)) {
err = message(dico, "Closing \")\" not found.\n");
} else {
pscopy(&tstr, s, i, (int) (kptr - s) - i - 1);
pscopy(&tstr, s, (int) (iptr - s), (int) (kptr - s) - (int) (iptr - s) - 1);
const char *xx = spice_dstring_value(&tstr);
err = evaluate_expr(dico, &qstr, xx, xx + strlen(xx));
}
i = (int) (kptr - s);
(iptr - s) = (int) (kptr - s);
} else {
/* simple identifier may also be string? */
@ -1304,10 +1305,10 @@ nupa_substitute(dico_t *dico, char * const s, char *r)
} while (((kptr - s) <= (s_end - s)) && (d > ' '));
pscopy(&tstr, s, i-1, (int) (kptr - s) - i);
pscopy(&tstr, s, (int) (iptr - s)-1, (int) (kptr - s) - (int) (iptr - s));
const char *xx = spice_dstring_value(&tstr);
err = evaluate_variable(dico, &qstr, xx, xx + strlen(xx));
i = (int) (kptr - s) - 1;
(iptr - s) = (int) (kptr - s) - 1;
}
if (!err)