Subversion Repositories wimsdev

Rev

Rev 1027 | Rev 8102 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1027 Rev 7675
Line 21... Line 21...
21
    double x1,x2,y1,y2,t;
21
    double x1,x2,y1,y2,t;
22
    char *p, *p1, namebuf[2048];
22
    char *p, *p1, namebuf[2048];
23
    vimgf=NULL;
23
    vimgf=NULL;
24
    if(vimgfilename[0]==0) vimgf=stdout;
24
    if(vimgfilename[0]==0) vimgf=stdout;
25
    else {
25
    else {
26
        p=getenv("flydraw_filebase");
26
      p=getenv("flydraw_filebase");
27
        if(p!=NULL && *p!=0) {  /* secured execution */
27
      if(p!=NULL && *p!=0) { /* secured execution */
28
            if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail;
28
          if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail;
29
            for(p1=vimgfilename;*p1;p1++)
29
          for(p1=vimgfilename;*p1;p1++)
30
              if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail;
30
            if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail;
31
            p1=getenv("w_wims_session");
31
          p1=getenv("w_wims_session");
32
            if(p1!=NULL && *p1!=0) {
32
          if(p1!=NULL && *p1!=0) {
33
                snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename);
33
            snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename);
34
                vimgf=fopen(namebuf,"w");
34
            vimgf=fopen(namebuf,"w");
35
            }
35
          }
36
            else goto init_fail;
36
          else goto init_fail;
37
        }
37
      }
38
        else vimgf=fopen(vimgfilename,"w");
38
      else vimgf=fopen(vimgfilename,"w");
39
    }
39
    }
40
    if(vimgf==NULL) {
40
    if(vimgf==NULL) {
41
init_fail:      vimg_enable=0; return;
41
init_fail: vimg_enable=0; return;
42
    }
42
    }
43
    x1=xstart; y1=ystart;
43
    x1=xstart; y1=ystart;
44
    x2=sizex/xscale+xstart;
44
    x2=sizex/xscale+xstart;
45
    y2=sizey/yscale+ystart;
45
    y2=sizey/yscale+ystart;
46
    if(x2<x1) {t=x1;x1=x2;x2=t;}
46
    if(x2<x1) {t=x1;x1=x2;x2=t;}
Line 64... Line 64...
64
  0\nENDTAB\n\
64
  0\nENDTAB\n\
65
  0\nTABLE\n  2\nSTYLE\n  70\n0\n  0\nENDTAB\n\
65
  0\nTABLE\n  2\nSTYLE\n  70\n0\n  0\nENDTAB\n\
66
  0\nENDSEC\n\
66
  0\nENDSEC\n\
67
  0\nSECTION\n  2\nBLOCKS\n  0\nENDSEC\n\
67
  0\nSECTION\n  2\nBLOCKS\n  0\nENDSEC\n\
68
  0\nSECTION\n  2\nENTITIES\n",
68
  0\nSECTION\n  2\nENTITIES\n",
69
            x1,y1,x2,y2, x1,y1,x2,y2);
69
     x1,y1,x2,y2, x1,y1,x2,y2);
70
    vimg_ready=1;
70
    vimg_ready=1;
71
}
71
}
72
 
72
 
73
void vimg_close (void)
73
void vimg_close (void)
74
{
74
{
Line 79... Line 79...
79
 
79
 
80
void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2)
80
void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2)
81
{
81
{
82
    double mx,my,ratio;
82
    double mx,my,ratio;
83
    if(rx==ry) {
83
    if(rx==ry) {
84
        fprintf(vimgf,"  0\nARC\n  8\n1\n  10\n%f\n  20\n%f\n  40\n%f\n\
84
      fprintf(vimgf,"  0\nARC\n  8\n1\n  10\n%f\n  20\n%f\n  40\n%f\n\
85
  50\n%f\n51\n%f\n",x0,y0,rx,a1,a2);
85
  50\n%f\n51\n%f\n",x0,y0,rx,a1,a2);
86
        return;
86
      return;
87
    }
87
    }
88
    if(rx>ry) {mx=rx;my=0;ratio=ry/rx;}
88
    if(rx>ry) {mx=rx;my=0;ratio=ry/rx;}
89
    else {mx=0;my=ry;ratio=rx/ry;}
89
    else {mx=0;my=ry;ratio=rx/ry;}
90
    fprintf(vimgf,"  0\nELLIPSE\n  10\n%f\n  20\n%f\n\
90
    fprintf(vimgf,"  0\nELLIPSE\n  10\n%f\n  20\n%f\n\
91
  11\n%f\n  21\n%f\n  40\n%f\n  41\n%f\n  42\n%f\n",
91
  11\n%f\n  21\n%f\n  40\n%f\n  41\n%f\n  42\n%f\n",
92
            x0,y0,mx,my,ratio,
92
          x0,y0,mx,my,ratio,
93
            a1*3.14159265/180,a2*3.14159265/180);
93
          a1*3.14159265/180,a2*3.14159265/180);
94
   
94
 
95
}
95
}
96
 
96
 
97
void vimg_ellipse (double x0, double y0, double rx, double ry)
97
void vimg_ellipse (double x0, double y0, double rx, double ry)
98
{
98
{
99
    if(rx==ry) {
99
    if(rx==ry) {
100
        fprintf(vimgf,"  0\nCIRCLE\n  8\n1\n  10\n%f\n  20\n%f\n\
100
      fprintf(vimgf,"  0\nCIRCLE\n  8\n1\n  10\n%f\n  20\n%f\n\
101
  40\n%f\n",x0,y0,rx);
101
  40\n%f\n",x0,y0,rx);
102
        return;
102
      return;
103
    }
103
    }
104
    else vimg_arc (x0,y0,rx,ry,0,360);
104
    else vimg_arc (x0,y0,rx,ry,0,360);
105
}
105
}
106
 
106
 
107
void vimg_line (double x1,double y1,double x2,double y2)
107
void vimg_line (double x1,double y1,double x2,double y2)
108
{
108
{
109
    fprintf(vimgf,"  0\nLINE\n  8\n1\n10\n%f\n  20\n%f\n  11\n%f\n  21\n%f\n",
109
    fprintf(vimgf,"  0\nLINE\n  8\n1\n10\n%f\n  20\n%f\n  11\n%f\n  21\n%f\n",
110
           x1,y1,x2,y2);
110
         x1,y1,x2,y2);
111
}
111
}
112
 
112
 
113
void vimg_polyline (double xy[], int cnt, int closed)
113
void vimg_polyline (double xy[], int cnt, int closed)
114
{
114
{
115
    int i;
115
    int i;
116
    fprintf(vimgf,"  0\nPOLYLINE\n  70\n%d\n",closed);
116
    fprintf(vimgf,"  0\nPOLYLINE\n  70\n%d\n",closed);
117
    for(i=0;i<2*cnt;i++,i++) {
117
    for(i=0;i<2*cnt;i++,i++) {
118
        fprintf(vimgf,"  0\nVERTEX\n  8\n1\n  10\n%f\n  20\n%f\n",
118
      fprintf(vimgf,"  0\nVERTEX\n  8\n1\n  10\n%f\n  20\n%f\n",
119
                xy[i],xy[i+1]);
119
            xy[i],xy[i+1]);
120
    }
120
    }
121
    fprintf(vimgf,"  0\nSEQEND\n");
121
    fprintf(vimgf,"  0\nSEQEND\n");
122
}
122
}
123
 
123
 
124
void vimg_rect (double x1, double y1, double x2, double y2)
124
void vimg_rect (double x1, double y1, double x2, double y2)