|
|
1.1 root 1: #include <jerq.h>
2: #include <jerqio.h>
3:
4: Texture ones={
5: 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
6: 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
7: };
8:
9: Point pt1, pt2;
10: Point pt[256];
11: int npts;
12:
13: main(){
14: do; while(input());
15: scan();
16: output();
17: }
18: input(){
19: Point t;
20: static int lineno=0;
21: if(getline()==0)
22: return 0;
23: lineno++;
24: if(npts==0){
25: pt[npts++]=pt1;
26: pt[npts++]=pt2;
27: return 1;
28: }
29: if(eqpt(pt1, pt[npts-1])){
30: pt[npts++]=pt2;
31: return 1;
32: }
33: if(eqpt(pt2, pt[npts-1])){
34: pt[npts++]=pt1;
35: return 1;
36: }
37: if(npts!=2){
38: printf("panic 1: line %d\n", lineno);
39: exit();
40: }
41: t=pt[npts-2];
42: pt[npts-2]=pt[npts-1];
43: pt[npts-1]=t;
44: if(eqpt(pt1, pt[npts-1])){
45: pt[npts++]=pt2;
46: return 1;
47: }
48: if(eqpt(pt2, pt[npts-1])){
49: pt[npts++]=pt1;
50: return 1;
51: }
52: printf("panic 2: line %d\n", lineno);
53: exit();
54: return 0;
55: }
56: char *
57: rin(p, ip)
58: register char *p;
59: register int *ip;
60: {
61: register n=0, m=0, scale=1, sign=1;
62: while(*p==' ')
63: p++;
64: if(*p=='-')
65: p++, sign=-1;
66: while('0'<=*p && *p<='9')
67: n=10*n+*p++-'0';
68: n*=100;
69: if(*p=='.'){
70: p++;
71: while('0'<=*p && *p<='9'){
72: m=10*m+*p++-'0';
73: scale*=10;
74: }
75: n+=100*m/scale;
76: }
77: *ip=sign*n;
78: printf("read %d.%d\n", sign*n/100, n%100);
79: return p;
80: }
81: getline(){
82: char buf[128];
83: int x;
84: register char *p;
85: if(fgets(buf, sizeof buf, stdin)==0)
86: return 0;
87: p=buf;
88: while(*p!=' ')
89: p++;
90: p=rin(p, &x);
91: pt1.x=x;
92: p=rin(p, &x);
93: pt1.y=x;
94: p=rin(p, &x);
95: pt2.x=x;
96: p=rin(p, &x);
97: pt2.y=x;
98: return 1;
99: }
100: scan(){
101: register i;
102: for(i=0; i<npts; i++){
103: printf("pt %d %d %d\n", i, pt[i].x, pt[i].y);
104: pt[i].x/=50, pt[i].y/=50;
105: pt[i].x+=Drect.origin.x;
106: pt[i].y+=(Drect.origin.y+Drect.corner.y)/2;
107: }
108: for(i=1; i<npts; i++)
109: segment(&display, pt[i-1], pt[i], F_OR);
110: polyture(&display, pt, npts, &ones, F_OR);
111: }
112: output(){
113: request(KBD);
114: do wait(KBD); while(kbdchar()!='q');
115: exit();
116: }
117: pause(){
118: request(KBD);
119: rectf(&display, Drect, F_XOR); sleep(20); rectf(&display, Drect, F_XOR);
120: do wait(KBD); while(kbdchar()!='q');
121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.