From 0879b09992bf396d23a53890825876388917f705 Mon Sep 17 00:00:00 2001 From: andmarti1424 Date: Mon, 31 Aug 2015 17:00:50 -0300 Subject: New functions in pipe --- src/pipe.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/pipe.h | 5 +++- 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 - +*/ + #include #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); -- cgit v1.2.3