rendered paste body .386
.MODEL FLAT,STDCALL
locals
jumps
UNICODE = 0 ; Not Unicode
include \w32\w32.inc
IDC_STATIC equ -1
IDD_DIALOG1 equ 103
IDD_DIALOG2 equ 104
IDI_ICON equ 105
ICON_SMALL equ 0
ID_but0 equ 2000
ID_but1 equ 2001
ID_but2 equ 2002
ID_but3 equ 2003
ID_but4 equ 2004
ID_but5 equ 2005
ID_but6 equ 2006
ID_but7 equ 2007
ID_but8 equ 2008
ID_but9 equ 2009
ID_butMult equ 2010
ID_butDiv equ 2011
ID_butPlus equ 2012
ID_butMinus equ 2013
ID_butPoint equ 2014
ID_butNeg equ 2015
ID_butEqu equ 2016
ID_butCE equ 2017
ID_butAC equ 2018
ID_EDIT1 equ 2020
IDM_NEW equ 4000
IDM_ABO equ 4001
IDM_EXIT equ 4002
.DATA
;[--------==========================================================--------];
_hInst dd ? ;the hInst
_hWnd dd ? ;Window Handle
_hIcon dd ?
fmat1 db "%lu", 0 ; Unsigned decimal long.
fmat2 db "%lX", 0 ; Hexadecimal long.
_msg MSG <?> ;The message Structure
_pnt PAINTSTRUCT <?>
DlgRect RECT <>
DlgWidth dd ?
DlgHeight dd ?
DesktopRect RECT <>
db 0
tbuff1 db 256 dup(0)
db 0
tbuff2 db 256 dup(0)
nullbuff db 0
inedit dd 0
number1 dq 00.00 ; Number 1
number2 dq 00.00 ; Number 2
operator db 0 ; ( '+' '-' '*' '/' )
.CODE
;[--------==========================================================--------];
main:
mov eax, offset notPt
call GetModuleHandle, NULL ; Get the handle to our app
mov _hinst, eax
call InitCommonControls
call DialogBoxParamA, _hinst, IDD_DIALOG1, 0, offset DlgProc, 0
call ExitProcess ; Exit the main process
;[--------==========================================================--------];
PUBLIC DlgProc
DlgProc proc STDCALL, __hwnd:DWORD, wmsg:DWORD, _wparam:DWORD, _lparam:DWORD
USES ebx, edi, esi
mov eax, wmsg
cmp ax, WM_DESTROY
je _wmdestroy
cmp ax, WM_CLOSE
je _wmdestroy
cmp ax, WM_COMMAND
je _wmcommand
cmp ax, WM_INITDIALOG
je _initdlg
cmp ax, WM_PAINT
je _paint
xor eax,eax
ret
;---------------------------------------;
_wmdestroy:
call EndDialog, __hWnd, 0 ; End the Dialog
call ExitProcess ; Exit Process
ret
;---------------------------------------;
_wmcommand:
cmp _wparam, IDM_ABO
jne nohlp
call GetModuleHandle, NULL ; Get the handle to our app
call DialogBoxParamA, eax, IDD_DIALOG2, __hWnd, offset DlgProc2, 0
nohlp:
cmp _wparam, IDM_EXIT
jne noext
jmp _wmdestroy
noext:
cmp _wparam, ID_but0
jb nnumbut
cmp _wparam, ID_but9
ja nnumbut
call GetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1, 256
mov ebx, _wparam
sub ebx, ID_but0 - '0' ; Make ascii
mov byte ptr [offset tbuff1 + eax], bl
mov byte ptr [offset tbuff1 + eax + 1], 0
call SetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1
xor eax, eax
ret
nnumbut:cmp _wparam, ID_butCE
jne notCE
call SetDlgItemText, __hWnd, ID_EDIT1, offset nullbuff
xor eax, eax
ret
notCE: cmp _wparam, ID_butPoint
jne notPt
call GetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1, 256
mov byte ptr [offset tbuff1 + eax], '.'
mov byte ptr [offset tbuff1 + eax + 1], 0
call SetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1
xor eax, eax
ret
notPt: cmp _wparam, ID_butNeg
jne notNeg
call GetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1, 256
or eax, eax
jz nothneg
cmp byte ptr [offset tbuff1], '-'
je neg111
mov byte ptr [offset tbuff1 - 1], '-'
call SetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1 - 1
nothneg:xor eax, eax
ret
neg111: call SetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1 + 1
xor eax, eax
ret
notNeg:
;============================================================================;
cmp word ptr [offset _wparam], ID_EDIT1
jne noted
cmp word ptr [offset _wparam + 2], EN_UPDATE
jne noted
cmp inedit, 1
je noted
mov inedit, 1
call GetDlgItemText, __hWnd, ID_EDIT1, offset tbuff1, 256
mov esi, offset tbuff1
mov edi, offset tbuff2
cmp byte ptr [esi], '-'
jne nolead1
inc esi
mov byte ptr [edi], '-'
inc edi
nolead1:
mov ecx, 0 ; '.' count
mov edx, 0 ; started number yet? (0's)
loip1: mov al, byte ptr [esi]
inc esi
or ecx, ecx
jnz nyes1 ; No more '.'s
cmp al, '.'
jne nyes1
mov edx, 1
mov ecx, 1
jmp yess1
nyes1:
cmp al, 0
je yess1
cmp al, '0'
jb nooo1
jne no0s
cmp edx, 1
jne nooo1 ; Trim off start 0's
no0s: cmp al, '9'
ja nooo1
mov edx, 1
yess1: mov byte ptr [edi], al
inc edi
nooo1: cmp al, 0
jne loip1
call SetDlgItemText, __hWnd, ID_EDIT1, offset tbuff2
call SendDlgItemMessage, __hWnd, ID_EDIT1, WM_KEYDOWN, VK_END, NULL
mov inedit, 0
xor eax, eax
ret
noted:
xor eax, eax
ret
;---------------------------------------; Center dialog, put icon
_initdlg:
call LoadIcon, _hinst, IDI_ICON ; Load the Icon
mov _hIcon, eax ; Store Icon handle
call SendMessage, __hWnd, WM_SETICON, ICON_SMALL, eax ; Set icon
call GetWindowRect, __hWnd, offset DlgRect ; Get DlgRect
call GetDesktopWindow
call GetWindowRect, eax, offset DesktopRect ; Get Desktop rect
mov eax, DlgRect.rc_bottom
sub eax, DlgRect.rc_top
mov DlgHeight, eax ; Dialog box height
mov eax, DlgRect.rc_right
sub eax, DlgRect.rc_left
mov DlgWidth, eax ; Dialog box width
mov ebx, DesktopRect.rc_bottom
sub ebx, DlgHeight
shr ebx, 1 ; ebx = Start y
mov ecx, DesktopRect.rc_right
sub ecx, DlgWidth
shr ecx, 1 ; ecx = Start x
call MoveWindow, __hWnd, ecx, ebx, DlgWidth, DlgHeight, 0 ; Centre
ret
;---------------------------------------;
_paint:
call BeginPaint, __hWnd, offset _pnt
; push _hIcon ; Icon Handle
; push 204 ; Start Y
; push 10 ; Start X
; push eax ; The hDc (returned by BeginPaint)
; call DrawIcon ; Draw it
call EndPaint, __hwnd, offset _pnt
ret
DlgProc endp
;----------------------------------------------------------------------------;
PUBLIC DlgProc2
DlgProc2 proc STDCALL, __hwnd:DWORD, wmsg:DWORD, _wparam:DWORD, _lparam:DWORD
USES ebx, edi, esi
mov eax, wmsg
cmp ax, WM_DESTROY
je _wmdestroy2
cmp ax, WM_CLOSE
je _wmdestroy2
cmp ax, WM_COMMAND
je _wmcommand2
cmp ax, WM_INITDIALOG
je _initdlg2
cmp ax, WM_PAINT
je _paint2
xor eax,eax
ret
;---------------------------------------;
_wmdestroy2:
call EndDialog, __hWnd, 0 ; End the Dialog
ret
_paint2:
call BeginPaint, __hWnd, offset _pnt
call EndPaint, __hwnd, offset _pnt
ret
_initdlg2:
call GetWindowRect, __hWnd, offset DlgRect ; Get DlgRect
call GetDesktopWindow
call GetWindowRect, eax, offset DesktopRect ; Get Desktop rect
mov eax, DlgRect.rc_bottom
sub eax, DlgRect.rc_top
mov DlgHeight, eax ; Dialog box height
mov eax, DlgRect.rc_right
sub eax, DlgRect.rc_left
mov DlgWidth, eax ; Dialog box width
mov ebx, DesktopRect.rc_bottom
sub ebx, DlgHeight
shr ebx, 1 ; ebx = Start y
mov ecx, DesktopRect.rc_right
sub ecx, DlgWidth
shr ecx, 1 ; ecx = Start x
call MoveWindow, __hWnd, ecx, ebx, DlgWidth, DlgHeight, 0 ; Centre
ret
_wmcommand2:
cmp _wparam, IDOK
jne nook
jmp _wmdestroy2
nook:
ret
DlgProc2 endp
;[--------==========================================================--------];
jprintf proc p1:dword, p2:dword, p3:dword
push p3
push p2
push p1
call _wsprintfA
add esp, 12
ret
jprintf endp
;---------------------------------------;
ends
end main