Subversion Repositories Kolibri OS

Rev

Rev 1005 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1005 Rev 1764
Line 1... Line 1...
1
#include "kosSyst.h"
1
#include "kosSyst.h"
-
 
2
#include "func.h"
2
#include 
3
#include 
Line 3... Line 4...
3
 
4
 
Line -... Line 5...
-
 
5
#define atexitBufferSize	32
-
 
6
 
-
 
7
// Autobuild uses FASM method for exe->kos,
-
 
8
// MENUET01 header should be present in EXE.
-
 
9
#ifdef AUTOBUILD
-
 
10
char kosExePath[1024];
-
 
11
char exeStack[16384];
-
 
12
extern char params[1024];
-
 
13
// must be alphabetically first in the image
-
 
14
#pragma data_seg(".1seg")
-
 
15
extern "C" struct
-
 
16
{
-
 
17
	char header[8];
-
 
18
	int headerver;
-
 
19
	void* entry;
-
 
20
	void* i_end;
-
 
21
	void* memsize;
-
 
22
	void* stack;
-
 
23
	void* params;
-
 
24
	void* icon;
-
 
25
} header = {
-
 
26
	{'M', 'E', 'N', 'U', 'E', 'T', '0', '1'},
-
 
27
	1,
-
 
28
	&crtStartUp,
-
 
29
	0,	// filled by doexe2.asm
-
 
30
	0,	// filled by doexe2.asm
-
 
31
	exeStack + sizeof(exeStack),
-
 
32
	params,
-
 
33
	kosExePath
-
 
34
};
-
 
35
#pragma data_seg()
-
 
36
#else
Line 4... Line 37...
4
#define atexitBufferSize	32
37
char *kosExePath = NULL;
Line 5... Line -...
5
 
-
 
6
 
-
 
7
char pureCallMessage[] = "PURE function call!";
38
#endif
8
 
39
 
9
char *kosExePath = NULL;
40
char pureCallMessage[] = "PURE function call!";
10
 
41
 
11
//
42
//
Line 62... Line 93...
62
  }
93
  }
Line 63... Line 94...
63
  
94
  
64
 return RandomSeed;
95
 return RandomSeed;
Line 65... Line 96...
65
}
96
}
66
 
-
 
-
 
97
 
67
#if _MSC_VER >= 1400
98
#ifdef AUTOBUILD
68
//
99
// Well, not really related to auto-build, but some compilation issue
69
void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount )
100
void memcpy( void *dst, const void *src, size_t bytesCount )
70
{
101
{
71
	__asm{
102
	__asm{
72
		mov edi, dst
103
		mov edi, dst
73
		mov eax, dst
104
//		mov eax, dst
74
		mov esi, src
105
		mov esi, src
75
		mov ecx, bytesCount
106
		mov ecx, bytesCount
76
		rep movsb
107
		rep movsb
Line 88... Line 119...
88
		rep stosb
119
		rep stosb
89
	}
120
	}
90
}
121
}
91
#endif
122
#endif
Line -... Line 123...
-
 
123
 
92
 
124
 
93
//
125
//
94
Dword rtlInterlockedExchange( Dword *target, Dword value )
126
Dword rtlInterlockedExchange( Dword *target, Dword value )
95
{
127
{
Line 815... Line 847...
815
//#pragma section(".CRT$XCA",long,read,write)
847
//#pragma section(".CRT$XCA",long,read,write)
816
//#pragma section(".CRT$XCZ",long,read,write)
848
//#pragma section(".CRT$XCZ",long,read,write)
817
#pragma data_seg(".CRT$XCA")
849
#pragma data_seg(".CRT$XCA")
818
#pragma data_seg(".CRT$XCZ")
850
#pragma data_seg(".CRT$XCZ")
819
typedef void (__cdecl *_PVFV)(void);
851
typedef void (__cdecl *_PVFV)(void);
820
__declspec(allocate(".CRT$XCA"))  _PVFV __xc_a[1] = { NULL };
852
//__declspec(allocate(".CRT$XCA"))  _PVFV __xc_a[1] = { NULL };
821
__declspec(allocate(".CRT$XCZ"))  _PVFV __xc_z[1] = { NULL };
853
//__declspec(allocate(".CRT$XCZ"))  _PVFV __xc_z[1] = { NULL };
822
//
854
//
823
#pragma comment(linker, "/merge:.CRT=.rdata")
855
#pragma comment(linker, "/merge:.CRT=.rdata")
824
//
856
//
825
void crtStartUp()
857
void crtStartUp()
826
{
858
{
-
 
859
#ifdef AUTOBUILD
-
 
860
// linker will try to remove unused variables; force header to be included
-
 
861
	header.header;
-
 
862
#endif
827
	// âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì
863
	// âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì
828
	for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ )
864
	/*for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ )
829
	{
865
	{
830
		//
866
		//
831
		if ( *pbegin != NULL )
867
		if ( *pbegin != NULL )
832
			(**pbegin)();
868
			(**pbegin)();
833
	}
869
	}*/
834
	// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
870
	// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
835
	rtlSrand( kos_GetSystemClock() );
871
	rtlSrand( kos_GetSystemClock() );
-
 
872
#ifndef AUTOBUILD
836
	// ïóòü ê ôàéëó ïðîöåññà
873
	// ïóòü ê ôàéëó ïðîöåññà
837
	kosExePath = *((char **)0x20);
874
	kosExePath = *((char **)0x20);
-
 
875
#endif
838
	// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
876
	// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
839
	kos_Main();
877
	kos_Main();
840
	// âûõîä
878
	// âûõîä
841
	kos_ExitApp();
879
	kos_ExitApp();
842
}
880
}