Calc+ v1.0 (#189)
- Bigger fonts - System colors - Code refactoring to make UI flexible and more readable - Move from ISO to IMG - Add to main menu, add to desktop instead of Calc, remove from App+ - Localization to all system languages - Source code file is now UTF-8 Co-authored-by: Burer <burer@kolibrios.org> Reviewed-on: #189 Reviewed-by: Max Logaev <maxlogaev@proton.me> Co-authored-by: Kiril Lipatov <lipatov.kiril@gmail.com> Co-committed-by: Kiril Lipatov <lipatov.kiril@gmail.com>
This commit is contained in:
@@ -410,6 +410,7 @@ tup.append_table(img_files, {
|
||||
{"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"},
|
||||
{"APM", VAR_PROGS .. "/system/apm/apm"},
|
||||
{"CALC", VAR_PROGS .. "/other/calc/trunk/calc"},
|
||||
{"CALCPLUS", VAR_PROGS .. "/other/calcplus/calcplus"},
|
||||
{"CALENDAR", VAR_PROGS .. "/system/calendar/trunk/calendar"},
|
||||
{"COLRDIAL", VAR_PROGS .. "/system/colrdial/color_dialog"},
|
||||
{"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/scaling.obj", VAR_PROGS .. "/media/zsea/plugins/scaling/scaling.obj"},
|
||||
{"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/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"},
|
||||
{"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"}
|
||||
|
@@ -29,7 +29,6 @@ Dicty=/k/utils/DICTY.KEX,79
|
||||
fNav=/k/utils/fNav/fNav,93
|
||||
CncEditor=/k/utils/cnc_editor/cnc_editor,15
|
||||
Life=/k/demos/life2,13
|
||||
Calc+=/k/utils/calcplus,4
|
||||
TinyBasic=/k/develop/TinyBasic/TinyBasic,91
|
||||
THashView=/k/utils/thashview,124
|
||||
Notes=/k/utils/notes,117
|
||||
|
@@ -235,8 +235,8 @@ ico=58
|
||||
x=68
|
||||
y=68
|
||||
[21]
|
||||
name=CALC
|
||||
path=CALC
|
||||
name=CALC+
|
||||
path=CALCPLUS
|
||||
param=
|
||||
ico=4
|
||||
x=204
|
||||
|
@@ -92,6 +92,7 @@
|
||||
59 Screen keyboard |zkey
|
||||
#10 **** DATA PROCESSING
|
||||
16 Calculator |calc
|
||||
16 Calculator+ |calcplus
|
||||
03 Tinypad |tinypad
|
||||
28 CodeEdit |develop/cedit
|
||||
21 Table processor |table
|
||||
|
@@ -235,8 +235,8 @@ ico=58
|
||||
x=68
|
||||
y=68
|
||||
[21]
|
||||
name=CALC
|
||||
path=CALC
|
||||
name=CALC+
|
||||
path=CALCPLUS
|
||||
param=
|
||||
ico=4
|
||||
x=204
|
||||
|
@@ -96,6 +96,7 @@
|
||||
24 NDN * |/kolibrios/utils/ndn/ndn
|
||||
#11 **** PROCESO DE DATOS
|
||||
16 Calculadora |calc
|
||||
16 Calculadora+ |calcplus
|
||||
16 Tinypad |tinypad
|
||||
16 CodeEdit |develop/cedit
|
||||
16 Procesador de tablas |table
|
||||
|
@@ -235,8 +235,8 @@ ico=58
|
||||
x=68
|
||||
y=68
|
||||
[21]
|
||||
name=CALC
|
||||
path=CALC
|
||||
name=CALC+
|
||||
path=CALCPLUS
|
||||
param=
|
||||
ico=4
|
||||
x=204
|
||||
|
@@ -80,6 +80,7 @@
|
||||
65 NDN * |/kolibrios/utils/ndn/ndn
|
||||
#11 **** DATA PROCESSING ****
|
||||
16 Kalkulaator |calc
|
||||
16 Kalkulaator+ |calcplus
|
||||
16 Teksti redaktor |tinypad
|
||||
16 CodeEdit |develop/cedit
|
||||
16 Tabelarvutus |table
|
||||
|
@@ -235,8 +235,8 @@ ico=58
|
||||
x=68
|
||||
y=68
|
||||
[21]
|
||||
name=CALC
|
||||
path=CALC
|
||||
name=CALC+
|
||||
path=CALCPLUS
|
||||
param=
|
||||
ico=4
|
||||
x=204
|
||||
|
@@ -79,6 +79,7 @@
|
||||
65 NDN * |/kolibrios/utils/ndn/ndn
|
||||
#11 **** DATA PROCESSING
|
||||
16 Calcolatrice |calc
|
||||
16 Calcolatrice+ |calcplus
|
||||
16 Tinypad |tinypad
|
||||
16 CodeEdit |develop/cedit
|
||||
16 Table Processor |table
|
||||
|
@@ -235,8 +235,8 @@ ico=58
|
||||
x=68
|
||||
y=68
|
||||
[21]
|
||||
name=CALC
|
||||
path=CALC
|
||||
name=CALC+
|
||||
path=CALCPLUS
|
||||
param=
|
||||
ico=4
|
||||
x=204
|
||||
|
@@ -90,6 +90,7 @@
|
||||
59 <20><>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |zkey
|
||||
#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>+ |calcplus
|
||||
03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tinypad |tinypad
|
||||
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
|
||||
|
@@ -1,2 +1,5 @@
|
||||
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")
|
||||
|
||||
|
@@ -1,2 +0,0 @@
|
||||
@fasm calcplus.asm calc+
|
||||
@pause
|
@@ -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
|
||||
dd 1
|
||||
dd START
|
||||
dd I_END
|
||||
dd MEM
|
||||
dd STACKTOP
|
||||
dd 0, 0
|
||||
|
||||
; ====================================================================
|
||||
|
||||
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 "../../debug.inc"
|
||||
include "parser.inc"
|
||||
|
||||
;===============================
|
||||
|
||||
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
|
||||
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"
|
||||
import gui, editbox.draw, "edit_box", \
|
||||
editbox.key, "edit_box_key", \
|
||||
editbox.mouse, "edit_box_mouse"
|
||||
|
||||
;===============================
|
||||
; ====================================================================
|
||||
|
||||
main:
|
||||
LIST_X = 8
|
||||
LIST_Y = 47
|
||||
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
|
||||
|
||||
KEYB_BTN_W = 37
|
||||
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], 3 * 6 + 9
|
||||
|
||||
mcall 40, 100111b
|
||||
; mcall 48, 3, scn, 192
|
||||
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.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
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
update:
|
||||
mcall 23, 5
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 5
|
||||
|
||||
cmp eax, EV_REDRAW
|
||||
je ev_redraw
|
||||
|
||||
cmp eax, EV_KEY
|
||||
je ev_key
|
||||
|
||||
cmp eax, EV_BUTTON
|
||||
je ev_button
|
||||
|
||||
cmp eax, EV_MOUSE
|
||||
je ev_mouse
|
||||
|
||||
jmp update
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
ev_redraw:
|
||||
mcall 12, 1
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
|
||||
|
||||
; WINDOW
|
||||
mov edx, [scn.win_face]
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x34 shl 24
|
||||
mcall 0, <100, 236 + 100 - 50 - 25>, <100, 66 + LIST_SIZE>, , , sz_head
|
||||
|
||||
; TOOLBAR
|
||||
mov ebx, 120 shl 16 + 64
|
||||
mcall 8, , <-17, 12>, 2 + 1 shl 30
|
||||
add ebx, 4 shl 16 - (64 + 14)
|
||||
mcall 4, , [scn.win_title], sz_cont, 10
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
mov ecx, WIN_Y shl 16 + WIN_H
|
||||
add ecx, eax
|
||||
|
||||
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
|
||||
call draw_textbox
|
||||
call draw_keyb
|
||||
call draw_list
|
||||
|
||||
mcall 12, 2
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
jmp update
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
ev_key:
|
||||
mcall 2
|
||||
mcall SF_GET_KEY
|
||||
|
||||
cmp ah, 27
|
||||
je exit
|
||||
|
||||
cmp ah, 13
|
||||
je calc
|
||||
|
||||
invoke editbox.key, edb1
|
||||
|
||||
jmp update
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
ev_button:
|
||||
mcall 17
|
||||
mcall SF_GET_BUTTON
|
||||
|
||||
; EXIT
|
||||
cmp ah, 1
|
||||
je exit
|
||||
|
||||
cmp ah, 250
|
||||
jne @f
|
||||
mcall SF_FILE, f70_calc
|
||||
jmp update
|
||||
|
||||
; DELETE
|
||||
@@:
|
||||
cmp ah, 4
|
||||
jne .not_del
|
||||
|
||||
cmp [edb1.pos], 0
|
||||
je update
|
||||
mov eax, exp
|
||||
@@ -128,6 +174,7 @@
|
||||
mov ebx, exp
|
||||
add ebx, [edb1.size]
|
||||
inc ebx
|
||||
|
||||
@@:
|
||||
cmp eax, ebx
|
||||
je @f
|
||||
@@ -135,32 +182,15 @@
|
||||
mov [eax], cl
|
||||
inc eax
|
||||
jmp @b
|
||||
|
||||
@@:
|
||||
dec [edb1.pos]
|
||||
dec [edb1.size]
|
||||
m2m [edb1.shift], [edb1.pos]
|
||||
jmp .redraw
|
||||
|
||||
.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
|
||||
cmp ah, 19
|
||||
je calc
|
||||
@@ -181,6 +211,7 @@
|
||||
add edx, eax
|
||||
mov edi, exp
|
||||
add edi, [edb1.pos]
|
||||
|
||||
@@:
|
||||
cmp edx, edi
|
||||
je @f
|
||||
@@ -192,6 +223,7 @@
|
||||
pop eax
|
||||
dec edx
|
||||
jmp @b
|
||||
|
||||
@@:
|
||||
add [edb1.size], eax
|
||||
|
||||
@@ -205,9 +237,10 @@
|
||||
dec eax
|
||||
inc [edb1.pos]
|
||||
jmp @b
|
||||
@@:
|
||||
|
||||
@@:
|
||||
jmp .redraw
|
||||
|
||||
.not_list:
|
||||
|
||||
; KEYBOARD
|
||||
@@ -224,6 +257,7 @@
|
||||
cmp dh, 30
|
||||
jl @f
|
||||
add ebx, 2
|
||||
|
||||
@@:
|
||||
cmp ebx, ecx
|
||||
je @f
|
||||
@@ -231,8 +265,8 @@
|
||||
mov [ebx], dl
|
||||
dec ebx
|
||||
jmp @b
|
||||
@@:
|
||||
|
||||
@@:
|
||||
movzx eax, dh
|
||||
add eax, buttons
|
||||
sub eax, 10
|
||||
@@ -245,37 +279,38 @@
|
||||
jl @f
|
||||
add [edb1.size], 2
|
||||
add [edb1.pos], 2
|
||||
|
||||
@@:
|
||||
.redraw:
|
||||
call draw_textbox
|
||||
jmp update
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
ev_mouse:
|
||||
mcall 2
|
||||
mcall SF_GET_KEY
|
||||
|
||||
invoke editbox.mouse, edb1
|
||||
jmp update
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
exit:
|
||||
mcall -1
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
calc:
|
||||
stdcall parse
|
||||
cmp [error_n], 0
|
||||
jne .error
|
||||
|
||||
mov [ans.buffer], word "= "
|
||||
mov [ans.buffer], dword " = "
|
||||
|
||||
stdcall convert_to_str, eax, ans.buffer + 2
|
||||
add eax, 2
|
||||
stdcall convert_to_str, eax, ans.buffer + 3
|
||||
add eax, 3
|
||||
mov edi, eax
|
||||
imul eax, 6
|
||||
imul eax, 8 ; char_w
|
||||
add eax, 9
|
||||
mov [ans.size], eax
|
||||
|
||||
@@ -283,6 +318,7 @@
|
||||
mov ecx, LIST_ITEM_COUNT - 1
|
||||
mov eax, history
|
||||
add eax, (LIST_ITEM_COUNT - 1) * 512
|
||||
|
||||
@@:
|
||||
mov ebx, eax
|
||||
sub ebx, 512
|
||||
@@ -301,7 +337,6 @@
|
||||
stdcall str_cpy, ans.buffer, history + 480
|
||||
mov esi, [ans.size]
|
||||
mov dword[history + 508], esi
|
||||
not [his_even]
|
||||
|
||||
; Check length
|
||||
mov esi, 37
|
||||
@@ -319,7 +354,6 @@
|
||||
jmp .redraw
|
||||
|
||||
; ERRORS
|
||||
|
||||
.error:
|
||||
cmp [error_n], 1
|
||||
je .err_1
|
||||
@@ -330,7 +364,7 @@
|
||||
mov [ans.buffer + 4], dword "cted"
|
||||
mov [ans.buffer + 8], dword " ')'"
|
||||
mov [ans.buffer + 12], byte 0
|
||||
mov [ans.size], 81
|
||||
mov [ans.size], 105
|
||||
|
||||
cmp [error_n], 2
|
||||
je .redraw
|
||||
@@ -338,213 +372,222 @@
|
||||
je .err_3
|
||||
cmp [error_n], 5
|
||||
je .err_5
|
||||
|
||||
.err_1:
|
||||
mov [ans.buffer + 0], dword "Div."
|
||||
mov [ans.buffer + 4], dword " by "
|
||||
mov [ans.buffer + 8], byte "0"
|
||||
mov [ans.buffer + 9], byte 0
|
||||
mov [ans.size], 63
|
||||
mov [ans.size], 81
|
||||
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
|
||||
mov [ans.size], 105
|
||||
jmp .redraw
|
||||
|
||||
.err_3:
|
||||
mov [ans.buffer + 10], byte "("
|
||||
jmp .redraw
|
||||
|
||||
.err_5:
|
||||
mov [ans.buffer + 10], byte "|"
|
||||
jmp .redraw
|
||||
|
||||
.redraw:
|
||||
|
||||
call draw_textbox
|
||||
call draw_list
|
||||
jmp update
|
||||
|
||||
;----------------------
|
||||
|
||||
proc draw_button, x, y
|
||||
mcall 8, <[x], 30>, <[y], 21>, [but_id], [but_c]
|
||||
|
||||
mov ebx, [x]
|
||||
mov esi, [txt_size]
|
||||
imul esi, 3
|
||||
mov edi, 16
|
||||
sub edi, esi
|
||||
add ebx, edi
|
||||
shl ebx, 16
|
||||
add ebx, [y]
|
||||
add ebx, 7
|
||||
mcall 4, , [but_tc], [txt_id], [txt_size]
|
||||
|
||||
mov eax, [txt_size]
|
||||
add [txt_id], eax
|
||||
inc dword [but_id]
|
||||
|
||||
ret
|
||||
endp
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
proc draw_textbox
|
||||
mcall 13, <4, 320 - 50 - 25>, < 8, 23>, [scn.gui_frame]
|
||||
|
||||
; 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 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
|
||||
@@:
|
||||
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 4, , , ans.buffer
|
||||
mcall SF_DRAW_TEXT, , , ans.buffer
|
||||
|
||||
mov ecx, [scn.gui_text]
|
||||
mcall , <310 - 50 - 25, 16>, , btn_clr, 1
|
||||
mcall , <LIST_ITEM_W - 8, 19>, [scn.gui_intext], btn_clr, 1
|
||||
add ebx, 1 shl 16
|
||||
mcall
|
||||
|
||||
mcall 8, <305 - 50 - 25, 17>, <9, 20>, 0x40000004
|
||||
mcall SF_DEFINE_BUTTON, <LIST_ITEM_W - 14, 17>, <9, 27>, 4 + BT_HIDE
|
||||
|
||||
mcall 1, 4, 8, [scn.win_body]
|
||||
mcall , 323 - 50 - 25
|
||||
mcall , , 30, [scn.3d_light]
|
||||
mcall , 4
|
||||
|
||||
mov ebx, 318 - 16 - 50 - 25
|
||||
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], 0xFFAAAA
|
||||
mov [edb1.focus_border_color], 0xFFAAAA
|
||||
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]
|
||||
add ebx, KEYB_BTN_W/2-4
|
||||
|
||||
shl ebx, 16
|
||||
add ebx, [y]
|
||||
add ebx, KEYB_BTN_H/2 - 6
|
||||
or [but_tc], 0x01000000 ; use bigger font
|
||||
mcall SF_DRAW_TEXT, , [but_tc], [txt_id], [txt_size]
|
||||
|
||||
mov eax, [txt_size]
|
||||
add [txt_id], eax
|
||||
inc dword [but_id]
|
||||
|
||||
ret
|
||||
|
||||
endp
|
||||
|
||||
; ====================================================================
|
||||
|
||||
proc draw_keyb
|
||||
cmp [keyb], byte 0
|
||||
je @f
|
||||
|
||||
mcall SF_DEFINE_BUTTON, <KEYBOARD_X, (KEYB_BTN_W + GAP)*4 - GAP>, <8, 29>, 250, [sc.work_light]
|
||||
mov ecx, [sc.work_text]
|
||||
or ecx, 0x10000000
|
||||
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
|
||||
|
||||
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
|
||||
m2m [but_c], [sc.work]
|
||||
m2m [but_tc], [sc.work_text]
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*1
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
|
||||
|
||||
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 [but_c] , 0x00F0969D
|
||||
mov [but_tc], 0x00FFFFFF
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*3, KEYBOARD_Y +(KEYB_BTN_H + GAP)*4
|
||||
|
||||
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
|
||||
m2m [but_c] , [sc.work_button]
|
||||
m2m [but_tc], [sc.work_button_text]
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + KEYB_BTN_H + GAP
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + KEYB_BTN_H + GAP
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + KEYB_BTN_H + GAP
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*2
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*1, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*2, KEYBOARD_Y + (KEYB_BTN_H + GAP)*3
|
||||
stdcall draw_button, KEYBOARD_X + (KEYB_BTN_W + GAP)*0, KEYBOARD_Y + (KEYB_BTN_H + GAP)*4
|
||||
|
||||
@@:
|
||||
ret
|
||||
|
||||
endp
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
proc draw_list
|
||||
|
||||
; 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 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
|
||||
; draw separator {
|
||||
push ecx edx
|
||||
sub ecx, LIST_ITEM_H - 1
|
||||
mov edx, [sc.work_dark]
|
||||
mcall
|
||||
; }
|
||||
pop edx ecx
|
||||
add ecx, LIST_ITEM_H shl 16
|
||||
|
||||
.next:
|
||||
dec edi
|
||||
cmp edi, 0
|
||||
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
|
||||
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 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
|
||||
add ecx, LIST_ITEM_H shl 16
|
||||
inc edx
|
||||
dec edi
|
||||
cmp edi, 0
|
||||
jne @b
|
||||
|
||||
; 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 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
|
||||
|
||||
@@:
|
||||
add ecx, 0x10000000
|
||||
mcall
|
||||
|
||||
push ebx
|
||||
add ebx, (320 - 50 - 25) shl 16
|
||||
add ebx, (LIST_ITEM_W - 8) shl 16
|
||||
mov esi, [edx + 508]
|
||||
shl esi, 16
|
||||
sub ebx, esi
|
||||
@@ -553,15 +596,17 @@
|
||||
pop ebx
|
||||
|
||||
add edx, 32
|
||||
add ebx, LIST_ITEM_SIZE
|
||||
add ebx, LIST_ITEM_H
|
||||
|
||||
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
|
||||
|
||||
@@ -570,29 +615,35 @@
|
||||
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
|
||||
@@ -601,19 +652,56 @@
|
||||
inc eax
|
||||
inc ebx
|
||||
jmp @b
|
||||
|
||||
@@:
|
||||
mov [ebx], byte 0
|
||||
ret
|
||||
|
||||
endp
|
||||
|
||||
;----------------------
|
||||
; ====================================================================
|
||||
|
||||
dataend:
|
||||
if lang eq ru_RU
|
||||
|
||||
;===============================
|
||||
engineering_str cp866 "Инженерный режим"
|
||||
engineering_len = $ - engineering_str
|
||||
|
||||
else if lang eq es_ES
|
||||
|
||||
engineering_str db " Modo ingeniero "
|
||||
engineering_len = $ - engineering_str
|
||||
else
|
||||
|
||||
engineering_str db "Engineering calc"
|
||||
engineering_len = $ - engineering_str
|
||||
|
||||
endf
|
||||
|
||||
; ====================================================================
|
||||
|
||||
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:
|
||||
|
||||
STACKTOP:
|
||||
|
||||
exp rb 480
|
||||
exp_pos rd 1
|
||||
@@ -631,38 +719,10 @@
|
||||
but_tc rd 1
|
||||
txt_id rd 1
|
||||
txt_size rd 1
|
||||
keyb rb 1
|
||||
|
||||
his_even rb 1
|
||||
history rb 512 * LIST_ITEM_COUNT
|
||||
rb 512
|
||||
|
||||
struc system_colors_internal {
|
||||
.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
|
||||
}
|
||||
sc system_colors
|
||||
|
||||
scn system_colors_internal
|
||||
|
||||
memory:
|
||||
MEM:
|
||||
|
Reference in New Issue
Block a user