- return str->str_cur ? str->str_ptr : Nullch;
-}
-
-void
-str_inc(register STR *str)
-{
- register char *d;
-
- if (!str)
- return;
- if (str->str_nok) {
- str->str_nval += 1.0;
- str->str_pok = 0;
- return;
- }
- if (!str->str_pok) {
- str->str_nval = 1.0;
- str->str_nok = 1;
- return;
- }
- for (d = str->str_ptr; *d && *d != '.'; d++) ;
- d--;
- if (!isDIGIT(*str->str_ptr) || !isDIGIT(*d) ) {
- str_numset(str,atof(str->str_ptr) + 1.0); /* punt */
- return;
- }
- while (d >= str->str_ptr) {
- if (++*d <= '9')
- return;
- *(d--) = '0';
- }
- /* oh,oh, the number grew */
- GROWSTR(&(str->str_ptr), &(str->str_len), str->str_cur + 2);
- str->str_cur++;
- for (d = str->str_ptr + str->str_cur; d > str->str_ptr; d--)
- *d = d[-1];
- *d = '1';
-}
-
-void
-str_dec(register STR *str)
-{
- register char *d;
-
- if (!str)
- return;
- if (str->str_nok) {
- str->str_nval -= 1.0;
- str->str_pok = 0;
- return;
- }
- if (!str->str_pok) {
- str->str_nval = -1.0;
- str->str_nok = 1;
- return;
- }
- for (d = str->str_ptr; *d && *d != '.'; d++) ;
- d--;
- if (!isDIGIT(*str->str_ptr) || !isDIGIT(*d) || (*d == '0' && d == str->str_ptr)) {
- str_numset(str,atof(str->str_ptr) - 1.0); /* punt */
- return;
- }
- while (d >= str->str_ptr) {
- if (--*d >= '0')
- return;
- *(d--) = '9';
- }
-}
-
-/* make a string that will exist for the duration of the expression eval */
-
-STR *
-str_mortal(STR *oldstr)
-{
- register STR *str = str_new(0);
- static long tmps_size = -1;
-
- str_sset(str,oldstr);
- if (++tmps_max > tmps_size) {
- tmps_size = tmps_max;
- if (!(tmps_size & 127)) {
- if (tmps_size)
- tmps_list = (STR**)saferealloc((char*)tmps_list,
- (tmps_size + 128) * sizeof(STR*) );
- else
- tmps_list = (STR**)safemalloc(128 * sizeof(char*));
- }
- }
- tmps_list[tmps_max] = str;
- return str;