mirror of
https://github.com/reactos/wine.git
synced 2024-12-13 06:16:14 +00:00
3db94ef2ec
Sat Sep 27 12:36:56 1997 Alexandre Julliard <julliard@lrc.epfl.ch> * [if1632/relay.c] Made Catch and Throw also save %si and %di (untested). * [memory/selector.c] Added check for %fs and %gs in SELECTOR_FreeBlock. * [rc/winerc.c] Generated files no longer depend on Wine includes. Made .h generation optional. * [tools/build.c] [loader/task.c] Added CALL32_Init function. Added possibility to pass arguments when using CALLTO16_regs_. 32-bit stack pointer is now saved on the 16-bit stack, instead of using IF1632_Saved32_esp. Removed CallTo32 callbacks. * [tools/makedep.c] [*/Makefile.in] Added support for directly generating dependencies for .y, .l and .rc files. Modified the makefiles to use this feature. * [windows/winproc.c] [if1632/thunk.c] Use CALLTO16_regs to call window procedures. Thu Sep 25 12:18:57 1997 Kristian Nielsen <kristian.nielsen@risoe.dk> * [if1632/kernel.spec] Changed entry for SwitchStackBack to remove arguments from stack upon return (arguments left over from previous SwitchStackTo()). Borland C++ 4.0 now compiles "Hello World" (but crashes after outputting the .exe). Wed Sep 24 13:54:44 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de> * [files/directory.c] SearchPath might get NULL buffer (empty LRU list in wordpad). * [memory/selector.c] Added SUnMapLS*. * [loader/pe_image.c] Be able to run executeables from non mmap()ble filesystems. PE_LoadLibrary adds librarys loaded by another process to its own modref list too. * [windows/keyboard.c][include/accel.h][loader/resource.c] Fixed accelerator leakage, use SDK defines/names. * [graphics/env.c][misc/main.c] Set/GetEnvironemnt have nothing to do with environment vars, but with Printer Environment. * [graphics/escape.c] Escape32: map args back to segmented pointers. * [windows/win.c] WS_POPUP|WS_CHILD windows don't need a parent window (SDK). Tue Sep 16 14:40:16 1997 Robert Wilhelm <robert@physiol.med.tu-muenchen.de> * [if1632/crtdll.spec] [misc/crtdll.c] Added signal().
243 lines
5.9 KiB
C
243 lines
5.9 KiB
C
/*
|
|
static char RCSId[] = "$Id: wine.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
|
|
static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
|
*/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include "windows.h"
|
|
#include "module.h"
|
|
#include "selectors.h"
|
|
#include "bitmap.h"
|
|
#include "comm.h"
|
|
#include "win.h"
|
|
#include "menu.h"
|
|
#include "atom.h"
|
|
#include "dialog.h"
|
|
#include "drive.h"
|
|
#include "queue.h"
|
|
#include "syscolor.h"
|
|
#include "sysmetrics.h"
|
|
#include "callback.h"
|
|
#include "file.h"
|
|
#include "gdi.h"
|
|
#include "heap.h"
|
|
#include "keyboard.h"
|
|
#include "miscemu.h"
|
|
#include "neexe.h"
|
|
#include "options.h"
|
|
#include "spy.h"
|
|
#include "task.h"
|
|
#include "tweak.h"
|
|
#include "user.h"
|
|
#include "dce.h"
|
|
#include "shell.h"
|
|
#include "winproc.h"
|
|
#include "stddebug.h"
|
|
#include "debug.h"
|
|
|
|
#ifndef WINELIB
|
|
#include "debugger.h"
|
|
#endif
|
|
|
|
int __winelib = 1; /* Winelib run-time flag */
|
|
|
|
HANDLE32 SystemHeap = 0;
|
|
HANDLE32 SegptrHeap = 0;
|
|
|
|
/***********************************************************************
|
|
* Main initialisation routine
|
|
*/
|
|
int MAIN_Init(void)
|
|
{
|
|
extern BOOL32 EVENT_Init(void);
|
|
extern BOOL32 RELAY_Init(void);
|
|
extern BOOL32 WIN16DRV_Init(void);
|
|
extern BOOL32 VIRTUAL_Init(void);
|
|
extern BOOL32 WIDGETS_Init(void);
|
|
|
|
int queueSize;
|
|
|
|
/* Initialize virtual memory management */
|
|
if (!VIRTUAL_Init()) return 0;
|
|
|
|
/* Create the system and SEGPTR heaps */
|
|
if (!(SystemHeap = HeapCreate( HEAP_GROWABLE, 0x10000, 0 ))) return 0;
|
|
if (!(SegptrHeap = HeapCreate( HEAP_WINE_SEGPTR, 0, 0 ))) return 0;
|
|
|
|
/* Load the configuration file */
|
|
if (!PROFILE_LoadWineIni()) return 0;
|
|
|
|
/* Initialize DOS memory */
|
|
if (!DOSMEM_Init()) return 0;
|
|
|
|
/* Initialize signal handling */
|
|
if (!SIGNAL_Init()) return 0;
|
|
|
|
/* Initialize event handling */
|
|
if (!EVENT_Init()) return 0;
|
|
|
|
#ifdef WINELIB
|
|
/* Create USER and GDI heap */
|
|
USER_HeapSel = GlobalAlloc16( GMEM_FIXED, 0x10000 );
|
|
LocalInit( USER_HeapSel, 0, 0xffff );
|
|
GDI_HeapSel = GlobalAlloc16( GMEM_FIXED, GDI_HEAP_SIZE );
|
|
LocalInit( GDI_HeapSel, 0, GDI_HEAP_SIZE-1 );
|
|
#else
|
|
/* Initialize relay code */
|
|
if (!RELAY_Init()) return 0;
|
|
|
|
/* Create built-in modules */
|
|
if (!BUILTIN_Init()) return 0;
|
|
|
|
/* Initialize signal handling */
|
|
if (!SIGNAL_InitEmulator()) return 0;
|
|
|
|
/* Create the Win16 printer driver */
|
|
if (!WIN16DRV_Init()) return 0;
|
|
#endif /* WINELIB */
|
|
|
|
/* Initialize Wine tweaks */
|
|
if (!TWEAK_Init()) return 0;
|
|
|
|
/* Initialize OEM Bitmaps */
|
|
if (!OBM_Init()) return 0;
|
|
|
|
/* Initialise DOS drives */
|
|
if (!DRIVE_Init()) return 0;
|
|
|
|
/* Initialise DOS directories */
|
|
if (!DIR_Init()) return 0;
|
|
|
|
/* Initialize tasks */
|
|
if (!TASK_Init()) return 0;
|
|
|
|
/* Initialize communications */
|
|
COMM_Init();
|
|
|
|
/* Initialize IO-port permissions */
|
|
IO_port_init();
|
|
|
|
/* registry initialisation */
|
|
SHELL_LoadRegistry();
|
|
|
|
/* Global atom table initialisation */
|
|
if (!ATOM_Init()) return 0;
|
|
|
|
/* GDI initialisation */
|
|
if (!GDI_Init()) return 0;
|
|
|
|
/* Initialize system colors and metrics*/
|
|
SYSMETRICS_Init();
|
|
SYSCOLOR_Init();
|
|
|
|
/* Create the DCEs */
|
|
DCE_Init();
|
|
|
|
/* Initialize keyboard */
|
|
if (!KEYBOARD_Init()) return 0;
|
|
|
|
/* Initialize window procedures */
|
|
if (!WINPROC_Init()) return 0;
|
|
|
|
/* Initialize built-in window classes */
|
|
if (!WIDGETS_Init()) return 0;
|
|
|
|
/* Initialize dialog manager */
|
|
if (!DIALOG_Init()) return 0;
|
|
|
|
/* Initialize menus */
|
|
if (!MENU_Init()) return 0;
|
|
|
|
/* Create desktop window */
|
|
if (!WIN_CreateDesktopWindow()) return 0;
|
|
|
|
/* Initialize message spying */
|
|
if (!SPY_Init()) return 0;
|
|
|
|
/* Check wine.conf for old/bad entries */
|
|
if (!TWEAK_CheckConfiguration()) return 0;
|
|
|
|
/* Create system message queue */
|
|
queueSize = GetProfileInt32A( "windows", "TypeAhead", 120 );
|
|
if (!QUEUE_CreateSysMsgQueue( queueSize )) return 0;
|
|
|
|
/* Set double click time */
|
|
SetDoubleClickTime32( GetProfileInt32A("windows","DoubleClickSpeed",452) );
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
#ifndef WINELIB
|
|
/**********************************************************************
|
|
* main
|
|
*/
|
|
int main(int argc, char *argv[] )
|
|
{
|
|
extern BOOL32 MAIN_WineInit( int *argc, char *argv[] );
|
|
extern void *CALL32_Init(void);
|
|
extern char * DEBUG_argv0;
|
|
|
|
int i,loaded;
|
|
HINSTANCE32 handle;
|
|
|
|
__winelib = 0; /* First of all, clear the Winelib flag */
|
|
|
|
/*
|
|
* Save this so that the internal debugger can get a hold of it if
|
|
* it needs to.
|
|
*/
|
|
DEBUG_argv0 = argv[0];
|
|
|
|
if (!MAIN_WineInit( &argc, argv )) return 1;
|
|
if (!MAIN_Init()) return 1;
|
|
|
|
/* Initialize CALL32 routines */
|
|
/* This needs to be done just before task-switching starts */
|
|
IF1632_CallLargeStack = (int (*)(int (*func)(), void *arg))CALL32_Init();
|
|
|
|
loaded=0;
|
|
for (i = 1; i < argc; i++)
|
|
{
|
|
if ((handle = WinExec32( argv[i], SW_SHOWNORMAL )) < 32)
|
|
{
|
|
fprintf(stderr, "wine: can't exec '%s': ", argv[i]);
|
|
switch (handle)
|
|
{
|
|
case 2: fprintf( stderr, "file not found\n" ); break;
|
|
case 11: fprintf( stderr, "invalid exe file\n" ); break;
|
|
case 21: fprintf( stderr, "win32 executable\n" ); break;
|
|
default: fprintf( stderr, "error=%d\n", handle ); break;
|
|
}
|
|
return 1;
|
|
}
|
|
loaded++;
|
|
}
|
|
|
|
if (!loaded) { /* nothing loaded */
|
|
extern void MAIN_Usage(char*);
|
|
MAIN_Usage(argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
if (!GetNumTasks())
|
|
{
|
|
fprintf( stderr, "wine: no executable file found.\n" );
|
|
return 0;
|
|
}
|
|
|
|
if (Options.debug) DEBUG_SetBreakpoints( TRUE ); /* Setup breakpoints */
|
|
|
|
Yield(); /* Start the first task */
|
|
fprintf( stderr, "WinMain: Should never happen: returned from Yield()\n" );
|
|
return 0;
|
|
}
|
|
|
|
#endif /* #ifndef WINELIB */
|