/* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.39 2000/04/03 16:28:08 simonmar Exp $
+ * $Id: RtsStartup.c,v 1.42 2000/04/20 13:20:31 simonmar Exp $
*
* (c) The GHC Team, 1998-2000
*
static void initModules ( void * );
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;
+}
+
+void
+getProgArgv(int *argc, char **argv[])
+{
+ *argc = prog_argc;
+ *argv = prog_argv;
+}
+
+
+void
startupHaskell(int argc, char *argv[], void *init_root)
{
/* To avoid repeated initialisations of the RTS */
StgRun to call this stuff.
-------------------------------------------------------------------------- */
-#ifndef INTERPRETER
-
/* The init functions use an explicit stack...
*/
#define INIT_STACK_SIZE (BLOCK_SIZE * 4)
F_ *init_stack = NULL;
nat init_sp = 0;
+#ifndef INTERPRETER
static void
initModules ( void *init_root )
{
+#ifdef SMP
Capability cap;
+#else
+#define cap MainRegTable
+#endif
init_sp = 0;
init_stack = (F_ *)allocate(INIT_STACK_SIZE / sizeof(W_));
cap.rSp = (P_)(init_stack + init_sp);
StgRun((StgFunPtr)stg_init, &cap);
}
-
#endif /* !INTERPRETER */
/* -----------------------------------------------------------------------------