Subversion Repositories Kolibri OS

Rev

Rev 2839 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2839 Rev 2874
1
//CODED by Veliant, Leency, Nable. GNU GPL licence.
1
//CODED by Veliant, Leency, Nable. GNU GPL licence.
2
 
2
 
3
#startaddress 0
3
#startaddress 0
4
#code32 TRUE
4
#code32 TRUE
5
 
5
 
6
char   os_name[8]   = {'M','E','N','U','E','T','0','1'};
6
char   os_name[8]   = {'M','E','N','U','E','T','0','1'};
7
dword  os_version   = 0x00000001;
7
dword  os_version   = 0x00000001;
8
dword  start_addr   = #main;
8
dword  start_addr   = #main;
9
dword  final_addr   = #stop+32;
9
dword  final_addr   = #stop+32;
10
dword  alloc_mem    = #0x00100000;
10
dword  alloc_mem    = #0x00100000;
11
dword  x86esp_reg   = #0x00100000;
11
dword  x86esp_reg   = #0x00100000;
12
dword  I_Param      = #param;
12
dword  I_Param      = #param;
13
dword  I_Path       = #program_path;
13
dword  I_Path       = #program_path;
14
char param[4096];
14
char param[4096];
15
char program_path[4096];
15
char program_path[4096];
16
 
16
 
17
//Events
17
//Events
18
#define evMouse   6
18
#define evMouse   6
19
#define evButton  3
19
#define evButton  3
20
#define evKey     2
20
#define evKey     2
21
#define evReDraw  1
21
#define evReDraw  1
22
 
22
 
23
#define OLD      -1
23
#define OLD      -1
24
#define true      1
24
#define true      1
25
#define false     0
25
#define false     0
26
 
26
 
27
//Button options
27
//Button options
28
#define BT_DEL      0x80000000
28
#define BT_DEL      0x80000000
29
#define BT_HIDE     0x40000000
29
#define BT_HIDE     0x40000000
30
#define BT_NOFRAME  0x20000000
30
#define BT_NOFRAME  0x20000000
31
 
31
 
32
//-------------------------------------------------------------------------
32
//-------------------------------------------------------------------------
33
 
33
 
34
struct mouse
34
struct mouse
35
{
35
{
36
	dword x,y,lkm,pkm,hor,vert;
36
	int x,y,lkm,pkm,hor,vert;
37
	void get();
37
	void get();
38
};
38
};
39
 
39
 
40
void mouse::get()
40
void mouse::get()
41
{
41
{
42
	EAX = 37;
42
	EAX = 37;
43
	EBX = 1;
43
	EBX = 1;
44
	$int	0x40
44
	$int	0x40
45
	$mov	ebx, eax
45
	$mov	ebx, eax
46
	$shr	eax, 16
46
	$shr	eax, 16
47
	$and	ebx,0x0000FFFF
47
	$and	ebx,0x0000FFFF
48
	x = EAX;
48
	x = EAX;
49
	y = EBX;
49
	y = EBX;
50
	EAX = 37;
50
	EAX = 37;
51
	EBX = 2;
51
	EBX = 2;
52
	$int	0x40
52
	$int	0x40
53
	$mov	ebx, eax
53
	$mov	ebx, eax
54
	$and	eax, 0x00000001
54
	$and	eax, 0x00000001
55
	$shr	ebx, 1
55
	$shr	ebx, 1
56
	$and	ebx, 0x00000001
56
	$and	ebx, 0x00000001
57
	lkm = EAX;
57
	lkm = EAX;
58
	pkm = EBX;
58
	pkm = EBX;
59
	EAX = 37; //áªà®««
59
	EAX = 37; //áªà®««
60
	EBX = 7;
60
	EBX = 7;
61
	$int	0x40
61
	$int	0x40
62
	$mov	ebx, eax
62
	$mov	ebx, eax
63
	$shr	eax, 16
63
	$shr	eax, 16
64
	$and	ebx,0x0000FFFF
64
	$and	ebx,0x0000FFFF
65
	//hor = EAX;
65
	//hor = EAX;
66
	vert = EBX;
66
	vert = EBX;
67
}
67
}
68
 
68
 
69
 
69
 
70
struct system_colors
70
struct system_colors
71
{
71
{
72
	dword frame,grab,grab_button,grab_button_text,grab_text,work,work_button,work_button_text,work_text,work_graph;
72
	dword frame,grab,grab_button,grab_button_text,grab_text,work,work_button,work_button_text,work_text,work_graph;
73
	void get();
73
	void get();
74
};
74
};
75
 
75
 
76
void system_colors::get()
76
void system_colors::get()
77
{
77
{
78
	EAX = 48;
78
	EAX = 48;
79
	EBX = 3;
79
	EBX = 3;
80
	ECX = #frame;
80
	ECX = #frame;
81
	EDX = 40;
81
	EDX = 40;
82
	$int 0x40
82
	$int 0x40
83
}
83
}
84
 
84
 
85
//------------------------------------------------------------------------------
85
//------------------------------------------------------------------------------
86
 
86
 
87
inline fastcall dword WaitEvent()
87
inline fastcall dword WaitEvent()
88
{
88
{
89
	$mov eax,10
89
	$mov eax,10
90
	$int 0x40
90
	$int 0x40
91
}
91
}
92
 
92
 
93
inline fastcall dword CheckEvent()
93
inline fastcall dword CheckEvent()
94
{
94
{
95
	$mov eax,11
95
	$mov eax,11
96
	$int 0x40
96
	$int 0x40
97
}
97
}
98
 
98
 
99
inline fastcall dword WaitEventTimeout( EBX)
99
inline fastcall dword WaitEventTimeout( EBX)
100
{
100
{
101
	$mov eax,23
101
	$mov eax,23
102
	$int 0x40
102
	$int 0x40
103
} 
103
} 
104
 
104
 
105
inline fastcall SetEventMask( EBX)
105
inline fastcall SetEventMask( EBX)
106
{
106
{
107
	$mov eax,40
107
	$mov eax,40
108
	$int 0x40
108
	$int 0x40
109
}
109
}
110
 
110
 
111
inline fastcall ScancodesGeting(){
111
inline fastcall ScancodesGeting(){
112
	$mov eax,66
112
	$mov eax,66
113
	$mov ebx,1
113
	$mov ebx,1
114
	$mov ecx,1 //᪠­ª®¤ë
114
	$mov ecx,1 //᪠­ª®¤ë
115
	$int 0x40
115
	$int 0x40
116
}
116
}
117
 
117
 
118
 
118
 
119
inline fastcall word GetKey()  //+Gluk fix
119
inline fastcall word GetKey()  //+Gluk fix
120
{
120
{
121
		$push edx
121
		$push edx
122
@getkey:
122
@getkey:
123
		$mov  eax,2
123
		$mov  eax,2
124
		$int  0x40
124
		$int  0x40
125
		$cmp eax,1
125
		$cmp eax,1
126
		$jne getkeyi
126
		$jne getkeyi
127
		$mov ah,dh
127
		$mov ah,dh
128
		$jmp getkeyii //jz?
128
		$jmp getkeyii //jz?
129
@getkeyi:
129
@getkeyi:
130
		$mov dh,ah
130
		$mov dh,ah
131
		$jmp getkey
131
		$jmp getkey
132
@getkeyii:
132
@getkeyii:
133
		$pop edx
133
		$pop edx
134
		$shr eax,8
134
		$shr eax,8
135
}
135
}
136
 
136
 
137
 
137
 
138
inline fastcall Pause( EBX)
138
inline fastcall Pause( EBX)
139
{
139
{
140
	$mov eax, 5
140
	$mov eax, 5
141
	$int 0x40
141
	$int 0x40
142
}
142
}
143
 
143
 
144
inline fastcall word GetButtonID()
144
inline fastcall word GetButtonID()
145
{
145
{
146
	$mov eax,17
146
	$mov eax,17
147
	$int  0x40
147
	$int  0x40
148
	$shr eax,8
148
	$shr eax,8
149
}
149
}
150
 
150
 
151
//----------------------------------------
151
//----------------------------------------
152
 
152
 
153
struct proc_info
153
struct proc_info
154
{
154
{
155
	#define SelfInfo -1
155
	#define SelfInfo -1
156
	dword	use_cpu;
156
	dword	use_cpu;
157
	word	pos_in_stack,num_slot,rezerv1;
157
	word	pos_in_stack,num_slot,rezerv1;
158
	char	name[11];
158
	char	name[11];
159
	char	rezerv2;
159
	char	rezerv2;
160
	dword	adress,use_memory,ID,left,top,width,height;
160
	dword	adress,use_memory,ID,left,top,width,height;
161
	word	status_slot,rezerv3;
161
	word	status_slot,rezerv3;
162
	dword	work_left,work_top,work_width,work_height;
162
	dword	work_left,work_top,work_width,work_height;
163
	char	status_window;
163
	char	status_window;
164
	void	GetInfo( ECX);
164
	void	GetInfo( ECX);
165
	byte    reserved[1024-71];
165
	byte    reserved[1024-71];
166
};
166
};
167
 
167
 
168
void GetProcessInfo( EBX, ECX)
168
inline fastcall void GetProcessInfo( EBX, ECX)
169
{
169
{
170
	$mov eax,9;
170
	$mov eax,9;
171
	$int  0x40
171
	$int  0x40
172
}
172
}
173
 
173
 
174
inline fastcall int GetPointOwner( EBX, ECX) //ebx=m.x, ecx=m.y
174
inline fastcall int GetPointOwner( EBX, ECX) //ebx=m.x, ecx=m.y
175
{
175
{
176
	$mov eax,34
176
	$mov eax,34
177
	$int 0x40
177
	$int 0x40
178
}
178
}
179
 
179
 
180
inline fastcall int GetProcessSlot( ECX)
180
inline fastcall int GetProcessSlot( ECX)
181
{
181
{
182
	EAX = 18;
182
	EAX = 18;
183
	EBX = 21;
183
	EBX = 21;
184
	$int 0x40
184
	$int 0x40
185
}
185
}
186
 
186
 
187
inline fastcall int GetActiveProcess()
187
inline fastcall int GetActiveProcess()
188
{
188
{
189
	EAX = 18;
189
	EAX = 18;
190
	EBX = 7;
190
	EBX = 7;
191
	$int 0x40
191
	$int 0x40
192
}
192
}
193
 
193
 
194
inline fastcall int CreateThread( ECX,EDX)
194
inline fastcall int CreateThread( ECX,EDX)
195
{
195
{
196
	$mov eax,51
196
	$mov eax,51
197
	$mov ebx,1
197
	$mov ebx,1
198
	$int 0x40
198
	$int 0x40
199
}
199
}
200
 
200
 
201
inline fastcall void SwitchToAnotherThread()
201
inline fastcall void SwitchToAnotherThread()
202
{
202
{
203
	$mov eax,68
203
	$mov eax,68
204
	$mov ebx,1
204
	$mov ebx,1
205
	$int 0x40
205
	$int 0x40
206
}
206
}
207
 
207
 
208
inline fastcall ExitProcess()
208
inline fastcall int KillProcess( ECX)
209
{
209
{
-
 
210
	$mov eax,18;
210
	$mov eax,-1;
211
	$mov ebx,18;
211
	$int 0x40
212
	$int 0x40
212
}
213
}
213
 
214
 
214
inline fastcall int KillProcess( ECX)
215
inline fastcall int ExitSystem( ECX)
-
 
216
{
-
 
217
	#define TURN_OFF 2
-
 
218
	#define REBOOT 3
-
 
219
	#define KERNEL 4
215
{
220
	
-
 
221
	$mov eax, 18
-
 
222
	$mov ebx, 9
-
 
223
	$int 0x40
-
 
224
}
-
 
225
 
-
 
226
inline fastcall ExitProcess()
216
	$mov eax,18;
227
{
217
	$mov ebx,18;
228
	$mov eax,-1;
218
	$int 0x40
229
	$int 0x40
219
}
230
}
220
 
231
 
221
//------------------------------------------------------------------------------
232
//------------------------------------------------------------------------------
222
 
233
 
223
//eax = ÿçûê ñèñòåìû (1=eng, 2=fi, 3=ger, 4=rus)
234
//eax = ÿçûê ñèñòåìû (1=eng, 2=fi, 3=ger, 4=rus)
224
inline fastcall int GetSystemLanguage()
235
inline fastcall int GetSystemLanguage()
225
{
236
{
226
	EAX = 26;
237
	EAX = 26;
227
	EBX = 5;
238
	EBX = 5;
228
	$int 0x40
239
	$int 0x40
229
}
240
}
230
 
241
 
231
inline fastcall dword GetSkinWidth()
242
inline fastcall dword GetSkinHeight()
232
{
243
{
233
	$push ebx
244
	$push ebx
234
	$mov  eax,48
245
	$mov  eax,48
235
	$mov  ebx,4
246
	$mov  ebx,4
236
	$int 0x40
247
	$int 0x40
237
	$pop  ebx
248
	$pop  ebx
238
}
249
}
239
 
250
 
240
inline fastcall void SetSystemSkin( ECX)
251
inline fastcall void SetSystemSkin( ECX)
241
{
252
{
242
	EAX = 48;
253
	EAX = 48;
243
	EBX = 8;
254
	EBX = 8;
244
	$int 0x40
255
	$int 0x40
245
}
256
}
246
 
257
 
247
inline fastcall dword GetScreenWidth()
258
inline fastcall int GetScreenWidth()
248
{
259
{
249
	EAX = 14;
-
 
250
	EBX = 4;
260
	$mov eax, 14
251
	$int 0x40
261
	$int 0x40
-
 
262
	$shr eax, 16
-
 
263
}
-
 
264
 
-
 
265
inline fastcall int GetScreenHeight()
-
 
266
{
-
 
267
	$mov eax, 14
252
	$shr eax, 16
268
	$int 0x40
253
	$and eax,0x0000FFFF
269
	$and eax,0x0000FFFF
254
}
270
}
255
 
271
 
256
inline fastcall dword LoadLibrary( ECX)
272
inline fastcall dword LoadLibrary( ECX)
257
{
273
{
258
	$mov eax, 68 
274
	$mov eax, 68 
259
	$mov ebx, 19
275
	$mov ebx, 19
260
	$int  0x40
276
	$int  0x40
261
}
277
}
262
 
278
 
263
byte fastcall TestBit( EAX, CL)
279
inline fastcall int TestBit( EAX, CL)
264
{
280
{
265
	$shr eax,cl
281
	$shr eax,cl
266
	$and eax,1
282
	$and eax,1
267
}
283
}
268
 
284
 
269
 
285
 
270
//------------------------------------------------------------------------------
286
//------------------------------------------------------------------------------
271
 
287
 
272
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
288
void DefineAndDrawWindow(dword x,y, sizeX,sizeY, byte WindowType,dword WindowAreaColor, EDI)
273
{
289
{
274
	EAX = 12;              // function 12:tell os about windowdraw
290
	EAX = 12;              // function 12:tell os about windowdraw
275
	EBX = 1;
291
	EBX = 1;
276
	$int 0x40
292
	$int 0x40
-
 
293
	
277
	
294
	EAX = 0;
278
	EBX = x << 16 + sizeX;
295
	EBX = x << 16 + sizeX;
279
	ECX = y << 16 + sizeY;
296
	ECX = y << 16 + sizeY;
280
	EDX = mainAreaType << 24 | mainAreaColour;
-
 
281
	ESI = headerType << 24 | headerColour;
-
 
282
	$xor eax,eax
297
	EDX = WindowType << 24 | WindowAreaColor;
283
	$int 0x40
298
	$int 0x40
284
 
299
 
285
	EAX = 12;              // function 12:tell os about windowdraw
300
	EAX = 12;              // function 12:tell os about windowdraw
286
	EBX = 2;
301
	EBX = 2;
287
	$int 0x40
302
	$int 0x40
288
}
303
}
289
 
304
 
290
inline fastcall MoveSize( EBX,ECX,EDX,ESI)
305
inline fastcall MoveSize( EBX,ECX,EDX,ESI)
291
{
306
{
292
	EAX = 67;
307
	$mov eax, 67
293
	$int 0x40
308
	$int 0x40
294
}
309
}
295
 
310
 
296
inline fastcall void DrawTitle( ECX)
311
inline fastcall void DrawTitle( ECX)
297
{
312
{
298
	EAX = 71;
313
	EAX = 71;
299
	EBX = 1;
314
	EBX = 1;
300
	$int 0x40;
315
	$int 0x40;
301
}
316
}
302
 
317
 
303
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
318
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
304
{
319
{
305
	EAX = 4;
320
	EAX = 4;
306
	EBX = x<<16+y;
321
	EBX = x<<16+y;
307
	ECX = fontType<<24+color;
322
	ECX = fontType<<24+color;
308
	$int 0x40;
323
	$int 0x40;
309
}
324
}
310
 
325
 
311
void CopyScreen(dword EBX, x, y, sizeX, sizeY)
326
void CopyScreen(dword EBX, x, y, sizeX, sizeY)
312
{
327
{
313
  EAX = 36;
328
  EAX = 36;
314
  ECX = sizeX << 16 + sizeY;
329
  ECX = sizeX << 16 + sizeY;
315
  EDX = x << 16 + y;
330
  EDX = x << 16 + y;
316
  $int  0x40;
331
  $int  0x40;
317
}
332
}
-
 
333
 
-
 
334
dword GetPixelColor(dword x, x_size, y)
-
 
335
{
-
 
336
	$mov eax, 35
-
 
337
	EBX= y*x_size+x;
-
 
338
	$int 0x40
-
 
339
}
318
 
340
 
319
void PutImage(dword EBX,w,h,x,y)
341
void PutImage(dword EBX,w,h,x,y)
320
{
342
{
321
	EAX = 7;
343
	EAX = 7;
322
	ECX = w<<16+h;
344
	ECX = w<<16+h;
323
	EDX = x<<16+y;
345
	EDX = x<<16+y;
324
	$int 0x40
346
	$int 0x40
325
}
347
}
326
 
348
 
327
void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI)
349
void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI)
328
{
350
{
329
	EAX = 65;
351
	EAX = 65;
330
	ECX = w<<16+h;
352
	ECX = w<<16+h;
331
	EDX = x<<16+y;
353
	EDX = x<<16+y;
332
	EBP = 0;
354
	EBP = 0;
333
	$int 0x40
355
	$int 0x40
334
} 
356
} 
335
 
357
 
336
inline fastcall void PutPixel( EBX,ECX,EDX)
358
inline fastcall void PutPixel( EBX,ECX,EDX)
337
{
359
{
338
  EAX=1;
360
  EAX=1;
339
  $int 0x40
361
  $int 0x40
340
}
362
}
341
 
363
 
342
void DrawBar(dword x,y,w,h,EDX)
364
void DrawBar(dword x,y,w,h,EDX)
343
{
365
{
344
	EAX = 13;
366
	EAX = 13;
345
	EBX = x<<16+w;
367
	EBX = x<<16+w;
346
	ECX = y<<16+h;
368
	ECX = y<<16+h;
347
 	$int 0x40
369
 	$int 0x40
348
}
370
}
349
 
371
 
350
void DefineButton(dword x,y,w,h,EDX,ESI)
372
void DefineButton(dword x,y,w,h,EDX,ESI)
351
{
373
{
352
 	EAX = 8;
374
 	EAX = 8;
353
	EBX = x<<16+w;
375
	EBX = x<<16+w;
354
	ECX = y<<16+h;
376
	ECX = y<<16+h;
355
	$int 0x40
377
	$int 0x40
356
}
378
}
357
 
379
 
358
inline fastcall void DeleteButton( EDX)
380
inline fastcall void DeleteButton( EDX)
359
{
381
{
360
	EAX = 8;
382
	EAX = 8;
361
	EDX += BT_DEL;
383
	EDX += BT_DEL;
362
	$int 0x40;
384
	$int 0x40;
363
}
385
}
364
 
386
 
365
 
387
 
366
//------------------------------------------------------------------------------
388
//------------------------------------------------------------------------------
367
 
389
 
368
void DrawRegion(dword x,y,width,height,color1)
390
:void DrawRegion(dword x,y,width,height,color1)
369
{
391
{
370
	DrawBar(x,y,width,1,color1); //¯®«®á  £®à ᢥàåã
392
	DrawBar(x,y,width,1,color1); //¯®«®á  £®à ᢥàåã
371
	DrawBar(x,y+height,width,1,color1); //¯®«®á  £®à á­¨§ã
393
	DrawBar(x,y+height,width,1,color1); //¯®«®á  £®à á­¨§ã
372
	DrawBar(x,y,1,height,color1); //¯®«®á  ¢¥àåã á«¥¢ 
394
	DrawBar(x,y,1,height,color1); //¯®«®á  ¢¥àåã á«¥¢ 
373
	DrawBar(x+width,y,1,height+1,color1); //¯®«®á  ¢¥àåã á¯à ¢ 
395
	DrawBar(x+width,y,1,height+1,color1); //¯®«®á  ¢¥àåã á¯à ¢ 
374
}
396
}
375
 
397
 
376
void DrawRegion_3D(dword x,y,width,height,color1,color2)
398
:void DrawRegion_3D(dword x,y,width,height,color1,color2)
377
{
399
{
378
	DrawBar(x,y,width+1,1,color1); //¯®«®á  £®à ᢥàåã
400
	DrawBar(x,y,width+1,1,color1); //¯®«®á  £®à ᢥàåã
379
	DrawBar(x,y+1,1,height-1,color1); //¯®«®á  á«¥¢ 
401
	DrawBar(x,y+1,1,height-1,color1); //¯®«®á  á«¥¢ 
380
	DrawBar(x+width,y+1,1,height,color2); //¯®«®á  á¯à ¢ 
402
	DrawBar(x+width,y+1,1,height,color2); //¯®«®á  á¯à ¢ 
381
	DrawBar(x,y+height,width,1,color2); //¯®«®á  £®à á­¨§ã
403
	DrawBar(x,y+height,width,1,color2); //¯®«®á  £®à á­¨§ã
382
}
404
}
383
 
405
 
384
void DrawFlatButton(dword x,y,width,height,id,color,text)
406
:void DrawFlatButton(dword x,y,width,height,id,color,text)
385
{
407
{
386
	DrawRegion_3D(x,y,width,height,0x94AECE,0x94AECE);
408
	DrawRegion_3D(x,y,width,height,0x94AECE,0x94AECE);
387
	DrawRegion_3D(x+1,y+1,width-2,height-2,0xFFFFFF,0xC7C7C7);
409
	DrawRegion_3D(x+1,y+1,width-2,height-2,0xFFFFFF,0xC7C7C7);
388
	DrawBar(x+2,y+2,width-3,height-3,color); //§ «¨¢ª 
410
	DrawBar(x+2,y+2,width-3,height-3,color); //§ «¨¢ª 
389
	IF (id<>0)	DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //ª­®¯ª 
411
	IF (id<>0)	DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //ª­®¯ª 
390
	//WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0);
412
	//WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0);
391
	WriteText(width/2+x+1,height/2-3+y,0x80,0,text,0);
413
	WriteText(width/2+x+1,height/2-3+y,0x80,0,text,0);
392
}
414
}
393
 
415
 
394
void DrawCircle(int x, y, r)
416
:void DrawCircle(int x, y, r)
395
{
417
{
396
	int i;
418
	int i;
397
	float px=0, py=r, ii = r * 3.1415926 * 2;
419
	float px=0, py=r, ii = r * 3.1415926 * 2;
398
	FOR (i = 0; i < ii; i++)
420
	FOR (i = 0; i < ii; i++)
399
	{
421
	{
400
        PutPixel(px + x, y - py, 0);
422
        PutPixel(px + x, y - py, 0);
401
        px = py / r + px;
423
        px = py / r + px;
402
        py = -px / r + py;
424
        py = -px / r + py;
403
	}
425
	}
404
}
426
}
405
 
427
 
406
//------------------------------------------------------------------------------
428
//------------------------------------------------------------------------------
407
 
429
 
408
inline fastcall void debug( EDX)
430
inline fastcall void debug( EDX)
409
{
431
{
410
	$push ebx
432
	$push ebx
411
	$push ecx
433
	$push ecx
412
	$mov eax, 63
434
	$mov eax, 63
413
	$mov ebx, 1
435
	$mov ebx, 1
414
next_char:
436
next_char:
415
	$mov ecx, DSDWORD[edx]
437
	$mov ecx, DSDWORD[edx]
416
	$or	 cl, cl
438
	$or	 cl, cl
417
	$jz  done
439
	$jz  done
418
	$int 0x40
440
	$int 0x40
419
	$inc edx
441
	$inc edx
420
	$jmp next_char
442
	$jmp next_char
421
done:
443
done:
422
	$mov cl, 13
444
	$mov cl, 13
423
	$int 0x40
445
	$int 0x40
424
	$mov cl, 10
446
	$mov cl, 10
425
	$int 0x40
447
	$int 0x40
426
	$pop ecx
448
	$pop ecx
427
	$pop ebx
449
	$pop ebx
428
}
450
}
429
>
451
>
430
>
452
>
431
>
453
>
432
>
454
>
433
>
455
>
434
>
456
>
435
>
457
>
436
>
458
>
437
>
459
>
438
>
460
>
439
>
461
>
440
>
462
>
441
>
463
>
442
>
464
>
443
>
465
>
444
>
466
>
445
>
467
>
446
>
468
>
447
>
469
>
448
>
470
>