home *** CD-ROM | disk | FTP | other *** search
- /*
- * lempic.c - PIC output processor
- *
- * copyright (c) by Alan W. Paeth, 1987. All rights reserved.
- */
-
- #include "lem.h"
-
- #define PTSSCALE 96.0
- #define PENSCALE 12 /* ln03 dimp troff drivers like 13 (!a common PntSz) */
-
- int curx, cury, curw, curh, ps, pemph;
-
- FILE *f;
-
- writepicint(fname)
- char *fname;
- {
- int i;
- f = (fname && (strlen(fname) > 1)) ? fopen(fname, "w") : 0;
- if (f)
- {
- curx = cury = curw = curh = ps = pemph= -1;
- fprintf(f, ".PS\n");
- forobjects
- {
- if (Odel) continue;
- switch (Otype)
- {
- case TEXT: ptext(i);
- at(Oxs, Oys);
- break;
- case LINE: thick(i);
- pline(i);
- em(i);
- from(Oxs, Oys);
- to(Oxe, Oye);
- break;
- case BOX: thick(i);
- fprintf(f, "box");
- em(i);
- at(Ox, Oy);
- size(Ow, Oh);
- break;
- case ELLI: thick(i);
- fprintf(f, "ellipse");
- em(i);
- at(Ox, Oy);
- size(Ow,Oh);
- break;
- }
- fprintf(f, ";\n");
- }
- fprintf(f, ".PE\n");
- fclose(f);
- msgpost("pic output done");
- }
- else msgpost("pic output failed");
- free(fname);
- }
-
-
- writepic()
- {
- char *fname;
- fname = prompt("pic file: ");
- writepicint(fname);
- free(fname);
- }
-
- thick(i)
- {
- if (ps != lemfont[Osizer].thick)
- {
- ps = lemfont[Osizer].thick;
- fprintf(f, ".ps %d\n", ps*PENSCALE);
- }
- }
-
- pt(x, y)
- {
- fprintf(f, " %.3fi,%.3fi", (float)(x)/PTSSCALE, (float)(y)/PTSSCALE);
- }
-
- at(x, y)
- {
- fprintf(f, " at");
- pt(x, y);
- }
-
- from(x, y)
- {
- if ((x == curx) && (y == cury)) return;
- fprintf(f, " from");
- pt(x, y);
- curx = x;
- cury = y;
- }
-
- to(x, y)
- {
- fprintf(f, " to");
- pt(x,y);
- curx = x;
- cury = y;
- }
-
- size(w, h)
- {
- w = ABS(w);
- h = ABS(h);
- if ((w == curw) && (h == curh)) fprintf(f, " same");
- else
- {
- fprintf(f, " wid %.3fi ht %.3fi",
- (float)(w)/PTSSCALE, (float)(h)/PTSSCALE);
- curw = w;
- curh = h;
- }
- }
-
- ptext(i)
- {
- int fontflag;
- char *ft;
- fontflag = ((Oemph != pemph) || (lemfont[Osizer].psize != ps));
- pemph = Oemph;
- ps = lemfont[Osizer].psize;
- fprintf(f, "\"");
- if (fontflag)
- {
- switch(Oemph)
- {
- case EMPHNONE: ft = lemfont[Osizer].tyr; break;
- case EMPHBOLD: ft = lemfont[Osizer].tyb; break;
- case EMPHITAL: ft = lemfont[Osizer].tyi; break;
- }
- fprintf(f, "\\f%s%s", strlen(ft) > 1 ? "(" : "", ft );
- }
- fprintf(f, "\\s%d%s\"",lemfont[Osizer].psize, Otext);
- switch(Oalign)
- {
- case ALIGNLEFT: fprintf(f, " ljust"); break;
- case ALIGNRGHT: fprintf(f, " rjust"); break;
- case ALIGNCENT:
- default: break;
- }
- }
-
- pline(i)
- {
- fprintf(f, "line");
- switch(Oalign)
- {
- case ALIGNLEFT: fprintf(f, " <-"); break;
- case ALIGNRGHT: fprintf(f, " ->"); break;
- case ALIGNCENT:
- default: break;
- }
- }
-
- em(i)
- {
- switch(Oemph)
- {
- case EMPHBOLD: fprintf(f, " dashed"); break;
- case EMPHITAL: fprintf(f, " dotted"); break;
- case EMPHNONE:
- default: break;
- }
- }
-