Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ee27c5595 | ||
|
|
dc7d6dd842 | ||
|
|
a8ade5e0c2 |
No files matched your search
+1
-1
@@ -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"},
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 +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
|
||||
@@ -1,3 +0,0 @@
|
||||
@fasm end.asm end
|
||||
@kpack end
|
||||
@pause
|
||||
+277
-114
@@ -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:
|
||||
@@ -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")
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix de_DE >lang.inc
|
||||
@fasm end.asm end
|
||||
@kpack end
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm end.asm end
|
||||
@kpack end
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix it_IT >lang.inc
|
||||
@fasm end.asm end
|
||||
@kpack end
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm end.asm end
|
||||
@kpack end
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -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 ?
|
||||
;---------------------------------------------------------------------
|
||||
@@ -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: ; метка конца программы
|
||||
@@ -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,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")
|
||||
@@ -1,4 +0,0 @@
|
||||
[RDSave]
|
||||
path=/usbhd0/1/kolibri.img
|
||||
autoclose=0
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm rdsave.asm rdsave
|
||||
@kpack rdsave
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix et_EE >lang.inc
|
||||
@fasm rdsave.asm rdsave
|
||||
@kpack rdsave
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix it_IT >lang.inc
|
||||
@fasm rdsave.asm rdsave
|
||||
@kpack rdsave
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm rdsave.asm rdsave
|
||||
@kpack rdsave
|
||||
@erase lang.inc
|
||||
@pause
|
||||
@@ -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}
|
||||
+492
-626
File diff suppressed because it is too large.
Load diff
@@ -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
|
||||
Reference in new issue
Block a user