aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authorjohn haque <j.eh@mchsi.com>2012-02-16 15:44:26 -0600
committerjohn haque <j.eh@mchsi.com>2012-02-16 15:44:26 -0600
commit0221eb79f43f4ef5c8d74759679a501607936d19 (patch)
tree05bad5469dfeba414838280cb86332b8fa853be7 /io.c
parent06a6f16495e2a3d0cb664fc473107d3cdbe6f11e (diff)
downloadegawk-0221eb79f43f4ef5c8d74759679a501607936d19.tar.gz
egawk-0221eb79f43f4ef5c8d74759679a501607936d19.tar.bz2
egawk-0221eb79f43f4ef5c8d74759679a501607936d19.zip
New interpreter routine for MPFR.
Diffstat (limited to 'io.c')
-rw-r--r--io.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/io.c b/io.c
index 3eaceb88..66847e5c 100644
--- a/io.c
+++ b/io.c
@@ -233,7 +233,6 @@ extern NODE *ARGIND_node;
extern NODE *ERRNO_node;
extern NODE **fields_arr;
-/* init_io --- set up timeout related variables */
void
init_io()
@@ -391,6 +390,10 @@ nextfile(IOBUF **curfile, int skipping)
/* This is a kludge. */
unref(FILENAME_node->var_value);
FILENAME_node->var_value = dupnode(arg);
+#ifdef HAVE_MPFR
+ if (FNR_node->var_value->flags & MPFN)
+ mpfr_set_d(MFNR, 0.0, RND_MODE);
+#endif
FNR = 0;
iop = *curfile = iop_alloc(fd, fname, &mybuf, FALSE);
if (fd == INVALID_HANDLE)
@@ -437,7 +440,12 @@ void
set_FNR()
{
(void) force_number(FNR_node->var_value);
- FNR = get_number_si(FNR_node->var_value);
+#ifdef HAVE_MPFR
+ if ((FNR_node->var_value->flags & MPFN) != 0)
+ FNR = mpfr_set_var(FNR_node);
+ else
+#endif
+ FNR = FNR_node->var_value->numbr;
}
/* set_NR --- update internal NR from awk variable */
@@ -446,7 +454,12 @@ void
set_NR()
{
(void) force_number(NR_node->var_value);
- NR = get_number_si(NR_node->var_value);
+#ifdef HAVE_MPFR
+ if ((NR_node->var_value->flags & MPFN) != 0)
+ NR = mpfr_set_var(NR_node);
+ else
+#endif
+ NR = NR_node->var_value->numbr;
}
/* inrec --- This reads in a record from the input file */
@@ -470,8 +483,8 @@ inrec(IOBUF *iop, int *errcode)
if (*errcode > 0)
update_ERRNO_saved(*errcode);
} else {
- NR += 1;
- FNR += 1;
+ INCREMNT(NR);
+ INCREMNT(FNR);
set_record(begin, cnt);
}
@@ -2302,8 +2315,8 @@ do_getline(int intovar, IOBUF *iop)
if (cnt == EOF)
return NULL; /* try next file */
- NR++;
- FNR++;
+ INCREMNT(NR);
+ INCREMNT(FNR);
if (! intovar) /* no optional var. */
set_record(s, cnt);
@@ -3256,7 +3269,7 @@ pty_vs_pipe(const char *command)
if (val->flags & MAYBE_NUM)
(void) force_number(val);
if (val->flags & NUMBER)
- return (val->numbr != 0.0);
+ return is_nonzero_num(val);
else
return (val->stlen != 0);
}
@@ -3389,8 +3402,10 @@ get_read_timeout(IOBUF *iop)
} else /* use cached full index */
val = in_array(PROCINFO_node, full_idx);
- if (val != NULL)
- tmout = (long) force_number(val);
+ if (val != NULL) {
+ (void) force_number(val);
+ tmout = get_number_si(val);
+ }
} else
tmout = read_default_timeout; /* initialized from env. variable in init_io() */