--- /dev/null
+#include <stdio.h>\r
+#include <conio.h>\r
+#include <dos.h>\r
+#include <math.h>\r
+#include "tweak.h"\r
+\r
+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
+extern far do_block(int ycnt);\r
+extern far do_clear(char far *vmem, int far *otau, int far *ntau);\r
+\r
+extern int acstau[256];\r
+int sini[2000];\r
+char (* far vmem)[160]=MK_FP(0x0a000,0);\r
+extern char far kuva1[128][256];\r
+extern char far kuva2[128][256];\r
+extern char far kuva3[128][256];\r
+extern char far dist1[128][256];\r
+char far buu[1000];\r
+char sinx[128], siny[128];\r
+char pal[768];\r
+\r
+int clrtau[8][256][2];\r
+int clrptr=0;\r
+\r
+initvect() {\r
+ int a,b,x,y,s,d=0,p=0,ch;\r
+\r
+ for(a=0;a<1524;a++)\r
+ {\r
+ sini[a]=s=sin(a/1024.0*M_PI*4)*127;\r
+ s-=sini[a];\r
+ }\r
+\r
+/* for(a=0;a<65;a++) for(b=0;b<256;b++) // chessboard\r
+ { x=1; if((a>>4)&1) x^=3; if((b>>5)&1) x^=3; kuva[a][b]=x; }\r
+\r
+ pal[0*192+3*1]=pal[0*192+3*1+1]=pal[0*192+3*1+2]=40;\r
+ pal[0*192+3*2]=pal[0*192+3*2+1]=pal[0*192+3*2+2]=60;\r
+*/\r
+ for(a=1;a<32;a++) // must-sini-valk\r
+ { pal[0*192+a*3]=0; pal[0*192+a*3+1]=0; pal[0*192+a*3+2]=a*2; }\r
+ for(a=0;a<32;a++)\r
+ { 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
+\r
+ for(a=0;a<32;a++) // must-pun-kelt\r
+ { pal[1*192+a*3]=a*2; pal[1*192+a*3+1]=0; pal[1*192+a*3+2]=0; }\r
+ for(a=0;a<32;a++)\r
+ { 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
+\r
+\r
+ for(a=0;a<32;a++) // must-orans-viol\r
+ { pal[2*192+a*3]=a; pal[2*192+a*3+1]=0; pal[2*192+a*3+2]=a*2/3; }\r
+ for(a=0;a<32;a++)\r
+ { 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
+\r
+\r
+ for(y=0;y<64;y++) for(x=0;x<256;x++)\r
+ {\r
+ kuva1[y][x]=sini[(y*4+sini[x*2])&511]/4+32;\r
+ kuva2[y][x]=sini[(y*4+sini[x*2])&511]/4+32+64;\r
+ kuva3[y][x]=sini[(y*4+sini[x*2])&511]/4+32+128;\r
+ }\r
+\r
+ for(y=0;y<128;y++) for(x=0;x<256;x++)\r
+ dist1[y][x]=sini[y*8]/3;\r
+\r
+ for(a=0;a<8*256;a++) { clrtau[0][a][0]=640; clrtau[0][a][1]=0; }\r
+ }\r
+\r
+extern far char * to;\r
+extern far char * from;\r
+extern far int * ctau;\r
+extern far int dseg;\r
+extern far int xx, yy;\r
+extern far long ay1,ay2,ax1,ax2,xx1,yy1,xx2,yy2;\r
+extern far long txx1,txy1,tay1,tax1;\r
+extern far long txx2,txy2,tay2,tax2;\r
+\r
+int kuvataus[]={FP_SEG(kuva1),FP_SEG(kuva2),FP_SEG(kuva3),FP_SEG(kuva1)};\r
+int disttaus[]={FP_SEG(dist1),FP_SEG(dist1),FP_SEG(dist1),FP_SEG(dist1)};\r
+\r
+do_poly(x1,y1,x2,y2,x3,y3,x4,y4,color, dd)\r
+int x1,y1,x2,y2,x3,y3,x4,y4,color, dd;\r
+ {\r
+ int a,b,c,d,n=0,m,s1,s2,d1,d2,dx1,dy1,dx2,dy2;\r
+\r
+ struct points {\r
+ int x,y; } pnts[4],txt[4]={{64,4},{190,4},{190,60},{64,60}};\r
+// int x,y; } pnts[4],txt[4]={{1,1},{63,1},{63,63},{1,63}};\r
+\r
+ dd=(dd+1)&63;\r
+\r
+ pnts[0].x=x1; pnts[0].y=y1;\r
+ pnts[1].x=x2; pnts[1].y=y2;\r
+ pnts[2].x=x3; pnts[2].y=y3;\r
+ pnts[3].x=x4; pnts[3].y=y4;\r
+\r
+ for(n=0,a=1;a<4;a++) if(pnts[a].y<pnts[n].y) n=a;\r
+\r
+ s1=n; s2=n; d1=(s1+1)&3; d2=(s2-1)&3;\r
+ dx1=pnts[d1].x-pnts[s1].x;\r
+ dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;\r
+ ax1=65536L*dx1/dy1;\r
+ xx1=((long)pnts[s1].x<<16)+0x8000L;\r
+ txx1=((long)txt[s1].x<<16)+0x8000L;\r
+ txy1=((long)txt[s1].y<<16)+0x8000L;\r
+ tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;\r
+ tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;\r
+\r
+ dx2=pnts[d2].x-pnts[s2].x;\r
+ dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;\r
+ ax2=65536L*dx2/dy2;\r
+ xx2=((long)pnts[s2].x<<16)+0x8000L;\r
+ txx2=((long)txt[s2].x<<16)+0x8000L;\r
+ txy2=((long)txt[s2].y<<16)+0x8000L;\r
+ tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;\r
+ tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;\r
+\r
+ yy=(long)pnts[s1].y;\r
+ from=MK_FP(kuvataus[color],0);\r
+ to=vmem[yy]; // initialize gfx pointers\r
+ dseg=disttaus[color]+dd*16;\r
+ ctau=&clrtau[clrptr][yy];\r
+ for(n=0;n<4;)\r
+ {\r
+ if(pnts[d1].y<pnts[d2].y) m=pnts[d1].y; else m=pnts[d2].y;\r
+ do_block(m-yy); yy=m;\r
+\r
+ if(pnts[d1].y==pnts[d2].y)\r
+ {\r
+ s1=d1; d1=(s1+1)&3;\r
+ s2=d2; d2=(s2-1)&3; n+=2;\r
+\r
+ dx1=pnts[d1].x-pnts[s1].x;\r
+ dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;\r
+ ax1=65536L*dx1/dy1;\r
+ xx1=((long)pnts[s1].x<<16)+0x8000L;\r
+ txx1=((long)txt[s1].x<<16)+0x8000L;\r
+ txy1=((long)txt[s1].y<<16)+0x8000L;\r
+ tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;\r
+ tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;\r
+\r
+ dx2=pnts[d2].x-pnts[s2].x;\r
+ dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;\r
+ ax2=65536L*dx2/dy2;\r
+ xx2=((long)pnts[s2].x<<16)+0x8000L;\r
+ txx2=((long)txt[s2].x<<16)+0x8000L;\r
+ txy2=((long)txt[s2].y<<16)+0x8000L;\r
+ tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;\r
+ tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;\r
+ }\r
+ else if(pnts[d1].y<pnts[d2].y)\r
+ {\r
+ s1=d1; d1=(s1+1)&3; n++;\r
+ dx1=pnts[d1].x-pnts[s1].x;\r
+ dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;\r
+ ax1=65536L*dx1/dy1;\r
+ xx1=((long)pnts[s1].x<<16)+0x8000L;\r
+ txx1=((long)txt[s1].x<<16)+0x8000L;\r
+ txy1=((long)txt[s1].y<<16)+0x8000L;\r
+ tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;\r
+ tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;\r
+ }\r
+ else {\r
+ s2=d2; d2=(s2-1)&3; n++;\r
+ dx2=pnts[d2].x-pnts[s2].x;\r
+ dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;\r
+ ax2=65536L*dx2/dy2;\r
+ xx2=((long)pnts[s2].x<<16)+0x8000L;\r
+ txx2=((long)txt[s2].x<<16)+0x8000L;\r
+ txy2=((long)txt[s2].y<<16)+0x8000L;\r
+ tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;\r
+ tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;\r
+ }\r
+ }\r
+ }\r
+\r
+clear()\r
+ {\r
+ int *otau=clrtau[(clrptr-3)&7], *ntau=clrtau[clrptr];\r
+\r
+ clrptr=(clrptr+1)&7;\r
+\r
+ do_clear(vmem[0],otau,ntau);\r
+ }\r
+\r