Subversion Repositories Kolibri OS

Rev

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
@@: