forked from KolibriOS/kolibrios
Rustem Gimadutdinov (rgimad)
73864ff1d7
git-svn-id: svn://kolibrios.org@9019 a494cfbc-eb01-0410-851d-a64ba20cac60
119 lines
4.8 KiB
HTML
119 lines
4.8 KiB
HTML
; Copyright (c) 2009, <Lrz>
|
||
; All rights reserved.
|
||
;
|
||
; Redistribution and use in source and binary forms, with or without
|
||
; modification, are permitted provided that the following conditions are met:
|
||
; * Redistributions of source code must retain the above copyright
|
||
; notice, this list of conditions and the following disclaimer.
|
||
; * Redistributions in binary form must reproduce the above copyright
|
||
; notice, this list of conditions and the following disclaimer in the
|
||
; documentation and/or other materials provided with the distribution.
|
||
; * Neither the name of the <organization> nor the
|
||
; names of its contributors may be used to endorse or promote products
|
||
; derived from this software without specific prior written permission.
|
||
;
|
||
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov nickname <Lrz> ''AS IS'' AND ANY
|
||
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
|
||
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
;*****************************************************************************
|
||
|
||
; Модуль парсинга - это стандартный компонент, встраиваемый во вторичный загрузчик.
|
||
; Данный модуль позволяет стандартно произвести разбор ini файла
|
||
; (и с использованием полученных данных ОС будет загружаться дальше).
|
||
; В начале найдем открывающий "[" - это будет указывать на начало
|
||
; секции. Поддерживается 1 секция это [loader], остальные секции могут иметь
|
||
; любые имена, но они должны быть заключены в в скобки []
|
||
macro use_parse
|
||
{
|
||
;input cx=size of ini file
|
||
parse_start:
|
||
;es:di as 2000:0000 new segment
|
||
;установим указатель на загруженный блок
|
||
enter 256, 0 ;set 16 byte for current task in stack
|
||
;we are is not use bp because bp is pointer on array 16 byte
|
||
mov word [save_bp_from_timer], bp ;save point to own data array
|
||
mov save_cx, cx ;it's placed size of ini file
|
||
les di, dword [file_data]
|
||
;обнулим все переменные выделенные из стека
|
||
;init flag
|
||
xor ax, ax
|
||
mov status_flag, ax
|
||
;set data size
|
||
mov info_real_mode_size, ini_data_ +0x1000 ;изменим значение занятости памяти
|
||
|
||
;поиск начала блока.
|
||
;///////////check [loader]
|
||
cld
|
||
|
||
mov ret_on_ch, .start ;set return
|
||
mov al, byte [es:di]
|
||
push word .first_ret
|
||
cmp al, ' '
|
||
jz .first_sp_1
|
||
jmp get_firs_sym.not_space
|
||
.first_sp_1:
|
||
jmp get_firs_sym.first_sp
|
||
|
||
.start:
|
||
call get_firs_sym ;get first symbol on new line
|
||
.first_ret: ;первый возврат
|
||
; jcxz .end_file ;.end_loader ;found or not found parametrs in section exit in section
|
||
test cx, cx
|
||
jz error.not_loader
|
||
cmp al, '['
|
||
jz .parse_loader
|
||
jmp .start
|
||
;////// проверка на наличее секции loader
|
||
use_parse_loader
|
||
;pause
|
||
if DEBUG
|
||
xor ax, ax
|
||
int 16h
|
||
end if
|
||
;////// вывод графического экрана, выбор, секции под дефолту
|
||
use_any_sec
|
||
;парсинг выбраной или дефолтной секции т.е. разбор параметров выполнение сценария
|
||
use_parse_def_sect
|
||
|
||
;//////////////////
|
||
;/end parse block
|
||
;//////////////////
|
||
;.end_bl:
|
||
; mov cx,bx
|
||
;
|
||
; jmp .start
|
||
|
||
.exit:
|
||
|
||
; mov si,parse_ini_end
|
||
; call printplain
|
||
;
|
||
;if DEBUG
|
||
; pusha
|
||
; mov ax,cx
|
||
; mov cx,0x0a
|
||
; mov di,show_db1_dec
|
||
; mov dword[ds:di],' '
|
||
; call decode
|
||
;Show size
|
||
; mov si,show_db1
|
||
; call printplain
|
||
;
|
||
; popa
|
||
;end if
|
||
jmp $
|
||
|
||
;///////////////////procedure //////////
|
||
;input es:di - is pointer to date
|
||
;cx - counter
|
||
;return: cx - status if =0 - end of date else es:di point to first symbol on new line
|
||
|
||
}
|