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 |