home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / SIN31173.asm < prev    next >
Assembly Source File  |  2014-02-08  |  4KB  |  194 lines

  1.       .386
  2.       .model flat, stdcall  ; 32 bit memory model
  3.       option casemap :none  ; case sensitive
  4.  
  5.  
  6.       include \masm32\include\windows.inc
  7.       include \masm32\include\user32.inc
  8.       include \masm32\include\kernel32.inc
  9.       include \masm32\include\gdi32.inc
  10.       
  11.       includelib \masm32\lib\user32.lib
  12.       includelib \masm32\lib\kernel32.lib
  13.       includelib \masm32\lib\gdi32.lib
  14.  
  15.       return MACRO arg
  16.         mov eax, arg
  17.         ret
  18.       ENDM
  19.  
  20.  
  21.   WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
  22.   WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
  23.   DrawEllipseSinCos PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  24.  
  25. .data
  26.  
  27.  szClassName   db "Evgeney_Victorovich_Kupin_27_April_1982",0
  28.  szDisplayName db "RoundFPU",0
  29.  
  30.  
  31.  
  32.  CommandLine   dd 0
  33.  hWnd          dd 0
  34.  hInstance     dd 0
  35.  
  36.  hIcon                   dd  ? 
  37.  hinstLib                dd  ?  
  38.  
  39.  
  40. .code
  41.  
  42. start:
  43.       invoke GetModuleHandle, NULL
  44.       mov hInstance, eax
  45.  
  46.       invoke GetCommandLine
  47.       mov CommandLine, eax
  48.  
  49.       invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT
  50.       invoke ExitProcess,eax
  51.  
  52. WinMain proc hInst     :DWORD, hPrevInst :DWORD, CmdLine   :DWORD, CmdShow   :DWORD
  53.  
  54.       LOCAL wc   :WNDCLASSEX
  55.       LOCAL msg  :MSG
  56.  
  57.       mov wc.cbSize,          sizeof WNDCLASSEX
  58.       mov wc.style,           CS_HREDRAW or CS_VREDRAW \
  59.                               or CS_BYTEALIGNWINDOW
  60.       mov  wc.lpfnWndProc,    offset WndProc
  61.       mov  wc.cbClsExtra,     NULL
  62.       mov  wc.cbWndExtra,     NULL
  63.       push hInst
  64.       pop  wc.hInstance
  65.       mov  wc.hbrBackground,  COLOR_WINDOW
  66.       mov  wc.lpszMenuName,   NULL
  67.       mov  wc.lpszClassName,  offset szClassName
  68.       push hIcon
  69.       pop  wc.hIcon
  70.       invoke LoadCursor,NULL,IDC_ARROW
  71.       mov  wc.hCursor,        eax
  72.       push hIcon 
  73.       pop  wc.hIconSm
  74.  
  75.       invoke RegisterClassEx, ADDR wc
  76.  
  77.  
  78.       invoke CreateWindowEx,WS_EX_LEFT,
  79.                             ADDR szClassName,
  80.                             ADDR szDisplayName,
  81.                             WS_OVERLAPPEDWINDOW or WS_SYSMENU,
  82.                             CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
  83.                             NULL,NULL,
  84.                             hInst,NULL
  85.       mov   hWnd,eax
  86.  
  87.       invoke ShowWindow,hWnd,SW_MAXIMIZE
  88.       invoke UpdateWindow,hWnd
  89.  
  90.     StartLoop:
  91.       invoke GetMessage,ADDR msg,NULL,0,0
  92.       cmp eax, 0
  93.       je ExitLoop
  94.       invoke TranslateMessage, ADDR msg
  95.       invoke DispatchMessage,  ADDR msg
  96.       jmp StartLoop
  97.     ExitLoop:
  98.  
  99.       return msg.wParam
  100.  
  101. WinMain endp
  102.  
  103. WndProc proc hWin   :DWORD, uMsg   :DWORD, wParam :DWORD, lParam :DWORD
  104.   
  105.  .if uMsg == WM_MOUSEMOVE
  106.       invoke GetTickCount
  107.       mov edx, eax 
  108.       and edx, 0ffffffh
  109.  
  110.       mov ecx, lParam
  111.       mov eax,ecx
  112.       and ecx, 0ffffh
  113.       shr  eax, 16    
  114.     
  115.       invoke DrawEllipseSinCos, hWin, ecx,eax, 180,140, edx 
  116.  
  117.    return 0
  118.     
  119.     .elseif uMsg == WM_DESTROY
  120.         invoke PostQuitMessage,NULL
  121.         return 0 
  122.     .endif
  123.  
  124.     invoke DefWindowProc,hWin,uMsg,wParam,lParam
  125.  
  126.     ret
  127.  
  128. WndProc endp
  129.  
  130. DrawEllipseSinCos proc hWin:DWORD,ofX:DWORD,ofY:DWORD,rX:DWORD,rY:DWORD,rgbCl:DWORD
  131.  LOCAL FlagCr:WORD
  132.  LOCAl hDC:DWORD
  133.  LOCAL pX:DWORD
  134.  LOCAL pY:DWORD
  135.  LOCAL Angle:DWORD
  136.  
  137.  
  138.       finit
  139.       fstcw FlagCr 
  140.       or FlagCr,  0011000000000b
  141.       fldcw FlagCr 
  142.  
  143.       fild Angle 
  144.       fstp Angle
  145.  
  146.     invoke GetDC,hWin
  147.     mov hDC,eax      
  148.  
  149. DrawEllipseSinCos_loop:
  150.  
  151.     mov pX, 3
  152.     fild pX
  153.     fsin
  154.     fstp pX 
  155.  
  156.     fld pX 
  157.     fld Angle
  158.     fadd st(0),st(1)
  159.     fist pX
  160.     cmp pX, 540 
  161.     ja DrawEllipseSinCos_loop_exit
  162.     fstp Angle
  163.     fstp pX
  164.  
  165.     fld Angle
  166.     fcos
  167.     fild rX
  168.     fmul st(1),st(0)
  169.     fistp pX
  170.     fistp pX
  171.     mov eax, ofX
  172.     add pX, eax
  173.    
  174.     fld Angle
  175.     fsin
  176.     fild rY
  177.     fmul st(1),st(0)
  178.     fistp pY
  179.     fistp pY
  180.     mov eax,ofY
  181.     add pY,eax
  182.     
  183.     invoke SetPixel, hDC, pX,pY, rgbCl
  184.  
  185.     jmp DrawEllipseSinCos_loop  
  186.  
  187. DrawEllipseSinCos_loop_exit:
  188.  
  189.     invoke ReleaseDC, hWin, hDC
  190.  
  191.  ret
  192. DrawEllipseSinCos endp
  193. end start
  194.