URI:
       tpltex.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tpltex.c (3446B)
       ---
            1 /* replacement for pltroff.c to produce a TeX file that makes a box */
            2 
            3 #include <stdio.h>
            4 #include <math.h>
            5 #include "pic.h"
            6 
            7 double rangex, rangey;  /* probably already available inside pic somewhere */
            8 extern int dbg;
            9 int frameno;
           10 
           11 /*-----------copied from old version----------*/
           12 
           13 void
           14 arrow(double x0, double y0, double x1, double y1, double w, double h, double ang, int nhead)         /* draw arrow (without shaft) */
           15         /* head wid w, len h, rotated ang */
           16         /* and drawn with nhead lines */
           17 {
           18         double alpha, rot, drot, hyp;
           19         float dx, dy;
           20         int i;
           21 
           22         rot = atan2(w / 2, h);
           23         hyp = sqrt(w/2 * w/2 + h * h);
           24         alpha = atan2(y1-y0, x1-x0) + ang;
           25         if (nhead < 2)
           26                 nhead = 2;
           27         for (i = nhead-1; i >= 0; i--) {
           28                 drot = 2 * rot / (double) (nhead-1) * (double) i;
           29                 dx = hyp * cos(alpha + PI - rot + drot);
           30                 dy = hyp * sin(alpha + PI - rot + drot);
           31                 line(x1+dx, y1+dy, x1, y1);
           32         }
           33 }
           34 
           35 
           36 /*-----------new code----------*/
           37 
           38 void
           39 printlf(int line, char *name)
           40 {
           41 }
           42 
           43 void
           44 fillstart(double v)        /* only choose black, light grey (.75), or white, for now */
           45 {
           46         if (v<.05)
           47                 fprintf(TEXFILE, "    \\special{bk}%%\n");
           48         else if (v>.95)
           49                 fprintf(TEXFILE, "    \\special{wh}%%\n");
           50         else
           51                 fprintf(TEXFILE, "    \\special{sh}%%\n");
           52 }
           53 
           54 void
           55 fillend(void)
           56 {
           57 }
           58 
           59 void
           60 troff(char *s)
           61 {
           62         int size;
           63 
           64         if (strncmp(s, ".ps", 3) == 0) {
           65             if (sscanf(&s[3], " %d ", &size) > 0) {
           66                 fprintf(TEXFILE, "    \\special{pn %d}%%\n", size);
           67                 e1->pdiam = size;
           68             } else fprintf(stderr, "Malformed .ps command: %s\n", s);
           69         }
           70 }
           71 
           72 
           73 void
           74 space(double x0, double y0, double x1, double y1)        /* set limits of page */
           75 {
           76         e0->sidex = e1->sidex = deltx*1000;
           77         e0->sidey = e1->sidey = e0->bottom = e1->bottom = delty*1000;
           78         range(x0, y0, x1, y1);
           79 }
           80 
           81 void
           82 dot(void)
           83 {
           84         /* use .005" radius at nominal 9pt pen size */
           85         disc(e1->copyx,e1->copyy,(e1->pdiam/9.0)*(4.3/e1->scalex));
           86 }
           87 
           88 void
           89 label(char *s, int t, int nh)        /* text s of type t nh half-lines up */
           90 {
           91         double nem;
           92 
           93         if (t & ABOVE)
           94                 nh++;
           95         else if (t & BELOW)
           96                 nh--;
           97         nem = .2 - nh*.6;
           98         fprintf(TEXFILE,"    \\rlap{\\kern %6.3fin\\lower%6.3fin\\hbox{\\lower%5.2fem\\hbox to 0pt{",
           99                         INCHES(DTRX(e1->copyx)), INCHES(DTRY(e1->copyy)), nem);
          100         fprintf(TEXFILE,t&LJUST?"%s\\hss":(t&RJUST?"\\hss %s":"\\hss %s\\hss"),s);
          101         fprintf(TEXFILE,"}}}%%\n");
          102 }
          103 
          104 void
          105 spline(double x, double y, double/*sic*/ n, float *p, int dashed, double ddval)
          106 {
          107         int k, j;
          108 
          109         fprintf(TEXFILE,"    \\special{pa %d %d}%%\n",TRX(x),TRY(y));
          110         for(k=0, j=0; k<n; k++, j+=2){
          111                 x += p[j];
          112                 y += p[j+1];
          113                 fprintf(TEXFILE,"    \\special{pa %d %d}%%\n",TRX(x),TRY(y));
          114         }
          115         fprintf(TEXFILE,"    \\special{sp}%%\n");
          116 }
          117 
          118 void
          119 ellipse(double x, double y, double r1, double r2)
          120 {
          121         fprintf(TEXFILE, "    \\special{ar %d %d %d %d 0.0 6.2832}%%\n",
          122                 TRX(x), TRY(y), SCX(r1), -SCY(r2));
          123 }
          124 
          125 void
          126 arc(double xc, double yc, double x0, double y0, double x1, double y1)        /* draw arc with center xc,yc */
          127 {
          128         devarc(x0, y0, x1, y1, xc, yc, 1 );   /* radius=1 means counterclockwise */
          129 }
          130 
          131 /* If NOEXPANDDASH is defined, use this instead of the normal dotline
          132  * in print().  This dotline relies on vec() noticing that e1->pen
          133  * is not SOLIDPEN, and putting out a call to a different postscript
          134  * routine.
          135  */
          136 #ifdef NOEXPANDDASH
          137 
          138 void
          139 dotline(double x0, double y0, double x1, double y1, int ddtype, double ddval)
          140 {
          141         if (ddval != 0)
          142                 e1->dashlen = ddval;
          143         e1->pen = (ddtype&DOTBIT)? DOTPEN : DASHPEN;
          144         move(x0, y0);
          145         vec(x1, y1);
          146         e1->pen = SOLIDPEN;
          147         e1->dashlen = e0->dashlen;
          148 }
          149 #endif