Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1863 yogev_ezra 1
; 15/III 2010 staper@inbox.ru
2
 
3
appname equ 'Программируемый микрокалькулятор '
4
version    equ ''
5
 
6
include 'macros.inc'
7
 
8
header '01',1,START,I_END,(D_END+0x100),(D_END+0x100),0,cur_dir_path
9
 
10
include 'opcodes.inc'
11
include 'proc32.inc'
12
include 'MASMFpuLib.asm'
13
include 'editbox_ex.mac'
14
include 'load_lib.mac'
15
include 'macroPRMK.inc'
16
 
17
_flags = 0x0
18
;0  1 - исполнение программы
19
;1  1 - аварийный останов, не используется
20
;2-
21
;3  1 - нажата F
22
;4  1 - нажата K
23
;5  1 - режим программирования
24
;6  1 - заполнение экспоненты
25
;7  1 - регистры подняты
26
;8  1 - дополнение команды (0х4?,0х6? и пр.)
27
;9  1 - дозапись команды (адрес перехода после ОПКОДа)
28
;10 1 - необходимо обнулить экранную строку, но не показывать её, поднять регистры
29
;11 1 - нажата П
30
;12 1 - нажата ИП
31
;13 1 - скрывать регистры и программу
32
;25-27 - используются в диалоге сохранениея/загрузки
33
;28-
34
;29 - "sk" в key
35
;30 0 - трансцендентые функции представлены в радианах, иначе 31
36
;31 0/1 - трансцендентые функции представлены в градах/градусах
37
 
38
START:
39
	load_library	boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\
40
	err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i
41
 
42
	mcall	40,0x7
43
	mcall	48,4
44
	mov	[scin_height],eax
45
 
46
;определяем длину строки с параметрами
47
	mov	esi,buf_cmd_lin
48
	xor	ecx,ecx
49
@@:	cmp	byte [esi+ecx],0
50
	je	@f
51
	inc	ecx
52
	jmp	@b
53
@@:	mov	dword [edit2.size],ecx
54
	mov	dword [edit2.pos],ecx
55
 
56
	mcall	68,11
57
	cmp	dword [edit2.pos],0
58
	je	@f
59
	call	load_prog
60
@@:
61
 
62
red:
63
	call draw_window
64
still:
65
	test	[flags],(1 shl 0)
66
	jnz	main_loop
67
	mcall	10
68
.0:	dec	eax
69
	jz	red
70
	dec	eax
71
	jz	key
72
	dec	eax
73
	jz	button
74
	sub	eax,3
75
	jz	mouse
76
	jmp	still
77
main_loop:
78
	mcall	11
79
	test	eax,eax
80
	jnz	still.0
81
	cmp	[schk],-1
82
	jne	@f
83
	btr	[flags],0
84
	mcall	55,55,,,sound_data
85
	jmp	still
86
@@:	movzx	esi,[schk]
87
	movzx	eax, byte [esi+PMEM]
88
	shl	eax,2
89
	add	eax,OPCODEtable
90
	call	dword [eax]
91
	call	draw_schk
92
	call	draw_prog
93
	test	[flags],(1 shl 0)
94
	jz	@f
95
	mcall	5,[_pause]
96
	jmp	still
97
@@:	mcall	55,55,,,sound_data
98
	jmp	still
99
 
100
mouse:	if 0
101
	push	dword scroll_bar_data_vertical
102
	call	[scrollbar_ver_mouse]
103
	endf
104
	jmp	still
105
 
106
button:
107
	mcall	17
108
	dec	ah
109
	jnz	@f
110
	mcall	-1
111
@@:	cmp	ah,31
112
	jae	.grd
113
	movzx	eax,ah
114
	cmp	eax,30
115
	jg	still
116
	shl	eax,2
117
	call	dword [eax+but_table-4]
118
	test	[flags],(1 shl 5)
119
	jz	@f
120
	call	ftos
121
	call	draw_string
122
	call	draw_prog
123
@@:	call	draw_schk
124
	jmp	still
125
.grd:	cmp	ah,31
126
	jne	@f
127
	btr	[flags],30
128
	call	set_but
129
	jmp	still
130
@@:	cmp	ah,32
131
	jne	@f
132
	bts	[flags],30
133
	btr	[flags],31
134
	call	set_but
135
	jmp	still
136
@@:	cmp	ah,33
137
	jne	@f
138
	bts	[flags],30
139
	bts	[flags],31
140
	call	set_but
141
@@:	cmp	ah,34
142
	jne	@f
143
	btc	[flags],13
144
	jc	.331
145
	mcall	67,-1,-1,198,-1
146
	jmp	still
147
	.331:
148
	mcall	67,-1,-1,485,-1
149
@@:	jmp	still
150
 
151
key:
152
	mcall	2
153
@@:	cmp	ah,12		;load
154
	jne	@f
155
	bt	[flags],27
156
	jc	still
157
	bt	[flags],26
158
	jc	still
159
	bts	[flags],25
160
	call	window_load_save
161
	jmp	still
162
@@:	cmp	ah,19		;save
163
	jne	@f
164
	bt	[flags],27
165
	jc	still
166
	bt	[flags],26
167
	jc	still
168
	btr	[flags],25
169
	call	window_load_save
170
	jmp	still
171
 
172
@@:	push	dword edit1
173
	call	[edit_box_key]
174
 
175
.0:	call	draw_schk
176
 
177
	cmp	[edit1.pos],2
178
	jb	still
179
	test	[flags],(1 shl 29)
180
	jnz	@f
181
	cmp	word [txt.edbox],"sk"; or "BP" or "Bp" or "bP"
182
	jne	@f
183
	bts	[flags],29
184
	mov	word [txt.edbox],0x2020
185
	mov	[edit1.size],0
186
	mov	[edit1.pos],0
187
	push	dword edit1
188
	call	[edit_box_draw]
189
	jmp	key.0
190
@@:	mov	ah,[txt.edbox]
191
	sub	ah,48
192
	cmp	ah,9
193
	jbe	.1
194
	sub	ah,7
195
	cmp	ah,15
196
	jbe	.1
197
	sub	ah,32
198
.1:	mov	al,[txt.edbox+1]
199
	sub	al,48
200
	cmp	al,9
201
	jbe	.2
202
	sub	al,7
203
	cmp	al,15
204
	jbe	.1
205
	sub	al,32
206
.2:	shl	al,4
207
	shr	ax,4
208
	mov	[edit1.size],0
209
	mov	[edit1.pos],0
210
	test	[flags],(1 shl 29)
211
	jnz	.4
212
	movzx	ebx,[schk]
213
	add	ebx,PMEM
214
	mov	[ebx],al
215
	inc	[schk]
216
	jmp	.3
217
.4:	mov	[schk],al
218
	btr	[flags],29
219
.3:	call	draw_schk
220
	mov	word [txt.edbox],0x2020
221
	push	dword edit1
222
	call	[edit_box_draw]
223
	call	draw_prog
224
	test	[flags],(1 shl 5)
225
	jz	@f
226
	call	ftos
227
	call	draw_string
228
@@:	jmp	key.0
229
 
230
 
231
 align 4
232
 
233
but_table:
234
 
235
dd	.Cx,	.vp,	.sign,	.dot,	.0
236
dd	.up,	.xy,	_3_,	_2_,	_1_
237
dd	.min,	.div,	_6_,	_5_,	_4_
238
dd	.plus,	.x,	_9_,	_8_,	_7_
239
dd	.PP,	.BP,	.p,	.ip,	.K
240
dd	.Sp,	.Vo,	.shgl,	.shgr,	.F
241
 
242
.BP:	test [flags],(1 shl 5)
243
	jnz @f
244
	bts [flags],9
245
	ret
246
    @@:	movzx eax,[schk]
247
	add eax,PMEM
248
	inc [schk]
249
	test [flags],(1 shl 3)
250
	jnz @f
251
	test [flags],(1 shl 4)
252
	jz .BP0
253
		mov [dop8],0x80
254
		bts [flags],8
255
		btr [flags],4
256
		ret
257
	.BP0:	mov byte [eax],0x51
258
		bts [flags],9
259
		ret
260
	@@:	mov byte [eax],0x58
261
		bts [flags],9
262
		btr [flags],3
263
		ret
264
.shgl:	test [flags],(1 shl 5)
265
	jnz @f
266
	ret
267
    @@: test [flags],(1 shl 3)
268
	jnz @f
269
	test [flags],(1 shl 4)
270
	jz .shgl0
271
	mov [dop8],0xE0
272
	bts [flags],8
273
	btr [flags],4
274
	ret
275
	.shgl0:
276
	dec [schk]
277
	ret
278
    @@: movzx eax,[schk]
279
	add eax,PMEM
280
	inc [schk]
281
	mov byte [eax],0x5E
282
	bts [flags],9
283
	btr [flags],3
284
	ret
285
 
286
.shgr:	test [flags],(1 shl 5)
287
	jnz @f
288
	ret
289
    @@: test [flags],(1 shl 3)
290
	jnz @f
291
	test [flags],(1 shl 4)
292
	jz .shgr0
293
	mov [dop8],0xC0
294
	bts [flags],8
295
	btr [flags],4
296
	ret
297
	.shgr0:
298
	inc [schk]
299
	ret
300
    @@: movzx eax,[schk]
301
	add eax,PMEM
302
	inc [schk]
303
	mov byte [eax],0x5C
304
	bts [flags],9
305
	btr [flags],3
306
	ret
307
 
308
.PP:	test [flags],(1 shl 5)
309
	jnz .PPprg
310
	mov eax,0x53
311
	jmp .to_opcode
312
	.PPprg:
313
	movzx eax,[schk]
314
	add eax,PMEM
315
	inc [schk]
316
	test [flags],(1 shl 3)
317
	jnz @f
318
	test [flags],(1 shl 4)
319
	jz .PP0
320
	mov [dop8],0xA0
321
	bts [flags],8
322
	btr [flags],4
323
	dec [schk]
324
	ret
325
	.PP0:
326
	mov byte [eax],0x53
327
	bts [flags],9
328
	ret
329
    @@: mov byte [eax],0x5A
330
	bts [flags],9
331
	btr [flags],3
332
	ret
333
.Vo:	test [flags],(1 shl 5)
334
	jnz .Voprg
335
	mov eax,0x52
336
	jmp .to_opcode
337
	.Voprg:
338
	movzx eax,[schk]
339
	add eax,PMEM
340
	inc [schk]
341
	test [flags],(1 shl 3)
342
	jnz @f
343
	test [flags],(1 shl 4)
344
	jz .Vo0
345
	mov [dop8],0x90
346
	bts [flags],8
347
	btr [flags],4
348
	dec [schk]
349
	ret
350
	.Vo0:
351
	mov byte [eax],0x52
352
	ret
353
    @@: mov byte [eax],0x59
354
	bts [flags],9
355
	btr [flags],3
356
	ret
357
 
358
.Sp:	test [flags],(1 shl 5)
359
	jnz .Spprg
360
	mov eax,0x50
361
	jmp .to_opcode
362
	.Spprg:
363
	movzx eax,[schk]
364
	add eax,PMEM
365
	inc [schk]
366
	test [flags],(1 shl 3)
367
	jnz @f
368
	test [flags],(1 shl 4)
369
	jz .Sp0
370
	mov [dop8],0x70
371
	bts [flags],8
372
	btr [flags],4
373
	dec [schk]
374
	ret
375
	.Sp0:
376
	mov byte [eax],0x50
377
	ret
378
    @@: mov byte [eax],0x57
379
	bts [flags],9
380
	btr [flags],3
381
	ret
382
.ip:	test [flags],(1 shl 5)
383
	jnz .ipprg
384
	bts [flags],12
385
	ret
386
	.ipprg:
387
	test [flags],(1 shl 3)
388
	jnz @f
389
	test [flags],(1 shl 4)
390
	jz .ip0
391
	mov [dop8],0xD0
392
	bts [flags],8
393
	btr [flags],4
394
	ret
395
	.ip0:
396
	mov [dop8],0x60
397
	bts [flags],8
398
	ret
399
    @@: movzx eax,[schk]
400
	add eax,PMEM
401
	inc [schk]
402
	mov byte [eax],0x5D
403
	bts [flags],9
404
	btr [flags],3
405
	ret
406
 
407
 
408
 
409
.p:	test [flags],(1 shl 5)
410
	jnz .pprg
411
	bts [flags],11
412
.nop:	ret
413
	.pprg:
414
	test [flags],(1 shl 3)
415
	jnz @f
416
	test [flags],(1 shl 4)
417
	jz .p0
418
	mov [dop8],0xB0
419
	bts [flags],8
420
	btr [flags],4
421
	ret
422
	.p0:
423
	mov [dop8],0x40
424
	bts [flags],8
425
	ret
426
    @@: movzx eax,[schk]
427
	add eax,PMEM
428
	inc [schk]
429
	mov byte [eax],0x5B
430
	bts [flags],9
431
	btr [flags],3
432
	ret
433
 
434
 
435
 
436
.F:	bts [flags],3
437
	ret
438
.K:	bts [flags],4
439
	ret
440
.Cx:	test [flags],(1 shl 5)
441
	jnz .Cxprg
442
	test [flags],(1 shl 11)
443
	jnz .cx4d
444
	test [flags],(1 shl 12)
445
	jnz .cx6d
446
	test [flags],(1 shl 9)
447
	jnz .Cx0
448
	mov eax,0x0D
449
	jmp .to_opcode
450
		.cx4d:	mov eax,0x4d
451
		jmp .to_opcode
452
		.cx6d:	mov eax,0x6d
453
		jmp .to_opcode
454
	.Cxprg:
455
	test [flags],(1 shl 8)
456
	jz .Cx0
457
	add [dop8],0x0D
458
	jmp .dop8
459
	.Cx0:
460
	test [flags],(1 shl 9)
461
	jz .Cx1
462
	mov al,0x0D
463
	jmp .dop9
464
	.Cx1:
465
	movzx eax,[schk]
466
	add eax,PMEM
467
	mov byte [eax],0x0D
468
	inc [schk]
469
	ret
470
.vp:	test [flags],(1 shl 3)
471
	jnz .vpsetprg
472
	test [flags],(1 shl 5)
473
	jnz .vpprg
474
	test [flags],(1 shl 11)
475
	jnz .vp4c
476
	test [flags],(1 shl 12)
477
	jnz .vp6c
478
	test [flags],(1 shl 9)
479
	jnz .vp0
480
	mov eax,0x0C
481
	jmp .to_opcode
482
		.vp4c:	mov eax,0x4c
483
		jmp .to_opcode
484
		.vp6c:	mov eax,0x6c
485
		jmp .to_opcode
486
	.vpsetprg:
487
	test [flags],(1 shl 5)
488
	jz @f
489
	ret
490
	.vpprg:
491
	test [flags],(1 shl 8)
492
	jz .vp0
493
	add [dop8],0x0c
494
	jmp .dop8
495
	.vp0:
496
	test [flags],(1 shl 9)
497
	jz .vp1
498
	mov al,0x0C
499
	jmp .dop9
500
	.vp1:
501
	movzx eax,[schk]
502
	add eax,PMEM
503
	mov byte [eax],0x0C
504
	inc [schk]
505
	ret
506
    @@: bts [flags],5
507
	btr [flags],3
508
	ret
509
.sign:	test [flags],(1 shl 5)
510
	jnz .signprg
511
	test [flags],(1 shl 11)
512
	jnz .sign4b
513
	test [flags],(1 shl 12)
514
	jnz .sign6b
515
	test [flags],(1 shl 9)
516
	jnz .sign0
517
	mov eax,0x0B
518
	jmp .to_opcode
519
		.sign4b:	mov eax,0x4b
520
				jmp .to_opcode
521
		.sign6b:	mov eax,0x6b
522
				jmp .to_opcode
523
	.signprg:
524
	test [flags],(1 shl 8)
525
	jz .sign0
526
		add [dop8],0x0B
527
		jmp .dop8
528
	.sign0:	test [flags],(1 shl 9)
529
		jz .sign1
530
			mov al,0x0B
531
			jmp .dop9
532
	.sign1:	test [flags],(1 shl 3)
533
		jnz @f
534
			movzx eax,[schk]
535
			add eax,PMEM
536
			mov byte [eax],0x0B
537
			inc [schk]
538
			ret
539
 	@@:	btr [flags],5
540
		btr [flags],3
541
		fld qword [S.X]
542
		call ftos
543
		call draw_string
544
		ret
545
.up:	test [flags],(1 shl 5)
546
	jnz .upprg
547
	test [flags],(1 shl 3)
548
	jnz .up0f
549
	test [flags],(1 shl 4)
550
	jnz .upK
551
	test [flags],(1 shl 11)
552
	jnz .up4e
553
	test [flags],(1 shl 12)
554
	jnz .up6e
555
	test [flags],(1 shl 9)
556
	jnz .up0
557
	mov eax,0x0E
558
	jmp .to_opcode
559
		.up0f:	mov eax,0x0F
560
		jmp .to_opcode
561
		.up4e:	mov eax,0x4e
562
		jmp .to_opcode
563
		.up6e:	mov eax,0x6e
564
		jmp .to_opcode
565
	.upprg:
566
	test [flags],(1 shl 8)
567
	jz .up0
568
		add [dop8],0x0E
569
		jmp .dop8
570
	.up0:	test [flags],(1 shl 9)
571
		jz .up1
572
			mov al,0x0E
573
			jmp .dop9
574
	.up1:	movzx eax,[schk]
575
		add eax,PMEM
576
		inc [schk]
577
		test [flags],(1 shl 3)
578
		jnz @f
579
		mov byte [eax],0x0E
580
		ret
581
	@@:	mov byte [eax],0x0F
582
		btr [flags],3
583
		ret
584
	.upK:	mov eax,0x3B
585
		jmp .to_opcode
586
 
587
.xy:	test [flags],(1 shl 5)
588
	jnz .xyprg
589
	test [flags],(1 shl 3)
590
	jnz .xy24
591
	mov eax,0x14
592
	jmp .to_opcode
593
		.xy24:	mov eax,0x24
594
		jmp .to_opcode
595
	.xyprg:
596
		movzx eax,[schk]
597
		add eax,PMEM
598
		inc [schk]
599
		test [flags],(1 shl 3)
600
		jnz @f
601
		mov byte [eax],0x14
602
		ret
603
	@@:	mov byte [eax],0x24
604
		btr [flags],3
605
		ret
606
.min:	test [flags],(1 shl 5)
607
	jnz .minprg
608
	test [flags],(1 shl 3)
609
	jnz .min21
610
	test [flags],(1 shl 9)
611
	jnz .min0
612
	mov eax,0x11
613
	jmp .to_opcode
614
		.min21: mov eax,0x21
615
		jmp .to_opcode
616
	.minprg:
617
		test [flags],(1 shl 8)
618
		jz .min0
619
			add [dop8],0x0F
620
			jmp .dop8
621
	.min0:	test [flags],(1 shl 9)
622
		jz .min1
623
			mov al,0x0F
624
			jmp .dop9
625
	.min1:	movzx eax,[schk]
626
		add eax,PMEM
627
		inc [schk]
628
		test [flags],(1 shl 3)
629
		jnz @f
630
		mov byte [eax],0x11
631
		ret
632
	@@:	mov byte [eax],0x21
633
		btr [flags],3
634
		ret
635
.div:	test [flags],(1 shl 5)
636
	jnz .divprg
637
	test [flags],(1 shl 3)
638
	jnz .div23
639
	mov eax,0x13
640
	jmp .to_opcode
641
		.div23: mov eax,0x23
642
		jmp .to_opcode
643
	.divprg:
644
	movzx eax,[schk]
645
	add eax,PMEM
646
	inc [schk]
647
	test [flags],(1 shl 3)
648
	jnz @f
649
	mov byte [eax],0x13
650
	ret
651
    @@: mov byte [eax],0x23
652
	btr [flags],3
653
	ret
654
.plus:	test [flags],(1 shl 5)
655
	jnz .plusprg
656
	test [flags],(1 shl 3)
657
	jnz .plus10
658
	mov eax,0x10
659
	jmp .to_opcode
660
		.plus10:	mov eax,0x20
661
		jmp .to_opcode
662
	.plusprg:
663
	movzx eax,[schk]
664
	add eax,PMEM
665
	inc [schk]
666
	test [flags],(1 shl 3)
667
	jnz @f
668
	mov byte [eax],0x10
669
	ret
670
    @@: mov byte [eax],0x20
671
	btr [flags],3
672
	ret
673
.x:	test [flags],(1 shl 5)
674
	jnz .xprg
675
	test [flags],(1 shl 3)
676
	jnz .x22
677
	mov eax,0x12
678
	jmp .to_opcode
679
		.x22:	mov eax,0x22
680
		jmp .to_opcode
681
	.xprg:
682
	movzx eax,[schk]
683
	add eax,PMEM
684
	inc [schk]
685
	test [flags],(1 shl 3)
686
	jnz @f
687
	mov byte [eax],0x12
688
	ret
689
    @@: mov byte [eax],0x22
690
	btr [flags],3
691
	ret
692
.dot:	test [flags],(1 shl 5)
693
	jnz .dotprg
694
	test [flags],(1 shl 3)
695
	jnz .dot25
696
	test [flags],(1 shl 11)
697
	jnz .dot4a
698
	test [flags],(1 shl 12)
699
	jnz .dot6a
700
	test [flags],(1 shl 9)
701
	jnz .dot0
702
	mov eax,0x0A
703
	jmp .to_opcode
704
		.dot25: mov eax,0x25
705
		jmp .to_opcode
706
		.dot4a: mov eax,0x4a
707
		jmp .to_opcode
708
		.dot6a: mov eax,0x6a
709
		jmp .to_opcode
710
	.dotprg:
711
		test [flags],(1 shl 8)
712
		jz .dot0
713
			add [dop8],0x0A
714
			jmp .dop8
715
	.dot0:	test [flags],(1 shl 9)
716
		jz .dot1
717
		mov al,0x0A
718
		jmp .dop9
719
	.dot1:	movzx eax,[schk]
720
		add eax,PMEM
721
		inc [schk]
722
		test [flags],(1 shl 3)
723
		jnz @f
724
		mov byte [eax],0x0A
725
		ret
726
	@@:	mov byte [eax],0x25
727
		btr [flags],3
728
		ret
729
 
730
.0:	test [flags],(1 shl 5)
731
	jnz .0prg
732
	test [flags],(1 shl 3)
733
	jnz .015
734
	test [flags],(1 shl 11)
735
	jnz .040
736
	test [flags],(1 shl 12)
737
	jnz .060
738
	test [flags],(1 shl 9)
739
	jnz .00
740
	mov eax,0
741
	jmp .to_opcode
742
		.015:	mov eax,0x15
743
		jmp .to_opcode
744
		.040:	mov eax,0x40
745
		jmp .to_opcode
746
		.060:	mov eax,0x60
747
		jmp .to_opcode
748
	.0prg:
749
		test [flags],(1 shl 8)
750
		jz .00
751
			add [dop8],0x00
752
			jmp .dop8
753
	.00:	test [flags],(1 shl 9)
754
		jz .01
755
			mov al,0
756
			jmp .dop9
757
	.01:	movzx eax,[schk]
758
		add eax,PMEM
759
		inc [schk]
760
		test [flags],(1 shl 4)
761
		jz @f
762
		mov ebx,0
763
		test [flags],(1 shl 8)
764
		jnz .dop8
765
		test [flags],(1 shl 9)
766
		jnz .dop9
767
		mov byte [eax],0x54
768
		bts [flags],4
769
		ret
770
	@@:	test [flags],(1 shl 3)
771
		jnz @f
772
		mov byte [eax],0x00
773
		ret
774
	@@:	mov byte [eax],0x15
775
		btr [flags],3
776
		ret
777
 
778
.dop8:	movzx eax,[schk]
779
	add eax,PMEM
780
	inc [schk]
781
	mov bl,[dop8]
782
	mov byte [eax],bl
783
	btr [flags],8
784
	ret
785
.dop9:	cmp [mov3],0
786
	jne @f
787
	inc [mov3]
788
	shl al,4
789
	mov [dop9],al
790
	ret
791
    @@: mov [mov3],0
792
	add al,[dop9]
793
	test [flags],(1 shl 5)
794
	jz @f
795
	movzx ebx,[schk]
796
	add ebx,PMEM
797
	mov [ebx],al
798
	inc [schk]
799
	btr [flags],9
800
	ret
801
    @@: mov [schk],al
802
	btr [flags],9
803
	call draw_prog
804
	ret
805
 
806
 align 4
807
.to_opcode:
808
	shl eax,2
809
	add eax,OPCODEtable
810
	mov ebx,[eax]
811
	jmp ebx
812
 
813
dop8 db 0
814
dop9 db 0
815
mov3 db 0
816
 
817
 
818
_1_:	buttabnum 1,0x16,0x41,0x61,0
819
_2_:	buttabnum 2,0x17,0x42,0x62,0
820
_3_:	buttabnum 3,0x18,0x43,0x63,0
821
_4_:	buttabnum 4,0x19,0x44,0x64,0x31
822
_5_:	buttabnum 5,0x1A,0x45,0x65,0x32
823
_6_:	buttabnum 6,0x1B,0x46,0x66,0
824
_7_:	buttabnum 7,0x1C,0x47,0x67,0x34
825
_8_:	buttabnum 8,0x1D,0x48,0x68,0x35
826
_9_:	buttabnum 9,0x1E,0x49,0x69,0x36
827
 
828
 
829
 
830
 
831
 align 4
832
stof:
833
	mov esi,string
834
	inc esi
835
	cmp word [esi],0x2030
836
	je .null
837
	mov dword [buf],0
838
	mov dword [buf+4],0
839
	mov word [buf+8],0
840
	xor ecx,ecx
841
@@:	cmp byte [esi+ecx],'.'
842
	je .dot
843
	cmp byte [esi+ecx],0x20
844
	je .int
845
	inc ecx
846
	cmp ecx,8
847
	jne @b
848
.int:	dec ecx
849
	call .tobcd
850
	fbld [buf]
851
	jmp .tosign
852
 
853
.dot:	push ecx
854
	dec ecx
855
	call .tobcd
856
	fbld [buf]
857
	pop ecx
858
	add esi,ecx
859
	inc esi
860
	mov ebx,ecx
861
	dec ebx
862
	xor ecx,ecx
863
@@:	cmp byte [esi+ecx],0x20
864
	je @f
865
	cmp ebx,8
866
	je @f
867
	inc ecx
868
	inc ebx
869
	jmp @b
870
@@:	cmp ecx,0
871
	je .tosign
872
	push ecx
873
	dec ecx
874
	mov dword [buf],0
875
	mov dword [buf+4],0
876
	mov word [buf+8],0
877
	call .tobcd
878
	fbld [buf]
879
	pop ecx
880
	mov [perem],10
881
@@:	fidiv [perem]
882
	loop @b
883
	faddp
884
	jmp .tosign
885
 
886
 
887
.tobcd:
888
	mov edi,buf
889
@@:	mov al,[esi+ecx]
890
	sub al,48
891
	test ecx,ecx
892
	jz @f
893
	shl al,4
894
	mov ah,[esi+ecx-1]
895
	sub ah,48
896
	shr ax,4
897
	mov [edi],al
898
	inc edi
899
	dec ecx
900
	jz .tobcd1
901
	dec ecx
902
	jnz @b
903
	mov al,[esi]
904
	sub al,48
905
@@:	mov [edi],al
906
.tobcd1:
907
ret
908
 
909
 
910
.tosign:
911
	cmp byte [string],'-'
912
	jne @f
913
	fchs
914
@@:	cmp byte [string+12],0x20
915
	je .ret
916
	cmp byte [string+12],0x30
917
	jne @f
918
	cmp byte [string+11],0x30
919
	je .ret
920
@@:	mov al,[string+12]
921
	sub al,48
922
	mov ah,[string+11]
923
	sub ah,48
924
	shl al,4
925
	shr ax,4
926
	mov [buf],al
927
	mov dword [buf+1],0
928
	mov dword [buf+5],0
929
	fbld [buf]
930
	fistp [perem]
931
	mov ecx,[perem]
932
	mov [perem],10
933
	cmp byte [string+10],'-'
934
	je  .@@f
935
@@:	fimul [perem]
936
	loop @b
937
	ret
938
.@@f:	fidiv [perem]
939
	loop .@@f
940
.ret:	ret
941
.null:	fldz
942
ret
943
 
944
 align 4
945
ftos:
946
	test [flags],(1 shl 5)
947
	jnz .prg
948
	mov esi,string
949
	mov dword [esi],0x20202020
950
	mov dword [esi+4],0x20202020
951
	mov dword [esi+8],0x20202020
952
	mov byte [esi+12],0x20
953
;       fld st0
954
;       fxtract
955
;       fstp st0
956
;       fabs
957
;       fistp [perem]
958
;       mov eax,[perem]
959
;       cmp eax,0x1a
960
;       jg .1
961
;       stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI
962
;       mov ecx,9
963
;       mov esi,string
964
;       mov edi,buf2
965
;@@:    mov al,[edi]
966
;       test al,al
967
;       jz @f
968
;       mov [esi],al
969
;       inc esi
970
;       inc edi
971
;       loop @b
972
;@@:    ret
973
 
974
.1:	stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI
975
	mov ecx,10
976
	mov esi,string
977
	mov edi,buf2
978
@@:	mov al,[edi]
979
	test al,al
980
	jz .ret
981
	mov [esi],al
982
	inc esi
983
	inc edi
984
	loop @b
985
;       add edi,9
986
@@:	cmp byte [edi],0
987
	je @f
988
	inc edi
989
	jmp @b
990
@@:	mov ax,[edi-2]
991
	mov [string+11],ax
992
	mov al,[edi-5]
993
	mov [string+10],al
994
.ret:
995
;        cmp word [string+11],0x2020
996
;        je .ret2
997
	cmp byte [string+10],'-'
998
	je .ret2
999
	mov ax,[string+11]
1000
	sub ax,0x3030
1001
	xchg ah,al
1002
	shl al,4
1003
	shr ax,4
1004
	cmp al,7
1005
	jge .ret2
1006
	mov word [string+10],'  '
1007
	mov byte [string+12],' '
1008
	cmp al,0
1009
	je .ret2
1010
	xor edx,edx
1011
@@:	mov bl,[string+2+edx]
1012
	mov bh,[string+2+edx+1]
1013
	xchg bh,bl
1014
	mov [string+2+edx],bx
1015
	inc edx
1016
	dec al
1017
	jnz @b
1018
.ret2:	mov ecx,7
1019
@@:	cmp byte [string+2+ecx],'0'
1020
	jne @f
1021
	mov byte [string+2+ecx],' '
1022
	loop @b
1023
@@:	cmp byte [string+2+ecx],'.'
1024
	jne @f
1025
	mov byte [string+2+ecx],' '
1026
@@:	cmp byte [string+10],'+'
1027
	jne @f
1028
	mov byte [string+10],' '
1029
@@:
1030
ret
1031
.toascii:
1032
	shl ax,4
1033
	shr al,4
1034
	cmp al,10
1035
	sbb al,69h
1036
	das
1037
	rol ax,8
1038
	cmp al,10
1039
	sbb al,69h
1040
	das
1041
	ret
1042
.prg:	mov eax,0x20202020
1043
	mov dword [string],eax
1044
	mov dword [string+4],eax
1045
	mov dword [string+8],eax
1046
	xor eax,eax
1047
	mov al,[schk]
1048
	mov ebx,eax
1049
	call .toascii
1050
	mov [string+11],ax
1051
	cmp	[schk],3
1052
	jb @f
1053
	movzx eax,byte [PMEM+ebx-3]
1054
	call .toascii
1055
	mov [string+8],ax
1056
@@:	cmp	[schk],2
1057
	jb @f
1058
	movzx eax,byte [PMEM+ebx-2]
1059
	call .toascii
1060
	mov [string+5],ax
1061
@@:	cmp	[schk],1
1062
	jb @f
1063
	movzx eax,byte [PMEM+ebx-1]
1064
	call .toascii
1065
	mov [string+2],ax
1066
@@:
1067
ret
1068
 
1069
 
1070
;   *********************************************
1071
;   ******* WINDOW DEFINITIONS AND DRAW *********
1072
;   *********************************************
1073
 
1074
draw_window:
1075
	mcall	12,1
1076
 
1077
	mcall	48,3,sc,sizeof.system_colors
1078
 
1079
	mov	edx,[sc.work]
1080
	or	edx,0x34000000
1081
	mov	ecx,200
1082
	shl	ecx,16
1083
	add	ecx,[scin_height]
1084
	add	ecx,343
1085
	mcall	0,160 shl 16+485,,,,title
1086
 
1087
	mov	ebp,smesh
1088
	mcall	65,bmp_file+8,185*65536+262,2*65536+75,4,palitra
1089
 
1090
	mcall	13,13*65536+122,24*65536+20,0xffffff
1091
 
1092
	call	draw_string
1093
 
1094
	mcall	13,137*65536+32,48*65536+12,0x888888
1095
 
1096
	call	set_but
1097
	call	draw_registers
1098
	call	draw_stack
1099
	call	draw_prog
1100
 
1101
	mcall	8,176*65536+11,61*65536+10,35,0xdadada
1102
 
1103
	mov	edi,[sc.work]
1104
	or	edi,0x34000000
1105
	mcall	4,133*65536+63,0x81000000,txt.perek
1106
	mcall	,403*65536+4,,txt.prog
1107
	mcall	,403*65536+12,,txt.prog1
1108
	mcall	,380*65536+323,,txt.sk
1109
 
1110
	if 0
1111
	mov	[scroll_bar_data_vertical.all_redraw],1
1112
	push	dword scroll_bar_data_vertical
1113
	call	[scrollbar_ver_draw]
1114
	mov	[scroll_bar_data_vertical.all_redraw],0
1115
	endf
1116
	push	dword edit1
1117
	call	[edit_box_draw]
1118
 
1119
	;CK
1120
	call	draw_schk
1121
 
1122
	;обозначения регистров
1123
	mcall	4,240*65536+4,0x81000000,txt.regs
1124
	mov	word [perem],"0:"
1125
	mov	byte [perem+2],0
1126
	mov	ebx,210*65536+20
1127
	mov	edx,perem
1128
	push	dword 15
1129
@@:	cmp	dword [esp],5
1130
	je	@f
1131
.prevr: int	0x40
1132
	add	ebx,12
1133
	inc	byte [perem]
1134
	dec	dword [esp]
1135
	jnz	@b
1136
	jmp	.nextr
1137
@@:	add	byte [perem],7
1138
	jmp	.prevr
1139
.nextr: add	esp,4
1140
 
1141
	;обозначения стека
1142
	mcall	4,240*65536+220,0x81000000,txt.stk
1143
	mov	word [perem],"T:"
1144
	mov	byte [perem+2],0
1145
	mov	ebx,210*65536+240
1146
	mov	edx,perem
1147
	push	dword 5
1148
.firsts:	cmp	dword [esp],4
1149
	jne	@f
1150
	mov	byte [perem],"Z"
1151
	jmp	.prevs
1152
@@:	cmp	dword [esp],3
1153
	jne	@f
1154
	mov	byte [perem],"Y"
1155
	jmp	.prevs
1156
@@:	cmp	dword [esp],2
1157
	jne	@f
1158
	mov	byte [perem],"X"
1159
	jmp	.prevs
1160
@@:	cmp	dword [esp],1
1161
	jne	.prevs
1162
	mov	dword [perem],"X1"
1163
.prevs: int	0x40
1164
	add	ebx,12
1165
	dec	dword [esp]
1166
	jnz	.firsts
1167
.nexts: add	esp,4
1168
 
1169
	mcall	12,2
1170
ret
1171
 
1172
 align 4
1173
draw_string:
1174
;       mov     edi,[sc.work]
1175
	or	edi,0x34ffffff
1176
	mov	edx,edi
1177
	mcall	13,20*65536+105,30*65536+7
1178
	mcall	4,20*65536+30,0x900000ff,string,,
1179
ret
1180
 
1181
 align 4
1182
draw_schk:
1183
	test	[flags],(1 shl 13)
1184
	jnz	.ret
1185
	mov	edi,[sc.work]
1186
	or	edi,0x34000000
1187
	movzx	ecx,[schk]
1188
	mcall	47,0x020100,,400*65536+323,0x50000000,
1189
.ret:
1190
ret
1191
 
1192
 align 4
1193
set_but:
1194
	mov	ecx,34
1195
	mov	eax,8
1196
@@:	push	ecx
1197
	lea	ebx,[ecx+0x80000000+1]
1198
	int	0x40
1199
	pop	ecx
1200
	loop	@b
1201
 
1202
	xor	edi,edi
1203
	mov	esi,0xffffff
1204
	bt	[flags],30
1205
	jnc	@f
1206
	mov	esi,0x0
1207
@@:	mcall	8,140*65536+7,50*65536+7,32
1208
	mov	esi,0x0
1209
	add	ebx,9*65536
1210
	inc	edx
1211
	bt	[flags],30
1212
	jnc	@f
1213
	bt	[flags],31
1214
	jc	@f
1215
	mov	esi,0xffffff
1216
@@:	mcall
1217
	mov	esi,0
1218
	add	ebx,9*65536
1219
	inc	edx
1220
	bt	[flags],30
1221
	jnc	@f
1222
	bt	[flags],31
1223
	jnc	@f
1224
	mov	esi,0xffffff
1225
@@:	mcall
1226
 
1227
	mov	ecx,30
1228
	push	ecx
1229
	mov	ecx,89*65536+22
1230
.00:	mov	ebx,8*65536+27
1231
.0:	pop	eax
1232
	lea	edx,[eax+(1 shl 30) + 1]
1233
	push	eax
1234
	mcall	8,,,
1235
	mov	eax,ecx
1236
	pop	ecx
1237
	dec	ecx
1238
	jz	.ret
1239
	push	ecx
1240
	cmp	ecx,5
1241
	je	.1
1242
	cmp	ecx,10
1243
	je	.1
1244
	cmp	ecx,15
1245
	je	.1
1246
	cmp	ecx,20
1247
	je	.1
1248
	cmp	ecx,25
1249
	je	.1
1250
	add	ebx,36*65536
1251
	mov	ecx,eax
1252
	jmp	.0
1253
.1:	add	eax,42*65536
1254
	mov	ecx,eax
1255
	jmp	.00
1256
.ret:
1257
ret
1258
 
1259
 align 4
1260
draw_registers:
1261
	test	[flags],(1 shl 13)
1262
	jnz	.ret
1263
	mov	esi,R.0
1264
	mov	ecx,15
1265
	mov	edx,[sc.work]
1266
	or	edx,0x34000000
1267
	push	edx
1268
	mov	ebx,220*65536+150
1269
	push	ebx
1270
	mov	ebx,20*65536+9
1271
	push	ebx
1272
	push	esi ecx
1273
@@:	call	.ftoa
1274
	mov	ebx,[esp+12]
1275
	mov	ecx,[esp+8]
1276
	mov	edx,[esp+16]
1277
	mcall	13
1278
	mov	ebx,[esp+12]
1279
	mov	eax,[esp+8]
1280
	shr	eax,16
1281
	mov	bx,ax
1282
	mov	ecx,0;[esp+16]
1283
	add	ecx,0x80000000
1284
	mov	edx,buf2
1285
	mcall	4
1286
	dec	dword [esp]
1287
	jz	@f
1288
	add	dword [esp+4],8
1289
	mov	esi,[esp+4]
1290
	add	dword [esp+8],12*65536
1291
	jmp	@b
1292
@@:	add	esp,20
1293
.ret:
1294
ret
1295
 
1296
.ftoa:
1297
	fld qword [esi]
1298
	fld st0
1299
	fabs
1300
	fxtract
1301
	fstp st0
1302
	fabs
1303
	fistp [perem]
1304
	mov eax,[perem]
1305
	cmp eax,0x1a+16383
1306
	jge @f
1307
	cmp eax,0x1a
1308
	jge @f
1309
	stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL; or STR_SCI
1310
	fstp st0
1311
	ret
1312
@@:	stdcall FpuFLtoA,0,8,buf2,SRC1_FPU or SRC1_REAL or STR_SCI
1313
	fstp st0
1314
	ret
1315
 
1316
 align 4
1317
draw_stack:
1318
;       test    [flags],(1 shl 13)
1319
;       jnz     .ret
1320
	mov	esi,S.T
1321
	mov	ecx,5
1322
	mov	edx,[sc.work]
1323
	or	edx,0x34000000
1324
	push	edx
1325
	mov	ebx,220*65536+150
1326
	push	ebx
1327
	mov	ebx,240*65536+9
1328
	push	ebx
1329
	push	esi ecx
1330
@@:	call	draw_registers.ftoa
1331
	mov	ebx,[esp+12]
1332
	mov	ecx,[esp+8]
1333
	mov	edx,[esp+16]
1334
	mcall	13
1335
	mov	ebx,[esp+12]
1336
	mov	eax,[esp+8]
1337
	shr	eax,16
1338
	mov	bx,ax
1339
	mov	ecx,0;[esp+16]
1340
	add	ecx,0x80000000
1341
	mov	edx,buf2
1342
	mcall	4
1343
	dec	dword [esp]
1344
	jz	@f
1345
	sub	dword [esp+4],8
1346
	mov	esi,[esp+4]
1347
	add	dword [esp+8],12*65536
1348
	jmp	@b
1349
@@:	add	esp,20
1350
;.ret:
1351
ret
1352
 
1353
 align 4
1354
draw_prog:
1355
	test	[flags],(1 shl 13)
1356
	jnz	.ret
1357
	pushd	26
1358
	movzx	eax,[schk]
1359
	mov	[.sprog2],al
1360
	xor	edx,edx
1361
	div	dword [esp]
1362
	xor	edx,edx
1363
	mul	dword [esp]
1364
	mov	[.sprog],al
1365
	mov	edi,[sc.work]
1366
	or	edi,0x34000000
1367
	movzx	ecx, [.sprog]
1368
	add	ecx,26
1369
	sub	ecx,[esp]
1370
	mov	esi,0x5000459a
1371
	push	esi
1372
	cmp	cl,[.sprog2]
1373
	jne	@f
1374
	mov	esi,0x50cc0000
1375
@@:	mcall	47,0x020100,,400*65536+24,,
1376
	pop	esi
1377
	add	edx,30*65536
1378
	movzx	ecx,[.sprog]
1379
	add	ecx,PMEM+26
1380
	sub	ecx,[esp]
1381
	movzx	ecx, byte [ecx]
1382
	mcall
1383
	sub	edx,30*65536
1384
@@:	add	edx,11
1385
	dec	dword [esp]
1386
	jz	@f
1387
	movzx	ecx, [.sprog]
1388
	add	ecx,26
1389
	sub	ecx,[esp]
1390
	push	esi
1391
	cmp	cl,[.sprog2]
1392
	jne	.2
1393
	mov	esi,0x50cc0000
1394
.2:	mcall
1395
	pop	esi
1396
	add	edx,30*65536
1397
	movzx	ecx,[.sprog]
1398
	add	ecx,PMEM+26
1399
	sub	ecx,[esp]
1400
	movzx	ecx, byte [ecx]
1401
	mcall
1402
	sub	edx,30*65536
1403
	jmp	@b
1404
@@:	pop	eax
1405
.ret:
1406
ret
1407
.sprog db 0
1408
.sprog2 db 0
1409
 
1410
 
1411
 
1412
 
1413
 
1414
window_load_save:
1415
	popad
1416
	mcall	51,1,.thread,(.threat_stack+32*4)
1417
	pushad
1418
	ret
1419
.thread:
1420
	bts	[flags],26
1421
.red:
1422
	mcall	12,1
1423
	mov	edi,txt.load
1424
	bt	[flags],25
1425
	jc	@f
1426
	mov	edi,txt.save
1427
@@:	mcall	0,50*65536+300,0x70*65536+60,(0x34ffffff),,
1428
	mcall	8,<245,43>,<2,14>,100,0xaaaaaa
1429
	mcall	4,<252,5>,(0x80000000),txt.enter
1430
	push	dword edit2
1431
	call	[edit_box_draw]
1432
	mcall	12,2
1433
.still:
1434
	mcall	10
1435
	dec	al
1436
	jz	.red
1437
	dec	al
1438
	jz	.key
1439
	dec	al
1440
	jz	.button
1441
	jmp	.still
1442
.button:
1443
	mcall	17,1
1444
	cmp	ah,1
1445
	jne	@f
1446
  .end: btr	[flags],26
1447
	mcall	-1
1448
  @@:	cmp	ah,100
1449
	jne	.still
1450
	bt	[flags],25
1451
	jc	.ld
1452
  .sv:	call	save_prog
1453
	jnc	.end
1454
	jmp	.err
1455
  .ld:	call	load_prog
1456
	jnc	.end
1457
  .err: mcall	4,<5,19>,(0x80000000),txt.error
1458
	jmp	.still
1459
 
1460
 
1461
.key:
1462
	mcall	2
1463
	cmp	ah,13
1464
	jne	@f
1465
	bt	[flags],25
1466
	jc	.ld
1467
	jmp	.sv
1468
   @@:	cmp	ah,27
1469
	je	.end
1470
	push	dword edit2
1471
	call	[edit_box_key]
1472
	jmp	.still
1473
 
1474
.threat_stack: times 32 dd 0
1475
 
1476
 
1477
save_prog:
1478
	mov	[_size],256+8*(15+5)+6*3
1479
	mcall	68,12,[_size]
1480
	test	eax,eax
1481
	jnz	@f
1482
	stc
1483
	ret
1484
 
1485
@@:	mov	[_buffer],eax
1486
	mov	esi,S.X1
1487
	mov	edi,eax
1488
	mov	byte [edi],"<"
1489
	mov	dword [edi+1],"СТЕК"
1490
	mov	byte [edi+5],">"
1491
	add	edi,6
1492
	mov	ecx,5*2
1493
	cld
1494
@@:	movsd
1495
	loop	@b
1496
	mov	esi,R.0
1497
	mov	byte [edi],"<"
1498
	mov	dword [edi+1],"РГСТ"
1499
	mov	byte [edi+5],">"
1500
	add	edi,6
1501
	mov	ecx,15*2
1502
	cld
1503
@@:	movsd
1504
	loop	@b
1505
	mov	esi,PMEM
1506
	mov	byte [edi],"<"
1507
	mov	dword [edi+1],"ПРГМ"
1508
	mov	byte [edi+5],">"
1509
	add	edi,6
1510
	mov	ecx,256/4
1511
	cld
1512
@@:	movsd
1513
	loop	@b
1514
 
1515
	mov	[func_70.func_n],2
1516
	push	[_size]
1517
	pop	[func_70.param3]
1518
	push	[_buffer]
1519
	pop	[func_70.param4]
1520
	mov	[func_70.name],buf_cmd_lin
1521
	mcall	70,func_70
1522
	cmp	al,0			;сохранён удачно?
1523
	je	@f
1524
	mcall	68,13,[_buffer]
1525
	stc
1526
	ret
1527
@@:	mcall	68,13,[_buffer]
1528
	clc
1529
ret
1530
 
1531
load_prog:
1532
	mov	[func_70.func_n],5
1533
	mov	[func_70.param3],0
1534
	mov	[func_70.param4],bufferfinfo
1535
	mov	[func_70.name],buf_cmd_lin
1536
	mcall	70,func_70
1537
	test	al,al		;файл найден?
1538
	jz	@f
1539
	stc
1540
	ret
1541
  @@:	mov	eax, dword [bufferfinfo+32]	;копируем размер файла
1542
	cmp	eax,256+8*(15+5)+6*3
1543
	jbe	@f
1544
	stc
1545
	ret
1546
 
1547
_size dd 0
1548
_buffer dd 0
1549
 
1550
@@:	mov	[_size],eax
1551
	mcall	68,12,[_size]
1552
	test	eax,eax
1553
	jnz	@f
1554
	stc
1555
	ret	;ошибка на выделение блока
1556
  @@:
1557
	mov	[_buffer],eax
1558
	mov	[func_70.func_n],0
1559
	mov	[func_70.name],buf_cmd_lin
1560
	push	dword [_size]
1561
	pop	dword [func_70.param3]
1562
	push	dword [_buffer]
1563
	pop	dword [func_70.param4]
1564
	mcall	70,func_70
1565
	test	eax,eax
1566
	jz	@f
1567
	stc
1568
	ret	;ошибка чтения
1569
@@:
1570
 
1571
	mov	esi,[_buffer]
1572
	mov	ecx,[_size]
1573
@@:	cmp	byte [esi],"<"
1574
	je	.@f1
1575
	inc	esi
1576
	loop	@b
1577
.end:	mcall	68,13,[_buffer]
1578
	clc
1579
	ret
1580
.@f1:	inc	esi
1581
	cmp	dword [esi],"СТЕК"
1582
	je	.st
1583
	cmp	dword [esi],"РГСТ"
1584
	je	.rg
1585
	cmp	dword [esi],"ПРГМ"
1586
	je	.pr
1587
	jmp	@b
1588
.st:	mov	edi,S.X1
1589
	add	esi,5
1590
	mov	ebx,5*2*4
1591
	cld
1592
 .st@:	movsb
1593
	cmp	byte [esi],"<"
1594
	jne	.stB
1595
	inc	esi
1596
	cmp	dword [esi],"РГСТ"
1597
	je	.rg
1598
	cmp	dword [esi],"ПРГМ"
1599
	je	.pr
1600
	dec	esi
1601
 .stB:	dec	ecx
1602
	jz	.end
1603
	dec	ebx
1604
	jnz	.st@
1605
	jmp	@b
1606
.rg:	mov	edi,R.0
1607
	add	esi,5
1608
	mov	ebx,15*2*4
1609
	cld
1610
 .rg@:	movsb
1611
	cmp	byte [esi],"<"
1612
	jne	.rgB
1613
	inc	esi
1614
	cmp	dword [esi],"СТЕК"
1615
	je	.st
1616
	cmp	dword [esi],"ПРГМ"
1617
	je	.pr
1618
	dec	esi
1619
 .rgB:	dec	ecx
1620
	jz	.end
1621
	dec	ebx
1622
	jnz	.rg@
1623
	jmp	@b
1624
.pr:	mov	edi,PMEM
1625
	mov	eax,0
1626
	mov	ebx,256/4
1627
 .pr0:	mov	[edi],eax
1628
	add	edi,4
1629
	dec	ebx
1630
	jnz	.pr0
1631
	mov	edi,PMEM
1632
	add	esi,5
1633
	mov	ebx,256
1634
	cld
1635
 .pr@:	movsb
1636
	cmp	byte [esi],"<"
1637
	jne	.prB
1638
	inc	esi
1639
	cmp	dword [esi],"СТЕК"
1640
	je	.st
1641
	cmp	dword [esi],"РГСТ"
1642
	je	.rg
1643
	dec	esi
1644
 .prB:	dec	ecx
1645
	jz	.end
1646
	dec	ebx
1647
	jnz	.pr@
1648
jmp	@b
1649
 
1650
 
1651
 
1652
 
1653
 
1654
 
1655
align 4
1656
 
1657
S:
1658
.X1: dq 0.0
1659
.X: dq 0.0
1660
.Y: dq 0.0
1661
.Z: dq 0.0
1662
.T: dq 0.0
1663
 
1664
RS:
1665
times 10 db 0
1666
 
1667
align 4
1668
R:
1669
.0: dq 0.0
1670
.1: dq 0.0
1671
.2: dq 0.0
1672
.3: dq 0.0
1673
.4: dq 0.0
1674
.5: dq 0.0
1675
.6: dq 0.0
1676
.7: dq 0.0
1677
.8: dq 0.0
1678
.9: dq 0.0
1679
.A: dq 0.0
1680
.B: dq 0.0
1681
.C: dq 0.0
1682
.D: dq 0.0
1683
.E: dq 0.0
1684
.F: dq 0.0
1685
dq 0.0
1686
 
1687
 
1688
align 4
1689
myimport:
1690
edit_box_draw	dd	aEdit_box_draw
1691
edit_box_key	dd	aEdit_box_key
1692
edit_box_mouse	dd	aEdit_box_mouse
1693
version_ed	dd	aVersion_ed
1694
 
1695
scrollbar_ver_draw	dd aScrollbar_ver_draw
1696
scrollbar_ver_mouse	dd aScrollbar_ver_mouse
1697
version_scrollbar	dd aVersion_scrollbar
1698
 
1699
		dd	0
1700
		dd	0
1701
 
1702
aEdit_box_draw	db 'edit_box',0
1703
aEdit_box_key	db 'edit_box_key',0
1704
aEdit_box_mouse db 'edit_box_mouse',0
1705
aVersion_ed	db 'version_ed',0
1706
 
1707
aScrollbar_ver_draw	db 'scrollbar_v_draw',0
1708
aScrollbar_ver_mouse	db 'scrollbar_v_mouse',0
1709
aVersion_scrollbar	db 'version_scrollbar',0
1710
 
1711
if 0
1712
 
1713
align 4
1714
scroll_bar_data_vertical:
1715
.x:
1716
.size_x     dw 15;+0
1717
.start_x    dw 455 ;+2
1718
.y:
1719
.size_y     dw 284 ;+4
1720
.start_y    dw 19 ;+6
1721
.btn_high   dd 15 ;+8
1722
.type	    dd 1  ;+12
1723
.max_area   dd 300+20  ;+16
1724
.cur_area   dd 50  ;+20
1725
.position   dd 0  ;+24
1726
.bckg_col   dd 0xAAAAAA ;+28
1727
.frnt_col   dd 0xCCCCCC ;+32
1728
.line_col   dd 0  ;+36
1729
.redraw     dd 0  ;+40
1730
.delta	    dw 0  ;+44
1731
.delta2     dw 0  ;+46
1732
.run_x:
1733
.r_size_x   dw 0  ;+48
1734
.r_start_x  dw 0  ;+50
1735
.run_y:
1736
.r_size_y   dw 0 ;+52
1737
.r_start_y  dw 0 ;+54
1738
.m_pos	    dd 0 ;+56
1739
.m_pos_2    dd 0 ;+60
1740
.m_keys     dd 0 ;+64
1741
.run_size   dd 0 ;+68
1742
.position2  dd 0 ;+72
1743
.work_size  dd 0 ;+76
1744
.all_redraw dd 0 ;+80
1745
.ar_offset	dd 10 ;+84
1746
 
1747
endf
1748
 
1749
func_70:
1750
 .func_n dd ?
1751
 .param1 dd 0
1752
 .param2 dd 0
1753
 .param3 dd ?
1754
 .param4 dd ?
1755
 .rezerv db 0
1756
 .name dd ?
1757
 
1758
flags dd _flags
1759
 
1760
_pause dd 10
1761
string_zero db " 0           ",0
1762
buf: times 10 db 0
1763
perem dd 0
1764
buf2: times 25 db 0
1765
string: db " 0           ",0
1766
buf3: times 25 db 0
1767
schk db 0
1768
 
1769
title db appname,version,0
1770
 
1771
txt:
1772
.save db 'Сохранить (Ctrl+S)',0
1773
.error db 'Ошибка',0
1774
.load db 'Загрузить (Ctrl+L)',0
1775
.enter db 'Enter',0
1776
.regs db "Регистры",0
1777
.stk db "Стек",0
1778
.perek db "Р ГРД Г >",0
1779
.prog db "Программа",0
1780
.prog1 db "Шаг Код",0
1781
.sk db "СК:",0
1782
.edbox db "  ",0
1783
 
1784
system_path db '/sys/lib/'
1785
boxlib_name db 'box_lib.obj',0
1786
head_f_i:
1787
head_f_l	db 'error',0
1788
err_message_found_lib	db 'box_lib.obj was not found',0
1789
err_message_import	db 'box_lib.obj was not imported',0
1790
 
1791
edit1 edit_box 20,427,320,0xffffff,0x6a9480,0,0xAABBCC,0,2,txt.edbox,ed_focus,ed_focus,0,0
1792
edit2 edit_box 240,2,2,0xffffff,0x6a9480,0,0xAABBCC,0,4096,buf_cmd_lin,ed_focus,2,0,0
1793
 
1794
virtual at 0
5098 clevermous 1795
file 'MK_b3-34_hand.bmp':0xA,4
1863 yogev_ezra 1796
load offbits dword from 0
1797
end virtual
1798
 
1799
palitra:
5098 clevermous 1800
	file 'MK_b3-34_hand.bmp':0x36,offbits-0x36
1863 yogev_ezra 1801
 
1802
sizey = 262
1803
sizex = 185 + 7
1804
smesh = 3
1805
 
1806
bmp_file:
5098 clevermous 1807
    file 'MK_b3-34_hand.bmp':110
1863 yogev_ezra 1808
repeat sizey/2
1809
y = % - 1
1810
z = sizey - %
1811
repeat sizex/2/4
1812
load a dword from $ - sizex*sizey/2 + sizex*y/2+(%-1)*4
1813
load b dword from $ - sizex*sizey/2 + sizex*z/2+(%-1)*4
1814
store dword a at $ - sizex*sizey/2 + sizex*z/2+(%-1)*4
1815
store dword b at $ - sizex*sizey/2 + sizex*y/2+(%-1)*4
1816
end repeat
1817
end repeat
1818
 
1819
sound_data:
1820
db	40
1821
dw	670
1822
db 0
1823
 
1824
I_END:
1825
 
1826
sc     system_colors
1827
 
1828
procinfo:	rb 1024
1829
buf_cmd_lin	rb 0
1830
cur_dir_path	rb 4096
1831
 
1832
 
1833
PMEM:	rb 256
1834
 
1835
bufferfinfo	rb 40
1836
scin_height	rd 1
1837
 
1838
D_END: