/* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.68 2003/01/28 16:30:06 simonmar Exp $
+ * $Id: RtsStartup.c,v 1.71 2003/02/21 05:34:15 sof Exp $
*
* (c) The GHC Team, 1998-2002
*
# include "LLC.h"
#endif
+#if defined(mingw32_TARGET_OS)
+#include "win32/AsyncIO.h"
+#endif
+
#include <stdlib.h>
// Flag Structure
initProfiling1();
#endif
-#if defined(PROFILING) || defined(DEBUG)
- initProfiling2();
-#endif
-
/* start the virtual timer 'subsystem'. */
startVirtTimer(TICK_MILLISECS);
initDefaultHandlers();
#endif
+#if defined(mingw32_TARGET_OS)
+ startupAsyncIO();
+#endif
+
#ifdef RTS_GTK_FRONTPANEL
if (RtsFlags.GcFlags.frontpanel) {
initFrontPanel();
/* -----------------------------------------------------------------------------
- Getting the program's arguments.
+ Getting/Setting the program's arguments.
- This is used by System.Environment.getArgs.
+ These are used by System.Environment.
-------------------------------------------------------------------------- */
void
*argv = prog_argv;
}
+void
+setProgArgv(int argc, char *argv[])
+{
+ /* Usually this is done by startupHaskell, so we don't need to call this.
+ However, sometimes Hugs wants to change the arguments which Haskell
+ getArgs >>= ... will be fed. So you can do that by calling here
+ _after_ calling startupHaskell.
+ */
+ prog_argc = argc;
+ prog_argv = argv;
+}
+
/* -----------------------------------------------------------------------------
Per-module initialisation
StgRun((StgFunPtr)stg_init, &cap.r);
freeGroup(bd);
+
+#if defined(PROFILING) || defined(DEBUG)
+ // This must be done after module initialisation.
+ // ToDo: make this work in the presence of multiple hs_add_root()s.
+ initProfiling2();
+#endif
}
/* -----------------------------------------------------------------------------
#if defined(TICKY_TICKY)
if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
#endif
+
+#if defined(mingw32_TARGET_OS)
+ shutdownAsyncIO();
+#endif
}
// Compatibility interfaces