diff options
author | andmarti1424 <andmarti@gmail.com> | 2015-08-31 17:00:50 -0300 |
---|---|---|
committer | andmarti1424 <andmarti@gmail.com> | 2015-08-31 17:00:50 -0300 |
commit | 0879b09992bf396d23a53890825876388917f705 (patch) | |
tree | 5c80a46d2f0b3bd3d5be314cd61f243392bb4adb | |
parent | 23ad871c81eda5dc7c7dbca4df449bb1d263d822 (diff) |
New functions in pipe
-rw-r--r-- | src/pipe.c | 98 | ||||
-rw-r--r-- | src/pipe.h | 5 |
2 files changed, 99 insertions, 4 deletions
@@ -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; } - @@ -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); |