1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#define min(x,y) (((x)<(y))?(x):(y))
#define max(x,y) (((x)>(y))?(x):(y))
#define CONVERT 0
#define FILTER (pha==1&&pi>3)
#define ESIZE 20
#define GET_pha LoadColumn(eptr+4,2,1,CONVERT,&pha)
#define GET_pi LoadColumn(eptr+6,2,1,CONVERT,&pi)
#define GET GET_pha;GET_pi;
short pha;
short pi;
#define RADIAN 57.295779513082320877
#define RADTODEG(r) ((r)*RADIAN)
#define DEGTORAD(d) ((d)/RADIAN)
#define INSIDE(a,r1,r2) (((a)>(r1))&&((a)<=((r2)<(r1)?(r2+360.0):(r2))))
static double d;
#define Annulus(X,Y,x,y,ri,ro) ((((X-x)*(X-x))+((Y-y)*(Y-y))<=(ro*ro))&& (((X-x)*(X-x))+((Y-y)*(Y-y))>(ri*ri)))
#define annulus(x,y,ri,ro) Annulus(_X_,_Y_,x,y,ri,ro)
#define Circle(X,Y,x,y,r) (((X-x)*(X-x))+((Y-y)*(Y-y))<=(r*r))
#define circle(x,y,r) Circle(_X_,_Y_,x,y,r)
#define Ellipse(X,Y,x,y,a,b) (((X-x)*(X-x))/(double)(a*a))+(((Y-y)*(Y-y))/(double)(b*b))<=1.0)
#define ellipse(x,y,a,b) Ellipse(_X_,_Y_,x,y,a,b)
#define Pie(X,Y,x,y,r1,r2) ((X==x)&&(Y==y)?1:(INSIDE(((d=RADTODEG(atan2(Y-y,X-x)))<90?d+270.0:d-90.0),r1,r2)))
#define pie(x,y,r1,r2) Pie(_X_,_Y_,x,y,r1,r2)
#define Point(X,Y,x,y) ((X==x)&&(Y==y))
#define point(x,y) Point(_X_,_Y_,x,y)
#define Box(X,Y,x,y,w,h) ((X>(x-(double)(w/2)))&&(X<=(x+(double)(w/2)))&&(Y>(y-(double)(h/2)))&&(Y<=(y+(double)(h/2))))
#define box(x,y,w,h) Box(_X_,_Y_,x,y,w,h)
LoadColumn(eptr, bytes, iter, convert, obuf)
char *eptr;
int bytes, iter, convert;
char *obuf;
{
char *optr=obuf;
int i, j;
for(i=0; i<iter; i++){
optr = obuf + (i*bytes);
if( convert ){
for(j=0; j<bytes; j++)
optr[j] = *(eptr+bytes-1-j);
}
else{
for(j=0; j<bytes; j++)
optr[j] = *(eptr+j);
}
}
}
main(argc, argv)
int argc;
char **argv;
{
char *ebuf=(char *)0, *eptr, *etop, *rptr;
int get, got;
while( read(0, &get, 4) >0 ){
ebuf = (char *)malloc(get);
for(etop=ebuf; get>0; etop += got, get -= got){
if( (got=read(0, etop, get)) <=0 )
break;
}
for(rptr=ebuf, eptr=ebuf; eptr<etop; rptr++, eptr += ESIZE){
GET;
*rptr = FILTER;
}
got = ((etop - ebuf)/ESIZE);
write(1, &got, 4);
write(1, ebuf, got);
free(ebuf);
}
unlink(argv[0]);
}
|