2012-11-26 16:26:15 +01:00
//CODED by Veliant, Leency, Nable. GNU GPL licence.
2015-07-22 20:32:54 +02:00
# ifndef INCLUDE_KOLIBRI_H
2015-07-20 01:09:56 +02:00
# define INCLUDE_KOLIBRI_H
2015-07-16 03:44:30 +02:00
2012-11-26 16:26:15 +01:00
# startaddress 0
# code32 TRUE
char os_name [ 8 ] = { ' M ' , ' E ' , ' N ' , ' U ' , ' E ' , ' T ' , ' 0 ' , ' 1 ' } ;
dword os_version = 0x00000001 ;
2015-08-02 16:40:41 +02:00
dword start_addr = # ______INIT______ ;
dword final_addr = # ______STOP______ + 32 ;
2013-03-11 19:16:24 +01:00
dword alloc_mem = MEMSIZE ;
dword x86esp_reg = MEMSIZE ;
2012-11-26 16:26:15 +01:00
dword I_Param = # param ;
dword I_Path = # program_path ;
char param [ 4096 ] ;
char program_path [ 4096 ] ;
2013-03-11 19:16:24 +01:00
# define NULL 0
# define OLD -1
# define true 1
# define false 0
2012-11-26 16:26:15 +01:00
//Events
# define evReDraw 1
2014-01-27 20:34:00 +01:00
# define evKey 2
# define evButton 3
2015-07-16 03:44:30 +02:00
# define evDesktop 5
2014-01-27 20:34:00 +01:00
# define evMouse 6
2015-07-16 03:44:30 +02:00
# define evIPC 7
2014-01-27 20:34:00 +01:00
# define evNetwork 8
2015-07-16 03:44:30 +02:00
# define evDebug 9
2012-11-26 16:26:15 +01:00
//Button options
# define BT_DEL 0x80000000
# define BT_HIDE 0x40000000
# define BT_NOFRAME 0x20000000
2015-08-02 00:08:58 +02:00
//Button MOUSE
2015-07-16 03:44:30 +02:00
# define MOUSE_LEFT 001b
# define MOUSE_RIGHT 010b
# define MOUSE_LR 011b
2015-07-12 01:45:19 +02:00
# define MOUSE_CENTER 100b
2015-07-10 16:01:38 +02:00
2015-02-24 21:47:16 +01:00
//ASCII KEYS
# define ASCII_KEY_BS 008
# define ASCII_KEY_TAB 009
# define ASCII_KEY_ENTER 013
# define ASCII_KEY_ESC 027
# define ASCII_KEY_DEL 182
# define ASCII_KEY_INS 185
# define ASCII_KEY_SPACE 032
# define ASCII_KEY_LEFT 176
# define ASCII_KEY_RIGHT 179
# define ASCII_KEY_DOWN 177
# define ASCII_KEY_UP 178
# define ASCII_KEY_HOME 180
# define ASCII_KEY_END 181
# define ASCII_KEY_PGDN 183
# define ASCII_KEY_PGUP 184
2015-07-16 03:44:30 +02:00
//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
2012-11-26 16:26:15 +01:00
//-------------------------------------------------------------------------
2015-02-26 17:48:22 +01:00
: struct raw_image {
dword w , h , data ;
} ;
2015-07-10 16:01:38 +02:00
/**
2015-08-02 00:08:58 +02:00
* The structure of the MOUSE
2015-07-10 16:01:38 +02:00
* x - coordinate X
2015-07-11 18:01:28 +02:00
* y - coordinate Y
2015-07-10 16:01:38 +02:00
* xx and yy - time coordinates
2015-08-02 00:08:58 +02:00
* lkm - left MOUSE button
* pkm - right MOUSE button
* mkm - MOUSE wheel
2015-07-10 16:01:38 +02:00
* key - keycode button
* tmp - time keycode
* down - key event press
* up - key release events
2015-08-02 00:08:58 +02:00
* move - event MOUSE movements
2015-07-12 01:45:19 +02:00
* click - when clicked
2015-07-20 01:09:56 +02:00
* dblclick - double - click the default 50 ( 500 ms )
2015-08-03 01:43:40 +02:00
* drag - drag the element event
2015-07-10 16:01:38 +02:00
*/
2015-07-12 01:45:19 +02:00
2015-07-20 01:09:56 +02:00
: dword __TMP_TIME , MOUSE_TIME ;
2015-08-02 00:08:58 +02:00
: struct MOUSE
2012-11-26 16:26:15 +01:00
{
2015-08-03 01:43:40 +02:00
signed x , y , xx , yy , lkm , mkm , pkm , key , tmp , tmp_time , hor , vert , down , up , move , click , dblclick , drag , left , top ;
2015-07-16 03:44:30 +02:00
dword handle , _ ;
byte cmd ;
void clearTime ( ) ;
2012-11-26 16:26:15 +01:00
void get ( ) ;
2015-07-16 03:44:30 +02:00
void set ( ) ;
void center ( ) ;
dword hide ( ) ;
void slider ( ) ;
void show ( ) ;
2015-08-02 00:08:58 +02:00
} mouse ;
: void MOUSE : : clearTime ( )
2015-07-16 03:44:30 +02:00
{
tmp_time = GetStartTime ( ) + MOUSE_TIME ;
}
2015-08-02 00:08:58 +02:00
: void MOUSE : : show ( )
2015-07-16 03:44:30 +02:00
{
if ( ! handle ) return ;
ECX = handle ;
EAX = 37 ;
EBX = 5 ;
$ int 0x40 ;
}
2015-08-02 00:08:58 +02:00
: dword MOUSE : : hide ( )
2015-07-16 03:44:30 +02:00
{
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 ;
}
2015-08-02 00:08:58 +02:00
//set new attributes MOUSE
: void MOUSE : : set ( )
2015-07-16 03:44:30 +02:00
{
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
}
}
2015-08-02 00:08:58 +02:00
: void MOUSE : : center ( )
2015-07-16 03:44:30 +02:00
{
EAX = 18 ;
EBX = 15 ;
$ int 0x40
}
2012-11-26 16:26:15 +01:00
2015-08-02 00:08:58 +02:00
//get new attributes MOUSE
: void MOUSE : : get ( )
2012-11-26 16:26:15 +01:00
{
EAX = 37 ;
EBX = 1 ;
$ int 0x40
$ mov ebx , eax
$ shr eax , 16
$ and ebx , 0x0000FFFF
x = EAX ;
y = EBX ;
2013-10-09 20:10:23 +02:00
if ( x > 6000 ) x - = 65535 ;
if ( y > 6000 ) y - = 65535 ;
2012-11-26 16:26:15 +01:00
EAX = 37 ;
EBX = 2 ;
$ int 0x40
$ mov ebx , eax
2015-04-02 23:27:51 +02:00
$ mov ecx , eax
2015-07-10 16:01:38 +02:00
key = EAX ;
2012-11-26 16:26:15 +01:00
$ and eax , 0x00000001
$ shr ebx , 1
$ and ebx , 0x00000001
2015-04-02 23:27:51 +02:00
$ shr ecx , 2
$ and ecx , 0x00000001
2012-11-26 16:26:15 +01:00
lkm = EAX ;
pkm = EBX ;
2015-04-02 23:27:51 +02:00
mkm = ECX ;
2015-07-10 16:01:38 +02:00
2015-08-02 00:08:58 +02:00
//when you release the MOUSE button
2015-08-03 01:43:40 +02:00
// Mouse Move Event
if ( xx ! = x ) | | ( yy ! = y )
{
move = true ;
xx = x ;
yy = y ;
}
else move = false ;
2015-07-16 03:44:30 +02:00
// Mouse Up Event
2015-08-03 01:43:40 +02:00
if ( cmd ) & & ( ! key ) {
up = true ;
2015-07-10 16:01:38 +02:00
down = false ;
2015-08-03 01:43:40 +02:00
drag = false ;
2015-07-12 01:45:19 +02:00
if ( ! move ) click = true ;
__TMP_TIME = GetStartTime ( ) ;
2015-08-03 01:43:40 +02:00
if ( __TMP_TIME - tmp_time < = MOUSE_TIME )
{
dblclick = true ;
click = false ;
}
2015-07-12 01:45:19 +02:00
tmp_time = __TMP_TIME ;
2015-07-10 16:01:38 +02:00
//returns the key code
key = tmp ;
lkm = 1 & tmp ;
pkm = 2 & tmp ;
pkm > > = 1 ;
mkm = 4 & tmp ;
mkm > > = 2 ;
2015-07-16 03:44:30 +02:00
cmd = false ;
2015-07-10 16:01:38 +02:00
}
2015-08-02 00:08:58 +02:00
//when you press the MOUSE button
2015-07-16 03:44:30 +02:00
// Mouse Down Event/Move Event
2015-08-03 01:43:40 +02:00
else
{
2015-07-16 03:44:30 +02:00
up = false ;
click = false ;
2015-07-12 01:45:19 +02:00
dblclick = false ;
2015-07-16 03:44:30 +02:00
down = false ;
// Mouse Move Event
2015-08-03 01:43:40 +02:00
if ( key ) if ( ! cmd )
2015-07-12 01:45:19 +02:00
{
2015-08-03 01:43:40 +02:00
down = true ;
if ( move ) drag = true ;
cmd = true ;
tmp = key ;
2015-07-10 16:01:38 +02:00
}
}
2015-07-11 18:01:28 +02:00
//scroll
EAX = 37 ;
2012-11-26 16:26:15 +01:00
EBX = 7 ;
$ int 0x40
$ mov ebx , eax
$ shr eax , 16
$ and ebx , 0x0000FFFF
//hor = EAX;
vert = EBX ;
}
2015-07-23 13:54:26 +02:00
2015-08-02 00:08:58 +02:00
: void MOUSE : : slider ( )
2015-07-16 03:44:30 +02:00
{
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 )
{
}
2012-11-26 16:26:15 +01:00
2015-02-26 17:48:22 +01:00
: struct system_colors
2012-11-26 16:26:15 +01:00
{
dword frame , grab , grab_button , grab_button_text , grab_text ,
work , work_button , work_button_text , work_text , work_graph ;
void get ( ) ;
} ;
2015-02-26 17:48:22 +01:00
: void system_colors : : get ( )
2012-11-26 16:26:15 +01:00
{
EAX = 48 ;
EBX = 3 ;
ECX = # frame ;
EDX = 40 ;
$ int 0x40
}
//------------------------------------------------------------------------------
2015-07-20 01:09:56 +02:00
: dword wait_event_code ;
2012-11-26 16:26:15 +01:00
inline fastcall dword WaitEvent ( )
{
$ mov eax , 10
$ int 0x40
2015-07-16 03:44:30 +02:00
wait_event_code = EAX ;
2015-07-21 03:10:37 +02:00
//if(wait_event_code==evMouse) MOUSE.get();
//return wait_event_code;
2012-11-26 16:26:15 +01:00
}
inline fastcall dword CheckEvent ( )
{
$ mov eax , 11
$ int 0x40
}
2015-07-16 03:44:30 +02:00
inline fastcall dword WaitEventTimeout ( EBX )
2012-11-26 16:26:15 +01:00
{
$ mov eax , 23
$ int 0x40
}
2015-07-16 03:44:30 +02:00
inline fastcall SetEventMask ( EBX )
2012-11-26 16:26:15 +01:00
{
$ mov eax , 40
$ int 0x40
}
inline fastcall ScancodesGeting ( ) {
$ mov eax , 66
$ mov ebx , 1
$ mov ecx , 1 //᪠<> <E1AAA0> <EFBFBD> <EFBFBD> <EFBFBD>
$ int 0x40
}
inline fastcall word GetKey ( ) //+Gluk fix
{
$ push edx
2012-12-15 01:16:06 +01:00
GETKEY :
2012-11-26 16:26:15 +01:00
$ mov eax , 2
$ int 0x40
$ cmp eax , 1
2012-12-15 01:16:06 +01:00
$ jne GETKEYI
2012-11-26 16:26:15 +01:00
$ mov ah , dh
2012-12-15 01:16:06 +01:00
$ jmp GETKEYII //jz?
GETKEYI :
2012-11-26 16:26:15 +01:00
$ mov dh , ah
2012-12-15 01:16:06 +01:00
$ jmp GETKEY
GETKEYII :
2012-11-26 16:26:15 +01:00
$ pop edx
$ shr eax , 8
}
2014-03-15 11:23:06 +01:00
inline fastcall int GetFullKey ( )
{
$ mov eax , 2
$ int 0x40
}
2012-11-26 16:26:15 +01:00
2015-07-16 03:44:30 +02:00
inline fastcall pause ( EBX )
2012-11-26 16:26:15 +01:00
{
$ mov eax , 5
$ int 0x40
}
inline fastcall word GetButtonID ( )
{
$ mov eax , 17
$ int 0x40
$ shr eax , 8
}
inline fastcall dword GetFreeRAM ( )
{
$ mov eax , 18
$ mov ebx , 16
$ int 0x40
//return eax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
2015-07-20 01:09:56 +02:00
inline void draw_line ( dword x1 , y1 , x2 , y2 , color )
{
x2 - - ; y2 - - ; y1 - - ;
$ mov EAX , 38
EBX = x1 < < 16 ;
EBX | = x2 ;
ECX = y1 < < 16 ;
ECX | = y2 ;
$ mov EDX , color
$ int 0x40
}
2015-07-16 03:44:30 +02:00
inline fastcall dword LoadDriver ( ECX ) //ECX - <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2012-11-26 16:26:15 +01:00
{
$ mov eax , 68
$ mov ebx , 16
$ int 0x40
//return 0 - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> eax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
2015-07-16 03:44:30 +02:00
inline fastcall dword RuleDriver ( ECX ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2012-11-26 16:26:15 +01:00
{
$ mov eax , 68
$ mov ebx , 17
$ int 0x40
//return eax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
struct proc_info
{
# define SelfInfo -1
dword use_cpu ;
word pos_in_stack , num_slot , rezerv1 ;
2013-10-30 02:12:01 +01:00
unsigned char name [ 11 ] ;
2012-11-26 16:26:15 +01:00
char rezerv2 ;
dword adress , use_memory , ID , left , top , width , height ;
word status_slot , rezerv3 ;
dword work_left , work_top , work_width , work_height ;
char status_window ;
2012-12-15 01:16:06 +01:00
dword cwidth , cheight ;
byte reserved [ 1024 - 71 - 8 ] ;
2012-11-26 16:26:15 +01:00
} ;
2015-07-16 03:44:30 +02:00
inline fastcall void GetProcessInfo ( EBX , ECX )
2012-11-26 16:26:15 +01:00
{
$ mov eax , 9 ;
$ int 0x40
2012-12-15 01:16:06 +01:00
DSDWORD [ EBX + 71 ] = DSDWORD [ EBX + 42 ] - 9 ; //set cwidth
DSDWORD [ EBX + 75 ] = DSDWORD [ EBX + 46 ] - GetSkinHeight ( ) - 4 ; //set cheight
2012-11-26 16:26:15 +01:00
}
inline fastcall int GetPointOwner ( EBX , ECX ) //ebx=m.x, ecx=m.y
{
$ mov eax , 34
$ int 0x40
}
inline fastcall int GetProcessSlot ( ECX )
{
EAX = 18 ;
EBX = 21 ;
$ int 0x40
}
inline fastcall int GetActiveProcess ( )
{
EAX = 18 ;
EBX = 7 ;
$ int 0x40
}
2013-10-24 20:26:04 +02:00
: int CheckActiveProcess ( int Form_ID )
{
2013-11-05 00:27:39 +01:00
int id9 = GetProcessSlot ( Form_ID ) ;
if ( id9 = = GetActiveProcess ( ) ) return 1 ;
2013-10-24 20:26:04 +02:00
return 0 ;
}
2012-12-15 16:56:24 +01:00
inline fastcall void ActivateWindow ( ECX )
{
EAX = 18 ;
EBX = 3 ;
$ int 0x40
}
2015-02-18 20:52:40 +01:00
inline fastcall int MinimizeWindow ( )
{
EAX = 18 ;
EBX = 10 ;
$ int 0x40
}
2015-07-16 03:44:30 +02:00
inline fastcall int CreateThread ( ECX , EDX )
2012-11-26 16:26:15 +01:00
{
$ mov eax , 51
$ mov ebx , 1
$ int 0x40
}
inline fastcall void SwitchToAnotherThread ( )
{
$ mov eax , 68
$ mov ebx , 1
$ int 0x40
}
2013-04-08 15:21:32 +02:00
inline fastcall int SendWindowMessage ( ECX , EDX )
2013-04-04 19:07:38 +02:00
{
$ mov eax , 72
$ mov ebx , 1
$ int 0x40
}
2012-11-26 16:26:15 +01:00
inline fastcall int KillProcess ( ECX )
{
$ mov eax , 18 ;
$ mov ebx , 18 ;
$ int 0x40
}
# define TURN_OFF 2
# define REBOOT 3
# define KERNEL 4
inline fastcall int ExitSystem ( ECX )
{
$ mov eax , 18
$ mov ebx , 9
$ int 0x40
}
inline fastcall ExitProcess ( )
{
$ mov eax , - 1 ;
$ int 0x40
}
//------------------------------------------------------------------------------
//eax = <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (1=eng, 2=fi, 3=ger, 4=rus)
inline fastcall int GetSystemLanguage ( )
{
EAX = 26 ;
EBX = 5 ;
$ int 0x40
}
inline fastcall GetSkinHeight ( )
{
$ push ebx
$ mov eax , 48
$ mov ebx , 4
$ int 0x40
$ pop ebx
}
inline fastcall void SetSystemSkin ( ECX )
{
EAX = 48 ;
EBX = 8 ;
$ int 0x40
}
inline fastcall int GetScreenWidth ( )
{
$ mov eax , 14
$ int 0x40
$ shr eax , 16
}
inline fastcall int GetScreenHeight ( )
{
$ mov eax , 14
$ int 0x40
$ and eax , 0x0000FFFF
}
2015-02-18 20:52:40 +01:00
inline fastcall int GetClientTop ( )
{
$ mov eax , 48
$ mov ebx , 5
$ int 0x40
$ mov eax , ebx
$ shr eax , 16
}
inline fastcall int GetClientHeight ( )
{
$ mov eax , 48
$ mov ebx , 5
$ int 0x40
$ mov eax , ebx
}
2012-11-26 16:26:15 +01:00
inline fastcall dword LoadLibrary ( ECX )
{
$ mov eax , 68
$ mov ebx , 19
$ int 0x40
}
inline fastcall int TestBit ( EAX , CL )
{
$ shr eax , cl
$ and eax , 1
}
inline fastcall int PlaySpeaker ( ESI )
{
$ mov eax , 55
$ mov ebx , 55
$ int 0x40
}
2014-03-14 20:06:48 +01:00
inline fastcall void debugln ( EDX )
2012-11-26 16:26:15 +01:00
{
2012-12-19 18:37:24 +01:00
$ push eax
2012-11-26 16:26:15 +01:00
$ push ebx
$ push ecx
$ mov eax , 63
$ mov ebx , 1
2012-12-15 01:16:06 +01:00
NEXT_CHAR :
2012-11-26 16:26:15 +01:00
$ mov ecx , DSDWORD [ edx ]
$ or cl , cl
2012-12-15 01:16:06 +01:00
$ jz DONE
2012-11-26 16:26:15 +01:00
$ int 0x40
$ inc edx
2012-12-15 01:16:06 +01:00
$ jmp NEXT_CHAR
DONE :
2012-11-26 16:26:15 +01:00
$ mov cl , 13
$ int 0x40
$ mov cl , 10
$ int 0x40
$ pop ecx
$ pop ebx
2012-12-19 18:37:24 +01:00
$ pop eax
2012-11-26 16:26:15 +01:00
}
2012-12-06 08:49:06 +01:00
2014-03-15 11:23:06 +01:00
inline fastcall void debug ( EDX )
{
$ push eax
$ push ebx
$ push ecx
$ mov eax , 63
$ mov ebx , 1
NEXT_CHAR :
$ mov ecx , DSDWORD [ edx ]
$ or cl , cl
$ jz DONE
$ int 0x40
$ inc edx
$ jmp NEXT_CHAR
DONE :
$ pop ecx
$ pop ebx
$ pop eax
}
2013-03-11 19:16:24 +01:00
2012-12-06 08:49:06 +01:00
inline fastcall void debugch ( ECX )
{
2012-12-19 18:37:24 +01:00
$ push eax
$ push ebx
2012-12-06 08:49:06 +01:00
$ mov eax , 63
$ mov ebx , 1
$ int 0x40
2012-12-19 18:37:24 +01:00
$ pop ebx
$ pop eax
2012-12-06 08:49:06 +01:00
}
2012-11-26 16:26:15 +01:00
//------------------------------------------------------------------------------
2013-10-01 00:03:07 +02:00
void DefineAndDrawWindow ( dword x , y , size_w , size_h , byte WindowType , dword WindowAreaColor , EDI , ESI )
2012-11-26 16:26:15 +01:00
{
EAX = 12 ; // function 12:tell os about windowdraw
EBX = 1 ;
$ int 0x40
2015-07-16 03:44:30 +02:00
$ xor EAX , EAX
2013-10-01 00:03:07 +02:00
EBX = x < < 16 + size_w ;
ECX = y < < 16 + size_h ;
2015-07-16 03:44:30 +02:00
2012-11-26 16:26:15 +01:00
EDX = WindowType < < 24 | WindowAreaColor ;
$ int 0x40
EAX = 12 ; // function 12:tell os about windowdraw
EBX = 2 ;
$ int 0x40
}
inline fastcall MoveSize ( EBX , ECX , EDX , ESI )
{
$ mov eax , 67
$ int 0x40
}
inline fastcall void DrawTitle ( ECX )
{
EAX = 71 ;
EBX = 1 ;
$ int 0x40 ;
}
2012-12-15 01:16:06 +01:00
void WriteTextB ( dword x , y , byte fontType , dword color , EDX )
{
EAX = 4 ;
EBX = x < < 16 + y ;
ECX = fontType < < 24 + color ;
2013-03-11 19:16:24 +01:00
ESI = 0 ;
2012-12-15 01:16:06 +01:00
$ int 0x40 ;
$ add ebx , 1 < < 16
$ int 0x40
}
void WriteText ( dword x , y , byte fontType , dword color , EDX )
2012-11-26 16:26:15 +01:00
{
EAX = 4 ;
EBX = x < < 16 + y ;
ECX = fontType < < 24 + color ;
$ int 0x40 ;
}
2013-04-12 02:15:39 +02:00
dword WriteBufText ( dword x , y , byte fontType , dword color , EDX , EDI )
{
EAX = 4 ;
EBX = x < < 16 + y ;
ECX = fontType < < 24 + color ;
$ int 0x40 ;
}
2012-11-26 16:26:15 +01:00
void WriteNumber ( dword x , y , byte fontType , dword color , count , ECX )
{
EAX = 47 ;
EBX = count < < 16 ;
EDX = x < < 16 + y ;
ESI = fontType < < 24 + color ;
$ int 0x40 ;
}
2013-03-11 19:16:24 +01:00
void CopyScreen ( dword EBX , x , y , w , h )
2012-11-26 16:26:15 +01:00
{
EAX = 36 ;
2013-03-11 19:16:24 +01:00
ECX = w < < 16 + h ;
2012-11-26 16:26:15 +01:00
EDX = x < < 16 + y ;
$ int 0x40 ;
}
2013-04-12 02:15:39 +02:00
: dword GetPixelColor ( dword x , x_size , y )
2012-11-26 16:26:15 +01:00
{
$ mov eax , 35
EBX = y * x_size + x ;
$ int 0x40
}
void _PutImage ( dword x , y , w , h , EBX )
{
EAX = 7 ;
ECX = w < < 16 + h ;
EDX = x < < 16 + y ;
$ int 0x40
}
void PutPaletteImage ( dword EBX , w , h , x , y , ESI , EDI )
{
EAX = 65 ;
ECX = w < < 16 + h ;
EDX = x < < 16 + y ;
EBP = 0 ;
$ int 0x40
}
inline fastcall void PutPixel ( EBX , ECX , EDX )
{
EAX = 1 ;
$ int 0x40
}
void DrawBar ( dword x , y , w , h , EDX )
{
2013-02-04 14:15:13 +01:00
if ( h < = 0 ) | | ( h > 60000 ) | | ( w < = 0 ) | | ( w > 60000 ) return ; //bad boy :)
2012-11-26 16:26:15 +01:00
EAX = 13 ;
EBX = x < < 16 + w ;
ECX = y < < 16 + h ;
$ int 0x40
}
void DefineButton ( dword x , y , w , h , EDX , ESI )
{
2012-12-15 01:16:06 +01:00
EAX = 8 ;
$ push edx
EDX + = BT_DEL ;
$ int 0x40 ;
$ pop edx
EBX = x < < 16 + w ;
ECX = y < < 16 + h ;
$ int 0x40
}
2015-07-20 01:09:56 +02:00
inline RefreshWindow ( dword ID_REFRESH , ID_ACTIVE )
{
EAX = 18 ;
EBX = 22 ;
ECX = 3 ;
EDX = ID_REFRESH ;
$ int 0x40
EAX = 18 ;
EBX = 3 ;
EDX = ID_ACTIVE ;
$ int 0x40
}
2015-07-21 03:10:37 +02:00
inline getIPC ( ECX , EDX )
{
$ mov EAX , 60
$ mov EBX , 2
$ int 0x40
}
inline sendIPC ( ECX , EDX , ESI )
{
$ mov EAX , 60
$ mov EBX , 1
$ int 0x40
}
2012-12-15 01:16:06 +01:00
void UnsafeDefineButton ( dword x , y , w , h , EDX , ESI )
{
EAX = 8 ;
2012-11-26 16:26:15 +01:00
EBX = x < < 16 + w ;
ECX = y < < 16 + h ;
$ int 0x40
}
inline fastcall void DeleteButton ( EDX )
{
EAX = 8 ;
EDX + = BT_DEL ;
2015-07-30 16:54:30 +02:00
$ int 0x40
2015-03-25 12:46:22 +01:00
}
inline fastcall dword GetStartTime ( )
{
$ mov eax , 26
$ mov ebx , 9
$ int 0x40
2015-07-12 01:45:19 +02:00
}
2015-07-23 13:54:26 +02:00
: dword X_EventRedrawWindow , Y_EventRedrawWindow ;
: void _EventRedrawWindow ( )
{
loop ( ) switch ( WaitEvent ( ) )
{
case evReDraw :
DefineAndDrawWindow ( X_EventRedrawWindow , Y_EventRedrawWindow , 100 , 1 , 1 , 0x34 , 0xFFFFFF , " " ) ;
pause ( 10 ) ;
ExitProcess ( ) ;
break ;
}
}
: void EventRedrawWindow ( dword x , y )
{
dword mem = malloc ( 4096 ) ;
X_EventRedrawWindow = x ;
Y_EventRedrawWindow = y ;
CreateThread ( # _EventRedrawWindow , mem + 4092 ) ;
}
2015-07-16 03:44:30 +02:00
: 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 ;
2015-07-21 03:10:37 +02:00
case evKey :
2015-07-16 03:44:30 +02:00
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 ;
}
2015-07-20 01:09:56 +02:00
: struct _screen
{
dword width , height ;
} screen ;
: struct _skin
{
dword width , height ;
2015-07-20 01:38:20 +02:00
} SKIN ;
2015-07-20 01:09:56 +02:00
2015-08-02 00:08:58 +02:00
: void DrawDate ( dword x , y , color , in_date )
{
//char text[15];
EDI = in_date ;
EAX = 47 ;
EBX = 2 < < 16 ;
EDX = x < < 16 + y ;
ESI = 0x80 < < 24 + color ;
ECX = EDI . date . day ;
$ int 0x40 ;
EDX + = 18 < < 16 ;
ECX = EDI . date . month ;
$ int 0x40 ;
EDX + = 18 < < 16 ;
EBX = 4 < < 16 ;
ECX = EDI . date . year ;
$ int 0x40 ;
PutPixel ( x + 14 , y + 6 , color ) ;
PutPixel ( x + 32 , y + 6 , color ) ;
//sprintf(#text,"%d",EDI.date.year);
//WriteText(x, y, 0x80, 0x000000, #text);
}
2015-08-02 13:41:41 +02:00
: void __path_name__ ( dword BUF , PATH )
{
dword beg = PATH ;
dword pos = PATH ;
dword sav = PATH ;
dword i ;
while ( DSBYTE [ pos ] )
{
if ( DSBYTE [ pos ] = = ' / ' ) sav = pos ;
pos + + ;
}
i = sav - beg ;
while ( i )
{
DSBYTE [ BUF ] = DSBYTE [ beg ] ;
beg + + ;
BUF + + ;
i - - ;
}
/*while(DSBYTE[beg])
{
DSBYTE [ BUF1 ] = DSBYTE [ beg ] ;
beg + + ;
BUF1 + + ;
} */
//DSBYTE[BUF1] = 0;
DSBYTE [ BUF ] = 0 ;
}
2015-08-02 16:40:41 +02:00
char __BUF_DIR__ [ 4096 ] ;
: struct SELF
{
dword dir ;
dword file ;
dword path ;
} self ;
2015-08-02 13:41:41 +02:00
2015-07-12 01:45:19 +02:00
dword __generator ; // random number generator - <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2015-07-20 01:09:56 +02:00
: dword program_path_length ;
2015-07-16 03:44:30 +02:00
2015-07-12 01:45:19 +02:00
//The initialization of the initial data before running
2015-08-02 16:40:41 +02:00
void ______INIT______ ( )
2015-07-12 01:45:19 +02:00
{
2015-08-02 16:40:41 +02:00
self . dir = # __BUF_DIR__ ;
self . file = 0 ;
self . path = I_Path ;
__path_name__ ( # __BUF_DIR__ , I_Path ) ;
2015-07-20 01:09:56 +02:00
2015-08-02 13:41:41 +02:00
SKIN . height = GetSkinHeight ( ) ;
2015-07-20 01:09:56 +02:00
screen . width = GetScreenWidth ( ) ;
screen . height = GetScreenHeight ( ) ;
//program_path_length = strlen(I_Path);
2015-07-16 03:44:30 +02:00
MOUSE_TIME = 50 ; //Default 500 ms.
2015-07-12 01:45:19 +02:00
__generator = GetStartTime ( ) ;
2015-08-02 17:15:15 +02:00
$ push ebx
$ mov eax , 68
$ mov ebx , 11
$ int 0x40
$ pop ebx
2015-07-12 01:45:19 +02:00
main ( ) ;
2015-07-22 20:32:54 +02:00
}
2015-08-02 16:40:41 +02:00
______STOP______ :
2015-07-22 20:32:54 +02:00
# endif