tbug1066a.pp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. { Source provided for Free Pascal Bug Report 1066 }
  2. { Submitted by "Fernando Oscar Schmitt" on 2000-07-24 }
  3. { e-mail: [email protected] }
  4. var
  5. somevar:longint;
  6. {$asmmode intel}
  7. {$inline on}
  8. procedure putpixel(x,y,color:longint);assembler;inline;
  9. asm
  10. mov edi,x
  11. mov eax,y
  12. cmp edi,0
  13. jl @@putpixelend
  14. cmp eax,0
  15. jl @@putpixelend
  16. cmp edi,1023
  17. jg @@putpixelend
  18. cmp eax,767
  19. jg @@putpixelend
  20. shl eax,12
  21. mov ebx,color
  22. add eax,somevar
  23. mov [eax+edi*4],ebx
  24. @@putpixelend:
  25. end ['eax','ebx','edi'];
  26. procedure pixelrow(y,x1,x2,color:longint);assembler;inline;
  27. asm
  28. mov edi,x1
  29. mov ecx,x2
  30. mov eax,y
  31. cmp edi,ecx
  32. jle @@pixelrowdirok
  33. xchg edi,ecx
  34. @@pixelrowdirok:
  35. cmp eax,0
  36. jl @@endpixelrow
  37. cmp eax,767
  38. jg @@endpixelrow
  39. cmp ecx,0
  40. jl @@endpixelrow
  41. cmp edi,1023
  42. jg @@endpixelrow
  43. cmp edi,0
  44. jge @@pixelrowx1ok
  45. mov edi,0
  46. @@pixelrowx1ok:
  47. cmp ecx,1023
  48. jle @@pixelrowx2ok
  49. mov ecx,1023
  50. @@pixelrowx2ok:
  51. sub ecx,edi
  52. shl eax,12
  53. inc ecx
  54. add eax,somevar
  55. cld
  56. lea edi,[eax+4*edi]
  57. mov eax,color
  58. rep stosd
  59. @@endpixelrow:
  60. end ['eax','ecx','edi'];
  61. function str(w:word):string;
  62. var tmp:string;
  63. begin
  64. system.str(w,tmp);
  65. str:=tmp;
  66. end;
  67. function str(l:longint):string;
  68. var tmp:string;
  69. begin
  70. system.str(l,tmp);
  71. str:=tmp;
  72. end;
  73. procedure circle(x0,y0,r,color:longint);
  74. var x,y:longint;
  75. begin
  76. for x:=0 to trunc(r*(sqrt(2)/2))+1 do
  77. begin
  78. y:=round(sqrt(r*r-x*x));
  79. putpixel(x0+x,y0+y,color);
  80. putpixel(x0-x,y0+y,color);
  81. putpixel(x0+x,y0-y,color);
  82. putpixel(x0-x,y0-y,color);
  83. putpixel(x0+y,y0+x,color);
  84. putpixel(x0-y,y0+x,color);
  85. putpixel(x0+y,y0-x,color);
  86. putpixel(x0-y,y0-x,color);
  87. end;
  88. end;
  89. procedure circlefill(x0,y0,r,color:longint);
  90. var x,y:longint;
  91. begin
  92. for x:=0 to trunc(r*(sqrt(2)/2))+1 do
  93. begin
  94. y:=round(sqrt(r*r-x*x));
  95. pixelrow(y0+y,x0-x,x0+x,color);
  96. pixelrow(y0-y,x0-x,x0+x,color);
  97. pixelrow(y0+x,x0-y,x0+y,color);
  98. pixelrow(y0-x,x0-y,x0+y,color);
  99. end;
  100. end;
  101. begin
  102. end.