home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume10 / lemming / part02 / lempic.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-08-05  |  2.9 KB  |  172 lines

  1. /*
  2.  * lempic.c - PIC output processor
  3.  *
  4.  * copyright (c) by Alan W. Paeth, 1987. All rights reserved.
  5.  */
  6.  
  7. #include "lem.h"
  8.  
  9. #define PTSSCALE 96.0
  10. #define PENSCALE 12    /* ln03 dimp troff drivers like 13 (!a common PntSz) */
  11.  
  12. int curx, cury, curw, curh, ps, pemph;
  13.  
  14. FILE *f;
  15.  
  16. writepicint(fname)
  17.     char *fname;
  18.     {
  19.     int i;
  20.     f = (fname && (strlen(fname) > 1)) ? fopen(fname, "w") : 0;
  21.     if (f)
  22.     {
  23.     curx = cury = curw = curh = ps = pemph= -1;
  24.     fprintf(f, ".PS\n");
  25.     forobjects
  26.         {
  27.         if (Odel) continue;
  28.         switch (Otype)
  29.         {
  30.         case TEXT:    ptext(i);
  31.                 at(Oxs, Oys);
  32.                 break;
  33.         case LINE:    thick(i);
  34.                 pline(i);
  35.                 em(i);
  36.                 from(Oxs, Oys);
  37.                 to(Oxe, Oye);
  38.                 break;
  39.         case BOX:    thick(i);
  40.                 fprintf(f, "box");
  41.                 em(i);
  42.                 at(Ox, Oy);
  43.                 size(Ow, Oh);
  44.                 break;
  45.         case ELLI:    thick(i);
  46.                 fprintf(f, "ellipse");
  47.                 em(i);
  48.                 at(Ox, Oy);
  49.                 size(Ow,Oh);
  50.                 break;
  51.         }
  52.         fprintf(f, ";\n");
  53.         }
  54.     fprintf(f, ".PE\n");
  55.     fclose(f);
  56.     msgpost("pic output done");
  57.     }
  58.     else msgpost("pic output failed");
  59.     free(fname);
  60.     }
  61.  
  62.  
  63. writepic()
  64.     {
  65.     char *fname;
  66.     fname = prompt("pic file: ");
  67.     writepicint(fname);
  68.     free(fname);
  69.     }
  70.  
  71. thick(i)
  72.     {
  73.     if (ps != lemfont[Osizer].thick)
  74.     {
  75.     ps = lemfont[Osizer].thick;
  76.     fprintf(f, ".ps %d\n", ps*PENSCALE);
  77.     }
  78.     }
  79.  
  80. pt(x, y)
  81.     {
  82.     fprintf(f, " %.3fi,%.3fi", (float)(x)/PTSSCALE, (float)(y)/PTSSCALE);
  83.     }
  84.  
  85. at(x, y)
  86.     {
  87.     fprintf(f, " at");
  88.     pt(x, y);
  89.     }
  90.  
  91. from(x, y)
  92.     {
  93.     if ((x == curx) && (y == cury)) return;
  94.     fprintf(f, " from");
  95.     pt(x, y);
  96.     curx = x;
  97.     cury = y;
  98.     }
  99.  
  100. to(x, y)
  101.     {
  102.     fprintf(f, " to");
  103.     pt(x,y);
  104.     curx = x;
  105.     cury = y;
  106.     }
  107.  
  108. size(w, h)
  109.     {
  110.     w = ABS(w);
  111.     h = ABS(h);
  112.     if ((w == curw) && (h == curh)) fprintf(f, " same");
  113.     else
  114.     {
  115.     fprintf(f, " wid %.3fi ht %.3fi",
  116.         (float)(w)/PTSSCALE, (float)(h)/PTSSCALE);
  117.     curw = w;
  118.     curh = h;
  119.     }
  120.     }
  121.  
  122. ptext(i)
  123.     {
  124.     int fontflag;
  125.     char *ft;
  126.     fontflag = ((Oemph != pemph) || (lemfont[Osizer].psize != ps));
  127.     pemph = Oemph;
  128.     ps = lemfont[Osizer].psize;
  129.     fprintf(f, "\"");
  130.     if (fontflag)
  131.     {
  132.     switch(Oemph)
  133.         {
  134.         case EMPHNONE: ft = lemfont[Osizer].tyr; break;
  135.         case EMPHBOLD: ft = lemfont[Osizer].tyb; break;
  136.         case EMPHITAL: ft = lemfont[Osizer].tyi; break;
  137.         }
  138.     fprintf(f, "\\f%s%s", strlen(ft) > 1 ? "(" : "", ft );
  139.     }
  140.     fprintf(f, "\\s%d%s\"",lemfont[Osizer].psize, Otext);
  141.     switch(Oalign)
  142.     {
  143.     case ALIGNLEFT:    fprintf(f, " ljust"); break;
  144.     case ALIGNRGHT:    fprintf(f, " rjust"); break;
  145.     case ALIGNCENT:
  146.     default:    break;
  147.     }
  148.     }
  149.  
  150. pline(i)
  151.     {
  152.     fprintf(f, "line");
  153.     switch(Oalign)
  154.     {
  155.     case ALIGNLEFT: fprintf(f, " <-"); break;
  156.     case ALIGNRGHT: fprintf(f, " ->"); break;
  157.     case ALIGNCENT:
  158.     default:    break;
  159.     }
  160.     }
  161.  
  162. em(i)
  163.     {
  164.     switch(Oemph)
  165.     {
  166.     case EMPHBOLD: fprintf(f, " dashed"); break;
  167.     case EMPHITAL: fprintf(f, " dotted"); break;
  168.     case EMPHNONE:
  169.     default:  break;
  170.     }
  171.     }
  172.