Subversion Repositories Kolibri OS

Rev

Rev 2434 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1065 Lrz 1
; Copyright (c) 2009, 
2
; All rights reserved.
3
;
4
; Redistribution and use in source and binary forms, with or without
5
; modification, are permitted provided that the following conditions are met:
6
;       * Redistributions of source code must retain the above copyright
7
;       notice, this list of conditions and the following disclaimer.
8
;       * Redistributions in binary form must reproduce the above copyright
9
;       notice, this list of conditions and the following disclaimer in the
10
;       documentation and/or other materials provided with the distribution.
11
;       * Neither the name of the  nor the
12
;       names of its contributors may be used to endorse or promote products
13
;       derived from this software without specific prior written permission.
14
;
15
; THIS SOFTWARE IS PROVIDED BY Alexey Teplov aka  ''AS IS'' AND ANY
16
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
19
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
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
24
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
;*****************************************************************************
26
 
3555 Serge 27
;тут распологается модуль с помощью которого будут парситься все остальные секции
1151 Lrz 28
color_sym_black equ     0
29
color_sym_blue  equ     1
30
color_sym_green equ     2
1065 Lrz 31
color_sym_turquoise equ 3
1151 Lrz 32
color_sym_red   equ     4
1065 Lrz 33
 
34
color_sym_lightgray equ 7
35
 
1151 Lrz 36
color_sym_lightblue equ 9
1065 Lrz 37
color_sym_lettuce   equ 10
1151 Lrz 38
color_sym_pink  equ     12
39
color_sym_yellow equ    14
1065 Lrz 40
 
41
macro use_any_sec
42
{
3555 Serge 43
;узнаем работу предыдущего шага т.е. чему = timeout, если он 0, то визуальная часть не будет отображена на дисплее с выбором загрузочных секций.
44
;иначе мы ее должны отобразить и ждать заявленое время для выбора и конигурирования пукнктов секции от пользователя.
1065 Lrz 45
 
46
if DEBUG
47
        pusha
3555 Serge 48
        mov     ax, word [value_timeout];идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти
1065 Lrz 49
;        mov     ax,cx
2434 Serge 50
        mov     cx, 0x0a
51
        mov     di, show_db1
52
        mov     dword[ds:di], '    '
53
        mov     word [ds:di+4], '  '
1065 Lrz 54
        call    decode
55
;Show size
2434 Serge 56
        mov     si, show_db1
1065 Lrz 57
        call    printplain
58
;
59
        popa
60
end if
61
 
2434 Serge 62
        test    ax, ax
1151 Lrz 63
        jz      .parse_run_only
1065 Lrz 64
 
3555 Serge 65
;отобразим полный список всех найденых секций.
1065 Lrz 66
if DEBUG
1151 Lrz 67
        pusha
2434 Serge 68
        mov     si, show_all_sect
1151 Lrz 69
        call    printplain
70
        popa
1065 Lrz 71
end if
72
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3555 Serge 73
        mov     al, 0xf6        ; Сброс клавиатуры, разрешить сканирование
1065 Lrz 74
        out     0x60, al
75
        xor     cx, cx
76
.wait_loop:       ; variant 2
77
; reading state of port of 8042 controller
78
        in      al, 64h
79
        and     al, 00000010b  ; ready flag
80
; wait until 8042 controller is ready
81
        loopnz  .wait_loop
82
 
83
 
84
; set keyboard typematic rate & delay
85
        mov     al, 0xf3
86
        out     0x60, al
87
        xor     cx, cx
88
@@:
89
        in      al, 64h
90
        test    al, 2
91
        loopnz  @b
92
        mov     al, 0
93
        out     0x60, al
94
        xor     cx, cx
95
@@:
96
        in      al, 64h
97
        test    al, 2
98
        loopnz  @b
99
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
100
; get start time
101
        call    gettime
2434 Serge 102
        mov     dword [start_timer], eax
103
        mov     word [timer_], newtimer
104
        mov     word [timer_+2], cs
3555 Serge 105
;установить свое прерывание на таймер т.е. код будет перрываться ~18 раз в сек и переходить на обработчик
1065 Lrz 106
        cli
107
        push    0
108
        pop     es
109
        push    dword [es:8*4]
110
        pop     dword [old_timer]
111
        push    dword [timer_]
2434 Serge 112
        pop     dword [es:8*4]
1065 Lrz 113
        sti
114
 
3555 Serge 115
;процедура формирования буфера для скролинга секций
1065 Lrz 116
;if DEBUG
117
;        pusha
1151 Lrz 118
;       mov     ax,point_default
1065 Lrz 119
;        mov     ax,cx
120
;        mov     cx,0x0a
121
;        mov     di,show_db1
122
;        mov     dword[ds:di],'    '
1151 Lrz 123
;       mov     word [ds:di+4],'  '
1065 Lrz 124
;        call    decode
125
;Show size
126
;        mov     si,show_db1
127
;        call    printplain
128
;
1151 Lrz 129
;       xor     ax,ax
130
;       int     0x16
1065 Lrz 131
;        popa
132
;end if
3555 Serge 133
;;;;;;;;;;;;;размер предыдущей сеции установим =0
2434 Serge 134
        mov     save_descript_size, 18
3555 Serge 135
;отобразить black screen
1151 Lrz 136
show_bl_sc      ;es=0xb800
1065 Lrz 137
.show_all_scr:
138
get_frame_buffer  ;es=0x2000
3555 Serge 139
;отображение секций
1151 Lrz 140
        call    show_bl_sc_sect   ;es=0xb800
3555 Serge 141
;отобразить активный курсор
1065 Lrz 142
.show_active_cursor:
143
show_act_cursor
3555 Serge 144
show_descript   ;макрос по отображению описания секции
1065 Lrz 145
 
3555 Serge 146
;отобразить Press any key ....
2434 Serge 147
        mov     eax, dword [old_timer]
148
        cmp     eax, dword [timer_]
1151 Lrz 149
        jz      .interrupt_16
1065 Lrz 150
 
151
show_timer_message
2434 Serge 152
        mov     word [start_stack], sp
1065 Lrz 153
.interrupt_16:
3555 Serge 154
        xor     ax, ax  ;получим информацию о том что нажато
1151 Lrz 155
        int     0x16
1065 Lrz 156
;check on change
2434 Serge 157
        mov     ebx, dword [old_timer]
158
        cmp     ebx, dword [timer_]
1151 Lrz 159
        jz      @f
1065 Lrz 160
;restore timer interrupt
1151 Lrz 161
        cli
1065 Lrz 162
        push    0
163
        pop     es
3555 Serge 164
;        mov     eax,dword [old_timer]  ; восстановим прежднее прерывание
2434 Serge 165
        mov     [es:8*4], ebx
166
        mov     dword [timer_], ebx
1151 Lrz 167
        sti
168
 
2434 Serge 169
        push    ax
1065 Lrz 170
clear_timer_msg
1151 Lrz 171
        pop     ax
1065 Lrz 172
@@:
1151 Lrz 173
        call    clean_active_cursor   ;clean old cursor   ;es=0xb800
1065 Lrz 174
 
3555 Serge 175
        cmp     ah, 0x48 ;реакция системы на события
1151 Lrz 176
        jz      .up
2434 Serge 177
        cmp     ah, 0x50
1151 Lrz 178
        jz      .down
2434 Serge 179
        cmp     ah, 0x49
1151 Lrz 180
        jz      .pgup
2434 Serge 181
        cmp     ah, 0x51
1151 Lrz 182
        jz      .pgdown
2434 Serge 183
        cmp     ah, 0x47
1151 Lrz 184
        jz      .home
2434 Serge 185
        cmp     ah, 0x4f
1151 Lrz 186
        jz      .end
1065 Lrz 187
 
2434 Serge 188
        cmp     al, 0xD
1151 Lrz 189
        jnz     .show_active_cursor
1065 Lrz 190
 
3555 Serge 191
        jmp     .end_show_all           ;парсинг секции которая указана в point_default
1065 Lrz 192
.up:
3555 Serge 193
        mov     si, point_to_point_def  ;значение указателя
2434 Serge 194
        add     si, 2
195
        lea     ax, point_to_hframe
1065 Lrz 196
 
2434 Serge 197
        cmp     si, ax
1151 Lrz 198
        ja      @f
1065 Lrz 199
 
2434 Serge 200
        mov     point_to_point_def, si
201
        mov     ax, [si]
202
        mov     point_default, ax
1151 Lrz 203
        jmp     .show_active_cursor
1065 Lrz 204
@@:
1151 Lrz 205
        call    find_before_sect
206
        jmp     .show_all_scr
1065 Lrz 207
 
208
 
209
 
210
.down:
3555 Serge 211
        mov     si, point_to_point_def  ;значение указателя
212
        mov     ax, point_to_eframe     ;указатель на последний элемент
2434 Serge 213
        sub     si, 2
214
        cmp     si, ax
1151 Lrz 215
        jb      @f
1065 Lrz 216
 
2434 Serge 217
        mov     point_to_point_def, si
218
        mov     ax, [si]
219
        mov     point_default, ax
1151 Lrz 220
        jmp     .show_active_cursor
1065 Lrz 221
 
2434 Serge 222
@@:
223
        call    find_next_sect
1151 Lrz 224
        jmp     .show_all_scr
1065 Lrz 225
 
226
.pgup:
2434 Serge 227
        mov     cx, size_show_section
1065 Lrz 228
@@:
1151 Lrz 229
        push    cx
230
        call    find_before_sect
231
        pop     cx
232
        loop    @b
233
        jmp     .show_all_scr
1065 Lrz 234
 
235
 
236
.pgdown:
2434 Serge 237
        mov     cx, size_show_section
1065 Lrz 238
@@:
1151 Lrz 239
        push    cx
240
        call    find_next_sect
241
        pop     cx
242
        loop    @b
243
        jmp     .show_all_scr
1065 Lrz 244
 
245
.home:
2434 Serge 246
        xor     di, di
247
        call    find_next_sect.h
1151 Lrz 248
        jmp     .show_all_scr
1065 Lrz 249
 
250
.end:
2434 Serge 251
        mov     di, save_cx
1151 Lrz 252
        call    find_before_sect.e
253
        jmp     .show_all_scr
1065 Lrz 254
 
255
 
256
 
257
 
3555 Serge 258
; тут мы будем парсить только дефолтную секцию и выполнять ее ничего не предлагая пользователю из диалогов.
1065 Lrz 259
.parse_run_only:
260
if DEBUG
1151 Lrz 261
        pusha
2434 Serge 262
        mov     si, no_show_only_w
1151 Lrz 263
        call    printplain
264
        popa
1065 Lrz 265
end if
266
 
267
 
268
.end_show_all:
269
}
270
 
271
 
272
 
273
 
274
 
275
 
276
 
277
 
278
 
279
 
280
 
281
 
282
 
283
 
284
 
285
;show black screen SL
286
macro show_bl_sc
287
{
288
;;;;;;;;;;;;;;;
3555 Serge 289
;очистим экран и выведем меню
1065 Lrz 290
; draw frames
2434 Serge 291
        xor     ax, ax
1065 Lrz 292
if DEBUG
2434 Serge 293
        mov     ax, 0x0720
1065 Lrz 294
end if
295
        push    0xb800
296
        pop     es
297
        xor     di, di
298
; draw top
299
        mov     cx, 25 * 80
2434 Serge 300
        rep stosw
1065 Lrz 301
;;;;;;;;;;;;;;;;;;;;;;; show 'Secondary Loader v0.xxx'
2434 Serge 302
        mov     di, 164
303
        mov     si, version
304
        mov     cx, version_end-version
305
        mov     ah, color_sym_yellow
1065 Lrz 306
@@:
1151 Lrz 307
        lodsb
308
        stosw
2434 Serge 309
        loop    @b
1065 Lrz 310
;;;;;;;;;;;;;;;;;;;;;;; show firm ))
2434 Serge 311
        mov     di, (2*160-(2*(soft_mes_end-soft_mes+4)))       ;286
312
        mov     ah, color_sym_pink;color_sym_red
313
        mov     al, 'K'
1151 Lrz 314
        stosw
2434 Serge 315
        mov     al, ' '
1151 Lrz 316
        stosw
2434 Serge 317
        mov     ah, color_sym_lightgray;color_sym_lightblue;color_sym_pink
318
        mov     si, soft_mes
319
        mov     cx, soft_mes_end- soft_mes
1065 Lrz 320
@@:
1151 Lrz 321
        lodsb
322
        stosw
2434 Serge 323
        loop    @b
1065 Lrz 324
;;;;;;;;;;;;;;;;;;;;;;; show '__________________________'
2434 Serge 325
        mov     di, 480
326
        mov     ah, color_sym_yellow
3555 Serge 327
        mov     al, 0xC4 ; '─'
2434 Serge 328
        mov     cx, 61
329
        rep stosw
1065 Lrz 330
;;;;;;;;;;;;;;;;;;;;;;; show 'Select section'
2434 Serge 331
        mov     di, 804
332
        mov     si, select_section
333
        mov     cx, select_section_end - select_section
334
        mov     ah, color_sym_lightgray
1065 Lrz 335
@@:
1151 Lrz 336
        lodsb
337
        stosw
2434 Serge 338
        loop    @b
1065 Lrz 339
;;;;;;;;;;;;;;;;;;;;;;; show 'Section description'
2434 Serge 340
        mov     di, 880
341
        mov     si, section_description
342
        mov     cx, section_description_end - section_description
1151 Lrz 343
;       mov     ah,color_sym_lightgray
1065 Lrz 344
@@:
1151 Lrz 345
        lodsb
346
        stosw
2434 Serge 347
        loop    @b
1065 Lrz 348
 
349
}
350
 
351
macro show_timer_message
352
{
353
;;;;;;;;;;;;;;;;;;;;; show Press any key
354
;;;;;;;;;;;;;;;;;;;;; show ramk
355
 
2434 Serge 356
        xor     ax, ax
357
        mov     di, 3360
358
        mov     cx, 80*4
359
        rep stosw
1065 Lrz 360
 
2434 Serge 361
        mov     di, 3362
362
        mov     ah, color_sym_pink
363
        mov     al, 0xDA
1151 Lrz 364
        stosw
2434 Serge 365
        mov     al, 0xc4
366
        mov     cx, 76
367
        rep stosw
368
        mov     al, 0xBF
1151 Lrz 369
        stosw
2434 Serge 370
        add     di, 4
371
        mov     al, 0xb3
1151 Lrz 372
        stosw
2434 Serge 373
        add     di, 152
1151 Lrz 374
        stosw
2434 Serge 375
        add     di, 4
1151 Lrz 376
        stosw
2434 Serge 377
        add     di, 152
1151 Lrz 378
        stosw
2434 Serge 379
        add     di, 4
380
        mov     al, 0xc0
1151 Lrz 381
        stosw
2434 Serge 382
        mov     al, 0xc4
383
        mov     cx, 76
384
        rep stosw
385
        mov     al, 0xd9
1151 Lrz 386
        stosw
1065 Lrz 387
;;;;;;;;;;;;;;;;;;;;;;;;ramk is complete show
388
;show first message
2434 Serge 389
        mov     si, start_msg
390
        mov     cx, start_msg_e-start_msg
391
        mov     di, 3526
1065 Lrz 392
@@:
1151 Lrz 393
        lodsb
394
        stosw
2434 Serge 395
        loop    @b
1065 Lrz 396
;;;;;;;;;;;;;;;;;;;; show press Enter to....
2434 Serge 397
        add     di, 44
398
        mov     si, time_msg
399
        mov     cx, time_msg_e-time_msg
1065 Lrz 400
@@:
1151 Lrz 401
        lodsb
402
        stosw
2434 Serge 403
        loop    @b
1065 Lrz 404
}
405
 
406
 
407
 
408
 
409
 
410
 
411
 
412
 
413
macro get_frame_buffer
414
{
2434 Serge 415
        mov     cx, save_cx     ;it's placed size of ini file
416
        les     di, dword [file_data]
1065 Lrz 417
 
2434 Serge 418
        mov     si, di  ;point frame
419
        mov     bx, cx
420
        mov     dx, size_show_section
3555 Serge 421
;       mov     point_to_hframe,di      ; внесем значение, так подстраховка не более
1065 Lrz 422
 
2434 Serge 423
        mov     al, byte [es:di]
1151 Lrz 424
        push    word .first_ret_bl_sc
2434 Serge 425
        cmp     al, ' '
1151 Lrz 426
        jz      .first_bl_sc
427
        jmp     get_firs_sym.not_space
1065 Lrz 428
.first_bl_sc:
1151 Lrz 429
        jmp     get_firs_sym.first_sp
1065 Lrz 430
 
431
.start_hbl:
1151 Lrz 432
        call    get_firs_sym    ;get first symbol on new line
2434 Serge 433
        test    cx, cx
1151 Lrz 434
        jz      error.correct_exit_bl   ;critical error not found default point it's not possible because it's param chacking before
2434 Serge 435
        cmp     al, '['
1151 Lrz 436
        jnz     .start_hbl
1065 Lrz 437
 
2434 Serge 438
        mov     si, di   ;point frame
439
        mov     bx, cx
440
        mov     dx, size_show_section
1151 Lrz 441
        jmp     .analisist_al
1065 Lrz 442
 
443
 
444
.start_bl:
1151 Lrz 445
        call    get_firs_sym    ;get first symbol on new line
3555 Serge 446
.first_ret_bl_sc:                     ;первый возврат
2434 Serge 447
        test    cx, cx
1151 Lrz 448
        jz      error.correct_exit_bl   ;critical error not found default point it's not possible because it's param chacking before
1065 Lrz 449
.analisist_al:
2434 Serge 450
        cmp     al, '['
1151 Lrz 451
        jnz     .start_bl
3555 Serge 452
;просматриваем ini файл с начала в поисках секции указаной как default
453
;поиск фрейма в котором содержиться значение default
1065 Lrz 454
.found_sect_bl:
2434 Serge 455
        cmp     di, point_loader
1151 Lrz 456
        jz      .start_bl
2434 Serge 457
        cmp     di, point_default
1151 Lrz 458
        jz      .save_point_def
1065 Lrz 459
 
1151 Lrz 460
        dec     dx
461
        jnz     .start_bl
1065 Lrz 462
 
1151 Lrz 463
        jmp     .start_hbl
1065 Lrz 464
 
465
 
466
.save_point_def:
3555 Serge 467
;итак далее мы должны заполнить frame буфер адресов секций, что бы потом по нему быстро перемещаться не вычисляя снова адреса
468
        mov     di, si  ;указатель на начало
2434 Serge 469
        mov     cx, bx
470
        lea     si, point_to_hframe
3555 Serge 471
        mov     dx, size_show_section+1  ;т.к. у нас структура содержит размер между первым и вторым указателем, то нам нужно на 1 адрес больше обсчитать секций.
472
;переходим на обработку значения указателя
2434 Serge 473
        mov     al, byte [es:di]
1151 Lrz 474
        push    word .first_ret_mfb
2434 Serge 475
        cmp     al, ' '
1151 Lrz 476
        jz      .first_bl_mbf
477
        jmp     get_firs_sym.not_space
1065 Lrz 478
.first_bl_mbf:
1151 Lrz 479
        jmp     get_firs_sym.first_sp
1065 Lrz 480
 
481
.start_mfb:
1151 Lrz 482
        call    get_firs_sym    ;get first symbol on new line
3555 Serge 483
.first_ret_mfb:                     ;первый возврат
1151 Lrz 484
        jcxz    .val_buff_comp  ;.end_loader     ;found or not found parametrs in section  exit in section
2434 Serge 485
        cmp     al, '['
1151 Lrz 486
        jnz     .start_mfb
1065 Lrz 487
 
488
.found_sect_mfb:
2434 Serge 489
        cmp     di, point_loader    ;if we have section loader
1151 Lrz 490
        jz      .start_mfb
1065 Lrz 491
 
2434 Serge 492
        mov     [si], di
1065 Lrz 493
 
2434 Serge 494
        sub     si, 2
1151 Lrz 495
        dec     dx
496
        jnz     .start_mfb
1065 Lrz 497
;bufer is full
1151 Lrz 498
        jmp     @f
1065 Lrz 499
.val_buff_comp:
1151 Lrz 500
        push    save_cx
501
        pop     word [si]
2434 Serge 502
        sub     si, 2
1065 Lrz 503
@@:
504
 
2434 Serge 505
        add     si, 4
506
        mov     point_to_eframe, si
1065 Lrz 507
 
508
}
509
 
510
macro show_act_cursor
511
{
3555 Serge 512
;отображение курсора по умолчанию
2434 Serge 513
        lea     si, point_to_hframe
514
        mov     di, 962-160
515
        mov     ax, point_default
516
        mov     cx, size_show_section
1065 Lrz 517
.home_show_cur:
2434 Serge 518
        mov     bx, [si]
519
        add     di, 160
520
        cmp     bx, ax
1151 Lrz 521
        jz      .show_cursor_activ
2434 Serge 522
        sub     si, 2
1151 Lrz 523
        loop    .home_show_cur
1065 Lrz 524
 
525
.show_cursor_activ:
1151 Lrz 526
;        push   0xb800
527
;       pop     es
2434 Serge 528
        mov     point_to_point_def, si
529
        mov     ax, (color_sym_red*0x100+0x10)
1151 Lrz 530
        stosw
2434 Serge 531
        add     di, 68
1151 Lrz 532
        inc     ax
533
        stosw
1065 Lrz 534
}
535
 
536
macro clear_timer_msg
537
{
1151 Lrz 538
        push    0xb800
539
        pop     es
2434 Serge 540
        xor     ax, ax
1065 Lrz 541
if DEBUG
2434 Serge 542
        mov     ax, 0x0720
1065 Lrz 543
end if
544
;;;;;;;;;;;;;;;;;;;;; show Press any key
2434 Serge 545
        mov     di, 3360
546
        mov     cx, 80*4
547
        rep stosw
1065 Lrz 548
 
549
;show sect
1151 Lrz 550
        push    ini_data_
551
        pop     es
552
        call    show_bl_sc_sect ;es=0xb800
1065 Lrz 553
 
554
}
555
 
556
macro show_descript
3555 Serge 557
;Этот макрос показывает краткое описание, если оно есть у секции в пункте
1065 Lrz 558
;Section description
559
{
560
local .start_p_sh_d
561
local .exit
562
local .rest_value_loop_sh_d
563
local .end_sh_desc_sec
564
local .loop_message
565
local .show_mess_prev_eq
2434 Serge 566
        mov     di, point_default
1151 Lrz 567
        push    ini_data_
2434 Serge 568
        mov     si, point_to_point_def
1151 Lrz 569
        pop     es
2434 Serge 570
        sub     si, 2
3555 Serge 571
        mov     cx, [si]        ;загрузим указатель наследующию секцию
572
        sub     cx, di          ;вот теперь имеем истиный размер
573
;di - указатель на дефолтную секцию т.е. выбранную cx - размер области. для просмотра
1065 Lrz 574
 
575
.start_p_sh_d:
1151 Lrz 576
        call    get_firs_sym    ;get first symbol on new line
2434 Serge 577
        test    cx, cx
3555 Serge 578
        jz      .exit   ;нету? ну ладно - следующее значение тогда )
2434 Serge 579
        cmp     al, 'd'
1151 Lrz 580
        jnz     .start_p_sh_d
1065 Lrz 581
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
582
 
2434 Serge 583
        mov     bx, cx
584
        mov     ax, di
1065 Lrz 585
 
2434 Serge 586
        mov     si, parse_descript
587
        mov     cx, parse_descript_e - parse_descript
588
        repe cmpsb
1151 Lrz 589
        jnz     .rest_value_loop_sh_d      ;is not compare
1065 Lrz 590
 
2434 Serge 591
        sub     bx, parse_descript_e - parse_descript;correct cx
592
        add     bx, cx
593
        mov     cx, bx
3555 Serge 594
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; разбор аля ' = '
2434 Serge 595
        mov     ax, 0x3d20         ;cut al=' ' ah='='
596
        repe scasb
1151 Lrz 597
        jcxz    .rest_value_loop_sh_d          ;not found param timeout
1065 Lrz 598
 
2434 Serge 599
        cmp     ah, byte [es:di-1]   ;find '='
1151 Lrz 600
        jnz     .rest_value_loop_sh_d
601
 
2434 Serge 602
        repe scasb                 ;cut ' '
1151 Lrz 603
        inc     cx
604
        dec     di
3555 Serge 605
;;;;;;;;;;;;;;;;;;;;di указывает на строчку, которую нам нужно выводить.
606
;строчка будет выводиться блоками по 37 символов.
607
;настроим куда будем выводить т.е. начало
608
;es:di - указывают на строчку из которой мы берем символ, ds:si куда будем выводить
1151 Lrz 609
        push    di
610
        pop     si
1065 Lrz 611
 
1151 Lrz 612
        push    es
613
        pop     ds
1065 Lrz 614
 
1151 Lrz 615
        push    0xb800
616
        pop     es
617
 
2434 Serge 618
        mov     di, 1040
619
        mov     bx, 18
620
        mov     find_sec_di, di
621
        mov     save_cx_d, bx
1151 Lrz 622
;;;;;;;;;;;;;;;;;;;;;;;;;;
1065 Lrz 623
;clean string
624
 
1151 Lrz 625
        push    di
2434 Serge 626
        xor     ax, ax
1065 Lrz 627
 
2434 Serge 628
@@:
629
        mov     cx, 38
1151 Lrz 630
        push    di
2434 Serge 631
        rep stosw
1151 Lrz 632
        pop     di
1065 Lrz 633
 
2434 Serge 634
        cmp     save_descript_size, bx
1151 Lrz 635
        jz      @f
1065 Lrz 636
 
637
 
2434 Serge 638
        add     di, 160
1151 Lrz 639
        dec     bx
640
        jnz     @b
1065 Lrz 641
 
2434 Serge 642
@@:
643
        pop     di
1065 Lrz 644
;enter in mess
645
.show_mess_prev_eq:
1151 Lrz 646
        lodsb
2434 Serge 647
        mov     ah, color_sym_lettuce;color_sym_turquoise
1151 Lrz 648
;       sub     di,2
2434 Serge 649
        cmp     al, '"'
1151 Lrz 650
        jz      .loop_message
2434 Serge 651
        cmp     al, "'"
1151 Lrz 652
        jnz     .end_sh_desc_sec
1065 Lrz 653
 
654
.loop_message:
2434 Serge 655
        mov     cx, 38
1065 Lrz 656
@@:
1151 Lrz 657
        lodsb
2434 Serge 658
        cmp     al, '"'
1151 Lrz 659
        jz      .end_sh_desc_sec
2434 Serge 660
        cmp     al, "'"
1151 Lrz 661
        jz      .end_sh_desc_sec
662
        stosw
663
        loop    @b
664
 
2434 Serge 665
        add     find_sec_di, 160
666
        mov     di, find_sec_di
1151 Lrz 667
        dec     save_cx_d
2434 Serge 668
        cmp     save_cx_d, 0
1151 Lrz 669
        jnz     .loop_message
1065 Lrz 670
 
671
.end_sh_desc_sec:
1151 Lrz 672
        push    save_cx_d
673
        pop     save_descript_size
1065 Lrz 674
 
1151 Lrz 675
        push    cs
676
        pop     ds
677
        jmp     .exit
1065 Lrz 678
 
679
 
680
.rest_value_loop_sh_d:
2434 Serge 681
        mov     di, ax
682
        mov     cx, bx
1151 Lrz 683
        jmp     .start_p_sh_d
1065 Lrz 684
 
685
.exit:
2434 Serge 686
}