Subversion Repositories Kolibri OS

Rev

Rev 1012 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1012 Rev 1143
Line 1... Line 1...
1
#include "kosSyst.h"
1
#include "kosSyst.h"
2
#include 
2
#include 
Line -... Line 3...
-
 
3
 
3
 
4
char stack[16384];
Line -... Line 5...
-
 
5
char kosExePath[257];
-
 
6
 
-
 
7
struct __MENUET_header_t
-
 
8
{
-
 
9
	char signature[8];
-
 
10
	unsigned version;
-
 
11
	void* entry;
-
 
12
	unsigned init_size;
-
 
13
	unsigned memsize;
-
 
14
	void* stackptr;
-
 
15
	void* command_line_ptr;
-
 
16
	void* app_path_ptr;
-
 
17
};
-
 
18
__MENUET_header_t __MENUET_header =
-
 
19
{
-
 
20
	{'M','E','N','U','E','T','0','1'},
-
 
21
	1,
-
 
22
	&crtStartUp,
-
 
23
	-1,
-
 
24
	-1,
-
 
25
	stack + sizeof(stack),
-
 
26
	NULL,
-
 
27
	&kosExePath
-
 
28
};
-
 
29
 
-
 
30
#if 0
Line 4... Line 31...
4
#define atexitBufferSize	32
31
#define atexitBufferSize	32
Line 5... Line 32...
5
 
32
#endif
Line -... Line 33...
-
 
33
 
6
 
34
char pureCallMessage[] = "PURE function call!";
7
char pureCallMessage[] = "PURE function call!";
35
 
8
 
36
//char *kosExePath = NULL;
9
char *kosExePath = NULL;
37
 
10
 
38
#if 0
Line 24... Line 52...
24
	else
52
	else
25
	{
53
	{
26
		return 1;
54
		return 1;
27
	}
55
	}
28
}
56
}
29
 
57
#endif
Line 30... Line 58...
30
 
58
 
31
//
59
//
32
Dword RandomSeed = 1;
60
Dword RandomSeed = 1;
33
//
61
//
Line 339... Line 367...
339
	Str[j] = 0;
367
	Str[j] = 0;
340
}
368
}
Line 341... Line 369...
341
 
369
 
342
 
370
 
343
// ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà
371
// ôóíêöèÿ -1 çàâåðøåíèÿ ïðîöåññà
-
 
372
void __declspec(noreturn) kos_ExitApp()
344
void kos_ExitApp()
373
{
Line 345... Line 374...
345
{
374
#if 0
346
	int i;
375
	int i;
347
 
376
 
348
	//
377
	//
349
	for ( i = atExitFnNum - 1; i >= 0; i-- )
378
	for ( i = atExitFnNum - 1; i >= 0; i-- )
350
	{
379
	{
351
		//
380
		//
-
 
381
		atExitList[i]();
352
		atExitList[i]();
382
	}
353
	}
383
	//
354
	//
384
#endif
355
	__asm{
385
	__asm{
356
		mov eax, -1
386
		mov eax, -1
Line 431... Line 461...
431
	keyCode = result >> 8;
461
	keyCode = result >> 8;
432
	//
462
	//
433
	return ( result & 0xFF ) == 0;
463
	return ( result & 0xFF ) == 0;
434
}
464
}
Line 435... Line -...
435
 
-
 
436
 
465
 
437
// ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ
466
// ôóíêöèÿ 3 ïîëó÷èòü âðåìÿ
438
Dword kos_GetSystemClock()
467
Dword __cdecl kos_GetSystemClock()
439
{
468
{
Line 440... Line 469...
440
//	Dword result;
469
//	Dword result;
441
 
470
 
Line 447... Line 476...
447
	}
476
	}
448
	//
477
	//
449
//	return result;
478
//	return result;
450
}
479
}
Line 451... Line 480...
451
 
480
 
452
 
481
#if 0
453
// ôóíêöèÿ 4
482
// ôóíêöèÿ 4
454
void kos_WriteTextToWindow(
483
void kos_WriteTextToWindow(
455
	Word x,
484
	Word x,
456
	Word y,
485
	Word y,
Line 473... Line 502...
473
		mov edx, textPtr
502
		mov edx, textPtr
474
		mov esi, textLen
503
		mov esi, textLen
475
		int 0x40
504
		int 0x40
476
	}
505
	}
477
}
506
}
-
 
507
#else
-
 
508
// ôóíêöèÿ 4
-
 
509
void kos_WriteTextToWindow_internal(
-
 
510
	Dword pos,
-
 
511
	Dword font,
-
 
512
	const char *textPtr,
-
 
513
	Dword textLen
-
 
514
	)
-
 
515
{
-
 
516
	__asm{
-
 
517
		mov eax, 4
-
 
518
		mov ebx, pos
-
 
519
		mov ecx, font
-
 
520
		mov edx, textPtr
-
 
521
		mov esi, textLen
-
 
522
		int 0x40
-
 
523
	}
-
 
524
}
-
 
525
#endif
Line 478... Line 526...
478
 
526
 
479
 
527
 
480
// ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû
528
// ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû
481
void kos_Pause( Dword value )
529
void __cdecl kos_Pause( Dword value )
482
{
530
{
483
	//
531
	//
484
	__asm{
532
	__asm{
Line 546... Line 594...
546
//	return result;
594
//	return result;
547
}
595
}
Line 548... Line 596...
548
 
596
 
549
 
597
 
550
// ôóíêöèÿ 10
598
// ôóíêöèÿ 10
551
Dword kos_WaitForEvent()
599
Dword __cdecl kos_WaitForEvent()
Line 552... Line 600...
552
{
600
{
553
//	Dword result;
601
//	Dword result;
Line 576... Line 624...
576
//	return result;
624
//	return result;
577
}
625
}
Line 578... Line 626...
578
 
626
 
579
 
627
 
580
// ôóíêöèÿ 12
628
// ôóíêöèÿ 12
581
void kos_WindowRedrawStatus( Dword status )
629
void __cdecl kos_WindowRedrawStatus( Dword status )
582
{
630
{
583
	__asm{
631
	__asm{
584
		mov eax, 12
632
		mov eax, 12
Line 604... Line 652...
604
		mov edx, colour
652
		mov edx, colour
605
		int 0x40
653
		int 0x40
606
	}
654
	}
607
}
655
}
Line 608... Line -...
608
 
-
 
609
 
656
 
610
// ôóíêöèÿ 17
657
// ôóíêöèÿ 17
611
bool kos_GetButtonID( Dword &buttonID )
658
bool kos_GetButtonID( Dword &buttonID )
612
{
659
{
Line 624... Line 671...
624
	return (result & 0xFF) == 0;
671
	return (result & 0xFF) == 0;
625
}
672
}
Line 626... Line 673...
626
 
673
 
627
 
674
 
628
// ôóíêöèÿ 23
675
// ôóíêöèÿ 23
629
Dword kos_WaitForEvent( Dword timeOut )
676
Dword __cdecl kos_WaitForEvent( Dword timeOut )
Line 630... Line 677...
630
{
677
{
631
//	Dword result;
678
//	Dword result;
Line 722... Line 769...
722
	}
769
	}
723
}
770
}
Line 724... Line 771...
724
 
771
 
725
 
772
 
726
// ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå
773
// ôóíêöèÿ 70 äîñòóï ê ôàéëîâîé ñèñòåìå
727
Dword kos_FileSystemAccess( kosFileInfo *fileInfo )
774
Dword __fastcall kos_FileSystemAccess( kosFileInfo *fileInfo )
Line 728... Line 775...
728
{
775
{
729
//	Dword result;
776
//	Dword result;
730
 
777
 
731
	//
778
	//
732
	__asm{
779
	__asm{
733
		mov eax, 70
780
		mov eax, 70
734
		mov ebx, fileInfo
781
		mov ebx, ecx //fileInfo
735
		int 0x40
782
		int 0x40
736
//		mov result, eax
783
//		mov result, eax
737
	}
784
	}
Line 738... Line 785...
738
	//
785
	//
739
//	return result;
786
//	return result;
740
}
787
}
741
 
788
 
742
 
789
 
743
// ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè
790
// ôóíêöèÿ 63 âûâîä ñèìâîëÿ â îêíî îòëàäêè
744
void kos_DebugOutChar( char ccc )
791
void __fastcall kos_DebugOutChar( char ccc )
745
{
792
{
746
	//
793
	//
747
	__asm{
794
	__asm{
748
		mov eax, 63
795
		mov eax, 63
Line 825... Line 872...
825
 
872
 
826
// âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ
873
// âûçîâ ñòàòè÷åñêèõ èíèöèàëèçàòîðîâ
827
// çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë
874
// çàîäíî èíèöèàëèçàöèÿ ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë
828
//#pragma section(".CRT$XCA",long,read,write)
875
//#pragma section(".CRT$XCA",long,read,write)
829
//#pragma section(".CRT$XCZ",long,read,write)
-
 
830
#pragma data_seg(".CRT$XCA")
-
 
831
#pragma data_seg(".CRT$XCZ")
-
 
832
typedef void (__cdecl *_PVFV)(void);
-
 
833
__declspec(allocate(".CRT$XCA"))  _PVFV __xc_a[1] = { NULL };
-
 
834
__declspec(allocate(".CRT$XCZ"))  _PVFV __xc_z[1] = { NULL };
-
 
835
//
-
 
836
#pragma comment(linker, "/merge:.CRT=.rdata")
-
 
837
//
876
//#pragma section(".CRT$XCZ",long,read,write)
838
void crtStartUp()
877
void crtStartUp()
839
{
-
 
840
	// âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì
-
 
841
	for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ )
-
 
842
	{
-
 
843
		//
878
{
844
		if ( *pbegin != NULL )
-
 
845
			(**pbegin)();
-
 
846
	}
879
	__MENUET_header.app_path_ptr;
847
	// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
880
	// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
848
	rtlSrand( kos_GetSystemClock() );
881
	rtlSrand( kos_GetSystemClock() );
849
	// ïóòü ê ôàéëó ïðîöåññà
882
	// ïóòü ê ôàéëó ïðîöåññà
850
	kosExePath = *((char **)0x20);
883
	//kosExePath = *((char **)0x20);
851
	// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
884
	// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
852
	kos_Main();
885
	kos_Main();
853
	// âûõîä
886
	// âûõîä
854
	kos_ExitApp();
887
	kos_ExitApp();