7 extern far 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
8 extern far do_block(int ycnt);
\r
9 extern far do_clear(char far *vmem, int far *otau, int far *ntau);
\r
11 extern int acstau[256];
\r
13 char (* far vmem)[160]=MK_FP(0x0a000,0);
\r
14 extern char far kuva1[128][256];
\r
15 extern char far kuva2[128][256];
\r
16 extern char far kuva3[128][256];
\r
17 extern char far dist1[128][256];
\r
19 char sinx[128], siny[128];
\r
22 int clrtau[8][256][2];
\r
26 int a,b,x,y,s,d=0,p=0,ch;
\r
30 sini[a]=s=sin(a/1024.0*M_PI*4)*127;
\r
34 /* for(a=0;a<65;a++) for(b=0;b<256;b++) // chessboard
\r
35 { x=1; if((a>>4)&1) x^=3; if((b>>5)&1) x^=3; kuva[a][b]=x; }
\r
37 pal[0*192+3*1]=pal[0*192+3*1+1]=pal[0*192+3*1+2]=40;
\r
38 pal[0*192+3*2]=pal[0*192+3*2+1]=pal[0*192+3*2+2]=60;
\r
40 for(a=1;a<32;a++) // must-sini-valk
\r
41 { pal[0*192+a*3]=0; pal[0*192+a*3+1]=0; pal[0*192+a*3+2]=a*2; }
\r
43 { 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
45 for(a=0;a<32;a++) // must-pun-kelt
\r
46 { pal[1*192+a*3]=a*2; pal[1*192+a*3+1]=0; pal[1*192+a*3+2]=0; }
\r
48 { 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
51 for(a=0;a<32;a++) // must-orans-viol
\r
52 { pal[2*192+a*3]=a; pal[2*192+a*3+1]=0; pal[2*192+a*3+2]=a*2/3; }
\r
54 { 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
57 for(y=0;y<64;y++) for(x=0;x<256;x++)
\r
59 kuva1[y][x]=sini[(y*4+sini[x*2])&511]/4+32;
\r
60 kuva2[y][x]=sini[(y*4+sini[x*2])&511]/4+32+64;
\r
61 kuva3[y][x]=sini[(y*4+sini[x*2])&511]/4+32+128;
\r
64 for(y=0;y<128;y++) for(x=0;x<256;x++)
\r
65 dist1[y][x]=sini[y*8]/3;
\r
67 for(a=0;a<8*256;a++) { clrtau[0][a][0]=640; clrtau[0][a][1]=0; }
\r
70 extern far char * to;
\r
71 extern far char * from;
\r
72 extern far int * ctau;
\r
73 extern far int dseg;
\r
74 extern far int xx, yy;
\r
75 extern far long ay1,ay2,ax1,ax2,xx1,yy1,xx2,yy2;
\r
76 extern far long txx1,txy1,tay1,tax1;
\r
77 extern far long txx2,txy2,tay2,tax2;
\r
79 int kuvataus[]={FP_SEG(kuva1),FP_SEG(kuva2),FP_SEG(kuva3),FP_SEG(kuva1)};
\r
80 int disttaus[]={FP_SEG(dist1),FP_SEG(dist1),FP_SEG(dist1),FP_SEG(dist1)};
\r
82 do_poly(x1,y1,x2,y2,x3,y3,x4,y4,color, dd)
\r
83 int x1,y1,x2,y2,x3,y3,x4,y4,color, dd;
\r
85 int a,b,c,d,n=0,m,s1,s2,d1,d2,dx1,dy1,dx2,dy2;
\r
88 int x,y; } pnts[4],txt[4]={{64,4},{190,4},{190,60},{64,60}};
\r
89 // int x,y; } pnts[4],txt[4]={{1,1},{63,1},{63,63},{1,63}};
\r
93 pnts[0].x=x1; pnts[0].y=y1;
\r
94 pnts[1].x=x2; pnts[1].y=y2;
\r
95 pnts[2].x=x3; pnts[2].y=y3;
\r
96 pnts[3].x=x4; pnts[3].y=y4;
\r
98 for(n=0,a=1;a<4;a++) if(pnts[a].y<pnts[n].y) n=a;
\r
100 s1=n; s2=n; d1=(s1+1)&3; d2=(s2-1)&3;
\r
101 dx1=pnts[d1].x-pnts[s1].x;
\r
102 dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;
\r
103 ax1=65536L*dx1/dy1;
\r
104 xx1=((long)pnts[s1].x<<16)+0x8000L;
\r
105 txx1=((long)txt[s1].x<<16)+0x8000L;
\r
106 txy1=((long)txt[s1].y<<16)+0x8000L;
\r
107 tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;
\r
108 tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;
\r
110 dx2=pnts[d2].x-pnts[s2].x;
\r
111 dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;
\r
112 ax2=65536L*dx2/dy2;
\r
113 xx2=((long)pnts[s2].x<<16)+0x8000L;
\r
114 txx2=((long)txt[s2].x<<16)+0x8000L;
\r
115 txy2=((long)txt[s2].y<<16)+0x8000L;
\r
116 tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;
\r
117 tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;
\r
119 yy=(long)pnts[s1].y;
\r
120 from=MK_FP(kuvataus[color],0);
\r
121 to=vmem[yy]; // initialize gfx pointers
\r
122 dseg=disttaus[color]+dd*16;
\r
123 ctau=&clrtau[clrptr][yy];
\r
126 if(pnts[d1].y<pnts[d2].y) m=pnts[d1].y; else m=pnts[d2].y;
\r
127 do_block(m-yy); yy=m;
\r
129 if(pnts[d1].y==pnts[d2].y)
\r
131 s1=d1; d1=(s1+1)&3;
\r
132 s2=d2; d2=(s2-1)&3; n+=2;
\r
134 dx1=pnts[d1].x-pnts[s1].x;
\r
135 dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;
\r
136 ax1=65536L*dx1/dy1;
\r
137 xx1=((long)pnts[s1].x<<16)+0x8000L;
\r
138 txx1=((long)txt[s1].x<<16)+0x8000L;
\r
139 txy1=((long)txt[s1].y<<16)+0x8000L;
\r
140 tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;
\r
141 tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;
\r
143 dx2=pnts[d2].x-pnts[s2].x;
\r
144 dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;
\r
145 ax2=65536L*dx2/dy2;
\r
146 xx2=((long)pnts[s2].x<<16)+0x8000L;
\r
147 txx2=((long)txt[s2].x<<16)+0x8000L;
\r
148 txy2=((long)txt[s2].y<<16)+0x8000L;
\r
149 tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;
\r
150 tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;
\r
152 else if(pnts[d1].y<pnts[d2].y)
\r
154 s1=d1; d1=(s1+1)&3; n++;
\r
155 dx1=pnts[d1].x-pnts[s1].x;
\r
156 dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;
\r
157 ax1=65536L*dx1/dy1;
\r
158 xx1=((long)pnts[s1].x<<16)+0x8000L;
\r
159 txx1=((long)txt[s1].x<<16)+0x8000L;
\r
160 txy1=((long)txt[s1].y<<16)+0x8000L;
\r
161 tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;
\r
162 tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;
\r
165 s2=d2; d2=(s2-1)&3; n++;
\r
166 dx2=pnts[d2].x-pnts[s2].x;
\r
167 dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;
\r
168 ax2=65536L*dx2/dy2;
\r
169 xx2=((long)pnts[s2].x<<16)+0x8000L;
\r
170 txx2=((long)txt[s2].x<<16)+0x8000L;
\r
171 txy2=((long)txt[s2].y<<16)+0x8000L;
\r
172 tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;
\r
173 tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;
\r
180 int *otau=clrtau[(clrptr-3)&7], *ntau=clrtau[clrptr];
\r
182 clrptr=(clrptr+1)&7;
\r
184 do_clear(vmem[0],otau,ntau);
\r