Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3067 leency 1
//CODED by Veliant, Leency, Nable. GNU GPL licence.
2
 
5582 pavelyakov 3
#define INCLUDE_KOLIBRI_H
5576 pavelyakov 4
 
3067 leency 5
#startaddress 0
6
#code32 TRUE
7
 
8
char   os_name[8]   = {'M','E','N','U','E','T','0','1'};
9
dword  os_version   = 0x00000001;
5575 pavelyakov 10
dword  start_addr   = #load_init_main;
3067 leency 11
dword  final_addr   = #stop+32;
3363 leency 12
dword  alloc_mem    = MEMSIZE;
13
dword  x86esp_reg   = MEMSIZE;
3067 leency 14
dword  I_Param      = #param;
15
dword  I_Path       = #program_path;
16
char param[4096];
17
char program_path[4096];
18
 
3363 leency 19
#define NULL      0
20
#define OLD      -1
21
#define true      1
22
#define false     0
23
 
3067 leency 24
//Events
4536 leency 25
#define evReDraw  1
26
#define evKey     2
27
#define evButton  3
5576 pavelyakov 28
#define evDesktop 5
3067 leency 29
#define evMouse   6
5576 pavelyakov 30
#define evIPC     7
4536 leency 31
#define evNetwork 8
5576 pavelyakov 32
#define evDebug   9
3067 leency 33
 
34
//Button options
35
#define BT_DEL      0x80000000
36
#define BT_HIDE     0x40000000
37
#define BT_NOFRAME  0x20000000
38
 
5572 pavelyakov 39
//Button mouse
5576 pavelyakov 40
#define MOUSE_LEFT   001b
41
#define MOUSE_RIGHT  010b
42
#define MOUSE_LR     011b
5575 pavelyakov 43
#define MOUSE_CENTER 100b
5572 pavelyakov 44
 
5465 leency 45
//ASCII KEYS
46
#define ASCII_KEY_BS    008
47
#define ASCII_KEY_TAB   009
48
#define ASCII_KEY_ENTER 013
49
#define ASCII_KEY_ESC   027
50
#define ASCII_KEY_DEL   182
51
#define ASCII_KEY_INS   185
52
#define ASCII_KEY_SPACE 032
53
 
54
#define ASCII_KEY_LEFT  176
55
#define ASCII_KEY_RIGHT 179
56
#define ASCII_KEY_DOWN  177
57
#define ASCII_KEY_UP    178
58
#define ASCII_KEY_HOME  180
59
#define ASCII_KEY_END   181
60
#define ASCII_KEY_PGDN  183
61
#define ASCII_KEY_PGUP  184
62
 
5576 pavelyakov 63
//allow event mask
64
#define EVENT_MASK_REDRAW   000000001b
65
#define EVENT_MASK_KEYBOARD 000000010b
66
#define EVENT_MASK_BUTTONS  000000100b
67
#define EVENT_MASK_DESKTOP  000010000b
68
#define EVENT_MASK_MOUSE    000100000b
69
#define EVENT_MASK_IPC      001000000b
70
#define EVENT_MASK_NETWORK  010000000b
71
#define EVENT_MASK_DEBUG    100000000b
5465 leency 72
 
5576 pavelyakov 73
//ARGS FUNCTION
74
#define END_ARGS 0xFF00FF
3067 leency 75
//-------------------------------------------------------------------------
76
 
5477 leency 77
:struct raw_image {
78
	dword w, h, data;
79
};
80
 
5572 pavelyakov 81
/**
82
 *  The structure of the mouse
83
 *  x - coordinate X
5573 pavelyakov 84
 *  y - coordinate Y
5572 pavelyakov 85
 *  xx and yy - time coordinates
86
 *  lkm - left mouse button
87
 *  pkm - right mouse button
88
 *  mkm - mouse wheel
89
 *  key - keycode button
90
 *  tmp - time keycode
91
 *  down - key event press
92
 *  up - key release events
93
 *  move - event mouse movements
5575 pavelyakov 94
 *  click - when clicked
5582 pavelyakov 95
 *  dblclick - double-click the default 50 (500 ms)
5572 pavelyakov 96
 */
5575 pavelyakov 97
 
5582 pavelyakov 98
:dword __TMP_TIME,MOUSE_TIME;
5477 leency 99
:struct mouse
3067 leency 100
{
5576 pavelyakov 101
	signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,tmp_time,hor,vert,down,up,move,click,dblclick,left,top;
102
	dword handle,_;
103
	byte cmd;
104
	void clearTime();
3067 leency 105
	void get();
5576 pavelyakov 106
	void set();
107
	void center();
108
	dword hide();
109
	void slider();
110
	void show();
3067 leency 111
};
5576 pavelyakov 112
:void mouse::clearTime()
113
{
114
	tmp_time = GetStartTime()+MOUSE_TIME;
115
}
116
:void mouse::show()
117
{
118
	if(!handle)return;
119
	ECX = handle;
120
	EAX = 37;
121
	EBX = 5;
122
	$int 0x40;
123
}
124
:dword mouse::hide()
125
{
126
	if(!_)
127
	{
128
		EAX = 68;
129
		EBX = 12;
130
		ECX = 32*32*4;
131
		$int 0x40
132
		ECX = EAX;
133
		_ = EAX;
134
	} else ECX = _;
135
	EAX = 37;
136
	EBX = 4;
137
	DX  = 2;
138
	$int 0x40;
139
	handle = EAX;
140
	ECX = EAX;
141
	EAX = 37;
142
	EBX = 5;
143
	$int 0x40;
144
	handle = EAX;
145
}
3067 leency 146
 
5576 pavelyakov 147
//set new attributes mouse
148
:void mouse::set()
149
{
150
	if((xx!=x)||(yy!=y))
151
	{
152
		EAX = 18;
153
		EBX = 19;
154
		ECX = 4;
155
		EDX = (x<<16)+y;
156
		$int 0x40
157
		//move = true;
158
	}
159
	if((key)||(lkm|mkm|pkm))&&(down|up|click|dblclick|move)
160
	{
161
		if(lkm|mkm|pkm)key=(lkm)|(pkm<<1)|(2<
162
		EAX = 18;
163
		EBX = 19;
164
		ECX = key;
165
		EDX = (x<<16)+y;
166
		$int 0x40
167
	}
168
}
169
 
170
:void mouse::center()
171
{
172
	EAX = 18;
173
	EBX = 15;
174
	$int 0x40
175
}
176
 
5573 pavelyakov 177
//get new attributes mouse
5477 leency 178
:void mouse::get()
3067 leency 179
{
180
	EAX = 37;
181
	EBX = 1;
182
	$int	0x40
183
	$mov	ebx, eax
184
	$shr	eax, 16
185
	$and	ebx,0x0000FFFF
186
	x = EAX;
187
	y = EBX;
3991 leency 188
	if (x>6000) x-=65535;
189
	if (y>6000) y-=65535;
3067 leency 190
	EAX = 37;
191
	EBX = 2;
192
	$int	0x40
193
	$mov	ebx, eax
5549 punk_joker 194
	$mov	ecx, eax
5572 pavelyakov 195
	key = EAX;
3067 leency 196
	$and	eax, 0x00000001
197
	$shr	ebx, 1
198
	$and	ebx, 0x00000001
5549 punk_joker 199
	$shr	ecx, 2
200
	$and	ecx, 0x00000001
3067 leency 201
	lkm = EAX;
202
	pkm = EBX;
5549 punk_joker 203
	mkm = ECX;
5572 pavelyakov 204
 
205
	//when you release the mouse button
5576 pavelyakov 206
	// Mouse Up Event
207
	if((cmd)&&!(key)){
5572 pavelyakov 208
		up = true;
209
		down = false;
5575 pavelyakov 210
		if(!move) click = true;
5576 pavelyakov 211
		move = false;
5575 pavelyakov 212
		__TMP_TIME = GetStartTime();
5576 pavelyakov 213
		if(__TMP_TIME-tmp_time<=MOUSE_TIME){ dblclick = true;click = false; }
5575 pavelyakov 214
		tmp_time = __TMP_TIME;
5572 pavelyakov 215
		//returns the key code
216
		key = tmp;
217
		lkm = 1&tmp;
218
		pkm = 2&tmp;
219
		pkm >>= 1;
220
		mkm = 4&tmp;
221
		mkm >>= 2;
5576 pavelyakov 222
		cmd = false;
5572 pavelyakov 223
	}
224
 
225
	//when you press the mouse button
5576 pavelyakov 226
	// Mouse Down Event/Move Event
5572 pavelyakov 227
	else {
5576