diff options
author | mongo <mongo@iomega> | 2016-04-15 16:20:17 -0300 |
---|---|---|
committer | mongo <mongo@iomega> | 2016-04-15 16:20:17 -0300 |
commit | f686ba184e0af3fd37aa8a743631a7a376f30843 (patch) | |
tree | e9a48dc691511a2961f93163944ba0ca1a84e5b3 /src/pipe.c | |
parent | c0a088d7a4bc61e6e69fa5bd8964c39f68507c71 (diff) |
Renamed src.scim2 to src
Diffstat (limited to 'src/pipe.c')
-rwxr-xr-x | src/pipe.c | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/pipe.c b/src/pipe.c new file mode 100755 index 0000000..0d16486 --- /dev/null +++ b/src/pipe.c @@ -0,0 +1,137 @@ +/* +Adaptation of Chuck Martin's code - <nrocinu@myrealbox.com> +*/ + +#include <unistd.h> +#include "sc.h" +#include "conf.h" +#include "main.h" +#include "interp.h" + +// FIXME - pass fd is not neccesary? +void getnum(int r0, int c0, int rn, int cn, FILE * fd) { + struct ent ** pp; + struct ent * p; + int r, c; + + for (r = r0; r <= rn; r++) { + for (c = c0, pp = ATBL(tbl, r, c); c <= cn; pp++, c++) { + *line = '\0'; + p = *pp; + if (p) { + if (p->cellerror) { + sprintf(line, "%s", (*pp)->cellerror == CELLERROR ? "ERROR" : "INVALID"); + } else if (p->flags & is_valid) { + sprintf(line, "%.15g", p->v); + } + } + /*if (c < cn) { + strcat(line, "\t"); + } else { + strcat(line, "\n"); + }*/ + + //if (get_conf_value("output") != NULL && fd != NULL) + // fprintf(fd, "%s\n", line); + //else + + //fwrite(fd, line, strlen(line)); + sc_debug("%s", line); + if (brokenpipe) { + linelim = -1; + return; + } + + } + } + linelim = -1; +} + +void getformat(int col, FILE * fd) { + sprintf(line, "%d %d %d\n", fwidth[col], precision[col], realfmt[col]); + //write(fd, line, strlen(line)); + sc_debug("%s", line); + linelim = -1; +} + +void getfmt(int r0, int c0, int rn, int cn, FILE * fd) { + struct ent **pp; + int r, c; + + for (r = r0; r <= rn; r++) { + for (c = c0, pp = ATBL(tbl, r, c); c <= cn; pp++, c++) { + *line = '\0'; + if (*pp && (*pp)->format) sprintf(line, "%s", (*pp)->format); + + //if (c < cn) + // strcat(line, "\t"); + //else + // strcat(line, "\n"); + //write(fd, line, strlen(line)); + + sc_debug("%s", line); + if (brokenpipe) { + linelim = -1; + return; + } + } + } + linelim = -1; +} + +void getstring(int r0, int c0, int rn, int cn, FILE * fd) { + struct ent **pp; + int r, c; + + for (r = r0; r <= rn; r++) { + for (c = c0, pp = ATBL(tbl, r, c); c <= cn; pp++, c++) { + *line = '\0'; + if (*pp && (*pp)->label) + sprintf(line, "%s", (*pp)->label); + //if (c < cn) + // strcat(line, "\t"); + //else + // strcat(line, "\n"); + //write(fd, line, strlen(line)); + + sc_debug("%s", line); + if (brokenpipe) { + linelim = -1; + return; + } + } + } + linelim = -1; +} + +void getexp(int r0, int c0, int rn, int cn, FILE * fd) { + struct ent **pp; + struct ent *p; + int r, c; + + for (r = r0; r <= rn; r++) { + for (c = c0, pp = ATBL(tbl, r, c); c <= cn; pp++, c++) { + *line = '\0'; + p = *pp; + if (p && p->expr) { + linelim = 0; + decompile(p->expr, 0); /* set line to expr */ + line[linelim] = '\0'; + if (*line == '?') + *line = '\0'; + } + //if (c < cn) + // strcat(line, "\t"); + //else + // strcat(line, "\n"); + //write(fd, line, strlen(line)); + + sc_debug("%s", line); + if (brokenpipe) { + linelim = -1; + return; + } + } + } + linelim = -1; +} |