Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3538 → Rev 3539

/kernel/trunk/sec_loader/trunk/parse_loader.inc
24,10 → 24,10
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
 
;áëîê ìàêðîñîâ ïî îáðàáîòêå ñåêöèè [loader]
;âõîäíûå äàííûå:
;es:di - óêàçàòåëü íà ñåêöèþ íà÷èíàþùèþñÿ ñ '[' âñòå÷àþùèþñÿ ïîñëå 0õa
;cx - ñ÷åò÷èê êîë-âî áàéò äëÿ ïðîâåðêå â êàäðå
;блок макросов по обработке секции [loader]
;входные данные:
;es:di - указатель на секцию начинающиюся с '[' встечающиюся после 0хa
;cx - счетчик кол-во байт для проверке в кадре
;
macro use_parse_loader
{
35,7 → 35,7
;//////////////////
;/ parse [loader]
;//////////////////
mov bx, cx ;cîõðàíèì â ðåãèñòðû çíà÷åíèÿ ñ÷åò÷èêà è óêàçàòåëÿ
mov bx, cx ;cохраним в регистры значения счетчика и указателя
mov ax, di
 
; mov word [bp-4],.start ;is alredy set, see up
42,9 → 42,9
mov si, parse_loader
mov cx, parse_loader_e - parse_loader
repe cmpsb
jnz error.rest_value ;öåïî÷êà íå ñîâïàëà :( ïåðåéäåì äàëåå ò.å. áóäåì ñíîâà èñêàòü))
jnz error.rest_value ;цепочка не совпала :( перейдем далее т.е. будем снова искать))
 
;ñîõðàíèì óêàçàòåëüíà loader, ÷òî áû ïîòîì áîëüøå åãî íå èñêàòü
;сохраним указательна loader, что бы потом больше его не искать
mov point_loader, ax
sub bx, parse_loader_e - parse_loader;correct cx
add bx, cx
63,7 → 63,7
mov dx, di
@@:
call get_firs_sym
jcxz .loader_f_end ;.end_loader ; end äàæå åñëè ìû íå íàøëè ñåêöèþ ïðåäïîëîæèì ÷òî ñåêöèÿ [loader] ñòîèò â êîíöå
jcxz .loader_f_end ;.end_loader ; end даже если мы не нашли секцию предположим что секция [loader] стоит в конце
cmp al, '['
jnz @b
 
74,7 → 74,7
;//timeout=5
;//default=main
; mov di,dx ;set pointer on section [loader] i think it's not need
mov cx, bx ;set counter for parsing section [loader] cx= êîë-âó ñèìâîëîâ â ñåêöèè [loader]
mov cx, bx ;set counter for parsing section [loader] cx= кол-ву символов в секции [loader]
mov ret_on_ch, .get_next_str; return point
;;;;;;; parse timeout & default
.get_next_str:
82,7 → 82,7
 
test cx, cx
jz .end_loader
; jcxz .end_loader ;çàâåðøåíèå ïàðñèíãà çíà÷åíèé timeout & default
; jcxz .end_loader ;завершение парсинга значений timeout & default
cmp al, 't'
jz .loader_timeout
cmp al, 'd'
96,7 → 96,7
mov cx, parse_l_default_e - parse_l_default
repe cmpsb
 
jnz error.rest_value ;is not compare öåïî÷êà íå ñîâïàëà
jnz error.rest_value ;is not compare цепочка не совпала
 
sub bx, parse_l_default_e - parse_l_default;correct cx
add bx, cx
105,7 → 105,7
test status_flag, flag_found_default
jz .correct_is_not_set
 
mov si, found_equal_default ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì
mov si, found_equal_default ;мы нашли что флаг уже установлен, информируем
call printplain
jmp .get_next_str
 
121,12 → 121,12
repe scasb ;cut ' '
inc cx
dec di
;ñåé÷àñ es:di óêàçûâàþò íà íàçâàíèå ñåêöèè, èìÿ ñåêöèè ïî äåôîëòó íå äîëæíî áûòü loader ò.å. èíà÷å âîçìîæíî çàöèêëèâàíèå
;óñòàíîâèì óêàçàòåëü si íà ýòî çíà÷åíèå è ñíà÷àëà ïðîâåðèì
;сейчас es:di указывают на название секции, имя секции по дефолту не должно быть loader т.е. иначе возможно зацикливание
;установим указатель si на это значение и сначала проверим
 
;ïîëó÷åíèå äëèííû ñåêöèè
; cx=bx ñîäåðæèò äëèííó îñòàòêà ñåêöèè
; di=ax óêàçàòåëü íà òåêóùèþ ñåêöèþ
;получение длинны секции
; cx=bx содержит длинну остатка секции
; di=ax указатель на текущию секцию
mov bx, cx
mov dx, di
 
135,7 → 135,7
inc di
dec cx
test cx, cx
jz error.error_get_size_d_sect ;ïåðåõîä íà îáðàáîòêó îøèáêè ïî íàõîæäåíèþ äëèíû äåôîëòíîé ñåêöèè
jz error.error_get_size_d_sect ;переход на обработку ошибки по нахождению длины дефолтной секции
cmp al, ' '
jz @b
cmp al, 0xd
146,13 → 146,13
;
inc cx ;correct cx
mov ax, bx
sub bx, cx ; â bx äëèíà ñåêöèè êîòîðàÿ îïðåäåëåíà ïî äåôîëòó
sub bx, cx ; в bx длина секции которая определена по дефолту
mov save_cx_d, bx
mov di, dx
 
mov cx, bx ;set size default section
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ïðîâåðêà íà =loader
;save in reg point and ñ÷åò÷èê
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;проверка на =loader
;save in reg point and счетчик
;check on loader
mov bx, ax
mov ax, dx
160,22 → 160,22
mov si, parse_loader
inc si ;set only loader and 6 char in counter
repe cmpsb
jnz .check_section ;öåïî÷êà íå ñîâïàëà :( ïåðåéäåì äàëåå )) çíà÷èò íå èñêëþ÷åíèå
jnz .check_section ;цепочка не совпала :( перейдем далее )) значит не исключение
 
jmp error.default_eq_loader ;error êðèòè÷åñêàÿ îøèáêà ò.å. â äåôîëòå ïðèñóòñòâóåò èìÿ [loader]
jmp error.default_eq_loader ;error критическая ошибка т.е. в дефолте присутствует имя [loader]
 
.check_section: ;ïîèñê ñîîòâåòñòâóþùåé ñåêöèè íàì íóæíî áóäåò óçíàòü àäðåñ ýòîé ñåêöèè
.check_section: ;поиск соответствующей секции нам нужно будет узнать адрес этой секции
mov cx, bx
mov di, ax
 
;/////////////////////////////
; mov ret_on_ch,.start_d ;set return
mov si, di ;óñòàíîâèì óêàçàòåëü íà íàøó ñåêöèþ, êîòîðàÿ ïî äåôîëòó
mov si, di ;установим указатель на нашу секцию, которая по дефолту
 
push di ;save point di
 
push cx ;save cx
;óñòàíîâèì óêàçàòåëü es:di íà íà÷àëî ini ôàéëà
;установим указатель es:di на начало ini файла
mov cx, save_cx ;it's placed size of ini file
les di, dword [file_data]
 
190,13 → 190,13
 
.start_d:
call get_firs_sym ;get first symbol on new line
.first_ret_d: ;ïåðâûé âîçâðàò
.first_ret_d: ;первый возврат
jcxz .correct_exit ;.end_loader ;found or not found parametrs in section exit in section
cmp al, '['
jz .found_sect_d
jmp .start_d
;ïðîñìàòðèâàåì ini ôàéë ñ íà÷àëà â ïîèñêàõ ñåêöèè óêàçàíîé êàê default
;èäåò ïðîâåðêà íà íàëè÷åå çíà÷åíèÿ timeout, äëÿ áîëåå áûñòðîé ðàáîòû, ýòîò ïàðàìåòð äîëæåí áûòü óæå îáðàáîòàí,ò.å. â ýòîì ñëó÷àå ïðè åãî =0 áóäåò ñôîðìèðîâàí óêàçàòåëü òîëüêî íà äåôîëòíóþ ñåêöèþ, èíà÷å èíôîðìàöèÿ áóäåò ñîáðàíà ïî âñåì ñåêöèÿì è ñîñòàâëåíû óêàçàòåëè â áëîêå ïàìÿòè
;просматриваем ini файл с начала в поисках секции указаной как default
;идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти
.found_sect_d:
 
;check on name section
215,9 → 215,9
pop ds
pop si
jnz .not_compare_d_s ;öåïî÷êà íå ñîâïàëà :( ïåðåéäåì äàëåå )) çíà÷èò íå èñêëþ÷åíèå
jnz .not_compare_d_s ;цепочка не совпала :( перейдем далее )) значит не исключение
cmp byte[es:di], ']'
jnz .not_compare_d_s ;íåò â êîíöå íàøåé ñåêöèè çàâåðøàþùåãî ñèìâîëà :(
jnz .not_compare_d_s ;нет в конце нашей секции завершающего символа :(
 
 
 
243,7 → 243,7
jmp .start_d
 
.correct_exit:
pop cx ;âîññòàíîâèì çíà÷åíèå ñ÷åò÷èêà
pop cx ;восстановим значение счетчика
pop di
 
 
272,7 → 272,7
test status_flag, flag_found_timeout
jz .correct_is_not_set_t
 
mov si, found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì
mov si, found_equal_timeout ;мы нашли что флаг уже установлен, информируем
call printplain
jmp .get_next_str
 
288,7 → 288,7
inc cx
dec di
;get timeout value
;2 çíàêa ìîæåò áûòü îáðàáîòàíî ò.å. çíà÷åíèå îò 0 äî 99 ñåêóíä
;2 знакa может быть обработано т.е. значение от 0 до 99 секунд
push cx
xor bx, bx
mov cx, 2