3 extern far void do_line(char far *to, int dx, int dy, int cnt, char far *from, long txx1, long txy1, long txx2, long txy2, int dseg);
\r
4 extern far void do_block(int ycnt);
\r
5 extern far void do_clear(char far *vmem, int far *otau, int far *ntau);
\r
7 extern int acstau[256];
\r
9 char (* far vmem)[160]=MK_FP(0x0a000,0);
\r
10 /*extern*/ char far kuva1[128][256];
\r
11 /*extern*/ char far kuva2[128][256];
\r
12 /*extern*/ char far kuva3[128][256];
\r
13 /*extern*/ char far dist1[128][256];
\r
15 char sinx[128], siny[128];
\r
18 int clrtau[8][256][2];
\r
22 int a/*,b*/,x,y,s/*,d=0,p=0,ch*/;
\r
26 sini[a]=s=sin(a/1024.0*M_PI*4)*127;
\r
30 /* for(a=0;a<65;a++) for(b=0;b<256;b++) // chessboard
\r
31 { x=1; if((a>>4)&1) x^=3; if((b>>5)&1) x^=3; kuva[a][b]=x; }
\r
33 pal[0*192+3*1]=pal[0*192+3*1+1]=pal[0*192+3*1+2]=40;
\r
34 pal[0*192+3*2]=pal[0*192+3*2+1]=pal[0*192+3*2+2]=60;
\r
36 for(a=1;a<32;a++) // must-sini-valk
\r
37 { pal[0*192+a*3]=0; pal[0*192+a*3+1]=0; pal[0*192+a*3+2]=a*2; }
\r
39 { pal[0*192+a*3+32*3]=a*2; pal[0*192+a*3+1+32*3]=a*2; pal[0*192+a*3+2+32*3]=63; }
\r
41 for(a=0;a<32;a++) // must-pun-kelt
\r
42 { pal[1*192+a*3]=a*2; pal[1*192+a*3+1]=0; pal[1*192+a*3+2]=0; }
\r
44 { pal[1*192+a*3+32*3]=63; pal[1*192+a*3+1+32*3]=a*2; pal[1*192+a*3+2+32*3]=0; }
\r
47 for(a=0;a<32;a++) // must-orans-viol
\r
48 { pal[2*192+a*3]=a; pal[2*192+a*3+1]=0; pal[2*192+a*3+2]=a*2/3; }
\r
50 { pal[2*192+a*3+32*3]=31-a; pal[2*192+a*3+1+32*3]=a*2; pal[2*192+a*3+2+32*3]=21; }
\r
53 for(y=0;y<64;y++) for(x=0;x<256;x++)
\r
55 kuva1[y][x]=sini[(y*4+sini[x*2])&511]/4+32;
\r
56 kuva2[y][x]=sini[(y*4+sini[x*2])&511]/4+32+64;
\r
57 kuva3[y][x]=sini[(y*4+sini[x*2])&511]/4+32+128;
\r
60 for(y=0;y<128;y++) for(x=0;x<256;x++)
\r
61 dist1[y][x]=sini[y*8]/3;
\r
63 for(a=0;a<8*256;a++) { clrtau[0][a][0]=640; clrtau[0][a][1]=0; }
\r
66 extern far char * to;
\r
67 extern far char * from;
\r
68 extern far int * ctau;
\r
69 extern far int dseg;
\r
70 extern far int xx, yy;
\r
71 extern far long ay1,ay2,ax1,ax2,xx1,yy1,xx2,yy2;
\r
72 extern far long txx1,txy1,tay1,tax1;
\r
73 extern far long txx2,txy2,tay2,tax2;
\r
75 char* kuvataus[]={&kuva1[0][0],&kuva2[0][0],&kuva3[0][0],&kuva1[0][0]};
\r
76 char* disttaus[]={&dist1[0][0],&dist1[0][0],&dist1[0][0],&dist1[0][9]};
\r
78 void do_poly(x1,y1,x2,y2,x3,y3,x4,y4,color, dd)
\r
79 int x1,y1,x2,y2,x3,y3,x4,y4,color, dd;
\r
81 int a,/*b,c,d,*/n=0,m,s1,s2,d1,d2,dx1,dy1,dx2,dy2;
\r
84 int x,y; } pnts[4],txt[4]={{64,4},{190,4},{190,60},{64,60}};
\r
85 // int x,y; } pnts[4],txt[4]={{1,1},{63,1},{63,63},{1,63}};
\r
89 pnts[0].x=x1; pnts[0].y=y1;
\r
90 pnts[1].x=x2; pnts[1].y=y2;
\r
91 pnts[2].x=x3; pnts[2].y=y3;
\r
92 pnts[3].x=x4; pnts[3].y=y4;
\r
94 for(n=0,a=1;a<4;a++) if(pnts[a].y<pnts[n].y) n=a;
\r
96 s1=n; s2=n; d1=(s1+1)&3; d2=(s2-1)&3;
\r
97 dx1=pnts[d1].x-pnts[s1].x;
\r
98 dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;
\r
100 xx1=((long)pnts[s1].x<<16)+0x8000L;
\r
101 txx1=((long)txt[s1].x<<16)+0x8000L;
\r
102 txy1=((long)txt[s1].y<<16)+0x8000L;
\r
103 tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;
\r
104 tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;
\r
106 dx2=pnts[d2].x-pnts[s2].x;
\r
107 dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;
\r
108 ax2=65536L*dx2/dy2;
\r
109 xx2=((long)pnts[s2].x<<16)+0x8000L;
\r
110 txx2=((long)txt[s2].x<<16)+0x8000L;
\r
111 txy2=((long)txt[s2].y<<16)+0x8000L;
\r
112 tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;
\r
113 tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;
\r
115 yy=(long)pnts[s1].y;
\r
116 from=MK_FP(kuvataus[color],0);
\r
117 to=vmem[yy]; // initialize gfx pointers
\r
118 dseg=disttaus[color]+dd*16;
\r
119 ctau=&clrtau[clrptr][yy];
\r
122 if(pnts[d1].y<pnts[d2].y) m=pnts[d1].y; else m=pnts[d2].y;
\r
123 do_block(m-yy); yy=m;
\r
125 if(pnts[d1].y==pnts[d2].y)
\r
127 s1=d1; d1=(s1+1)&3;
\r
128 s2=d2; d2=(s2-1)&3; n+=2;
\r
130 dx1=pnts[d1].x-pnts[s1].x;
\r
131 dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;
\r
132 ax1=65536L*dx1/dy1;
\r
133 xx1=((long)pnts[s1].x<<16)+0x8000L;
\r
134 txx1=((long)txt[s1].x<<16)+0x8000L;
\r
135 txy1=((long)txt[s1].y<<16)+0x8000L;
\r
136 tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;
\r
137 tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;
\r
139 dx2=pnts[d2].x-pnts[s2].x;
\r
140 dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;
\r
141 ax2=65536L*dx2/dy2;
\r
142 xx2=((long)pnts[s2].x<<16)+0x8000L;
\r
143 txx2=((long)txt[s2].x<<16)+0x8000L;
\r
144 txy2=((long)txt[s2].y<<16)+0x8000L;
\r
145 tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;
\r
146 tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;
\r
148 else if(pnts[d1].y<pnts[d2].y)
\r
150 s1=d1; d1=(s1+1)&3; n++;
\r
151 dx1=pnts[d1].x-pnts[s1].x;
\r
152 dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;
\r
153 ax1=65536L*dx1/dy1;
\r
154 xx1=((long)pnts[s1].x<<16)+0x8000L;
\r
155 txx1=((long)txt[s1].x<<16)+0x8000L;
\r
156 txy1=((long)txt[s1].y<<16)+0x8000L;
\r
157 tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;
\r
158 tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;
\r
161 s2=d2; d2=(s2-1)&3; n++;
\r
162 dx2=pnts[d2].x-pnts[s2].x;
\r
163 dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;
\r
164 ax2=65536L*dx2/dy2;
\r
165 xx2=((long)pnts[s2].x<<16)+0x8000L;
\r
166 txx2=((long)txt[s2].x<<16)+0x8000L;
\r
167 txy2=((long)txt[s2].y<<16)+0x8000L;
\r
168 tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;
\r
169 tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;
\r
176 int *otau=clrtau[(clrptr-3)&7], *ntau=clrtau[clrptr];
\r
178 clrptr=(clrptr+1)&7;
\r
180 do_clear(vmem[0],otau,ntau);
\r