		/*    miniperlmain.c
		 *
		 *    Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
		 *    2004, 2005 by Larry Wall and others
		 *
		 *    You may distribute under the terms of either the GNU General Public
		 *    License or the Artistic License, as specified in the README file.
		 *
		 */
		
		/*
		 * "The Road goes ever on and on, down from the door where it began."
		 */
		
		/* This file contains the main() function for the perl interpreter.
		 * Note that miniperlmain.c contains main() for the 'miniperl' binary,
		 * while perlmain.c contains main() for the 'perl' binary.
		 *
		 * Miniperl is like perl except that it does not support dynamic loading,
		 * and in fact is used to build the dynamic modules needed for the 'real'
		 * perl executable.
		 */
		
		#ifdef OEMVS
		#ifdef MYMALLOC
		/* sbrk is limited to first heap segment so make it big */
		#pragma runopts(HEAP(8M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON))
		#else
		#pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON))
		#endif
		#endif
		
		
		#include "EXTERN.h"
		#define PERL_IN_MINIPERLMAIN_C
		#include "perl.h"
		
		static void xs_init (pTHX);
		static PerlInterpreter *my_perl;
		
		#if defined (__MINT__) || defined (atarist)
		/* The Atari operating system doesn't have a dynamic stack.  The
		   stack size is determined from this value.  */
		long _stksize = 64 * 1024;
		#endif
		
		#if defined(PERL_GLOBAL_STRUCT_PRIVATE)
		/* The static struct perl_vars* may seem counterproductive since the
		 * whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note
		 * that this static is not in the shared perl library, the globals PL_Vars
		 * and PL_VarsPtr will stay away. */
		static struct perl_vars* my_plvarsp;
		struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; }
		#endif
		
		int
		main(int argc, char **argv, char **env)
        3937    {
		    dVAR;
        3937        int exitstatus;
		#ifdef PERL_GLOBAL_STRUCT
		    struct perl_vars *plvarsp = init_global_struct();
		#  ifdef PERL_GLOBAL_STRUCT_PRIVATE
		    my_vars = my_plvarsp = plvarsp;
		#  endif
		#endif /* PERL_GLOBAL_STRUCT */
        3937        (void)env;
		#ifndef PERL_USE_SAFE_PUTENV
        3937        PL_use_safe_putenv = 0;
		#endif /* PERL_USE_SAFE_PUTENV */
		
		    /* if user wants control of gprof profiling off by default */
		    /* noop unless Configure is given -Accflags=-DPERL_GPROF_CONTROL */
		    PERL_GPROF_MONCONTROL(0);
		
        3937        PERL_SYS_INIT3(&argc,&argv,&env);
		
		#if defined(USE_ITHREADS)
		    /* XXX Ideally, this should really be happening in perl_alloc() or
		     * perl_construct() to keep libperl.a transparently fork()-safe.
		     * It is currently done here only because Apache/mod_perl have
		     * problems due to lack of a call to cancel pthread_atfork()
		     * handlers when shared objects that contain the handlers may
		     * be dlclose()d.  This forces applications that embed perl to
		     * call PTHREAD_ATFORK() explicitly, but if and only if it hasn't
		     * been called at least once before in the current process.
		     * --GSAR 2001-07-20 */
		    PTHREAD_ATFORK(Perl_atfork_lock,
		                   Perl_atfork_unlock,
		                   Perl_atfork_unlock);
		#endif
		
        3937        if (!PL_do_undump) {
        3937    	my_perl = perl_alloc();
        3937    	if (!my_perl)
      ######    	    exit(1);
        3937    	perl_construct(my_perl);
        3937    	PL_perl_destruct_level = 0;
		    }
        3937        PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
        3937        exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
        3939        if (!exitstatus)
        3855            perl_run(my_perl);
		      
        3983        exitstatus = perl_destruct(my_perl);
		
        3983        perl_free(my_perl);
		
		#ifdef PERL_GLOBAL_STRUCT
		    free_global_struct(plvarsp);
		#endif /* PERL_GLOBAL_STRUCT */
		
        3983        PERL_SYS_TERM();
		
        3983        exit(exitstatus);
		    return exitstatus;
		}
		
		/* Register any extra external extensions */
		
		/* Do not delete this line--writemain depends on it */
		EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
		
		static void
		xs_init(pTHX)
        3934    {
        3934        const char file[] = __FILE__;
		    dXSUB_SYS;
        3934            newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
		}
