Subversion Repositories wimsdev

Rev

Rev 8878 | Rev 17633 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*    Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis
  2.  *
  3.  *  This program is free software; you can redistribute it and/or modify
  4.  *  it under the terms of the GNU General Public License as published by
  5.  *  the Free Software Foundation; either version 2 of the License, or
  6.  *  (at your option) any later version.
  7.  *
  8.  *  This program is distributed in the hope that it will be useful,
  9.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.  *  GNU General Public License for more details.
  12.  *
  13.  *  You should have received a copy of the GNU General Public License
  14.  *  along with this program; if not, write to the Free Software
  15.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16.  */
  17.  
  18. /* This file is a temporary patch to tex eps files with extra borders.
  19.  * It cuts the borders in the resulting gif file, so that the font
  20.  * fits tightly in the cadre. libgd is required.
  21.  */
  22.  
  23. #include "flydraw.h"
  24.  
  25. char imagefilename[1024];
  26. char vimgfilename[1024];
  27. int sizex, sizey, saved;
  28. gdImagePtr image=NULL, brushimg=NULL, tileimg=NULL, wimg=NULL;
  29. int brushed=0, tiled=0, styled=0, width=1, savew=1, wcolor=-1, width2=4;
  30. int color_white, color_black, color_bounder, color_frame;
  31. int linecnt=-100000;
  32. int tranged=0;
  33. double xscale=1, yscale=1, xstart=0, ystart=0;
  34. double tstart=0, tend=1, tstep=100, plotjump=200;
  35. double animstep=0;
  36. int transform=0;  /* transformation indicator */
  37. double transx=0, transy=0; /* translation vector */
  38. int lstep=4;
  39. ev_variable vartab[MAX_VARS];
  40. char varnamebuf[MAX_VARNAMEBUF], *varnameptr=varnamebuf;
  41. int varcnt;
  42. int vimg=0; /* 0: no vector image output.
  43.              * 1: DXF vector output. */
  44. int vimg_enable=0; /* 0: disable. 1: enable. */
  45. int vimg_ready=0;
  46. FILE *vimgf=NULL;
  47. double scale_buf[MAX_PARMS];
  48. /* les matrices suivantes sont initialisees par la commande setmatrix nummatrix,a11,a12,a21,a22
  49.  * elles sont remises a l'unite par resetmatrix nummatrix
  50.  * la matrice fixant le systeme de coordonnees "mathematiques" dans l'image
  51.  */
  52. matrice matrices_pavage[JC_NB_MATRICES+1];
  53. vecteur vecteurs_pavage[JC_NB_MATRICES+1];
  54.  
  55. /* les coordonnees du parallelograme de pavage = coordonnees "mathematiques"
  56.  * du parallelogramme contenant l'image a recopier on place ces coorodonnes
  57.  * avec setparallelogram xs,ys,xu,yu,xv,yu
  58.  * xs,ys=coordonnees math du point 0,0,
  59.  * xu,yu coordonnees math de l'horizontale
  60.  * xv,yv coordonnees math de la verticale
  61.  * ces coordonnees sont remises a leur valeur par defaut par resetparallelogram
  62.  */
  63. double parallogram_fonda[]={0,0,100,0,0,100};
  64.  
  65. /* Write the image */
  66. void output(void)
  67. {
  68.   FILE *out;
  69.  
  70.   if(!image) return;
  71.   if(imagefilename[0]) {
  72.     out=fopen(imagefilename,"wb");
  73.     if(out!=NULL) {gdImageGif(image, out); fclose(out); }
  74.   }
  75.   else gdImageGif(image, stdout);
  76.   saved=1;
  77. }
  78.  
  79. /* substitute variable names by their environment strings
  80.  * The buffer pointed to by p must have enough space
  81.  * (defined by MAX_LINELEN).
  82.  */
  83. char *substit(char *p)
  84. {
  85.   char *pp, *pe;
  86.   char namebuf[MAX_NAMELEN+1];
  87.   int i, l;
  88.  
  89.   pe=strchr(p,'"'); if(pe!=NULL) l=pe-p; else l=MAX_LINELEN;
  90.   for(pp=find_name_start(p); *pp!=0 && pp-p<l;
  91.     pp=find_name_start(pe)) {
  92.     pe=find_name_end(pp);
  93.     if((pp>p && !isspace(*(pp-1)) && *(pp-1)!=',') ||
  94.        (*pe!=0 && !isspace(*pe) && *pe!=',')) continue;
  95.     memmove(namebuf,pp,pe-pp); namebuf[pe-pp]=0;
  96.     i=search_list(nametab,nametab_no,sizeof(nametab[0]),namebuf);
  97.     if(i<0) continue;
  98.     if(nametab[i].type==t_prep && preptab[nametab[i].serial].typ==p_font)
  99.       break;
  100.     if(nametab[i].type==t_color)
  101.       string_modify(p,pp,pe,colortab[nametab[i].serial].def);
  102.   }
  103.   return p;
  104. }
  105.  
  106. void fly_process(void)
  107. {
  108.   char buf[MAX_LINELEN+1];
  109.   int c;
  110.   do {
  111.     c=ggetline(buf); obj_main(buf);
  112.   }
  113.   while(c!=EOF);
  114. }
  115.  
  116. int verify_tables(void) {
  117.   return evaltab_verify();
  118. }
  119.  
  120. int main(int argc, char *argv[])
  121. {
  122.   int i; for (i = 0; i <= JC_NB_MATRICES; i++)
  123.     matrices_pavage [i][0] = matrices_pavage[i][3] = 1;
  124.   substitute=substit;
  125.   ev_varcnt=&varcnt; ev_var=vartab;
  126.   if(argc==2 && strcasecmp(argv[1],"table")==0) {
  127.     if(verify_tables()) {
  128.       printf("Table disorder.\n"); return 1;
  129.     }
  130.     printf("Table orders OK.\n"); return 0;
  131.   }
  132.   vartab[0].name="animstep"; vartab[0].value=0;
  133.   varcnt=1;
  134.   if(argc>1) snprintf(imagefilename,sizeof(imagefilename),"%s",argv[1]);
  135.   else imagefilename[0]=0;
  136.   fly_process();
  137.   if(!saved || imagefilename[0]!=0) output();
  138.   if(image) gdImageDestroy(image);
  139.   if(vimg_ready) vimg_close();
  140.   return 0;
  141. }
  142.