home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / FloatChess.asm < prev    next >
Assembly Source File  |  2014-02-08  |  5KB  |  195 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.   DrawFloatChessLoc PROTO :DWORD, :DWORD, :DWORD,:DWORD,:DWORD
  24.   FloatDivMulLoc PROTO :DWORD, :DWORD, :DWORD
  25.  
  26. .data
  27.  
  28.  szClassName   db "Evgeney_Victorovich_Kupin_27_April_1982",0
  29.  szDisplayName db "Float chess",0
  30.  
  31.  
  32.  CommandLine   dd 0
  33.  hWnd          dd 0
  34.  hInstance     dd 0
  35.  
  36.  hIcon                   dd  ? 
  37.  
  38.  
  39. .code
  40.  
  41. start:
  42.       invoke GetModuleHandle, NULL
  43.       mov hInstance, eax
  44.  
  45.       invoke GetCommandLine
  46.       mov CommandLine, eax
  47.  
  48.       invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT
  49.       invoke ExitProcess,eax
  50.  
  51. WinMain proc hInst     :DWORD, hPrevInst :DWORD, CmdLine   :DWORD, CmdShow   :DWORD
  52.  
  53.       LOCAL wc   :WNDCLASSEX
  54.       LOCAL msg  :MSG
  55.  
  56.       mov wc.cbSize,          sizeof WNDCLASSEX
  57.       mov wc.style,           CS_HREDRAW or CS_VREDRAW \
  58.                               or CS_BYTEALIGNWINDOW
  59.       mov  wc.lpfnWndProc,    offset WndProc
  60.       mov  wc.cbClsExtra,     NULL
  61.       mov  wc.cbWndExtra,     NULL
  62.       push hInst
  63.       pop  wc.hInstance
  64.       mov  wc.hbrBackground,  COLOR_WINDOW
  65.       mov  wc.lpszMenuName,   NULL
  66.       mov  wc.lpszClassName,  offset szClassName
  67.       push hIcon
  68.       pop  wc.hIcon
  69.       invoke LoadCursor,NULL,IDC_ARROW
  70.       mov  wc.hCursor,        eax
  71.       push hIcon 
  72.       pop  wc.hIconSm
  73.  
  74.       invoke RegisterClassEx, ADDR wc
  75.  
  76.  
  77.       invoke CreateWindowEx,WS_EX_LEFT,
  78.                             ADDR szClassName,
  79.                             ADDR szDisplayName,
  80.                             WS_OVERLAPPEDWINDOW or WS_SYSMENU,
  81.                             0,0,640,510,
  82.                             NULL,NULL,
  83.                             hInst,NULL
  84.       mov   hWnd,eax
  85.  
  86.       invoke ShowWindow,hWnd,SW_SHOWNORMAL
  87.       invoke UpdateWindow,hWnd
  88.  
  89.     StartLoop:
  90.       invoke GetMessage,ADDR msg,NULL,0,0
  91.       cmp eax, 0
  92.       je ExitLoop
  93.       invoke TranslateMessage, ADDR msg
  94.       invoke DispatchMessage,  ADDR msg
  95.       jmp StartLoop
  96.     ExitLoop:
  97.  
  98.       return msg.wParam
  99.  
  100. WinMain endp
  101.  
  102.  
  103. WndProc proc hWin   :DWORD, uMsg   :DWORD, wParam :DWORD, lParam :DWORD
  104.     LOCAL Ps   :PAINTSTRUCT
  105.     LOCAL hDC  :DWORD
  106.     LOCAL strRC:RECT 
  107.  
  108.     .if uMsg == WM_CREATE
  109.  
  110.         return 0
  111.  
  112.    .elseif uMsg == WM_PAINT
  113.         invoke BeginPaint,hWin,ADDR Ps
  114.         mov hDC, eax
  115.  
  116.         invoke GetClientRect, hWin,  addr strRC 
  117.      
  118.         invoke DrawFloatChessLoc, hDC, strRC.right, strRC.bottom, 21, 18
  119.  
  120.         invoke EndPaint,hWin,ADDR Ps
  121.         return 0
  122.  
  123.     .elseif uMsg == WM_DESTROY
  124.         invoke PostQuitMessage,NULL
  125.         return 0 
  126.     .endif
  127.  
  128.     invoke DefWindowProc,hWin,uMsg,wParam,lParam
  129.  
  130.     ret
  131.  
  132. WndProc endp
  133.  
  134. DrawFloatChessLoc proc hDC:DWORD, tlX:DWORD, tlY:DWORD, nSecX:DWORD, nSecY:DWORD
  135.   LOCAl  clDiv:DWORD
  136.   LOCAl clPosX:DWORD
  137.   LOCAl clPosY:DWORD
  138.   LOCAL clCounter:DWORD
  139.   LOCAL lcEnd:DWORD
  140.  
  141.       mov eax, nSecX
  142.       mov lcEnd, eax  
  143.       cmp eax, nSecY
  144.       ja  DrawFloatChessLoc_X_alter
  145.       mov eax, nSecY
  146.       mov lcEnd,eax
  147.  
  148. DrawFloatChessLoc_X_alter:
  149.       mov clCounter,1  
  150.  
  151. DrawFloatChessLoc_loop:
  152.  
  153.     invoke FloatDivMulLoc, tlX, nSecX, clCounter 
  154.     mov clPosX,eax
  155.  
  156.     invoke FloatDivMulLoc, tlY, nSecY, clCounter 
  157.     mov clPosY,eax
  158.     
  159.     invoke  MoveToEx, hDC,  clPosX,  0, 0
  160.     invoke LineTo , hDC,  clPosX,  tlY
  161.  
  162.     invoke  MoveToEx, hDC,  0,  clPosY, 0
  163.     invoke LineTo , hDC,  tlX,clPosY
  164.  
  165.     inc clCounter 
  166.     mov ecx, clCounter
  167.     cmp ecx,  lcEnd  
  168.     jna DrawFloatChessLoc_loop  
  169.  
  170.     ret
  171. DrawFloatChessLoc endp
  172.  
  173. FloatDivMulLoc proc  bsVal:DWORD, nDiv:DWORD, nMul:DWORD
  174.   LOCAL FlagCr:WORD
  175.   LOCAL lcResult:DWORD
  176.  
  177.      finit
  178.       fstcw FlagCr 
  179.       or FlagCr,  0011000000000b
  180.       fldcw FlagCr 
  181.  
  182.     fild  nDiv
  183.      fild bsVal
  184.      fdiv st(0),st(1)
  185.  
  186.     fild nMul
  187.     fmul st(0),st(1)
  188.     fistp lcResult
  189.  
  190.     mov eax, lcResult 
  191.  
  192.      ret
  193. FloatDivMulLoc endp
  194. end start
  195.