Compare commits

...
Author SHA1 Message Date
Burer 9ee27c5595 end: rewrite; save the RAM-disk on shutdown reliably
Check kernel codestyle / Check kernel codestyle (pull_request) Successful in 22s
Test PR / Build (en_US) (pull_request) Successful in 1m58s
Test PR / Build (es_ES) (pull_request) Successful in 2m9s
Test PR / Build (ru_RU) (pull_request) Successful in 2m17s
- merge end/light into a single modern end.asm, drop the unused
  image-based variant (back.raw)
- autosave writes the image back to the boot medium in place
  (SF 18.6 with ecx = 0) instead of spawning rdsave and hanging on
  its dialog; a failed save cancels the shutdown
- settings unified into app.ini [RDSave] (was rdsave.ini [settings])
- autosave is skipped when libini is missing instead of crashing
- locales ru/es/en via encoding.inc, -dlang from the Tupfile
2026-08-24 16:26:43 +03:00
Burer dc7d6dd842 rdsave: rewrite from scratch (2.0)
- default target is the boot medium (SF 18.6 with ecx = 0) when the
  system was booted from a floppy or a hard disk; a file picked in
  the dialog overrides it
- silent modes (-h/path) can no longer open windows - the old hidden
  mode popped an OpenDialog on a bad ini path and stalled the
  shutdown; legacy "h" argument still accepted
- UTF-8 source, strings emitted as CP866/CP850 by encoding.inc;
  locales ru/es/en picked by -dlang from the Tupfile, no lang.inc
- folder flattened to rdsave.asm + Tupfile.lua, shared string.inc
  instead of the local str.inc
2026-08-24 16:26:42 +03:00
Burer a8ade5e0c2 kernel: save ramdisk to its boot medium; new SF 26.13
SF 18.6 with ecx = 0 now writes the ramdisk image back to the medium
the system was booted from: a floppy via save_image, or the image
file on a hard disk partition found by rdload.inc at boot. Returns
2 when the boot source is not writable, 11 on a floppy write error.

New SF 26.13 exposes BOOT.rd_load_from (RD_LOAD_FROM_*) so programs
can tell the boot source in advance.

Docs for both (sysfuncs.txt, sysfuncr.txt), SSF_RD_BOOT_SOURCE and
RD_LOAD_FROM_* constants in KOSfuncs.inc.
2026-08-24 16:17:26 +03:00
28 changed files with 869 additions and 1291 deletions

No files matched your search

+1 -1
View File
@@ -427,7 +427,7 @@ tup.append_table(img_files, {
{"DOCPACK", VAR_PROGS .. "/system/docpack/docpack"},
{"DEFAULT.SKN", VAR_SKINS .. "/../skins/Leency/Shkvorka/Shkvorka.skn"},
{"DISPTEST", VAR_PROGS .. "/testing/disptest/disptest"},
{"END", VAR_PROGS .. "/system/end/light/end"},
{"END", VAR_PROGS .. "/system/end/end"},
{"ESKIN", VAR_PROGS .. "/system/eskin/eskin"},
{"GMON", VAR_PROGS .. "/system/gmon/gmon"},
{"HDD_INFO", VAR_PROGS .. "/system/hdd_info/hdd_info"},
+19 -1
View File
@@ -18,7 +18,24 @@ saverd_fileinfo:
.name:
dd ?
endg
sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only)
sysfn_saveramdisk: ; 18.6 = SAVE RAMDISK IMAGE
; ecx -> path to the image file; ecx = 0 - write the image back to the
; medium it was booted from (a floppy or the file found by rdload.inc)
test ecx, ecx
jnz .have_path
if ~ defined extended_primary_loader
mov ecx, read_image_fsinfo.name
cmp [BOOT.rd_load_from], RD_LOAD_FROM_HD
je .have_path
end if
movi eax, ERROR_UNSUPPORTED_FS
cmp [BOOT.rd_load_from], RD_LOAD_FROM_FLOPPY
jne .done
mov ebx, 1
call save_image
imul eax, ERROR_DEVICE ; 0 -> 0, 1 -> ERROR_DEVICE
jmp .done
.have_path:
mov ebx, saverd_fileinfo
mov [ebx+21], ecx
mov eax, [ramdisk_actual_size]
@@ -27,5 +44,6 @@ sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only)
pushad
call file_system_lfn_protected ;in ebx
popad
.done:
mov [esp+32], eax
ret
+31 -1
View File
@@ -781,12 +781,21 @@ picture rb Xsize*Ysize*4 ; 32 бита
* ebx = 6 - номер подфункции
* ecx = указатель на строку с полным именем файла
(например, "/hd0/1/kolibri/kolibri.img")
* ecx = 0 - записать образ обратно на носитель, с которого была
загружена система: на дискету или в файл образа, найденный при
загрузке на разделе жёсткого диска
Возвращаемое значение:
* eax = 0 - успешно
* иначе eax = код ошибки файловой системы
Замечания:
* Все папки в указанном пути должны существовать, иначе вернётся
значение 5, "файл не найден".
* Для ecx = 0: если рамдиск не был загружен с перезаписываемого
носителя (например, образ заранее загружен в память
загрузчиком), вернётся значение 2; ошибка записи на дискету
вернёт значение 11.
* Устройство-источник загрузки можно заранее узнать подфункцией
13 функции 26.
---------------------- Константы для регистров: ----------------------
eax - SF_SYSTEM (18)
@@ -1654,6 +1663,27 @@ Remarks:
eax - SF_SYSTEM_GET (26)
ebx - SSF_ACCESS_PCI (12)
======================================================================
===== Функция 26, подфункция 13 - откуда загружен рамдиск. ===========
======================================================================
Параметры:
* eax = 26 - номер функции
* ebx = 13 - номер подфункции
Возвращаемое значение:
* eax = устройство, с которого при загрузке был прочитан образ
рамдиска:
* 1 = дискета
* 2 = раздел жёсткого диска
* 3 = образ заранее загружен в память загрузчиком
* 4 = рамдиск создан пустым (отформатирован при загрузке)
* 5 = рамдиска нет
Замечания:
* Для сохранения рамдиска на загрузочный носитель используйте
функцию 18.6 с ecx = 0; она успешна для значений 1 и 2.
---------------------- Константы для регистров: ----------------------
eax - SF_SYSTEM_GET (26)
ebx - SSF_RD_BOOT_SOURCE (13)
======================================================================
================ Функция 29 - получить системную дату. ===============
======================================================================
Параметры:
@@ -5230,7 +5260,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
-EINVAL (-11), -EFAULT (-14), -ENFILE (-23), -EMFILE (-24)
Примечания:
* В случае успеха pipefd[0] является дескриптором чтения, а pipefd[1]
- дескриптором записи.
- дескриптором записи.
---------------------- Константы для регистров: ----------------------
eax - SF_POSIX (77)
+28
View File
@@ -769,12 +769,20 @@ Parameters:
* ebx = 6 - subfunction number
* ecx = pointer to the full path to file
(for example, "/hd0/1/kolibri/kolibri.img")
* ecx = 0 - write the image back to the medium the system was
booted from: the floppy drive, or the image file found on a hard
disk partition at boot
Returned value:
* eax = 0 - success
* else eax = error code of the file system
Remarks:
* All folders in the given path must exist, otherwise function
returns value 5, "file not found".
* For ecx = 0: if the ramdisk was not loaded from a writable
medium (e.g. it was preloaded to memory by the loader), function
returns value 2; a failed floppy write returns value 11.
* The boot source device can be checked in advance with
subfunction 13 of function 26.
---------------------- Constants for registers: ----------------------
eax - SF_SYSTEM (18)
@@ -1639,6 +1647,26 @@ Remarks:
eax - SF_SYSTEM_GET (26)
ebx - SSF_ACCESS_PCI (12)
======================================================================
== Function 26, subfunction 13 - get ramdisk boot source device. =====
======================================================================
Parameters:
* eax = 26 - function number
* ebx = 13 - subfunction number
Returned value:
* eax = device the ramdisk image was loaded from at boot:
* 1 = floppy drive
* 2 = hard disk partition
* 3 = image preloaded to memory by the loader
* 4 = ramdisk was created empty (formatted at boot)
* 5 = no ramdisk
Remarks:
* To save the ramdisk back to the boot medium use function 18.6
with ecx = 0; it succeeds for values 1 and 2.
---------------------- Constants for registers: ----------------------
eax - SF_SYSTEM_GET (26)
ebx - SSF_RD_BOOT_SOURCE (13)
======================================================================
=================== Function 29 - get system date. ===================
======================================================================
Parameters:
+11 -1
View File
@@ -1634,6 +1634,7 @@ sys_getsetup:
; 10 = not used
; 11 = get the state "lba read"
; 12 = get the state "pci access"
; 13 = get device the ramdisk was loaded from
;-----------------------------------------------------------------------------
; F.26.2 - get keyboard layout
sub ebx, 2
@@ -1725,12 +1726,21 @@ sys_getsetup:
@@:
; F.26.12 - Find out whether low-level PCI access is enabled
dec ebx
jnz .error
jnz @f
mov eax, [pci_access_enabled]
mov [esp + SYSCALL_STACK.eax], eax
ret
;--------------------------------------
@@:
; F.26.13 - get device the ramdisk was loaded from, RD_LOAD_FROM_*
dec ebx
jnz .error
movzx eax, byte [BOOT.rd_load_from]
mov [esp + SYSCALL_STACK.eax], eax
ret
;--------------------------------------
.error:
or [esp + SYSCALL_STACK.eax], -1
ret
+6
View File
@@ -84,6 +84,12 @@ SF_SCREEN_PUT_IMAGE=25
SF_SYSTEM_GET=26
SSF_TIME_COUNT=9
SSF_TIME_COUNT_PRO=10
SSF_RD_BOOT_SOURCE=13
RD_LOAD_FROM_FLOPPY=1
RD_LOAD_FROM_HD=2
RD_LOAD_FROM_MEMORY=3
RD_LOAD_FROM_FORMAT=4
RD_LOAD_FROM_NONE=5
SF_GET_SYS_DATE=29
SF_CURRENT_FOLDER=30
SSF_SET_CF=1
+3 -1
View File
@@ -1,2 +1,4 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("end.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "end")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
tup.rule("end.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o " .. tup.getconfig("KPACK_CMD"), "end")
-1
View File
@@ -1 +0,0 @@
Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,Гh,╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl╟мl═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s═▓s╚и`пНBГh,Гh,╟мl╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯMЩ{7Гh,Гh,╟мl╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯMЩ{7Гh,Гh,╟мl╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯMЩ{7Гh,Гh,╟мl╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯM─ЯMЩ{7Гh,Гh,╟мl╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С:╢С9╖С7╕С5╕С5╕С5╕С5╕С5╖С7╡С:╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<╡С<Line truncated
-3
View File
@@ -1,3 +0,0 @@
@fasm end.asm end
@kpack end
@pause
+277 -114
View File
@@ -1,139 +1,302 @@
; SPDX-License-Identifier: NOASSERTION
;
; END - the shutdown dialog of KolibriOS
;
; END
; Offers kernel restart / reboot / power off and optionally saves the
; RAM-disk before leaving: when the "save changes" checkbox is on, the
; image is written back to the boot medium (SF 18.6 with ecx = 0).
; A failed save cancels the shutdown so the user never loses changes
; silently.
;
; <diamond> note that 'mov al,xx' is shorter than 'mov eax,xx'
; and if we know that high 24 bits of eax are zero, we can use 1st form
; the same about ebx,ecx,edx
;
; 15.02.2007 merge old END with new one (fron Veliant & Leency) by Heavyiron
; Authors: Veliant, Leency, Heavyiron, Burer
include "..\..\macros.inc"
use32
org 0
meos_app_start
code
db 'MENUET01'
dd 1
dd START
dd IM_END
dd I_END
dd stacktop
dd 0
dd 0
draw:
include '../../macros.inc'
include '../../proc32.inc'
include '../../dll.inc'
include '../../KOSfuncs.inc'
include '../../encoding.inc'
include '../../gui_patterns.inc'
include '../../string.inc'
mov al,12 ; eax=12 - tell os about redraw start
mov ebx,1
mcall
WIN_W = 440
WIN_H = 200
BOT_PANEL_H = 70
BUT_W = 116
BUT_Y = WIN_H-60
mov al,14 ; eax=14 - get screen max x & max y
mcall
BTN_CANCEL = 1
BTN_KERNEL = 2
BTN_REBOOT = 3
BTN_POWEROFF = 4
BTN_CHECKBOX = 5
movzx ecx, ax
shr eax, 16
shr ecx, 1
shr eax, 1
sub eax, 157
sub ecx, 100
mov ebx, eax
shl ebx, 16
add ebx, 253
shl ecx, 16
add ecx, 154
; mcall 18,9 shutdown codes
SHUTDOWN_POWEROFF = 2
SHUTDOWN_REBOOT = 3
SHUTDOWN_KERNEL = 4
xor eax,eax ; define and draw window
mov edx,0x41ffffff
mcall
;---------------------------------------------------------------------
mov al, 7
mov ebx, background
mov ecx, 254 shl 16 + 155
xor edx, edx
mcall
START:
mcall SF_SYS_MISC, SSF_HEAP_INIT
mcall SF_SYS_MISC, SSF_MEM_OPEN, checkbox_sharedname
mov [checkbox_img], eax
stdcall dll.Load, importLib
test eax, eax
jnz .no_ini ; no libini - live without autosave
inc [ini_ok]
invoke ini_get_int, ini_file, ini_sec, key_autosave, 0
mov [autosave], eax
.no_ini:
mov al,8
mcall ,58 shl 16 + 32,59 shl 16 + 34, 1 shl 30 + 1
inc edx
mcall ,110 shl 16 + 32,54 shl 16 + 32
inc edx
mcall ,161 shl 16 + 32,59 shl 16 + 34
inc edx
mcall ,193 shl 16 + 43,125 shl 16 + 16,
inc edx
mcall ,144 shl 16 + 43
mov al,12 ;end of redraw
mov ebx,2
mcall
redraw:
call draw_window
still:
mcall SF_WAIT_EVENT
dec eax
jz redraw
dec eax
jz on_key
; button event
mcall SF_GET_BUTTON
shr eax, 8
cmp eax, BTN_CANCEL
je exit
cmp eax, BTN_KERNEL
je restart_kernel
cmp eax, BTN_REBOOT
je reboot
cmp eax, BTN_POWEROFF
je power_off
cmp eax, BTN_CHECKBOX
je toggle_checkbox
jmp still
mov eax,10 ; wait here for event
mcall
on_key:
mcall SF_GET_KEY
cmp ah, 13 ; Enter
je reboot
cmp ah, 19 ; Ctrl+S
je toggle_checkbox
cmp ah, 180 ; Home
je restart_kernel
cmp ah, 181 ; End
je power_off
cmp ah, 27 ; Esc
jne still
dec eax
jz draw
dec eax
jnz button
key:
mov al,2 ; now eax=2 - get key code
mcall
mov al,ah
cmp al,13
jz restart
cmp al,27
jz close_1
cmp al,180
jz restart_kernel
cmp al,181
jz power_off
jmp still
exit:
mcall SF_TERMINATE_PROCESS
button:
mov al,17 ; now eax=17 - get pressed button id
mcall
xchg al,ah
dec eax
jz restart_kernel
dec eax
jz power_off
dec eax
jz restart
dec eax
jnz run_rdsave
; we have only one button left, this is close button
; dec eax
; jnz still
close_1:
or eax,-1
mcall
;---------------------------------------------------------------------
power_off:
push 2
jmp mcall_and_close
power_off:
mov [shutdown_code], SHUTDOWN_POWEROFF
jmp save_and_shutdown
restart:
push 3
jmp mcall_and_close
reboot:
mov [shutdown_code], SHUTDOWN_REBOOT
jmp save_and_shutdown
restart_kernel:
push 4
mcall_and_close:
pop ecx
mcall 18,9
jmp close_1
restart_kernel:
mov [shutdown_code], SHUTDOWN_KERNEL
run_rdsave:
mov eax,70
mov ebx,rdsave
mcall
jmp still
save_and_shutdown:
cmp [ini_ok], 0
je @f
invoke ini_set_int, ini_file, ini_sec, key_autosave, [autosave]
@@:
cmp [autosave], 1
jne .shutdown
data
background file 'back.raw'
rdsave:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/sys/rdsave',0
udata
mcall SF_DRAW_TEXT, <55,108>, 0x90FF990A, TEXT_SAVING
meos_app_end
mcall SF_SYSTEM, SSF_RD_TO_HDD, 0 ; save back to the boot medium
test eax, eax
jz .shutdown
.save_failed: ; the image is not saved - cancel the shutdown
call draw_window
mcall SF_DRAW_TEXT, <55,108>, 0x90FF5050, TEXT_SAVE_FAILED
jmp still
.shutdown:
mcall SF_SYSTEM, SSF_SHUTDOWN, [shutdown_code]
mcall SF_TERMINATE_PROCESS
;---------------------------------------------------------------------
toggle_checkbox:
xor [autosave], 1
call draw_checkbox
jmp still
;---------------------------------------------------------------------
draw_window:
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_GET_SCREEN_SIZE
movzx ecx, ax
shr eax, 17
shl eax, 16
lea ebx, [eax-(WIN_W/2) shl 16+WIN_W-1]
shr ecx, 1
shl ecx, 16
lea ecx, [ecx-(WIN_H/2) shl 16+WIN_H-1]
xor eax, eax
mov edx, 0x41000000
mcall ; borderless window centered on the screen
DrawWideRectangle 0, 0, WIN_W, WIN_H, 2, 0xA3A7AA
mcall SF_DRAW_RECT, <2,WIN_W-4>, <2,WIN_H-BOT_PANEL_H-2>, 0x202020
mcall SF_DRAW_RECT, <2,WIN_W-4>, <WIN_H-BOT_PANEL_H-2,BOT_PANEL_H>, 0x4B4B4B
mcall SF_DRAW_TEXT, <30,21>, 0x91FFFFFF, TEXT_WTITLE
mcall SF_DRAW_TEXT, <55,70>, 0x90FFFFFF, TEXT_RDSAVE1
mcall SF_DRAW_TEXT, <55,86>, 0x90FFFFFF, TEXT_RDSAVE2
mcall SF_DRAW_TEXT, <WIN_W-23,5>, 0x81FFFFFF, TEXT_CANCEL
mcall SF_DEFINE_BUTTON, <WIN_W-35,32>, <2,22>, BTN_CANCEL+BT_HIDE
mcall SF_DEFINE_BUTTON, <32,14>, <70,14>, BTN_CHECKBOX+BT_HIDE
mcall SF_DEFINE_BUTTON, <47,WIN_W-47>, <68,34>, BTN_CHECKBOX+BT_HIDE+BT_NOFRAME
DrawRectangle3D 32, 70, 14, 14, 0x606060, 0xAFAFAF
call draw_checkbox
stdcall shutdown_button, 20, 0x4E91C5, BTN_KERNEL, TEXT_KERNEL, TEXT_HOME
stdcall shutdown_button, 160, 0x41C166, BTN_REBOOT, TEXT_REBOOT, TEXT_ENTER
stdcall shutdown_button, 300, 0xC75C54, BTN_POWEROFF, TEXT_OFF, TEXT_END
mcall SF_REDRAW, SSF_END_DRAW
ret
; one big colored button with a centered caption and a hotkey hint
proc shutdown_button x:dword, bgcol:dword, id:dword, caption:dword, hotkey:dword
mov ebx, [x]
sub ebx, 3
mcall SF_DRAW_RECT, <ebx,BUT_W+7>, <BUT_Y-3,43+6>, 0x202020
mcall SF_DEFINE_BUTTON, <[x],BUT_W>, <BUT_Y,43-1>, [id], [bgcol]
stdcall string.length, [caption]
neg eax
lea ebx, [eax*4+BUT_W/2] ; center the 8 px wide characters
add ebx, [x]
mcall SF_DRAW_TEXT, <ebx,BUT_Y+8>, 0x90FFFFFF, [caption]
add ebx, 1 shl 16 ; draw twice for a bold effect
mcall
stdcall string.length, [hotkey]
neg eax
lea ebx, [eax*3+BUT_W/2] ; center the 6 px wide characters
add ebx, [x]
shl ebx, 16
add ebx, BUT_Y+26
mcall SF_DRAW_TEXT, , 0x80FFFFFF, [hotkey]
ret
endp
draw_checkbox:
cmp [autosave], 0
je .unset
cmp [checkbox_img], 0
je .no_image
mcall SF_PUT_IMAGE, [checkbox_img], <13,13>, <33,71>
ret
.no_image:
mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xFFFFFF
mcall SF_DRAW_RECT, <34,11>, <72,11>, 0x58C33C
ret
.unset:
mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xFFFFFF
ret
;---------------------------------------------------------------------
;--- Data ----------------------------------------------------------
;---------------------------------------------------------------------
if lang eq ru_RU
TEXT_WTITLE cp866 'Завершение работы',0
TEXT_RDSAVE1 cp866 'Сохранить изменения, сделанные в',0
TEXT_RDSAVE2 cp866 'процессе работы в системе (Ctrl+S)',0
TEXT_KERNEL cp866 'Ядро',0
TEXT_REBOOT cp866 'Перезагрузка',0
TEXT_OFF cp866 'Выключение',0
TEXT_SAVING cp866 'Сохранение образа...',0
TEXT_SAVE_FAILED cp866 'Не удалось сохранить образ!',0
else if lang eq es_ES
TEXT_WTITLE cp850 'Apagar el equipo',0
TEXT_RDSAVE1 cp850 'Guardar los cambios hechos durante',0
TEXT_RDSAVE2 cp850 'la sesión de trabajo (Ctrl+S)',0
TEXT_KERNEL cp850 'Núcleo',0
TEXT_REBOOT cp850 'Reiniciar',0
TEXT_OFF cp850 'Apagar',0
TEXT_SAVING cp850 'Guardando la imagen...',0
TEXT_SAVE_FAILED cp850 'No se pudo guardar la imagen!',0
else ; Default to en_US
TEXT_WTITLE db 'Shutdown computer',0
TEXT_RDSAVE1 db 'Save all changes that were done',0
TEXT_RDSAVE2 db 'during system work (Ctrl+S)',0
TEXT_KERNEL db 'Kernel',0
TEXT_REBOOT db 'Reboot',0
TEXT_OFF db 'Power off',0
TEXT_SAVING db 'Saving RAM-drive...',0
TEXT_SAVE_FAILED db 'Failed to save the RAM-drive!',0
end if
TEXT_HOME db 'Home',0
TEXT_ENTER db 'Enter',0
TEXT_END db 'End',0
TEXT_CANCEL db 'x',0
;---------------------------------------------------------------------
ini_file db '/sys/settings/app.ini',0
ini_sec db 'RDSave',0
key_autosave db 'autosave',0
checkbox_sharedname db 'CHECKBOX',0
;---------------------------------------------------------------------
align 4
importLib:
library libini, 'libini.obj'
import libini, \
ini_get_int, 'ini_get_int', \
ini_set_int, 'ini_set_int'
;---------------------------------------------------------------------
IM_END:
align 4
checkbox_img rd 1
autosave rd 1
ini_ok rd 1
shutdown_code rd 1
;---------------------------------------------------------------------
align 32
rb 4096
stacktop:
I_END:
-7
View File
@@ -1,7 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"end.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "end")
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix de_DE >lang.inc
@fasm end.asm end
@kpack end
@erase lang.inc
@pause
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm end.asm end
@kpack end
@erase lang.inc
@pause
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix it_IT >lang.inc
@fasm end.asm end
@kpack end
@erase lang.inc
@pause
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm end.asm end
@kpack end
@erase lang.inc
@pause
-71
View File
@@ -1,71 +0,0 @@
WIN_W = 440
WIN_H = 200
BOT_PANEL_H = 70
;---------------------------------------------------------------------
CANCEL_BUTTON_ID = 1+BT_HIDE
HOME_BUTTON_ID = 2
REBOOT_BUTTON_ID = 3
POWEROFF_BUTTON_ID = 4
CHECKBOX_BUTTON_ID = 5+BT_HIDE
;---------------------------------------------------------------------
TEXT_HOME: db 'Home',0
TEXT_ENTER: db 'Enter',0
TEXT_END: db 'End',0
TEXT_CANCEL: db 'x',0
;---------------------------------------------------------------------
; Language support for locales: ru_RU (CP866), de_DE, it_IT, en_US
if lang eq ru_RU
TEXT_WTITLE: db 'Завершение работы',0
TEXT_RDSAVE1: db 'Сохранить изменения, сделанные в',0
TEXT_RDSAVE2: db 'процессе работы в системе (Ctrl+S)',0
TEXT_KERNEL: db 'Ядро',0
TEXT_REBOOT: db 'Перезагрузка',0
TEXT_OFF: db 'Выключение',0
TEXT_SAVING: db 'Сохранение образа...',0
else if lang eq de_DE
TEXT_WTITLE: db 'Shutdown computer',0
TEXT_RDSAVE1: db 'Save all changes that were done',0
TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0
TEXT_KERNEL: db 'Kernel',0
TEXT_REBOOT: db 'Neustart',0
TEXT_OFF: db 'Beenden',0
TEXT_SAVING: db 'Saving RAM-drive...',0
else if lang eq it_IT
TEXT_WTITLE: db 'Shutdown computer',0
TEXT_RDSAVE1: db 'Save all changes that were done',0
TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0
TEXT_KERNEL: db 'Kernel',0
TEXT_REBOOT: db 'Riavvio',0
TEXT_OFF: db 'Spegni',0
TEXT_SAVING: db 'Saving RAM-drive...',0
else ; Default to en_US
TEXT_WTITLE: db 'Shutdown computer',0
TEXT_RDSAVE1: db 'Save all changes that were done',0
TEXT_RDSAVE2: db 'during system work (Ctrl+S)',0
TEXT_KERNEL: db 'Kernel',0
TEXT_REBOOT: db 'Reboot',0
TEXT_OFF: db 'Power off',0
TEXT_SAVING: db 'Saving RAM-drive...',0
end if
;---------------------------------------------------------------------
rdsave:
dd SSF_START_APP,0,hide,0,0
db '/sys/rdsave',0
hide db 'h',0
asettings db 'settings',0
aautosave db 'autosave',0
ini_file db '/sys/settings/rdsave.ini',0
;---------------------------------------------------------------------
importLib:
library \
libini, 'libini.obj'
import libini, \
ini_set_int ,'ini_set_int', \
ini_get_int ,'ini_get_int'
;---------------------------------------------------------------------
checkbox_sharedname db 'CHECKBOX',0
checkbox_img dd ?
;---------------------------------------------------------------------
-221
View File
@@ -1,221 +0,0 @@
; END
; KolibriOS Team 2005-2021
use32 ; включить 32-битный режим ассемблера
org 0x0 ; адресация с нуля
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
dd 0x01 ; версия заголовка (всегда 1)
dd START ; адрес первой команды
dd IM_END ; размер программы
dd I_END ; количество памяти
dd stacktop ; адрес вершины стека
dd 0x0 ; адрес буфера для параметров
dd 0x0
include 'lang.inc'
include '../../../macros.inc'
include '../../../proc32.inc'
include '../../../dll.inc'
include '../../../KOSfuncs.inc'
include '../../../gui_patterns.inc'
include '../../../string.inc'
START:
mcall SF_SYS_MISC, SSF_HEAP_INIT
mcall SF_SYS_MISC, SSF_MEM_OPEN, checkbox_sharedname
mov [checkbox_img], eax
stdcall dll.Load,importLib
or eax, eax
jnz redraw
invoke ini_get_int,ini_file,asettings,aautosave,0
mov [autosave],eax
redraw:
call draw_window
still:
mcall SF_WAIT_EVENT ;wait here for event
dec eax
jz redraw
dec eax
jz key
dec eax
jz button
jmp still
key:
mcall SF_GET_KEY ;get key code
mov al,ah
cmp al,13
je restart
cmp al,19
je checkbox
cmp al,180
je restart_kernel
cmp al,181
je power_off
cmp al,27
jne still
close:
mcall SF_TERMINATE_PROCESS
button:
mcall SF_GET_BUTTON ;get pressed button id
xchg al,ah
dec eax
jz close
dec eax
jz restart_kernel
dec eax
jz restart
dec eax
jnz checkbox
power_off:
push 2
jmp mcall_and_close
restart:
push 3
jmp mcall_and_close
restart_kernel:
push 4
mcall_and_close:
invoke ini_set_int,ini_file,asettings,aautosave,[autosave]
cmp [autosave],1
jne no_save
mcall SF_DRAW_TEXT,<55,108>,0x90FF990A,TEXT_SAVING
mcall SF_FILE,rdsave
test eax,eax
js no_save
mov ecx,eax
mcall SF_SYSTEM,SSF_GET_THREAD_SLOT
mov ecx,eax
@@:
push ecx
mcall SF_WAIT_EVENT_TIMEOUT,100
dec eax
jnz no_red
call draw_window
no_red:
pop ecx
mcall SF_THREAD_INFO,proc_info
cmp [proc_info+50],9
je no_save
jmp @b
no_save:
pop ecx
mcall SF_SYSTEM,SSF_SHUTDOWN
mcall SF_TERMINATE_PROCESS
ret
checkbox:
cmp [autosave],1
je .1
mov [autosave],1
jmp .draw
.1:
mov [autosave],0
.draw:
call draw_checkbox_flag
jmp still
draw_window:
mcall SF_REDRAW,SSF_BEGIN_DRAW
mcall SF_GET_SCREEN_SIZE
movzx ecx,ax
shr eax,17
shl eax,16
lea ebx,[eax-(WIN_W/2) shl 16+WIN_W-1]
shr ecx,1
shl ecx,16
lea ecx,[ecx-(WIN_H/2) shl 16+WIN_H-1]
xor eax,eax
mov edx, 0x41000000
mcall ;define and draw window
DrawWideRectangle 0, 0, WIN_W, WIN_H, 2, 0xA3A7AA
mcall SF_DRAW_RECT, <2,WIN_W-4>, <2,WIN_H-BOT_PANEL_H-2>, 0x202020
mcall SF_DRAW_RECT, <2,WIN_W-4>, <WIN_H-BOT_PANEL_H-2,BOT_PANEL_H>, 0x4B4B4B
mcall SF_DRAW_TEXT, <30,21>, 0x91FFFfff, TEXT_WTITLE
mcall SF_DRAW_TEXT, <55,70>, 0x90FFFfff, TEXT_RDSAVE1
mcall SF_DRAW_TEXT, <55,86>, 0x90FFFfff, TEXT_RDSAVE2
mcall SF_DRAW_TEXT, <WIN_W-23,5>, 0x81FFFfff, TEXT_CANCEL
mcall SF_DEFINE_BUTTON, <WIN_W-35,32>, <2,22>, CANCEL_BUTTON_ID
mcall SF_DEFINE_BUTTON, <32,14>, <70,14>, CHECKBOX_BUTTON_ID
mcall SF_DEFINE_BUTTON, <47,WIN_W-47>, <68,34>, CHECKBOX_BUTTON_ID+BT_NOFRAME
DrawRectangle3D 32, 70, 14, 14, 0x606060, 0xAFAFAF
call draw_checkbox_flag
stdcall EndButton, 20, 0x4E91C5, HOME_BUTTON_ID, TEXT_KERNEL, TEXT_HOME
stdcall EndButton, 160, 0x41C166, REBOOT_BUTTON_ID, TEXT_REBOOT, TEXT_ENTER
stdcall EndButton, 300, 0xC75C54, POWEROFF_BUTTON_ID, TEXT_OFF, TEXT_END
mcall SF_REDRAW,SSF_END_DRAW
ret
proc EndButton x, bgcol, id, but_text, hotkey_text
BUTY = WIN_H-60
BUTW = 116
mov ebx,[x]
sub ebx,3
mcall SF_DRAW_RECT, <ebx,BUTW+7>, <BUTY-3,43+6>, 0x202020
mcall SF_DEFINE_BUTTON, <[x],BUTW>, <BUTY,43-1>, [id], [bgcol]
; -strlen(but_text)*8 + BUTW / 2 + x, BUTY+8
stdcall string.length, [but_text]
neg eax
lea ebx,[eax*4+BUTW/2]
add ebx,[x]
mcall SF_DRAW_TEXT, <ebx,BUTY+8>, 0x90FFFfff, [but_text]
add ebx,1 shl 16
mcall
stdcall string.length, [hotkey_text]
neg eax
lea ebx,[eax*3+BUTW/2]
add ebx,[x]
shl ebx,16
add ebx,BUTY+26
mcall SF_DRAW_TEXT, , 0x80FFFfff, [hotkey_text]
ret
endp
draw_checkbox_flag:
cmp [autosave],0
je .flag_unset
cmp [checkbox_img],0
je .flag_set_but_no_checkbox_img
.flag_set:
mcall SF_PUT_IMAGE, [checkbox_img], <13,13>, <33,71>
ret
.flag_set_but_no_checkbox_img:
mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xffffff
mcall SF_DRAW_RECT, <34,11>, <72,11>, 0x58C33C
ret
.flag_unset:
mcall SF_DRAW_RECT, <33,13>, <71,13>, 0xFFFfff
ret
;---------------------------------------------------------------------
include 'data.inc'
;---------------------------------------------------------------------
IM_END:
;---------------------------------------------------------------------
align 4
proc_info rb 1024
autosave rd 1
;---------------------------------------------------------------------
library_path rb 4096
;---------------------------------------------------------------------
align 32
rb 4096
stacktop:
I_END: ; метка конца программы
-29
View File
@@ -1,29 +0,0 @@
#!gmake
# Macro
FASM=/opt/bin/fasm
KPACK=/opt/bin/kpack
LANG=lang.inc
FILE=end
SOURCE=${FILE}.asm
OUT=${FILE}.bin
en:
echo "lang fix en_US" > ${LANG}
${FASM} ${SOURCE} ${OUT}
${KPACK} ${OUT}
de:
echo "lang fix de_DE" > ${LANG}
${FASM} ${SOURCE} ${OUT}
${KPACK} ${OUT}
ru:
echo "lang fix ru_RU" > ${LANG}
${FASM} ${SOURCE} ${OUT}
${KPACK} ${OUT}
it:
echo "lang fix it_IT" > ${LANG}
${FASM} ${SOURCE} ${OUT}
${KPACK} ${OUT}
clean:
rm -f ${LANG} ${OUT}
+1 -4
View File
@@ -1,7 +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")
add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"rdsave.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "rdsave")
tup.rule("rdsave.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o " .. tup.getconfig("KPACK_CMD"), "rdsave")
-4
View File
@@ -1,4 +0,0 @@
[RDSave]
path=/usbhd0/1/kolibri.img
autoclose=0
-13
View File
@@ -1,13 +0,0 @@
#!/bin/bash
# This script does for linux the same as build.bat for DOS,
# it compiles the KoOS kernel, hopefully ;-)
echo "lang fix en_US"
echo "lang fix en_US" > lang.inc
fasm -m 16384 rdsave.asm rdsave
rm -f lang.inc
exit 0
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm rdsave.asm rdsave
@kpack rdsave
@erase lang.inc
@pause
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix et_EE >lang.inc
@fasm rdsave.asm rdsave
@kpack rdsave
@erase lang.inc
@pause
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix it_IT >lang.inc
@fasm rdsave.asm rdsave
@kpack rdsave
@erase lang.inc
@pause
-6
View File
@@ -1,6 +0,0 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm rdsave.asm rdsave
@kpack rdsave
@erase lang.inc
@pause
-25
View File
@@ -1,25 +0,0 @@
#!gmake
# Macro
FASM=/opt/bin/fasm
KPACK=/opt/bin/kpack
LANG=lang.inc
FILE=rdsave
SOURCE=${FILE}.asm
OUT=${FILE}.bin
en:
echo "lang fix en_US" > ${LANG}
${FASM} ${SOURCE} ${OUT}
ru:
echo "lang fix ru_RU" > ${LANG}
${FASM} ${SOURCE} ${OUT}
it:
echo "lang fix it_IT" > ${LANG}
${FASM} ${SOURCE} ${OUT}
et:
echo "lang fix et_EE" > ${LANG}
${FASM} ${SOURCE} ${OUT}
clean:
rm -f ${LANG} ${OUT}
File diff suppressed because it is too large. Load diff
-120
View File
@@ -1,120 +0,0 @@
; by ManHunter / PCL
; http://www.manhunter.ru
;-----------------------------------------------------
; Функция получения длины строки (Fast)
;-----------------------------------------------------
; lpStr - указатель на строку ASCIIZ
; На выходе: EAX - длина строки без учета завершающего
; нулевого байта
;-----------------------------------------------------
;proc _lstrlen lpStr:DWORD
; mov eax, [lpStr]
; sub eax, 4
;@@:
; add eax, 4
; cmp byte [eax], 0
; je .szlen_lb1
; cmp byte [eax+1], 0
; je .szlen_lb2
; cmp byte [eax+2], 0
; je .szlen_lb3
; cmp byte [eax+3], 0
; jne @b
; sub eax, [lpStr]
; add eax, 3
; ret
;.szlen_lb3:
; sub eax, [lpStr]
; add eax, 2
; ret
;.szlen_lb2:
; sub eax, [lpStr]
; add eax, 1
; ret
;.szlen_lb1:
; sub eax, [lpStr]
; ret
;endp
;-----------------------------------------------------
; Функция получения длины строки
;-----------------------------------------------------
; lpStr - указатель на строку ASCIIZ
; На выходе: EAX - длина строки без учета завершающего
; нулевого байта
;-----------------------------------------------------
proc _lstrlen lpStr:DWORD
mov eax, [lpStr]
@@: inc eax
cmp byte [eax], 0
jne @b
sub eax, [lpStr]
ret
endp
;-----------------------------------------------------
; Функция быстрого слияния двух строк
; используются функции _lstrlen, _lstrcpy
;-----------------------------------------------------
; lpDst - указатель на исходную строку ASCIIZ
; lpSrc - указатель на добавляемую строку ASCIIZ
;-----------------------------------------------------
proc _lstrcat lpDst:DWORD, lpSrc:DWORD
pusha
stdcall _lstrlen,[lpDst]
add eax,[lpDst]
stdcall _lstrcpy,eax,[lpSrc]
popa
ret
endp
;-----------------------------------------------------
; Функция быстрого копирования строки
; используются функции _lstrlen, _memcopy
;-----------------------------------------------------
; lpDst - указатель на приемник
; lpSrc - указатель на строку ASCIIZ
;-----------------------------------------------------
proc _lstrcpy lpDst:DWORD, lpSrc:DWORD
pusha
stdcall _lstrlen,[lpSrc]
inc eax
stdcall _memcopy,[lpDst],[lpSrc],eax
popa
ret
endp
;-----------------------------------------------------
; Функция быстрого копирования участка памяти
;-----------------------------------------------------
; lpDst - указатель на приемник
; lpSrc - указатель на источник
; dSize - размер копируемого блока
;-----------------------------------------------------
proc _memcopy lpDst:DWORD, lpSrc:DWORD, dSize:DWORD
pusha
; Установить указатели на источник и приемник
cld
mov edi,[lpDst]
mov esi,[lpSrc]
mov ecx,[dSize]
push ecx
; Разделить на 4 и получить длину в DWORD
shr ecx,2
; Скопировать основную часть строки DWORD'ами
rep movsd
pop ecx
; Получить остаток от деления на 4
and ecx,3
; Скопировать остаток строки байтами
rep movsb
popa
ret
endp