Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .686
- .model flat,stdcall
- option casemap:none
- WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
- count proto
- include C:\masm32\include\windows.inc
- include C:\masm32\include\user32.inc
- include C:\masm32\include\kernel32.inc
- include C:\masm32\include\gdi32.inc
- include C:\masm32\include\masm32.inc
- include C:\masm32\include\shlwapi.inc
- includelib C:\masm32\lib\user32.lib
- includelib C:\masm32\lib\kernel32.lib
- includelib C:\masm32\lib\gdi32.lib
- includelib C:\masm32\lib\masm32.lib
- includelib C:\masm32\lib\shlwapi.lib
- .data
- ps PAINTSTRUCT <>
- rc RECT <>
- brushBack dd ?
- hdc dd ?
- ClassName db "SimpleWinClass",0
- ClassName1 db "OtherWinClass",0
- AppName db "Настройка",0
- AppNam1e db "График",0
- LineName db "Линия",0
- PointName db "Точки",0
- ButtonClassName db "button",0
- ButtonText db "Построить",0
- EditClassName db "edit",0
- STATIC db "STATIC",0
- ame1 db "Максимум x:",0
- ame2 db "Минимум x:",0
- ame3 db "Шаг",0
- flg db 1
- sin dq 0.0
- cos dq 0.0
- repp dd 450
- chx dq ?
- bordX dq 2.64
- mushX dd 1
- mushY dd 1
- intX dd ?
- intY dd ?
- minX dq ?
- maxX dq ?
- minY dd -70000
- maxY dd 4000
- x0 dd 0
- hwnd1 dd ?
- y0 dd ?
- hInstance HINSTANCE ?
- CommandLine LPSTR ?
- hwndButton HWND ?
- hwndEditMaxX HWND ?
- hwndEditMaxY HWND ?
- hwndEditStep HWND ?
- hdl dd ?
- tmp dd ?
- buffer db 25 dup(?)
- a dq ?
- x dq ?
- res dq ?
- d dd 2
- .const
- ButtonID equ 1
- LINE_RB equ 131
- POINT_RB equ 132
- EditID equ 2
- IDM_EXIT equ 4
- .code
- start:
- invoke GetModuleHandle, NULL
- mov hInstance,eax
- invoke WinMain, hInstance,NULL,NULL,NULL
- invoke ExitProcess,eax
- WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
- LOCAL wc:WNDCLASSEX
- LOCAL msg:MSG
- LOCAL hwnd:HWND
- LOCAL wc1:WNDCLASSEX
- mov wc1.cbSize,SIZEOF WNDCLASSEX
- mov wc1.style, CS_HREDRAW or CS_VREDRAW
- mov wc1.lpfnWndProc, OFFSET WndProc1
- mov wc1.cbClsExtra,NULL
- mov wc1.cbWndExtra,NULL
- push hInstance
- pop wc1.hInstance
- mov wc1.hbrBackground, 6
- mov wc1.lpszMenuName,0
- mov wc1.lpszClassName,OFFSET ClassName1
- invoke LoadIcon,NULL,IDI_APPLICATION
- mov wc1.hIcon,eax
- invoke LoadCursor,NULL,IDC_ARROW
- mov wc1.hCursor,eax
- invoke RegisterClassEx, addr wc1
- mov wc.cbSize,SIZEOF WNDCLASSEX
- mov wc.style, CS_HREDRAW or CS_VREDRAW
- mov wc.lpfnWndProc, OFFSET WndProc
- mov wc.cbClsExtra,NULL
- mov wc.cbWndExtra,NULL
- push hInst
- pop wc.hInstance
- mov wc.hbrBackground, 5
- mov wc.lpszMenuName,0
- mov wc.lpszClassName,OFFSET ClassName
- invoke LoadIcon,NULL,IDI_APPLICATION
- mov wc.hIcon,eax
- invoke LoadCursor,NULL,IDC_ARROW
- mov wc.hCursor,eax
- invoke RegisterClassEx, addr wc
- INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
- WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
- CW_USEDEFAULT,400,300,NULL,NULL,\
- hInst,NULL
- mov hwnd,eax
- INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
- INVOKE UpdateWindow, hwnd
- .WHILE TRUE
- INVOKE GetMessage, ADDR msg,NULL,0,0
- .BREAK .IF (!eax)
- INVOKE TranslateMessage, ADDR msg
- INVOKE DispatchMessage, ADDR msg
- .ENDW
- mov eax,msg.wParam
- ret
- WinMain endp
- WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
- .IF uMsg==WM_DESTROY
- invoke PostQuitMessage,NULL
- ret
- .ELSEIF uMsg==WM_CREATE
- invoke CreateWindowEx,WS_EX_LEFT, ADDR STATIC,ADDR ame1,\
- WS_CHILD or WS_VISIBLE,\
- 5,5,100,25,hWnd,NULL,hInstance,NULL
- invoke CreateWindowEx,WS_EX_LEFT, ADDR STATIC,ADDR ame2,\
- WS_CHILD or WS_VISIBLE,\
- 5,35,100,25,hWnd,NULL,hInstance,NULL
- invoke CreateWindowEx,WS_EX_LEFT, ADDR STATIC,ADDR ame3,\
- WS_CHILD or WS_VISIBLE,\
- 5,65,100,25,hWnd,NULL,hInstance,NULL
- invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
- WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
- ES_AUTOHSCROLL,\
- 95,5,100,25,hWnd,EditID,hInstance,NULL
- mov hwndEditMaxX,eax
- invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
- WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
- ES_AUTOHSCROLL,\
- 95,35,100,25,hWnd,EditID,hInstance,NULL
- mov hwndEditMaxY,eax
- invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,\
- WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
- ES_AUTOHSCROLL,\
- 95,65,100,25,hWnd,EditID,hInstance,NULL
- mov hwndEditStep,eax
- invoke SetFocus, hwndEditMaxX
- invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\
- WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
- 95,95,100,25,hWnd,ButtonID,hInstance,NULL
- mov hwndButton,eax
- invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR LineName,\
- WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,\
- 95,125,100,25,hWnd,LINE_RB,hInstance,NULL
- invoke SendMessage,eax,BM_SETCHECK,BST_CHECKED,0
- invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR PointName,\
- WS_CHILD or WS_VISIBLE or BS_AUTORADIOBUTTON,\
- 95,155,100,25,hWnd,POINT_RB,hInstance,NULL
- .ELSEIF uMsg==WM_COMMAND
- mov eax,wParam
- .IF ax==130
- INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName1,ADDR AppNam1e,\
- WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
- CW_USEDEFAULT,800,600,0,NULL,\
- hInstance,NULL
- mov hwnd1,eax
- INVOKE ShowWindow, hwnd1,SW_SHOWNORMAL
- INVOKE UpdateWindow, hwnd1
- .ELSEIF ax==LINE_RB
- mov flg,0
- .ELSEIF ax==POINT_RB
- mov flg,1
- .ELSE
- .IF ax==ButtonID
- shr eax,16
- .IF ax==BN_CLICKED
- invoke GetWindowText,hwndEditMaxX,ADDR buffer,25
- invoke StrToFloat, ADDR buffer, ADDR maxX
- invoke GetWindowText,hwndEditMaxY, ADDR buffer,25
- invoke StrToFloat, ADDR buffer, ADDR minX
- invoke GetWindowText,hwndEditStep,ADDR buffer,25
- invoke StrToFloat, ADDR buffer, ADDR chx
- invoke SendMessage,hWnd,WM_COMMAND,130,0
- .ENDIF
- .ENDIF
- .ENDIF
- .ELSE
- invoke DefWindowProc,hWnd,uMsg,wParam,lParam
- ret
- .ENDIF
- xor eax,eax
- ret
- WndProc endp
- WndProc1 proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
- .IF uMsg==WM_DESTROY
- invoke DestroyWindow,hWnd
- ret
- .ELSEIF uMsg==WM_PAINT
- invoke GetClientRect, hWnd, offset rc
- invoke BeginPaint, hWnd, ADDR ps
- mov hdc,eax
- invoke CreatePen,PS_SOLID, 2, 00000000h
- mov brushBack, eax
- invoke SelectObject,hdc,brushBack
- fild rc.bottom
- fidiv d
- fistp y0
- fld maxX
- fsub minX
- fidivr rc.right
- fstp mushX
- fild rc.bottom
- fild maxY
- fisub minY
- fdiv
- fstp mushY
- fld maxX
- fmul mushX
- fisubr rc.right
- fistp x0
- invoke MoveToEx,hdc,x0,0,0
- invoke LineTo,hdc,x0,rc.bottom
- invoke MoveToEx,hdc,0,y0,0
- invoke LineTo,hdc,rc.right,y0
- invoke CreatePen,PS_SOLID, 3, 002020FFh
- mov brushBack, eax
- invoke SelectObject,hdc,brushBack
- fld maxX
- fsub minX
- fdiv chx
- fistp dword ptr repp
- mov ecx, repp
- fld minX
- fcomp bordX
- fstsw ax
- sahf
- jnc more
- fld bordX
- jmp lower
- more:
- fld minX
- lower:
- fstp x
- invoke count
- push ecx
- invoke MoveToEx, hdc, intX, intY, 0
- pop ecx
- cnt:
- invoke count
- push ecx
- .IF flg==1
- invoke MoveToEx, hdc, intX, intY, 0
- .ENDIF
- invoke LineTo, hdc, intX, intY
- pop ecx
- fld x
- fadd chx
- fstp x
- loop cnt
- invoke EndPaint, hWnd, ADDR ps
- .ELSE
- invoke DefWindowProc,hWnd,uMsg,wParam,lParam
- ret
- .ENDIF
- xor eax,eax
- ret
- WndProc1 endp
- jmp enddd
- count proc
- pushad
- fld x
- fmul x
- mov dword ptr tmp, 26
- fiadd tmp
- fsqrt
- fldl2e
- fmul
- fld st
- frndint
- fsub st(1), st
- fxch st(1)
- f2xm1
- fld1
- fadd
- fscale
- fldpi
- fsub x
- fcos
- fmul
- fstp res
- fld x
- fmul x
- fmul x
- mov dword ptr tmp, 18
- fisub tmp
- fld x
- fmul x
- mov dword ptr tmp, 11
- fiadd tmp
- fdiv
- fldln2
- fxch
- fyl2x
- fsub res
- fmul mushY
- fild y0
- fsubr
- fistp intY
- fld x
- fmul mushX
- fiadd x0
- fistp dword ptr intX
- popad
- ffree st(0)
- ffree st(1)
- ffree st(2)
- ffree st(3)
- ffree st(4)
- ffree st(5)
- ffree st(6)
- ffree st(7)
- ret
- count endp
- enddd:
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement