Calc+ v1.0 #189

Merged
mxlgv merged 29 commits from calc-plus-v1.0 into main 2025-04-14 19:47:01 +02:00
15 changed files with 744 additions and 679 deletions

View File

@@ -410,6 +410,7 @@ tup.append_table(img_files, {
{"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"}, {"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"},
{"APM", VAR_PROGS .. "/system/apm/apm"}, {"APM", VAR_PROGS .. "/system/apm/apm"},
{"CALC", VAR_PROGS .. "/other/calc/trunk/calc"}, {"CALC", VAR_PROGS .. "/other/calc/trunk/calc"},
{"CALCPLUS", VAR_PROGS .. "/other/calcplus/calcplus"},
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"}, {"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"},
{"COLRDIAL", VAR_PROGS .. "/system/colrdial/color_dialog"}, {"COLRDIAL", VAR_PROGS .. "/system/colrdial/color_dialog"},
{"CROPFLAT", VAR_PROGS .. "/system/cropflat/cropflat"}, {"CROPFLAT", VAR_PROGS .. "/system/cropflat/cropflat"},
@@ -626,7 +627,6 @@ tup.append_table(extra_files, {
{"kolibrios/media/zsea/plugins/rotate.obj", VAR_PROGS .. "/media/zsea/plugins/rotate/rotate.obj"}, {"kolibrios/media/zsea/plugins/rotate.obj", VAR_PROGS .. "/media/zsea/plugins/rotate/rotate.obj"},
{"kolibrios/media/zsea/plugins/scaling.obj", VAR_PROGS .. "/media/zsea/plugins/scaling/scaling.obj"}, {"kolibrios/media/zsea/plugins/scaling.obj", VAR_PROGS .. "/media/zsea/plugins/scaling/scaling.obj"},
{"kolibrios/utils/AMDtemp", VAR_PROGS .. "/system/amd_temp_view/AMDtemp"}, {"kolibrios/utils/AMDtemp", VAR_PROGS .. "/system/amd_temp_view/AMDtemp"},
{"kolibrios/utils/calcplus", VAR_PROGS .. "/other/calcplus/calcplus"},
{"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/trunk/kfm"}, {"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/trunk/kfm"},
{"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"}, {"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"},
{"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"} {"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"}

View File

@@ -29,7 +29,6 @@ Dicty=/k/utils/DICTY.KEX,79
fNav=/k/utils/fNav/fNav,93 fNav=/k/utils/fNav/fNav,93
CncEditor=/k/utils/cnc_editor/cnc_editor,15 CncEditor=/k/utils/cnc_editor/cnc_editor,15
Life=/k/demos/life2,13 Life=/k/demos/life2,13
Calc+=/k/utils/calcplus,4
TinyBasic=/k/develop/TinyBasic/TinyBasic,91 TinyBasic=/k/develop/TinyBasic/TinyBasic,91
THashView=/k/utils/thashview,124 THashView=/k/utils/thashview,124
Notes=/k/utils/notes,117 Notes=/k/utils/notes,117

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -92,6 +92,7 @@
59 Screen keyboard |zkey 59 Screen keyboard |zkey
#10 **** DATA PROCESSING #10 **** DATA PROCESSING
16 Calculator |calc 16 Calculator |calc
16 Calculator+ |calcplus
03 Tinypad |tinypad 03 Tinypad |tinypad
28 CodeEdit |develop/cedit 28 CodeEdit |develop/cedit
21 Table processor |table 21 Table processor |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -96,6 +96,7 @@
24 NDN * |/kolibrios/utils/ndn/ndn 24 NDN * |/kolibrios/utils/ndn/ndn
#11 **** PROCESO DE DATOS #11 **** PROCESO DE DATOS
16 Calculadora |calc 16 Calculadora |calc
16 Calculadora+ |calcplus
16 Tinypad |tinypad 16 Tinypad |tinypad
16 CodeEdit |develop/cedit 16 CodeEdit |develop/cedit
16 Procesador de tablas |table 16 Procesador de tablas |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -80,6 +80,7 @@
65 NDN * |/kolibrios/utils/ndn/ndn 65 NDN * |/kolibrios/utils/ndn/ndn
#11 **** DATA PROCESSING **** #11 **** DATA PROCESSING ****
16 Kalkulaator |calc 16 Kalkulaator |calc
16 Kalkulaator+ |calcplus
16 Teksti redaktor |tinypad 16 Teksti redaktor |tinypad
16 CodeEdit |develop/cedit 16 CodeEdit |develop/cedit
16 Tabelarvutus |table 16 Tabelarvutus |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -79,6 +79,7 @@
65 NDN * |/kolibrios/utils/ndn/ndn 65 NDN * |/kolibrios/utils/ndn/ndn
#11 **** DATA PROCESSING #11 **** DATA PROCESSING
16 Calcolatrice |calc 16 Calcolatrice |calc
16 Calcolatrice+ |calcplus
16 Tinypad |tinypad 16 Tinypad |tinypad
16 CodeEdit |develop/cedit 16 CodeEdit |develop/cedit
16 Table Processor |table 16 Table Processor |table

View File

@@ -235,8 +235,8 @@ ico=58
x=68 x=68
y=68 y=68
[21] [21]
name=CALC name=CALC+
path=CALC path=CALCPLUS
param= param=
ico=4 ico=4
x=204 x=204

View File

@@ -90,6 +90,7 @@
59 <20><><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |zkey 59 <20><><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |zkey
#10 **** <20><><EFBFBD><EFBFBD> #10 **** <20><><EFBFBD><EFBFBD>
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |calc 16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |calc
16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+ |calcplus
03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tinypad |tinypad 03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tinypad |tinypad
28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeEdit |develop/cedit 28 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CodeEdit |develop/cedit
21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |table 21 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |table

View File

@@ -1,2 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("calcplus.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "calcplus") HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("calcplus.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")

View File

@@ -1,2 +0,0 @@
@fasm calcplus.asm calc+
@pause

View File

@@ -1,125 +1,171 @@
VERSION equ "0.5" ; SPDX-License-Identifier: GPL-2.0-only
;
; Calc+ - Multifunctional calculator
; Copyright (C) 2014-2025 KolibriOS team
;
; Contributor eAndrew - Main code
; Contributor Leency - Code refactoring and UX/UI update
; Contributor Burer - Code refactoring and UI update
use32 ; ====================================================================
org 0
db 'MENUET01'
dd 1, main, dataend, memory, stacktop, 0, 0
include "../../proc32.inc" use32
include "../../macros.inc" org 0
include "../../dll.inc"
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
; include "../../debug.inc"
include "parser.inc"
;=============================== db 'MENUET01'
dd 1
dd START
dd I_END
dd MEM
dd STACKTOP
dd 0, 0
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 include "../../proc32.inc"
include "../../macros.inc"
include "../../KOSfuncs.inc"
include "../../encoding.inc"
include "../../dll.inc"
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
include "parser.inc"
sz_cont db "Keyboard ", 0x10 imports:
sz_head db "Calc+ v", VERSION, 0
btn_clr db ""
buttons db "|%^*/-+)(=7894561230"
edb1 edit_box 0, 8, 12, 0, 0, 0, 0, 0, 480, \
exp, group, ed_always_focus + ed_focus, 0, 0
imports:
library gui, "box_lib.obj" library gui, "box_lib.obj"
import gui, editbox.draw, "edit_box", \ import gui, editbox.draw, "edit_box", \
editbox.key, "edit_box_key", \ editbox.key, "edit_box_key", \
editbox.mouse, "edit_box_mouse" editbox.mouse, "edit_box_mouse"
;=============================== ; ====================================================================
main: LIST_X = 8
mov [ans.buffer], dword "= 0" LIST_Y = 47
mov [ans.size], 3 * 6 + 9 LIST_ITEM_H = 26
LIST_ITEM_W = 295
LIST_ITEM_COUNT = 8
LIST_H = LIST_ITEM_H * LIST_ITEM_COUNT
LIST_TEXT_Y = LIST_ITEM_H / 2 - 8
mcall 40, 100111b KEYB_BTN_W = 37
; mcall 48, 3, scn, 192 KEYB_BTN_H = 37
GAP = 5
KEYBOARD_X = LIST_ITEM_W + 16
KEYBOARD_Y = LIST_Y
KEYBOARD_W = 190
LIST_ITEM_TEXT1 equ dword [sc.work_text]
LIST_ITEM_TEXT2 equ dword [sc.work_text]
WIN_X = 200
WIN_Y = 200
WIN_W = LIST_ITEM_W + KEYBOARD_W + 7
WIN_H = LIST_H + 60
sz_head db "Calc+", 0
btn_clr db "" ; "Enter" symbol, curved arrow in input area
buttons db "|%^*/-+)(=7894561230"
edb1 edit_box 0, 14, 12, 0xFFFFFF, 0x94AECE, 0xFFC90E, 0xCACACA, 0x10000000, \
480, exp, group, ed_always_focus + ed_focus, 0, 0
; ====================================================================
START:
mov [ans.buffer], dword " = 0"
mov [ans.size], 4 * 8 + 9
mcall SF_SET_EVENTS_MASK, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
m2m [edb1.color], [scn.gui_face] m2m [edb1.color], [scn.gui_face]
m2m [edb1.shift_color], [scn.gui_select]
m2m [edb1.focus_border_color], [scn.gui_face]
m2m [edb1.text_color], [scn.gui_text]
mcall 68, 11 mcall SF_SYS_MISC, SSF_HEAP_INIT
stdcall dll.Load, imports stdcall dll.Load, imports
;---------------------- ; ====================================================================
update: update:
mcall 23, 5 mcall SF_WAIT_EVENT_TIMEOUT, 5
cmp eax, EV_REDRAW cmp eax, EV_REDRAW
je ev_redraw je ev_redraw
cmp eax, EV_KEY cmp eax, EV_KEY
je ev_key je ev_key
cmp eax, EV_BUTTON cmp eax, EV_BUTTON
je ev_button je ev_button
cmp eax, EV_MOUSE cmp eax, EV_MOUSE
je ev_mouse je ev_mouse
jmp update jmp update
;---------------------- ; ====================================================================
ev_redraw: ev_redraw:
mcall 12, 1 mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
; WINDOW ; WINDOW
mov edx, [scn.win_face] mov edx, [sc.work]
or edx, 0x34 shl 24 or edx, 0x34 shl 24
mcall 0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head
; TOOLBAR mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
mov ebx, 120 shl 16 + 64 mov ecx, WIN_Y shl 16 + WIN_H
mcall 8, , <-17, 12>, 2 + 1 shl 30 add ecx, eax
add ebx, 4 shl 16 - (64 + 14)
mcall 4, , [scn.win_title], sz_cont, 10 mcall SF_GET_SCREEN_SIZE
shr eax, 16
mov ebx, eax
sub ebx, WIN_W
shr ebx, 1
mcall 0, <ebx, WIN_W>, , , , sz_head
; CONTENT ; CONTENT
call draw_textbox call draw_textbox
call draw_keyb call draw_keyb
call draw_list call draw_list
mcall 12, 2 mcall SF_REDRAW, SSF_END_DRAW
jmp update jmp update
;---------------------- ; ====================================================================
ev_key:
mcall SF_GET_KEY
ev_key:
mcall 2
cmp ah, 27 cmp ah, 27
je exit je exit
cmp ah, 13 cmp ah, 13
je calc je calc
invoke editbox.key, edb1 invoke editbox.key, edb1
jmp update jmp update
;---------------------- ; ====================================================================
ev_button: ev_button:
mcall 17 mcall SF_GET_BUTTON
; EXIT ; EXIT
cmp ah, 1 cmp ah, 1
je exit je exit
cmp ah, 250
jne @f
mcall SF_FILE, f70_calc
jmp update
; DELETE ; DELETE
@@:
cmp ah, 4 cmp ah, 4
jne .not_del jne .not_del
cmp [edb1.pos], 0 cmp [edb1.pos], 0
je update je update
mov eax, exp mov eax, exp
@@ -128,6 +174,7 @@
mov ebx, exp mov ebx, exp
add ebx, [edb1.size] add ebx, [edb1.size]
inc ebx inc ebx
@@: @@:
cmp eax, ebx cmp eax, ebx
je @f je @f
@@ -135,32 +182,15 @@
mov [eax], cl mov [eax], cl
inc eax inc eax
jmp @b jmp @b
@@: @@:
dec [edb1.pos] dec [edb1.pos]
dec [edb1.size] dec [edb1.size]
m2m [edb1.shift], [edb1.pos] m2m [edb1.shift], [edb1.pos]
jmp .redraw jmp .redraw
.not_del: .not_del:
; SHOW/HIDE KEYBOARD
cmp ah, 2
jne .not_keyb
cmp [keyb], byte 0
je .open
mov [keyb], 0
mov [sz_cont + 9], byte 0x10
mcall 67, -1, -1, 286 - 25, -1
jmp update
.open:
mov [keyb], 1
mov [sz_cont + 9], byte 0x11
mcall 67, -1, -1, 286 - 25 + KEYB_SIZE, -1
jmp update
.not_keyb:
; CALCULATE ; CALCULATE
cmp ah, 19 cmp ah, 19
je calc je calc
@@ -181,6 +211,7 @@
add edx, eax add edx, eax
mov edi, exp mov edi, exp
add edi, [edb1.pos] add edi, [edb1.pos]
@@: @@:
cmp edx, edi cmp edx, edi
je @f je @f
@@ -192,6 +223,7 @@
pop eax pop eax
dec edx dec edx
jmp @b jmp @b
@@: @@:
add [edb1.size], eax add [edb1.size], eax
@@ -205,9 +237,10 @@
dec eax dec eax
inc [edb1.pos] inc [edb1.pos]
jmp @b jmp @b
@@:
@@:
jmp .redraw jmp .redraw
.not_list: .not_list:
; KEYBOARD ; KEYBOARD
@@ -224,6 +257,7 @@
cmp dh, 30 cmp dh, 30
jl @f jl @f
add ebx, 2 add ebx, 2
@@: @@:
cmp ebx, ecx cmp ebx, ecx
je @f je @f
@@ -231,8 +265,8 @@
mov [ebx], dl mov [ebx], dl
dec ebx dec ebx
jmp @b jmp @b
@@:
@@:
movzx eax, dh movzx eax, dh
add eax, buttons add eax, buttons
sub eax, 10 sub eax, 10
@@ -245,37 +279,38 @@
jl @f jl @f
add [edb1.size], 2 add [edb1.size], 2
add [edb1.pos], 2 add [edb1.pos], 2
@@: @@:
.redraw: .redraw:
call draw_textbox call draw_textbox
jmp update jmp update
;---------------------- ; ====================================================================
ev_mouse: ev_mouse:
mcall 2 mcall SF_GET_KEY
invoke editbox.mouse, edb1 invoke editbox.mouse, edb1
jmp update jmp update
;---------------------- ; ====================================================================
exit: exit:
mcall -1 mcall SF_TERMINATE_PROCESS
;---------------------- ; ====================================================================
calc: calc:
stdcall parse stdcall parse
cmp [error_n], 0 cmp [error_n], 0
jne .error jne .error
mov [ans.buffer], word "= " mov [ans.buffer], dword " = "
stdcall convert_to_str, eax, ans.buffer + 2 stdcall convert_to_str, eax, ans.buffer + 3
add eax, 2 add eax, 3
mov edi, eax mov edi, eax
imul eax, 6 imul eax, 8 ; char_w
add eax, 9 add eax, 9
mov [ans.size], eax mov [ans.size], eax
@@ -283,6 +318,7 @@
mov ecx, LIST_ITEM_COUNT - 1 mov ecx, LIST_ITEM_COUNT - 1
mov eax, history mov eax, history
add eax, (LIST_ITEM_COUNT - 1) * 512 add eax, (LIST_ITEM_COUNT - 1) * 512
@@: @@:
mov ebx, eax mov ebx, eax
sub ebx, 512 sub ebx, 512
@@ -301,7 +337,6 @@
stdcall str_cpy, ans.buffer, history + 480 stdcall str_cpy, ans.buffer, history + 480
mov esi, [ans.size] mov esi, [ans.size]
mov dword[history + 508], esi mov dword[history + 508], esi
not [his_even]
; Check length ; Check length
mov esi, 37 mov esi, 37
@@ -319,7 +354,6 @@
jmp .redraw jmp .redraw
; ERRORS ; ERRORS
.error: .error:
cmp [error_n], 1 cmp [error_n], 1
je .err_1 je .err_1
@@ -330,7 +364,7 @@
mov [ans.buffer + 4], dword "cted" mov [ans.buffer + 4], dword "cted"
mov [ans.buffer + 8], dword " ')'" mov [ans.buffer + 8], dword " ')'"
mov [ans.buffer + 12], byte 0 mov [ans.buffer + 12], byte 0
mov [ans.size], 81 mov [ans.size], 105
cmp [error_n], 2 cmp [error_n], 2
je .redraw je .redraw
@@ -338,213 +372,222 @@
je .err_3 je .err_3
cmp [error_n], 5 cmp [error_n], 5
je .err_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 "
mov [ans.buffer + 8], byte "0" mov [ans.buffer + 8], byte "0"
mov [ans.buffer + 9], byte 0 mov [ans.buffer + 9], byte 0
mov [ans.size], 63 mov [ans.size], 81
jmp .redraw jmp .redraw
.err_4: .err_4:
mov [ans.buffer + 0], dword "Inpu" mov [ans.buffer + 0], dword "Inpu"
mov [ans.buffer + 4], dword "t er" mov [ans.buffer + 4], dword "t er"
mov [ans.buffer + 8], dword "rror" mov [ans.buffer + 8], dword "rror"
mov [ans.buffer + 12], byte 0 mov [ans.buffer + 12], byte 0
mov [ans.size], 81 mov [ans.size], 105
jmp .redraw jmp .redraw
.err_3: .err_3:
mov [ans.buffer + 10], byte "(" mov [ans.buffer + 10], byte "("
jmp .redraw jmp .redraw
.err_5: .err_5:
mov [ans.buffer + 10], byte "|" mov [ans.buffer + 10], byte "|"
jmp .redraw jmp .redraw
.redraw: .redraw:
call draw_textbox call draw_textbox
call draw_list call draw_list
jmp update jmp update
;---------------------- ; ====================================================================
proc draw_button, x, y proc draw_textbox
mcall 8, <[x], 30>, <[y], 21>, [but_id], [but_c]
; border
mcall SF_DRAW_RECT, <LIST_X, LIST_ITEM_W>, < 8, 30>, [sc.work_graph]
; background
mov edx, [scn.gui_face]
cmp [error_n], 0
je @f
mov edx, 0xFFAAAA
@@:
mcall SF_DRAW_RECT, <LIST_X + 1, LIST_ITEM_W - 2>, < 9, 28>
mcall , <LIST_X + 1, LIST_ITEM_W - 2>, < 9, 1>, [scn.gui_tb_in_shd]
mcall , <LIST_X + 1, 1 >, < 10, 27>
mov ebx, LIST_X + LIST_ITEM_W - 12
sub ebx, [ans.size]
shl ebx, 16
add ebx, 16
mov ecx, [scn.gui_intext]
add ecx, 0x10000000
or ecx, 1 shl 31
mcall SF_DRAW_TEXT, , , ans.buffer
mcall , <LIST_ITEM_W - 8, 19>, [scn.gui_intext], btn_clr, 1
add ebx, 1 shl 16
mcall
mcall SF_DEFINE_BUTTON, <LIST_ITEM_W - 14, 17>, <9, 27>, 4 + BT_HIDE
mov ebx, LIST_ITEM_W - 18
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] , 0x00FFAAAA
mov [edb1.focus_border_color], 0x00FFAAAA
@@:
invoke editbox.draw, edb1
ret
endp
; ====================================================================
proc draw_button, x, y
mcall SF_DEFINE_BUTTON, <[x], KEYB_BTN_W>, <[y], KEYB_BTN_H>, [but_id], [but_c]
mov ebx, [x] mov ebx, [x]
mov esi, [txt_size] add ebx, KEYB_BTN_W/2-4
imul esi, 3
mov edi, 16
sub edi, esi
add ebx, edi
shl ebx, 16 shl ebx, 16
add ebx, [y] add ebx, [y]
add ebx, 7 add ebx, KEYB_BTN_H/2 - 6
mcall 4, , [but_tc], [txt_id], [txt_size] or [but_tc], 0x01000000 ; use bigger font
mcall SF_DRAW_TEXT, , [but_tc], [txt_id], [txt_size]
mov eax, [txt_size] mov eax, [txt_size]
add [txt_id], eax add [txt_id], eax
inc dword [but_id] inc dword [but_id]
ret ret
endp
;---------------------- endp
proc draw_textbox ; ====================================================================
mcall 13, <4, 320 - 50 - 25>, < 8, 23>, [scn.gui_frame]
mov edx, [scn.gui_face]
cmp [error_n], 0
je @f
mov edx, 0xFFAAAA
@@:
mcall 13, < 5, 318 - 50 - 25>, < 9, 21>
mcall , < 5, 318 - 50 - 25>, < 9, 1>, [scn.3d_face]
mcall , < 5, 1>, < 10, 20>
mcall , < 5, 318 - 50 - 25>, < 31, 1>, [scn.3d_light]
mov ebx, 328 - 16 - 50 - 25 proc draw_keyb
sub ebx, [ans.size]
shl ebx, 16
add ebx, 16
mov ecx, [scn.gui_intext]
or ecx, 1 shl 31
mcall 4, , , ans.buffer
mov ecx, [scn.gui_text] mcall SF_DEFINE_BUTTON, <KEYBOARD_X, (KEYB_BTN_W + GAP)*4 - GAP>, <8, 29>, 250, [sc.work_light]
mcall , <310 - 50 - 25, 16>, , btn_clr, 1 mov ecx, [sc.work_text]
add ebx, 1 shl 16 or ecx, 0x10000000
mcall mcall SF_DRAW_TEXT, <(KEYB_BTN_W + GAP - engineering_len*2)*2 - GAP/2 + KEYBOARD_X, KEYB_BTN_H / 2 - 10 + 8>, , engineering_str, engineering_len
mcall 8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004
mcall 1, 4, 8, [scn.win_body]
mcall , 323 - 50 - 25
mcall , , 30, [scn.3d_light]
mcall , 4
mov ebx, 318 - 16 - 50 - 25
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
;----------------------
proc draw_keyb
cmp [keyb], byte 0
je @f
mov [txt_size], 1 mov [txt_size], 1
mov [but_id], 0x0000000A mov [but_id], 0x0000000A
mov [txt_id], buttons mov [txt_id], buttons
mov eax, [scn.win_face] m2m [but_c], [sc.work]
mov [but_c], eax m2m [but_tc], [sc.work_text]
mov eax, [scn.win_text] stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y
mov [but_tc], eax stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y
stdcall draw_button, 4 + 278 - 25, 42 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y
stdcall draw_button, 37 + 278 - 25, 42 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y
stdcall draw_button, 70 + 278 - 25, 42 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*1
stdcall draw_button, 103 + 278 - 25, 42 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
stdcall draw_button, 103 + 278 - 25, 66 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
stdcall draw_button, 103 + 278 - 25, 90 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
stdcall draw_button, 103 + 278 - 25, 114 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
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] , 0x00F0969D
mov [but_c], eax mov [but_tc], 0x00FFFFFF
mov eax, [scn.btn_intext] stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y +(KEYB_BTN_H + GAP)*4
mov [but_tc], eax
stdcall draw_button, 103 + 278 - 25, 139 - 25 - 8
mov eax, [scn.btn_face] m2m [but_c] , [sc.work_button]
mov [but_c], eax m2m [but_tc], [sc.work_button_text]
mov eax, [scn.btn_text] stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + KEYB_BTN_H + GAP
mov [but_tc], eax stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + KEYB_BTN_H + GAP
stdcall draw_button, 4 + 278 - 25, 66 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + KEYB_BTN_H + GAP
stdcall draw_button, 37 + 278 - 25, 66 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
stdcall draw_button, 70 + 278 - 25, 66 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
stdcall draw_button, 4 + 278 - 25, 90 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
stdcall draw_button, 37 + 278 - 25, 90 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
stdcall draw_button, 70 + 278 - 25, 90 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
stdcall draw_button, 4 + 278 - 25, 114 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
stdcall draw_button, 37 + 278 - 25, 114 - 25 - 8 stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
stdcall draw_button, 70 + 278 - 25, 114 - 25 - 8
stdcall draw_button, 4 + 278 - 25, 139 - 25 - 8
@@:
ret ret
endp
;---------------------- endp
; ====================================================================
proc draw_list
proc draw_list
; BACKGROUND ; BACKGROUND
mov eax, SF_DRAW_RECT
mov ebx, LIST_X shl 16 + LIST_ITEM_W
mov ecx, LIST_Y shl 16 + LIST_ITEM_H
mov edx, [sc.work_light]
mov edi, LIST_ITEM_COUNT 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 mcall
add ecx, LIST_ITEM_SIZE shl 16 ; draw separator {
cmp edx, LIST_ITEM_COLOR1 push ecx edx
je .set_color_to_2 sub ecx, LIST_ITEM_H - 1
mov edx, LIST_ITEM_COLOR1 mov edx, [sc.work_dark]
jmp .next mcall
.set_color_to_2: ; }
mov edx, LIST_ITEM_COLOR2 pop edx ecx
add ecx, LIST_ITEM_H shl 16
.next: .next:
dec edi dec edi
cmp edi, 0 cmp edi, 0
jne @b jne @b
mcall , <LIST_X , 1>, <LIST_Y, LIST_ITEM_H * 8>, [sc.work_dark]
mcall , <LIST_X + LIST_ITEM_W - 1, 1>,
mcall , <LIST_X, LIST_ITEM_W>, <LIST_Y + LIST_ITEM_H * 8, 1>
; BUTTONS ; BUTTONS
mov eax, SF_DEFINE_BUTTON
mov ebx, LIST_X shl 16 + LIST_ITEM_W
mov ecx, 43 shl 16 + LIST_ITEM_H
mov edx, 60 + BT_HIDE
mov edi, LIST_ITEM_COUNT 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 mcall
add ecx, LIST_ITEM_SIZE shl 16 add ecx, LIST_ITEM_H shl 16
inc edx inc edx
dec edi dec edi
cmp edi, 0 cmp edi, 0
jne @b jne @b
; TEXT ; TEXT
mov eax, SF_DRAW_TEXT
mov ebx, (LIST_X + LIST_X) shl 16 + LIST_Y + LIST_TEXT_Y + 1
mov ecx, [sc.work_text]
mov edi, LIST_ITEM_COUNT 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 or ecx, 1 shl 31
mov edx, history mov edx, history
@@: @@:
add ecx, 0x10000000
mcall mcall
push ebx push ebx
add ebx, (320 - 50 - 25) shl 16 add ebx, (LIST_ITEM_W - 8) shl 16
mov esi, [edx + 508] mov esi, [edx + 508]
shl esi, 16 shl esi, 16
sub ebx, esi sub ebx, esi
@@ -553,15 +596,17 @@
pop ebx pop ebx
add edx, 32 add edx, 32
add ebx, LIST_ITEM_SIZE add ebx, LIST_ITEM_H
and ecx, 0xFFFFFF and ecx, 0xFFFFFF
cmp ecx, LIST_ITEM_TEXT2 cmp ecx, LIST_ITEM_TEXT2
je .set_color_to_2_txt je .set_color_to_2_txt
mov ecx, LIST_ITEM_TEXT2 mov ecx, LIST_ITEM_TEXT2
jmp .next_txt jmp .next_txt
.set_color_to_2_txt: .set_color_to_2_txt:
mov ecx, LIST_ITEM_TEXT1 mov ecx, LIST_ITEM_TEXT1
.next_txt: .next_txt:
or ecx, 1 shl 31 or ecx, 1 shl 31
@@ -570,29 +615,35 @@
jne @b jne @b
ret ret
endp
;---------------------- endp
; ====================================================================
proc str_len uses ebx, str
proc str_len uses ebx, str
xor eax, eax xor eax, eax
mov ebx, [str] mov ebx, [str]
@@: @@:
cmp [ebx], byte 0 cmp [ebx], byte 0
je @f je @f
inc eax inc eax
inc ebx inc ebx
jmp @b jmp @b
@@: @@:
ret ret
endp
;---------------------- endp
; ====================================================================
proc str_cpy uses eax ebx ecx, from, to
proc str_cpy uses eax ebx ecx, from, to
mov eax, [from] mov eax, [from]
mov ebx, [to] mov ebx, [to]
@@: @@:
cmp [eax], byte 0 cmp [eax], byte 0
je @f je @f
@@ -601,68 +652,77 @@
inc eax inc eax
inc ebx inc ebx
jmp @b jmp @b
@@: @@:
mov [ebx], byte 0 mov [ebx], byte 0
ret ret
endp
;---------------------- endp
dataend: ; ====================================================================
;=============================== if lang eq ru_RU
rb 2048 engineering_str cp866 "Инженерный режим"
stacktop: engineering_len = $ - engineering_str
exp rb 480 else if lang eq es_ES
exp_pos rd 1
exp_lvl rd 1
abs_lvl rd 1
group rd 1
ans.buffer:rb 480 engineering_str db " Modo ingeniero "
ans.size rd 1 engineering_len = $ - engineering_str
error_n rd 1 else
timer rd 1 engineering_str db "Engineering calc"
but_id rd 1 engineering_len = $ - engineering_str
but_c rd 1
but_tc rd 1
txt_id rd 1
txt_size rd 1
keyb rb 1
his_even rb 1 endf
history rb 512 * LIST_ITEM_COUNT
; ====================================================================
f70_calc:
dd SSF_START_APP
dd 0
dd 0
dd 0
dd 0
db '/sys/calc', 0
; system colors internal
scn:
.gui_tb_in_shd dd 0x00CED0D0
.gui_face dd 0x00FAF8FA
.gui_text dd 0x10373C42
.gui_intext dd 0x005F5F5F
.gui_select dd 0x00C7C9C9
; ====================================================================
I_END:
rb 2048
STACKTOP:
exp rb 480
exp_pos rd 1
exp_lvl rd 1
abs_lvl rd 1
group rd 1
ans.buffer: rb 480
ans.size rd 1
error_n rd 1
timer rd 1
but_id rd 1
but_c rd 1
but_tc rd 1
txt_id rd 1
txt_size rd 1
history rb 512 * LIST_ITEM_COUNT
rb 512 rb 512
struc system_colors_internal { sc system_colors
.3d_face dd 0xCED0D0
.3d_dark dd 0xD7D7D7
.3d_light dd 0xFEFEFE
.win_title dd 0x2F2F2F
.win_body dd 0xE4DFE1
.btn_face dd 0xEFEBEF
.btn_text dd 0x373C42
.win_text dd 0x000000
.panel_frame dd 0x94AECE
.win_face dd 0xE1E1E1
.win_inface dd 0xE1E1E1
.win_frame dd 0x204962
.btn_inface dd 0xEFEBEF
.btn_intext dd 0xD0D9E8
.btn_fctext dd 0x2D3135
.gui_shadow dd 0xFFFFFF
.gui_face dd 0xFAF8FA
.gui_inface dd 0xF6F3F6
.gui_fcface dd 0xFAF8FA
.gui_frame dd 0x7698C0
.gui_text dd 0x373C42
.gui_intext dd 0x5F5F5F
.gui_select dd 0xC7C9C9
}
scn system_colors_internal MEM:
memory: