forked from KolibriOS/kolibrios
Calc+ 0.3B: add functions support. Add functions: inc(n), dec(n), abs(n), sqr(n)
git-svn-id: svn://kolibrios.org@4882 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ffb2c86285
commit
599a3836f8
@ -1,4 +1,4 @@
|
|||||||
VERSION equ "0.2Å"
|
VERSION equ "0.3Å"
|
||||||
use32
|
use32
|
||||||
org 0
|
org 0
|
||||||
db 'MENUET01'
|
db 'MENUET01'
|
||||||
@ -8,8 +8,8 @@
|
|||||||
include "../../macros.inc"
|
include "../../macros.inc"
|
||||||
include "../../dll.inc"
|
include "../../dll.inc"
|
||||||
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
|
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
|
||||||
include "parser.inc"
|
|
||||||
; include "../../debug.inc"
|
; include "../../debug.inc"
|
||||||
|
include "parser.inc"
|
||||||
|
|
||||||
;===============================
|
;===============================
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@
|
|||||||
|
|
||||||
; ---------------------------
|
; ---------------------------
|
||||||
|
|
||||||
proc parse_lvl3 uses ebx
|
proc parse_lvl3 uses ebx ecx edx
|
||||||
test_err
|
test_err
|
||||||
stdcall skip_spaces
|
stdcall skip_spaces
|
||||||
mov ebx, exp
|
mov ebx, exp
|
||||||
@ -159,6 +159,12 @@
|
|||||||
jg @f
|
jg @f
|
||||||
stdcall parse_lvl4
|
stdcall parse_lvl4
|
||||||
jmp .end
|
jmp .end
|
||||||
|
@@:
|
||||||
|
cmp [ebx], byte 97
|
||||||
|
jl @f
|
||||||
|
cmp [ebx], byte 122
|
||||||
|
jg @f
|
||||||
|
jmp .parse_func
|
||||||
@@:
|
@@:
|
||||||
inc [exp_pos]
|
inc [exp_pos]
|
||||||
cmp [ebx], byte "("
|
cmp [ebx], byte "("
|
||||||
@ -191,12 +197,86 @@
|
|||||||
ret
|
ret
|
||||||
.unexp_char:
|
.unexp_char:
|
||||||
set_err 4
|
set_err 4
|
||||||
|
.parse_func:
|
||||||
|
mov ecx, 0
|
||||||
|
mov dl, 0
|
||||||
|
@@:
|
||||||
|
cmp [ebx], byte 97
|
||||||
|
jl @f
|
||||||
|
cmp [ebx], byte 122
|
||||||
|
jg @f
|
||||||
|
cmp dl, 4
|
||||||
|
je .unexp_char
|
||||||
|
shl ecx, 8
|
||||||
|
mov cl, [ebx]
|
||||||
|
inc dl
|
||||||
|
inc ebx
|
||||||
|
inc [exp_pos]
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
cmp ecx, "cni"
|
||||||
|
je @f
|
||||||
|
cmp ecx, "ced"
|
||||||
|
je @f
|
||||||
|
cmp ecx, "sba"
|
||||||
|
je @f
|
||||||
|
cmp ecx, "rqs"
|
||||||
|
je @f
|
||||||
|
jmp .unexp_char
|
||||||
|
@@:
|
||||||
|
stdcall skip_spaces
|
||||||
|
mov ebx, exp
|
||||||
|
add ebx, [exp_pos]
|
||||||
|
cmp [ebx], byte "("
|
||||||
|
jne .unexp_char
|
||||||
|
inc [exp_lvl]
|
||||||
|
inc [exp_pos]
|
||||||
|
stdcall parse_lvl0
|
||||||
|
test_err
|
||||||
|
mov ebx, exp
|
||||||
|
add ebx, [exp_pos]
|
||||||
|
cmp [ebx], byte ")"
|
||||||
|
je @f
|
||||||
|
set_err 2
|
||||||
|
@@:
|
||||||
|
inc [exp_pos]
|
||||||
|
stdcall skip_spaces
|
||||||
|
cmp ecx, "cni"
|
||||||
|
jne @f
|
||||||
|
inc eax
|
||||||
|
jmp .f_end
|
||||||
|
@@:
|
||||||
|
cmp ecx, "ced"
|
||||||
|
jne @f
|
||||||
|
dec eax
|
||||||
|
jmp .f_end
|
||||||
|
@@:
|
||||||
|
cmp ecx, "sba"
|
||||||
|
jne @f
|
||||||
|
mov ecx, eax
|
||||||
|
shr ecx, 31
|
||||||
|
cmp cl, 1
|
||||||
|
jne .f_end
|
||||||
|
not eax
|
||||||
|
inc eax
|
||||||
|
jmp .f_end
|
||||||
|
@@:
|
||||||
|
cmp ecx, "rqs"
|
||||||
|
jne @f
|
||||||
|
imul eax, eax
|
||||||
|
jmp .f_end
|
||||||
|
@@:
|
||||||
|
jmp .unexp_char
|
||||||
|
.f_end:
|
||||||
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
; ---------------------------
|
; ---------------------------
|
||||||
|
|
||||||
proc parse_lvl4 uses ebx ecx
|
proc parse_lvl4 uses ebx ecx
|
||||||
|
stdcall skip_spaces
|
||||||
stdcall parse_lvl5
|
stdcall parse_lvl5
|
||||||
|
stdcall skip_spaces
|
||||||
@@:
|
@@:
|
||||||
mov ebx, exp
|
mov ebx, exp
|
||||||
add ebx, [exp_pos]
|
add ebx, [exp_pos]
|
||||||
@ -205,6 +285,7 @@
|
|||||||
cmp [ebx], byte "^"
|
cmp [ebx], byte "^"
|
||||||
jne .end
|
jne .end
|
||||||
inc [exp_pos]
|
inc [exp_pos]
|
||||||
|
stdcall skip_spaces
|
||||||
mov ecx, eax
|
mov ecx, eax
|
||||||
mov ebx, exp
|
mov ebx, exp
|
||||||
add ebx, [exp_pos]
|
add ebx, [exp_pos]
|
||||||
|
Loading…
Reference in New Issue
Block a user