diff options
Diffstat (limited to 'src/PostscriptDSC.cxx')
-rw-r--r-- | src/PostscriptDSC.cxx | 304 |
1 files changed, 152 insertions, 152 deletions
diff --git a/src/PostscriptDSC.cxx b/src/PostscriptDSC.cxx index 241dade..99354e7 100644 --- a/src/PostscriptDSC.cxx +++ b/src/PostscriptDSC.cxx @@ -11,189 +11,189 @@ #include "PostscriptDSC.H" PostscriptDSC::PostscriptDSC() { - bb_x = 0; - bb_y = 0; - bb_w = 594; // A4 - bb_h = 841; // - setup_len = 0; - pages = 0; - page_off = NULL; - page_len = NULL; + bb_x = 0; + bb_y = 0; + bb_w = 594; // A4 + bb_h = 841; // + setup_len = 0; + pages = 0; + page_off = NULL; + page_len = NULL; } PostscriptDSC::~PostscriptDSC() { - if (page_off) { - free(page_off); - } - if (page_len) { - free(page_len); - } + if (page_off) { + free(page_off); + } + if (page_len) { + free(page_len); + } } int PostscriptDSC::parse(int fd) { - FILE *fp; - char linebuf[1024]; - int x, y, w, h; - int p1 = 0, ps; - int i = 0; - int bb_read = 0; - int max_pages = 128; - - bb_x = 0; - bb_y = 0; - bb_w = 594; // A4 - bb_h = 841; // - setup_len = 0; - pages = 0; - - if (page_off) { - free(page_off); - page_off = NULL; - } - if(page_len) { - free(page_len); - page_len = NULL; - } - - fp = fdopen(fd, "r"); - if (!fp) { - perror("fdopen"); - return 1; - } - - page_off = (size_t*) malloc(sizeof(size_t) * max_pages); - memset(page_off, 0, sizeof(size_t) * max_pages); - page_len = (size_t*) malloc(sizeof(size_t) * max_pages); - memset(page_len, 0, sizeof(size_t) * max_pages); - - while (fgets(linebuf, sizeof(linebuf), fp) != NULL) { - if (!bb_read && - sscanf(linebuf, "%%%%BoundingBox: %d %d %d %d", &x, &y, &w, &h) == 4) { - bb_x = x; - bb_y = y; - bb_w = w; - bb_h = h; - bb_read++; - } else if (setup_len == 0 && - strncmp(linebuf, "%%EndSetup", strlen("%%EndSetup")) == 0) { - setup_len = ftell(fp); - } else if (strncmp(linebuf, "%%Page: ", strlen("%%Page: ")) == 0) { - char *p_str = &linebuf[strlen(linebuf)]; - - // implicitely end setup section - if (!setup_len) { - setup_len = ftell(fp); - } - - // move p_str back to beginning of last number in linebuf - while (p_str > linebuf && !isdigit(*p_str)) { - p_str--; - } - while (p_str > linebuf && isdigit(*p_str)) { - p_str--; - } - - p1 = atoi(p_str); - - if (p1 < 1) { - fprintf(stderr, "Page %d out of range\n", p1); - return 1; - } - - if (p1 > max_pages) { - page_off = (size_t*) realloc(page_off, 2 * max_pages * sizeof(size_t)); - memset(page_off + max_pages, 0, sizeof(size_t) * max_pages); - page_len = (size_t*) realloc(page_len, 2 * max_pages * sizeof(size_t)); - memset(page_len + max_pages, 0, sizeof(size_t) * max_pages); - max_pages = max_pages * 2; - } - - if (page_off[p1 - 1] != 0) { - fprintf(stderr, "Page %d already defined\n", p1); - return 1; - } - if (p1 > 1 && page_off[p1 - 2] == 0) { - fprintf(stderr, "Page %d not yet defined\n", p1 - 1); - return 1; - } - - page_off[p1 - 1] = ftell(fp); - if (p1 > 1) { - page_len[p1 - 2] = page_off[p1 - 1] - page_off[p1 - 2]; - } - - if (p1 > pages) { - pages = p1; - } - } - } - - // Now do some checks - if (!setup_len) { - fprintf(stderr, "PageSetup end not found\n"); - return 1; - } - if (page_len && page_off && p1 > 0 && p1 <= pages) { - page_len[p1 - 1] = ftell(fp) - page_off[p1 - 1]; - - for (int i=0; i<pages; i++) { - if (page_off[i] == 0 || page_len[i] == 0) { - fprintf(stderr, "Page %d not defined\n", i); - return 1; - } - } - } else { - return 1; - } - - return 0; + FILE *fp; + char linebuf[1024]; + int x, y, w, h; + int p1 = 0, ps; + int i = 0; + int bb_read = 0; + int max_pages = 128; + + bb_x = 0; + bb_y = 0; + bb_w = 594; // A4 + bb_h = 841; // + setup_len = 0; + pages = 0; + + if (page_off) { + free(page_off); + page_off = NULL; + } + if(page_len) { + free(page_len); + page_len = NULL; + } + + fp = fdopen(fd, "r"); + if (!fp) { + perror("fdopen"); + return 1; + } + + page_off = (size_t*) malloc(sizeof(size_t) * max_pages); + memset(page_off, 0, sizeof(size_t) * max_pages); + page_len = (size_t*) malloc(sizeof(size_t) * max_pages); + memset(page_len, 0, sizeof(size_t) * max_pages); + + while (fgets(linebuf, sizeof(linebuf), fp) != NULL) { + if (!bb_read && + sscanf(linebuf, "%%%%BoundingBox: %d %d %d %d", &x, &y, &w, &h) == 4) { + bb_x = x; + bb_y = y; + bb_w = w; + bb_h = h; + bb_read++; + } else if (setup_len == 0 && + strncmp(linebuf, "%%EndSetup", strlen("%%EndSetup")) == 0) { + setup_len = ftell(fp); + } else if (strncmp(linebuf, "%%Page: ", strlen("%%Page: ")) == 0) { + char *p_str = &linebuf[strlen(linebuf)]; + + // implicitely end setup section + if (!setup_len) { + setup_len = ftell(fp); + } + + // move p_str back to beginning of last number in linebuf + while (p_str > linebuf && !isdigit(*p_str)) { + p_str--; + } + while (p_str > linebuf && isdigit(*p_str)) { + p_str--; + } + + p1 = atoi(p_str); + + if (p1 < 1) { + fprintf(stderr, "Page %d out of range\n", p1); + return 1; + } + + if (p1 > max_pages) { + page_off = (size_t*) realloc(page_off, 2 * max_pages * sizeof(size_t)); + memset(page_off + max_pages, 0, sizeof(size_t) * max_pages); + page_len = (size_t*) realloc(page_len, 2 * max_pages * sizeof(size_t)); + memset(page_len + max_pages, 0, sizeof(size_t) * max_pages); + max_pages = max_pages * 2; + } + + if (page_off[p1 - 1] != 0) { + fprintf(stderr, "Page %d already defined\n", p1); + return 1; + } + if (p1 > 1 && page_off[p1 - 2] == 0) { + fprintf(stderr, "Page %d not yet defined\n", p1 - 1); + return 1; + } + + page_off[p1 - 1] = ftell(fp); + if (p1 > 1) { + page_len[p1 - 2] = page_off[p1 - 1] - page_off[p1 - 2]; + } + + if (p1 > pages) { + pages = p1; + } + } + } + + // Now do some checks + if (!setup_len) { + fprintf(stderr, "PageSetup end not found\n"); + return 1; + } + if (page_len && page_off && p1 > 0 && p1 <= pages) { + page_len[p1 - 1] = ftell(fp) - page_off[p1 - 1]; + + for (int i=0; i<pages; i++) { + if (page_off[i] == 0 || page_len[i] == 0) { + fprintf(stderr, "Page %d not defined\n", i); + return 1; + } + } + } else { + return 1; + } + + return 0; } void PostscriptDSC::get_bounding_box(int *x, int *y, int *w, int *h) { - *x = bb_x; - *y = bb_y; - *w = bb_w; - *h = bb_h; + *x = bb_x; + *y = bb_y; + *w = bb_w; + *h = bb_h; } int PostscriptDSC::get_pages() { - return pages; + return pages; } size_t PostscriptDSC::get_setup_len() { - return setup_len; + return setup_len; } size_t PostscriptDSC::get_page_off(int p) { - if (p < 1 || p > pages) { - return 0; - } else { - return page_off[p - 1]; - } + if (p < 1 || p > pages) { + return 0; + } else { + return page_off[p - 1]; + } } size_t PostscriptDSC::get_page_len(int p) { - if (p < 1 || p > pages) { - return 0; - } else { - return page_len[p - 1]; - } + if (p < 1 || p > pages) { + return 0; + } else { + return page_len[p - 1]; + } } void PostscriptDSC::print() { - int i; + int i; - printf("x %d, y %d, w %d, h %d\n", bb_x, bb_y, bb_w, bb_h); - printf("setup_len %d\n", setup_len); - for (i=0; i<pages; i++) { - printf("p %d, off %d, len %d\n", i, page_off[i], page_len[i]); - } + printf("x %d, y %d, w %d, h %d\n", bb_x, bb_y, bb_w, bb_h); + printf("setup_len %d\n", setup_len); + for (i=0; i<pages; i++) { + printf("p %d, off %d, len %d\n", i, page_off[i], page_len[i]); + } } |