Rev 2288 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2288 | Rev 3539 | ||
---|---|---|---|
Line 22... | Line 22... | ||
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
22 | ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
23 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 | ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
25 | ;***************************************************************************** |
25 | ;***************************************************************************** |
Line 26... | Line 26... | ||
26 | 26 | ||
27 | ;áëîê ìàêðîñîâ ïî îáðàáîòêå ñåêöèè [loader] |
27 | ;блок макросов по обработке секции [loader] |
28 | ;âõîäíûå äàííûå: |
28 | ;входные данные: |
29 | ;es:di - óêàçàòåëü íà ñåêöèþ íà÷èíàþùèþñÿ ñ '[' âñòå÷àþùèþñÿ ïîñëå 0õa |
29 | ;es:di - указатель на секцию начинающиюся с '[' встечающиюся после 0хa |
30 | ;cx - ñ÷åò÷èê êîë-âî áàéò äëÿ ïðîâåðêå â êàäðå |
30 | ;cx - счетчик кол-во байт для проверке в кадре |
31 | ; |
31 | ; |
32 | macro use_parse_loader |
32 | macro use_parse_loader |
33 | { |
33 | { |
34 | .parse_loader: |
34 | .parse_loader: |
35 | ;////////////////// |
35 | ;////////////////// |
36 | ;/ parse [loader] |
36 | ;/ parse [loader] |
37 | ;////////////////// |
37 | ;////////////////// |
38 | mov bx, cx ;cîõðàíèì â ðåãèñòðû çíà÷åíèÿ ñ÷åò÷èêà è óêàçàòåëÿ |
38 | mov bx, cx ;cохраним в регистры значения счетчика и указателя |
Line 39... | Line 39... | ||
39 | mov ax, di |
39 | mov ax, di |
40 | 40 | ||
41 | ; mov word [bp-4],.start ;is alredy set, see up |
41 | ; mov word [bp-4],.start ;is alredy set, see up |
42 | mov si, parse_loader |
42 | mov si, parse_loader |
43 | mov cx, parse_loader_e - parse_loader |
43 | mov cx, parse_loader_e - parse_loader |
Line 44... | Line 44... | ||
44 | repe cmpsb |
44 | repe cmpsb |
45 | jnz error.rest_value ;öåïî÷êà íå ñîâïàëà :( ïåðåéäåì äàëåå ò.å. áóäåì ñíîâà èñêàòü)) |
45 | jnz error.rest_value ;цепочка не совпала :( перейдем далее т.е. будем снова искать)) |
46 | 46 | ||
47 | ;ñîõðàíèì óêàçàòåëüíà loader, ÷òî áû ïîòîì áîëüøå åãî íå èñêàòü |
47 | ;сохраним указательна loader, что бы потом больше его не искать |
48 | mov point_loader, ax |
48 | mov point_loader, ax |
Line 61... | Line 61... | ||
61 | ;first found end section,let's found '[' -it's start next section |
61 | ;first found end section,let's found '[' -it's start next section |
62 | ;in previosly steep bx =cx we are not need save cx, save only di - point |
62 | ;in previosly steep bx =cx we are not need save cx, save only di - point |
63 | mov dx, di |
63 | mov dx, di |
64 | @@: |
64 | @@: |
65 | call get_firs_sym |
65 | call get_firs_sym |
66 | jcxz .loader_f_end ;.end_loader ; end äàæå åñëè ìû íå íàøëè ñåêöèþ ïðåäïîëîæèì ÷òî ñåêöèÿ [loader] ñòîèò â êîíöå |
66 | jcxz .loader_f_end ;.end_loader ; end даже если мы не нашли секцию предположим что секция [loader] стоит в конце |
67 | cmp al, '[' |
67 | cmp al, '[' |
68 | jnz @b |
68 | jnz @b |
Line 69... | Line 69... | ||
69 | 69 | ||
70 | .loader_f_end: |
70 | .loader_f_end: |
71 | sub bx, cx ;bx = n byte presend in section [loader] |
71 | sub bx, cx ;bx = n byte presend in section [loader] |
72 | mov di, dx ;restore di |
72 | mov di, dx ;restore di |
73 | ;////////////////parse parametrs in section [loader] |
73 | ;////////////////parse parametrs in section [loader] |
74 | ;//timeout=5 |
74 | ;//timeout=5 |
75 | ;//default=main |
75 | ;//default=main |
76 | ; mov di,dx ;set pointer on section [loader] i think it's not need |
76 | ; mov di,dx ;set pointer on section [loader] i think it's not need |
77 | mov cx, bx ;set counter for parsing section [loader] cx= êîë-âó ñèìâîëîâ â ñåêöèè [loader] |
77 | mov cx, bx ;set counter for parsing section [loader] cx= кол-ву символов в секции [loader] |
78 | mov ret_on_ch, .get_next_str; return point |
78 | mov ret_on_ch, .get_next_str; return point |
79 | ;;;;;;; parse timeout & default |
79 | ;;;;;;; parse timeout & default |
80 | .get_next_str: |
80 | .get_next_str: |
Line 81... | Line 81... | ||
81 | call get_firs_sym ;get first symbol on new line |
81 | call get_firs_sym ;get first symbol on new line |
82 | 82 | ||
83 | test cx, cx |
83 | test cx, cx |
84 | jz .end_loader |
84 | jz .end_loader |
85 | ; jcxz .end_loader ;çàâåðøåíèå ïàðñèíãà çíà÷åíèé timeout & default |
85 | ; jcxz .end_loader ;завершение парсинга значений timeout & default |
86 | cmp al, 't' |
86 | cmp al, 't' |
87 | jz .loader_timeout |
87 | jz .loader_timeout |
88 | cmp al, 'd' |
88 | cmp al, 'd' |
Line 94... | Line 94... | ||
94 | 94 | ||
95 | mov si, parse_l_default |
95 | mov si, parse_l_default |
96 | mov cx, parse_l_default_e - parse_l_default |
96 | mov cx, parse_l_default_e - parse_l_default |
Line 97... | Line 97... | ||
97 | repe cmpsb |
97 | repe cmpsb |
Line 98... | Line 98... | ||
98 | 98 | ||
99 | jnz error.rest_value ;is not compare öåïî÷êà íå ñîâïàëà |
99 | jnz error.rest_value ;is not compare цепочка не совпала |
100 | 100 | ||
Line 101... | Line 101... | ||
101 | sub bx, parse_l_default_e - parse_l_default;correct cx |
101 | sub bx, parse_l_default_e - parse_l_default;correct cx |
102 | add bx, cx |
102 | add bx, cx |
Line 103... | Line 103... | ||
103 | mov cx, bx |
103 | mov cx, bx |
104 | 104 | ||
105 | test status_flag, flag_found_default |
105 | test status_flag, flag_found_default |
Line 106... | Line 106... | ||
106 | jz .correct_is_not_set |
106 | jz .correct_is_not_set |
107 | 107 | ||
Line 119... | Line 119... | ||
119 | jnz .get_next_str |
119 | jnz .get_next_str |
Line 120... | Line 120... | ||
120 | 120 | ||
121 | repe scasb ;cut ' ' |
121 | repe scasb ;cut ' ' |
122 | inc cx |
122 | inc cx |
123 | dec di |
123 | dec di |
124 | ;ñåé÷àñ es:di óêàçûâàþò íà íàçâàíèå ñåêöèè, èìÿ ñåêöèè ïî äåôîëòó íå äîëæíî áûòü loader ò.å. èíà÷å âîçìîæíî çàöèêëèâàíèå |
124 | ;сейчас es:di указывают на название секции, имя секции по дефолту не должно быть loader т.е. иначе возможно зацикливание |
Line 125... | Line 125... | ||
125 | ;óñòàíîâèì óêàçàòåëü si íà ýòî çíà÷åíèå è ñíà÷àëà ïðîâåðèì |
125 | ;установим указатель si на это значение и сначала проверим |
126 | 126 | ||
127 | ;ïîëó÷åíèå äëèííû ñåêöèè |
127 | ;получение длинны секции |
128 | ; cx=bx ñîäåðæèò äëèííó îñòàòêà ñåêöèè |
128 | ; cx=bx содержит длинну остатка секции |
129 | ; di=ax óêàçàòåëü íà òåêóùèþ ñåêöèþ |
129 | ; di=ax указатель на текущию секцию |
Line 130... | Line 130... | ||
130 | mov bx, cx |
130 | mov bx, cx |
131 | mov dx, di |
131 | mov dx, di |
132 | 132 | ||
133 | @@: |
133 | @@: |
134 | mov al, byte [es:di] |
134 | mov al, byte [es:di] |
135 | inc di |
135 | inc di |
136 | dec cx |
136 | dec cx |
137 | test cx, cx |
137 | test cx, cx |
138 | jz error.error_get_size_d_sect ;ïåðåõîä íà îáðàáîòêó îøèáêè ïî íàõîæäåíèþ äëèíû äåôîëòíîé ñåêöèè |
138 | jz error.error_get_size_d_sect ;переход на обработку ошибки по нахождению длины дефолтной секции |
139 | cmp al, ' ' |
139 | cmp al, ' ' |
140 | jz @b |
140 | jz @b |
141 | cmp al, 0xd |
141 | cmp al, 0xd |
142 | jz .found_size_d_sect |
142 | jz .found_size_d_sect |
143 | cmp al, 0xa |
143 | cmp al, 0xa |
144 | jnz @b |
144 | jnz @b |
145 | .found_size_d_sect: |
145 | .found_size_d_sect: |
146 | ; |
146 | ; |
147 | inc cx ;correct cx |
147 | inc cx ;correct cx |
148 | mov ax, bx |
148 | mov ax, bx |
Line 149... | Line 149... | ||
149 | sub bx, cx ; â bx äëèíà ñåêöèè êîòîðàÿ îïðåäåëåíà ïî äåôîëòó |
149 | sub bx, cx ; в bx длина секции которая определена по дефолту |
150 | mov save_cx_d, bx |
150 | mov save_cx_d, bx |
151 | mov di, dx |
151 | mov di, dx |
152 | 152 | ||
153 | mov cx, bx ;set size default section |
153 | mov cx, bx ;set size default section |
154 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ïðîâåðêà íà =loader |
154 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;проверка на =loader |
Line 155... | Line 155... | ||
155 | ;save in reg point and ñ÷åò÷èê |
155 | ;save in reg point and счетчик |
156 | ;check on loader |
156 | ;check on loader |
157 | mov bx, ax |
157 | mov bx, ax |
158 | mov ax, dx |
158 | mov ax, dx |
Line 159... | Line 159... | ||
159 | 159 | ||
Line 160... | Line 160... | ||
160 | mov si, parse_loader |
160 | mov si, parse_loader |
161 | inc si ;set only loader and 6 char in counter |
161 | inc si ;set only loader and 6 char in counter |
162 | repe cmpsb |
162 | repe cmpsb |
Line 163... | Line 163... | ||
163 | jnz .check_section ;öåïî÷êà íå ñîâïàëà :( ïåðåéäåì äàëåå )) çíà÷èò íå èñêëþ÷åíèå |
163 | jnz .check_section ;цепочка не совпала :( перейдем далее )) значит не исключение |
164 | 164 | ||
165 | jmp error.default_eq_loader ;error êðèòè÷åñêàÿ îøèáêà ò.å. â äåôîëòå ïðèñóòñòâóåò èìÿ [loader] |
165 | jmp error.default_eq_loader ;error критическая ошибка т.е. в дефолте присутствует имя [loader] |
Line 166... | Line 166... | ||
166 | 166 | ||
Line 167... | Line 167... | ||
167 | .check_section: ;ïîèñê ñîîòâåòñòâóþùåé ñåêöèè íàì íóæíî áóäåò óçíàòü àäðåñ ýòîé ñåêöèè |
167 | .check_section: ;поиск соответствующей секции нам нужно будет узнать адрес этой секции |
168 | mov cx, bx |
168 | mov cx, bx |
169 | mov di, ax |
169 | mov di, ax |
170 | 170 | ||
Line 171... | Line 171... | ||
171 | ;///////////////////////////// |
171 | ;///////////////////////////// |
Line 188... | Line 188... | ||
188 | .first_sp_1_d: |
188 | .first_sp_1_d: |
189 | jmp get_firs_sym.first_sp |
189 | jmp get_firs_sym.first_sp |
Line 190... | Line 190... | ||
190 | 190 | ||
191 | .start_d: |
191 | .start_d: |
192 | call get_firs_sym ;get first symbol on new line |
192 | call get_firs_sym ;get first symbol on new line |
193 | .first_ret_d: ;ïåðâûé âîçâðàò |
193 | .first_ret_d: ;первый возврат |
194 | jcxz .correct_exit ;.end_loader ;found or not found parametrs in section exit in section |
194 | jcxz .correct_exit ;.end_loader ;found or not found parametrs in section exit in section |
195 | cmp al, '[' |
195 | cmp al, '[' |
196 | jz .found_sect_d |
196 | jz .found_sect_d |
197 | jmp .start_d |
197 | jmp .start_d |
198 | ;ïðîñìàòðèâàåì ini ôàéë ñ íà÷àëà â ïîèñêàõ ñåêöèè óêàçàíîé êàê default |
198 | ;просматриваем ini файл с начала в поисках секции указаной как default |
199 | ;èäåò ïðîâåðêà íà íàëè÷åå çíà÷åíèÿ timeout, äëÿ áîëåå áûñòðîé ðàáîòû, ýòîò ïàðàìåòð äîëæåí áûòü óæå îáðàáîòàí,ò.å. â ýòîì ñëó÷àå ïðè åãî =0 áóäåò ñôîðìèðîâàí óêàçàòåëü òîëüêî íà äåôîëòíóþ ñåêöèþ, èíà÷å èíôîðìàöèÿ áóäåò ñîáðàíà ïî âñåì ñåêöèÿì è ñîñòàâëåíû óêàçàòåëè â áëîêå ïàìÿòè |
199 | ;идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти |
Line 200... | Line 200... | ||
200 | .found_sect_d: |
200 | .found_sect_d: |
201 | 201 | ||
202 | ;check on name section |
202 | ;check on name section |
Line 213... | Line 213... | ||
213 | repe cmpsb |
213 | repe cmpsb |
214 | push cs |
214 | push cs |
215 | pop ds |
215 | pop ds |
216 | pop si |
216 | pop si |
Line 217... | Line 217... | ||
217 | 217 | ||
218 | jnz .not_compare_d_s ;öåïî÷êà íå ñîâïàëà :( ïåðåéäåì äàëåå )) çíà÷èò íå èñêëþ÷åíèå |
218 | jnz .not_compare_d_s ;цепочка не совпала :( перейдем далее )) значит не исключение |
219 | cmp byte[es:di], ']' |
219 | cmp byte[es:di], ']' |
Line 220... | Line 220... | ||
220 | jnz .not_compare_d_s ;íåò â êîíöå íàøåé ñåêöèè çàâåðøàþùåãî ñèìâîëà :( |
220 | jnz .not_compare_d_s ;нет в конце нашей секции завершающего символа :( |
221 | 221 | ||
Line 241... | Line 241... | ||
241 | mov cx, bx |
241 | mov cx, bx |
242 | mov di, ax |
242 | mov di, ax |
243 | jmp .start_d |
243 | jmp .start_d |
Line 244... | Line 244... | ||
244 | 244 | ||
245 | .correct_exit: |
245 | .correct_exit: |
246 | pop cx ;âîññòàíîâèì çíà÷åíèå ñ÷åò÷èêà |
246 | pop cx ;восстановим значение счетчика |
Line 247... | Line 247... | ||
247 | pop di |
247 | pop di |
248 | 248 | ||
Line 270... | Line 270... | ||
270 | mov cx, bx |
270 | mov cx, bx |
Line 271... | Line 271... | ||
271 | 271 | ||
272 | test status_flag, flag_found_timeout |
272 | test status_flag, flag_found_timeout |
Line 273... | Line 273... | ||
273 | jz .correct_is_not_set_t |
273 | jz .correct_is_not_set_t |
274 | 274 | ||
275 | mov si, found_equal_timeout ;ìû íàøëè ÷òî ôëàã óæå óñòàíîâëåí, èíôîðìèðóåì |
275 | mov si, found_equal_timeout ;мы нашли что флаг уже установлен, информируем |
Line 276... | Line 276... | ||
276 | call printplain |
276 | call printplain |
277 | jmp .get_next_str |
277 | jmp .get_next_str |
Line 286... | Line 286... | ||
286 | 286 | ||
287 | repe scasb ;cut ' ' |
287 | repe scasb ;cut ' ' |
288 | inc cx |
288 | inc cx |
289 | dec di |
289 | dec di |
290 | ;get timeout value |
290 | ;get timeout value |
291 | ;2 çíàêa ìîæåò áûòü îáðàáîòàíî ò.å. çíà÷åíèå îò 0 äî 99 ñåêóíä |
291 | ;2 знакa может быть обработано т.е. значение от 0 до 99 секунд |
292 | push cx |
292 | push cx |
293 | xor bx, bx |
293 | xor bx, bx |
294 | mov cx, 2 |
294 | mov cx, 2 |
295 | @@: |
295 | @@: |