Adding f.30.3 to mount the additional system directory (this is used by SEARCHAP).

git-svn-id: svn://kolibrios.org@3663 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2013-06-15 21:17:06 +00:00
parent b7c579d4b9
commit 799f7cdc6b
4 changed files with 90 additions and 0 deletions

View File

@ -1794,6 +1794,23 @@ dd 1675
* При создании процесса/потока текущая папка наследуется от * При создании процесса/потока текущая папка наследуется от
родителя. родителя.
---- Подфункция 3 - установить доп. системную директорию для ядра ----
Параметры:
* eax = 30 - номер функции
* ebx = 3 - номер подфункции
* ecx = указатель на блок данных:
sysdir_name rb 64
sysdir_path rb 64
Пример:
dir_name1 db 'addappl',0
rb 64-8
dir_path1 db 'HD0/1',0
rb 64-6
Возвращаемое значение:
* функция не возвращает значения
Замечания:
* Функция может быть вызвана только 1 раз за 1 сессию работы ОС.
====================================================================== ======================================================================
========= Функция 34 - узнать кому принадлежит точка экрана. ========= ========= Функция 34 - узнать кому принадлежит точка экрана. =========
====================================================================== ======================================================================

View File

@ -1776,6 +1776,23 @@ Remarks:
* At process/thread creation the current folder will be inherited * At process/thread creation the current folder will be inherited
from the parent. from the parent.
--- Subfunction 3 - install the add.system directory for the kernel --
Parameters:
* eax = 30 - function number
* ebx = 3 - subfunction number
* ecx = pointer to a block of data:
sysdir_name rb 64
sysdir_path rb 64
For example:
dir_name1 db 'addappl',0
rb 64-8
dir_path1 db 'HD0/1',0
rb 64-6
Returned value:
* function does not return value
Remarks:
* The function can be called only 1 time for 1 session of the OS.
====================================================================== ======================================================================
========= Function 34 - who owner the pixel on the screen. =========== ========= Function 34 - who owner the pixel on the screen. ===========
====================================================================== ======================================================================

View File

@ -934,6 +934,12 @@ biosdisk_enum_root:
ret ret
process_replace_file_name: process_replace_file_name:
; in
; esi - path with filename(f.70)
;
; out
; ebp - full filename
mov ebp, [full_file_name_table] mov ebp, [full_file_name_table]
mov edi, [full_file_name_table.size] mov edi, [full_file_name_table.size]
dec edi dec edi
@ -975,6 +981,10 @@ process_replace_file_name:
.ret: .ret:
ret ret
uglobal
lock_flag_for_f30_3 rb 1
endg
sys_current_directory: sys_current_directory:
; mov esi, [current_slot] ; mov esi, [current_slot]
; mov esi, [esi+APPDATA.cur_dir] ; mov esi, [esi+APPDATA.cur_dir]
@ -988,7 +998,42 @@ sys_current_directory:
jz .set jz .set
dec ebx dec ebx
jz .get jz .get
dec ebx
jz .mount_additional_directory
ret ret
.mount_additional_directory:
; sysfunction 30.2: [for app] eax=30,ebx=3,ecx->dir name+dir path (128)
; for our code: nothing
; check lock of the function
cmp [lock_flag_for_f30_3], 1
je @f
mov esi, ecx
mov edi, sysdir_name1
; copying fake directory name
mov ecx, 63
cld
rep movsb
; terminator of name, in case if we get the inlet trash
inc esi
xor eax, eax
stosb
; copying real directory path for mounting
mov ecx, 63
rep movsb
; terminator of name, in case if we get the inlet trash
xor eax, eax
stosb
; increase the pointer of inputs for procedure "process_replace_file_name"
mov [full_file_name_table.size], 2
; block the ability to call f.30.3 because for one session is necessary
; for us only once
mov [lock_flag_for_f30_3], 1
@@:
ret
.get: .get:
; sysfunction 30.2: [for app] eax=30,ebx=2,ecx->buffer,edx=len ; sysfunction 30.2: [for app] eax=30,ebx=2,ecx->buffer,edx=len
; for our code: ebx->buffer,ecx=len ; for our code: ebx->buffer,ecx=len

View File

@ -32,6 +32,17 @@ uglobal
; Parser_params will initialize: sysdir_name = "sys", sysdir_path = <sysdir> ; Parser_params will initialize: sysdir_name = "sys", sysdir_path = <sysdir>
sysdir_name rb 64 sysdir_name rb 64
sysdir_path rb 64 sysdir_path rb 64
sysdir_name1 rb 64
sysdir_path1 rb 64
; for example:
;dir_name1 db 'addappl',0
; rb 64-8
;dir_path1 db 'HD0/1',0
; rb 64-6
endg
uglobal
tmp_file_name_table dd ? tmp_file_name_table dd ?
endg endg