summaryrefslogtreecommitdiffstats
path: root/src/pipe.c
diff options
context:
space:
mode:
authormongo <mongo@iomega>2016-04-15 16:20:17 -0300
committermongo <mongo@iomega>2016-04-15 16:20:17 -0300
commitf686ba184e0af3fd37aa8a743631a7a376f30843 (patch)
treee9a48dc691511a2961f93163944ba0ca1a84e5b3 /src/pipe.c
parentc0a088d7a4bc61e6e69fa5bd8964c39f68507c71 (diff)
Renamed src.scim2 to src
Diffstat (limited to 'src/pipe.c')
-rwxr-xr-xsrc/pipe.c137
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;
+}