#pragma option d32
#pragma option stub=c:\c--\zrdx.exe

//#speed

#include "write.h--"
#include "graph19.h--"
#include "random.h--"

// Здесь текстура размером 100x100x256 (TGA Uncompressed)
byte buf=EXTRACT "new-1.tga",312h,100*100;
// Текстура для заливки 32x32x256 (TGA Uncompressed)
byte FillTexture=EXTRACT "new-3.tga",312h,32*32;
// Палитра первой текстуры (TGA Uncompressed)
byte pal=EXTRACT "new-1.tga",14h,256*3;

long x=-100,y=-100,dx=1,dy=1;

dword count=0;
dword previostime=0;
dword fps=0;
dword maxfps=0;

word NullSel;
word VideoMemSel;

byte WorkBuf[1024*1024];

long xx,yy,r=0,angle=0,const180=180;

main()
{
 SetVideoMode(13h);

 FOR (EBX=0; EBX<256*3; EBX++) pal[EBX]>>=2;

 AX=1; $int 33h

 SetVgaPalette(0,256,#pal);

 AX=2; BX=0A000h; $int 31h
 VideoMemSel=AX;
 ES=AX;

 AX=2; BX=0; $int 31h
 NullSel=AX;
 FS=AX;

 EBX=FSDWORD[46ch];
 WHILE (EBX==FSDWORD[46ch]);

 do{
  FS=NullSel;
  IF (previostime+18<=FSDWORD[46ch]){
     previostime=FSDWORD[46ch];
     fps=count;
     IF (maxfps<fps) maxfps=fps;
     count=0;
  }
  count++;

//   GetSprite(0,0,100,16,DS,#buf);
//   PutSprite(x,y,100,100,DS,#buf);         // ~3191  =2276Bh
  TrColorForPutTrSprite=0F8h;
  PutTrSprite(50,50,100,100,DS,#buf);         // ~3191  =2276Bh

  PutPixel19(0,0,14);
  PutPixel19(319,0,14);
  PutPixel19(319,199,14);
  PutPixel19(0,199,14);
  x+=dx;
  y+=dy;
  IF (x<-100)||(x>320) -dx;
  IF (y<-100)||(y>200) -dy;
  GotoXY(0,0); WriteDWord(fps);
  GotoXY(0,1); WriteDWord(maxfps);

//  Box(100,50,101,101,19);

//  FilledBox(102,52,97,97,10);
  Bar(101,50,100,100,10);

  Circle(160,100,98,15);

  FilledCircle(160,100,1,5);

  PutPixel19(100,50,16);
  PutPixel19(200,50,16);
  PutPixel19(200,150,16);
  PutPixel19(100,150,16);

//  Fill(10,50,1,SS,ESP-4);
//  Fill(10,50,1,DS,1024*1024+#WorkBuf);

  TexturedFillStruct.Seg=DS;
  TexturedFillStruct.Offs=#FillTexture;
  TexturedFillStruct.Width=32;
  TexturedFillStruct.Height=32;
  TexturedFillStruct.x=0;
  TexturedFillStruct.y=0;
//  TexturedFill(10,50,SS,ESP-4);
  // Работает только в том случае, если заливаем цвет, которого нету в
  // текстуре (предварительно надо об этом позаботиться, если надо)
  TexturedFill(10,50,DS,1024*1024-1+#WorkBuf);

//  Line(2,0,317,50,47);
//  Line(2,50,317,0,47);

  $fldpi
  $fimul angle
  $fidiv const180
  $fsincos
  $fimul r
  $fistp xx
  $fimul r
  $fistp yy
  Line(159,99,xx+159,yy+99,r);
  angle++;
  IF (angle==360){r++; angle=0;}

  Line(RAND()%320,RAND()%200,RAND()%320,RAND()%200,RAND());

// WaitRetrace();
 }while (inp(60h)!=1);

 BIOSREADKEY();

 SetVideoMode(3);
}
