Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
932 leency 1
#startaddress 0
2
#code32 TRUE
3
 
4
char   os_name[8]   = {'M','E','N','U','E','T','0','1'};
5
dword  os_version   = 0x00000001;
6
dword  start_addr   = #main;
7
dword  final_addr   = #stop+32;
8
dword  alloc_mem    = 0x00100000;
9
dword  x86esp_reg   = 0x0007fff0;
10
dword  I_Param      = 0x0;
11
dword  I_Icon       = 0x0;
12
 
13
//Events
14
#define evButton  3
15
#define evKey     2
16
#define evReDraw  1
17
 
18
//Button options
19
#define BT_DEL		0x80000000
20
#define BT_HIDE		0x40000000
21
#define BT_NOFRAME	0x20000000
22
 
23
 
24
//------------------------------------------------------------------------------
25
inline fastcall dword WaitEvent(){
26
 EAX = 10;
27
 $int 0x40
28
}
29
 
30
inline fastcall void ExitProcess(){
31
 EAX = -1;
32
 $int 0x40
33
}
34
 
35
 
36
inline fastcall word GetKey(){
37
 EAX = 2;
38
 $int  0x40
39
 EAX = EAX >> 8;
40
}
41
 
42
 
43
inline fastcall word GetButtonID(){
44
 EAX = 17;
45
 $int  0x40
46
 EAX = EAX >> 8;
47
}
48
 
49
//------------------------------------------------------------------------------
50
 
51
 
52
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword
53
	mainAreaColor,byte headerType,dword headerColor,EDI)
54
{
55
	EBX = x << 16 + sizeX;
56
	ECX = y << 16 + sizeY;
57
	EDX = mainAreaType << 24 | mainAreaColor;
58
	ESI = headerType << 24 | headerColor;
59
	$xor eax,eax
60
	$int 0x40
61
}
62
 
63
void WindowRedrawStatus(dword EBX)
64
{
65
	EAX = 12;
66
	$int 0x40
67
}
68
 
69
 
70
inline fastcall dword GetSkinWidth(){
71
	EAX = 48;
72
	EBX = 4;
73
	$int 0x40
74
}
75
 
76
 
77
void DefineButton(dword x,y,w,h,EDX,ESI){
78
	EAX = 8;
79
	EBX = x<<16+w;
80
	ECX = y<<16+h;
81
	$int 0x40
82
}
83
 
84
 
85
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
86
{
87
	EAX = 4;
88
	EBX = x<<16+y;
89
	ECX = fontType<<24+color;
90
	$int 0x40;
91
}
92
 
93
 
94
void DrawBar(dword x,y,w,h,EDX)
95
{
96
	EAX = 13;
97
	EBX = x<<16+w;
98
	ECX = y<<16+h;
99
 	$int 0x40
100
}
101
 
102
 
103
void DrawRegion(dword x,y,width,height,color1)
104
{
105
	DrawBar(x,y,width,1,color1); //полоса гор сверху
106
	DrawBar(x,y+height,width,1,color1); //полоса гор снизу
107
	DrawBar(x,y,1,height,color1); //полоса верт слева
108
	DrawBar(x+width,y,1,height+1,color1); //полоса верт справа
109
}
110
 
111
void DrawFlatButton(dword x,y,width,height,id,color)
112
{
113
	DrawRegion(x,y,width,height,0x94AECE);
114
	DrawBar(x+1,y+1,width-1,1,0xFFFFFF); //полоса гор белая
115
	DrawBar(x+1,y+height-1,width-2,1,0xC7C7C7); //тень верт
116
	DrawBar(x+1,y+1,1,height-1,0xFFFFFF); //полоса верт белая
117
	DrawBar(x+width-1,y+2,1,height-2,0xC7C7C7); //тень верт
118
	DrawBar(x+2,y+2,width-3,height-3,color); //заливка
119
	DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //определяем кнопку
120
}
121
 
122
 
123
void PutImage(dword EBX,w,h,x,y, EDI)
124
{
125
	EAX = 65;
126
	ECX = w<<16+h;
127
	EDX = x<<16+y;
128
	ESI = 8;
129
	EBP = 0;
130
	$int 0x40
131
}
132
 
133
void WriteNumber(dword x,y,byte fontType, dword color, count, ECX)
134
{
135
	EAX = 47;
136
	EBX = count<<16;
137
	EDX = x<<16+y;
138
	ESI = fontType<<24+color;
139
	$int 0x40;
140
}
141
 
142
 
143
dword generator;  // random number generator - для генерации случайных чисел
144
:int random(int max)
145
// get pseudo-random number - получить псевдослучайное число
146
{
147
  $rdtsc        // eax & edx
148
  $xor eax,edx
149
  $not eax
150
 
151
  EBX = generator;
152
  $ror ebx,3
153
  $xor ebx,0xdeadbeef
154
  EBX += EAX;
155
  generator = EBX;
156
 
157
  EAX += EBX;
158
  EAX = EAX % max;
159
}
160
 
161
 
162