4 Commits

Author SHA1 Message Date
8a069d3fa9 TinyGL:
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 35s
Build system / Build (pull_request) Successful in 8m47s
- fix function glClearDepth
- fix bug with z-buffer (fix 'info3ds', 'info3ds_u', 'vox_tgl', ...)
- fix array functions: glDrawArrays, glDrawElements (fix 'test_array1')
2025-04-15 14:31:39 +02:00
e4cd8a4d74 Calc+ v1.0 (#189)
All checks were successful
Build system / Check kernel codestyle (pull_request) Successful in 26s
Build system / Build (pull_request) Successful in 7m1s
- 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>
2025-04-14 19:46:57 +02:00
75b6663ce0 Ftpc: Update (#185)
- fix for bugs with buffers 'remote_list_buf', 'buf_buffer2';
- fix stack leak when navigating files;
- change sorting of folders and files, clean code;
- added option to show|hide log;
- icons are taken from @reshare;
- added icons to the 'disconnect' and 'search' buttons.

Reviewed-on: #185
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: IgorA <aie85playm@gmail.com>
Co-committed-by: IgorA <aie85playm@gmail.com>
2025-04-10 18:47:13 +02:00
df0c5d8f48 Сharsets: Updated to 0.4.2 (#196)
30.03.2025 - 0.4.0
- Localization for all system languages
- Display all character scales
- Abolity to copy character codes
- Block on charpage 00 for CP866
- New character code half markers
- Navigation using keys (see hotkeys.txt)

03.04.2025 - 0.4.1
- Fixed bug with codes color subscription

04.04.2025 - 0.4.2
- Fixed bug with resetting UTF charpage to zero on double charset swap to CP866
- Improved charpage blocking for CP866 UX
- Improved char codes copying UI

Reviewed-on: #196
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Burer <burer@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2025-04-10 16:24:11 +02:00
28 changed files with 2129 additions and 1283 deletions

View File

@@ -49,8 +49,6 @@ img_files = {
{"MEDIA/IMGF/INVSOL.OBJ", "common/media/ImgF/invSol.obj"},
{"MEDIA/PIXIESKN.PNG", SRC_PROGS .. "/cmm/pixie2/pixieskn.png"},
{"NETWORK/FTPC.INI", SRC_PROGS .. "/network/ftpc/ftpc.ini"},
{"NETWORK/FTPC_SYS.PNG", SRC_PROGS .. "/network/ftpc/ftpc_sys.png"},
{"NETWORK/FTPC_NOD.PNG", SRC_PROGS .. "/network/ftpc/ftpc_nod.png"},
{"NETWORK/FTPD.INI", "common/network/ftpd.ini"},
{"NETWORK/KNMAP", "common/network/knmap"},
{"NETWORK/USERS.INI", "common/network/users.ini"},
@@ -412,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"},
@@ -628,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"}

View File

@@ -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

View File

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

View File

@@ -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

View File

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

View File

@@ -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

View File

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

View File

@@ -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

View File

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

View File

@@ -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

View File

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

View File

@@ -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

View File

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

View File

@@ -31,3 +31,19 @@ Development history
- Renamed to Charsets Viewer/Charsets
- Symbol highlight UI tweaks
- Fixed rolled up bug
30.03.2025 - 0.4.0
- Localization for all system languages
- Display all character scales
- Abolity to copy character codes
- Block on charpage 00 for CP866
- New character code half markers
- Navigation using keys (see hotkeys.txt)
03.04.2025 - 0.4.1
- Fixed bug with codes color subscription
04.04.2025 - 0.4.2
- Fixed bug with resetting UTF charpage to zero on double charset swap to CP866
- Improved charpage blocking for CP866 UX
- Improved char codes copying UI

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
Control hotkeys
- Navigate inside charpage:
- Arrows
- Num2/4/6/8
- Navigation between charpages:
- PgDN, PgUP - previous/next page
- Num0, Home - reset page to zero
- Change symbol scale:
- Num- and Num+

View File

@@ -170,6 +170,7 @@ proc tl_key uses ebx ecx edi, tlist:dword
cmp tl_on_press,0
je @f
call tl_on_press
jmp .no_edit
@@:
cmp ah,byte[ecx+1] ;Space
jne @f

View File

@@ -105,7 +105,6 @@ console: ;//////////////////////////////////////////////////////////////////////
mov eax, [esp+36]
call write_to_file
@@:
popad
ret 4

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2013-2021. All rights reserved. ;;
;; Copyright (C) KolibriOS team 2013-2025. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;; ftpc.asm - FTP client for KolibriOS ;;
@@ -36,8 +36,8 @@ use32
dd 1 ; header version
dd start ; entry point
dd i_end ; initialized size
dd mem+0x1000 ; required memory
dd mem+0x1000 ; stack pointer
dd mem ; required memory
dd stacktop ; stack pointer
dd buf_cmd ; parameters
dd path ; path
@@ -83,12 +83,12 @@ start: ;////////////////////////////////////////////////////////////////////////
;< none ;;
;;================================================================================================;;
; initialize heap for using dynamic blocks
mcall 68, 11
mcall SF_SYS_MISC, SSF_HEAP_INIT
test eax, eax
je exit2
; disable all events except network event
mcall 40, EV_STACK
mcall SF_SET_EVENTS_MASK, EV_STACK
; load libraries
stdcall dll.Load, @IMPORT
test eax, eax
@@ -125,16 +125,16 @@ start: ;////////////////////////////////////////////////////////////////////////
mov [acti_port_stop], ax
invoke ini.get_str, path, str_general, str_dir, buf_buffer1, BUFFERSIZE, 0
mcall 30, 1, buf_buffer1 ; set working directory
mcall SF_CURRENT_FOLDER, SSF_SET_CF, buf_buffer1 ; set working directory
; initialize log file
invoke ini.get_str, path, str_general, str_logfile, log_file, 512, 0
mov [filestruct2.subfn], 2
mov [filestruct2.subfn], SSF_CREATE_FILE
mov [filestruct2.offset], 0
mov [filestruct2.size], 0
mov [filestruct2.ptr], 0
mov [filestruct2.name], log_file
mcall 70, filestruct2
mcall SF_FILE, filestruct2
; Usage: ftpc [-cli] [ftp://username:password@server:port/path]
@@ -355,7 +355,7 @@ wait_for_servercommand: ;///////////////////////////////////////////////////////
; receive socket data with timeout
.receive:
mcall 26, 9
mcall SF_SYSTEM_GET, SSF_TIME_COUNT
add eax, TIMEOUT*100
mov [timeout], eax
.again:
@@ -365,11 +365,11 @@ wait_for_servercommand: ;///////////////////////////////////////////////////////
je .closed
cmp ebx, EWOULDBLOCK
jne .sock_err
mcall 26, 9
mcall SF_SYSTEM_GET, SSF_TIME_COUNT
mov ebx, [timeout]
sub ebx, eax
jle .timeout
mcall 23 ; Wait for event with timeout
mcall SF_WAIT_EVENT_TIMEOUT ; Wait for event with timeout
jmp .again
.sock_err:
@@ -524,7 +524,7 @@ transfer_queued:
; Error occured, we reached the end of the buffer before [queued] reached 0
mov [queued], 0
mcall 68, 13, [ptr_fname] ; free buffer
mcall SF_SYS_MISC, SSF_MEM_FREE, [ptr_fname] ; free buffer
test eax, eax
jz error_heap
jmp wait_for_usercommand
@@ -535,7 +535,7 @@ transfer_queued:
dec [queued]
jnz cmd_retr
mcall 68, 13, [ptr_fname] ; free buffer
mcall SF_SYS_MISC, SSF_MEM_FREE, [ptr_fname] ; free buffer
test eax, eax
jz error_heap
jmp cmd_retr
@@ -655,12 +655,12 @@ write_to_file: ;////////////////////////////////////////////////////////////////
mov eax, 0
ret
@@:
mov [filestruct2.subfn], 3
mov [filestruct2.subfn], SSF_WRITE_FILE
m2m [filestruct2.offset], [logfile_offset]
mov [filestruct2.size], ecx
mov [filestruct2.ptr], eax
mov [filestruct2.name], log_file
mcall 70, filestruct2
mcall SF_FILE, filestruct2
test eax, eax
jz @f
mov [logfile_offset], -1 ; disable logging
@@ -754,13 +754,13 @@ wait_for_keypress:
exit:
mcall close, [controlsocket]
exit2:
mcall -1
mcall SF_TERMINATE_PROCESS
; data
str_title db 'FTP client for KolibriOS',0
str_welcome db 'FTP client for KolibriOS v0.16',10
str_welcome db 'FTP client for KolibriOS v0.18',10
db 10,0
str_srv_addr db 'Please enter ftp server address.',10,0
@@ -971,6 +971,7 @@ param_path rb 1024
param_port rb 6
sc system_colors
rb 1024
align 16
rb 4096
stacktop:
mem:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 640 B

View File

@@ -7,6 +7,9 @@ include '../../load_lib.mac'
icon_tl_sys dd 0
icon_tl_nod dd 0
icon_buttons dd 0
lbl_after_enter dd 0
show_log db 0 ; 0 - hide log, 1 - show log
TLIST_SZ = 325+16 ;=341. 16 is x-size of scroll bar
TLIST1_X = 50
@@ -15,6 +18,9 @@ BT_SZ_X = 40
SYS_COL = 0xe6e6e6
BT_COL = 0xcccccc
STR_COL = 0x595959 ;0x000000
ICON_TOP_B = 2 ; top border
ICON_LEFT_B = 2 ; left border
ICON_SIZE = (18+ICON_LEFT_B)*(18+ICON_TOP_B)*3
; TODO: automatic resizing of GUI elements on window resizing
@@ -45,8 +51,8 @@ gui: ;//////////////////////////////////////////////////////////////////////////
test eax, eax
jnz .exit
mcall 48, 3, sc, sizeof.system_colors
mcall 40, 0xC0000027 ; set event mask
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
mcall SF_SET_EVENTS_MASK, 0xC0000027 ; set event mask
ret
.server_addr:
@@ -78,32 +84,37 @@ gui: ;//////////////////////////////////////////////////////////////////////////
or dword[tree2.style], 8 ;tl_cursor_pos_limited
; read icons
load_image_file 'ftpc_sys.png', icon_tl_sys
mcall SF_SYS_MISC, SSF_MEM_OPEN, str_icon_18,, 0
or eax, eax
jz @f
mov esi, eax
mov ecx, ICON_SIZE*11
mcall SF_SYS_MISC, SSF_MEM_ALLOC
mov ecx, eax
mov [icon_tl_sys], eax
stdcall copy_icon, eax,esi,31 ;active cursor
add eax, ICON_SIZE*3 ;skip not used icons
stdcall img_to_gray, ecx, eax, ICON_SIZE/3 ;not active cursor
mov [filestruct.ptr], eax
mov [filestruct.subfn], 0
mov [filestruct.offset], 54
mov [filestruct.size], ecx
mcall 70, filestruct
cmp ebx, 0
jl @f
m2m dword[tree1.data_img_sys], dword[icon_tl_sys]
m2m dword[tree2.data_img_sys], dword[icon_tl_sys]
@@:
; read nodes icon file
load_image_file 'ftpc_nod.png', icon_tl_nod
mov ecx, ICON_SIZE*2
mcall SF_SYS_MISC, SSF_MEM_ALLOC
mov [icon_tl_nod], eax
stdcall copy_icon, eax,esi,2
stdcall copy_icon, eax,esi,0
mov [filestruct.ptr], eax
;mov [filestruct.subfn], 0
;mov [filestruct.offset], 54
mov [filestruct.size], ecx
mcall 70, filestruct
cmp ebx, 0
jl @f
m2m dword[tree1.data_img], dword[icon_tl_nod]
m2m dword[tree2.data_img], dword[icon_tl_nod]
; initialize icon buttons
mov ecx, 18*18*4*2
mcall SF_SYS_MISC, SSF_MEM_ALLOC
mov [icon_buttons], eax
stdcall copy_icon_w, eax,esi, 4 ;disconnect
stdcall copy_icon_w, eax,esi,49 ;search
@@:
call .draw
; create initial tree list for root_dir
@@ -121,7 +132,7 @@ gui: ;//////////////////////////////////////////////////////////////////////////
align 4
.still:
mcall 10
mcall SF_WAIT_EVENT
dec eax
jz .redraw
@@ -146,65 +157,86 @@ gui: ;//////////////////////////////////////////////////////////////////////////
align 4
.draw:
mcall 12, 1
mcall SF_REDRAW, SSF_BEGIN_DRAW
; main window
mcall 0, <35,830>, <20,555>, 0x34000000+SYS_COL, 0x805080DD, str_title
mcall SF_CREATE_WINDOW, <35,830>, <20,555-160>, 0x34000000+SYS_COL, 0x805080DD, str_title
;-------------------------
; textedit components
;-------------------------
mcall 9, procinfo, -1
mcall SF_THREAD_INFO, procinfo, -1
mov edi, tedit0
call EvSize
movzx ebx,word[procinfo.client_box.width]
inc bx
mcall 13, , ted_wnd_t
stdcall [ted_draw], tedit0
mcall SF_DRAW_RECT, , ted_wnd_t
; draw "disconnect" button
mcall 8, <50,95>, <25,25>, 3, BT_COL
mcall SF_DEFINE_BUTTON, <50,114>, <25,25>, 3, BT_COL
; icon
mcall SF_PUT_IMAGE_EXT, [icon_buttons], <18, 18>, <54, 29>, 32,, 0
; string "disconnect"
mcall 4, <50+5,25+5>, 0xb0000000+STR_COL, str_disconnect
mcall SF_DRAW_TEXT, <50+18+10,25+5>, 0xb0000000+STR_COL, str_disconnect
; draw "Show|Hide log" button
mcall SF_DEFINE_BUTTON, <50,79>, <326,25>, 10, BT_COL
; string "Show|Hide log"
cmp [show_log],0
je @f
stdcall [ted_draw], tedit0
mov edx, str_hide_log
jmp .end_log_1
@@:
mov edx, str_show_log
.end_log_1:
mcall SF_DRAW_TEXT, <50+5,326+5>, 0xb0000000+STR_COL
cmp [show_log],0
je @f
; draw "Copy" button
mcall 8, <50,40>, <326,25>, 4, BT_COL
mcall SF_DEFINE_BUTTON, <129+5,40>, <326,25>, 4, BT_COL
; string "copy"
mcall 4, <50+5,326+5>, 0xb0000000+STR_COL, str_copy
mcall SF_DRAW_TEXT, <129+10,326+5>, 0xb0000000+STR_COL, str_copy
@@:
; draw "Search" button
mcall 8, <TLIST2_X+TLIST_SZ-55,55>, <20,25>, 5, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-25,25>, <20,25>, 5, BT_COL
; icon
mov ebx, [icon_buttons]
add ebx, 18*18*4
mcall SF_PUT_IMAGE_EXT,, <18, 18>, <730, 24>, 32,, 0
; string "Search"
mcall 4, <TLIST2_X+TLIST_SZ-55+5,20+5>, 0xb0000000+STR_COL, str_search
;mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-55+5,20+5>, 0xb0000000+STR_COL, str_search
; draw "LIST" button
mcall 8, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15,BT_SZ_X>, <50,25>, 12, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15,BT_SZ_X>, <50,25>, 12, BT_COL
; string "LIST"
mcall 4, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15+5,50+5>, 0xb0000000+STR_COL, str_list
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-4*BT_SZ_X-15+5,50+5>, 0xb0000000+STR_COL, str_list
; draw "DELE" button
mcall 8, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10,BT_SZ_X>, <50,25>, 7, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10,BT_SZ_X>, <50,25>, 7, BT_COL
; string "DELE"
mcall 4, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10+5,50+5>, 0xb0000000+STR_COL, str_dele
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-3*BT_SZ_X-10+5,50+5>, 0xb0000000+STR_COL, str_dele
; draw "RDIR" button
mcall 8, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5,BT_SZ_X>, <50,25>, 8, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5,BT_SZ_X>, <50,25>, 8, BT_COL
; string "RDIR"
mcall 4, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5+5,50+5>, 0xb0000000+STR_COL, str_rdir
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-2*BT_SZ_X-5+5,50+5>, 0xb0000000+STR_COL, str_rdir
; draw "RMD" button
mcall 8, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <50,25>, 9, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <50,25>, 9, BT_COL
; string "RMD"
mcall 4, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,50+5>, 0xb0000000+STR_COL, str_rmd
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,50+5>, 0xb0000000+STR_COL, str_rmd
; draw "mkd" button
mcall 8, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <80,20>, 6, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST2_X+TLIST_SZ-BT_SZ_X,BT_SZ_X>, <80,20>, 6, BT_COL
; string "mkd"
mcall 4, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,80+5>, 0xb0000000+STR_COL, str_mkd
mcall SF_DRAW_TEXT, <TLIST2_X+TLIST_SZ-BT_SZ_X+5,80+5>, 0xb0000000+STR_COL, str_mkd
; draw "cancel" button
;mcall 8, <555,55>, <308,25>, 10, BT_COL
;mcall SF_DEFINE_BUTTON, <555,55>, <308,25>, 10, BT_COL
; string "Cancel"
;mcall 4, <555+5,308+5>, 0xb0000000+STR_COL, str_abort
;mcall SF_DRAW_TEXT, <555+5,308+5>, 0xb0000000+STR_COL, str_abort
; draw "change volume" button
mcall 8, <TLIST1_X+TLIST_SZ-55,55>, <100-20,22>, 11, BT_COL
mcall SF_DEFINE_BUTTON, <TLIST1_X+TLIST_SZ-55,55>, <100-20,22>, 11, BT_COL
; string "Change"
mcall 4, <TLIST1_X+TLIST_SZ-55+5,100-20+5>, 0xb0000000+STR_COL, str_change
mcall SF_DRAW_TEXT, <TLIST1_X+TLIST_SZ-55+5,100-20+5>, 0xb0000000+STR_COL, str_change
;--------------------------
; tree list components
@@ -222,12 +254,12 @@ gui: ;//////////////////////////////////////////////////////////////////////////
stdcall [edit_box_draw], edit_volume
stdcall [edit_box_draw], edit_search
mcall 12,2
mcall SF_REDRAW, SSF_END_DRAW
ret
align 16
.mouse:
mcall 37, 1
mcall SF_MOUSE_GET, SSF_WINDOW_POSITION
cmp word[tedit0.wnd.top], ax
jg .no_edit
@@ -235,7 +267,7 @@ gui: ;//////////////////////////////////////////////////////////////////////////
cmp word[tedit0.wnd.left], ax
jg .no_edit
mcall 37, 3
mcall SF_MOUSE_GET, SSF_BUTTON_EXT
bt eax, 24
jnc @f
@@ -243,12 +275,19 @@ gui: ;//////////////////////////////////////////////////////////////////////////
jmp .still
@@:
cmp [show_log],0
je .still
stdcall [ted_mouse], tedit0
jmp .still
.no_edit:
mov [lbl_after_enter], 0
stdcall [tl_mouse], tree1
stdcall [tl_mouse], tree2
cmp [lbl_after_enter], 0
jz @f
jmp [lbl_after_enter]
@@:
stdcall [edit_box_mouse], edit_mkd
stdcall [edit_box_mouse], edit_volume
stdcall [edit_box_mouse], edit_search
@@ -256,9 +295,14 @@ gui: ;//////////////////////////////////////////////////////////////////////////
align 16
.key:
mcall 2
mcall SF_GET_KEY
mov [lbl_after_enter], 0
stdcall [tl_key], tree1
stdcall [tl_key], tree2
cmp [lbl_after_enter], 0
jz @f
jmp [lbl_after_enter]
@@:
stdcall [edit_box_key], edit_mkd
stdcall [edit_box_key], edit_volume
stdcall [edit_box_key], edit_search
@@ -266,13 +310,19 @@ gui: ;//////////////////////////////////////////////////////////////////////////
align 16
.button:
mcall 17
mcall SF_GET_BUTTON
cmp ah, 3
jne @f
ijmp eax, interface_addr, interface.server_addr
jmp .still
@@:
cmp ah, 10
jne @f
call show_hide_log
jmp .still
@@:
cmp ah, 4
jne @f
@@ -327,13 +377,15 @@ gui: ;//////////////////////////////////////////////////////////////////////////
cmp byte[esi], 0
jne @b
stdcall [ted_text_add], tedit0, tedit_buffer, ecx, ebx
cmp [show_log],0
je .end_log_2
stdcall [ted_draw], tedit0
.end_log_2:
; write to log file
mov eax, [esp+36]
sub ecx, 2 ; 0a0d is not included
call write_to_file
@@:
popad
ret 4
@@ -353,13 +405,16 @@ gui: ;//////////////////////////////////////////////////////////////////////////
;< none ;;
;;================================================================================================;;
push edx
push eax
cmp eax, 1
jl data_loop
push edx eax
; check if any incomplete entry to be parsed
cmp byte[remote_list_buf], 0
je .no_backlog
; find end of remote_list_buf
mov edi, remote_list_buf
mov ecx, 1024 ;buffer size
mov al, 0
repne scasb
; copy rest of the incomplete entry to remote_list_buf
@@ -424,6 +479,8 @@ gui: ;//////////////////////////////////////////////////////////////////////////
mov byte[edi], 0
; add node to tree list
and dword[tree2.style], not 8
stdcall [tl_cur_next], tree2
cmp word[node_entry2], 'fi'
jne @f
stdcall [tl_node_add], tree2, 0, node_entry2
@@ -453,9 +510,9 @@ gui: ;//////////////////////////////////////////////////////////////////////////
.store_last_entry:
; find index of the last incomplete entry
mov ecx, -1
mov eax, [esp]
lea edi, [buf_buffer2+eax-2]
mov ecx, eax
mov al, 0x0a
std
repne scasb
@@ -470,9 +527,10 @@ gui: ;//////////////////////////////////////////////////////////////////////////
jne @b
.done_parsing:
stdcall [tl_cur_beg], tree2
or dword[tree2.style], 8
call .draw ; to update tree list immediately in case of "auto_list"
pop eax
pop edx
pop eax edx
jmp data_loop
; clear tree list and add ".." node before executing "LIST"
@@ -494,7 +552,7 @@ gui: ;//////////////////////////////////////////////////////////////////////////
;;================================================================================================;;
; detect abort
mcall 17
mcall SF_GET_BUTTON
cmp ah, 10
je cmd_abor
@@ -578,7 +636,8 @@ fun_on_enter:
cmp byte[esi], 0
jne @b
mov word[edi], 0x000a
jmp cmd_stor
mov [lbl_after_enter], cmd_stor
ret
; Function to call when you press [Enter]
@@ -591,7 +650,8 @@ fun_on_enter2:
cmp dword[esi], 0x2E2E
jne @f
mov [auto_list], 1
jmp cmd_cdup
mov [lbl_after_enter], cmd_cdup
ret
@@:
cmp word[eax], 'fo'
@@ -610,12 +670,14 @@ fun_on_enter2:
; newline in console code
cmp word[eax], 'fo'
je @f
jmp cmd_retr
mov [lbl_after_enter], cmd_retr
ret
@@:
stdcall [tl_info_clear], tree2
mov [auto_list], 1
jmp cmd_cwd
mov [lbl_after_enter], cmd_cwd
ret
;;================================================================================================;;
@@ -641,7 +703,7 @@ populate_local_tree_list: ;/////////////////////////////////////////////////////
jne @f
; removes last file name from filestruct.name
mcall 30, 2, filestruct.name,1024 ; get absolute path for cwd
mcall SF_CURRENT_FOLDER, SSF_GET_CF, filestruct.name,1024 ; get absolute path for cwd
lea edi, [filestruct.name+eax] ; edi = pointer to the tail of file name
mov al, '/'
mov ecx, -1
@@ -652,15 +714,15 @@ populate_local_tree_list: ;/////////////////////////////////////////////////////
mov ecx, filestruct.name
@@:
mcall 30, 1, ; set cwd
mcall 30, 2, filestruct.name, 1024 ; get absolute path for cwd
mcall SF_CURRENT_FOLDER, SSF_SET_CF ; set cwd
mcall SF_CURRENT_FOLDER, SSF_GET_CF, filestruct.name, 1024 ; get absolute path for cwd
; clear all nodes in tree list
stdcall [tl_info_clear], tree1
mov [filestruct.offset], 0
; read 32 blocks
.outer:
mcall 70, filestruct
mcall SF_FILE, filestruct
;int3
test eax, eax
jz @f
@@ -746,6 +808,16 @@ EvSize:
ret
;
show_hide_log:
mov esi, 555
xor [show_log],1
jnz @f
sub esi, 160
@@:
mcall SF_CHANGE_WINDOW, -1, -1, -1
ret
;;================================================================================================;;
filter_remote_list: ;/////////////////////////////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
@@ -861,30 +933,133 @@ search: ;///////////////////////////////////////////////////////////////////////
pop edi esi edx ecx ebx
ret
align 4
proc copy_icon uses ebx ecx esi edi, buf_d:dword, buf_s:dword, ind:dword
;;------------------------------------------------------------------------------------------------;;
;> buf_d = pointer to destination buffer 24-bit
;> buf_s = pointer to source buffer 32-bit (with icons)
;> ind = icon index
;;------------------------------------------------------------------------------------------------;;
;< eax = pointer to destination buffer + icon size
;;------------------------------------------------------------------------------------------------;;
mov edi, [buf_d]
mov ecx, (18+ICON_LEFT_B)*ICON_TOP_B*3
mov al, 0xff
rep stosb ; make top border
; copy icon
mov esi, [ind]
imul esi, 18*18*4
add esi, [buf_s]
mov ebx, 18
.cycle0:
mov ecx, ICON_LEFT_B*3
rep stosb ; make left border
mov ecx, 18
@@:
movsw
movsb
inc esi ; skip transparent byte
loop @b
dec ebx
jnz .cycle0
mov eax, edi
ret
endp
align 4
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
;;------------------------------------------------------------------------------------------------;;
; function for generating gray icons
;;------------------------------------------------------------------------------------------------;;
;> buf_rgb - buffer with input 24-bit color image
;> buf_g24 - buffer with output 24-bit gray image
;> pixels - number of pixels in the image
;;------------------------------------------------------------------------------------------------;;
pushad
mov esi, [buf_rgb]
mov edi, [buf_g24]
mov ecx, [pixels]
mov ebx, 3
@@:
movzx eax, byte[esi]
movzx edx, byte[esi+1]
add eax, edx
movzx edx, byte[esi+2]
add eax, edx
xor edx, edx
div ebx
mov ah, al
mov word[edi], ax
mov byte[edi+2], al
add esi, 3
add edi, 3
loop @b
popad
ret
endp
align 4
proc copy_icon_w uses ecx esi edi, buf_d:dword, buf_s:dword, ind:dword
;;------------------------------------------------------------------------------------------------;;
;> buf_d = pointer to destination buffer 32-bit
;> buf_s = pointer to source buffer 32-bit (with icons)
;> ind = icon index
;;------------------------------------------------------------------------------------------------;;
;< eax = pointer to destination buffer + icon size
;;------------------------------------------------------------------------------------------------;;
mov edi, [buf_d]
mov ecx, 18*18
mov esi, [ind]
imul esi, ecx
shl esi, 2
add esi, [buf_s]
rep movsd
mov eax, edi
mov ecx, 18*18
mov edi, [buf_d]
mov esi, [edi] ;copy transparent color
.cycle0:
cmp [edi], esi
jne @f
mov dword[edi], BT_COL
@@:
add edi, 4
loop .cycle0
ret
endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;hed db 'FTP Client for KolibriOS',0
str_change db 'Change',0
str_disconnect db 'Disconnect',0
str_show_log db 'Show log',0
str_hide_log db 'Hide log',0
str_copy db 'Copy',0
str_mkd db 'MKD',0
str_dele db 'DELE',0
str_rdir db 'RDIR',0
str_rmd db 'RMD',0
str_abort db 'Cancel',0
str_search db 'Search',0
;str_search db 'Search',0
str_list db 'LIST',0
str_null db 0
str_icon_18 db 'ICONS18',0
;----------------------
; tree list elements
;----------------------
tree1 tree_list 64, 500, tl_list_box_mode, 16, 16, \
0xffffff, BT_COL, 0x000000, TLIST1_X, 105, TLIST_SZ-16, 185, 14, 4,\
tree1 tree_list 64, 500, tl_list_box_mode, 18+ICON_LEFT_B, 18+ICON_TOP_B, \
0xffffff, BT_COL, 0x10000000, TLIST1_X, 105, TLIST_SZ-16, 185, 15, 4,\
0, el_focus, wScr, fun_on_enter
tree2 tree_list 64, 500, tl_list_box_mode, 16, 16, \
0xffffff, BT_COL, 0x000000, TLIST2_X, 105, TLIST_SZ-16, 185, 14, 4, \
tree2 tree_list 64, 500, tl_list_box_mode, 18+ICON_LEFT_B, 18+ICON_TOP_B, \
0xffffff, BT_COL, 0x10000000, TLIST2_X, 105, TLIST_SZ-16, 185, 15, 4, \
0, el_focus, wScr2, fun_on_enter2
; editbox for mkd
@@ -896,7 +1071,7 @@ edit_volume edit_box TLIST_SZ-60, TLIST1_X, 80, 0xffffff, 0x94AECE, 0, \
0xAABBCC, 0x10000000, 99, root_dir, mouse_dd, 0
; editbox for search
edit_search edit_box TLIST_SZ-60, TLIST2_X, 22, 0xffffff, 0x94AECE, 0, \
edit_search edit_box TLIST_SZ-30, TLIST2_X, 22, 0xffffff, 0x94AECE, 0, \
0xAABBCC, 0x10000000, 99, filter,mouse_dd, 0
; A subsidiary structure for scrolling

View File

@@ -27,7 +27,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
.get_username:
; in case of error when either login_gui.server_addr or
; login_gui.get_username is called, should resize window
mcall 67, WIN_X, WIN_Y, WIN_W, WIN_H ; resize to login gui window size
mcall SF_CHANGE_WINDOW, WIN_X, WIN_Y, WIN_W, WIN_H ; resize to login gui window size
.redraw:
call .draw
@@ -44,22 +44,22 @@ login_gui: ;////////////////////////////////////////////////////////////////////
align 4
.draw:
mcall 12, 1
mcall 48, 3, sc, 40
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, 40
edit_boxes_set_sys_color edit_usr,editboxes_end,sc
mov edx, 0x34000000
or edx, [sc.work]
mcall 0, <WIN_X,WIN_W>, <WIN_Y,WIN_H>, , 0x805080DD, str_title
mcall SF_CREATE_WINDOW, <WIN_X,WIN_W>, <WIN_Y,WIN_H>, , 0x805080DD, str_title
call .draw_editboxes
; draw "connect" button
mcall 8, <162,65>, <150,25>, 2, [sc.work_button]
mcall SF_DEFINE_BUTTON, <162,65>, <150,25>, 2, [sc.work_button]
; draw strings
mov ecx, 0x90000000
or ecx, [sc.work_text]
mcall 4, <3, 8>, , gui_str_usr
mcall SF_DRAW_TEXT, <3, 8>, , gui_str_usr
mcall , <3,PAD*1+8>, , gui_str_pass
mcall , <3,PAD*2+8>, , gui_str_server
mcall , <3,PAD*3+8>, , gui_str_port
@@ -74,12 +74,12 @@ login_gui: ;////////////////////////////////////////////////////////////////////
mcall
mov [str_error_addr], gui_str_null ; reset error string address
mcall 12, 2
mcall SF_REDRAW, SSF_END_DRAW
ret
align 4
.still:
mcall 10 ; wait for event
mcall SF_WAIT_EVENT
dec eax
jz .redraw
dec eax
@@ -96,7 +96,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
jmp .still
.button:
mcall 17
mcall SF_GET_BUTTON
dec ah
jz .exit
@@ -107,7 +107,7 @@ login_gui: ;////////////////////////////////////////////////////////////////////
jmp .still
.key:
mcall 2
mcall SF_GET_KEY
cmp ah,13
je .connect
@@ -124,7 +124,12 @@ login_gui: ;////////////////////////////////////////////////////////////////////
jmp .still
.connect:
mcall 67, 35, 20, 830, 555 ; resize to main gui window's coordinates
mov esi, 555
or [show_log],0
jnz @f
sub esi, 160
@@:
mcall SF_CHANGE_WINDOW, 35, 20, 830 ; resize to main gui window's coordinates
cmp [param_server_addr], 0
jne gui.main

View File

@@ -190,10 +190,11 @@ data_loop:
mov [filestruct.ptr], buf_buffer2
mov [filestruct.size], eax
push eax
mcall 70, filestruct
mcall SF_FILE, filestruct
test eax, eax
jz @f
call error_fs
add esp, 4 ; fix stack
jmp close_datacon
@@:
pop eax
@@ -204,7 +205,7 @@ data_loop:
; storing, send all data
.stor:
mcall 70, filestruct
mcall SF_FILE, filestruct
cmp eax, 6 ; end of file
je .last_call
test eax, eax ; error
@@ -244,7 +245,7 @@ data_loop:
mov ecx, eax ; eax is size of buffer received
inc ecx
add ecx, [size_fname] ; added old size to form new required size
mcall 68, 20, , [ptr_fname] ; realloc
mcall SF_SYS_MISC, SSF_MEM_REALLOC, , [ptr_fname]
test eax, eax
je error_heap
mov [ptr_fname], eax ; eax contains the new block now

View File

@@ -82,13 +82,13 @@ cmd_retr:
mov ecx, 256-5
call set_filename
mov [filestruct.subfn], 2 ; create/rewrite file
mov [filestruct.subfn], SSF_CREATE_FILE ; create/rewrite file
mov [filestruct.offset], 0
mov [filestruct.offset+4], 0
mov [filestruct.size], 0
mov [filestruct.ptr], 0
mcall 70, filestruct
mcall SF_FILE, filestruct
test eax, eax
jz @f
call error_fs
@@ -96,7 +96,7 @@ cmd_retr:
@@:
; Prepare to write to the file
mov [filestruct.subfn], 3 ; write to file
mov [filestruct.subfn], SSF_WRITE_FILE
mov [operation], OPERATION_RETR
; Request the file from server
@@ -138,7 +138,7 @@ cmd_stor:
mov [operation], OPERATION_STOR
; get file size
mov [filestruct.subfn], 5
mov [filestruct.subfn], SSF_GET_INFO
mov [filestruct.offset], 0
mov [filestruct.offset+4], 0
mov [filestruct.size], 0
@@ -148,12 +148,12 @@ cmd_stor:
mov ecx, 256-5
call set_filename
mcall 70, filestruct
mcall SF_FILE, filestruct
mov eax, dword[folder_buf+32] ; supports file size upto 4GB
mov [file_size], eax
mov [filestruct.subfn], 0 ; read file
mov [filestruct.subfn], SSF_READ_FILE
; mov [filestruct.offset], 0
; mov [filestruct.offset+4], 0
mov [filestruct.size], BUFFERSIZE
@@ -191,12 +191,12 @@ cmd_lcwd:
mov byte[esi-1], 0
; check whether entered path is valid (folder exists)
mov [filestruct2.subfn], 5
mov [filestruct2.subfn], SSF_GET_INFO
mov [filestruct2.offset], 0
mov [filestruct2.size], 0
mov [filestruct2.ptr], folder_buf
mov [filestruct2.name], buf_cmd+5
mcall 70, filestruct2
mcall SF_FILE, filestruct2
test eax, eax
jz @f
cmp eax, 2
@@ -205,10 +205,10 @@ cmd_lcwd:
jmp wait_for_usercommand
@@:
mcall 30, 1, buf_cmd+5 ; set working directory
mcall SF_CURRENT_FOLDER, SSF_SET_CF, buf_cmd+5 ; set working directory
.print:
mcall 30, 2, buf_cmd, 256 ; and read it again
mcall SF_CURRENT_FOLDER, SSF_GET_CF, buf_cmd, 256 ; and read it again
icall eax, interface_addr, interface.print, str_lcwd, buf_cmd, str_newline
jmp wait_for_usercommand

View File

@@ -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")

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"
include "../../macros.inc"
include "../../dll.inc"
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
; include "../../debug.inc"
include "parser.inc"
use32
org 0
;===============================
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
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:
imports:
library gui, "box_lib.obj"
import gui, editbox.draw, "edit_box", \
editbox.key, "edit_box_key", \
editbox.mouse, "edit_box_mouse"
;===============================
; ====================================================================
main:
mov [ans.buffer], dword "= 0"
mov [ans.size], 3 * 6 + 9
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
mcall 40, 100111b
; mcall 48, 3, scn, 192
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], 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
update:
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
ev_redraw:
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 SF_GET_KEY
ev_key:
mcall 2
cmp ah, 27
je exit
cmp ah, 13
je calc
invoke editbox.key, edb1
jmp update
;----------------------
; ====================================================================
ev_button:
mcall 17
ev_button:
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
ev_mouse:
mcall SF_GET_KEY
invoke editbox.mouse, edb1
jmp update
;----------------------
; ====================================================================
exit:
mcall -1
exit:
mcall SF_TERMINATE_PROCESS
;----------------------
; ====================================================================
calc:
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]
proc draw_textbox
; 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 esi, [txt_size]
imul esi, 3
mov edi, 16
sub edi, esi
add ebx, edi
add ebx, KEYB_BTN_W/2-4
shl ebx, 16
add ebx, [y]
add ebx, 7
mcall 4, , [but_tc], [txt_id], [txt_size]
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
;----------------------
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
sub ebx, [ans.size]
shl ebx, 16
add ebx, 16
mov ecx, [scn.gui_intext]
or ecx, 1 shl 31
mcall 4, , , ans.buffer
proc draw_keyb
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 , 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
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
;----------------------
endp
; ====================================================================
proc draw_list
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
;----------------------
endp
; ====================================================================
proc str_len uses ebx, str
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
;----------------------
endp
; ====================================================================
proc str_cpy uses eax ebx ecx, from, to
proc str_cpy uses eax ebx ecx, from, to
mov eax, [from]
mov ebx, [to]
@@:
cmp [eax], byte 0
je @f
@@ -601,68 +652,77 @@
inc eax
inc ebx
jmp @b
@@:
mov [ebx], byte 0
ret
endp
;----------------------
endp
dataend:
; ====================================================================
;===============================
if lang eq ru_RU
rb 2048
stacktop:
engineering_str cp866 "Инженерный режим"
engineering_len = $ - engineering_str
exp rb 480
exp_pos rd 1
exp_lvl rd 1
abs_lvl rd 1
group rd 1
else if lang eq es_ES
ans.buffer:rb 480
ans.size rd 1
error_n rd 1
engineering_str db " Modo ingeniero "
engineering_len = $ - engineering_str
else
timer rd 1
but_id rd 1
but_c rd 1
but_tc rd 1
txt_id rd 1
txt_size rd 1
keyb rb 1
engineering_str db "Engineering calc"
engineering_len = $ - engineering_str
his_even rb 1
history rb 512 * LIST_ITEM_COUNT
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:
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
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: