This is gnuplot.c in view mode; [Download] [Up]
#include "incl.h" extern FILE *fpo, *fpi; extern char buffer[]; extern int inlinecount, outlinecount; extern double llx, lly, urx, ury; extern double scx, scy, defaultwidth; gnuplot () { char str1[MAXWORD+1]; char str2[MAXWORD+1]; char str3[MAXWORD+1]; int landscape, n; double tmp; /* ** Scan file for statement "90 rotate". ** When found the 'landscape' option was used. */ landscape = FALSE; for (fgets (buffer, MAXBUF, fpi); (!(feof (fpi))); fgets (buffer, MAXBUF, fpi)) { n = sscanf (buffer, "%s%s%s", str1, str2, str3); if (n == 2 && strcmp (str2, ROTATE) == 0) { landscape = TRUE; break; } } rewind (fpi); /* ** Replace first line */ fgets (buffer, MAXBUF, fpi); inlinecount++; fprintf (fpo, "%s", FIRSTLINE); /* ** For GNUPLOT 3.0 the boundingbox statement always looks like: ** ** %%BoundingBox: 50 50 urx ury ** ** Scan file for BoundingBox statement. ** - Subtract 50 from boundingbox values to correct for the elimination ** of statement: "50 50 translate". ** - If landscape = TRUE then ** Swap x and y values to correct for the elimination of statement: *** "90 rotate". ** - Calculate initial scaling factors for default width MAX_WIDTH. ** - Change boundingbox values to correct for the initial scaling. */ for (fgets (buffer, MAXBUF, fpi); (!(feof (fpi))); fgets (buffer, MAXBUF, fpi)) { inlinecount++; sscanf (buffer, "%s", str1); if (strcmp (str1, PPBOUNDINGBOXC) == 0) { sscanf (buffer, "%*s%lf%lf%lf%lf", &llx, &lly, &urx, &ury); llx -= 50; lly -= 50; urx -= 50; ury -= 50; if (landscape) { tmp = llx; llx = lly; lly = tmp; tmp = urx; urx = ury; ury = tmp; } tmp = defaultwidth / (urx - llx); scx = tmp; scy = tmp; llx *= scx; lly *= scy; urx *= scx; ury *= scy; break; } else { fprintf (fpo, "%s", buffer); outlinecount++; } } /* ** Adjust BoundingBox and scale values depending on width (-w) ** height (-h) and space (-s) options. */ if (adj_bbox (urx - llx) == EXIT_FAILURE) return (EXIT_FAILURE); fprintf (fpo, "%s %d %d %d %d\n", PPBOUNDINGBOXC, (int)llx, (int)lly, (int)urx, (int)ury); outlinecount++; /* ** Scan rest of file. ** Delete statements: ** 50 50 translate ** 90 rotate (only present when 'landscape' option was used) ** 0 -5040 translate (only present when 'landscape' option was used) ** Edit statement: ** 0.100 0.100 scale */ for (fgets (buffer, MAXBUF, fpi); (!(feof (fpi))); fgets (buffer, MAXBUF, fpi)) { inlinecount++; n = sscanf (buffer, "%s%s%s", str1, str2, str3); if (strcmp (str1, PPENDCOMMENTS) == 0) { fprintf (fpo, "%s", buffer); /* ** Insert next statement for use with program ``dvialw'' */ fprintf (fpo, "%s", DVIALW_BEGIN); outlinecount += 2; } else if (n == 3 && strcmp (str3, TRANSLATE) == 0) { if (strcmp (str1, CURRENTPOINT) == 0) { fprintf (fpo, "%s", buffer); outlinecount++; } else continue; } else if (n == 3 && strcmp (str3, SCALE) == 0) { scx *= atof (str1); scy *= atof (str2); fprintf (fpo, "%.3lf %.3lf %s\n", scx, scy, SCALE); outlinecount++; } else if (landscape && n == 2 && strcmp (str2, ROTATE) == 0) { continue; } else if (strcmp (str1, SHOWPAGE) == 0) { /* ** Insert next statement for use with program ``dvialw'' */ fprintf (fpo, "%s", DVIALW_END); fprintf (fpo, "%s", buffer); outlinecount += 2; } else { fprintf (fpo, "%s", buffer); outlinecount++; } } return (EXIT_SUCCESS); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.