Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3230 leency 1
;-------------------------------------------------------------------------------
2
;=========== Constans ==========================================================
3
;-------------------------------------------------------------------------------
4
;-------------------------------------------------------------------------------
5
;-------------------------------------------------------------------------------
6
MEV_LDOWN = 1
7
MEV_LUP   = 2
8
MEV_RDOWN = 3
9
MEV_RUP   = 4
10
MEV_WHEEL = 5
11
MEV_MOVE  = 6
12
 
13
;//Mouse buttons state
14
MBS_LEFT   = 1
15
MBS_RIGHT  = 2
16
MBS_CENTER = 4
17
MBS_4	   = 8
18
MBS_5	   = 16
19
 
20
;// KEY MODIFIERS
21
 
22
KM_SHIFT	= 0x00010000
23
KM_CTRL 	= 0x00020000
24
KM_ALT		= 0x00040000
25
 
26
KM_CTRLSHIFT	= 0x00030000
27
KM_ALTSHIFT	= 0x00050000
28
KM_CTRLALT	= 0x00060000
29
 
30
KM_CTRLALTSHIFT = 0x00070000
31
 
32
;// KEY CODES
33
 
34
KEY_ESCAPE	= 0x00000001
35
KEY_SNAPSHOT	= 0x00000137
36
KEY_PAUSE	= 0x0000021D
37
 
38
KEY_F1		= 0x0000003B
39
KEY_F2		= 0x0000003C
40
KEY_F3		= 0x0000003D
41
KEY_F4		= 0x0000003E
42
KEY_F5		= 0x0000003F
43
KEY_F6		= 0x00000040
44
KEY_F7		= 0x00000041
45
KEY_F8		= 0x00000042
46
KEY_F9		= 0x00000043
47
KEY_F10 	= 0x00000044
48
KEY_F11 	= 0x00000057
49
KEY_F12 	= 0x00000058
50
 
51
KEY_TILDE	= 0x00000029
52
KEY_MINUS	= 0x0000000C
53
KEY_EQUAL	= 0x0000000D
54
KEY_BACKSPACE	= 0x0000000E
55
KEY_TAB 	= 0x0000000F
56
KEY_SQBRACE1	= 0x0000001A
57
KEY_SQBRACE2	= 0x0000001B
58
KEY_SLASH1	= 0x00000035
59
KEY_SLASH2	= 0x0000002B
60
KEY_SEMICOLON	= 0x00000027
61
KEY_QUOTE	= 0x00000028
62
KEY_COMMA	= 0x00000033
63
KEY_DOT 	= 0x00000034
64
KEY_SPACE	= 0x00000039
65
 
66
KEY_1		= 0x00000002
67
KEY_2		= 0x00000003
68
KEY_3		= 0x00000004
69
KEY_4		= 0x00000005
70
KEY_5		= 0x00000006
71
KEY_6		= 0x00000007
72
KEY_7		= 0x00000008
73
KEY_8		= 0x00000009
74
KEY_9		= 0x0000000A
75
KEY_0		= 0x0000000B
76
 
77
KEY_A		= 0x0000001E
78
KEY_B		= 0x00000030
79
KEY_C		= 0x0000002E
80
KEY_D		= 0x00000020
81
KEY_E		= 0x00000012
82
KEY_F		= 0x00000021
83
KEY_G		= 0x00000022
84
KEY_H		= 0x00000023
85
KEY_I		= 0x00000017
86
KEY_J		= 0x00000024
87
KEY_K		= 0x00000025
88
KEY_L		= 0x00000026
89
KEY_M		= 0x00000032
90
KEY_N		= 0x00000031
91
KEY_O		= 0x00000018
92
KEY_P		= 0x00000019
93
KEY_Q		= 0x00000010
94
KEY_R		= 0x00000013
95
KEY_S		= 0x0000001F
96
KEY_T		= 0x00000014
97
KEY_U		= 0x00000016
98
KEY_V		= 0x0000002F
99
KEY_W		= 0x00000011
100
KEY_X		= 0x0000002D
101
KEY_Y		= 0x00000015
102
KEY_Z		= 0x0000002C
103
 
104
KEY_CAPSLK	= 0x0000003A
105
KEY_SCRLK	= 0x00000046
106
KEY_NUMLK	= 0x00000069
107
 
108
KEY_RETURN	= 0x0000001C
109
KEY_NUMRETURN	= 0x0000011C
110
 
111
KEY_LCONTROL	= 0x0000001D
112
KEY_RCONTROL	= 0x0000011D
113
KEY_LSHIFT	= 0x0000002A
114
KEY_RSHIFT	= 0x00000036
115
KEY_LALT	= 0x00000038
116
KEY_RALT	= 0x00000138
117
 
118
KEY_LWIN	= 0x0000015B
119
KEY_RWIN	= 0x0000015C
120
KEY_APPS	= 0x0000015D
121
 
122
KEY_INSERT	= 0x00000152
123
KEY_DELETE	= 0x00000153
124
KEY_HOME	= 0x00000147
125
KEY_END 	= 0x0000014F
126
KEY_PAGEUP	= 0x00000149
127
KEY_PAGEDOWN	= 0x00000151
128
KEY_UP		= 0x00000148
129
KEY_LEFT	= 0x0000014B
130
KEY_RIGHT	= 0x0000014D
131
KEY_DOWN	= 0x00000150
132
 
133
KEY_DIVIDE	= 0x00000135
134
KEY_MULTIPLY	= 0x00000037
135
KEY_SUBTRACT	= 0x0000004A
136
KEY_ADD 	= 0x0000004E
137
KEY_SEPARATOR	= 0x00000053
138
 
139
KEY_NUM1	= 0x0000004F
140
KEY_NUM2	= 0x00000050
141
KEY_NUM3	= 0x00000051
142
KEY_NUM4	= 0x0000004B
143
KEY_NUM5	= 0x0000004C
144
KEY_NUM6	= 0x0000004D
145
KEY_NUM7	= 0x00000047
146
KEY_NUM8	= 0x00000048
147
KEY_NUM9	= 0x00000049
148
KEY_NUM0	= 0x00000052
149
 
150
;// EXTENDED KEY CODES (MULTIMEDIA KEYBOARDS)
151
 
152
KEY_MYDOCUMENTS = 0x0000014C
153
KEY_MYPICTURES	= 0x00000164
154
KEY_MYMUSIC	= 0x0000013C
155
KEY_MUTE	= 0x00000120
156
KEY_PLAYPAUSE	= 0x00000122
157
KEY_STOP	= 0x00000124
158
KEY_VOLUMEUP	= 0x00000130
159
KEY_VOLUMEDOWN	= 0x0000013E
160
KEY_PREVSONG	= 0x00000110
161
KEY_NEXTSONG	= 0x00000119
162
KEY_MEDIA	= 0x0000016D
163
KEY_MAIL	= 0x0000016C
164
KEY_WEBHOME	= 0x00000132
165
KEY_MESSENGER	= 0x00000105
166
 
167
KEY_CALCULATOR	= 0x00000121
168
KEY_LOGOFF	= 0x00000116
169
KEY_SLEEP	= 0x0000015F
170
 
171
;Keyboard modes (func 66,2)
172
 
173
KBM_ASCII = 0
174
KBM_SCAN  = 1
175
 
176
;-------------------------------------------------------------------------------
177
;Colors-------------------------------------------------------------------------
178
 
179
clWhite = 0FFFFFFh
180
clBlack = 0
181
clRed	= 0FF0000h
182
clBlue	= 0FF00h
183
clGreen = 0FFh
184
clGrey	= 0888888h
185
 
186
 
187
;-------------------------------------------------------------------------------
188
;-------------------------------------------------------------------------------
189
;-------------------------------------------------------------------------------
190
;========== APIs macros ========================================================
191
;-------------------------------------------------------------------------------
192
;-------------------------------------------------------------------------------
193
;-------------------------------------------------------------------------------
194
;-------------------------------------------------------------------------------
195
 
196
macro DrawWindow x,y,w,h,nameW	 ;void
197
{
198
    if ~(x eq bx)
199
       mov bx,x
200
    end if
201
    rol ebx,16
202
    mov bx,w
203
    if ~(y eq cx)
204
       mov cx,y
205
    end if
206
    rol ecx,16
207
    mov cx,h
208
    mov edx,0x33FFFFFF
209
    mov esi,0x80333333
210
    mov edi,nameW
211
    xor eax,eax
212
    int 40h
213
}
214
 
215
macro DrawPanel x,y,w,h,color	 ;void    ;рисует неперемещаемое прозрачное(или цвета color) окно
216
{
217
    xor eax,eax
218
    if ~(x eq bx)
219
       mov bx,x
220
    end if
221
    rol ebx,16
222
    mov bx,w
223
    if ~(y eq cx)
224
       mov cx,y
225
    end if
226
    rol ecx,16
227
    mov cx,h
228
    mov edx,21000000h
229
   ; add edx,color
230
    mov esi,01000000h
231
   ; mov edi,color
232
    int 40h
233
 
234
    if ~(color eq)
235
       mov eax,13
236
       xor bx,bx
237
       rol ebx,16
238
       mov bx,w
239
       xor cx,cx
240
       rol ecx,16
241
       mov cx,h
242
       mov edx,color
243
       int 40h
244
    end if
245
}
246
 
247
 
248
;WinClass
249
;       .Caption  (offset Name)
250
;       .Color (color dword)
251
;       .Transparent (0/1)
252
;       .WorkTransp  (0/1)
253
;       .Fix         (0/1)
254
;       .Skin        (0/1)
255
;       .CaptionColor (color dword)
256
;       .FrameColor   (color dword)
257
 
258
macro DrawWindowEx x,y,w,h,WinClass   ;void может рисовать любое окно
259
{
260
    if ~(x eq bx)
261
       mov bx,x
262
    end if
263
    rol ebx,16
264
    mov bx,w
265
    if ~(y eq cx)
266
       mov cx,y
267
    end if
268
    rol ecx,16
269
    mov cx,h
270
 
271
    if WinClass#.WorkTransp==1
272
      WinClass#.WorkTransp=40000000h
273
    end if
274
 
275
    mov edx,3000000h+WinClass#.WorkTransp+WinClass#.Color
276
    mov esi,0x80333333
277
    mov edi,WinClass#.Name
278
    xor eax,eax
279
    int 40h
280
}
281
 
282
macro DrawPix x,y,color     ;void
283
{
284
    mov ebx,x
285
    mov ecx,y
286
    mov edx,color
287
    mov eax,1
288
    int 40h
289
}
290
 
291
macro GetKeyPressed   ;eax=1-пусто либо al=0, ah=код нажатой клавиши либо
292
{		      ;al=2, ah=сканкод нажатой ГОРЯЧЕЙ клавиши,HI eax=сост упр клавиш
293
    mov eax,2
294
    int 40h
295
}
296
 
297
 
298
macro OutText x,y,Text,colorFon    ;void
299
{
300
  if colorFon eq
301
    mov bx,x
302
    rol ebx,16
303
    mov bx,y
304
    mov ecx,80000000h
305
    mov edx,Text
306
    mov eax,4
307
    int 40h
308
  else
309
    mov bx,x
310
    rol ebx,16
311
    mov bx,y
312
    mov ecx,0C0000000h
313
    mov edx,Text
314
    mov edi,colorFon
315
    mov eax,4
316
    int 40h
317
  end if
318
}
319
 
320
macro Sleep time      ;void
321
{
322
    mov ebx,time
323
    mov eax,5
324
    int 40h
325
}
326
 
327
 
328
macro DrawImage x,y,w,h,Image	    ;void
329
{
330
    mov ebx,Image
331
    mov cx,w
332
    rol ecx,16
333
    mov cx,h
334
    mov dx,x
335
    rol edx,16
336
    mov dx,y
337
    mov eax,7
338
    int 40h
339
}
340
 
341
macro DrawButton x,y,w,h,ID,color,Caption     ;void
342
{
343
    if ID<1000000h
344
	mov bx,x
345
	rol ebx,16
346
	mov bx,w
347
	mov cx,y
348
	rol ecx,16
349
	mov cx,h
350
	mov edx,ID
351
	mov esi,color
352
	mov eax,8
353
	int 40h
354
 
355
	sub edx,80000000h
356
    else
357
	mov eax,-1
358
    end if
359
 
360
    if ~(Caption eq)
361
	mov bx,x
362
	add bx,5
363
	rol ebx,16
364
	mov bx,y
365
	add bx,5
366
	mov ecx,80000000h
367
	mov edx,Caption
368
	mov eax,4
369
	int 40h
370
    end if
371
}
372
 
373
macro DeleteButton ID	     ;void
374
{
375
    if ID<1000000h
376
	mov eax,8
377
	mov edx,80000000h
378
	add edx,ID
379
	int 40h
380
    ;else
381
 
382
    end if
383
 
384
}
385
 
386
macro GetThreadInfo Buffer,N ;1KB  eax=max номер слота потока
387
{
388
    mov ebx,Buffer
389
    if N eq
390
      mov ecx,-1
391
    else
392
      mov ecx,N
393
    end if
394
    mov eax,9
395
    int 40h
396
}
397
; +34 = X window
398
; +38 = Y window
399
; +42 = W window
400
; +46 = H window
401
 
402
 
403
macro WaitMessage	 ;eax=event(1=redraw,2=key,3=button,5=redrawBackgroud,
404
{			 ;6=mouse,7=IPC,8=ethernet,9=debug,16..31=IRQ0..IRQ15)
405
    mov eax,10
406
    int 40h
407
}
408
 
409
macro ReadMessage      ;eax=0-пусто иначе см WaitMessage
410
{
411
   mov eax,11
412
   int 40h
413
}
414
 
415
macro RedrawWinBeg    ;void
416
{
417
    mov eax,12
418
    mov ebx,1
419
    int 40h
420
}
421
 
422
macro RedrawWinEnd	;void
423
{
424
    mov eax,12
425
    mov ebx,2
426
    int 40h
427
}
428
 
429
macro DrawRect x,y,w,h,color	  ;void
430
{
431
   mov bx,x
432
   rol ebx,16
433
   mov bx,w
434
   mov cx,y
435
   rol ecx,16
436
   mov cx,h
437
   mov edx,color
438
   mov eax,13
439
   int 40h
440
}
441
 
442
macro DrawClearRect x,y,w,h,color ;(рамки. Рисует просто рамку. Без закрашивания внутри)
443
{
444
    mov eax,38
445
    mov bx,x
446
    rol ebx,16
447
    mov bx,x
448
    add bx,w
449
    mov cx,y
450
    rol ecx,16
451
    mov cx,y
452
    mov edx,color
453
    int 40h
454
 
455
    mov eax,38
456
    mov bx,x
457
    add bx,w
458
    rol ebx,16
459
    mov bx,x
460
    add bx,w
461
    mov cx,y
462
    rol ecx,16
463
    mov cx,y
464
    add cx,h
465
    mov edx,color
466
    int 40h
467
 
468
    mov eax,38
469
    mov bx,x
470
    rol ebx,16
471
    mov bx,x
472
    add bx,w
473
    mov cx,y
474
    add cx,h
475
    rol ecx,16
476
    mov cx,y
477
    add cx,h
478
    mov edx,color
479
    int 40h
480
 
481
    mov eax,38
482
    mov bx,x
483
    rol ebx,16
484
    mov bx,x
485
    mov cx,y
486
    rol ecx,16
487
    mov cx,y
488
    add cx,h
489
    mov edx,color
490
    int 40h
491
}
492
 
493
 
494
 
495
macro GetScreenSize	     ;eax=[xsize]*0x10000+[ysize]. Значения уже увеличены на 1,т.е.
496
{			     ;xsize и ysize могут быть равны 1024 и 768 (например)
497
    mov eax,14
498
    int 40h
499
    add eax,00010001h
500
}
501
 
502
macro RedrawDesktop
503
{
504
    mov eax,15
505
    mov ebx,3
506
    int 40h
507
}
508
 
509
macro GetButtonPressed	   ;eax=1(пусто) иначе al=0(LButton)или код другой кнопки мыши,
510
{			   ; HI eax и ah содержат номер кнопки
511
   mov eax,17
512
   int 40h
513
}
514
 
515
macro Minimize		  ;void
516
{
517
    mov eax,18
518
    mov ebx,10
519
    int 40h
520
}
521
 
522
macro SetMousePos x,y
523
{
524
     mov ecx,4
525
     mov dx,x
526
     rol edx,16
527
     mov dx,y
528
     mov eax,18
529
     mov ebx,19
530
     int 40h
531
}
532
 
533
macro WaitMessageT time
534
{
535
     mov ebx,time
536
     mov eax,23
537
     int 40h
538
}
539
 
540
macro SetDefaultFolder folder
541
{
542
    mov ecx,folder
543
    mov eax,30
544
    mov ebx,1
545
    int 40h
546
}
547
 
548
macro GetDefaultFolder folderBuf,sizeBuf
549
{
550
    mov ecx,folderBuf
551
    moc edx,sizeBuf
552
    mov eax,30
553
    mov ebx,2
554
    int 40h
555
}
556
 
557
macro GetMousePos
558
{
559
     mov eax,37
560
     xor ebx,ebx
561
     int 40h
562
}
563
 
564
macro GetMouseWinPos
565
{
566
     mov eax,37
567
     mov ebx,1
568
     int 40h
569
}
570
 
571
 
572
macro GetMouseKey
573
{
574
    mov eax,37
575
    mov ebx,2
576
    int 40h
577
}
578
 
579
macro LoadCursorF path
580
{
581
    mov ecx,path
582
    mov eax,37
583
    mov ebx,4
584
    mov dx,0
585
    int 40h
586
}
587
 
588
macro LoadCursorM cur
589
{
590
    mov ecx,cur
591
    mov eax,37
592
    mov ebx,4
593
    mov dx,1
594
    int 40h
595
}
596
 
597
macro LoadCursorStruct cur,x,y
598
{
599
 ;   mov edx,x*1000000h+y*10000h+0002
600
    mov edx,x
601
    shl edx,24
602
    xor ecx,ecx
603
    mov cx,y
604
    shl ecx,16
605
    add edx,ecx
606
    add edx,2
607
    mov ecx,path
608
    mov eax,37
609
    mov ebx,4
610
    int 40h
611
}
612
 
613
macro SetCursor Handle
614
{
615
    mov ecx,Handle
616
    mov eax,37
617
    mov ebx,5
618
    int 40h
619
}
620
 
621
 
622
macro DrawLine x1,y1,x2,y2,color
623
{
624
    mov bx,x1
625
    rol ebx,16
626
    mov bx,x2
627
    mov cx,y1
628
    rol ecx,16
629
    mov cx,y2
630
    mov edx,color
631
    mov eax,38
632
    int 40h
633
}
634
 
635
macro SetMaskMessage Mask
636
{
637
    mov ebx,Mask
638
    mov eax,40
639
    int 40h
640
}
641
 
642
macro DrawInt Int,Leng,x,y,color
643
{
644
    xor ecx,ecx
645
    mov cx,Leng
646
    shl ecx,16
647
    add ebx,ecx
648
 
649
    mov ecx,Int
650
    mov dx,x
651
    rol edx,16
652
    mov dx,y
653
    mov esi,color
654
    mov eax,47
655
    mov ebx,080100000h	 ;+Leng*10000h+0000
656
    int 40h
657
}
658
 
659
macro GetSkinH
660
{
661
    mov eax,48
662
    mov ebx,4
663
    int 40h
664
}
665
 
666
macro CreateThread start,stack
667
{
668
   mov ecx,start
669
   mov edx,stack
670
   mov eax,51
671
   mov ebx,1
672
   int 40h
673
}
674
 
675
 
676
 
677
macro SetKeyboardMode mode
678
{
679
   mov ecx,mode
680
   mov eax,66
681
   mov ebx,2
682
   int 40h
683
}
684
 
685
macro ResizeWindow x,y,w,h
686
{
687
   mov ebx,x
688
   mov ecx,y
689
   mov edx,w
690
   mov esi,h
691
   mov eax,67
692
   int 40h
693
}
694
 
695
macro InitMemory	;eax=0(неуспех) или размер кучи
696
{
697
    mov eax,68
698
    mov ebx,11
699
    int 40h
700
}
701
 
702
macro GetMemory size  ;eax=Pointer
703
{
704
    mov ecx,size
705
    mov ebx,12
706
    mov eax,68
707
    int 40h
708
}
709
 
710
macro FreeMemory pointer   ;eax = 0/1 = false/true
711
{
712
    mov ecx,pointer
713
    mov ebx,13
714
    mov eax,68
715
    int 40h
716
}
717
 
718
macro ReallocMemory pointer,newsize
719
{
720
    mov edx,pointer
721
    mov ecx,newsize
722
    mov ebx,20
723
    mov eax,68h
724
    int 40h
725
}
726
 
727
macro ReadFile Struc,path,n,Buffer,posL;,posH
728
{
729
    mov dword [Struc],0
730
    mov dword [Struc+4],posL
731
    mov dword [Struc+8],0;posH
732
    mov dword [Struc+12],n
733
    mov dword [Struc+16],Buffer
734
    mov byte [Struc+20],0
735
    mov dword [Struc+21],path
736
    mov ebx,Struc
737
    mov eax,70
738
    int 40h
739
}
740
 
741
macro CreateFile Struc,path,n,Buffer
742
{
743
    mov dword [Struc],2
744
    mov dword [Struc+4],0
745
    mov dword [Struc+8],0
746
    mov dword [Struc+12],n
747
    mov dword [Struc+16],Buffer
748
    mov byte [Struc+20],0
749
    mov dword [Struc+21],path
750
    mov ebx,Struc
751
    mov eax,70
752
    int 40h
753
}
754
 
755
macro WriteFile Struc,path,n,Buffer,posL;,posH
756
{
757
    mov dword [Struc],3
758
    mov dword [Struc+4],posL
759
    mov dword [Struc+8],0;posH
760
    mov dword [Struc+12],n
761
    mov dword [Struc+16],Buffer
762
    mov byte [Struc+20],0
763
    mov dword [Struc+21],path
764
    mov ebx,Struc
765
    mov eax,70
766
    int 40h
767
 
768
}
769
 
770
macro SetFileSize Struc,path,sizeL;,sizeH
771
{
772
    mov dword [Struc],4
773
    mov dword [Struc+4],sizeL
774
    mov dword [Struc+8],0;sizeH
775
    mov dword [Struc+12],0
776
    mov dword [Struc+16],0
777
    mov byte [Struc+20],0
778
    mov dword [Struc+21],path
779
    mov ebx,Struc
780
    mov eax,70
781
    int 40h
782
}
783
 
784
macro GetFileInfo Struc,path,BufferInfo ;(40байт)
785
{
786
    mov dword [Struc],5
787
    mov dword [Struc+4],0
788
    mov dword [Struc+8],0
789
    mov dword [Struc+12],0
790
    mov dword [Struc+16],BufferInfo
791
    mov byte [Struc+20],0
792
    mov dword [Struc+21],path
793
    mov ebx,Struc
794
    mov eax,70
795
    int 40h
796
}
797
 
798
macro RunProgram Struc,path,params
799
{
800
    mov eax,70
801
    mov ebx,Struc
802
    mov dword [Struc],7
803
    mov dword [Struc+4],0
804
    mov dword [Struc+8],params
805
    mov dword [Struc+12],0
806
    mov dword [Struc+16],0
807
    mov byte [Struc+20],0
808
    mov dword [Struc+21],path
809
    int 40h
810
}
811
 
812
macro Remove Struc,path
813
{
814
    mov eax,70
815
    mov ebx,Struc
816
    mov dword [Struc],8
817
    mov dword [Struc+4],0
818
    mov dword [Struc+8],0
819
    mov dword [Struc+12],0
820
    mov dword [Struc+16],0
821
    mov byte [Struc+20],0
822
    mov dword [Struc+21],path
823
    int 40h
824
}
825
 
826
macro CreateFolder Struc,path
827
{
828
    mov eax,70
829
    mov ebx,Struc
830
    mov dword [Struc],9
831
    mov dword [Struc+4],0
832
    mov dword [Struc+8],0
833
    mov dword [Struc+12],0
834
    mov dword [Struc+16],0
835
    mov byte [Struc+20],0
836
    mov dword [Struc+21],path
837
    int 40h
838
}
839
 
840
macro SetWindowCaption caption
841
{
842
    mov eax,71
843
    mov ebx,1
844
    mov ecx,name
845
    int 40h
846
}
847
 
848
macro ExitThread
849
{
850
    mov eax,-1
851
    int 40h
852
}
853
 
854
ExitProcess fix ExitThread