Rev 990 | Rev 1764 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 990 | Rev 1114 | ||
---|---|---|---|
1 | #include "kosSyst.h" |
1 | #include "kosSyst.h" |
2 | #include "func.h" |
2 | #include "func.h" |
3 | #include |
3 | #include |
4 | 4 | ||
5 | #define atexitBufferSize 32 |
5 | #define atexitBufferSize 32 |
6 | 6 | ||
7 | 7 | ||
8 | char pureCallMessage[] = "PURE function call!"; |
8 | char pureCallMessage[] = "PURE function call!"; |
9 | 9 | ||
10 | char *kosExePath = NULL; |
10 | char *kosExePath = NULL; |
11 | 11 | ||
12 | // |
12 | // |
13 | void (__cdecl *atExitList[atexitBufferSize])(); |
13 | void (__cdecl *atExitList[atexitBufferSize])(); |
14 | int atExitFnNum = 0; |
14 | int atExitFnNum = 0; |
15 | // |
15 | // |
16 | int __cdecl atexit( void (__cdecl *func )( void )) |
16 | int __cdecl atexit( void (__cdecl *func )( void )) |
17 | { |
17 | { |
18 | // |
18 | // |
19 | if ( atExitFnNum < atexitBufferSize ) |
19 | if ( atExitFnNum < atexitBufferSize ) |
20 | { |
20 | { |
21 | // |
21 | // |
22 | atExitList[atExitFnNum++] = func; |
22 | atExitList[atExitFnNum++] = func; |
23 | return 0; |
23 | return 0; |
24 | } |
24 | } |
25 | else |
25 | else |
26 | { |
26 | { |
27 | return 1; |
27 | return 1; |
28 | } |
28 | } |
29 | } |
29 | } |
30 | 30 | ||
31 | 31 | ||
32 | // |
32 | // |
33 | Dword RandomSeed = 1; |
33 | Dword RandomSeed = 1; |
34 | // |
34 | // |
35 | void rtlSrand( Dword seed ) |
35 | void rtlSrand( Dword seed ) |
36 | { |
36 | { |
37 | RandomSeed = seed; |
37 | RandomSeed = seed; |
38 | } |
38 | } |
39 | // |
39 | // |
40 | Dword rtlRand( void ) |
40 | Dword rtlRand( void ) |
41 | { |
41 | { |
42 | //ìàñêà 0x80000776 |
42 | //ìàñêà 0x80000776 |
43 | 43 | ||
44 | Dword dwi, i; |
44 | Dword dwi, i; |
45 | 45 | ||
46 | for ( i = 0; i < 32; i++ ) |
46 | for ( i = 0; i < 32; i++ ) |
47 | { |
47 | { |
48 | 48 | ||
49 | dwi = RandomSeed & 0x80000776; |
49 | dwi = RandomSeed & 0x80000776; |
50 | 50 | ||
51 | __asm{ |
51 | __asm{ |
52 | mov eax, dwi |
52 | mov eax, dwi |
53 | mov edx, eax |
53 | mov edx, eax |
54 | bswap eax |
54 | bswap eax |
55 | xor eax, edx |
55 | xor eax, edx |
56 | xor al, ah |
56 | xor al, ah |
57 | setpo al |
57 | setpo al |
58 | movzx eax, al |
58 | movzx eax, al |
59 | mov dwi, eax |
59 | mov dwi, eax |
60 | } |
60 | } |
61 | 61 | ||
62 | RandomSeed = ( RandomSeed << 1 ) | ( dwi & 1 ); |
62 | RandomSeed = ( RandomSeed << 1 ) | ( dwi & 1 ); |
63 | } |
63 | } |
64 | 64 | ||
65 | return RandomSeed; |
65 | return RandomSeed; |
66 | } |
66 | } |
67 | 67 | ||
68 | 68 | ||
69 | void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount ) |
69 | /*void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount ) |
70 | { |
70 | { |
71 | __asm{ |
71 | __asm{ |
72 | mov edi, dst |
72 | mov edi, dst |
73 | mov eax, dst |
73 | mov eax, dst |
74 | mov esi, src |
74 | mov esi, src |
75 | mov ecx, bytesCount |
75 | mov ecx, bytesCount |
76 | rep movsb |
76 | rep movsb |
77 | } |
77 | } |
78 | } |
78 | } |
79 | 79 | ||
80 | // |
80 | // |
81 | void memset( Byte *dst, Byte filler, Dword count ) |
81 | void memset( Byte *dst, Byte filler, Dword count ) |
82 | { |
82 | { |
83 | // |
83 | // |
84 | __asm{ |
84 | __asm{ |
85 | mov edi, dst |
85 | mov edi, dst |
86 | mov al, filler |
86 | mov al, filler |
87 | mov ecx, count |
87 | mov ecx, count |
88 | rep stosb |
88 | rep stosb |
89 | } |
89 | } |
90 | } |
90 | }*/ |
91 | 91 | ||
92 | 92 | ||
93 | // |
93 | // |
94 | Dword rtlInterlockedExchange( Dword *target, Dword value ) |
94 | Dword rtlInterlockedExchange( Dword *target, Dword value ) |
95 | { |
95 | { |
96 | // Dword result; |
96 | // Dword result; |
97 | 97 | ||
98 | // |
98 | // |
99 | __asm{ |
99 | __asm{ |
100 | mov eax, value |
100 | mov eax, value |
101 | mov ebx, target |
101 | mov ebx, target |
102 | xchg eax, [ebx] |
102 | xchg eax, [ebx] |
103 | // mov result, eax |
103 | // mov result, eax |
104 | } |
104 | } |
105 | // |
105 | // |
106 | // return result; |
106 | // return result; |
107 | } |
107 | } |
108 | 108 | ||
109 | 109 | ||
110 | ////////////////////////////////////////////////////////////////////// |
110 | ////////////////////////////////////////////////////////////////////// |
111 | // |
111 | // |
112 | // êîïèðîâàíèå ñòðîêè |
112 | // êîïèðîâàíèå ñòðîêè |
113 | // |
113 | // |
114 | 114 | ||
115 | char * __cdecl strcpy( char *target, const char *source ) |
115 | char * __cdecl strcpy( char *target, const char *source ) |
116 | { |
116 | { |
117 | char *result = target; |
117 | char *result = target; |
118 | 118 | ||
119 | while( target[0] = source[0] ) |
119 | while( target[0] = source[0] ) |
120 | { |
120 | { |
121 | target++; |
121 | target++; |
122 | source++; |
122 | source++; |
123 | } |
123 | } |
124 | 124 | ||
125 | return result; |
125 | return result; |
126 | } |
126 | } |
127 | 127 | ||
128 | 128 | ||
129 | ////////////////////////////////////////////////////////////////////// |
129 | ////////////////////////////////////////////////////////////////////// |
130 | // |
130 | // |
131 | // ðåâåðñèâíûé ïîèñê ñèìâîëà |
131 | // ðåâåðñèâíûé ïîèñê ñèìâîëà |
132 | // |
132 | // |
133 | 133 | ||
134 | char * __cdecl strrchr( const char * string, int c ) |
134 | char * __cdecl strrchr( const char * string, int c ) |
135 | { |
135 | { |
136 | char *cPtr; |
136 | char *cPtr; |
137 | 137 | ||
138 | // |
138 | // |
139 | for ( cPtr = (char *)string + strlen( string ); cPtr >= string; cPtr-- ) |
139 | for ( cPtr = (char *)string + strlen( string ); cPtr >= string; cPtr-- ) |
140 | { |
140 | { |
141 | // |
141 | // |
142 | if ( *cPtr == c ) return cPtr; |
142 | if ( *cPtr == c ) return cPtr; |
143 | } |
143 | } |
144 | // |
144 | // |
145 | return NULL; |
145 | return NULL; |
146 | } |
146 | } |
147 | 147 | ||
148 | 148 | ||
149 | ////////////////////////////////////////////////////////////////////// |
149 | ////////////////////////////////////////////////////////////////////// |
150 | // |
150 | // |
151 | // îïðåäåëåíèå äëèíû ñòðîêè |
151 | // îïðåäåëåíèå äëèíû ñòðîêè |
152 | // |
152 | // |
153 | 153 | ||
154 | int __cdecl strlen( const char *line ) |
154 | int __cdecl strlen( const char *line ) |
155 | { |
155 | { |
156 | int i; |
156 | int i; |
157 | 157 | ||
158 | for( i=0; line[i] != 0; i++ ); |
158 | for( i=0; line[i] != 0; i++ ); |
159 | return i; |
159 | return i; |
160 | } |
160 | } |
161 | 161 | ||
162 | 162 | ||
163 | 163 | ||
164 | ////////////////////////////////////////////////////////////////////// |
164 | ////////////////////////////////////////////////////////////////////// |
165 | // |
165 | // |
166 | // ïåðåâîä øåñòíàäöàòèðè÷íîãî ÷èñëà â ñèìâîë |
166 | // ïåðåâîä øåñòíàäöàòèðè÷íîãî ÷èñëà â ñèìâîë |
167 | // |
167 | // |
168 | 168 | ||
169 | unsigned int num2hex( unsigned int num ) |
169 | unsigned int num2hex( unsigned int num ) |
170 | { |
170 | { |
171 | if( num < 10 ) |
171 | if( num < 10 ) |
172 | return num + '0'; |
172 | return num + '0'; |
173 | return num - 10 + 'A'; |
173 | return num - 10 + 'A'; |
174 | } |
174 | } |
175 | 175 | ||
176 | 176 | ||
177 | ////////////////////////////////////////////////////////////////////// |
177 | ////////////////////////////////////////////////////////////////////// |
178 | // |
178 | // |
179 | // âûâîä ñòðîêè íà ïå÷àòü. barsuk äîáàâèë %f |
179 | // âûâîä ñòðîêè íà ïå÷àòü. barsuk äîáàâèë %f |
180 | 180 | ||
181 | //#define PREC 2 |
181 | //#define PREC 2 |
182 | //#define HALF 0.499 |
182 | //#define HALF 0.499 |
183 | #define PREC 6 |
183 | #define PREC 6 |
184 | #define HALF 0.4999999 |
184 | #define HALF 0.4999999 |
185 | 185 | ||
186 | double double_tab[]={1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, |
186 | double double_tab[]={1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, |
187 | 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 1e30}; |
187 | 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 1e30}; |
188 | 188 | ||
189 | 189 | ||
190 | // |
190 | // |
191 | 191 | ||
192 | Dword dectab[] = { 1000000000, 100000000, 10000000, 1000000, 100000, |
192 | Dword dectab[] = { 1000000000, 100000000, 10000000, 1000000, 100000, |
193 | 10000, 1000, 100, 10, 0 }; |
193 | 10000, 1000, 100, 10, 0 }; |
194 | 194 | ||
195 | // |
195 | // |
196 | void sprintf( char *Str, char* Format, ... ) |
196 | void sprintf( char *Str, char* Format, ... ) |
197 | { |
197 | { |
198 | int i, fmtlinesize, j, k, flag; |
198 | int i, fmtlinesize, j, k, flag; |
199 | Dword head, tail; |
199 | Dword head, tail; |
200 | char c; |
200 | char c; |
201 | va_list arglist; |
201 | va_list arglist; |
202 | // |
202 | // |
203 | va_start(arglist, Format); |
203 | va_start(arglist, Format); |
204 | 204 | ||
205 | // |
205 | // |
206 | fmtlinesize = strlen( Format ); |
206 | fmtlinesize = strlen( Format ); |
207 | // |
207 | // |
208 | if( fmtlinesize == 0 ) return; |
208 | if( fmtlinesize == 0 ) return; |
209 | 209 | ||
210 | // |
210 | // |
211 | for( i = 0, j = 0; i < fmtlinesize; i++ ) |
211 | for( i = 0, j = 0; i < fmtlinesize; i++ ) |
212 | { |
212 | { |
213 | // |
213 | // |
214 | c = Format[i]; |
214 | c = Format[i]; |
215 | // |
215 | // |
216 | if( c != '%' ) |
216 | if( c != '%' ) |
217 | { |
217 | { |
218 | Str[j++] = c; |
218 | Str[j++] = c; |
219 | continue; |
219 | continue; |
220 | } |
220 | } |
221 | // |
221 | // |
222 | i++; |
222 | i++; |
223 | // |
223 | // |
224 | if( i >= fmtlinesize ) break; |
224 | if( i >= fmtlinesize ) break; |
225 | 225 | ||
226 | // |
226 | // |
227 | flag = 0; |
227 | flag = 0; |
228 | // |
228 | // |
229 | c = Format[i]; |
229 | c = Format[i]; |
230 | // |
230 | // |
231 | switch( c ) |
231 | switch( c ) |
232 | { |
232 | { |
233 | // |
233 | // |
234 | case '%': |
234 | case '%': |
235 | Str[j++] = c; |
235 | Str[j++] = c; |
236 | break; |
236 | break; |
237 | // âûâîä ñòðîêè |
237 | // âûâîä ñòðîêè |
238 | case 'S': |
238 | case 'S': |
239 | Byte* str; |
239 | Byte* str; |
240 | str = va_arg(arglist, Byte*); |
240 | str = va_arg(arglist, Byte*); |
241 | for( k = 0; ( c = str[k] ) != 0; k++ ) |
241 | for( k = 0; ( c = str[k] ) != 0; k++ ) |
242 | { |
242 | { |
243 | Str[j++] = c; |
243 | Str[j++] = c; |
244 | } |
244 | } |
245 | break; |
245 | break; |
246 | // âûâîä áàéòà |
246 | // âûâîä áàéòà |
247 | case 'B': |
247 | case 'B': |
248 | k = va_arg(arglist, int) & 0xFF; |
248 | k = va_arg(arglist, int) & 0xFF; |
249 | Str[j++] = num2hex( ( k >> 4 ) & 0xF ); |
249 | Str[j++] = num2hex( ( k >> 4 ) & 0xF ); |
250 | Str[j++] = num2hex( k & 0xF ); |
250 | Str[j++] = num2hex( k & 0xF ); |
251 | break; |
251 | break; |
252 | // âûâîä ñèìâîëà |
252 | // âûâîä ñèìâîëà |
253 | case 'C': |
253 | case 'C': |
254 | Str[j++] = va_arg(arglist, int) & 0xFF; |
254 | Str[j++] = va_arg(arglist, int) & 0xFF; |
255 | break; |
255 | break; |
256 | // âûâîä äâîéíîãî ñëîâà â øåñòíàäöàòèðè÷íîì âèäå |
256 | // âûâîä äâîéíîãî ñëîâà â øåñòíàäöàòèðè÷íîì âèäå |
257 | case 'X': |
257 | case 'X': |
258 | Dword val; |
258 | Dword val; |
259 | val = va_arg(arglist, Dword); |
259 | val = va_arg(arglist, Dword); |
260 | for( k = 7; k >= 0; k-- ) |
260 | for( k = 7; k >= 0; k-- ) |
261 | { |
261 | { |
262 | // |
262 | // |
263 | c = num2hex ( ( val >> (k * 4) ) & 0xF ); |
263 | c = num2hex ( ( val >> (k * 4) ) & 0xF ); |
264 | // |
264 | // |
265 | if( c == '0' ) |
265 | if( c == '0' ) |
266 | { |
266 | { |
267 | if( flag ) Str[j++] = c; |
267 | if( flag ) Str[j++] = c; |
268 | } |
268 | } |
269 | else |
269 | else |
270 | { |
270 | { |
271 | flag++; |
271 | flag++; |
272 | Str[j++] = c; |
272 | Str[j++] = c; |
273 | } |
273 | } |
274 | } |
274 | } |
275 | // |
275 | // |
276 | if( flag == 0 ) Str[j++] = '0'; |
276 | if( flag == 0 ) Str[j++] = '0'; |
277 | break; |
277 | break; |
278 | // âûâîä äâîéíîãî ñëîâà â äåñÿòè÷íîì âèäå |
278 | // âûâîä äâîéíîãî ñëîâà â äåñÿòè÷íîì âèäå |
279 | case 'U': |
279 | case 'U': |
280 | head = va_arg(arglist, Dword); |
280 | head = va_arg(arglist, Dword); |
281 | tail = 0; |
281 | tail = 0; |
282 | for( k = 0; dectab[k] != 0; k++ ) |
282 | for( k = 0; dectab[k] != 0; k++ ) |
283 | { |
283 | { |
284 | tail = head % dectab[k]; |
284 | tail = head % dectab[k]; |
285 | head /= dectab[k]; |
285 | head /= dectab[k]; |
286 | c = head + '0'; |
286 | c = head + '0'; |
287 | if( c == '0' ) |
287 | if( c == '0' ) |
288 | { |
288 | { |
289 | if( flag ) Str[j++] = c; |
289 | if( flag ) Str[j++] = c; |
290 | } |
290 | } |
291 | else |
291 | else |
292 | { |
292 | { |
293 | flag++; |
293 | flag++; |
294 | Str[j++] = c; |
294 | Str[j++] = c; |
295 | } |
295 | } |
296 | // |
296 | // |
297 | head = tail; |
297 | head = tail; |
298 | } |
298 | } |
299 | // |
299 | // |
300 | c = head + '0'; |
300 | c = head + '0'; |
301 | Str[j++] = c; |
301 | Str[j++] = c; |
302 | break; |
302 | break; |
303 | // âåùåñòâåííîå ÷èñëî â ôîðìàòå 7.2 |
303 | // âåùåñòâåííîå ÷èñëî â ôîðìàòå 7.2 |
304 | case 'f': |
304 | case 'f': |
305 | case 'F': |
305 | case 'F': |
306 | case 'g': |
306 | case 'g': |
307 | case 'G': |
307 | case 'G': |
308 | { |
308 | { |
309 | double val, w; |
309 | double val, w; |
310 | int p; |
310 | int p; |
311 | val = va_arg(arglist, double); |
311 | val = va_arg(arglist, double); |
312 | if (val < 0.0) |
312 | if (val < 0.0) |
313 | { |
313 | { |
314 | Str[j++] = '-'; |
314 | Str[j++] = '-'; |
315 | val = -val; |
315 | val = -val; |
316 | } |
316 | } |
317 | for (k = 0; k < 30; k++) |
317 | for (k = 0; k < 30; k++) |
318 | if (val < double_tab[k]) |
318 | if (val < double_tab[k]) |
319 | break; |
319 | break; |
320 | 320 | ||
321 | if (val < 1.0) |
321 | if (val < 1.0) |
322 | { |
322 | { |
323 | Str[j++] = '0'; |
323 | Str[j++] = '0'; |
324 | } |
324 | } |
325 | 325 | ||
326 | for (p = 1; p < k + 1; p++) |
326 | for (p = 1; p < k + 1; p++) |
327 | { |
327 | { |
328 | int d = (int)di(val / double_tab[k - p] - HALF) % 10; |
328 | int d = (int)di(val / double_tab[k - p] - HALF) % 10; |
329 | Str[j++] = '0' + d; |
329 | Str[j++] = '0' + d; |
330 | val -= d * double_tab[k - p]; |
330 | val -= d * double_tab[k - p]; |
331 | } |
331 | } |
332 | Str[j++] = '.'; |
332 | Str[j++] = '.'; |
333 | w = 0.1; |
333 | w = 0.1; |
334 | for (p = 0; p < PREC - 1; p++) |
334 | for (p = 0; p < PREC - 1; p++) |
335 | { |
335 | { |
336 | val-=floor(val); |
336 | val-=floor(val); |
337 | Str[j++] = '0' + di(val / w - HALF) % 10; |
337 | Str[j++] = '0' + di(val / w - HALF) % 10; |
338 | w /= 10.0; |
338 | w /= 10.0; |
339 | } |
339 | } |
340 | } |
340 | } |
341 | break; |
341 | break; |
342 | 342 | ||
343 | // âûâîä 64-áèòíîãî ñëîâà â øåñòíàäöàòèðè÷íîì âèäå |
343 | // âûâîä 64-áèòíîãî ñëîâà â øåñòíàäöàòèðè÷íîì âèäå |
344 | case 'Q': |
344 | case 'Q': |
345 | unsigned int low_dword, high_dword; |
345 | unsigned int low_dword, high_dword; |
346 | low_dword = va_arg(arglist, unsigned int); |
346 | low_dword = va_arg(arglist, unsigned int); |
347 | high_dword = va_arg(arglist, unsigned int); |
347 | high_dword = va_arg(arglist, unsigned int); |
348 | for( k = 7; k >= 0; k-- ) |
348 | for( k = 7; k >= 0; k-- ) |
349 | { |
349 | { |
350 | // |
350 | // |
351 | c = num2hex ( ( ( high_dword + 1) >> (k * 4) ) & 0xF ); |
351 | c = num2hex ( ( ( high_dword + 1) >> (k * 4) ) & 0xF ); |
352 | // |
352 | // |
353 | if( c == '0' ) |
353 | if( c == '0' ) |
354 | { |
354 | { |
355 | if( flag ) Str[j++] = c; |
355 | if( flag ) Str[j++] = c; |
356 | } |
356 | } |
357 | else |
357 | else |
358 | { |
358 | { |
359 | flag++; |
359 | flag++; |
360 | Str[j++] = c; |
360 | Str[j++] = c; |
361 | } |
361 | } |
362 | } |
362 | } |
363 | // |
363 | // |
364 | for( k=7; k >= 0; k-- ) |
364 | for( k=7; k >= 0; k-- ) |
365 | { |
365 | { |
366 | // |
366 | // |
367 | c = num2hex ( ( low_dword >> (k * 4) ) & 0xF ); |
367 | c = num2hex ( ( low_dword >> (k * 4) ) & 0xF ); |
368 | // |
368 | // |
369 | if( c == '0' ) |
369 | if( c == '0' ) |
370 | { |
370 | { |
371 | if( flag ) Str[j++] = c; |
371 | if( flag ) Str[j++] = c; |
372 | } |
372 | } |
373 | else |
373 | else |
374 | { |
374 | { |
375 | flag++; |
375 | flag++; |
376 | Str[j++] = c; |
376 | Str[j++] = c; |
377 | } |
377 | } |
378 | } |
378 | } |
379 | // |
379 | // |
380 | if( flag == 0 ) Str[j++] = '0'; |
380 | if( flag == 0 ) Str[j++] = '0'; |
381 | // |
381 | // |
382 | break; |
382 | break; |
383 | // |
383 | // |
384 | default: |
384 | default: |
385 | break; |
385 | break; |
386 | } |
386 | } |
387 | } |
387 | } |
388 | // |
388 | // |
389 | Str[j] = 0; |
389 | Str[j] = 0; |
390 | } |
390 | } |
391 | 391 | ||
392 | 392 | ||
393 | // ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà |
393 | // ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà |
394 | void kos_ExitApp() |
394 | void kos_ExitApp() |
395 | { |
395 | { |
396 | int i; |
396 | int i; |
397 | 397 | ||
398 | // |
398 | // |
399 | for ( i = atExitFnNum - 1; i >= 0; i-- ) |
399 | for ( i = atExitFnNum - 1; i >= 0; i-- ) |
400 | { |
400 | { |
401 | // |
401 | // |
402 | atExitList[i](); |
402 | atExitList[i](); |
403 | } |
403 | } |
404 | // |
404 | // |
405 | __asm{ |
405 | __asm{ |
406 | mov eax, -1 |
406 | mov eax, -1 |
407 | int 0x40 |
407 | int 0x40 |
408 | } |
408 | } |
409 | } |
409 | } |
410 | 410 | ||
411 | 411 | ||
412 | // ôóíêöèÿ 0 |
412 | // ôóíêöèÿ 0 |
413 | void kos_DefineAndDrawWindow( |
413 | void kos_DefineAndDrawWindow( |
414 | Word x, Word y, |
414 | Word x, Word y, |
415 | Word sizeX, Word sizeY, |
415 | Word sizeX, Word sizeY, |
416 | Byte mainAreaType, |
416 | Byte mainAreaType, |
417 | Dword mainAreaColour, |
417 | Dword mainAreaColour, |
418 | Byte headerType, |
418 | Byte headerType, |
419 | Dword headerColour, |
419 | Dword headerColour, |
420 | Dword borderColour |
420 | Dword borderColour |
421 | ) |
421 | ) |
422 | { |
422 | { |
423 | Dword arg1, arg2, arg3, arg4; |
423 | Dword arg1, arg2, arg3, arg4; |
424 | 424 | ||
425 | // |
425 | // |
426 | arg1 = ( x << 16 ) + sizeX; |
426 | arg1 = ( x << 16 ) + sizeX; |
427 | arg2 = ( y << 16 ) + sizeY; |
427 | arg2 = ( y << 16 ) + sizeY; |
428 | arg3 = ( mainAreaType << 24 ) | mainAreaColour; |
428 | arg3 = ( mainAreaType << 24 ) | mainAreaColour; |
429 | arg4 = ( headerType << 24 ) | headerColour; |
429 | arg4 = ( headerType << 24 ) | headerColour; |
430 | // |
430 | // |
431 | __asm{ |
431 | __asm{ |
432 | mov eax, 0 |
432 | mov eax, 0 |
433 | mov ebx, arg1 |
433 | mov ebx, arg1 |
434 | mov ecx, arg2 |
434 | mov ecx, arg2 |
435 | mov edx, arg3 |
435 | mov edx, arg3 |
436 | mov esi, arg4 |
436 | mov esi, arg4 |
437 | mov edi, borderColour |
437 | mov edi, borderColour |
438 | int 0x40 |
438 | int 0x40 |
439 | } |
439 | } |
440 | } |
440 | } |
441 | 441 | ||
442 | 442 | ||
443 | // ôóíêöèÿ 1 ïîñòàâèòü òî÷êó |
443 | // ôóíêöèÿ 1 ïîñòàâèòü òî÷êó |
444 | void kos_PutPixel( Dword x, Dword y, Dword colour ) |
444 | void kos_PutPixel( Dword x, Dword y, Dword colour ) |
445 | { |
445 | { |
446 | // |
446 | // |
447 | __asm{ |
447 | __asm{ |
448 | mov eax, 1 |
448 | mov eax, 1 |
449 | mov ebx, x |
449 | mov ebx, x |
450 | mov ecx, y |
450 | mov ecx, y |
451 | mov edx, colour |
451 | mov edx, colour |
452 | int 0x40 |
452 | int 0x40 |
453 | } |
453 | } |
454 | } |
454 | } |
455 | 455 | ||
456 | 456 | ||
457 | // ôóíêöèÿ 2 ïîëó÷èòü êîä íàæàòîé êëàâèøè |
457 | // ôóíêöèÿ 2 ïîëó÷èòü êîä íàæàòîé êëàâèøè |
458 | bool kos_GetKey( Byte &keyCode ) |
458 | bool kos_GetKey( Byte &keyCode ) |
459 | { |
459 | { |
460 | Dword result; |
460 | Dword result; |
461 | 461 | ||
462 | // |
462 | // |
463 | __asm{ |
463 | __asm{ |
464 | mov eax, 2 |
464 | mov eax, 2 |
465 | int 0x40 |
465 | int 0x40 |
466 | mov result, eax |
466 | mov result, eax |
467 | } |
467 | } |
468 | // |
468 | // |
469 | keyCode = result >> 8; |
469 | keyCode = result >> 8; |
470 | // |
470 | // |
471 | return ( result & 0xFF ) == 0; |
471 | return ( result & 0xFF ) == 0; |
472 | } |
472 | } |
473 | 473 | ||
474 | 474 | ||
475 | // ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ |
475 | // ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ |
476 | Dword kos_GetSystemClock() |
476 | Dword kos_GetSystemClock() |
477 | { |
477 | { |
478 | // Dword result; |
478 | // Dword result; |
479 | 479 | ||
480 | // |
480 | // |
481 | __asm{ |
481 | __asm{ |
482 | mov eax, 3 |
482 | mov eax, 3 |
483 | int 0x40 |
483 | int 0x40 |
484 | // mov result, eax |
484 | // mov result, eax |
485 | } |
485 | } |
486 | // |
486 | // |
487 | // return result; |
487 | // return result; |
488 | } |
488 | } |
489 | 489 | ||
490 | 490 | ||
491 | // ôóíêöèÿ 4 |
491 | // ôóíêöèÿ 4 |
492 | void kos_WriteTextToWindow( |
492 | void kos_WriteTextToWindow( |
493 | Word x, |
493 | Word x, |
494 | Word y, |
494 | Word y, |
495 | Byte fontType, |
495 | Byte fontType, |
496 | Dword textColour, |
496 | Dword textColour, |
497 | char *textPtr, |
497 | char *textPtr, |
498 | Dword textLen |
498 | Dword textLen |
499 | ) |
499 | ) |
500 | { |
500 | { |
501 | Dword arg1, arg2; |
501 | Dword arg1, arg2; |
502 | 502 | ||
503 | // |
503 | // |
504 | arg1 = ( x << 16 ) | y; |
504 | arg1 = ( x << 16 ) | y; |
505 | arg2 = ( fontType << 24 ) | textColour; |
505 | arg2 = ( fontType << 24 ) | textColour; |
506 | // |
506 | // |
507 | __asm{ |
507 | __asm{ |
508 | mov eax, 4 |
508 | mov eax, 4 |
509 | mov ebx, arg1 |
509 | mov ebx, arg1 |
510 | mov ecx, arg2 |
510 | mov ecx, arg2 |
511 | mov edx, textPtr |
511 | mov edx, textPtr |
512 | mov esi, textLen |
512 | mov esi, textLen |
513 | int 0x40 |
513 | int 0x40 |
514 | } |
514 | } |
515 | } |
515 | } |
516 | 516 | ||
517 | 517 | ||
518 | // ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû |
518 | // ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû |
519 | void kos_Pause( Dword value ) |
519 | void kos_Pause( Dword value ) |
520 | { |
520 | { |
521 | // |
521 | // |
522 | __asm{ |
522 | __asm{ |
523 | mov eax, 5 |
523 | mov eax, 5 |
524 | mov ebx, value |
524 | mov ebx, value |
525 | int 0x40 |
525 | int 0x40 |
526 | } |
526 | } |
527 | } |
527 | } |
528 | 528 | ||
529 | 529 | ||
530 | // ôóíêöèÿ 7 íàðèñîâàòü èçîáðàæåíèå |
530 | // ôóíêöèÿ 7 íàðèñîâàòü èçîáðàæåíèå |
531 | void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y ) |
531 | void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y ) |
532 | { |
532 | { |
533 | Dword arg1, arg2; |
533 | Dword arg1, arg2; |
534 | 534 | ||
535 | // |
535 | // |
536 | arg1 = ( sizeX << 16 ) | sizeY; |
536 | arg1 = ( sizeX << 16 ) | sizeY; |
537 | arg2 = ( x << 16 ) | y; |
537 | arg2 = ( x << 16 ) | y; |
538 | // |
538 | // |
539 | __asm{ |
539 | __asm{ |
540 | mov eax, 7 |
540 | mov eax, 7 |
541 | mov ebx, imagePtr |
541 | mov ebx, imagePtr |
542 | mov ecx, arg1 |
542 | mov ecx, arg1 |
543 | mov edx, arg2 |
543 | mov edx, arg2 |
544 | int 0x40 |
544 | int 0x40 |
545 | } |
545 | } |
546 | } |
546 | } |
547 | 547 | ||
548 | 548 | ||
549 | 549 | ||
550 | // ôóíêöèÿ 8 îïðåäåëèòü êíîïêó |
550 | // ôóíêöèÿ 8 îïðåäåëèòü êíîïêó |
551 | void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour ) |
551 | void kos_DefineButton( Word x, Word y, Word sizeX, Word sizeY, Dword buttonID, Dword colour ) |
552 | { |
552 | { |
553 | Dword arg1, arg2; |
553 | Dword arg1, arg2; |
554 | 554 | ||
555 | // |
555 | // |
556 | arg1 = ( x << 16 ) | sizeX; |
556 | arg1 = ( x << 16 ) | sizeX; |
557 | arg2 = ( y << 16 ) | sizeY; |
557 | arg2 = ( y << 16 ) | sizeY; |
558 | // |
558 | // |
559 | __asm{ |
559 | __asm{ |
560 | mov eax, 8 |
560 | mov eax, 8 |
561 | mov ebx, arg1 |
561 | mov ebx, arg1 |
562 | mov ecx, arg2 |
562 | mov ecx, arg2 |
563 | mov edx, buttonID |
563 | mov edx, buttonID |
564 | mov esi, colour |
564 | mov esi, colour |
565 | int 0x40 |
565 | int 0x40 |
566 | } |
566 | } |
567 | } |
567 | } |
568 | 568 | ||
569 | 569 | ||
570 | // ôóíêöèÿ 9 - èíôîðìàöèÿ î ïðîöåññå |
570 | // ôóíêöèÿ 9 - èíôîðìàöèÿ î ïðîöåññå |
571 | Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID ) |
571 | Dword kos_ProcessInfo( sProcessInfo *targetPtr, Dword processID ) |
572 | { |
572 | { |
573 | // Dword result; |
573 | // Dword result; |
574 | 574 | ||
575 | // |
575 | // |
576 | __asm{ |
576 | __asm{ |
577 | mov eax, 9 |
577 | mov eax, 9 |
578 | mov ebx, targetPtr |
578 | mov ebx, targetPtr |
579 | mov ecx, processID |
579 | mov ecx, processID |
580 | int 0x40 |
580 | int 0x40 |
581 | // mov result, eax |
581 | // mov result, eax |
582 | } |
582 | } |
583 | // |
583 | // |
584 | // return result; |
584 | // return result; |
585 | } |
585 | } |
586 | 586 | ||
587 | 587 | ||
588 | // ôóíêöèÿ 10 |
588 | // ôóíêöèÿ 10 |
589 | Dword kos_WaitForEvent() |
589 | Dword kos_WaitForEvent() |
590 | { |
590 | { |
591 | // Dword result; |
591 | // Dword result; |
592 | 592 | ||
593 | __asm{ |
593 | __asm{ |
594 | mov eax, 10 |
594 | mov eax, 10 |
595 | int 0x40 |
595 | int 0x40 |
596 | // mov result, eax |
596 | // mov result, eax |
597 | } |
597 | } |
598 | 598 | ||
599 | // return result; |
599 | // return result; |
600 | } |
600 | } |
601 | 601 | ||
602 | 602 | ||
603 | // ôóíêöèÿ 11 |
603 | // ôóíêöèÿ 11 |
604 | Dword kos_CheckForEvent() |
604 | Dword kos_CheckForEvent() |
605 | { |
605 | { |
606 | // Dword result; |
606 | // Dword result; |
607 | 607 | ||
608 | __asm{ |
608 | __asm{ |
609 | mov eax, 11 |
609 | mov eax, 11 |
610 | int 0x40 |
610 | int 0x40 |
611 | // mov result, eax |
611 | // mov result, eax |
612 | } |
612 | } |
613 | 613 | ||
614 | // return result; |
614 | // return result; |
615 | } |
615 | } |
616 | 616 | ||
617 | 617 | ||
618 | // ôóíêöèÿ 12 |
618 | // ôóíêöèÿ 12 |
619 | void kos_WindowRedrawStatus( Dword status ) |
619 | void kos_WindowRedrawStatus( Dword status ) |
620 | { |
620 | { |
621 | __asm{ |
621 | __asm{ |
622 | mov eax, 12 |
622 | mov eax, 12 |
623 | mov ebx, status |
623 | mov ebx, status |
624 | int 0x40 |
624 | int 0x40 |
625 | } |
625 | } |
626 | } |
626 | } |
627 | 627 | ||
628 | 628 | ||
629 | // ôóíêöèÿ 13 íàðèñîâàòü ïîëîñó |
629 | // ôóíêöèÿ 13 íàðèñîâàòü ïîëîñó |
630 | void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour ) |
630 | void kos_DrawBar( Word x, Word y, Word sizeX, Word sizeY, Dword colour ) |
631 | { |
631 | { |
632 | Dword arg1, arg2; |
632 | Dword arg1, arg2; |
633 | 633 | ||
634 | // |
634 | // |
635 | arg1 = ( x << 16 ) | sizeX; |
635 | arg1 = ( x << 16 ) | sizeX; |
636 | arg2 = ( y << 16 ) | sizeY; |
636 | arg2 = ( y << 16 ) | sizeY; |
637 | // |
637 | // |
638 | __asm{ |
638 | __asm{ |
639 | mov eax, 13 |
639 | mov eax, 13 |
640 | mov ebx, arg1 |
640 | mov ebx, arg1 |
641 | mov ecx, arg2 |
641 | mov ecx, arg2 |
642 | mov edx, colour |
642 | mov edx, colour |
643 | int 0x40 |
643 | int 0x40 |
644 | } |
644 | } |
645 | } |
645 | } |
646 | 646 | ||
647 | 647 | ||
648 | // ôóíêöèÿ 17 |
648 | // ôóíêöèÿ 17 |
649 | bool kos_GetButtonID( Dword &buttonID ) |
649 | bool kos_GetButtonID( Dword &buttonID ) |
650 | { |
650 | { |
651 | Dword result; |
651 | Dword result; |
652 | 652 | ||
653 | // |
653 | // |
654 | __asm{ |
654 | __asm{ |
655 | mov eax, 17 |
655 | mov eax, 17 |
656 | int 0x40 |
656 | int 0x40 |
657 | mov result, eax |
657 | mov result, eax |
658 | } |
658 | } |
659 | // |
659 | // |
660 | buttonID = result >> 8; |
660 | buttonID = result >> 8; |
661 | // |
661 | // |
662 | return (result & 0xFF) == 0; |
662 | return (result & 0xFF) == 0; |
663 | } |
663 | } |
664 | 664 | ||
665 | 665 | ||
666 | // ôóíêöèÿ 23 |
666 | // ôóíêöèÿ 23 |
667 | Dword kos_WaitForEvent( Dword timeOut ) |
667 | Dword kos_WaitForEvent( Dword timeOut ) |
668 | { |
668 | { |
669 | // Dword result; |
669 | // Dword result; |
670 | 670 | ||
671 | __asm{ |
671 | __asm{ |
672 | mov eax, 23 |
672 | mov eax, 23 |
673 | mov ebx, timeOut |
673 | mov ebx, timeOut |
674 | int 0x40 |
674 | int 0x40 |
675 | // mov result, eax |
675 | // mov result, eax |
676 | } |
676 | } |
677 | 677 | ||
678 | // return result; |
678 | // return result; |
679 | } |
679 | } |
680 | 680 | ||
681 | 681 | ||
682 | // ïîëó÷åíèå èíôîðìàöèè î ñîñòîÿíèè "ìûøè" ôóíêöèÿ 37 |
682 | // ïîëó÷åíèå èíôîðìàöèè î ñîñòîÿíèè "ìûøè" ôóíêöèÿ 37 |
683 | void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY ) |
683 | void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY ) |
684 | { |
684 | { |
685 | Dword mB; |
685 | Dword mB; |
686 | Word curX; |
686 | Word curX; |
687 | Word curY; |
687 | Word curY; |
688 | sProcessInfo sPI; |
688 | sProcessInfo sPI; |
689 | 689 | ||
690 | // |
690 | // |
691 | __asm{ |
691 | __asm{ |
692 | mov eax, 37 |
692 | mov eax, 37 |
693 | mov ebx, 0 |
693 | mov ebx, 0 |
694 | int 0x40 |
694 | int 0x40 |
695 | mov curY, ax |
695 | mov curY, ax |
696 | shr eax, 16 |
696 | shr eax, 16 |
697 | mov curX, ax |
697 | mov curX, ax |
698 | mov eax, 37 |
698 | mov eax, 37 |
699 | mov ebx, 2 |
699 | mov ebx, 2 |
700 | int 0x40 |
700 | int 0x40 |
701 | mov mB, eax |
701 | mov mB, eax |
702 | } |
702 | } |
703 | // |
703 | // |
704 | kos_ProcessInfo( &sPI ); |
704 | kos_ProcessInfo( &sPI ); |
705 | // |
705 | // |
706 | buttons = mB; |
706 | buttons = mB; |
707 | cursorX = curX - sPI.processInfo.x_start; |
707 | cursorX = curX - sPI.processInfo.x_start; |
708 | cursorY = curY - sPI.processInfo.y_start; |
708 | cursorY = curY - sPI.processInfo.y_start; |
709 | } |
709 | } |
710 | 710 | ||
711 | 711 | ||
712 | // ôóíêöèÿ 40 óñòàíîâèòü ìàñêó ñîáûòèé |
712 | // ôóíêöèÿ 40 óñòàíîâèòü ìàñêó ñîáûòèé |
713 | void kos_SetMaskForEvents( Dword mask ) |
713 | void kos_SetMaskForEvents( Dword mask ) |
714 | { |
714 | { |
715 | // |
715 | // |
716 | __asm{ |
716 | __asm{ |
717 | mov eax, 40 |
717 | mov eax, 40 |
718 | mov ebx, mask |
718 | mov ebx, mask |
719 | int 0x40 |
719 | int 0x40 |
720 | } |
720 | } |
721 | } |
721 | } |
722 | 722 | ||
723 | 723 | ||
724 | // ôóíêöèÿ 47 âûâåñòè â îêíî ïðèëîæåíèÿ ÷èñëî |
724 | // ôóíêöèÿ 47 âûâåñòè â îêíî ïðèëîæåíèÿ ÷èñëî |
725 | void kos_DisplayNumberToWindow( |
725 | void kos_DisplayNumberToWindow( |
726 | Dword value, |
726 | Dword value, |
727 | Dword digitsNum, |
727 | Dword digitsNum, |
728 | Word x, |
728 | Word x, |
729 | Word y, |
729 | Word y, |
730 | Dword colour, |
730 | Dword colour, |
731 | eNumberBase nBase, |
731 | eNumberBase nBase, |
732 | bool valueIsPointer |
732 | bool valueIsPointer |
733 | ) |
733 | ) |
734 | { |
734 | { |
735 | Dword arg1, arg2; |
735 | Dword arg1, arg2; |
736 | 736 | ||
737 | // |
737 | // |
738 | arg1 = ( valueIsPointer ? 1 : 0 ) | |
738 | arg1 = ( valueIsPointer ? 1 : 0 ) | |
739 | ( ((Byte)nBase) << 8 ) | |
739 | ( ((Byte)nBase) << 8 ) | |
740 | ( ( digitsNum & 0x1F ) << 16 ); |
740 | ( ( digitsNum & 0x1F ) << 16 ); |
741 | arg2 = ( x << 16 ) | y; |
741 | arg2 = ( x << 16 ) | y; |
742 | // |
742 | // |
743 | __asm{ |
743 | __asm{ |
744 | mov eax, 47 |
744 | mov eax, 47 |
745 | mov ebx, arg1 |
745 | mov ebx, arg1 |
746 | mov ecx, value |
746 | mov ecx, value |
747 | mov edx, arg2 |
747 | mov edx, arg2 |
748 | mov esi, colour |
748 | mov esi, colour |
749 | int 0x40 |
749 | int 0x40 |
750 | } |
750 | } |
751 | } |
751 | } |
752 | 752 | ||
753 | 753 | ||
754 | // ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå |
754 | // ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå |
755 | Dword kos_FileSystemAccess( kosFileInfo *fileInfo ) |
755 | Dword kos_FileSystemAccess( kosFileInfo *fileInfo ) |
756 | { |
756 | { |
757 | // Dword result; |
757 | // Dword result; |
758 | 758 | ||
759 | // |
759 | // |
760 | __asm{ |
760 | __asm{ |
761 | mov eax, 70 |
761 | mov eax, 70 |
762 | mov ebx, fileInfo |
762 | mov ebx, fileInfo |
763 | int 0x40 |
763 | int 0x40 |
764 | // mov result, eax |
764 | // mov result, eax |
765 | } |
765 | } |
766 | // |
766 | // |
767 | // return result; |
767 | // return result; |
768 | } |
768 | } |
769 | 769 | ||
770 | 770 | ||
771 | // ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè |
771 | // ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè |
772 | void kos_DebugOutChar( char ccc ) |
772 | void kos_DebugOutChar( char ccc ) |
773 | { |
773 | { |
774 | // |
774 | // |
775 | __asm{ |
775 | __asm{ |
776 | mov eax, 63 |
776 | mov eax, 63 |
777 | mov ebx, 1 |
777 | mov ebx, 1 |
778 | mov cl, ccc |
778 | mov cl, ccc |
779 | int 0x40 |
779 | int 0x40 |
780 | } |
780 | } |
781 | } |
781 | } |
782 | 782 | ||
783 | 783 | ||
784 | // ôóíêöèÿ 66 ðåæèì ïîëó÷åíèÿ äàííûõ îò êëàâèàòóðû |
784 | // ôóíêöèÿ 66 ðåæèì ïîëó÷åíèÿ äàííûõ îò êëàâèàòóðû |
785 | void kos_SetKeyboardDataMode( Dword mode ) |
785 | void kos_SetKeyboardDataMode( Dword mode ) |
786 | { |
786 | { |
787 | // |
787 | // |
788 | __asm{ |
788 | __asm{ |
789 | mov eax, 66 |
789 | mov eax, 66 |
790 | mov ebx, 1 |
790 | mov ebx, 1 |
791 | mov ecx, mode |
791 | mov ecx, mode |
792 | int 0x40 |
792 | int 0x40 |
793 | } |
793 | } |
794 | } |
794 | } |
795 | 795 | ||
796 | 796 | ||
797 | // âûâîä ñòðîêè â îêíî îòëàäêè |
797 | // âûâîä ñòðîêè â îêíî îòëàäêè |
798 | void rtlDebugOutString( char *str ) |
798 | void rtlDebugOutString( char *str ) |
799 | { |
799 | { |
800 | // |
800 | // |
801 | for ( ; str[0] != 0; str++ ) |
801 | for ( ; str[0] != 0; str++ ) |
802 | { |
802 | { |
803 | kos_DebugOutChar( str[0] ); |
803 | kos_DebugOutChar( str[0] ); |
804 | } |
804 | } |
805 | // |
805 | // |
806 | kos_DebugOutChar( 13 ); |
806 | kos_DebugOutChar( 13 ); |
807 | kos_DebugOutChar( 10 ); |
807 | kos_DebugOutChar( 10 ); |
808 | } |
808 | } |
809 | 809 | ||
810 | 810 | ||
811 | // ôóíêöèÿ 64 èçìåíåíèå êîëè÷åñòâà ïàìÿòè, âûäåëåííîé äëÿ ïðîãðàììû |
811 | // ôóíêöèÿ 64 èçìåíåíèå êîëè÷åñòâà ïàìÿòè, âûäåëåííîé äëÿ ïðîãðàììû |
812 | bool kos_ApplicationMemoryResize( Dword targetSize ) |
812 | bool kos_ApplicationMemoryResize( Dword targetSize ) |
813 | { |
813 | { |
814 | Dword result; |
814 | Dword result; |
815 | 815 | ||
816 | // |
816 | // |
817 | __asm{ |
817 | __asm{ |
818 | mov eax, 64 |
818 | mov eax, 64 |
819 | mov ebx, 1 |
819 | mov ebx, 1 |
820 | mov ecx, targetSize |
820 | mov ecx, targetSize |
821 | int 0x40 |
821 | int 0x40 |
822 | mov result, eax |
822 | mov result, eax |
823 | } |
823 | } |
824 | // |
824 | // |
825 | return result == 0; |
825 | return result == 0; |
826 | } |
826 | } |
827 | 827 | ||
828 | 828 | ||
829 | // ôóíêöèÿ 67 èçìåíèòü ïàðàìåòðû îêíà, ïàðàìåòð == -1 íå ìåíÿåòñÿ |
829 | // ôóíêöèÿ 67 èçìåíèòü ïàðàìåòðû îêíà, ïàðàìåòð == -1 íå ìåíÿåòñÿ |
830 | void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY ) |
830 | void kos_ChangeWindow( Dword x, Dword y, Dword sizeX, Dword sizeY ) |
831 | { |
831 | { |
832 | // |
832 | // |
833 | __asm{ |
833 | __asm{ |
834 | mov eax, 67 |
834 | mov eax, 67 |
835 | mov ebx, x |
835 | mov ebx, x |
836 | mov ecx, y |
836 | mov ecx, y |
837 | mov edx, sizeX |
837 | mov edx, sizeX |
838 | mov esi, sizeY |
838 | mov esi, sizeY |
839 | int 0x40 |
839 | int 0x40 |
840 | } |
840 | } |
841 | } |
841 | } |
842 | 842 | ||
843 | void kos_InitHeap() |
843 | void kos_InitHeap() |
844 | { |
844 | { |
845 | __asm{ |
845 | __asm{ |
846 | mov eax, 68 |
846 | mov eax, 68 |
847 | mov ebx, 11 |
847 | mov ebx, 11 |
848 | int 0x40 |
848 | int 0x40 |
849 | } |
849 | } |
850 | } |
850 | } |
851 | 851 | ||
852 | 852 | ||
853 | 853 | ||
854 | // âûçîâ àáñòðàêòíîãî ìåòîäà |
854 | // âûçîâ àáñòðàêòíîãî ìåòîäà |
855 | int __cdecl _purecall() |
855 | int __cdecl _purecall() |
856 | { |
856 | { |
857 | rtlDebugOutString( pureCallMessage ); |
857 | rtlDebugOutString( pureCallMessage ); |
858 | kos_ExitApp(); |
858 | kos_ExitApp(); |
859 | return 0; |
859 | return 0; |
860 | } |
860 | } |
861 | 861 | ||
862 | 862 | ||
863 | // âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ |
863 | // âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ |
864 | // çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë |
864 | // çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë |
865 | //#pragma section(".CRT$XCA",long,read,write) |
865 | //#pragma section(".CRT$XCA",long,read,write) |
866 | //#pragma section(".CRT$XCZ",long,read,write) |
866 | //#pragma section(".CRT$XCZ",long,read,write) |
867 | #pragma data_seg(".CRT$XCA") |
867 | #pragma data_seg(".CRT$XCA") |
868 | #pragma data_seg(".CRT$XCZ") |
868 | #pragma data_seg(".CRT$XCZ") |
869 | typedef void (__cdecl *_PVFV)(void); |
869 | typedef void (__cdecl *_PVFV)(void); |
870 | __declspec(allocate(".CRT$XCA")) _PVFV __xc_a[1] = { NULL }; |
870 | __declspec(allocate(".CRT$XCA")) _PVFV __xc_a[1] = { NULL }; |
871 | __declspec(allocate(".CRT$XCZ")) _PVFV __xc_z[1] = { NULL }; |
871 | __declspec(allocate(".CRT$XCZ")) _PVFV __xc_z[1] = { NULL }; |
872 | // |
872 | // |
873 | #pragma comment(linker, "/merge:.CRT=.rdata") |
873 | #pragma comment(linker, "/merge:.CRT=.rdata") |
874 | // |
874 | // |
875 | void crtStartUp() |
875 | void crtStartUp() |
876 | { |
876 | { |
877 | // âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì |
877 | // âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì |
878 | for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ ) |
878 | for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ ) |
879 | { |
879 | { |
880 | // |
880 | // |
881 | if ( *pbegin != NULL ) |
881 | if ( *pbegin != NULL ) |
882 | (**pbegin)(); |
882 | (**pbegin)(); |
883 | } |
883 | } |
884 | // èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë |
884 | // èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë |
885 | rtlSrand( kos_GetSystemClock() ); |
885 | rtlSrand( kos_GetSystemClock() ); |
886 | // ïóòü ê ôàéëó ïðîöåññà |
886 | // ïóòü ê ôàéëó ïðîöåññà |
887 | kosExePath = *((char **)0x20); |
887 | kosExePath = *((char **)0x20); |
888 | // âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ |
888 | // âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ |
889 | kos_Main(); |
889 | kos_Main(); |
890 | // âûõîä |
890 | // âûõîä |
891 | kos_ExitApp(); |
891 | kos_ExitApp(); |
892 | }>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>>>>>>>>>><>>> |
892 | }>><>><>><>><>><>><>><>><>><>><>><>><>><>><>><>>>>>>>>>><>>> |