1,5 → 1,7 |
//CODED by Veliant, Leency, Nable. GNU GPL licence. |
|
#define LIB_KOLIBRI_H |
|
#startaddress 0 |
#code32 TRUE |
|
23,10 → 25,12 |
#define evReDraw 1 |
#define evKey 2 |
#define evButton 3 |
#define evDesktop 5 |
#define evMouse 6 |
#define evIPC 7 |
#define evNetwork 8 |
#define evDebug 9 |
|
|
//Button options |
#define BT_DEL 0x80000000 |
#define BT_HIDE 0x40000000 |
35,6 → 39,7 |
//Button mouse |
#define MOUSE_LEFT 001b |
#define MOUSE_RIGHT 010b |
#define MOUSE_LR 011b |
#define MOUSE_CENTER 100b |
|
//ASCII KEYS |
55,7 → 60,18 |
#define ASCII_KEY_PGDN 183 |
#define ASCII_KEY_PGUP 184 |
|
//allow event mask |
#define EVENT_MASK_REDRAW 000000001b |
#define EVENT_MASK_KEYBOARD 000000010b |
#define EVENT_MASK_BUTTONS 000000100b |
#define EVENT_MASK_DESKTOP 000010000b |
#define EVENT_MASK_MOUSE 000100000b |
#define EVENT_MASK_IPC 001000000b |
#define EVENT_MASK_NETWORK 010000000b |
#define EVENT_MASK_DEBUG 100000000b |
|
//ARGS FUNCTION |
#define END_ARGS 0xFF00FF |
//------------------------------------------------------------------------- |
|
:struct raw_image { |
82,10 → 98,82 |
dword __TMP_TIME,MOUSE_TIME; |
:struct mouse |
{ |
signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,tmp_time,hor,vert,down,up,move,click,dblclick; |
signed x,y,xx,yy,lkm,mkm,pkm,key,tmp,tmp_time,hor,vert,down,up,move,click,dblclick,left,top; |
dword handle,_; |
byte cmd; |
void clearTime(); |
void get(); |
void set(); |
void center(); |
dword hide(); |
void slider(); |
void show(); |
}; |
:void mouse::clearTime() |
{ |
tmp_time = GetStartTime()+MOUSE_TIME; |
} |
:void mouse::show() |
{ |
if(!handle)return; |
ECX = handle; |
EAX = 37; |
EBX = 5; |
$int 0x40; |
} |
:dword mouse::hide() |
{ |
if(!_) |
{ |
EAX = 68; |
EBX = 12; |
ECX = 32*32*4; |
$int 0x40 |
ECX = EAX; |
_ = EAX; |
} else ECX = _; |
EAX = 37; |
EBX = 4; |
DX = 2; |
$int 0x40; |
handle = EAX; |
ECX = EAX; |
EAX = 37; |
EBX = 5; |
$int 0x40; |
handle = EAX; |
} |
|
//set new attributes mouse |
:void mouse::set() |
{ |
if((xx!=x)||(yy!=y)) |
{ |
EAX = 18; |
EBX = 19; |
ECX = 4; |
EDX = (x<<16)+y; |
$int 0x40 |
//move = true; |
} |
if((key)||(lkm|mkm|pkm))&&(down|up|click|dblclick|move) |
{ |
if(lkm|mkm|pkm)key=(lkm)|(pkm<<1)|(2<<mkm); |
EAX = 18; |
EBX = 19; |
ECX = key; |
EDX = (x<<16)+y; |
$int 0x40 |
} |
} |
|
:void mouse::center() |
{ |
EAX = 18; |
EBX = 15; |
$int 0x40 |
} |
|
//get new attributes mouse |
:void mouse::get() |
{ |
115,12 → 203,14 |
mkm = ECX; |
|
//when you release the mouse button |
if((down)&&!(key)){ |
// Mouse Up Event |
if((cmd)&&!(key)){ |
up = true; |
down = false; |
if(!move) click = true; |
move = false; |
__TMP_TIME = GetStartTime(); |
if(__TMP_TIME-tmp_time<=MOUSE_TIME) dblclick = true; |
if(__TMP_TIME-tmp_time<=MOUSE_TIME){ dblclick = true;click = false; } |
tmp_time = __TMP_TIME; |
//returns the key code |
key = tmp; |
129,25 → 219,25 |
pkm >>= 1; |
mkm = 4&tmp; |
mkm >>= 2; |
cmd = false; |
} |
|
//when you press the mouse button |
// Mouse Down Event/Move Event |
else { |
up = false; |
click = false; |
dblclick = false; |
if(key) |
down = false; |
// Mouse Move Event |
if((xx!=x)||(yy!=y)) |
{ |
down = true; |
tmp = key; |
} |
else down = false; |
if((xx!=x)||(yy!=y)){ |
move = true; |
xx = x; |
yy = y; |
} |
else move = false; |
if(key)if(!cmd) {down = true;cmd = true;tmp=key;} |
} |
|
//scroll |
161,7 → 251,34 |
vert = EBX; |
} |
|
:void mouse::slider() |
{ |
signed _x,_y; |
if(!handle)hide(); |
get(); |
_x = x;_y = y; |
pause(5); |
get(); |
left = _x - x; |
top = _y - y; |
center(); |
get(); |
_x = x;_y = y; |
pause(5); |
} |
|
:struct keyboard |
{ |
signed key; |
byte down,up,press; |
void get(void); |
}; |
|
:void keyboard::get(void) |
{ |
|
} |
|
:struct system_colors |
{ |
dword frame,grab,grab_button,grab_button_text,grab_text, |
179,11 → 296,12 |
} |
|
//------------------------------------------------------------------------------ |
|
dword wait_event_code; |
inline fastcall dword WaitEvent() |
{ |
$mov eax,10 |
$int 0x40 |
wait_event_code = EAX; |
} |
|
inline fastcall dword CheckEvent() |
522,9 → 640,10 |
EBX = 1; |
$int 0x40 |
|
EAX = 0; |
$xor EAX,EAX |
EBX = x << 16 + size_w; |
ECX = y << 16 + size_h; |
|
EDX = WindowType << 24 | WindowAreaColor; |
$int 0x40 |
|
664,12 → 783,40 |
$int 0x40 |
} |
|
:dword ALERT_TEXT; |
:void dialog_alert() |
{ |
byte id; |
loop()switch(WaitEvent()) |
{ |
case evReDraw: |
DefineAndDrawWindow(215,100,250,200,0x34,0xFFFFFF,"Alert"); |
WriteTextB(5,5,0x90,0x0,ALERT_TEXT); |
break; |
case evButton: |
id=GetButtonID(); |
if (id==1) ExitProcess(); |
break; |
} |
} |
|
:dword alert(dword text) |
{ |
dword mem = malloc(4096); |
ALERT_TEXT = text; |
CreateThread(#dialog_alert,mem+4092); |
return mem; |
} |
|
dword __generator; // random number generator - äëÿ ãåíåðàöèè ñëó÷àéíûõ ÷èñåë |
|
dword program_path_length; |
|
//The initialization of the initial data before running |
void load_init_main() |
{ |
MOUSE_TIME = 50; //Default 50 ms. |
//program_path_length = strlen(program_path); |
MOUSE_TIME = 50; //Default 500 ms. |
__generator = GetStartTime(); |
main(); |
} |