Subversion Repositories Kolibri OS

Rev

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

Rev 1114 Rev 1764
Line 2... Line 2...
2
#include "func.h"
2
#include "func.h"
3
#include 
3
#include 
Line 4... Line 4...
4
 
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
// must be alphabetically first in the image
-
 
13
#pragma data_seg(".1seg")
-
 
14
extern "C" struct
-
 
15
{
-
 
16
	char header[8];
-
 
17
	int headerver;
-
 
18
	void* entry;
-
 
19
	void* i_end;
-
 
20
	void* memsize;
-
 
21
	void* stack;
-
 
22
	void* params;
-
 
23
	void* icon;
-
 
24
} header = {
-
 
25
	{'M', 'E', 'N', 'U', 'E', 'T', '0', '1'},
-
 
26
	1,
-
 
27
	&crtStartUp,
-
 
28
	0,	// filled by doexe2.asm
-
 
29
	0,	// filled by doexe2.asm
-
 
30
	exeStack + sizeof(exeStack),
-
 
31
	NULL,
-
 
32
	kosExePath
-
 
33
};
-
 
34
#pragma data_seg()
-
 
35
#else
Line 5... Line 36...
5
#define atexitBufferSize	32
36
char *kosExePath = NULL;
Line 6... Line -...
6
 
-
 
7
 
-
 
8
char pureCallMessage[] = "PURE function call!";
37
#endif
9
 
38
 
10
char *kosExePath = NULL;
39
char pureCallMessage[] = "PURE function call!";
11
 
40
 
12
//
41
//
Line 63... Line 92...
63
  }
92
  }
Line 64... Line 93...
64
  
93
  
65
 return RandomSeed;
94
 return RandomSeed;
Line 66... Line -...
66
}
-
 
-
 
95
}
-
 
96
 
67
 
97
#ifdef AUTOBUILD
68
 
98
// Well, not really related to auto-build, but some compilation issue
69
/*void * __cdecl memcpy( void *dst, const void *src, size_t bytesCount )
99
void memcpy( void *dst, const void *src, size_t bytesCount )
70
{
100
{
71
	__asm{
101
	__asm{
72
		mov edi, dst
102
		mov edi, dst
73
		mov eax, dst
103
//		mov eax, dst
74
		mov esi, src
104
		mov esi, src
75
		mov ecx, bytesCount
105
		mov ecx, bytesCount
76
		rep movsb
106
		rep movsb
Line 85... Line 115...
85
		mov edi, dst
115
		mov edi, dst
86
		mov al, filler
116
		mov al, filler
87
		mov ecx, count
117
		mov ecx, count
88
		rep stosb
118
		rep stosb
89
	}
119
	}
90
}*/
120
}
-
 
121
#endif
Line 91... Line 122...
91
 
122
 
92
 
123
 
93
//
124
//
Line 865... Line 896...
865
//#pragma section(".CRT$XCA",long,read,write)
896
//#pragma section(".CRT$XCA",long,read,write)
866
//#pragma section(".CRT$XCZ",long,read,write)
897
//#pragma section(".CRT$XCZ",long,read,write)
867
#pragma data_seg(".CRT$XCA")
898
#pragma data_seg(".CRT$XCA")
868
#pragma data_seg(".CRT$XCZ")
899
#pragma data_seg(".CRT$XCZ")
869
typedef void (__cdecl *_PVFV)(void);
900
typedef void (__cdecl *_PVFV)(void);
870
__declspec(allocate(".CRT$XCA"))  _PVFV __xc_a[1] = { NULL };
901
//__declspec(allocate(".CRT$XCA"))  _PVFV __xc_a[1] = { NULL };
871
__declspec(allocate(".CRT$XCZ"))  _PVFV __xc_z[1] = { NULL };
902
//__declspec(allocate(".CRT$XCZ"))  _PVFV __xc_z[1] = { NULL };
872
//
903
//
-
 
904
extern void ALMOST_HALF_init();
873
#pragma comment(linker, "/merge:.CRT=.rdata")
905
#pragma comment(linker, "/merge:.CRT=.rdata")
874
//
906
//
875
void crtStartUp()
907
void crtStartUp()
876
{
908
{
-
 
909
#ifdef AUTOBUILD
-
 
910
// linker will try to remove unused variables; force header to be included
-
 
911
	header.header;
-
 
912
#endif
877
	// âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì
913
	// âûçûâàåì èíèöèàëèçàòîðû ïî ñïèñêó, NULL'û èãíîðèðóåì
878
	for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ )
914
	/*for ( _PVFV *pbegin = __xc_a; pbegin < __xc_z; pbegin++ )
879
	{
915
	{
880
		//
916
		//
881
		if ( *pbegin != NULL )
917
		if ( *pbegin != NULL )
882
			(**pbegin)();
918
			(**pbegin)();
883
	}
919
	}*/
-
 
920
	ALMOST_HALF_init();
884
	// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
921
	// èíèöèàëèçèðóåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
885
	rtlSrand( kos_GetSystemClock() );
922
	rtlSrand( kos_GetSystemClock() );
-
 
923
#ifndef AUTOBUILD
886
	// ïóòü ê ôàéëó ïðîöåññà
924
	// ïóòü ê ôàéëó ïðîöåññà
887
	kosExePath = *((char **)0x20);
925
	kosExePath = *((char **)0x20);
-
 
926
#endif
888
	// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
927
	// âûçîâ ãëàâíîé ôóíêöèè ïðèëîæåíèÿ
889
	kos_Main();
928
	kos_Main();
890
	// âûõîä
929
	// âûõîä
891
	kos_ExitApp();
930
	kos_ExitApp();
892
}
931
}