Compare commits

..
Author SHA1 Message Date
jaskaran-singh-77 495bc156a7 Remove redundant comments from KOSfuncs.inc 2026-04-06 13:14:32 +05:30
jaskaran-singh-77 26aa178f05 Added SSF_RECT_BG constant for function 39.3 2026-03-22 22:16:42 +05:30
jaskaran-singh-77 3d02131d67 Fix #323: Add missing and remove obsolete constants 2026-03-16 20:41:53 +05:30
YVishereandAditya Yellapuntula Venkata 4c359e42ce loaddrv: Updated error message on invalid args passed (#364)
Added a usage line and changed the wording slightly to be more clear in the expected arguments.

Co-authored-by: Aditya Yellapuntula Venkata <aditya.yellapuntulavenkata@doosan.com>
Reviewed-on: KolibriOS/kolibrios#364
Reviewed-by: Burer <burer@noreply.localhost>
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Aditya Yellapuntula Venkata <adityayv802@gmail.com>
Co-committed-by: Aditya Yellapuntula Venkata <adityayv802@gmail.com>
2026-03-14 16:49:33 +00:00
jaskaran-singh-77 3238f9f485 apps/cedit: use numeric version instead of date (fix #329) (#361)
Replace hardcoded date "CEdit (11-jan-2026)" with version "CEdit 1.0"

Add separate VERSION and APPNAME constants for better maintainability

Fixes issue [#329](KolibriOS/kolibrios#329)

Reviewed-on: KolibriOS/kolibrios#361
Reviewed-by: Burer <burer@noreply.localhost>
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: jaskaran-singh-77 <jassijatt951@gmail.com>
Co-committed-by: jaskaran-singh-77 <jassijatt951@gmail.com>
2026-03-14 10:46:08 +00:00
Igor Shutrov 289eabf8a4 cedit: add Shift+Tab shortcut (#318)
Add Shift+Tab shortcut to decrease indentation

Reviewed-on: KolibriOS/kolibrios#318
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Reviewed-by: Burer <burer@noreply.localhost>
Co-authored-by: Igor Shutrov <kolibridev@inbox.ru>
Co-committed-by: Igor Shutrov <kolibridev@inbox.ru>
2026-03-12 13:47:42 +00:00
Burerandrgimad e818e2167f apps/reshare: rewrite to fasm (#305)
- Rewritten to FASM (rgimad);
- Refactored code;
- Tweaked UX/UI;
- Fit program RAM usage into 1 MB (#make_8mb_great_again):
  https://wiki.kolibrios.org/wiki/SystemRequirements;
- Fit program window with default skin into 800x600;
- Use proper prefixes for debug messages.

Reviewed-on: KolibriOS/kolibrios#305
Reviewed-by: Ivan B <dunkaist@noreply.localhost>
Co-authored-by: Burer <burer@kolibrios.org>
Co-authored-By: rgimad <rgimad@kolibrios.org>
Co-committed-by: Burer <burer@kolibrios.org>
2026-03-11 20:59:35 +03:00
Igor Shutrov 42c205be32 heed: Add exit by ESC (#345)
Reviewed-on: KolibriOS/kolibrios#345
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Co-authored-by: Igor Shutrov <kolibridev@inbox.ru>
Co-committed-by: Igor Shutrov <kolibridev@inbox.ru>
2026-03-11 12:21:47 +00:00
hrigar 0253ec8753 Rename icons16.png to icons18.png and update all refs (#350)
Fixed #349.

Reviewed-on: KolibriOS/kolibrios#350
Reviewed-by: Max Logaev <maxlogaev@proton.me>
Reviewed-by: Burer <burer@noreply.localhost>
Co-authored-by: hrigar <h4gar02@protonmail.com>
Co-committed-by: hrigar <h4gar02@protonmail.com>
2026-03-11 13:12:31 +03:00
23 changed files with 3371 additions and 2541 deletions

No files matched your search

+3 -3
View File
@@ -28,7 +28,7 @@ img_files = {
{"ALLGAMES", "common/allgames"},
{"HOME.PNG", "common/wallpapers/T_Home.png"},
{"ICONS32.PNG", "common/icons32.png"},
{"ICONS16.PNG", "common/icons16.png"},
{"ICONS18.PNG", "common/icons18.png"},
{"INDEX.HTM", "common/index_htm"},
{"KUZKINA.MID", "common/kuzkina.mid"},
{"SINE.MP3", "common/sine.mp3"},
@@ -405,8 +405,9 @@ tup.append_table(img_files, {
{"@MENU", VAR_PROGS .. "/system/menu/trunk/menu"},
{"@NOTIFY", VAR_PROGS .. "/system/notify3/notify"},
{"@OPEN", VAR_PROGS .. "/system/open/open"},
{"@TASKBAR", VAR_PROGS .. "/system/taskbar/trunk/TASKBAR"},
{"@RESHARE", VAR_PROGS .. "/system/reshare/reshare"},
{"@SS", VAR_PROGS .. "/system/scrsaver/scrsaver"},
{"@TASKBAR", VAR_PROGS .. "/system/taskbar/trunk/TASKBAR"},
{"@VOLUME", VAR_PROGS .. "/media/volume/volume"},
{"HACONFIG", VAR_PROGS .. "/other/ha/HACONFIG"},
{"ACLOCK", VAR_PROGS .. "/demos/aclock/aclock"},
@@ -665,7 +666,6 @@ end -- tup.getconfig('NO_JWASM') ~= 'full'
-- Programs that require C-- to compile.
if tup.getconfig('NO_CMM') ~= 'full' then
tup.append_table(img_files, {
{"@RESHARE", VAR_PROGS .. "/cmm/misc/reshare.com"},
{"APP_PLUS", VAR_PROGS .. "/cmm/app_plus/app_plus.com"},
{"EASYSHOT", VAR_PROGS .. "/cmm/misc/easyshot.com"},
{"MOUSECFG", VAR_PROGS .. "/cmm/mousecfg/mousecfg.com"},
+1 -1
View File
@@ -1,4 +1,4 @@
[icons16]
[icons18]
<dir>=0
<up>=1
<lot>=20
File renamed without changes.
+86 -90
View File
@@ -1,127 +1,121 @@
; KolibriOS system functions:
SF_TERMINATE_PROCESS=-1
SF_CREATE_WINDOW=0 ; define and draw the window
SF_PUT_PIXEL=1 ; draw pixel to the window
SF_GET_KEY=2 ; get code of the pressed key
SF_CREATE_WINDOW=0
SF_PUT_PIXEL=1
SF_GET_KEY=2
SF_GET_SYS_TIME=3
SF_DRAW_TEXT=4
SF_SLEEP=5 ; pause process
SF_PUT_IMAGE=7 ; draw image to the window
SF_DEFINE_BUTTON=8 ; define/delete the button
SF_THREAD_INFO=9 ; information on execution thread
SF_WAIT_EVENT=10 ; wait for event
SF_CHECK_EVENT=11 ; check for event and return
SF_SLEEP=5
SF_PUT_IMAGE=7
SF_DEFINE_BUTTON=8
SF_THREAD_INFO=9
SF_WAIT_EVENT=10
SF_CHECK_EVENT=11
SF_REDRAW=12
SSF_BEGIN_DRAW=1
SSF_END_DRAW=2
SF_DRAW_RECT=13 ; draw rectangle to the window
SF_GET_SCREEN_SIZE=14 ; get screen resolution
SF_BACKGROUND_SET=15 ; work with desktop background graphics
SSF_SIZE_BG=1 ; set a size of the background image
SSF_PIXEL_BG=2 ; put pixel on the background image
SSF_REDRAW_BG=3 ; redraw background
SSF_MODE_BG=4 ; set drawing mode for the background
SSF_IMAGE_BG=5 ; put block of pixels on the background image
SSF_MAP_BG=6 ; map background image to the address space of the process
SSF_UNMAP_BG=7 ; close mapped background data
SSF_LAST_DRAW=8 ; get coordinates of the last draw to the background
SSF_REDRAW_RECT=9 ; redraws a rectangular part of the background
SF_RD_TO_FLOPPY=16 ; save ramdisk on the floppy
SF_GET_BUTTON=17 ; get ID of the pressed button
SF_DRAW_RECT=13
SF_GET_SCREEN_SIZE=14
SF_BACKGROUND_SET=15
SSF_SIZE_BG=1
SSF_PIXEL_BG=2
SSF_REDRAW_BG=3
SSF_MODE_BG=4
SSF_IMAGE_BG=5
SSF_MAP_BG=6
SSF_UNMAP_BG=7
SSF_LAST_DRAW=8
SSF_REDRAW_RECT=9
SF_RD_TO_FLOPPY=16
SF_GET_BUTTON=17
SF_SYSTEM=18
SSF_UNFOCUS_WINDOW=1 ; take focus from the window of the given thread
SSF_TERMINATE_THREAD=2 ; terminate process/thread by the slot number
SSF_FOCUS_WINDOW=3 ; give focus to the window of the given thread
SSF_GET_IDLE_COUNT=4 ; get counter of idle cycles per second
SSF_GET_CPU_FREQUENCY=5 ; get CPU clock rate
SSF_RD_TO_HDD=6 ; save ramdisk to the file on hard disk
SSF_GET_ACTIVE_WINDOW=7 ; get slot number of the active window
SSF_UNFOCUS_WINDOW=1
SSF_TERMINATE_THREAD=2
SSF_FOCUS_WINDOW=3
SSF_GET_IDLE_COUNT=4
SSF_GET_CPU_FREQUENCY=5
SSF_RD_TO_HDD=6
SSF_GET_ACTIVE_WINDOW=7
SSF_SPEAKER=8
SSSF_GET_STATE=1
SSSF_TOGGLE=2
SSF_SHUTDOWN=9 ; system shutdown/reboot
SSF_MINIMIZE_WINDOW=10 ; minimize active window
SSF_INFO_DISC_SYS=11 ; get disk subsystem information
SSF_KERNEL_VERSION=13 ; get kernel version
SSF_WAIT_RETRACE=14 ; wait for screen retrace
SSF_CURSOR_CENTER=15 ; center mouse cursor on the screen
SSF_GET_FREE_RAM=16 ; get size of free RAM
SSF_GET_TOTAL_RAM=17 ; get total amount of RAM
SSF_TERMINATE_THREAD_ID=18 ; Terminate process/thread by the ID
SSF_SHUTDOWN=9
SSF_MINIMIZE_WINDOW=10
SSF_INFO_DISC_SYS=11
SSF_KERNEL_VERSION=13
SSF_WAIT_RETRACE=14
SSF_CURSOR_CENTER=15
SSF_GET_FREE_RAM=16
SSF_GET_TOTAL_RAM=17
SSF_TERMINATE_THREAD_ID=18
SSF_MOUSE_SETTINGS=19
SSSF_GET_SPEED=0
SSSF_SET_SPEED=1
SSSF_GET_SPEEDUP=2
SSSF_SET_SPEEDUP=3 ; set mouse acceleration
SSSF_SET_POS=4 ; set mouse pointer position
SSSF_SET_BUTTON=5 ; simulate state of mouse buttons
SSSF_SET_SPEEDUP=3
SSSF_SET_POS=4
SSSF_SET_BUTTON=5
SSSF_GET_DOUBLE_CLICK_DELAY=6
SSSF_SET_DOUBLE_CLICK_DELAY=7
SSF_GET_RAM_INFO=20 ; get information on RAM
SSF_GET_THREAD_SLOT=21 ; get slot number of process/thread by the ID
SSF_FOREIGN_WINDOW=22 ; operations with window of another thread by slot/ID
SSF_GET_RAM_INFO=20
SSF_GET_THREAD_SLOT=21
SSF_FOREIGN_WINDOW=22
SSSF_MINIMIZE=0
SSSF_MINIMIZE_ID=1
SSSF_RESTORE=2
SSSF_RESTORE_ID=3
SSF_MINIMIZE_ALL=23
SSF_SET_SCREEN_LIMITS=24
SSF_WINDOW_BEHAVIOR=25 ; window focus relation with other windows
SSF_WINDOW_BEHAVIOR=25
SSSF_GET_WB=1
SSSF_SET_WB=2
SF_MIDI=20 ; deprecated/undefined in current kernel
SSF_RESET=1 ; deprecated
SSF_OUTPUT=2 ; deprecated
SF_SYSTEM_SET=21
SSF_MPU_MIDI_BASE=1 ; not used (reserved)
SSF_KEYBOARD_LAYOUT=2
SSF_SYS_LANG=5
SSF_ACCESS_HD_LBA=11 ; setting of low-level access to HD
SSF_ACCESS_PCI=12 ; setting of low-level access to PCI
SSF_ACCESS_HD_LBA=11
SSF_ACCESS_PCI=12
SF_SET_TIME_DATE=22
SF_WAIT_EVENT_TIMEOUT=23; wait for event with timeout
SF_WAIT_EVENT_TIMEOUT=23
SF_CD=24
SSF_EJECT_TRAY=4
SSF_INSERT_TRAY=5
SF_SCREEN_PUT_IMAGE=25 ; put image on the background layer
SF_SCREEN_PUT_IMAGE=25
SF_SYSTEM_GET=26
; Same as SF_SYSTEM_SET, plus:
SSF_TIME_COUNT=9
SSF_TIME_COUNT_PRO=10 ; get value of the high precision time counter
SSF_TIME_COUNT_PRO=10
SF_GET_SYS_DATE=29
SF_CURRENT_FOLDER=30
SSF_SET_CF=1 ; set current folder for the thread
SSF_SET_CF=1
SSF_GET_CF=2
SSF_ADD_SYS_FOLDER=3 ; install the add.system directory for the kernel
SF_GET_PIXEL_OWNER=34 ; get slot number of the screen pixel owner
SF_GET_PIXEL=35 ; read the screen pixel color
SF_GET_IMAGE=36 ; read the screen area
SSF_ADD_SYS_FOLDER=3
SSF_SET_CF_ENC=4
SSF_GET_CF_ENC=5
SF_GET_PIXEL_OWNER=34
SF_GET_PIXEL=35
SF_GET_IMAGE=36
SF_MOUSE_GET=37
SSF_SCREEN_POSITION=0
SSF_WINDOW_POSITION=1
SSF_BUTTON=2 ; states of the mouse buttons
SSF_BUTTON_EXT=3 ; states and events of the mouse buttons
SSF_BUTTON=2
SSF_BUTTON_EXT=3
SSF_LOAD_CURSOR=4
SSF_SET_CURSOR=5
SSF_DEL_CURSOR=6
SSF_SCROLL_DATA=7
SF_DRAW_LINE=38
SF_BACKGROUND_GET=39
;SSF_SIZE_BG=1
;SSF_PIXEL_BG=2
;SSF_MODE_BG=4
SF_SET_EVENTS_MASK=40 ; turn on/off desired events
SF_PORT_IN_OUT=43 ; deprecated/undefined in current kernel
SF_SET_PORTS=46 ; reserve/free a group of input/output ports
SF_DRAW_NUMBER=47 ; draw number to the window
SSF_RECT_BG=3
SF_SET_EVENTS_MASK=40
SF_SET_PORTS=46
SF_DRAW_NUMBER=47
SF_STYLE_SETTINGS=48
SSF_APPLY=0 ; apply screen settings
SSF_APPLY=0
SSF_SET_BUTTON_STYLE=1
SSF_SET_COLORS=2
SSF_GET_COLORS=3 ; get standard window colors
SSF_GET_COLORS=3
SSF_GET_SKIN_HEIGHT=4
SSF_GET_SCREEN_AREA=5 ; get screen working area
SSF_GET_SCREEN_AREA=5
SSF_SET_SCREEN_AREA=6
SSF_GET_SKIN_MARGINS=7
SSF_SET_SKIN=8
@@ -137,24 +131,24 @@ SF_CREATE_THREAD=51
SSF_GET_THREAD_PRIORITY=3
SSF_SET_THREAD_PRIORITY=4
SF_CLIPBOARD=54
SSF_GET_SLOT_COUNT=0 ; get the number of slots in the clipboard
SSF_GET_SLOT_COUNT=0
SSF_READ_CB=1
SSF_WRITE_CB=2
SSF_DEL_SLOT=3 ; delete the last slot in the clipboard
SSF_UNLOCK_BUFFER=4 ; emergency buffer unlock
SSF_DEL_SLOT=3
SSF_UNLOCK_BUFFER=4
SF_SPEAKER_PLAY=55
SF_PCI_BIOS=57
SF_IPC=60 ; Inter Process Communication
SSF_SET_AREA=1 ; set area for IPC receiving
SF_IPC=60
SSF_SET_AREA=1
SSF_SEND_MESSAGE=2
SF_GET_GRAPHICAL_PARAMS=61
SSF_SCREEN_SIZE=1
SSF_BITS_PER_PIXEL=2
SSF_BYTES_PER_LINE=3
SF_PCI=62
SSF_GET_VERSION=0 ; get version of PCI-interface
SSF_GET_LAST_BUS=1 ; get number of the last PCI-bus
SSF_GET_ADRR_MODE=2 ; get addressing mode of the PCI configuration space
SSF_GET_VERSION=0
SSF_GET_LAST_BUS=1
SSF_GET_ADRR_MODE=2
SSF_READ_BYTE=4
SSF_READ_WORD=5
SSF_READ_DWORD=6
@@ -164,17 +158,17 @@ SF_PCI=62
SF_BOARD=63
SSF_DEBUG_WRITE=1
SSF_DEBUG_READ=2
SF_MEMORY_RESIZE=64 ; resize total application memory
SF_PUT_IMAGE_EXT=65 ; draw image with palette to the window
SF_MEMORY_RESIZE=64
SF_PUT_IMAGE_EXT=65
SF_KEYBOARD=66
SSF_SET_INPUT_MODE=1
SSF_GET_INPUT_MODE=2
SSF_GET_CONTROL_KEYS=3; get status of control keys
SSF_GET_CONTROL_KEYS=3
SSF_SET_SYS_HOTKEY=4
SSF_DEL_SYS_HOTKEY=5
SSF_LOCK_INPUT=6 ; block normal input
SSF_UNLOCK_INPUT=7 ; restore normal input
SF_CHANGE_WINDOW=67 ; change position/sizes of the window
SSF_LOCK_INPUT=6
SSF_UNLOCK_INPUT=7
SF_CHANGE_WINDOW=67
SF_SYS_MISC=68
SSF_GET_TASK_SWITCH_COUNT=0
SSF_SWITCH_TASK=1
@@ -188,13 +182,13 @@ SF_SYS_MISC=68
SSF_HEAP_INIT=11
SSF_MEM_ALLOC=12
SSF_MEM_FREE=13
SSF_WAIT_SIGNAL=14 ; wait for a signal from other process
SSF_WAIT_SIGNAL=14
SSF_LOAD_DRIVER=16
SSF_CONTROL_DRIVER=17
SSF_LOAD_DLL=19
SSF_MEM_REALLOC=20
SSF_LOAD_DRIVER_PE=21
SSF_MEM_OPEN=22 ; open named memory area
SSF_MEM_OPEN=22
SSF_MEM_CLOSE=23
SSF_SET_EXCEPTION_HANDLER=24
SSF_SET_EXCEPTION_STATE=25
@@ -225,11 +219,13 @@ SF_FILE=70
SSF_START_APP=7
SSF_DELETE=8
SSF_CREATE_FOLDER=9
SSF_RENAME=10
SF_SET_CAPTION=71
SF_SEND_MESSAGE=72
SF_BLITTER=73
SF_FILE_EXT=80
SF_NETWORK_GET=74
SSF_DEVICE_COUNT=255 ; get number of active network devices
SSF_DEVICE_COUNT=255
SSF_DEVICE_TYPE=0
SSF_DEVICE_NAME=1
SSF_RESET_DEVICE=2
+2 -2
View File
@@ -101,8 +101,8 @@ dword waves_pal[256];
collection_int selected0, selected1;
dword selected_count[PANES_COUNT]=0;
libimg_image icons16_default;
libimg_image icons16_selected;
libimg_image icons18_default;
libimg_image icons18_selected;
libimg_image icons32_default;
libimg_image icons32_selected;
@@ -103,7 +103,7 @@ void CopyFilesListToClipboard(bool _cut_active)
if (cut_active) {
if (i>=files.first) && (i<files.first+files.visible)
PutShadow(files.x+4,i-files.first*files.item_h+files.y,icons16_default.w,files.item_h,1,-3);
PutShadow(files.x+4,i-files.first*files.item_h+files.y,icons18_default.w,files.item_h,1,-3);
}
}
}
+3 -3
View File
@@ -25,7 +25,7 @@ int ICONS_INI::get(dword _file_path, _ext, int size)
else if (size == 32) return i32.get(ext_pos);
} else {
exts.add(#ext);
icons_ini.section = "icons16";
icons_ini.section = "icons18";
i18.set(exts.count-1, icons_ini.GetInt(#ext, 2));
icons_ini.section = "icons32";
@@ -60,8 +60,8 @@ void DrawIconByExtension(dword file_path, extension, xx, yy, fairing_color)
selected_image = icons32_selected.image;
default_image = icons32_default.image;
} else {
selected_image = icons16_selected.image;
default_image = icons16_default.image;
selected_image = icons18_selected.image;
default_image = icons18_default.image;
}
if (fairing_color==col.selec) {
+5 -5
View File
@@ -184,11 +184,11 @@ void LoadIcons()
icons32_default.replace_color(0x00000000, col.list_bg);
icons32_selected.replace_color(0x00000000, col.selec);
} else {
icons16_default.load("/sys/icons16.png");
icons16_selected.load("/sys/icons16.png");
icons16_selected.replace_2colors(0xffFFFfff, col.selec, 0xffCACBD6, selected_shadow);
icons18_default.load("/sys/icons18.png");
icons18_selected.load("/sys/icons18.png");
icons18_selected.replace_2colors(0xffFFFfff, col.selec, 0xffCACBD6, selected_shadow);
if (col.list_bg!=0xFFFfff) {
icons16_default.replace_2colors(0xffFFFfff, col.list_bg, 0xffCACBD6, non_white_shadow);
icons18_default.replace_2colors(0xffFFFfff, col.list_bg, 0xffCACBD6, non_white_shadow);
}
}
@@ -260,7 +260,7 @@ void BigIconsSwitch()
icon_size = 32;
LoadIcons();
} else {
icon_size = icons16_default.w;
icon_size = icons18_default.w;
}
BigFontsChange();
}
+1 -1
View File
@@ -220,7 +220,7 @@ void SelectList_DrawLine(dword i)
} else {
strcpy(#tname, results.name.get(select_list.first + i));
strlwr(#tname);
icons_ini.section = "icons16";
icons_ini.section = "icons18";
icon = icons_ini.GetInt(#tname + strrchr(#tname, '.'), 2);
}
+14 -14
View File
@@ -160,7 +160,7 @@ _ActionsHistory actionsHistory;
// //
//===================================================//
libimg_image icons16;
libimg_image icons18;
void main()
{
@@ -170,18 +170,18 @@ void main()
load_dll(libimg, #libimg_init, 1);
load_dll(boxlib, #box_lib_init,0);
icons16.load("/sys/icons16.png");
leftbar_w = icons16.w + 16;
icons18.load("/sys/icons18.png");
leftbar_w = icons18.w + 16;
sc.get();
bg_dark = skin_is_dark();
semi_white = MixColors(sc.work, 0xFFFfff, bg_dark*90 + 96);
icons16.replace_color(0xffFFFfff, sc.work);
icons16.replace_color(0xffCACBD6, MixColors(sc.work, 0, 200));
icons18.replace_color(0xffFFFfff, sc.work);
icons18.replace_color(0xffCACBD6, MixColors(sc.work, 0, 200));
//fix line and rectandle color for dark skins
if (bg_dark) icons16.replace_color(0xff545454, 0xffD3D3D4);
if (bg_dark) icons18.replace_color(0xff545454, 0xffD3D3D4);
EventSetActiveColor(1, color1);
@@ -301,7 +301,7 @@ void DrawTopPanelButton1(dword _event, _hotkey, _x, _icon_n)
#define ISIZE 18
#define YPOS 6
DefineHiddenButton(_x-4, YPOS-4, ISIZE+7, ISIZE+7, button.add(_event));
img_draw stdcall(icons16.image, _x, YPOS, ISIZE, ISIZE, 0, _icon_n*ISIZE);
img_draw stdcall(icons18.image, _x, YPOS, ISIZE, ISIZE, 0, _icon_n*ISIZE);
if (_hotkey) key.add_n(_hotkey, _event);
}
@@ -323,10 +323,10 @@ int DrawFlatPanelButton(dword _id, _x, _y, _text)
void DrawLeftPanelButton(dword _event, _hotkey, _y, _icon_n)
{
int x = 5;
DrawRectangle(x, _y, icons16.w + 5, icons16.w + 5, sc.work);
DefineHiddenButton(x, _y, icons16.w + 5, icons16.w + 5, button.add(_event));
img_draw stdcall(icons16.image, x+3, _y+3, icons16.w,
icons16.w, 0, _icon_n*icons16.w);
DrawRectangle(x, _y, icons18.w + 5, icons18.w + 5, sc.work);
DefineHiddenButton(x, _y, icons18.w + 5, icons18.w + 5, button.add(_event));
img_draw stdcall(icons18.image, x+3, _y+3, icons18.w,
icons18.w, 0, _icon_n*icons18.w);
key.add_n(_hotkey, _event);
}
void DrawStatusBar()
@@ -419,8 +419,8 @@ void DrawWindow()
void DrawLeftPanelSelection()
{
if (previousTool!=-1) DrawRectangle3D(5, previousTool*GAPV+right_bar.y-2, icons16.w+5, icons16.w+5, sc.work, sc.work);
DrawRectangle3D(5, currentTool*GAPV+right_bar.y-2, icons16.w+5, icons16.w+5, 0x333333, 0x777777);
if (previousTool!=-1) DrawRectangle3D(5, previousTool*GAPV+right_bar.y-2, icons18.w+5, icons18.w+5, sc.work, sc.work);
DrawRectangle3D(5, currentTool*GAPV+right_bar.y-2, icons18.w+5, icons18.w+5, 0x333333, 0x777777);
}
void DrawEditArea()
@@ -429,7 +429,7 @@ void DrawEditArea()
int top_side;
int left_side;
wrapper.x = icons16.w + 16;
wrapper.x = icons18.w + 16;
wrapper.w = Form.cwidth - right_bar.w - 10 - wrapper.x;
wrapper.h = Form.cheight - TOPBAR_H - 35;
+2 -2
View File
@@ -44,9 +44,9 @@ void main()
OpenDialog_init stdcall (#o_dialog);
/* Init UI */
icons18.load("/sys/icons16.png");
icons18.load("/sys/icons18.png");
icons18.replace_2colors(0xffFFFfff, COL_LIGHT, 0xffCACBD6, COL_LIGHT-0x080808);
icons18a.load("/sys/icons16.png");
icons18a.load("/sys/icons18.png");
icons18a.replace_2colors(0xffFFFfff, COL_BUTTON, 0xffCACBD6, 0);
pixie_skin.load("/sys/media/pixieskn.png");
Form.width = screen.w/6*5;
+14 -14
View File
@@ -21,8 +21,8 @@
//===================================================//
libimg_image icons32;
libimg_image icons16;
libimg_image icons16w;
libimg_image icons18;
libimg_image icons18w;
unsigned int size32;
unsigned int size16;
@@ -73,7 +73,7 @@ void main()
load_dll(libimg, #libimg_init, 1);
icons32.load("/SYS/ICONS32.PNG"); size32 = icons32.h * 32 * 4;
icons16.load("/SYS/ICONS16.PNG"); size16 = icons16.h * 18 * 4;
icons18.load("/SYS/ICONS18.PNG"); size16 = icons18.h * 18 * 4;
if (GetProcessesCount("@RESHARE")>1) {
start_ui();
@@ -103,8 +103,8 @@ void start_daemon()
img_destroy stdcall(icons32.image);
shared_i16 = memopen("ICONS18", size16, SHM_CREATE + SHM_WRITE);
memmov(shared_i16, icons16.imgsrc, size16);
//img_destroy stdcall(icons16.image);
memmov(shared_i16, icons18.imgsrc, size16);
//img_destroy stdcall(icons18.image);
shared_i16w = memopen("ICONS18W", size16, SHM_CREATE + SHM_WRITE);
@@ -114,7 +114,7 @@ void start_daemon()
sc.get();
$pop eax
if (sc.work != EAX) {
memmov(shared_i16w, icons16.imgsrc, size16);
memmov(shared_i16w, icons18.imgsrc, size16);
replace_2cols(shared_i16w, size16, 0xffFFFfff, sc.work, 0xffCACBD6, sc.dark);
}
} while(WaitEvent()==evDesktop);
@@ -133,7 +133,7 @@ void start_daemon()
#define BTNH 24
#define RESY PAD+30+BTNH+BTNH
enum { ACTIVE_ICONS32=1, ACTIVE_ICONS16=2, ACTIVE_ICONS16W=4, ACTIVE_CHECKBOX=8 };
enum { ACTIVE_ICONS32=1, ACTIVE_ICONS18=2, ACTIVE_ICONS18W=4, ACTIVE_CHECKBOX=8 };
int active_tab = ACTIVE_ICONS32;
void start_ui()
@@ -190,8 +190,8 @@ void draw_tabs()
{
#define TABX WINW-BTNW-PAD-BTNW-PAD-BTNW-PAD-BTNW/2
DrawFlatButton( TABX, PAD+30, "ICONS32", 10+ACTIVE_ICONS32, active_tab & ACTIVE_ICONS32);
DrawFlatButton(PAD+BTNW*1+TABX, PAD+30, "ICONS16", 10+ACTIVE_ICONS16, active_tab & ACTIVE_ICONS16);
DrawFlatButton(PAD+BTNW*2+TABX, PAD+30, "ICONS16W", 10+ACTIVE_ICONS16W, active_tab & ACTIVE_ICONS16W);
DrawFlatButton(PAD+BTNW*1+TABX, PAD+30, "ICONS18", 10+ACTIVE_ICONS18, active_tab & ACTIVE_ICONS18);
DrawFlatButton(PAD+BTNW*2+TABX, PAD+30, "ICONS18W", 10+ACTIVE_ICONS18W, active_tab & ACTIVE_ICONS18W);
DrawFlatButton(PAD+BTNW*3+TABX, PAD+30, "CHECKBOX", 10+ACTIVE_CHECKBOX, active_tab & ACTIVE_CHECKBOX);
draw_tab_icons32();
}
@@ -209,14 +209,14 @@ void draw_tab_icons32()
iconimg = icons32.imgsrc;
iconw = 32;
iconh = icons32.h;
} else if (active_tab & ACTIVE_ICONS16) {
iconimg = icons16.imgsrc;
} else if (active_tab & ACTIVE_ICONS18) {
iconimg = icons18.imgsrc;
iconw = 18;
iconh = icons16.h;
} else if (active_tab & ACTIVE_ICONS16W) {
iconh = icons18.h;
} else if (active_tab & ACTIVE_ICONS18W) {
iconimg = memopen("ICONS18W", NULL, SHM_READ);
iconw = 18;
iconh = icons16.h;
iconh = icons18.h;
} else {
PutImage(WINW-13/2, WINH-RESY-13/2+RESY, 13, 13, #checkbox_flag);
return;
+55
View File
@@ -0,0 +1,55 @@
Keyboard Shortcuts:
ctrl+A Select all
ctrl+C Copy
ctrl+V Paste
ctrl+X Cut
ctrl+L Convert to lowercase
ctrl+U Convert to uppercase
ctrl+F,
ctrl+H Show search/replace panel
Esc Close search panel; Close menu
shift+Esc Hide (Minimize) search panel
F10 Open main menu
shift+F10 Open context menu
F3 Find next
shift+F3 Find previous
ctrl+Z Undo
ctrl+Y Redo
ctrl+G Go to line...
ctrl+Del Delete line
ctrl+D Duplicate line
ctrl+Up Move text up
ctrl+Down Move text down
ctrl+E Select word
Tab Increase indent for text
shift+
Backspace Decrease indent for selected text
shift+Tab Decrease indent for text
ctrl+F2 Set/Remove bookmark
F2 Go to next bookmark
shift+F2 Go to previous bookmark
ctrl+S Save
ctrl+O Open
ctrl+N,
ctrl+T Create new
ctrl+W Close File
ctrl+Tab Switch to Next Tab
ctrl+F9 Compile
F9 Run
ctrl+F8 Debug
shift+wheel Horizontal scrolling
Navigating text:
(ctrl+)Home, (ctrl+)End, (ctrl+)PageUp, (ctrl+)PageDown
ctrl+Left, ctrl+Right
Navigating in search panel:
Tab Move to next input field
shift+Tab Move to previous input field
Enter Find next occurrence
@@ -1,55 +1,55 @@
Горячие клавиши:
ctrl+A выделить всё
ctrl+C копировать
ctrl+V вставить
ctrl+X вырезать
ctrl+L преобразовать в нижний регистр
ctrl+U преобразовать в верхний регистр
ctrl+F,
ctrl+H показать панель поиска/замены
Esc закрыть панель поиска; закрыть меню
shift+Esc скрыть (свернуть) панель поиска
F10 открыть главное меню
shift+F10 открыть контекстное меню
F3 найти следующий
shift+F3 найти предыдущий
ctrl+Z отменить
ctrl+Y вернуть
ctrl+G перейти на строку...
ctrl+Del удалить строку
ctrl+D дублировать строку
ctrl+Up переместить текст вверх
ctrl+Down переместить текст вниз
ctrl+E выделить слово
Tab увеличить отступ для выделенного текста
shift+
Backspace уменьшить отступ для выделенного текста
ctrl+F2 установить/снять метку
F2 перейти к метке ниже
shift+F2 перейти к метке выше
ctrl+S сохранить
ctrl+O открыть
ctrl+N,
ctrl+T создать новый
ctrl+W закрыть файл
ctrl+Tab переключиться на следующую вкладку
ctrl+F9 компилировать
F9 выполнить
ctrl+F8 отладка
shift+wheel горизонтальная прокрутка
перемещение по тексту:
(ctrl+)Home, (ctrl+)End, (ctrl+)PageUp, (ctrl+)PageDown
ctrl+Left, ctrl+Right
перемещение в панели поиска:
Tab к следующему полю ввода
Shift-Tab к предыдущему полю ввода
Enter поиск следующего вхождения
Горячие клавиши:
ctrl+A выделить всё
ctrl+C копировать
ctrl+V вставить
ctrl+X вырезать
ctrl+L преобразовать в нижний регистр
ctrl+U преобразовать в верхний регистр
ctrl+F,
ctrl+H показать панель поиска/замены
Esc закрыть панель поиска; закрыть меню
shift+Esc скрыть (свернуть) панель поиска
F10 открыть главное меню
shift+F10 открыть контекстное меню
F3 найти следующий
shift+F3 найти предыдущий
ctrl+Z отменить
ctrl+Y вернуть
ctrl+G перейти на строку...
ctrl+Del удалить строку
ctrl+D дублировать строку
ctrl+Up переместить текст вверх
ctrl+Down переместить текст вниз
ctrl+E выделить слово
Tab увеличить отступ для текста
shift+
Backspace уменьшить отступ для выделенного текста
shift+Tab уменьшить отступ для текста
ctrl+F2 установить/снять метку
F2 перейти к метке ниже
shift+F2 перейти к метке выше
ctrl+S сохранить
ctrl+O открыть
ctrl+N,
ctrl+T создать новый
ctrl+W закрыть файл
ctrl+Tab переключиться на следующую вкладку
ctrl+F9 компилировать
F9 выполнить
ctrl+F8 отладка
shift+wheel горизонтальная прокрутка
перемещение по тексту:
(ctrl+)Home, (ctrl+)End, (ctrl+)PageUp, (ctrl+)PageDown
ctrl+Left, ctrl+Right
перемещение в панели поиска:
Tab к следующему полю ввода
Shift-Tab к предыдущему полю ввода
Enter поиск следующего вхождения
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -23,7 +23,7 @@ IMPORT
Graph, File, SYSTEM, KOSAPI;
CONST
fileName = "/sys/Icons16.png";
fileName = "/sys/Icons18.png";
libName = "libimg.obj";
SIZE* = 18;
+5 -4
View File
@@ -24,7 +24,7 @@
; Ctrl+F - поиск (+Tab для OptionBox)
; Ctrl+G - переход на смещение (+Tab для OptionBox)
; Ctrl+B - выделить блок
; ESC - снять выделение
; ESC - снять выделение/выход
; Ctrl+C - копировать блок
; Ctrl+V - вставить в выделенную область
; Ctrl+X - вырезать выделенную область (в буфер)
@@ -2699,7 +2699,8 @@ Ctrl_END:
jmp red
;--------------------------------------------------------------------
ESC:
btr [flags],8
btr [flags], 8
jnc close_prog
jmp red
;--------------------------------------------------------------------
copy_to_buf:
@@ -3236,7 +3237,7 @@ if lang eq ru_RU
db 'Ctrl+F - поиск '
db 'Ctrl+G - переход на смещение '
db 'Ctrl+B - выделить блок '
db 'ESC - снять выделение '
db 'ESC - снять выделение/выход '
db 'Ctrl+C - копировать блок '
db 'Ctrl+V - вставить в выделенную область'
db 'Ctrl+X - вырезать в буфер '
@@ -3258,7 +3259,7 @@ else ; Default to en_US
db 'Ctrl+F - find '
db 'Ctrl+G - go to offset '
db 'Ctrl+B - select area '
db 'ESC - deselect area '
db 'ESC - deselect area/exit '
db 'Ctrl+C - copy area '
db 'Ctrl+V - past into area from buf '
db 'Ctrl+X - cut area into buffer '
+2 -2
View File
@@ -1971,7 +1971,7 @@ calc_ini:
add edi,[img_size]
dec edi
mov esi,eax
add esi,9 ; after [icons16]
add esi,9 ; after [icons18]
cld
@@:
lodsb
@@ -2871,7 +2871,7 @@ root_pach:
db '/',0
icons_file_name_2 db 'buttons/'
icons_path db '/sys/icons16.png',0
icons_path db '/sys/icons18.png',0
ini_file_name db '/sys/File managers/icons.ini',0
;---------------------------------------------------------------------
+1 -1
View File
@@ -23,7 +23,7 @@ IMPORT
LibImg, K := SysUtils, Graph, File, KOSAPI, SYSTEM;
CONST
fileName = "/sys/Icons16.png";
fileName = "/sys/Icons18.png";
SIZE* = 18;
VAR
+5 -4
View File
@@ -27,13 +27,14 @@ start:
cmp eax, 0
jne ok
nok:
print 'LoadDrv: Error loading driver'
print 'Driver must be in /sys/drivers/ folder.'
print 'Its name must be w/o extension and it is case-sensitive'
print 'E: LoadDrv: Error loading driver'
print 'I: Usage: loaddrv <driver_name>'
print 'I: Driver must be stored as /sys/drivers/<driver_name>.sys'
print 'I: <driver_name> must be w/o extension and it is case-sensitive'
mov eax, -1
int 0x40
ok:
print 'LoadDrv: Driver loaded well'
print 'I: LoadDrv: Driver loaded well'
mov eax, -1
int 0x40
+4
View File
@@ -0,0 +1,4 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("reshare.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")
+72
View File
@@ -0,0 +1,72 @@
; SPDX-License-Identifier: GPL-2.0-only
;
; Reshare - Shared Resources Daemon
;
; Copyright (C) 2024-2026 KolibriOS Team
; Copyright (C) 2024-2026 KolibriOS-NG Team
; ====================================================================
CBOX_WIDTH = 13
CBOX_HEIGHT = 13
CBOX_PIXELS = CBOX_WIDTH * CBOX_HEIGHT
CBOX_IMG_SIZE = CBOX_PIXELS * 3 ; 24-bpp BGR, tight rows
; ====================================================================
; Palette entry: 4 bytes BGR0 (padded for dword-indexed lookup)
macro BGRA c
{
db (c) and 0xFF, (c shr 8) and 0xFF, (c shr 16) and 0xFF, 0
}
P00 = 0x04D4FC ; 0xRRGGBB
P01 = 0x04C8FC
P02 = 0x04DCFC
P03 = 0x04B4FC
P04 = 0x04BCFC
P05 = 0x04A9FC
P06 = 0x0498F9
P07 = 0xD2F2FC
P08 = 0x04A5FA
P09 = 0xFFFFFF
P10 = 0xF6FDFD
P11 = 0xAFF9FC
P12 = 0x95E0F7
P13 = 0x0464BC
P14 = 0x2CDCFC
P15 = 0x049FFA
cbox_palette:
BGRA P00
BGRA P01
BGRA P02
BGRA P03
BGRA P04
BGRA P05
BGRA P06
BGRA P07
BGRA P08
BGRA P09
BGRA P10
BGRA P11
BGRA P12
BGRA P13
BGRA P14
BGRA P15
; 4-bit palette indices, one byte per pixel (upper nibble unused — values 0..15)
cbox_indexed:
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ; row 1
db 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 ; row 2
db 2, 1, 1, 1, 1, 4, 4, 4, 3, 5, 5, 3, 3 ; row 3
db 0, 1, 1, 1, 4, 4, 3, 3, 6, 7, 7, 8, 3 ; row 4
db 0, 3, 5, 5, 3, 3, 3, 6, 9,10,11, 6, 3 ; row 5
db 0, 5, 7, 7, 6, 3, 6, 9,10,12,13, 6, 5 ; row 6
db 0, 6,10, 9,14, 6, 9,10,12,13, 6,15, 5 ; row 7
db 0, 6,12,10, 9, 9,10,12,13, 6,15, 5, 5 ; row 8
db 0, 6,13,12,10,10,12,13, 6,15, 5, 5, 5 ; row 9
db 1, 8, 6,13,12,12,13, 6,15, 5, 5, 5,15 ; row 10
db 1, 5,15, 6,13,13, 6,15, 5, 5, 5,15,15 ; row 11
db 1, 5, 5,15, 6, 6,15, 5, 5, 5,15,15, 6 ; row 12
db 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ; row 13
+699
View File
@@ -0,0 +1,699 @@
; SPDX-License-Identifier: GPL-2.0-only
;
; Reshare - Shared Resources Daemon
;
; Copyright (C) 2024-2026 KolibriOS Team
; Copyright (C) 2024-2026 KolibriOS-NG Team
; ====================================================================
use32
org 0
; ====================================================================
db "MENUET01"
dd 1
dd START
dd I_END
dd MEM
dd STACKTOP
dd 0
dd 0
; ====================================================================
include "../../macros.inc"
include "../../KOSfuncs.inc"
include "../../encoding.inc"
include "../../proc32.inc"
include "../../dll.inc"
include "../../debug-fdo.inc"
include "../../develop/libraries/libs-dev/libimg/libimg.inc"
include "checkbox.inc"
; ====================================================================
LIBS:
library img, "libimg.obj"
import img, img.destroy, "img_destroy", \
img.from_file, "img_from_file"
; ====================================================================
START:
mcall SF_SYS_MISC, SSF_HEAP_INIT
mcall SF_KEYBOARD, SSF_SET_INPUT_MODE, 1
; check if this is second instance of app. if so - run gui, else - run daemon
mcall SF_SYS_MISC, SSF_MEM_OPEN, meta_name, 0, SHM_READ
test eax, eax
jz MODE_DAEMON
mcall SF_SYS_MISC, SSF_MEM_CLOSE, meta_name
jmp MODE_GUI
.exit:
mcall SF_TERMINATE_PROCESS
; ====================================================================
MODE_GUI:
.event_loop:
mcall SF_WAIT_EVENT
cmp eax, EV_REDRAW
je .event_redraw
cmp eax, EV_KEY
je .event_key
cmp eax, EV_BUTTON
je .event_button
jmp .event_loop
.event_redraw:
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
mcall , SSF_GET_SKIN_HEIGHT
add eax, WIN.H
mov esi, eax
mcall SF_GET_SCREEN_SIZE
movzx ecx, ax
shr eax, 16
sub eax, WIN.W
shr eax, 1
shl eax, 16
add eax, WIN.W
mov ebx, eax
sub ecx, esi
shr ecx, 1
shl ecx, 16
add ecx, esi
mov edx, [sc.work]
add edx, WIN_STYLE
mcall SF_CREATE_WINDOW, , , , , title
; visual dividers
mcall SF_DRAW_RECT, <PAD, GRID.W>, <BTN.Y + BTN.H + PAD, 1>, [sc.work_graph]
mcall , , <GRID.Y + GRID.H, 1>,
; info row
mov ecx, FONT_TYPE shl 24
add ecx, [sc.work_text]
mcall SF_DRAW_TEXT, <PAD, GRID.Y + GRID.H + PAD - 1>, , lb_info
; tabs labels
mov esi, tab_label_strs
xor edi, edi
.tab_label_loop:
mov ebx, edi
imul ebx, TAB_STEP
push ebx
add ebx, PAD * 2
shl ebx, 16
add ebx, BTN.Y
mov edx, [esi]
mcall SF_DRAW_TEXT
add ebx, 1 shl 16 ; bold: x+1, same string
mcall SF_DRAW_TEXT
pop ebx
add ebx, PAD * 11
shl ebx, 16
add ebx, BTN.Y
mov edx, [esi + 4]
mcall SF_DRAW_TEXT
add esi, 8
inc edi
cmp edi, TAB_COUNT
jb .tab_label_loop
; tabs buttons
mov ecx, BTN.Y shl 16 + BTN.H
mov esi, ACTIVE_ICONS32
xor edi, edi
.btn_loop:
mov ebx, edi
imul ebx, TAB_STEP
add ebx, PAD
shl ebx, 16
add ebx, BTN.W
lea edx, [esi + BTN_BASE + BTN_HIDE]
mcall SF_DEFINE_BUTTON
add esi, esi ; 1→2→4→8 (next ACTIVE bit)
inc edi
cmp edi, TAB_COUNT
jb .btn_loop
; tabs content
call draw_tabs
mcall SF_REDRAW, SSF_END_DRAW
jmp .event_loop
.event_key:
mcall SF_GET_KEY
cmp ah, KEY_TAB
jne .event_loop
shl [active_tab], 1 ; * 2
cmp [active_tab], ACTIVE_CHECKBOX
jbe .tab_draw
mov [active_tab], 1
.tab_draw:
call draw_tabs
jmp .event_loop
.event_button:
mcall SF_GET_BUTTON
cmp ah, 1
je .event_exit
movzx eax, ah
sub eax, BTN_BASE
mov [active_tab], eax
call draw_tabs
jmp .event_loop
.event_exit:
mcall SF_TERMINATE_PROCESS
; ====================================================================
draw_tabs:
; draw tab underlines; active tab gets highlight color
xor edi, edi
mov esi, 1 ; current tab bit (ACTIVE_ICONS32=1, then 2, 4, 8)
.loop:
mov edx, [sc.work_dark]
test [active_tab], esi
jz .color_ok
mov edx, [sc.work_button]
.color_ok:
mov eax, edi
imul eax, TAB_STEP
add eax, PAD
mpack ebx, eax, BTN.W
mpack ecx, PAD + BTN.H + 2, 2
mcall SF_DRAW_RECT, ebx, ecx, edx
inc edi
add esi, esi ; shift to next tab bit (1→2→4→8)
cmp edi, TAB_COUNT
jb .loop
; draw current tab content
mcall SF_DRAW_RECT, <GRID.X, GRID.W>, <GRID.Y, GRID.H>, [sc.work]
mov eax, [active_tab]
bsf eax, eax ; 0=i32, 1=i18, 2=i18w, 3=cbox
cmp eax, 3
je .cbox
lea esi, [tab_icon_args + eax * 8]
stdcall draw_tab_icons, [esi], [esi + 4]
ret
.cbox:
stdcall draw_tab_cbox
ret
proc draw_tab_icons stdcall, _shm_name, _meta_off
mcall SF_SYS_MISC, SSF_MEM_OPEN, meta_name, 0, SHM_READ
test eax, eax
jz .done
add eax, [_meta_off]
mov ecx, [eax] ; icon_c
mov edx, [eax + 4] ; icon_w (always next field: _meta_off + 4)
test ecx, ecx
jz .close_meta
test edx, edx
jz .close_meta
push ecx
push edx
mcall SF_SYS_MISC, SSF_MEM_OPEN, [_shm_name], 0, SHM_READ
pop edx
pop ecx
test eax, eax
jz .close_meta
stdcall draw_tab_icons_grid, eax, ecx, edx
mcall SF_SYS_MISC, SSF_MEM_CLOSE, [_shm_name]
.close_meta:
mcall SF_SYS_MISC, SSF_MEM_CLOSE, meta_name
.done:
ret
endp
proc draw_tab_icons_grid stdcall uses ebx esi edi, _icon_img, _icon_c, _icon_w
locals
x dd 0
x_off dd 0
y dd 0
icon_size dd 0
endl
; icon_bytes = icon_w * icon_w * 4
mov eax, [_icon_w]
imul eax, eax
shl eax, 2
mov [icon_size], eax
; x_off = (CELL.W - icon_w) / 2
mov eax, CELL.W
sub eax, [_icon_w]
shr eax, 1
mov [x_off], eax
; y_step = CELL.H
mov edi, CELL.H
xor ecx, ecx
.for_icons:
cmp ecx, [_icon_c]
jae .end_for_icons
push ecx
; SF_PUT_IMAGE_EXT _icon_img+icon_size*index, <_icon_w, _icon_w>, <x+x_off, y+GRID_Y>, 32, 0, 0
mov ebx, [icon_size]
imul ebx, ecx
add ebx, [_icon_img]
mov ecx, [_icon_w]
shl ecx, 16
add ecx, [_icon_w]
mov edx, [x]
add edx, [x_off]
shl edx, 16
add edx, [y]
add edx, GRID.Y
push edi
push ebp
mcall SF_PUT_IMAGE_EXT, , , , 32, 0, 0
pop ebp
pop edi
; draw number with no leading zeros, centered in CELL.W
mov edx, [x]
add edx, GAP
shl edx, 16
add edx, [y]
add edx, [_icon_w]
add edx, GRID.Y + 2
mov esi, DRAWNUM_NOZERO
add esi, [sc.work_graph]
pop ecx
mcall SF_DRAW_NUMBER, DRAWNUM_DEC3, , , ,
inc ecx
add [x], CELL.W
cmp [x], WIN.W - CELL.W
jle .for_icons
mov [x], 0
add [y], edi
jmp .for_icons
.end_for_icons:
ret
endp
proc draw_tab_cbox stdcall
mcall SF_SYS_MISC, SSF_MEM_OPEN, lb_tab_cbox, 0, SHM_READ
test eax, eax
jz .done
mov ebx, eax
mcall SF_PUT_IMAGE, , \
<CBOX_WIDTH, CBOX_HEIGHT>, \
<(WIN.W - CBOX_WIDTH)/2, (WIN.H - CBOX_HEIGHT)/2>
mcall SF_SYS_MISC, SSF_MEM_CLOSE, lb_tab_cbox
.done:
ret
endp
; ====================================================================
MODE_DAEMON:
stdcall dll.Load, LIBS
; load shared resources from files
DEBUGF DBG_INFO, "I: @reshare: loading resources...\n"
stdcall load_icons, icons32_path, icons32_image, size32
stdcall load_icons, icons18_path, icons18_image, size18
; publish meta
mcall SF_SYS_MISC, SSF_MEM_OPEN, meta_name, META_SIZE, SHM_CREATE + SHM_WRITE
test eax, eax
jz .meta_done
mov edi, eax
xor ebx, ebx
xor ecx, ecx
mov eax, [icons32_image]
test eax, eax
jz .i32_set
mov ebx, [eax + Image.Width]
mov eax, [eax + Image.Height]
test ebx, ebx
jz .i32_set
xor edx, edx
div ebx
mov ecx, eax
.i32_set:
mov [edi + META_I32_W], ebx
mov [edi + META_I32_C], ecx
xor ebx, ebx
xor ecx, ecx
mov eax, [icons18_image]
test eax, eax
jz .i18_set
mov ebx, [eax + Image.Width]
mov eax, [eax + Image.Height]
test ebx, ebx
jz .i18_set
xor edx, edx
div ebx
mov ecx, eax
.i18_set:
mov [edi + META_I18_W], ebx
mov [edi + META_I18_C], ecx
mov [edi + META_I18W_W], ebx
mov [edi + META_I18W_C], ecx
mov dword [edi + META_CBOX_W], CBOX_WIDTH
mov dword [edi + META_CBOX_H], CBOX_HEIGHT
mov dword [edi + META_CBOX_SIZE], CBOX_IMG_SIZE
.meta_done:
DEBUGF DBG_INFO, "I: @reshare: starting in daemon mode\n"
mcall SF_SYS_MISC, SSF_MEM_OPEN, lb_tab_cbox, CBOX_IMG_SIZE, SHM_CREATE + SHM_WRITE
test eax, eax
jz .skip_cbox
mov edi, eax
mov esi, cbox_indexed
mov ecx, CBOX_PIXELS
cld
.cbox_expand:
movzx ebx, byte [esi]
inc esi
mov eax, [cbox_palette + ebx * 4]
stosb ; B
shr eax, 8
stosb ; G
shr eax, 8
stosb ; R
dec ecx
jnz .cbox_expand
.skip_cbox:
cmp [icons32_image], 0
jz .skip_i32
stdcall copy_image_to_shm, lb_tab_i32, size32, icons32_image
test eax, eax
jz .skip_i32
invoke img.destroy, [icons32_image]
.skip_i32:
cmp [icons18_image], 0
jz .skip_i18
stdcall copy_image_to_shm, lb_tab_i18, size18, icons18_image
test eax, eax
jz .skip_i18
mov [shared_i18], eax
mcall SF_SYS_MISC, SSF_MEM_OPEN, lb_tab_i18w, [size18], SHM_CREATE + SHM_WRITE
test eax, eax
jz .skip_i18
mov [shared_i18w], eax
invoke img.destroy, [icons18_image]
mov dword [icons18_image], 0
.skip_i18:
mcall SF_SET_EVENTS_MASK, EVM_BACKGROUND
.event_loop:
push [sc.work]
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
pop eax
cmp eax, [sc.work]
je .wait_event
cmp [shared_i18], 0
jz .wait_event
cmp [shared_i18w], 0
jz .wait_event
mov esi, [shared_i18]
mov edi, [shared_i18w]
mov ecx, [size18]
shr ecx, 2 ; / 4 to get size in dwords
cld
rep movsd
stdcall replace_2cols, [shared_i18w], [size18], 0xFFFFFFFF, [sc.work], 0xFFCACBD6, [sc.work_dark]
.wait_event:
mcall SF_WAIT_EVENT
cmp eax, EV_BACKGROUND
je .event_loop
jmp .wait_event
proc load_icons stdcall uses ebx ecx, _path, _img_ptr, _size_ptr
invoke img.from_file, [_path]
test eax, eax
jz .fail
mov ebx, [_img_ptr]
mov [ebx], eax
mov ebx, [eax + Image.Width]
mov ecx, [eax + Image.Height]
imul ecx, ebx
shl ecx, 2
mov ebx, [_size_ptr]
mov [ebx], ecx
ret
.fail:
DEBUGF DBG_ERR, "E: @reshare: error loading icons from %s\n", [_path]
ret
endp
proc copy_image_to_shm stdcall uses ebx ecx edx esi edi, _shm_name, _size_ptr, _image_ptr
mov edx, [_size_ptr]
mov edx, [edx]
mcall SF_SYS_MISC, SSF_MEM_OPEN, [_shm_name], edx, SHM_CREATE + SHM_WRITE
test eax, eax
jz .done
mov ebx, [_image_ptr]
mov ebx, [ebx]
mov esi, [ebx + Image.Data]
mov edi, eax
mov ecx, [_size_ptr]
mov ecx, [ecx]
shr ecx, 2
cld
rep movsd
.done:
ret
endp
proc replace_2cols stdcall uses edi, _imgsrc, _imgsize, _col_old1, _col_new1, _col_old2, _col_new2
mov edx, [_imgsize]
add edx, [_imgsrc]
mov edi, [_imgsrc]
.loop:
cmp edi, edx
jae .done
mov eax, [edi]
cmp eax, [_col_old1]
jne .check2
mov eax, [_col_new1]
mov [edi], eax
jmp .next
.check2:
cmp eax, [_col_old2]
jne .next
mov eax, [_col_new2]
mov [edi], eax
.next:
add edi, 4
jmp .loop
.done:
ret
endp
; ====================================================================
BORD = 5
PAD = 8
GAP = 12
GRID_COLS = 16
GRID_ROWS = 9
GRID_Y = BTN.Y + BTN.H + PAD * 2 + 1
TAB_STEP = BTN.W + PAD * 2
WIN RECT 0, 0, GRID.W + PAD * 2 + BORD * 2, GRID.H + GRID_Y + 1 + PAD + 10 + GAP
BTN RECT 0, PAD + 4, CELL.W * 4 - PAD * 2 , 22
CELL RECT 0, 0, 32 + PAD * 2 , 32 + 4 + 10 + PAD
GRID RECT PAD, GRID_Y, CELL.W * GRID_COLS - PAD * 2, CELL.H * GRID_ROWS
FONT_TYPE = 0x90
WIN_STYLE = 0x34000000 ; skinned window, draws itself
BTN_HIDE = 0x60000000
BTN_BASE = 10 ; first user-defined button ID
DRAWNUM_DEC3 = 0x00030000 ; SF_DRAW_NUMBER: decimal, 3 digits
DRAWNUM_NOZERO = 0x10000000 ; SF_DRAW_NUMBER: no leading zeros
KEY_TAB = 15 ; Tab key scan code
; ====================================================================
if lang eq ru_RU
title cp866 "@RESHARE - Служба общих ресурсов", 0
lb_info cp866 "Имя каждой вкладки соответствует имени области памяти, доступной через сисфункцию 68.22.", 0
else if lang eq es_ES
title db "@RESHARE - Servicio de recursos compartidos", 0
lb_info db "Cada nombre de pestana corresponde al nombre de memoria accesible mediante sysfunc 68.22.", 0
else
title cp850 "@RESHARE - Shared resources service", 0
lb_info cp850 "Each tab name corresponds to shared memory page name that can be accessed via sysfunc 68.22.", 0
endf
lb_tab_i32 db "ICONS32", 0
lb_tab_i18 db "ICONS18", 0
lb_tab_i18w db "ICONS18W", 0
lb_tab_cbox db "CHECKBOX", 0
lb_tab_i32_res db "32x32x32bpp", 0
lb_tab_i18_res db "18x18x32bpp", 0
lb_tab_cbox_res db "13x13x24bpp", 0
; ====================================================================
DBG_ALL = 0 ; all messages
DBG_INFO = 1 ; info and errors
DBG_ERR = 2 ; only errors
__DEBUG__ = 1
__DEBUG_LEVEL__ = DBG_ERR
SHM_READ = 0x00
SHM_WRITE = 0x01
SHM_CREATE = 0x08
ACTIVE_ICONS32 = 1
ACTIVE_ICONS18 = 2
ACTIVE_ICONS18W = 4
ACTIVE_CHECKBOX = 8
TAB_COUNT = 4
META_I32_C = 0
META_I32_W = 4
META_I18_C = 8
META_I18_W = 12
META_I18W_C = 16
META_I18W_W = 20
META_CBOX_W = 24
META_CBOX_H = 28
META_CBOX_SIZE = 32
META_SIZE = 36
; ====================================================================
meta_name db "RESHARE_META", 0
icons32_path db "/SYS/ICONS32.PNG", 0
icons18_path db "/SYS/ICONS18.PNG", 0
; pointers to Image structures
icons32_image dd 0
icons18_image dd 0
; sizes of icons image data in bytes
size32 dd 0
size18 dd 0
; currenly selected i18w section
shared_i18 dd 0
shared_i18w dd 0
active_tab dd ACTIVE_ICONS32
tab_icon_args:
dd lb_tab_i32, META_I32_C ; META_I32_W = META_I32_C + 4
dd lb_tab_i18, META_I18_C ; META_I18_W = META_I18_C + 4
dd lb_tab_i18w, META_I18W_C ; META_I18W_W = META_I18W_C + 4
tab_label_strs:
dd lb_tab_i32, lb_tab_i32_res
dd lb_tab_i18, lb_tab_i18_res
dd lb_tab_i18w, lb_tab_i18_res
dd lb_tab_cbox, lb_tab_cbox_res
sc system_colors
include_debug_strings
; ====================================================================
I_END:
rb 4096
align 16
STACKTOP:
MEM: