forked from KolibriOS/kolibrios
git-svn-id: svn://kolibrios.org@4943 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f1cfa188c5
commit
ec7c51e8e4
@ -1,4 +1,4 @@
|
|||||||
VERSION equ "0.4Å"
|
VERSION equ "0.5"
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0
|
org 0
|
||||||
@ -14,10 +14,22 @@
|
|||||||
|
|
||||||
;===============================
|
;===============================
|
||||||
|
|
||||||
sz_cont db "?#"
|
LIST_ITEM_SIZE equ 16
|
||||||
|
LIST_ITEM_COUNT equ 6
|
||||||
|
LIST_SIZE equ LIST_ITEM_SIZE * LIST_ITEM_COUNT
|
||||||
|
LIST_ITEM_COLOR1 equ dword [scn.btn_face]
|
||||||
|
LIST_ITEM_COLOR2 equ dword [scn.win_face]
|
||||||
|
LIST_ITEM_TEXT1 equ dword [scn.btn_text]
|
||||||
|
LIST_ITEM_TEXT2 equ dword [scn.win_text]
|
||||||
|
LIST_ITEM_Y equ LIST_ITEM_SIZE / 2 - 3
|
||||||
|
|
||||||
|
KEYB_SIZE equ 140
|
||||||
|
|
||||||
|
sz_cont db "Keyboard ", 0x10
|
||||||
sz_head db "Calc+ [v", VERSION, "]", 0
|
sz_head db "Calc+ [v", VERSION, "]", 0
|
||||||
; buttons db "789456123()%^-+/*0"
|
btn_clr db ""
|
||||||
edb1 edit_box 184, 8, 12, 0, 0, 0, 0, 0, 500, \
|
buttons db "|%^*/-+)(=7894561230"
|
||||||
|
edb1 edit_box 0, 8, 12, 0, 0, 0, 0, 0, 480, \
|
||||||
exp, group, ed_always_focus + ed_focus, 0, 0
|
exp, group, ed_always_focus + ed_focus, 0, 0
|
||||||
|
|
||||||
imports:
|
imports:
|
||||||
@ -58,69 +70,40 @@
|
|||||||
cmp eax, EV_MOUSE
|
cmp eax, EV_MOUSE
|
||||||
je ev_mouse
|
je ev_mouse
|
||||||
|
|
||||||
dec [timer]
|
|
||||||
cmp [timer], 0
|
|
||||||
je calc
|
|
||||||
|
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
ev_redraw:
|
ev_redraw:
|
||||||
mov edx, [scn.win_body]
|
mcall 12, 1
|
||||||
|
|
||||||
|
; WINDOW
|
||||||
|
mov edx, [scn.win_face]
|
||||||
or edx, 0x34 shl 24
|
or edx, 0x34 shl 24
|
||||||
mcall 0, <100, 236 + 100>, <100, 164 - 102>, , , sz_head
|
mcall 0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head
|
||||||
|
|
||||||
mcall 8, <275, 12>, <-17, 12>, 2 + 1 shl 30
|
; TOOLBAR
|
||||||
sub ebx, 12 shl 16
|
mov ebx, (275 - 50 - 25 - 50) shl 16 + 64
|
||||||
inc edx
|
cmp [keyb], byte 1
|
||||||
mcall
|
jne @f
|
||||||
|
add ebx, KEYB_SIZE shl 16
|
||||||
mcall 4, <279, -14>, [scn.win_title], sz_cont, 1
|
@@:
|
||||||
add ebx, 1 shl 16
|
mcall 8, , <-17, 12>, 2 + 1 shl 30
|
||||||
mcall
|
add ebx, 4 shl 16 - (64 + 14)
|
||||||
|
mcall 4, , [scn.win_title], sz_cont, 10
|
||||||
sub ebx, 13 shl 16
|
|
||||||
inc edx
|
|
||||||
mcall
|
|
||||||
|
|
||||||
|
; CONTENT
|
||||||
call draw_textbox
|
call draw_textbox
|
||||||
|
call draw_keyb
|
||||||
|
call draw_list
|
||||||
|
|
||||||
; mov [but_id], 0x0000000A
|
mcall 12, 2
|
||||||
; 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
|
|
||||||
;
|
|
||||||
; 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 [txt_x], 37
|
|
||||||
; mov [but_w], 80
|
|
||||||
; stdcall draw_button, 4, 114
|
|
||||||
|
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
ev_key:
|
ev_key:
|
||||||
mov [timer], 10
|
|
||||||
|
|
||||||
mcall 2
|
mcall 2
|
||||||
cmp ah, 27
|
cmp ah, 27
|
||||||
je exit
|
je exit
|
||||||
@ -132,16 +115,15 @@
|
|||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
ev_button:
|
ev_button:
|
||||||
mov [timer], 10
|
|
||||||
|
|
||||||
mcall 17
|
mcall 17
|
||||||
|
|
||||||
|
; EXIT
|
||||||
cmp ah, 1
|
cmp ah, 1
|
||||||
je exit
|
je exit
|
||||||
|
|
||||||
cmp ah, 19
|
; DELETE
|
||||||
|
cmp ah, 4
|
||||||
jne .not_del
|
jne .not_del
|
||||||
.del:
|
|
||||||
cmp [edb1.pos], 0
|
cmp [edb1.pos], 0
|
||||||
je update
|
je update
|
||||||
mov eax, exp
|
mov eax, exp
|
||||||
@ -164,33 +146,112 @@
|
|||||||
jmp .redraw
|
jmp .redraw
|
||||||
.not_del:
|
.not_del:
|
||||||
|
|
||||||
; cmp ah, 10
|
; SHOW/HIDE KEYBOARD
|
||||||
; jl update
|
cmp ah, 2
|
||||||
; cmp ah, 50
|
jne .not_keyb
|
||||||
; jg update
|
|
||||||
;
|
|
||||||
; movzx eax, ah
|
|
||||||
; add eax, buttons
|
|
||||||
; sub eax, 10
|
|
||||||
; mov al, [eax]
|
|
||||||
;
|
|
||||||
; mov ebx, exp
|
|
||||||
; add ebx, [edb1.size]
|
|
||||||
; mov ecx, exp
|
|
||||||
; add ecx, [edb1.pos]
|
|
||||||
; @@:
|
|
||||||
; cmp ebx, ecx
|
|
||||||
; je @f
|
|
||||||
; mov dl, [ebx - 1]
|
|
||||||
; mov [ebx], dl
|
|
||||||
; dec ebx
|
|
||||||
; jmp @b
|
|
||||||
; @@:
|
|
||||||
;
|
|
||||||
; mov [ebx], al
|
|
||||||
; inc [edb1.size]
|
|
||||||
; inc [edb1.pos]
|
|
||||||
|
|
||||||
|
cmp [keyb], byte 0
|
||||||
|
je .open
|
||||||
|
|
||||||
|
mcall 67, -1, -1, 286 - 25, -1
|
||||||
|
mov [keyb], 0
|
||||||
|
mov [sz_cont + 9], byte 0x10
|
||||||
|
jmp ev_redraw
|
||||||
|
|
||||||
|
.open:
|
||||||
|
mcall 67, -1, -1, 286 - 25 + KEYB_SIZE, -1
|
||||||
|
mov [keyb], 1
|
||||||
|
mov [sz_cont + 9], byte 0x11
|
||||||
|
jmp ev_redraw
|
||||||
|
|
||||||
|
jmp update
|
||||||
|
.not_keyb:
|
||||||
|
|
||||||
|
; CALCULATE
|
||||||
|
cmp ah, 19
|
||||||
|
je calc
|
||||||
|
|
||||||
|
; LIST
|
||||||
|
cmp ah, 0x60
|
||||||
|
jl .not_list
|
||||||
|
|
||||||
|
sub ah, 0x60
|
||||||
|
movzx ebx, ah
|
||||||
|
imul ebx, 512
|
||||||
|
add ebx, history
|
||||||
|
add ebx, 482
|
||||||
|
stdcall str_len, ebx
|
||||||
|
|
||||||
|
mov edx, exp
|
||||||
|
add edx, [edb1.size]
|
||||||
|
add edx, eax
|
||||||
|
mov edi, exp
|
||||||
|
add edi, [edb1.pos]
|
||||||
|
@@:
|
||||||
|
cmp edx, edi
|
||||||
|
je @f
|
||||||
|
mov esi, edx
|
||||||
|
sub esi, eax
|
||||||
|
push eax
|
||||||
|
mov al, [esi]
|
||||||
|
mov [edx], al
|
||||||
|
pop eax
|
||||||
|
dec edx
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
add [edb1.size], eax
|
||||||
|
|
||||||
|
@@:
|
||||||
|
cmp eax, 0
|
||||||
|
je @f
|
||||||
|
mov cl, [ebx]
|
||||||
|
mov [edi], cl
|
||||||
|
inc edi
|
||||||
|
inc ebx
|
||||||
|
dec eax
|
||||||
|
inc [edb1.pos]
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
|
||||||
|
jmp .redraw
|
||||||
|
.not_list:
|
||||||
|
|
||||||
|
; KEYBOARD
|
||||||
|
cmp ah, 10
|
||||||
|
jl update
|
||||||
|
cmp ah, 50
|
||||||
|
jg update
|
||||||
|
mov dh, ah
|
||||||
|
|
||||||
|
mov ebx, exp
|
||||||
|
add ebx, [edb1.size]
|
||||||
|
mov ecx, exp
|
||||||
|
add ecx, [edb1.pos]
|
||||||
|
cmp dh, 30
|
||||||
|
jl @f
|
||||||
|
add ebx, 2
|
||||||
|
@@:
|
||||||
|
cmp ebx, ecx
|
||||||
|
je @f
|
||||||
|
mov dl, [ebx - 1]
|
||||||
|
mov [ebx], dl
|
||||||
|
dec ebx
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
|
||||||
|
movzx eax, dh
|
||||||
|
add eax, buttons
|
||||||
|
sub eax, 10
|
||||||
|
mov al, [eax]
|
||||||
|
|
||||||
|
mov [ebx], al
|
||||||
|
inc [edb1.size]
|
||||||
|
inc [edb1.pos]
|
||||||
|
cmp dh, 30
|
||||||
|
jl @f
|
||||||
|
add [edb1.size], 2
|
||||||
|
add [edb1.pos], 2
|
||||||
|
@@:
|
||||||
.redraw:
|
.redraw:
|
||||||
call draw_textbox
|
call draw_textbox
|
||||||
jmp update
|
jmp update
|
||||||
@ -219,11 +280,52 @@
|
|||||||
|
|
||||||
stdcall convert_to_str, eax, ans.buffer + 2
|
stdcall convert_to_str, eax, ans.buffer + 2
|
||||||
add eax, 2
|
add eax, 2
|
||||||
|
mov edi, eax
|
||||||
imul eax, 6
|
imul eax, 6
|
||||||
add eax, 9
|
add eax, 9
|
||||||
mov [ans.size], eax
|
mov [ans.size], eax
|
||||||
|
|
||||||
|
; HISTORY
|
||||||
|
mov ecx, LIST_ITEM_COUNT - 1
|
||||||
|
mov eax, history
|
||||||
|
add eax, (LIST_ITEM_COUNT - 1) * 512
|
||||||
|
@@:
|
||||||
|
mov ebx, eax
|
||||||
|
sub ebx, 512
|
||||||
|
stdcall str_cpy, ebx, eax
|
||||||
|
add ebx, 480
|
||||||
|
add eax, 480
|
||||||
|
stdcall str_cpy, ebx, eax
|
||||||
|
sub ebx, 480
|
||||||
|
sub eax, 480
|
||||||
|
mov esi, [ebx + 508]
|
||||||
|
mov [eax + 508], esi
|
||||||
|
sub eax, 512
|
||||||
|
loop @b
|
||||||
|
|
||||||
|
stdcall str_cpy, exp, history
|
||||||
|
stdcall str_cpy, ans.buffer, history + 480
|
||||||
|
mov esi, [ans.size]
|
||||||
|
mov dword[history + 508], esi
|
||||||
|
not [his_even]
|
||||||
|
|
||||||
|
; Check length
|
||||||
|
mov esi, 37
|
||||||
|
sub esi, edi
|
||||||
|
stdcall str_len, exp
|
||||||
|
sub esi, eax
|
||||||
|
cmp esi, 0
|
||||||
|
jg .redraw
|
||||||
|
|
||||||
|
mov ebx, history
|
||||||
|
add ebx, eax
|
||||||
|
add ebx, esi
|
||||||
|
mov [ebx], dword ".."
|
||||||
|
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
|
||||||
|
; ERRORS
|
||||||
|
|
||||||
.error:
|
.error:
|
||||||
cmp [error_n], 1
|
cmp [error_n], 1
|
||||||
je .err_1
|
je .err_1
|
||||||
@ -240,6 +342,8 @@
|
|||||||
je .redraw
|
je .redraw
|
||||||
cmp [error_n], 3
|
cmp [error_n], 3
|
||||||
je .err_3
|
je .err_3
|
||||||
|
cmp [error_n], 5
|
||||||
|
je .err_5
|
||||||
.err_1:
|
.err_1:
|
||||||
mov [ans.buffer + 0], dword "Div."
|
mov [ans.buffer + 0], dword "Div."
|
||||||
mov [ans.buffer + 4], dword " by "
|
mov [ans.buffer + 4], dword " by "
|
||||||
@ -257,52 +361,53 @@
|
|||||||
.err_3:
|
.err_3:
|
||||||
mov [ans.buffer + 10], byte "("
|
mov [ans.buffer + 10], byte "("
|
||||||
jmp .redraw
|
jmp .redraw
|
||||||
|
.err_5:
|
||||||
|
mov [ans.buffer + 10], byte "|"
|
||||||
|
jmp .redraw
|
||||||
|
|
||||||
.redraw:
|
.redraw:
|
||||||
call draw_textbox
|
call draw_textbox
|
||||||
|
call draw_list
|
||||||
jmp update
|
jmp update
|
||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
; proc draw_button, x, y
|
proc draw_button, x, y
|
||||||
; mcall 8, <[x], [but_w]>, <[y], 20>, [but_id], [scn.btn_face]
|
mcall 8, <[x], 30>, <[y], 21>, [but_id], [but_c]
|
||||||
;
|
|
||||||
; mcall 1, [x], [y], [scn.win_face]
|
mov ebx, [x]
|
||||||
; add ebx, [but_w]
|
mov esi, [txt_size]
|
||||||
; mcall
|
imul esi, 3
|
||||||
; add ecx, 20
|
mov edi, 16
|
||||||
; mcall
|
sub edi, esi
|
||||||
; sub ebx, [but_w]
|
add ebx, edi
|
||||||
; mcall
|
shl ebx, 16
|
||||||
;
|
add ebx, [y]
|
||||||
; mov ebx, [x]
|
add ebx, 7
|
||||||
; add ebx, [txt_x]
|
mcall 4, , [but_tc], [txt_id], [txt_size]
|
||||||
; shl ebx, 16
|
|
||||||
; add ebx, [y]
|
mov eax, [txt_size]
|
||||||
; add ebx, 7
|
add [txt_id], eax
|
||||||
; mcall 4, , [scn.win_text], [txt_id], 1
|
inc dword [but_id]
|
||||||
;
|
|
||||||
; inc dword [txt_id]
|
ret
|
||||||
; inc dword [but_id]
|
endp
|
||||||
;
|
|
||||||
; ret
|
|
||||||
; endp
|
|
||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
proc draw_textbox
|
proc draw_textbox
|
||||||
mcall 13, <4, 320>, < 8, 23>, [scn.gui_frame]
|
mcall 13, <4, 320 - 50 - 25>, < 8, 23>, [scn.gui_frame]
|
||||||
mov edx, [scn.gui_face]
|
mov edx, [scn.gui_face]
|
||||||
cmp [error_n], 0
|
cmp [error_n], 0
|
||||||
je @f
|
je @f
|
||||||
mov edx, 0xFFAAAA
|
mov edx, 0xFFAAAA
|
||||||
@@:
|
@@:
|
||||||
mcall 13, < 5, 318>, < 9, 21>
|
mcall 13, < 5, 318 - 50 - 25>, < 9, 21>
|
||||||
mcall , < 5, 318>, < 9, 1>, [scn.3d_face]
|
mcall , < 5, 318 - 50 - 25>, < 9, 1>, [scn.3d_face]
|
||||||
mcall , < 5, 1>, < 10, 20>
|
mcall , < 5, 1>, < 10, 20>
|
||||||
mcall , < 5, 318>, < 31, 1>, [scn.3d_light]
|
mcall , < 5, 318 - 50 - 25>, < 31, 1>, [scn.3d_light]
|
||||||
|
|
||||||
mov ebx, 328
|
mov ebx, 328 - 16 - 50 - 25
|
||||||
sub ebx, [ans.size]
|
sub ebx, [ans.size]
|
||||||
shl ebx, 16
|
shl ebx, 16
|
||||||
add ebx, 16
|
add ebx, 16
|
||||||
@ -310,12 +415,19 @@
|
|||||||
or ecx, 1 shl 31
|
or ecx, 1 shl 31
|
||||||
mcall 4, , , ans.buffer
|
mcall 4, , , ans.buffer
|
||||||
|
|
||||||
|
mov ecx, [scn.gui_text]
|
||||||
|
mcall , <310 - 50 - 25, 16>, , btn_clr, 1
|
||||||
|
add ebx, 1 shl 16
|
||||||
|
mcall
|
||||||
|
|
||||||
|
mcall 8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004
|
||||||
|
|
||||||
mcall 1, 4, 8, [scn.win_body]
|
mcall 1, 4, 8, [scn.win_body]
|
||||||
mcall , 323
|
mcall , 323 - 50 - 25
|
||||||
mcall , , 30, [scn.3d_light]
|
mcall , , 30, [scn.3d_light]
|
||||||
mcall , 4
|
mcall , 4
|
||||||
|
|
||||||
mov ebx, 318
|
mov ebx, 318 - 16 - 50 - 25
|
||||||
sub ebx, [ans.size]
|
sub ebx, [ans.size]
|
||||||
cmp ebx, 24
|
cmp ebx, 24
|
||||||
jg @f
|
jg @f
|
||||||
@ -336,6 +448,172 @@
|
|||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
|
proc draw_keyb
|
||||||
|
cmp [keyb], byte 0
|
||||||
|
je @f
|
||||||
|
|
||||||
|
mov [txt_size], 1
|
||||||
|
mov [but_id], 0x0000000A
|
||||||
|
mov [txt_id], buttons
|
||||||
|
|
||||||
|
mov eax, [scn.win_face]
|
||||||
|
mov [but_c], eax
|
||||||
|
mov eax, [scn.win_text]
|
||||||
|
mov [but_tc], eax
|
||||||
|
stdcall draw_button, 4 + 278 - 25, 42 - 25 - 8
|
||||||
|
stdcall draw_button, 37 + 278 - 25, 42 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 42 - 25 - 8
|
||||||
|
stdcall draw_button, 103 + 278 - 25, 42 - 25 - 8
|
||||||
|
stdcall draw_button, 103 + 278 - 25, 66 - 25 - 8
|
||||||
|
stdcall draw_button, 103 + 278 - 25, 90 - 25 - 8
|
||||||
|
stdcall draw_button, 103 + 278 - 25, 114 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 139 - 25 - 8
|
||||||
|
stdcall draw_button, 37 + 278 - 25, 139 - 25 - 8
|
||||||
|
|
||||||
|
mov eax, [scn.btn_inface]
|
||||||
|
mov [but_c], eax
|
||||||
|
mov eax, [scn.btn_intext]
|
||||||
|
mov [but_tc], eax
|
||||||
|
stdcall draw_button, 103 + 278 - 25, 139 - 25 - 8
|
||||||
|
|
||||||
|
mov eax, [scn.btn_face]
|
||||||
|
mov [but_c], eax
|
||||||
|
mov eax, [scn.btn_text]
|
||||||
|
mov [but_tc], eax
|
||||||
|
stdcall draw_button, 4 + 278 - 25, 66 - 25 - 8
|
||||||
|
stdcall draw_button, 37 + 278 - 25, 66 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 66 - 25 - 8
|
||||||
|
stdcall draw_button, 4 + 278 - 25, 90 - 25 - 8
|
||||||
|
stdcall draw_button, 37 + 278 - 25, 90 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 90 - 25 - 8
|
||||||
|
stdcall draw_button, 4 + 278 - 25, 114 - 25 - 8
|
||||||
|
stdcall draw_button, 37 + 278 - 25, 114 - 25 - 8
|
||||||
|
stdcall draw_button, 70 + 278 - 25, 114 - 25 - 8
|
||||||
|
stdcall draw_button, 4 + 278 - 25, 139 - 25 - 8
|
||||||
|
|
||||||
|
@@:
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
|
proc draw_list
|
||||||
|
; BACKGROUND
|
||||||
|
mov edi, LIST_ITEM_COUNT
|
||||||
|
mov eax, 13
|
||||||
|
mov ebx, 4 shl 16 + 320 - 50 - 25
|
||||||
|
mov ecx, 37 shl 16 + LIST_ITEM_SIZE
|
||||||
|
mov edx, LIST_ITEM_COLOR1
|
||||||
|
cmp [his_even], byte 0
|
||||||
|
je @f
|
||||||
|
mov edx, LIST_ITEM_COLOR2
|
||||||
|
@@:
|
||||||
|
mcall
|
||||||
|
add ecx, LIST_ITEM_SIZE shl 16
|
||||||
|
cmp edx, LIST_ITEM_COLOR1
|
||||||
|
je .set_color_to_2
|
||||||
|
mov edx, LIST_ITEM_COLOR1
|
||||||
|
jmp .next
|
||||||
|
.set_color_to_2:
|
||||||
|
mov edx, LIST_ITEM_COLOR2
|
||||||
|
.next:
|
||||||
|
dec edi
|
||||||
|
cmp edi, 0
|
||||||
|
jne @b
|
||||||
|
|
||||||
|
; BUTTONS
|
||||||
|
mov edi, LIST_ITEM_COUNT
|
||||||
|
mov eax, 8
|
||||||
|
mov ebx, 4 shl 16 + 320 - 50 - 25
|
||||||
|
mov ecx, 37 shl 16 + LIST_ITEM_SIZE
|
||||||
|
mov edx, 0x40000060
|
||||||
|
@@:
|
||||||
|
mcall
|
||||||
|
add ecx, LIST_ITEM_SIZE shl 16
|
||||||
|
inc edx
|
||||||
|
dec edi
|
||||||
|
cmp edi, 0
|
||||||
|
jne @b
|
||||||
|
|
||||||
|
; TEXT
|
||||||
|
mov edi, LIST_ITEM_COUNT
|
||||||
|
mov eax, 4
|
||||||
|
mov ebx, 8 shl 16 + 37 + LIST_ITEM_Y
|
||||||
|
mov ecx, LIST_ITEM_TEXT1
|
||||||
|
cmp [his_even], byte 0
|
||||||
|
je @f
|
||||||
|
mov ecx, LIST_ITEM_TEXT2
|
||||||
|
@@:
|
||||||
|
or ecx, 1 shl 31
|
||||||
|
mov edx, history
|
||||||
|
@@:
|
||||||
|
mcall
|
||||||
|
|
||||||
|
push ebx
|
||||||
|
add ebx, (320 - 50 - 25) shl 16
|
||||||
|
mov esi, [edx + 508]
|
||||||
|
shl esi, 16
|
||||||
|
sub ebx, esi
|
||||||
|
add edx, 480
|
||||||
|
mcall
|
||||||
|
pop ebx
|
||||||
|
|
||||||
|
add edx, 32
|
||||||
|
add ebx, LIST_ITEM_SIZE
|
||||||
|
|
||||||
|
and ecx, 0xFFFFFF
|
||||||
|
cmp ecx, LIST_ITEM_TEXT2
|
||||||
|
je .set_color_to_2_txt
|
||||||
|
mov ecx, LIST_ITEM_TEXT2
|
||||||
|
jmp .next_txt
|
||||||
|
.set_color_to_2_txt:
|
||||||
|
mov ecx, LIST_ITEM_TEXT1
|
||||||
|
.next_txt:
|
||||||
|
or ecx, 1 shl 31
|
||||||
|
|
||||||
|
dec edi
|
||||||
|
cmp edi, 0
|
||||||
|
jne @b
|
||||||
|
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
|
proc str_len uses ebx, str
|
||||||
|
xor eax, eax
|
||||||
|
mov ebx, [str]
|
||||||
|
@@:
|
||||||
|
cmp [ebx], byte 0
|
||||||
|
je @f
|
||||||
|
inc eax
|
||||||
|
inc ebx
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
|
proc str_cpy uses eax ebx ecx, from, to
|
||||||
|
mov eax, [from]
|
||||||
|
mov ebx, [to]
|
||||||
|
@@:
|
||||||
|
cmp [eax], byte 0
|
||||||
|
je @f
|
||||||
|
mov cl, [eax]
|
||||||
|
mov [ebx], cl
|
||||||
|
inc eax
|
||||||
|
inc ebx
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
mov [ebx], byte 0
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
dataend:
|
dataend:
|
||||||
|
|
||||||
;===============================
|
;===============================
|
||||||
@ -343,20 +621,27 @@
|
|||||||
rb 2048
|
rb 2048
|
||||||
stacktop:
|
stacktop:
|
||||||
|
|
||||||
exp rb 512
|
exp rb 480
|
||||||
exp_pos rd 1
|
exp_pos rd 1
|
||||||
exp_lvl rd 1
|
exp_lvl rd 1
|
||||||
|
abs_lvl rd 1
|
||||||
group rd 1
|
group rd 1
|
||||||
|
|
||||||
ans.buffer:rb 512
|
ans.buffer:rb 480
|
||||||
ans.size rd 1
|
ans.size rd 1
|
||||||
error_n rd 1
|
error_n rd 1
|
||||||
|
|
||||||
scn sys_colors_new
|
scn sys_colors_new
|
||||||
timer rd 1
|
timer rd 1
|
||||||
but_id rd 1
|
but_id rd 1
|
||||||
but_w rd 1
|
but_c rd 1
|
||||||
|
but_tc rd 1
|
||||||
txt_id rd 1
|
txt_id rd 1
|
||||||
txt_x rd 1
|
txt_size rd 1
|
||||||
|
keyb rb 1
|
||||||
|
|
||||||
|
his_even rb 1
|
||||||
|
history rb 512 * LIST_ITEM_COUNT
|
||||||
|
rb 512
|
||||||
|
|
||||||
memory:
|
memory:
|
||||||
|
@ -46,6 +46,8 @@
|
|||||||
je .end
|
je .end
|
||||||
cmp [ebx], byte ")"
|
cmp [ebx], byte ")"
|
||||||
je .brk_end
|
je .brk_end
|
||||||
|
cmp [ebx], byte "|"
|
||||||
|
je .abs_end
|
||||||
inc [exp_pos]
|
inc [exp_pos]
|
||||||
cmp [ebx], byte "+"
|
cmp [ebx], byte "+"
|
||||||
jne .not_add
|
jne .not_add
|
||||||
@ -69,6 +71,13 @@
|
|||||||
set_err 3
|
set_err 3
|
||||||
@@:
|
@@:
|
||||||
dec [exp_lvl]
|
dec [exp_lvl]
|
||||||
|
jmp .end
|
||||||
|
.abs_end:
|
||||||
|
cmp [abs_lvl], 0
|
||||||
|
jne @f
|
||||||
|
set_err 5
|
||||||
|
@@:
|
||||||
|
dec [abs_lvl]
|
||||||
.end:
|
.end:
|
||||||
ret
|
ret
|
||||||
.unexp_char:
|
.unexp_char:
|
||||||
@ -180,6 +189,24 @@
|
|||||||
.brk_ok:
|
.brk_ok:
|
||||||
inc [exp_pos]
|
inc [exp_pos]
|
||||||
jmp .end
|
jmp .end
|
||||||
|
@@:
|
||||||
|
cmp [ebx], byte "|"
|
||||||
|
jne @f
|
||||||
|
inc [abs_lvl]
|
||||||
|
stdcall parse_lvl0
|
||||||
|
test_err
|
||||||
|
mov ebx, exp
|
||||||
|
add ebx, [exp_pos]
|
||||||
|
cmp [ebx], byte "|"
|
||||||
|
je .abs_ok
|
||||||
|
set_err 5
|
||||||
|
.abs_ok:
|
||||||
|
inc [exp_pos]
|
||||||
|
cmp eax, 0
|
||||||
|
jge .end
|
||||||
|
not eax
|
||||||
|
inc eax
|
||||||
|
jmp .end
|
||||||
@@:
|
@@:
|
||||||
cmp [ebx], byte "+"
|
cmp [ebx], byte "+"
|
||||||
jne @f
|
jne @f
|
||||||
|
Loading…
Reference in New Issue
Block a user