Advertisement
Guest User

Untitled

a guest
Dec 20th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .686
  2. .model flat,stdcall
  3. option casemap:none
  4. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
  5. count proto
  6. include C:\masm32\include\windows.inc
  7. include C:\masm32\include\user32.inc
  8. include C:\masm32\include\kernel32.inc
  9. include C:\masm32\include\gdi32.inc
  10. include C:\masm32\include\masm32.inc
  11. include C:\masm32\include\shlwapi.inc
  12. includelib C:\masm32\lib\user32.lib
  13. includelib C:\masm32\lib\kernel32.lib
  14. includelib C:\masm32\lib\gdi32.lib
  15. includelib C:\masm32\lib\masm32.lib
  16. includelib C:\masm32\lib\shlwapi.lib
  17.  
  18.  
  19. .data
  20. ps PAINTSTRUCT <>
  21. rc RECT <>
  22. brushBack dd ?
  23. hdc dd ?
  24. ClassName db "SimpleWinClass",0
  25. ClassName1 db "OtherWinClass",0
  26. AppName db "Настройка",0
  27. AppNam1e db "График",0
  28. LineName db "Линия",0
  29. PointName db "Точки",0
  30. ButtonClassName db "button",0
  31. ButtonText db "Построить",0
  32. EditClassName db "edit",0
  33. STATIC db "STATIC",0
  34. ame1 db "Максимум x:",0
  35. ame2 db "Минимум x:",0
  36. ame3 db "Шаг",0
  37. flg db 1
  38. sin dq 0.0
  39. cos dq 0.0
  40. repp dd 450
  41. chx dq ?
  42. bordX dq 2.64
  43. mushX dd 1
  44. mushY dd 1
  45. intX dd ?
  46. intY dd ?
  47. minX dq ?
  48. maxX dq ?
  49. minY dd -70000
  50. maxY dd 4000
  51. x0 dd 0
  52. hwnd1 dd ?
  53. y0 dd ?
  54. hInstance HINSTANCE ?
  55. CommandLine LPSTR ?
  56. hwndButton HWND ?
  57. hwndEditMaxX HWND ?
  58. hwndEditMaxY HWND ?
  59. hwndEditStep HWND ?
  60. hdl dd ?
  61. tmp dd ?
  62. buffer db 25 dup(?)
  63. a dq ?
  64. x dq ?
  65. res dq ?
  66. d dd 2
  67.  
  68. .const
  69. ButtonID equ 1
  70. LINE_RB equ 131
  71. POINT_RB equ 132
  72. EditID equ 2
  73. IDM_EXIT equ 4
  74.  
  75. .code
  76. start:
  77.     invoke GetModuleHandle, NULL
  78.     mov    hInstance,eax
  79.     invoke WinMain, hInstance,NULL,NULL,NULL
  80.     invoke ExitProcess,eax
  81. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
  82.     LOCAL wc:WNDCLASSEX
  83.     LOCAL msg:MSG
  84.     LOCAL hwnd:HWND
  85.     LOCAL wc1:WNDCLASSEX
  86.     mov   wc1.cbSize,SIZEOF WNDCLASSEX
  87.     mov   wc1.style, CS_HREDRAW or CS_VREDRAW
  88.     mov   wc1.lpfnWndProc, OFFSET WndProc1
  89.     mov   wc1.cbClsExtra,NULL
  90.     mov   wc1.cbWndExtra,NULL
  91.     push  hInstance
  92.     pop   wc1.hInstance
  93.     mov   wc1.hbrBackground, 6
  94.     mov   wc1.lpszMenuName,0
  95.     mov   wc1.lpszClassName,OFFSET ClassName1
  96.     invoke LoadIcon,NULL,IDI_APPLICATION
  97.     mov   wc1.hIcon,eax
  98.     invoke LoadCursor,NULL,IDC_ARROW
  99.     mov   wc1.hCursor,eax
  100.     invoke RegisterClassEx, addr wc1
  101.     mov   wc.cbSize,SIZEOF WNDCLASSEX
  102.     mov   wc.style, CS_HREDRAW or CS_VREDRAW
  103.     mov   wc.lpfnWndProc, OFFSET WndProc
  104.     mov   wc.cbClsExtra,NULL
  105.     mov   wc.cbWndExtra,NULL
  106.     push  hInst
  107.     pop   wc.hInstance
  108.     mov   wc.hbrBackground, 5
  109.     mov   wc.lpszMenuName,0
  110.     mov   wc.lpszClassName,OFFSET ClassName
  111.     invoke LoadIcon,NULL,IDI_APPLICATION
  112.     mov   wc.hIcon,eax
  113.     invoke LoadCursor,NULL,IDC_ARROW
  114.     mov   wc.hCursor,eax
  115.     invoke RegisterClassEx, addr wc
  116.     INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
  117.            WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
  118.            CW_USEDEFAULT,400,300,NULL,NULL,\
  119.            hInst,NULL
  120.     mov   hwnd,eax
  121.     INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
  122.     INVOKE UpdateWindow, hwnd
  123.  
  124.     .WHILE TRUE
  125.                 INVOKE GetMessage, ADDR msg,NULL,0,0
  126.                 .BREAK .IF (!eax)
  127.                 INVOKE TranslateMessage, ADDR msg
  128.                 INVOKE DispatchMessage, ADDR msg
  129.     .ENDW
  130.     mov     eax,msg.wParam
  131.     ret
  132. WinMain endp
  133. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  134.  
  135.     .IF uMsg==WM_DESTROY
  136.         invoke PostQuitMessage,NULL
  137.         ret
  138.     .ELSEIF uMsg==WM_CREATE
  139.                         invoke CreateWindowEx,WS_EX_LEFT, ADDR STATIC,ADDR ame1,\
  140.                         WS_CHILD or WS_VISIBLE,\
  141.                         5,5,100,25,hWnd,NULL,hInstance,NULL
  142.                         invoke CreateWindowEx,WS_EX_LEFT, ADDR STATIC,ADDR ame2,\
  143.                         WS_CHILD or WS_VISIBLE,\
  144.                         5,35,100,25,hWnd,NULL,hInstance,NULL
  145.                         invoke CreateWindowEx,WS_EX_LEFT, ADDR STATIC,ADDR ame3,\
  146.                         WS_CHILD or WS_VISIBLE,\
  147.                         5,65,100,25,hWnd,NULL,hInstance,NULL
  148.                 invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
  149.                         WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
  150.                         ES_AUTOHSCROLL,\
  151.                         95,5,100,25,hWnd,EditID,hInstance,NULL
  152.         mov  hwndEditMaxX,eax
  153.                 invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
  154.                         WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
  155.                         ES_AUTOHSCROLL,\
  156.                         95,35,100,25,hWnd,EditID,hInstance,NULL
  157.         mov  hwndEditMaxY,eax
  158.                 invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
  159.                         WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
  160.                         ES_AUTOHSCROLL,\
  161.                         95,65,100,25,hWnd,EditID,hInstance,NULL
  162.         mov  hwndEditStep,eax
  163.         invoke SetFocus, hwndEditMaxX
  164.         invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\
  165.                         WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
  166.                         95,95,100,25,hWnd,ButtonID,hInstance,NULL
  167.         mov  hwndButton,eax
  168.         invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR LineName,\
  169.                         WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,\
  170.                         95,125,100,25,hWnd,LINE_RB,hInstance,NULL
  171.         invoke SendMessage,eax,BM_SETCHECK,BST_CHECKED,0
  172.         invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR PointName,\
  173.                         WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,\
  174.                         95,155,100,25,hWnd,POINT_RB,hInstance,NULL
  175.     .ELSEIF uMsg==WM_COMMAND
  176.                 mov eax,wParam
  177.         .IF ax==130
  178.             INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName1,ADDR AppNam1e,\
  179.            WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
  180.            CW_USEDEFAULT,800,600,0,NULL,\
  181.            hInstance,NULL
  182.             mov   hwnd1,eax
  183.             INVOKE ShowWindow, hwnd1,SW_SHOWNORMAL
  184.             INVOKE UpdateWindow, hwnd1
  185.         .ELSEIF ax==LINE_RB
  186.                  mov flg,0
  187.         .ELSEIF ax==POINT_RB
  188.                  mov flg,1
  189.         .ELSE
  190.             .IF ax==ButtonID
  191.                 shr eax,16
  192.                 .IF ax==BN_CLICKED
  193.                     invoke GetWindowText,hwndEditMaxX,ADDR buffer,25
  194.                     invoke StrToFloat, ADDR buffer, ADDR maxX
  195.                     invoke GetWindowText,hwndEditMaxY, ADDR buffer,25
  196.                     invoke StrToFloat, ADDR buffer, ADDR minX
  197.                     invoke GetWindowText,hwndEditStep,ADDR buffer,25
  198.                     invoke StrToFloat, ADDR buffer, ADDR chx
  199.                     invoke SendMessage,hWnd,WM_COMMAND,130,0
  200.                 .ENDIF
  201.             .ENDIF
  202.         .ENDIF
  203.     .ELSE
  204.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  205.         ret
  206.     .ENDIF
  207.     xor    eax,eax
  208.     ret
  209. WndProc endp
  210.  
  211. WndProc1  proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  212.     .IF uMsg==WM_DESTROY
  213.         invoke DestroyWindow,hWnd
  214.         ret
  215.         .ELSEIF uMsg==WM_PAINT
  216.         invoke GetClientRect, hWnd, offset rc
  217.         invoke BeginPaint, hWnd, ADDR ps
  218.         mov hdc,eax
  219.         invoke CreatePen,PS_SOLID, 2, 00000000h
  220.         mov brushBack, eax
  221.         invoke SelectObject,hdc,brushBack
  222.         fild rc.bottom
  223.         fidiv d
  224.         fistp y0
  225.         fld maxX
  226.         fsub minX
  227.         fidivr rc.right
  228.         fstp mushX
  229.         fild rc.bottom
  230.         fild maxY
  231.         fisub minY
  232.         fdiv
  233.         fstp mushY
  234.         fld maxX
  235.         fmul mushX
  236.         fisubr rc.right
  237.         fistp x0
  238.         invoke MoveToEx,hdc,x0,0,0
  239.         invoke LineTo,hdc,x0,rc.bottom
  240.         invoke MoveToEx,hdc,0,y0,0
  241.         invoke LineTo,hdc,rc.right,y0
  242.         invoke CreatePen,PS_SOLID, 3, 002020FFh
  243.         mov brushBack, eax
  244.         invoke SelectObject,hdc,brushBack
  245.  
  246.         fld maxX
  247.         fsub minX
  248.         fdiv chx
  249.         fistp dword ptr repp
  250.         mov ecx, repp
  251.         fld minX
  252.         fcomp bordX
  253.         fstsw ax
  254.         sahf
  255.         jnc more
  256.         fld bordX
  257.         jmp lower
  258.         more:
  259.         fld minX
  260.         lower:
  261.         fstp x
  262.         invoke count
  263.         push ecx
  264.         invoke MoveToEx, hdc, intX, intY, 0
  265.         pop ecx
  266.         cnt:
  267.         invoke count
  268.         push ecx
  269.         .IF flg==1
  270.             invoke MoveToEx, hdc, intX, intY, 0
  271.         .ENDIF
  272.             invoke LineTo, hdc, intX, intY
  273.         pop ecx
  274.         fld x
  275.         fadd chx
  276.         fstp x
  277.         loop cnt
  278.         invoke EndPaint, hWnd, ADDR ps
  279.     .ELSE
  280.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  281.         ret
  282.     .ENDIF
  283.     xor    eax,eax
  284.     ret
  285. WndProc1 endp
  286.  
  287. jmp enddd
  288.  
  289.     count proc
  290.         pushad
  291.             fld x
  292.             fmul x
  293.             mov dword ptr tmp, 26
  294.             fiadd tmp
  295.             fsqrt
  296.             fldl2e
  297.             fmul
  298.             fld     st
  299.             frndint
  300.             fsub    st(1), st
  301.             fxch    st(1)
  302.             f2xm1
  303.             fld1
  304.             fadd
  305.             fscale
  306.             fldpi
  307.             fsub x
  308.             fcos
  309.             fmul
  310.             fstp res
  311.             fld x
  312.             fmul x
  313.             fmul x
  314.             mov dword ptr tmp, 18
  315.             fisub tmp
  316.             fld x
  317.             fmul x
  318.             mov dword ptr tmp, 11
  319.             fiadd tmp
  320.             fdiv
  321.             fldln2
  322.             fxch
  323.             fyl2x
  324.             fsub res
  325.         fmul mushY
  326.         fild y0
  327.         fsubr
  328.         fistp intY
  329.         fld x
  330.         fmul  mushX
  331.         fiadd x0
  332.         fistp dword ptr intX
  333.  
  334.         popad
  335.         ffree st(0)
  336.         ffree st(1)
  337.         ffree st(2)
  338.         ffree st(3)
  339.         ffree st(4)
  340.         ffree st(5)
  341.         ffree st(6)
  342.         ffree st(7)
  343.         ret
  344.         count endp
  345.  
  346.     enddd:
  347. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement