Very basic calc with 4 math operator support (+,-,*,/). Just for fun:
Language assembler.
;This program was created on assembler editor
.486
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include include\windows.inc
include include\user32.inc
include include\kernel32.inc
includelib lib\user32.lib
includelib lib\kernel32.lib
.data
ClassName db "SimpleWinClass",0
AppName db "JustCalc",0
MenuName db "FirstMenu",0
ButtonClassName db "button",0
EditClassName db "edit",0
LabelClassName DB "STATIC", 0
ButtonText2 db "+",0
ButtonText3 db "-",0
ButtonText4 db "*",0
ButtonText5 db "/",0
text1 db "Number1",0
text2 db "Number2",0
dlg db "ok",0
format db '%d',0
.data?
op1 dd 0
op2 dd 0
result dd 0
string db 30 DUP(0)
hInstance HINSTANCE ?
CommandLine LPSTR ?
hwndButton HWND ?
hwndButton2 HWND ?
hwndButton3 HWND ?
hwndButton4 HWND ?
hwndEdit HWND ?
hwndEdit2 HWND ?
hwndLabell DD ?
hwndLabell2 DD ?
.const
ButtonID equ 1
Button2ID equ 2
Button3ID equ 3
Button4ID equ 12
EditID equ 4
Edit2ID equ 5
LabelID EQU 8
Label2ID equ 9
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
invoke CreateWindowEx, NULL,ADDR LabelClassName, NULL,WS_CHILD or WS_VISIBLE ,12, 1, 130, 15, hWnd, LabelID,hInstance, NULL
mov hwndLabell, eax
invoke SetWindowText, hwndLabell, ADDR text1
invoke CreateWindowEx, NULL,ADDR LabelClassName, NULL,WS_CHILD or WS_VISIBLE ,12, 41, 130, 15, hWnd, Label2ID,hInstance, NULL
mov hwndLabell2, eax
invoke SetWindowText, hwndLabell2, ADDR text2
invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL or ES_NUMBER,12,18,160,25,hWnd,EditID,hInstance,NULL
mov hwndEdit,eax
invoke SetFocus, hwndEdit
invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR EditClassName,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL or ES_NUMBER,12,60,160,25,hWnd,Edit2ID,hInstance,NULL
mov hwndEdit2,eax
invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText2,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,15,100,22,25,hWnd,ButtonID,hInstance,NULL
mov hwndButton,eax
invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText3,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,60,100,22,25,hWnd,Button2ID,hInstance,NULL
mov hwndButton2,eax
invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText4,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,105,100,22,25,hWnd,Button3ID,hInstance,NULL
mov hwndButton3,eax
invoke CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText5,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,150,100,22,25,hWnd,Button4ID,hInstance,NULL
mov hwndButton4,eax
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
.IF lParam==0
.ELSE
.IF ax==ButtonID
shr eax,16
.IF ax==BN_CLICKED
invoke GetDlgItemInt,hWnd,EditID,0,1
mov op1,eax
invoke GetDlgItemInt,hWnd,Edit2ID,0,1
add eax,op1
invoke wsprintf,addr string,addr format,eax
invoke MessageBox,0,addr string,addr dlg,MB_OK
.ENDIF
.ENDIF
.IF ax==Button2ID
shr eax,16
.IF ax==BN_CLICKED
invoke GetDlgItemInt,hWnd,EditID,0,1
mov op1,eax
invoke GetDlgItemInt,hWnd,Edit2ID,0,1
sub eax,op1
neg eax
invoke wsprintf,addr string,addr format,eax
invoke MessageBox,0,addr string,addr dlg,MB_OK
.ENDIF
.ENDIF
.IF ax==Button4ID
shr eax,16
.IF ax==BN_CLICKED
invoke GetDlgItemInt,hWnd,Edit2ID,0,1
mov ebx,eax
invoke GetDlgItemInt,hWnd,EditID,0,1
div ebx
invoke wsprintf,addr string,addr format,eax
invoke MessageBox,0,addr string,addr dlg,MB_OK
.ENDIF
.ENDIF
.IF ax==Button3ID
shr eax,16
.IF ax==BN_CLICKED
invoke GetDlgItemInt,hWnd,EditID,0,1
mov op1,eax
invoke GetDlgItemInt,hWnd,Edit2ID,0,1
imul eax,op1
invoke wsprintf,addr string,addr format,eax
invoke MessageBox,0,addr string,addr dlg,MB_OK
.ENDIF
.ENDIF
.ENDIF
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
WndProc endp
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
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,COLOR_BTNFACE+1
mov wc.lpszMenuName,OFFSET MenuName
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
WS_SYSMENU,CW_USEDEFAULT,\
CW_USEDEFAULT,200,200,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
end start