Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3538 → Rev 3539

/kernel/trunk/sec_loader/trunk/parse_any.inc
24,7 → 24,7
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
 
;òóò ðàñïîëîãàåòñÿ ìîäóëü ñ ïîìîùüþ êîòîðîãî áóäóò ïàðñèòüñÿ âñå îñòàëüíûå ñåêöèè
;тут распологается модуль с помощью которого будут парситься все остальные секции
color_sym_black equ 0
color_sym_blue equ 1
color_sym_green equ 2
40,12 → 40,12
 
macro use_any_sec
{
;óçíàåì ðàáîòó ïðåäûäóùåãî øàãà ò.å. ÷åìó = timeout, åñëè îí 0, òî âèçóàëüíàÿ ÷àñòü íå áóäåò îòîáðàæåíà íà äèñïëåå ñ âûáîðîì çàãðóçî÷íûõ ñåêöèé.
;èíà÷å ìû åå äîëæíû îòîáðàçèòü è æäàòü çàÿâëåíîå âðåìÿ äëÿ âûáîðà è êîíèãóðèðîâàíèÿ ïóêíêòîâ ñåêöèè îò ïîëüçîâàòåëÿ.
;узнаем работу предыдущего шага т.е. чему = timeout, если он 0, то визуальная часть не будет отображена на дисплее с выбором загрузочных секций.
;иначе мы ее должны отобразить и ждать заявленое время для выбора и конигурирования пукнктов секции от пользователя.
 
if DEBUG
pusha
mov ax, word [value_timeout];èäåò ïðîâåðêà íà íàëè÷åå çíà÷åíèÿ timeout, äëÿ áîëåå áûñòðîé ðàáîòû, ýòîò ïàðàìåòð äîëæåí áûòü óæå îáðàáîòàí,ò.å. â ýòîì ñëó÷àå ïðè åãî =0 áóäåò ñôîðìèðîâàí óêàçàòåëü òîëüêî íà äåôîëòíóþ ñåêöèþ, èíà÷å èíôîðìàöèÿ áóäåò ñîáðàíà ïî âñåì ñåêöèÿì è ñîñòàâëåíû óêàçàòåëè â áëîêå ïàìÿòè
mov ax, word [value_timeout];идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти
; mov ax,cx
mov cx, 0x0a
mov di, show_db1
62,7 → 62,7
test ax, ax
jz .parse_run_only
 
;îòîáðàçèì ïîëíûé ñïèñîê âñåõ íàéäåíûõ ñåêöèé.
;отобразим полный список всех найденых секций.
if DEBUG
pusha
mov si, show_all_sect
70,7 → 70,7
popa
end if
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al, 0xf6 ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå
mov al, 0xf6 ; Сброс клавиатуры, разрешить сканирование
out 0x60, al
xor cx, cx
.wait_loop: ; variant 2
102,7 → 102,7
mov dword [start_timer], eax
mov word [timer_], newtimer
mov word [timer_+2], cs
;óñòàíîâèòü ñâîå ïðåðûâàíèå íà òàéìåð ò.å. êîä áóäåò ïåððûâàòüñÿ ~18 ðàç â ñåê è ïåðåõîäèòü íà îáðàáîò÷èê
;установить свое прерывание на таймер т.е. код будет перрываться ~18 раз в сек и переходить на обработчик
cli
push 0
pop es
112,7 → 112,7
pop dword [es:8*4]
sti
 
;ïðîöåäóðà ôîðìèðîâàíèÿ áóôåðà äëÿ ñêðîëèíãà ñåêöèé
;процедура формирования буфера для скролинга секций
;if DEBUG
; pusha
; mov ax,point_default
130,20 → 130,20
; int 0x16
; popa
;end if
;;;;;;;;;;;;;ðàçìåð ïðåäûäóùåé ñåöèè óñòàíîâèì =0
;;;;;;;;;;;;;размер предыдущей сеции установим =0
mov save_descript_size, 18
;îòîáðàçèòü black screen
;отобразить black screen
show_bl_sc ;es=0xb800
.show_all_scr:
get_frame_buffer ;es=0x2000
;îòîáðàæåíèå ñåêöèé
;отображение секций
call show_bl_sc_sect ;es=0xb800
;îòîáðàçèòü àêòèâíûé êóðñîð
;отобразить активный курсор
.show_active_cursor:
show_act_cursor
show_descript ;ìàêðîñ ïî îòîáðàæåíèþ îïèñàíèÿ ñåêöèè
show_descript ;макрос по отображению описания секции
 
;îòîáðàçèòü Press any key ....
;отобразить Press any key ....
mov eax, dword [old_timer]
cmp eax, dword [timer_]
jz .interrupt_16
151,7 → 151,7
show_timer_message
mov word [start_stack], sp
.interrupt_16:
xor ax, ax ;ïîëó÷èì èíôîðìàöèþ î òîì ÷òî íàæàòî
xor ax, ax ;получим информацию о том что нажато
int 0x16
;check on change
mov ebx, dword [old_timer]
161,7 → 161,7
cli
push 0
pop es
; mov eax,dword [old_timer] ; âîññòàíîâèì ïðåæäíåå ïðåðûâàíèå
; mov eax,dword [old_timer] ; восстановим прежднее прерывание
mov [es:8*4], ebx
mov dword [timer_], ebx
sti
172,7 → 172,7
@@:
call clean_active_cursor ;clean old cursor ;es=0xb800
 
cmp ah, 0x48 ;ðåàêöèÿ ñèñòåìû íà ñîáûòèÿ
cmp ah, 0x48 ;реакция системы на события
jz .up
cmp ah, 0x50
jz .down
188,9 → 188,9
cmp al, 0xD
jnz .show_active_cursor
 
jmp .end_show_all ;ïàðñèíã ñåêöèè êîòîðàÿ óêàçàíà â point_default
jmp .end_show_all ;парсинг секции которая указана в point_default
.up:
mov si, point_to_point_def ;çíà÷åíèå óêàçàòåëÿ
mov si, point_to_point_def ;значение указателя
add si, 2
lea ax, point_to_hframe
 
208,8 → 208,8
 
 
.down:
mov si, point_to_point_def ;çíà÷åíèå óêàçàòåëÿ
mov ax, point_to_eframe ;óêàçàòåëü íà ïîñëåäíèé ýëåìåíò
mov si, point_to_point_def ;значение указателя
mov ax, point_to_eframe ;указатель на последний элемент
sub si, 2
cmp si, ax
jb @f
255,7 → 255,7
 
 
 
; òóò ìû áóäåì ïàðñèòü òîëüêî äåôîëòíóþ ñåêöèþ è âûïîëíÿòü åå íè÷åãî íå ïðåäëàãàÿ ïîëüçîâàòåëþ èç äèàëîãîâ.
; тут мы будем парсить только дефолтную секцию и выполнять ее ничего не предлагая пользователю из диалогов.
.parse_run_only:
if DEBUG
pusha
286,7 → 286,7
macro show_bl_sc
{
;;;;;;;;;;;;;;;
;î÷èñòèì ýêðàí è âûâåäåì ìåíþ
;очистим экран и выведем меню
; draw frames
xor ax, ax
if DEBUG
324,7 → 324,7
;;;;;;;;;;;;;;;;;;;;;;; show '__________________________'
mov di, 480
mov ah, color_sym_yellow
mov al, 'Ä'
mov al, 'Д'
mov cx, 61
rep stosw
;;;;;;;;;;;;;;;;;;;;;;; show 'Select section'
418,7 → 418,7
mov si, di ;point frame
mov bx, cx
mov dx, size_show_section
; mov point_to_hframe,di ; âíåñåì çíà÷åíèå, òàê ïîäñòðàõîâêà íå áîëåå
; mov point_to_hframe,di ; внесем значение, так подстраховка не более
 
mov al, byte [es:di]
push word .first_ret_bl_sc
443,14 → 443,14
 
.start_bl:
call get_firs_sym ;get first symbol on new line
.first_ret_bl_sc: ;ïåðâûé âîçâðàò
.first_ret_bl_sc: ;первый возврат
test cx, cx
jz error.correct_exit_bl ;critical error not found default point it's not possible because it's param chacking before
.analisist_al:
cmp al, '['
jnz .start_bl
;ïðîñìàòðèâàåì ini ôàéë ñ íà÷àëà â ïîèñêàõ ñåêöèè óêàçàíîé êàê default
;ïîèñê ôðåéìà â êîòîðîì ñîäåðæèòüñÿ çíà÷åíèå default
;просматриваем ini файл с начала в поисках секции указаной как default
;поиск фрейма в котором содержиться значение default
.found_sect_bl:
cmp di, point_loader
jz .start_bl
464,12 → 464,12
 
 
.save_point_def:
;èòàê äàëåå ìû äîëæíû çàïîëíèòü frame áóôåð àäðåñîâ ñåêöèé, ÷òî áû ïîòîì ïî íåìó áûñòðî ïåðåìåùàòüñÿ íå âû÷èñëÿÿ ñíîâà àäðåñà
mov di, si ;óêàçàòåëü íà íà÷àëî
;итак далее мы должны заполнить frame буфер адресов секций, что бы потом по нему быстро перемещаться не вычисляя снова адреса
mov di, si ;указатель на начало
mov cx, bx
lea si, point_to_hframe
mov dx, size_show_section+1 ;ò.ê. ó íàñ ñòðóêòóðà ñîäåðæèò ðàçìåð ìåæäó ïåðâûì è âòîðûì óêàçàòåëåì, òî íàì íóæíî íà 1 àäðåñ áîëüøå îáñ÷èòàòü ñåêöèé.
;ïåðåõîäèì íà îáðàáîòêó çíà÷åíèÿ óêàçàòåëÿ
mov dx, size_show_section+1 ;т.к. у нас структура содержит размер между первым и вторым указателем, то нам нужно на 1 адрес больше обсчитать секций.
;переходим на обработку значения указателя
mov al, byte [es:di]
push word .first_ret_mfb
cmp al, ' '
480,7 → 480,7
 
.start_mfb:
call get_firs_sym ;get first symbol on new line
.first_ret_mfb: ;ïåðâûé âîçâðàò
.first_ret_mfb: ;первый возврат
jcxz .val_buff_comp ;.end_loader ;found or not found parametrs in section exit in section
cmp al, '['
jnz .start_mfb
509,7 → 509,7
 
macro show_act_cursor
{
;îòîáðàæåíèå êóðñîðà ïî óìîë÷àíèþ
;отображение курсора по умолчанию
lea si, point_to_hframe
mov di, 962-160
mov ax, point_default
554,7 → 554,7
}
 
macro show_descript
;Ýòîò ìàêðîñ ïîêàçûâàåò êðàòêîå îïèñàíèå, åñëè îíî åñòü ó ñåêöèè â ïóíêòå
;Этот макрос показывает краткое описание, если оно есть у секции в пункте
;Section description
{
local .start_p_sh_d
568,14 → 568,14
mov si, point_to_point_def
pop es
sub si, 2
mov cx, [si] ;çàãðóçèì óêàçàòåëü íàñëåäóþùèþ ñåêöèþ
sub cx, di ;âîò òåïåðü èìååì èñòèíûé ðàçìåð
;di - óêàçàòåëü íà äåôîëòíóþ ñåêöèþ ò.å. âûáðàííóþ cx - ðàçìåð îáëàñòè. äëÿ ïðîñìîòðà
mov cx, [si] ;загрузим указатель наследующию секцию
sub cx, di ;вот теперь имеем истиный размер
;di - указатель на дефолтную секцию т.е. выбранную cx - размер области. для просмотра
 
.start_p_sh_d:
call get_firs_sym ;get first symbol on new line
test cx, cx
jz .exit ;íåòó? íó ëàäíî - ñëåäóþùåå çíà÷åíèå òîãäà )
jz .exit ;нету? ну ладно - следующее значение тогда )
cmp al, 'd'
jnz .start_p_sh_d
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
591,7 → 591,7
sub bx, parse_descript_e - parse_descript;correct cx
add bx, cx
mov cx, bx
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ðàçáîð àëÿ ' = '
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; разбор аля ' = '
mov ax, 0x3d20 ;cut al=' ' ah='='
repe scasb
jcxz .rest_value_loop_sh_d ;not found param timeout
602,10 → 602,10
repe scasb ;cut ' '
inc cx
dec di
;;;;;;;;;;;;;;;;;;;;di óêàçûâàåò íà ñòðî÷êó, êîòîðóþ íàì íóæíî âûâîäèòü.
;ñòðî÷êà áóäåò âûâîäèòüñÿ áëîêàìè ïî 37 ñèìâîëîâ.
;íàñòðîèì êóäà áóäåì âûâîäèòü ò.å. íà÷àëî
;es:di - óêàçûâàþò íà ñòðî÷êó èç êîòîðîé ìû áåðåì ñèìâîë, ds:si êóäà áóäåì âûâîäèòü
;;;;;;;;;;;;;;;;;;;;di указывает на строчку, которую нам нужно выводить.
;строчка будет выводиться блоками по 37 символов.
;настроим куда будем выводить т.е. начало
;es:di - указывают на строчку из которой мы берем символ, ds:si куда будем выводить
push di
pop si