Exemple #1
0
/**********************************************************************
 *           main
 */
int main( int argc, char *argv[] )
{
    char error[1024];
    int i;

    init_thread_hook();

    if (!getenv( "WINELOADERNOEXEC" ))  /* first time around */
    {
        static char noexec[] = "WINELOADERNOEXEC=1";

        putenv( noexec );
        check_command_line( argc, argv );
        if (pre_exec())
        {
            wine_init_argv0_path( argv[0] );
            wine_exec_wine_binary( NULL, argv, getenv( "WINELOADER" ));
            fprintf( stderr, "wine: could not exec the wine loader\n" );
            exit(1);
        }
    }

#ifndef __APPLE__
    if (wine_main_preload_info)
#endif
    {
        for (i = 0; wine_main_preload_info[i].size; i++)
            reserve_area( wine_main_preload_info[i].addr, wine_main_preload_info[i].size );
    }

    wine_init( argc, argv, error, sizeof(error) );
    fprintf( stderr, "wine: failed to initialize: %s\n", error );
    exit(1);
}
Exemple #2
0
/**********************************************************************
 *           main
 */
int main( int argc, char *argv[] )
{
    char error[1024];
    int i;

    check_command_line( argc, argv );
    if (wine_main_preload_info)
    {
        for (i = 0; wine_main_preload_info[i].size; i++)
            reserve_area( wine_main_preload_info[i].addr, wine_main_preload_info[i].size );
    }

    wine_pthread_set_functions( &pthread_functions, sizeof(pthread_functions) );
    wine_init( argc, argv, error, sizeof(error) );
    fprintf( stderr, "wine: failed to initialize: %s\n", error );
    exit(1);
}
Exemple #3
0
static void startup_desktop()
{
#if 0
	char error[1024];
	void *libwine_handle;
	//char *args[]={"wineloader","c:\\gcc.exe","/c","/FAs","c:\\myfile.c",NULL};				//For VC++6.0 cl
	char *args[]={"wineloader","c:\\gcc.exe","c:\\myfile.c",NULL};							//For notepad
	//char *args[]={"wineloader","c:\\AngryBirds\\AngryBirds.exe",NULL};							//For angrybirds
	//char *args[]={"wineloader","c:\\mplayer.exe","c:\\a.flv","-vo", "none",NULL};										//For notepad
	//char *args[]={"wineloader","c:\\gcc.exe","/DLL","c:\\windows\\myfile.obj"};				//For VC++6.0 linker
	//char *args[]={"wineloader","c:\\gcc.exe","-s","myfile","-l","language\\chinese.oic"};		//For Olanguage
	void (*wine_init)(int argc, char *argv[], char *error, int error_size );
	char *pWineBaseDir = "/0:/wine/";
	
	FASetCurrentThreadNameA("winapp 主线程.");
	FAVfsInitTTY();												//必须将客户端的0,1,2 FD 对应的位置预留起来,WINE内部是固定用这几个来作为CONSOLE处理的,它要将0,1,2发送给server,导致发送失败
	setenv("WINEDLLPATH","dlls",TRUE);							//WINE dll目录;
	setenv("WINEPREFIX",pWineBaseDir,TRUE);						//Server Connect需要得到当前工作目录;
	//setenv("WINEDEBUG","+all,trace-heap",TRUE);					//OPen all messages
	setenv("WINEDEBUG","+trace-heap",TRUE);					//OPen all messages
	setenv("PWD","0:",TRUE);
	setenv("DISPLAY","unix:0.0",TRUE);							/*	X defualt display name */
	
	dprintf("\n正在启动 wine server...");
	FAStartupServiceA("WINESERVER",TRUE);
	dprintf("\n正在启动 wine ...");
#ifdef __i386__
	__asm("mov $0,%ax\n\t "
		  "mov %ax,%fs\n\t");
#endif
	
	
	/*
	 切换当前工作路径
	 */
	if(FAChangeDirByStringA(pWineBaseDir)!=FASTATUS_SUCCESS)
	{
		dprintf("\n系统没有安装Wine.");
		return 0;
	}
	/*
	 打开第一个动态库
	 */
	libwine_handle = dlopen(ELF_FILE_NAME,NULL);
	if(libwine_handle==NULL)
	{
		dprintf("\nWINLOADER:无法找到%s.",ELF_FILE_NAME);
		return 0;
	}
	FASleepThreadMs(5000);						//waiting the wineserver is ready.
	wine_init	= dlsym(libwine_handle,"wine_init");/*Call wine Init*/
	if(wine_init)
		wine_init( sizeof(args)/(sizeof(char*))-1/*MUST escape the null*/, args, error, sizeof(error) );
	else
	{
		dprintf("\nWINLOADER:无法找到入口wine_init.");
		return 0;
	}
	/*Load the libwine,因为wine_init这个入口函数在libwine.a中,根据loader\main.c中的流程,在运行wine_init之前还要运行preloader,和pthread,不知道是干什么的*/
	return 0;
#endif
}