Subversion Repositories Kolibri OS

Rev

Rev 1065 | Rev 2288 | 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
 
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
{
43
;узнаем работу предыдущего шага т.е. чему = timeout, если он 0, то визуальная часть не будет отображена на дисплее с выбором загрузочных секций.
44
;иначе мы ее должны отобразить и ждать заявленое время для выбора и конигурирования пукнктов секции от пользователя.
45
 
46
if DEBUG
47
        pusha
1151 Lrz 48
        mov     ax,word [value_timeout] ;идет проверка на наличее значения timeout, для более быстрой работы, этот параметр должен быть уже обработан,т.е. в этом случае при его =0 будет сформирован указатель только на дефолтную секцию, иначе информация будет собрана по всем секциям и составлены указатели в блоке памяти
1065 Lrz 49
;        mov     ax,cx
50
        mov     cx,0x0a
51
        mov     di,show_db1
52
        mov     dword[ds:di],'    '
1151 Lrz 53
        mov     word [ds:di+4],'  '
1065 Lrz 54
        call    decode
55
;Show size
56
        mov     si,show_db1
57
        call    printplain
58
;
59
        popa
60
end if
61
 
1151 Lrz 62
        test    ax,ax
63
        jz      .parse_run_only
1065 Lrz 64
 
65
;отобразим полный список всех найденых секций.
66
if DEBUG
1151 Lrz 67
        pusha
68
        mov     si,show_all_sect
69
        call    printplain
70
        popa
1065 Lrz 71
end if
72
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73
        mov     al, 0xf6        ; Сброс клавиатуры, разрешить сканирование
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
102
        mov     dword [start_timer],eax
103
        mov     word [timer_],newtimer
104
        mov     word [timer_+2],cs
105
;установить свое прерывание на таймер т.е. код будет перрываться ~18 раз в сек и переходить на обработчик
106
        cli
107
        push    0
108
        pop     es
109
        push    dword [es:8*4]
110
        pop     dword [old_timer]
111
        push    dword [timer_]
112
        pop     dword [es:8*4]
113
        sti
114
 
115
;процедура формирования буфера для скролинга секций
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
133
;;;;;;;;;;;;;размер предыдущей сеции установим =0
1151 Lrz 134
        mov     save_descript_size,18
1065 Lrz 135
;отобразить black screen
1151 Lrz 136
show_bl_sc      ;es=0xb800
1065 Lrz 137
.show_all_scr:
138
get_frame_buffer  ;es=0x2000
139
;отображение секций
1151 Lrz 140
        call    show_bl_sc_sect   ;es=0xb800
1065 Lrz 141
;отобразить активный курсор
142
.show_active_cursor:
143
show_act_cursor
1151 Lrz 144
show_descript   ;макрос по отображению описания секции
1065 Lrz 145
 
146
;отобразить Press any key ....
1151 Lrz 147
        mov     eax,dword [old_timer]
148
        cmp     eax,dword [timer_]
149
        jz      .interrupt_16
1065 Lrz 150
 
151
show_timer_message
1151 Lrz 152
        mov word [start_stack],sp
1065 Lrz 153
.interrupt_16:
1151 Lrz 154
        xor     ax,ax   ;получим информацию о том что нажато
155
        int     0x16
1065 Lrz 156
;check on change
1151 Lrz 157
        mov     ebx,dword [old_timer]
158
        cmp     ebx,dword [timer_]
159
        jz      @f
1065 Lrz 160
;restore timer interrupt
1151 Lrz 161
        cli
1065 Lrz 162
        push    0
163
        pop     es
164
;        mov     eax,dword [old_timer]  ; восстановим прежднее прерывание
165
        mov     [es:8*4],ebx
166
        mov     dword [timer_],ebx
1151 Lrz 167
        sti
168
 
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
 
1151 Lrz 175
        cmp     ah,0x48  ;реакция системы на события
176
        jz      .up
177
        cmp     ah,0x50
178
        jz      .down
179
        cmp     ah,0x49
180
        jz      .pgup
181
        cmp     ah,0x51
182
        jz      .pgdown
183
        cmp     ah,0x47
184
        jz      .home
185
        cmp     ah,0x4f
186
        jz      .end
1065 Lrz 187
 
1151 Lrz 188
        cmp     al,0xD
189
        jnz     .show_active_cursor
1065 Lrz 190
 
1151 Lrz 191
        jmp     .end_show_all           ;парсинг секции которая указана в point_default
1065 Lrz 192
.up:
1151 Lrz 193
        mov     si,point_to_point_def   ;значение указателя
194
        add     si,2
195
        lea     ax,point_to_hframe
1065 Lrz 196
 
1151 Lrz 197
        cmp     si,ax
198
        ja      @f
1065 Lrz 199
 
1151 Lrz 200
        mov     point_to_point_def,si
201
        mov     ax,[si]
202
        mov     point_default,ax
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:
1151 Lrz 211
        mov     si,point_to_point_def   ;значение указателя
212
        mov     ax,point_to_eframe      ;указатель на последний элемент
213
        sub     si,2
214
        cmp     si,ax
215
        jb      @f
1065 Lrz 216
 
1151 Lrz 217
        mov     point_to_point_def,si
218
        mov     ax,[si]
219
        mov     point_default,ax
220
        jmp     .show_active_cursor
1065 Lrz 221
 
1151 Lrz 222
@@:     call    find_next_sect
223
        jmp     .show_all_scr
1065 Lrz 224
 
225
.pgup:
1151 Lrz 226
        mov     cx,size_show_section
1065 Lrz 227
@@:
1151 Lrz 228
        push    cx
229
        call    find_before_sect
230
        pop     cx
231
        loop    @b
232
        jmp     .show_all_scr
1065 Lrz 233
 
234
 
235
.pgdown:
1151 Lrz 236
        mov     cx,size_show_section
1065 Lrz 237
@@:
1151 Lrz 238
        push    cx
239
        call    find_next_sect
240
        pop     cx
241
        loop    @b
242
        jmp     .show_all_scr
1065 Lrz 243
 
244
.home:
1151 Lrz 245
        xor     di,di
246
        call    find_next_sect.h
247
        jmp     .show_all_scr
1065 Lrz 248
 
249
.end:
1151 Lrz 250
        mov     di,save_cx
251
        call    find_before_sect.e
252
        jmp     .show_all_scr
1065 Lrz 253
 
254
 
255
 
256
 
257
; тут мы будем парсить только дефолтную секцию и выполнять ее ничего не предлагая пользователю из диалогов.
258
.parse_run_only:
259
if DEBUG
1151 Lrz 260
        pusha
261
        mov     si,no_show_only_w
262
        call    printplain
263
        popa
1065 Lrz 264
end if
265
 
266
 
267
.end_show_all:
268
}
269
 
270
 
271
 
272
 
273
 
274
 
275
 
276
 
277
 
278
 
279
 
280
 
281
 
282
 
283
 
284
;show black screen SL
285
macro show_bl_sc
286
{
287
;;;;;;;;;;;;;;;
288
;очистим экран и выведем меню
289
; draw frames
1151 Lrz 290
        xor     ax,ax
1065 Lrz 291
if DEBUG
1151 Lrz 292
        mov     ax,0x0720
1065 Lrz 293
end if
294
        push    0xb800
295
        pop     es
296
        xor     di, di
297
; draw top
298
        mov     cx, 25 * 80
1151 Lrz 299
        rep     stosw
1065 Lrz 300
;;;;;;;;;;;;;;;;;;;;;;; show 'Secondary Loader v0.xxx'
1151 Lrz 301
        mov     di,164
302
        mov     si,version
303
        mov     cx,version_end-version
304
        mov     ah,color_sym_yellow
1065 Lrz 305
@@:
1151 Lrz 306
        lodsb
307
        stosw
308
        loop @b
1065 Lrz 309
;;;;;;;;;;;;;;;;;;;;;;; show firm ))
1151 Lrz 310
        mov     di,(2*160-(2*(soft_mes_end-soft_mes+4)))        ;286
311
        mov     ah,color_sym_pink;color_sym_red
312
        mov     al,'K'
313
        stosw
314
        mov     al,' '
315
        stosw
316
        mov     ah,color_sym_lightgray;color_sym_lightblue;color_sym_pink
317
        mov     si,soft_mes
318
        mov     cx,soft_mes_end- soft_mes
1065 Lrz 319
@@:
1151 Lrz 320
        lodsb
321
        stosw
322
        loop @b
1065 Lrz 323
;;;;;;;;;;;;;;;;;;;;;;; show '__________________________'
1151 Lrz 324
        mov     di,480
325
        mov     ah,color_sym_yellow
326
        mov     al,'Д'
327
        mov     cx,61
328
        rep     stosw
1065 Lrz 329
;;;;;;;;;;;;;;;;;;;;;;; show 'Select section'
1151 Lrz 330
        mov     di,804
331
        mov     si,select_section
332
        mov     cx,select_section_end - select_section
333
        mov     ah,color_sym_lightgray
1065 Lrz 334
@@:
1151 Lrz 335
        lodsb
336
        stosw
337
        loop @b
1065 Lrz 338
;;;;;;;;;;;;;;;;;;;;;;; show 'Section description'
1151 Lrz 339
        mov     di,880
340
        mov     si,section_description
341
        mov     cx,section_description_end - section_description
342
;       mov     ah,color_sym_lightgray
1065 Lrz 343
@@:
1151 Lrz 344
        lodsb
345
        stosw
346
        loop @b
1065 Lrz 347
 
348
}
349
 
350
macro show_timer_message
351
{
352
;;;;;;;;;;;;;;;;;;;;; show Press any key
353
;;;;;;;;;;;;;;;;;;;;; show ramk
354
 
1151 Lrz 355
        xor     ax,ax
356
        mov     di,3360
357
        mov     cx,80*4
358
        rep     stosw
1065 Lrz 359
 
360
        mov     di,3362
361
        mov     ah,color_sym_pink
1151 Lrz 362
        mov     al,0xDA
363
        stosw
364
        mov     al,0xc4
365
        mov     cx,76
366
        rep     stosw
367
        mov     al,0xBF
368
        stosw
369
        add     di,4
370
        mov     al,0xb3
371
        stosw
372
        add     di,152
373
        stosw
374
        add     di,4
375
        stosw
376
        add     di,152
377
        stosw
378
        add     di,4
379
        mov     al,0xc0
380
        stosw
381
        mov     al,0xc4
382
        mov     cx,76
383
        rep     stosw
384
        mov     al,0xd9
385
        stosw
1065 Lrz 386
;;;;;;;;;;;;;;;;;;;;;;;;ramk is complete show
387
;show first message
1151 Lrz 388
        mov     si,start_msg
389
        mov     cx,start_msg_e-start_msg
390
        mov     di,3526
1065 Lrz 391
@@:
1151 Lrz 392
        lodsb
393
        stosw
394
        loop @b
1065 Lrz 395
;;;;;;;;;;;;;;;;;;;; show press Enter to....
1151 Lrz 396
        add     di,44
397
        mov     si,time_msg
398
        mov     cx,time_msg_e-time_msg
1065 Lrz 399
@@:
1151 Lrz 400
        lodsb
401
        stosw
402
        loop @b
1065 Lrz 403
}
404
 
405
 
406
 
407
 
408
 
409
 
410
 
411
 
412
macro get_frame_buffer
413
{
1151 Lrz 414
        mov     cx,save_cx      ;it's placed size of ini file
1065 Lrz 415
        les     di,dword [file_data]
416
 
1151 Lrz 417
        mov     si,di   ;point frame
418
        mov     bx,cx
419
        mov     dx,size_show_section
420
;       mov     point_to_hframe,di      ; внесем значение, так подстраховка не более
1065 Lrz 421
 
1151 Lrz 422
        mov     al,byte [es:di]
423
        push    word .first_ret_bl_sc
424
        cmp     al,' '
425
        jz      .first_bl_sc
426
        jmp     get_firs_sym.not_space
1065 Lrz 427
.first_bl_sc:
1151 Lrz 428
        jmp     get_firs_sym.first_sp
1065 Lrz 429
 
430
.start_hbl:
1151 Lrz 431
        call    get_firs_sym    ;get first symbol on new line
432
        test    cx,cx
433
        jz      error.correct_exit_bl   ;critical error not found default point it's not possible because it's param chacking before
434
        cmp     al,'['
435
        jnz     .start_hbl
1065 Lrz 436
 
1151 Lrz 437
        mov     si,di    ;point frame
438
        mov     bx,cx
439
        mov     dx,size_show_section
440
        jmp     .analisist_al
1065 Lrz 441
 
442
 
443
.start_bl:
1151 Lrz 444
        call    get_firs_sym    ;get first symbol on new line
1065 Lrz 445
.first_ret_bl_sc:                     ;первый возврат
1151 Lrz 446
        test    cx,cx
447
        jz      error.correct_exit_bl   ;critical error not found default point it's not possible because it's param chacking before
1065 Lrz 448
.analisist_al:
1151 Lrz 449
        cmp     al,'['
450
        jnz     .start_bl
1065 Lrz 451
;просматриваем ini файл с начала в поисках секции указаной как default
452
;поиск фрейма в котором содержиться значение default
453
.found_sect_bl:
1151 Lrz 454
        cmp     di,point_loader
455
        jz      .start_bl
456
        cmp     di,point_default
457
        jz      .save_point_def
1065 Lrz 458
 
1151 Lrz 459
        dec     dx
460
        jnz     .start_bl
1065 Lrz 461
 
1151 Lrz 462
        jmp     .start_hbl
1065 Lrz 463
 
464
 
465
.save_point_def:
466
;итак далее мы должны заполнить frame буфер адресов секций, что бы потом по нему быстро перемещаться не вычисляя снова адреса
1151 Lrz 467
        mov     di,si   ;указатель на начало
468
        mov     cx,bx
469
        lea     si,point_to_hframe
470
        mov     dx,size_show_section+1   ;т.к. у нас структура содержит размер между первым и вторым указателем, то нам нужно на 1 адрес больше обсчитать секций.
1065 Lrz 471
;переходим на обработку значения указателя
1151 Lrz 472
        mov     al,byte [es:di]
473
        push    word .first_ret_mfb
474
        cmp     al,' '
475
        jz      .first_bl_mbf
476
        jmp     get_firs_sym.not_space
1065 Lrz 477
.first_bl_mbf:
1151 Lrz 478
        jmp     get_firs_sym.first_sp
1065 Lrz 479
 
480
.start_mfb:
1151 Lrz 481
        call    get_firs_sym    ;get first symbol on new line
1065 Lrz 482
.first_ret_mfb:                     ;первый возврат
1151 Lrz 483
        jcxz    .val_buff_comp  ;.end_loader     ;found or not found parametrs in section  exit in section
484
        cmp     al,'['
485
        jnz     .start_mfb
1065 Lrz 486
 
487
.found_sect_mfb:
1151 Lrz 488
        cmp     di,point_loader     ;if we have section loader
489
        jz      .start_mfb
1065 Lrz 490
 
1151 Lrz 491
        mov     [si],di
1065 Lrz 492
 
1151 Lrz 493
        sub     si,2
494
        dec     dx
495
        jnz     .start_mfb
1065 Lrz 496
;bufer is full
1151 Lrz 497
        jmp     @f
1065 Lrz 498
.val_buff_comp:
1151 Lrz 499
        push    save_cx
500
        pop     word [si]
501
        sub     si,2
1065 Lrz 502
@@:
503
 
1151 Lrz 504
        add     si,4
505
        mov     point_to_eframe,si
1065 Lrz 506
 
507
}
508
 
509
macro show_act_cursor
510
{
511
;отображение курсора по умолчанию
1151 Lrz 512
        lea     si,point_to_hframe
513
        mov     di,962-160
514
        mov     ax,point_default
515
        mov     cx,size_show_section
1065 Lrz 516
.home_show_cur:
1151 Lrz 517
        mov     bx,[si]
518
        add     di,160
519
        cmp     bx,ax
520
        jz      .show_cursor_activ
521
        sub     si,2
522
        loop    .home_show_cur
1065 Lrz 523
 
524
.show_cursor_activ:
1151 Lrz 525
;        push   0xb800
526
;       pop     es
527
        mov     point_to_point_def,si
528
        mov     ax,(color_sym_red*0x100+0x10)
529
        stosw
530
        add     di,68
531
        inc     ax
532
        stosw
1065 Lrz 533
}
534
 
535
macro clear_timer_msg
536
{
1151 Lrz 537
        push    0xb800
538
        pop     es
539
        xor     ax,ax
1065 Lrz 540
if DEBUG
1151 Lrz 541
        mov     ax,0x0720
1065 Lrz 542
end if
543
;;;;;;;;;;;;;;;;;;;;; show Press any key
1151 Lrz 544
        mov     di,3360
545
        mov     cx,80*4
546
        rep     stosw
1065 Lrz 547
 
548
;show sect
1151 Lrz 549
        push    ini_data_
550
        pop     es
551
        call    show_bl_sc_sect ;es=0xb800
1065 Lrz 552
 
553
}
554
 
555
macro show_descript
556
;Этот макрос показывает краткое описание, если оно есть у секции в пункте
557
;Section description
558
{
559
local .start_p_sh_d
560
local .exit
561
local .rest_value_loop_sh_d
562
local .end_sh_desc_sec
563
local .loop_message
564
local .show_mess_prev_eq
1151 Lrz 565
        mov     di,point_default
566
        push    ini_data_
567
        mov     si,point_to_point_def
568
        pop     es
569
        sub     si,2
570
        mov     cx,[si]         ;загрузим указатель наследующию секцию
571
        sub     cx,di           ;вот теперь имеем истиный размер
1065 Lrz 572
;di - указатель на дефолтную секцию т.е. выбранную cx - размер области. для просмотра
573
 
574
.start_p_sh_d:
1151 Lrz 575
        call    get_firs_sym    ;get first symbol on new line
576
        test    cx,cx
577
        jz      .exit   ;нету? ну ладно - следующее значение тогда )
578
        cmp     al,'d'
579
        jnz     .start_p_sh_d
1065 Lrz 580
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
581
 
582
        mov     bx,cx
583
        mov     ax,di
584
 
585
        mov     si,parse_descript
586
        mov     cx,parse_descript_e - parse_descript
587
        repe    cmpsb
1151 Lrz 588
        jnz     .rest_value_loop_sh_d      ;is not compare
1065 Lrz 589
 
590
        sub     bx,parse_descript_e - parse_descript ;correct cx
591
        add     bx,cx
592
        mov     cx,bx
593
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; разбор аля ' = '
1151 Lrz 594
        mov     ax,0x3d20          ;cut al=' ' ah='='
595
        repe    scasb
596
        jcxz    .rest_value_loop_sh_d          ;not found param timeout
1065 Lrz 597
 
1151 Lrz 598
        cmp     ah,byte [es:di-1]    ;find '='
599
        jnz     .rest_value_loop_sh_d
600
 
601
        repe    scasb              ;cut ' '
602
        inc     cx
603
        dec     di
1065 Lrz 604
;;;;;;;;;;;;;;;;;;;;di указывает на строчку, которую нам нужно выводить.
605
;строчка будет выводиться блоками по 37 символов.
606
;настроим куда будем выводить т.е. начало
607
;es:di - указывают на строчку из которой мы берем символ, ds:si куда будем выводить
1151 Lrz 608
        push    di
609
        pop     si
1065 Lrz 610
 
1151 Lrz 611
        push    es
612
        pop     ds
1065 Lrz 613
 
1151 Lrz 614
        push    0xb800
615
        pop     es
616
 
617
        mov     di,1040
618
        mov     bx,18
619
        mov     find_sec_di,di
620
        mov     save_cx_d,bx
621
;;;;;;;;;;;;;;;;;;;;;;;;;;
1065 Lrz 622
;clean string
623
 
1151 Lrz 624
        push    di
625
        xor     ax,ax
1065 Lrz 626
 
1151 Lrz 627
@@:     mov     cx,38
628
        push    di
629
        rep     stosw
630
        pop     di
1065 Lrz 631
 
1151 Lrz 632
        cmp     save_descript_size,bx
633
        jz      @f
1065 Lrz 634
 
635
 
1151 Lrz 636
        add     di,160
637
        dec     bx
638
        jnz     @b
1065 Lrz 639
 
1151 Lrz 640
@@:     pop     di
1065 Lrz 641
;enter in mess
642
.show_mess_prev_eq:
1151 Lrz 643
        lodsb
644
        mov     ah,color_sym_lettuce;color_sym_turquoise
645
;       sub     di,2
646
        cmp     al,'"'
647
        jz      .loop_message
648
        cmp     al,"'"
649
        jnz     .end_sh_desc_sec
1065 Lrz 650
 
651
.loop_message:
1151 Lrz 652
        mov     cx,38
1065 Lrz 653
@@:
1151 Lrz 654
        lodsb
655
        cmp     al,'"'
656
        jz      .end_sh_desc_sec
657
        cmp     al,"'"
658
        jz      .end_sh_desc_sec
659
        stosw
660
        loop    @b
661
 
662
        add     find_sec_di,160
663
        mov     di,find_sec_di
664
        dec     save_cx_d
665
        cmp     save_cx_d,0
666
        jnz     .loop_message
1065 Lrz 667
 
668
.end_sh_desc_sec:
1151 Lrz 669
        push    save_cx_d
670
        pop     save_descript_size
1065 Lrz 671
 
1151 Lrz 672
        push    cs
673
        pop     ds
674
        jmp     .exit
1065 Lrz 675
 
676
 
677
.rest_value_loop_sh_d:
1151 Lrz 678
        mov     di,ax
679
        mov     cx,bx
680
        jmp     .start_p_sh_d
1065 Lrz 681
 
682
.exit:
683
}