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 |
|
26 | p=getenv("flydraw_filebase"); |
27 |
|
27 | if(p!=NULL && *p!=0) { /* secured execution */ |
28 |
|
28 | if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail; |
29 |
|
29 | for(p1=vimgfilename;*p1;p1++) |
30 |
|
30 | if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail; |
31 |
|
31 | p1=getenv("w_wims_session"); |
32 |
|
32 | if(p1!=NULL && *p1!=0) { |
33 |
|
33 | snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename); |
34 |
|
34 | vimgf=fopen(namebuf,"w"); |
35 |
|
35 | } |
36 |
|
36 | else goto init_fail; |
37 |
|
37 | } |
38 |
|
38 | else vimgf=fopen(vimgfilename,"w"); |
39 | } |
39 | } |
40 | if(vimgf==NULL) { |
40 | if(vimgf==NULL) { |
41 | init_fail: |
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 |
|
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 |
|
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 |
|
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 |
|
92 | x0,y0,mx,my,ratio, |
93 |
|
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 |
|
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 |
|
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 |
|
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 |
|
118 | fprintf(vimgf," 0\nVERTEX\n 8\n1\n 10\n%f\n 20\n%f\n", |
119 |
|
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) |