Subversion Repositories Kolibri OS

Rev

Rev 259 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
178 heavyiron 1
;-----------------------------------------------------------------------------
2
func drawwindow ;///// DRAW WINDOW ///////////////////////////////////////////
3
;-----------------------------------------------------------------------------
4
 
5
	cmp	[just_from_popup],1
6
	jne	@f
7
	ret
8
    @@:
9
 
10
	mcall	48,3,sc,sizeof.system_colors
11
	call	calc_3d_colors
12
 
13
	test	[options],OPTS_LINENUMS
14
	jnz	@f
15
	mov	eax,2+LCHGW
16
	jmp	.lp1
17
    @@: mov	edi,p_info+100
18
	mov	eax,[lines]
19
	mov	ecx,10
20
	call	uint2str
21
	lea	eax,[edi-p_info-100]
22
	cmp	eax,3
23
	jae	@f
24
	mov	eax,3
25
    @@: imul	eax,6
26
	add	eax,2+4+LCHGW
27
  .lp1: mov	[left_ofs],eax
28
 
29
	mcall	12,1
30
 
31
	push	[color_tbl+4*5]
32
	pop	[sc.work]
33
 
34
	mov	edx,[sc.work]
35
	add	edx,0x33000000
36
	mov	ebx,[mainwnd_pos.x-2]
37
	mov	bx,word[mainwnd_pos.w]
38
	mov	ecx,[mainwnd_pos.y-2]
39
	mov	cx,word[mainwnd_pos.h]
40
	mcall	0,,,,,s_title
41
 
42
	mcall	9,p_info,-1
43
	mov	esi,p_info.box.left
44
	mov	edi,mainwnd_pos
45
	mov	ecx,4
46
	cld
47
	rep	movsd
48
 
49
;	mcall	9,p_info,-1
50
	cmp	[p_info.client_box.height],LINEH
51
	jl	.exit.2
52
 
53
	mov	[top_ofs],ATOPH;+1
54
 
55
	mov	eax,[p_info.client_box.width]
56
	sub	eax,SCRLW+1
57
	sub	eax,[left_ofs]
58
	cdq
59
	mov	ebx,6
60
	div	ebx
61
	mov	[columns.scr],eax
62
 
63
	mov	eax,[p_info.client_box.height] ; calculate buttons position
64
	add	eax,-STATH;*3-2-2
65
	sub	eax,[bot_dlg_height]
66
	mov	[bot_ofs],eax
67
 
68
	call	draw_bottom_dialog
69
 
70
	mov	[do_not_draw],1 ; do_not_draw = true
71
 
72
	mov	ebx,eax
73
	sub	ebx,[top_ofs]
74
	sub	ebx,SCRLW*3+AMINS+5
75
	js	.no_draw
76
 
77
	dec	[do_not_draw]	 ; do_not_draw = false
78
	sub	eax,SCRLW+3
79
	sub	eax,[top_ofs]
80
	cdq
81
	mov	ebx,LINEH
82
	div	ebx
83
	mov	[lines.scr],eax
84
 
85
	mov	ebx,[p_info.client_box.width]
86
	mov	ecx,[top_ofs-2]
87
	mov	cx,word[top_ofs]
88
	sub	ecx,1*65536+1
89
	mcall	38,,,[cl_3d_inset];[sc.work_text]
90
	mov	ecx,[p_info.client_box.height]
91
	sub	ecx,STATH+1
92
	push	cx
93
	shl	ecx,16
94
	pop	cx
95
	mcall
96
 
97
	inc	[top_ofs]
98
 
99
	call	draw_main_menu
100
 
101
	jmp	.exit
102
 
103
  .no_draw:
104
	mov	[top_ofs],2
105
	mov	eax,[p_info.client_box.height]
106
	inc	eax
107
	mov	[bot_ofs],eax
108
	sub	eax,2
109
	push	eax
110
	add	eax,-2-SCRLW
111
	cdq
112
	mov	ebx,LINEH
113
	idiv	ebx
114
	mov	[lines.scr],eax
115
	pop	eax
116
 
117
	mov	ebx,[p_info.client_box.height]
118
	sub	ebx,SCRLW*3+AMINS+2
119
	jns	@f
120
 
121
	inc	[do_not_draw]
122
 
123
	dec	eax
124
	cdq
125
	mov	ebx,LINEH
126
	idiv	ebx
127
	mov	[lines.scr],eax
128
 
129
	mov	eax,[p_info.client_box.width]
130
	cdq
131
	mov	ebx,6
132
	idiv	ebx
133
	mov	[columns.scr],eax
134
    @@:
135
 
136
  .exit:
137
	call	draw_file
138
  .exit.2:
139
	mcall	12,2
140
	ret
141
endf
142
 
143
;-----------------------------------------------------------------------------
144
func draw_bottom_dialog ;/////////////////////////////////////////////////////
145
;-----------------------------------------------------------------------------
146
	cmp	[bot_dlg_height],0
147
	je	.exit
148
	pushad
149
	mov	ebx,[p_info.client_box.width]
150
	mov	ecx,[bot_ofs]
151
	dec	ecx
152
	push	cx
153
	shl	ecx,16
154
	pop	cx
155
	mcall	38,,,[cl_3d_inset]
156
	mov	ecx,[bot_ofs-2]
157
	mov	cx,word[bot_dlg_height]
158
	dec	ecx
159
	mov	ebx,[p_info.client_box.width]
160
	inc	ebx
161
	mcall	13,,,[cl_3d_normal]
162
	mov	al,1
163
	call	[bot_dlg_handler]
164
	popad
165
 
166
  .exit:
167
	ret
168
endf
169
 
170
mi_sel	 dd ?
171
mi_cur	 dd -1
172
 
173
;-----------------------------------------------------------------------------
174
func draw_main_menu ;/////////////////////////////////////////////////////////
175
;-----------------------------------------------------------------------------
176
	mov	ebx,[p_info.client_box.width]
177
	inc	ebx
178
	mcall	13,,ATOPH-1,[cl_3d_normal]
179
 
180
	mov	edx,main_menu
181
	mov	ebx,9*65536+ATOPH/2-4
182
	mov	ecx,[sc.work_text]
183
	mov	[mi_sel],0
184
	mov	edi,[mi_cur]
185
    @@: inc	[mi_sel]
186
	cmp	[mi_sel],main_menu.cnt_item
187
	ja	.exit
188
	cmp	edi,[mi_sel]
189
	jne	.lp1
190
	pushad
191
	push	edx
192
	mcall	13,[edx+0],[edx+4],[cl_3d_pushed]
193
	mov	edx,[esp]
194
	mov	bx,[edx+2]
195
	mcall	38,,,[cl_3d_inset]
196
	pop	edx
197
	movzx	eax,word[edx]
198
	add	ebx,eax
199
	shl	eax,16
200
	add	ebx,eax
201
	mcall	38,,,[cl_3d_inset]
202
	popad
203
  .lp1: add	edx,8+1
204
	movzx	esi,byte[edx-1]
205
	mcall	4
206
	add	edx,esi
207
	add	esi,2
208
	imul	esi,6*65536
209
	add	ebx,esi
210
	jmp	@b
211
 
212
  .exit:
213
	ret
214
endf
215
 
216
;-----------------------------------------------------------------------------
217
func draw_file.ex ;///////////////////////////////////////////////////////////
218
;-----------------------------------------------------------------------------
219
; Input:
220
;  EAX = start line
221
;  EBX = end line
222
;-----------------------------------------------------------------------------
223
	cmp	[p_info.client_box.height],LINEH
224
	jge	@f
225
	ret
226
    @@:
227
	call	init_sel_vars
228
	call	check_bottom_right
229
 
230
	pushad
231
 
232
	cmp	[lines.scr],0
233
	jle	draw_file.exit
234
 
235
	cmp	eax,ebx
236
	jle	@f
237
	xchg	eax,ebx
238
    @@: cmp	eax,[top_line]
239
	jge	@f
240
	mov	eax,[top_line]
241
    @@: mov	ecx,[top_line]
242
	add	ecx,[lines.scr]
243
	cmp	ebx,ecx
244
	jl	@f
245
	dec	ecx
246
	mov	ebx,ecx
247
    @@: cmp	eax,ebx
248
	jg	draw_file.exit
249
 
250
	mov	ecx,eax
251
	push	eax
252
	call	get_line_offset
253
 
254
  .start:
255
	mov	ecx,ebx
256
	sub	ecx,eax
257
	inc	ecx
258
 
259
	mov	ebx,[top_ofs]
260
	add	ebx,[left_ofs-2]
261
	sub	eax,[top_line]
262
	imul	eax,LINEH
263
	add	ebx,eax
264
 
265
	imul	ebp,[left_col],6*65536
266
	or	[draw_blines],-1
267
 
268
	jmp	draw_file.next_line
269
endf
270
 
271
;-----------------------------------------------------------------------------
272
func draw_file ;//////////////////////////////////////////////////////////////
273
;-----------------------------------------------------------------------------
274
	cmp	[p_info.client_box.height],LINEH
275
	jge	@f
276
	ret
277
    @@:
278
	call	init_sel_vars
279
	call	check_bottom_right
280
 
281
	pushad
282
 
283
	mov	ebx,[top_ofs]
284
	add	ebx,[left_ofs-2]
285
 
286
	mov	ecx,[top_line]
287
	push	ecx
288
	call	get_line_offset
289
 
290
  .start:
291
	add	esp,4
292
	mov	ecx,[lines.scr]
293
	or	ecx,ecx
294
	jle	.exit
295
	add	esp,-4
296
 
297
	imul	ebp,[left_col],6*65536
298
	mov	eax,[lines.scr]
299
	sub	eax,[lines]
300
	mov	[draw_blines],eax
301
 
302
  .next_line:
303
 
304
	push	ecx ebx
305
 
306
	mov	ecx,ebx
307
	shl	ecx,16
308
	mov	cl,LINEH
309
	mov	ebx,[p_info.client_box.width]
310
	add	ebx,-SCRLW
311
	add	ebx,[left_ofs-2]
312
	sub	ebx,[left_ofs]
313
	add	ebx,-1*65536+1
314
 
315
  ; selection (text background)
316
	mov	[in_sel],0
317
	mov	edx,[color_tbl+4*5]
318
	mov	eax,[esp+4*2]
319
	cmp	eax,[sel.begin.y]
320
	jl	.lp6
321
	je	.lp1
322
	cmp	eax,[sel.end.y]
323
	jg	.lp6
324
	je	.lp3
325
	jmp	.lp6.2
326
  .lp1: mov	eax,[sel.begin.y]
327
	cmp	eax,[sel.end.y]
328
	je	.lp5
329
  .lp2: mov	eax,[sel.begin.x]
330
	sub	eax,[left_col]
331
	jle	.lp6.2
332
	cmp	eax,[columns.scr]
333
	jge	.lp6
334
	imul	eax,6
335
	pushad
336
	sub	bx,ax
337
	rol	ebx,16
338
	mov	bx,ax
339
	add	ebx,[left_ofs];OLEFT-1
340
	dec	ebx
341
	rol	ebx,16
342
	mov	edx,[color_tbl+4*7]
343
	mcall	13
344
	popad
345
;       inc     eax
346
	mov	bx,ax
347
	mov	[in_sel],2
348
	jmp	.lp6
349
  .lp3: mov	eax,[sel.begin.y]
350
	cmp	eax,[sel.end.y]
351
	je	.lp5
352
  .lp4: mov	eax,[sel.end.x]
353
	sub	eax,[left_col]
354
	jle	.lp6
355
	cmp	eax,[columns.scr]
356
	jg	.lp6.2
357
	imul	eax,6
358
	pushad
359
	sub	bx,ax
360
	rol	ebx,16
361
	add	eax,[left_ofs];OLEFT-1
362
	dec	eax
363
	mov	bx,ax
364
	rol	ebx,16
365
;       inc     ebx
366
	mcall	13
367
	popad
368
	mov	edx,[color_tbl+4*7]
369
	mov	bx,ax
370
	mov	[in_sel],3
371
	jmp	.lp6
372
  .lp5: mov	eax,[left_col]
373
	cmp	eax,[sel.begin.x]
374
	jge	.lp4
375
	add	eax,[columns.scr]
376
	cmp	eax,[sel.end.x]
377
	jl	.lp2
378
	mov	eax,[sel.begin.x]
379
	cmp	eax,[sel.end.x]
380
	je	.lp6
381
	sub	eax,[left_col]
382
	imul	eax,6
383
	pushad
384
	mov	ebx,[sel.end.x]
385
	sub	ebx,[sel.begin.x]
386
;       inc     ebx
387
	imul	ebx,6
388
	sal	ebx,16
389
	dec	eax
390
	add	eax,[left_ofs]
391
	mov	bx,ax
392
	rol	ebx,16
393
	mov	edx,[color_tbl+4*7]
394
	mcall	13
395
	movzx	eax,bx
396
	sar	ebx,16
397
	add	eax,ebx
398
	mov	ebx,eax
399
	sal	ebx,16
400
	sub	ax,[esp+4*4]
401
	neg	ax
402
	add	ax,word[left_ofs]
403
	mov	bx,ax
404
	mov	edx,[color_tbl+4*5]
405
	mcall	13
406
	popad
407
	mov	bx,ax
408
	mov	[in_sel],4
409
	jmp	.lp6
410
 
411
  .lp6.2:
412
	mov	edx,[color_tbl+4*7]
413
	inc	[in_sel]
414
  .lp6:
415
	mcall	13
416
 
417
	lodsd
418
 
419
	pushad
420
	mov	edx,[color_tbl+4*5]
421
	test	eax,0x00010000
422
	jz	@f
423
	mov	edx,[color_tbl+4*8]
424
	test	eax,0x00020000
425
	jz	@f
426
	mov	edx,[color_tbl+4*9]
427
    @@: mov	ebx,[left_ofs]
428
	add	ebx,-4
429
	shl	ebx,16
430
	mov	bx,LCHGW
431
	mcall	13
432
	popad
433
 
434
 
435
	xor	ecx,ecx
436
	and	eax,0x0000FFFF
437
	mov	[cur_line_len],eax
438
 
439
	or	eax,eax
440
	ja	.next_block
441
	add	esp,4*2
442
	jmp	.draw_cursor
443
 
444
  .next_block:
445
 
446
	push	esi ecx
447
	call	get_next_part
448
	pop	ebx
449
 
450
	push	ecx
451
	mov	ecx,eax
452
 
453
	push	esi ebx
454
	mov	eax,ebx
455
	sub	ebx,[left_col]
456
	cmp	ebx,[columns.scr]
457
	jge	.skip_t
458
	add	ebx,esi
459
	jle	.skip_t
460
	mov	ebx,[esp+8+4*2] ;// 4*2=esi+ebx
461
	sub	eax,[left_col]
462
	jge	.qqq
463
	sub	edx,eax
464
	add	esi,eax
465
;       mov     eax,OLEFT*65536
466
	xor	eax,eax
467
	jmp	.qqq2
468
  .qqq:
469
;       inc     eax
470
	imul	eax,6*65536
471
  .qqq2:
472
	and	ebx,0x0000FFFF
473
	add	eax,[left_ofs-2];OLEFT*65536
474
	add	ebx,eax
475
 
476
	mov	eax,[esp]   ; ebx
477
	add	eax,[esp+4] ; esi
478
	sub	eax,[left_col]
479
	sub	eax,[columns.scr]
480
	jle	.qweqwe
481
	sub	esi,eax
482
  .qweqwe:
483
 
484
	mov	al,[in_sel]
485
	cmp	al,0
486
	je	.draw_t
487
	dec	al
488
	jz	.ya4
489
  .nt1: dec	al
490
	jnz	.nt2
491
	mov	eax,[esp]
492
	cmp	eax,[sel.begin.x]
493
	jge	.ya4
494
	add	eax,[esp+4]
495
	cmp	eax,[sel.begin.x]
496
	jl	.draw_t
497
;---[ selection crosses block from the right ]-(-
498
  .ya1: mov	eax,esi
499
	mov	esi,[sel.begin.x]
500
	sub	esi,[esp]
501
	pushad
502
	mov	ecx,[left_col]
503
	sub	ecx,[esp+4*8]
504
	jle	@f
505
	sub	esi,ecx
506
	sub	[esp+4],ecx
507
    @@: sub	eax,esi
508
	add	edx,esi
509
	imul	esi,6
510
	rol	ebx,16
511
	add	bx,si
512
	rol	ebx,16
513
	mov	esi,eax
514
	mov	ecx,[color_tbl+4*6]
515
	mcall	4
516
	popad
517
	jmp	.draw_t
518
;----------------------------------------------)-
519
  .nt2: dec	al
520
	jnz	.nt3
521
	mov	eax,[esp]
522
	cmp	eax,[sel.end.x]
523
	jge	.draw_t
524
	add	eax,[esp+4]
525
	cmp	eax,[sel.end.x]
526
	jl	.ya4
527
;---[ selection crosses block from the left ]--(-
528
  .ya2: mov	eax,[sel.end.x]
529
	sub	eax,[esp]
530
	push	ebx
531
	mov	ebx,[esp+4]
532
	sub	ebx,[left_col]
533
	jge	.ya2.1
534
	add	eax,ebx
535
  .ya2.1:
536
	pop	ebx
537
	pushad
538
	mov	esi,eax
539
	mov	ecx,[color_tbl+4*6]
540
	mcall	4
541
	popad
542
	sub	esi,eax
543
	add	edx,eax
544
	imul	eax,6*65536
545
	add	ebx,eax
546
	jmp	.draw_t
547
;----------------------------------------------)-
548
  .nt3: mov	eax,[esp]
549
	cmp	eax,[sel.end.x]
550
	jge	.draw_t
551
	cmp	eax,[sel.begin.x]
552
	jge	@f
553
	add	eax,[esp+4]
554
	cmp	eax,[sel.begin.x]
555
	jl	.draw_t
556
	cmp	eax,[sel.end.x]
557
	jl	.ya1
558
;---[ selection inside block ]-----------------(-
559
	mov	eax,esi
560
	mov	esi,[sel.begin.x]
561
	sub	esi,[esp]
562
	push	eax
563
	mov	eax,[esp+4]
564
	sub	eax,[left_col]
565
	jge	.nt3.1
566
	add	esi,eax
567
  .nt3.1:
568
	pop	eax
569
	sub	eax,esi
570
	pushad
571
	add	edx,esi
572
	imul	esi,6*65536
573
	add	ebx,esi
574
	mov	esi,[sel.end.x]
575
	sub	esi,[sel.begin.x]
576
	mov	ecx,[color_tbl+4*6]
577
	sub	eax,esi
578
	push	eax
579
	mcall	4
580
	add	edx,esi
581
	imul	esi,6*65536
582
	add	ebx,esi
583
	pop	esi
584
	mov	ecx,[esp+4*6]
585
	mcall	4
586
	popad
587
	jmp	.draw_t
588
;----------------------------------------------)-
589
    @@: add	eax,esi
590
	dec	eax
591
	cmp	eax,[sel.end.x]
592
	jge	.ya2
593
;---[ block inside selection ]-----------------(-
594
  .ya4: mov	ecx,[color_tbl+4*6]
595
;----------------------------------------------)-
596
 
597
  .draw_t:
598
	mcall	4;[esp+8]
599
  .skip_t:
600
	pop	eax eax ; ebx esi
601
	imul	eax,6
602
	add	[esp+4*2+2],ax
603
	pop	ecx esi
604
	cmp	ecx,[cur_line_len];LINE_WIDTH
605
	jl	.next_block
606
 
607
	pop	ebx ecx
608
	and	ebx,0x0000FFFF
609
	add	ebx,[left_ofs-2]
610
	add	ebx,LINEH
611
	add	esi,[cur_line_len];LINE_WIDTH
612
	inc	dword[esp]
613
	dec	ecx
614
	jg	.next_line
615
 
616
;------------------------------------------------
617
  .draw_cursor:
618
 
619
;------------------------------------------------
620
	mov	ebx,[left_ofs]
621
	cmp	ebx,2+LCHGW
622
	je	.no_gutter
623
	add	esp,-4*8*2
624
	sub	ebx,3+LCHGW
625
	mov	ecx,[top_ofs]
626
	dec	ecx
627
	shl	ecx,16
628
	add	ecx,[bot_ofs]
629
	sub	ecx,[top_ofs]
630
	sub	ecx,SCRLW
631
	mcall	13,,,[cl_3d_normal]
632
 
633
	push	bx
634
	shl	ebx,16
635
	pop	bx
636
	add	ecx,[top_ofs]
637
	dec	ecx
638
	mcall	38,,,[cl_3d_inset]
639
 
640
	mov	ebx,[left_ofs]
641
	add	ebx,-3-LCHGW
642
	shl	ebx,16
643
	add	ebx,[top_ofs]
644
	mov	edi,[sc.work_text]
645
	mov	ecx,[top_line]
646
	inc	ecx
647
	mov	edx,p_info+100
648
    @@: pushad
649
	push	eax edx edi
650
	mov	eax,ecx
651
	mov	ecx,10
652
	mov	edi,edx
653
	call	uint2str
654
	mov	esi,edi
655
	pop	edi edx eax
656
	sub	esi,edx
657
	imul	eax,esi,6*65536
658
	sub	ebx,eax
659
	mcall	4,,edi
660
	popad
661
	add	ebx,LINEH
662
	inc	ecx
663
	cmp	ecx,[lines]
664
	jg	@f
665
	mov	esi,ecx
666
	sub	esi,[top_line]
667
	cmp	esi,[lines.scr]
668
	jbe	@b
669
    @@: add	esp,4*8*2
670
 
671
  .no_gutter:
672
;------------------------------------------------
673
 
674
	mov	ebx,[draw_blines]
675
	or	ebx,ebx
676
	js	@f
677
	imul	ebx,LINEH
678
	mov	ecx,[esp-8]
679
	shl	ecx,16
680
	mov	cx,bx
681
	mov	ebx,[p_info.client_box.width]
682
	add	ebx,[left_ofs-2]
683
	sub	ebx,[left_ofs]
684
	add	ebx,-1*65536-SCRLW+1 ; 
685
	mcall	13,,,[color_tbl+4*5]
686
    @@:
687
 
688
	add	esp,4
689
	cmp	[bot_mode],0
690
	jne	@f
691
	mov	ebx,[pos.x]
692
	sub	ebx,[left_col]
693
	js	@f
694
	cmp	ebx,[columns.scr]
695
	ja	@f
696
	imul	ebx,6
697
	add	ebx,[left_ofs]
698
	dec	ebx
699
	push	bx
700
	shl	ebx,16
701
	pop	bx
702
	mov	eax,[pos.y]
703
	sub	eax,[top_line]
704
	js	@f
705
	cmp	eax,[lines.scr]
706
	jge	@f
707
	imul	eax,LINEH
708
	add	eax,[top_ofs]
709
;       inc     eax
710
	mov	esi,eax
711
	shl	esi,16
712
	add	eax,LINEH-2
713
	mov	si,ax
714
	mov	ecx,2
715
	cmp	[ins_mode],0
716
	jne	.lp8
717
	add	cl,4
718
  .lp8: push	ecx
719
	mcall	38,,esi,0x01000000
720
	add	ebx,0x00010001
721
	pop	ecx
722
	loop	.lp8
723
    @@:
724
;------------------------------------------------
725
	cmp	[do_not_draw],2
726
	je	.exit
727
 
728
;        mov     ebx,[p_info.x_size]
729
;        shl     ebx,16
730
;        add     ebx,(-SCRLW-5+2)*65536+SCRLW-2
731
;        mov     ecx,[top_ofs-2]
732
;        mov     cx,SCRLW-1
733
;        mcall   8,,,'UP',[sc.work_button]
734
;!!!!!!!!!!!!!!!!!!
735
	mov	ebx,[p_info.client_box.width]
736
	shl	ebx,16
737
	add	ebx,(-SCRLW)*65536+SCRLW
738
	mov	ecx,[top_ofs-2]
739
	mov	cx,SCRLW
740
	sub	ecx,0x00020000
741
	mcall	8,,,'UP' or 0x40000000
742
	pushad
743
	sar	ebx,16
744
	sar	ecx,16
745
	push	ebx ecx SCRLW SCRLW
746
	call	draw_3d_panel
747
	popad
748
	mov	eax,8
749
;!!!!!!!!!!!!!!!!!!
750
 
751
	pushad
752
	push	0x18
753
	shr	ecx,16
754
	mov	bx,cx
755
	add	ebx,(SCRLW/2-2)*65536+SCRLW/2-3
756
	mcall	4,,[sc.work_text],esp,1
757
	add	esp,4
758
	popad
759
 
760
;        mov     ecx,[bot_ofs]
761
;        shl     ecx,16
762
;        add     ecx,(-SCRLW*2-1)*65536+SCRLW-1
763
;        mcall   ,,,'DN'
764
;!!!!!!!!!!!!!!!!!!
765
	mov	ecx,[bot_ofs]
766
	shl	ecx,16
767
	add	ecx,(-SCRLW*2-1)*65536+SCRLW
768
	mcall	,,,'DN' or 0x40000000
769
	pushad
770
	sar	ebx,16
771
	sar	ecx,16
772
	push	ebx ecx SCRLW SCRLW
773
	call	draw_3d_panel
774
	popad
775
	mov	eax,8
776
;!!!!!!!!!!!!!!!!!!
777
 
778
	pushad
779
	push	0x19
780
	shr	ecx,16
781
	mov	bx,cx
782
	add	ebx,(SCRLW/2-2)*65536+SCRLW/2-3
783
	mcall	4,,[sc.work_text],esp,1
784
	add	esp,4
785
	popad
786
;        sub     ebx,1*65536-2
787
 
788
	push	ebx
789
	mov	eax,[lines]
790
	mov	ebx,[lines.scr]
791
	mov	ecx,[top_line]
792
	mov	edx,[bot_ofs]
793
	sub	edx,[top_ofs]
794
	add	edx,-SCRLW*3+1
795
	call	get_scroll_vars
796
	mov	[vscrl_top],eax
797
	mov	[vscrl_size],ebx
798
	pop	ebx
799
 
800
	mov	ecx,eax
801
	add	ecx,[top_ofs]
802
	add	ecx,SCRLW-1
803
;        shl     ecx,16
804
;        mov     cx,word[vscrl_size]
805
 
806
;       mcall   13,,,[sc.work_button]
807
;!!!!!!!!!!!!!!!!!!
808
	pushad
809
	sar	ebx,16
810
;        rol     ecx,16
811
;        movsx   eax,cx
812
;        sar     ecx,16
813
	push	ebx ecx SCRLW [vscrl_size]
814
	dec	dword[esp]
815
	call	draw_3d_panel
816
	popad
817
	mov	eax,13
818
;!!!!!!!!!!!!!!!!!!
819
	inc	ebx
820
 
821
	mov	ecx,[top_ofs-2]
822
	mov	cx,word[vscrl_top]
823
	add	ecx,(SCRLW-1)*65536
824
	mov	edx,[sc.work];[color_tbl+4*5]
825
	or	cx,cx
826
	jle	@f
827
	mcall	13
828
    @@:
829
	mov	ecx,[top_ofs]
830
	add	ecx,[vscrl_top]
831
	add	ecx,[vscrl_size]
832
	add	ecx,SCRLW-1
833
	mov	di,cx
834
	shl	ecx,16
835
	mov	cx,word[bot_ofs]
836
	sub	cx,di
837
	sub	cx,SCRLW*2+1
838
	jle	@f
839
	mcall
840
    @@:
841
;-----------------------
842
;        mov     eax,ebx
843
;        shr     eax,16
844
;        add     bx,ax
845
;        mov     ecx,[top_ofs-2]
846
;        mov     cx,word[top_ofs]
847
;        add     ecx,SCRLW*65536+SCRLW
848
;        mcall   38,,,[sc.work_graph];[sc.work_text]
849
;        mov     ecx,[bot_ofs-2]
850
;        mov     cx,word[bot_ofs]
851
;        sub     ecx,(SCRLW*2+2)*65536+(SCRLW*2+2)
852
;        mcall
853
	rol	ebx,16
854
	push	bx
855
	rol	ebx,16
856
	pop	bx
857
	mov	ecx,[top_ofs-2]
858
	mov	cx,word[bot_ofs]
859
	add	ecx,(SCRLW-1)*65536-SCRLW*2-2
860
	mcall	38,,,[cl_3d_inset]
861
;------------------------------------------------
862
;        mov     ebx,5*65536+SCRLW-1
863
;        mov     ecx,[bot_ofs]
864
;        shl     ecx,16
865
;        add     ecx,(-SCRLW)*65536+SCRLW-2
866
;        mcall   8,,,'LT',[sc.work_button]
867
;!!!!!!!!!!!!!!!!!!
868
	mov	ebx,SCRLW
869
	mov	ecx,[bot_ofs]
870
	shl	ecx,16
871
	add	ecx,(-SCRLW-1)*65536+SCRLW
872
	mcall	8,,,'LT' or 0x40000000
873
	pushad
874
	sar	ebx,16
875
	sar	ecx,16
876
	push	ebx ecx SCRLW SCRLW
877
	call	draw_3d_panel
878
	popad
879
;!!!!!!!!!!!!!!!!!!
880
 
881
	pushad
882
	push	0x1B
883
	shr	ecx,16
884
	mov	bx,cx
885
	add	ebx,(SCRLW/2-2)*65536+SCRLW/2-3
886
	mcall	4,,[sc.work_text],esp,1
887
	add	esp,4
888
	popad
889
 
890
;        mov     ebx,[p_info.x_size]
891
;        shl     ebx,16
892
;        add     ebx,(-SCRLW*2-5)*65536+SCRLW
893
;        mcall   ,,,'RT'
894
;!!!!!!!!!!!!!!!!!!
895
	mov	ebx,[p_info.client_box.width]
896
	shl	ebx,16
897
	add	ebx,(-SCRLW*2)*65536+SCRLW
898
	mcall	8,,,'RT' or 0x40000000
899
	pushad
900
	sar	ebx,16
901
	sar	ecx,16
902
	push	ebx ecx SCRLW SCRLW
903
	call	draw_3d_panel
904
	popad
905
;!!!!!!!!!!!!!!!!!!
906
 
907
	pushad
908
	push	0x1A
909
	shr	ecx,16
910
	mov	bx,cx
911
	add	ebx,(SCRLW/2-2)*65536+SCRLW/2-3
912
	mcall	4,,[sc.work_text],esp,1
913
	add	esp,4
914
	popad
915
;       inc     ecx
916
 
917
	push	ecx
918
	mov	eax,[columns]
919
	mov	ebx,[columns.scr]
920
	mov	ecx,[left_col]
921
	mov	edx,[p_info.client_box.width]
922
	add	edx,-(SCRLW*3)
923
	call	get_scroll_vars
924
	mov	[hscrl_top],eax
925
	mov	[hscrl_size],ebx
926
	pop	ecx
927
 
928
	mov	ebx,eax
929
	add	ebx,1+SCRLW
930
	shl	ebx,16
931
	mov	bx,word[hscrl_size]
932
 
933
;        mcall   13,,,[sc.work_button]
934
;!!!!!!!!!!!!!!!!!!
935
	pushad
936
	sar	ecx,16
937
	rol	ebx,16
938
	movsx	eax,bx
939
	sar	ebx,16
940
	dec	ebx
941
	push	eax ecx ebx SCRLW
942
	call	draw_3d_panel
943
	popad
944
;!!!!!!!!!!!!!!!!!!
945
 
946
	mov	ebx,(1+SCRLW)*65536
947
	mov	bx,word[hscrl_top]
948
	mcall	13,,,[sc.work];[color_tbl+4*5]
949
	mov	ebx,1+SCRLW
950
	add	ebx,[hscrl_top]
951
	add	ebx,[hscrl_size]
952
	mov	di,bx
953
	shl	ebx,16
954
	mov	bx,word[p_info.client_box.width]
955
	sub	bx,di
956
	sub	bx,SCRLW*2
957
	jle	@f
958
	mcall
959
    @@:
960
;        mov     eax,ebx
961
;        shr     eax,16
962
;        add     bx,ax
963
;        mov     ecx,[bot_ofs-2]
964
;        mov     cx,word[bot_ofs]
965
;        sub     ecx,SCRLW*65536+2
966
;        mcall   38,,,[sc.work_graph];[sc.work_text]
967
;        mov     ebx,[p_info.x_size-2]
968
;        mov     bx,word[p_info.x_size]
969
;        sub     ebx,(SCRLW*2+6)*65536+(SCRLW*2+6)
970
;        mcall
971
	mov	ebx,[p_info.client_box.width]
972
;       add     ebx,5*65536-5
973
	mov	ecx,[bot_ofs-2]
974
	mov	cx,word[bot_ofs]
975
	sub	ecx,(SCRLW+1)*65536+(SCRLW+1)
976
	mcall	38,,,[cl_3d_inset]
977
;------------------------------------------------
978
  .exit:
979
	popad
980
	ret
981
endf
982
 
983
;-----------------------------------------------------------------------------
984
func get_next_part ;//////////////////////////////////////////////////////////
985
;-----------------------------------------------------------------------------
986
; Input:
987
;  ECX = current letter
988
;  ESI = string
989
; Output:
990
;  ECX = color
991
;  EDX = string
992
;  ESI = length
993
;-----------------------------------------------------------------------------
994
	cmp	[asm_mode],0
995
	je	.plain.text
996
	xor	ebx,ebx
997
	mov	edx,ecx
998
	add	esi,ecx
999
	mov	edi,symbols
1000
	mov	al,[esi]
1001
	cmp	al,';'
1002
	je	.comment
1003
	mov	ecx,symbols.size
1004
	repne	scasb
1005
	je	.symbol
1006
	cmp	al,'$'
1007
	jne	@f
1008
	mov	edi,symbols
1009
	mov	al,[esi+1]
1010
	mov	ecx,symbols.size
1011
	repne	scasb
1012
	je	.not_symbol
1013
	jmp	.number
1014
    @@: cmp	al,'0'
1015
	jb	@f
1016
	cmp	al,'9'
1017
	jbe	.number
1018
    @@: cmp	al,"'"
1019
	je	.string
1020
	cmp	al,'"'
1021
	je	.string
1022
  .not_symbol:
1023
	inc	ebx
1024
	inc	edx
1025
	cmp	edx,[cur_line_len];LINE_WIDTH
1026
	jge	@f
1027
	mov	edi,symbols
1028
	mov	al,[esi+ebx]
1029
	cmp	al,';'
1030
	je	@f
1031
	mov	ecx,symbols.size
1032
	repne	scasb
1033
	jne	.not_symbol
1034
    @@: mov	ecx,edx
1035
	mov	edx,esi
1036
	mov	esi,ebx
1037
	mov	eax,[color_tbl+4*0]
1038
	ret
1039
  .symbol:
1040
	inc	ebx
1041
	inc	edx
1042
	cmp	edx,[cur_line_len];LINE_WIDTH
1043
	jge	@f
1044
	mov	edi,symbols
1045
	mov	al,[esi+ebx]
1046
	mov	ecx,symbols.size
1047
	repne	scasb
1048
	je	.symbol
1049
    @@: mov	ecx,edx
1050
	mov	edx,esi
1051
	mov	esi,ebx
1052
	mov	eax,[color_tbl+4*4]
1053
	ret
1054
  .comment:
1055
	neg	edx
1056
	add	edx,[cur_line_len];LINE_WIDTH
1057
	xchg	edx,esi
1058
	mov	ecx,[cur_line_len];LINE_WIDTH
1059
	mov	eax,[color_tbl+4*3]
1060
	ret
1061
  .number:
1062
	inc	ebx
1063
	inc	edx
1064
	cmp	edx,[cur_line_len];LINE_WIDTH
1065
	jge	@f
1066
	mov	edi,symbols
1067
	mov	al,[esi+ebx]
1068
	cmp	al,';'
1069
	je	@f
1070
	mov	ecx,symbols.size
1071
	repne	scasb
1072
	jne	.number
1073
    @@: mov	ecx,edx
1074
	mov	edx,esi
1075
	mov	esi,ebx
1076
	mov	eax,[color_tbl+4*1]
1077
	ret
1078
  .string:
1079
	inc	ebx
1080
	inc	edx
1081
	cmp	edx,[cur_line_len];LINE_WIDTH
1082
	jge	@f
1083
	cmp	[esi+ebx],al
1084
	jne	.string
1085
	inc	ebx
1086
	inc	edx
1087
    @@:
1088
	mov	ecx,edx
1089
	mov	edx,esi
1090
	mov	esi,ebx
1091
	mov	eax,[color_tbl+4*2]
1092
	ret
1093
  .plain.text:
1094
	mov	edx,[cur_line_len];LINE_WIDTH
1095
	xchg	edx,esi
1096
	mov	ecx,[cur_line_len];LINE_WIDTH
1097
	mov	eax,[color_tbl+4*0]
1098
	ret
1099
endf
1100
 
1101
;-----------------------------------------------------------------------------
1102
func writepos ;///// WRITE POSITION //////////////////////////////////////////
1103
;-----------------------------------------------------------------------------
1104
	cmp	[do_not_draw],1  ; return if drawing is not permitted
1105
	jae	.exit
1106
	pusha
1107
 
1108
;       mcall   9,p_info,-1
1109
 
1110
	mov	ecx,[p_info.client_box.height-2]
1111
	mov	cx,word[p_info.client_box.height]
1112
	sub	ecx,STATH*65536
1113
;        mpack   ebx,6*13,6*13
1114
;        add     ebx,[left_ofs-2]
1115
;        add     ebx,[left_ofs]
1116
	mcall	38,<6*13,6*13>,,[cl_3d_inset]
1117
 
1118
	pushad
1119
;       sub     ebx,(6*13+1)*65536-1
1120
;       sub     ebx,[left_ofs]
1121
	mov	cx,STATH+1
1122
	mcall	13,<0,6*13>,,[cl_3d_normal]
1123
	mcall	,<6*13+1,6*(s_modified.size+2)-1>
1124
	mov	ebx,(6*(s_modified.size+15)+1)*65536
1125
	mov	bx,word[p_info.client_box.width]
1126
	sub	bx,6*(s_modified.size+15)
1127
	mcall
1128
	popad
1129
 
1130
	add	ebx,6*(s_modified.size+2)*65536+6*(s_modified.size+2)
1131
	mcall
1132
 
1133
	and	ecx,0x0000FFFF
1134
	push	ecx
1135
 
1136
	mov	eax,[pos.y]
1137
	inc	eax
1138
	mov	ecx,10
1139
	mov	edi,p_info+0x100;htext2.pos1
1140
	cld
1141
	call	uint2str
1142
	mov	al,','
1143
	stosb
1144
	mov	eax,[pos.x]
1145
	inc	eax
1146
	call	uint2str
1147
 
1148
	pop	ebx
1149
 
1150
	lea	esi,[edi-p_info-0x100]
1151
	lea	edi,[esi*3]
1152
	shl	edi,16
1153
 
1154
;       add     ebx,[left_ofs-2]
1155
	add	ebx,(1+6*6+3)*65536-STATH/2-3
1156
	sub	ebx,edi
1157
	mcall	4,,[sc.work_text],p_info+0x100
1158
 
1159
	cmp	[modified],0
1160
	je	@f
1161
	and	ebx,0x0000FFFF
1162
;       add     ebx,[left_ofs-2]
1163
	add	ebx,(1+12*6+12+1)*65536
1164
	mcall	,,,s_modified,s_modified.size
1165
 
1166
    @@: cmp	[s_status],0
1167
	je	@f
1168
	and	ebx,0x0000FFFF
1169
	add	ebx,6*(s_modified.size+16)*65536
1170
	or	ecx, 80000000h
1171
	mcall	,,,[s_status]
1172
 
1173
    @@: popa
1174
 
1175
  .exit:
1176
	ret
1177
endf
1178
 
1179
;-----------------------------------------------------------------------------
1180
func print_text ;/////////////////////////////////////////////////////////////
1181
;-----------------------------------------------------------------------------
1182
	pusha
1183
;        mov     ebx,(LBTNW+5+2)*65536
1184
	mov	bx,word[p_info.box.width]
1185
;        sub     bx,LBTNW+RBTNW+10+3
1186
	mov	ecx,[ya-2]
1187
;        mov     cx,ABTNH+1
1188
	mcall	13,,,[sc.work]
1189
;        mov     ebx,(LBTNW+5+2+4)*65536+ABTNH/2-3
1190
	add	ebx,[ya]
1191
	mov	eax,[p_info.box.width]
1192
;        sub     eax,LBTNW+RBTNW+10+8
1193
	push	eax
1194
	cdq
1195
	mov	ecx,6
1196
	div	ecx
1197
	cmp	eax,PATHL
1198
	jbe	@f
1199
	mov	eax,PATHL
1200
    @@: mov	esi,eax
1201
	mcall	4,,[color_tbl+0],[addr]
1202
 
1203
	mov	eax,[ya]
1204
	mov	ebx,eax
1205
;        add     eax,ABTNH/2-6
1206
	shl	eax,16
1207
	add	eax,ebx
1208
;        add     eax,ABTNH/2-6+11
1209
	mov	ecx,eax
1210
	imul	eax,[temp],6
1211
	pop	ebx
1212
	cmp	eax,ebx
1213
	jae	@f
1214
;        add     eax,LBTNW+5+2+4
1215
	mov	ebx,eax
1216
	shl	eax,16
1217
	add	ebx,eax
1218
	mcall	38,,,[color_tbl+0]
1219
 
1220
    @@: popa
1221
	ret
1222
endf
1223
 
1224
func draw_framerect ; ebx,ecx
1225
	push	ebx ecx
1226
 
1227
	add	bx,[esp+6]
1228
	mov	cx,[esp+2]
1229
	dec	ebx
1230
	mcall	38,,,[cl_3d_inset]
1231
	add	cx,[esp]
1232
	rol	ecx,16
1233
	add	cx,[esp]
1234
	sub	ecx,0x00010001
1235
	mcall
1236
 
1237
	mov	ebx,[esp+4]
1238
	mov	ecx,[esp]
1239
	mov	bx,[esp+6]
1240
	add	cx,[esp+2]
1241
	dec	ecx
1242
	mcall
1243
	add	bx,[esp+4]
1244
	rol	ebx,16
1245
	add	bx,[esp+4]
1246
	sub	ebx,0x00010001
1247
	mcall
1248
 
1249
	add	esp,8
1250
	ret
1251
endf