summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandmarti1424 <andmarti@gmail.com>2015-08-31 17:00:50 -0300
committerandmarti1424 <andmarti@gmail.com>2015-08-31 17:00:50 -0300
commit0879b09992bf396d23a53890825876388917f705 (patch)
tree5c80a46d2f0b3bd3d5be314cd61f243392bb4adb
parent23ad871c81eda5dc7c7dbca4df449bb1d263d822 (diff)
New functions in pipe
-rw-r--r--src/pipe.c98
-rw-r--r--src/pipe.h5
2 files changed, 99 insertions, 4 deletions
diff --git a/src/pipe.c b/src/pipe.c
index ae86129..00ec8a4 100644
--- a/src/pipe.c
+++ b/src/pipe.c
@@ -1,9 +1,13 @@
+/*
+Adaptation of Chuck Martin's code - <nrocinu@myrealbox.com>
+*/
+
#include <unistd.h>
#include "sc.h"
#include "conf.h"
#include "main.h"
-// FIXME pass fd is not neccesary?
+// FIXME - pass fd is not neccesary?
void getnum(int r0, int c0, int rn, int cn, FILE * fd) {
struct ent ** pp;
struct ent * p;
@@ -29,16 +33,104 @@ void getnum(int r0, int c0, int rn, int cn, FILE * fd) {
//if (get_conf_value("output") != NULL && fd != NULL)
// fprintf(fd, "%s\n", line);
//else
- scdebug("resultado: %s", line);
//fwrite(fd, line, strlen(line));
+ scdebug("%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));
+ scdebug("%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));
+
+ scdebug("%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));
+
+ scdebug("%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));
+
+ scdebug("%s", line);
+ if (brokenpipe) {
+ linelim = -1;
+ return;
+ }
}
}
linelim = -1;
}
-
diff --git a/src/pipe.h b/src/pipe.h
index 5a471a1..9a44787 100644
--- a/src/pipe.h
+++ b/src/pipe.h
@@ -1,2 +1,5 @@
void getnum(int r0, int c0, int rn, int cn, FILE * fd);
-
+void getformat(int col, FILE * fd);
+void getfmt(int r0, int c0, int rn, int cn, FILE * fd);
+void getstring(int r0, int c0, int rn, int cn, FILE * fd);
+void getexp(int r0, int c0, int rn, int cn, FILE * fd);