Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4874 → Rev 4875

/programs/other/calcplus/calcplus.asm
1,5 → 1,4
VERSION equ "0.1Å"
 
VERSION equ "0.2Å"
use32
org 0
db 'MENUET01'
10,11 → 9,12
include "../../dll.inc"
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
include "parser.inc"
;include "../../debug.inc"
 
;===============================
 
sz_head db "Calc+ [v", VERSION, "]", 0
buttons db "1234567890.%-+*/()"
buttons db "123456789()%^-+/*0"
edb1 edit_box 184, 8, 12, 0, 0, 0, 0, 0, 500, \
exp, group, ed_always_focus + ed_focus, 0, 0
 
44,7 → 44,7
;----------------------
 
update:
mcall 23, 50
mcall 23, 5
 
cmp eax, EV_REDRAW
je ev_redraw
68,87 → 68,42
or edx, 0x34 shl 24
mcall 0, <100, 236>, <100, 164>, , , sz_head
 
mcall 13, < 4, 220>, < 8, 23>, [scn.gui_frame]
mov edx, [scn.gui_face]
cmp [error_n], 0
je @f
mov edx, 0xFFAAAA
@@:
mcall 13, < 5, 218>, < 9, 21>
mcall , < 5, 218>, < 9, 1>, [scn.3d_face]
mcall , < 5, 1>, < 10, 20>
mcall , < 5, 218>, < 31, 1>, [scn.3d_light]
call draw_textbox
 
mov ebx, 224
sub ebx, [ans.size]
shl ebx, 16
inc ebx
mcall , , < 9, 21>, [scn.gui_frame]
add ebx, [ans.size]
add ebx, 1 shl 16
sub ebx, 3
mcall , , , [scn.3d_light]
add ebx, 1 shl 16
add ecx, 1 shl 16
dec ebx
dec ecx
mcall , , , [scn.win_face]
shr ecx, 16
mov bx, cx
add ebx, 3 shl 16 + 6
mov ecx, [scn.win_text]
or ecx, 1b shl 31
mcall 4, , , ans.buffer
mov [but_id], 0x4000000A
mov [txt_id], buttons
mov [txt_x], 16
mov [but_w], 38
stdcall draw_button, 4, 42
stdcall draw_button, 46, 42
stdcall draw_button, 88, 42
stdcall draw_button, 4, 66
stdcall draw_button, 46, 66
stdcall draw_button, 88, 66
stdcall draw_button, 4, 90
stdcall draw_button, 46, 90
stdcall draw_button, 88, 90
stdcall draw_button, 88, 114
 
mcall 1, 4, 8, [scn.win_body]
mcall , 223
mcall , , 30, [scn.3d_light]
mcall , 4
stdcall draw_button, 144, 42
stdcall draw_button, 186, 42
stdcall draw_button, 144, 66
stdcall draw_button, 186, 66
stdcall draw_button, 144, 90
stdcall draw_button, 186, 90
stdcall draw_button, 144, 114
stdcall draw_button, 186, 114
 
mov ebx, 214
sub ebx, [ans.size]
cmp ebx, 24
jg @f
mov ebx, 24
@@:
mov [edb1.width], ebx
m2m [edb1.color], [scn.gui_face]
m2m [edb1.focus_border_color], [scn.gui_face]
cmp [error_n], 0
je @f
mov [edb1.color], 0xFFAAAA
mov [edb1.focus_border_color], 0xFFAAAA
@@:
invoke editbox.draw, edb1
mov [txt_x], 37
mov [but_w], 80
stdcall draw_button, 4, 114
 
mov [but_id], 0x4000000A
stdcall draw_button, 4, 38, 42, buttons + 00, 15
stdcall draw_button, 46, 38, 42, buttons + 01, 15
stdcall draw_button, 88, 38, 42, buttons + 02, 15
stdcall draw_button, 4, 38, 66, buttons + 03, 15
stdcall draw_button, 46, 38, 66, buttons + 04, 15
stdcall draw_button, 88, 38, 66, buttons + 05, 15
stdcall draw_button, 4, 38, 90, buttons + 06, 15
stdcall draw_button, 46, 38, 90, buttons + 07, 15
stdcall draw_button, 88, 38, 90, buttons + 08, 15
stdcall draw_button, 4, 80, 114, buttons + 09, 35
stdcall draw_button, 88, 38, 114, buttons + 10, 15
 
stdcall draw_button, 144, 38, 42, buttons + 11, 15
stdcall draw_button, 186, 38, 42, buttons + 12, 15
stdcall draw_button, 144, 38, 66, buttons + 13, 15
stdcall draw_button, 186, 38, 66, buttons + 14, 15
stdcall draw_button, 144, 38, 90, buttons + 15, 15
stdcall draw_button, 186, 38, 90, buttons + 16, 15
stdcall draw_button, 144, 38, 114, buttons + 17, 15
stdcall draw_button, 186, 38, 114, buttons + 18, 15
 
jmp update
 
;----------------------
 
ev_key:
mov [timer], 1
mov [timer], 10
 
mcall 2
cmp ah, 27
159,7 → 114,7
;----------------------
 
ev_button:
mov [timer], 1
mov [timer], 10
 
mcall 17
 
166,9 → 121,36
cmp ah, 1
je exit
 
cmp ah, 22
cmp ah, 2
jne .not_copy
 
.copy:
 
mov eax, exp
mov ebx, ans.buffer
mov ecx, 0
@@:
mov dl, [ebx]
mov [eax], dl
inc eax
inc ebx
inc ecx
cmp [eax - 1], byte 0
jne @b
 
dec ecx
mov [edb1.size], ecx
m2m [edb1.pos], [edb1.size]
 
jmp .redraw
 
.not_copy:
 
cmp ah, 19
jne .not_del
 
.del:
 
cmp [edb1.pos], 0
je update
mov eax, exp
188,7 → 170,7
dec [edb1.pos]
dec [edb1.size]
m2m [edb1.shift], [edb1.pos]
jmp ev_redraw
jmp .redraw
 
.not_del:
 
219,7 → 201,9
inc [edb1.size]
inc [edb1.pos]
 
jmp ev_redraw
.redraw:
call draw_textbox
jmp update
 
;----------------------
 
245,24 → 229,50
imul eax, 6
add eax, 9
mov [ans.size], eax
jmp ev_redraw
jmp .redraw
 
.error:
cmp [error_n], 1
je .err_1
jmp ev_redraw
cmp [error_n], 4
je .err_4
 
mov [ans.buffer + 0], dword "Expe"
mov [ans.buffer + 4], dword "cted"
mov [ans.buffer + 8], dword " ')'"
mov [ans.buffer + 12], byte 0
mov [ans.size], 81
 
cmp [error_n], 2
je .redraw
cmp [error_n], 3
je .err_3
.err_1:
mov [ans.buffer + 0], dword "Div."
mov [ans.buffer + 4], dword " by "
mov [ans.buffer + 8], dword "zero"
mov [ans.buffer + 8], byte "0"
mov [ans.buffer + 9], byte 0
mov [ans.size], 63
jmp .redraw
.err_4:
mov [ans.buffer + 0], dword "Inpu"
mov [ans.buffer + 4], dword "t er"
mov [ans.buffer + 8], dword "rror"
mov [ans.buffer + 12], byte 0
mov [ans.size], 81
jmp ev_redraw
jmp .redraw
.err_3:
mov [ans.buffer + 10], byte "("
jmp .redraw
 
.redraw:
call draw_textbox
jmp update
 
;----------------------
 
proc draw_button, x, w, y, txt, txtx
mcall 13, <[x], [w]>, <[y], 20>, [scn.gui_frame]
proc draw_button, x, y
mcall 13, <[x], [but_w]>, <[y], 20>, [scn.gui_frame]
 
add ebx, 1 shl 16
add ecx, 1 shl 16
282,7 → 292,7
 
mcall 1, [x], [y], [scn.win_body]
 
add ebx, [w]
add ebx, [but_w]
dec ebx
mcall
 
290,7 → 300,7
dec ecx
mcall
 
sub ebx, [w]
sub ebx, [but_w]
inc ebx
mcall
 
297,7 → 307,7
mov ebx, [x]
inc ebx
shl ebx, 16
add ebx, [w]
add ebx, [but_w]
sub ebx, 3
mov ecx, [y]
inc ecx
306,20 → 316,85
sub ecx, 3
mov edx, [but_id]
mcall 8
inc dword[but_id]
 
mov ebx, [x]
add ebx, [txtx]
add ebx, [txt_x]
shl ebx, 16
add ebx, [y]
add ebx, 7
mcall 4, , [scn.win_text], [txt], 1
mcall 4, , [scn.win_text], [txt_id], 1
 
inc dword [txt_id]
inc dword [but_id]
 
ret
endp
 
;----------------------
 
proc draw_textbox
mcall 13, < 4, 220>, < 8, 23>, [scn.gui_frame]
mov edx, [scn.gui_face]
cmp [error_n], 0
je @f
mov edx, 0xFFAAAA
@@:
mcall 13, < 5, 218>, < 9, 21>
mcall , < 5, 218>, < 9, 1>, [scn.3d_face]
mcall , < 5, 1>, < 10, 20>
mcall , < 5, 218>, < 31, 1>, [scn.3d_light]
 
mov ebx, 224
sub ebx, [ans.size]
shl ebx, 16
inc ebx
mcall , , < 9, 21>, [scn.gui_frame]
add ebx, [ans.size]
add ebx, 1 shl 16
sub ebx, 3
mcall , , , [scn.3d_light]
cmp [error_n], 0
jne .btn_not
mcall 8, , , 0x40000002
.btn_not:
add ebx, 1 shl 16
add ecx, 1 shl 16
dec ebx
dec ecx
mcall 13, , , [scn.win_face]
shr ecx, 16
mov bx, cx
add ebx, 3 shl 16 + 6
mov ecx, [scn.win_text]
or ecx, 1b shl 31
mcall 4, , , ans.buffer
 
mcall 1, 4, 8, [scn.win_body]
mcall , 223
mcall , , 30, [scn.3d_light]
mcall , 4
 
mov ebx, 214
sub ebx, [ans.size]
cmp ebx, 24
jg @f
mov ebx, 24
@@:
mov [edb1.width], ebx
m2m [edb1.color], [scn.gui_face]
m2m [edb1.focus_border_color], [scn.gui_face]
cmp [error_n], 0
je @f
mov [edb1.color], 0xFFAAAA
mov [edb1.focus_border_color], 0xFFAAAA
@@:
invoke editbox.draw, edb1
 
ret
endp
 
;----------------------
 
dataend:
 
;===============================
339,5 → 414,8
scn sys_colors_new
timer rd 1
but_id rd 1
but_w rd 1
txt_id rd 1
txt_x rd 1
 
memory: