+++ /dev/null
-
-/*
- * Copyright © 2001 Novell, Inc. All Rights Reserved.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * FILENAME : interface.c
- * DESCRIPTION : Perl parsing and running functions.
- * Author : SGP
- * Date : January 2001.
- *
- */
-
-
-
-#include "interface.h"
-
-#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE"
-
-
-static void xs_init(pTHX);
-//static void xs_init(pTHXo); //(J)
-
-EXTERN_C int RunPerl(int argc, char **argv, char **env);
-EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp);
-EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); // (J) pTHXo_
-
-EXTERN_C BOOL Remove_Thread_Ctx(void);
-
-
-ClsPerlHost::ClsPerlHost()
-{
-
-}
-
-ClsPerlHost::~ClsPerlHost()
-{
-
-}
-
-ClsPerlHost::VersionNumber()
-{
- return 0;
-}
-
-int
-ClsPerlHost::PerlCreate(PerlInterpreter *my_perl)
-{
-/* if (!(my_perl = perl_alloc())) // Allocate memory for Perl.
- return (1);*/
- perl_construct(my_perl);
-
- return 1;
-}
-
-int
-ClsPerlHost::PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env)
-{
- return(perl_parse(my_perl, xs_init, argc, argv, env)); // Parse the command line.
-}
-
-int
-ClsPerlHost::PerlRun(PerlInterpreter *my_perl)
-{
- return(perl_run(my_perl)); // Run Perl.
-}
-
-void
-ClsPerlHost::PerlDestroy(PerlInterpreter *my_perl)
-{
- perl_destruct(my_perl); // Destructor for Perl.
-//// perl_free(my_perl); // Free the memory allocated for Perl.
-}
-
-void
-ClsPerlHost::PerlFree(PerlInterpreter *my_perl)
-{
- perl_free(my_perl); // Free the memory allocated for Perl.
-
- // Remove the thread context set during Perl_set_context
- // This is added here since for web script there is no other place this gets executed
- // and it cannot be included into cgi2perl.xs unless this symbol is exported.
- Remove_Thread_Ctx();
-}
-
-/*============================================================================================
-
- Function : xs_init
-
- Description :
-
- Parameters : pTHX (IN) -
-
- Returns : Nothing.
-
-==============================================================================================*/
-
-static void xs_init(pTHX)
-//static void xs_init(pTHXo) //J
-{
- char *file = __FILE__;
-
- dXSUB_SYS;
- newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
-}
-
-
-EXTERN_C
-int RunPerl(int argc, char **argv, char **env)
-{
- int exitstatus = 0;
- ClsPerlHost nlm;
-
- PerlInterpreter *my_perl = NULL; // defined in Perl.h
- PerlInterpreter *new_perl = NULL; // defined in Perl.h
-
- //__asm{int 3};
- #ifdef PERL_GLOBAL_STRUCT
- #define PERLVAR(var,type)
- #define PERLVARA(var,type)
- #define PERLVARI(var,type,init) PL_Vars.var = init;
- #define PERLVARIC(var,type,init) PL_Vars.var = init;
-
- #include "perlvars.h"
-
- #undef PERLVAR
- #undef PERLVARA
- #undef PERLVARI
- #undef PERLVARIC
- #endif
-
- PERL_SYS_INIT(&argc, &argv);
-
- if (!(my_perl = perl_alloc())) // Allocate memory for Perl.
- return (1);
-
- if(nlm.PerlCreate(my_perl))
- {
- PL_perl_destruct_level = 0;
-
- exitstatus = nlm.PerlParse(my_perl, argc, argv, env);
- if(exitstatus == 0)
- {
- #if defined(TOP_CLONE) && defined(USE_ITHREADS) // XXXXXX testing
- # ifdef PERL_OBJECT
- CPerlHost *h = new CPerlHost();
- new_perl = perl_clone_using(my_perl, 1,
- h->m_pHostperlMem,
- h->m_pHostperlMemShared,
- h->m_pHostperlMemParse,
- h->m_pHostperlEnv,
- h->m_pHostperlStdIO,
- h->m_pHostperlLIO,
- h->m_pHostperlDir,
- h->m_pHostperlSock,
- h->m_pHostperlProc
- );
- CPerlObj *pPerl = (CPerlObj*)new_perl;
- # else
- new_perl = perl_clone(my_perl, 1);
- # endif
-
- exitstatus = perl_run(new_perl); // Run Perl.
- PERL_SET_THX(my_perl);
- #else
- exitstatus = nlm.PerlRun(my_perl);
- #endif
- }
- nlm.PerlDestroy(my_perl);
- }
- if(my_perl)
- nlm.PerlFree(my_perl);
-
- #ifdef USE_ITHREADS
- if (new_perl)
- {
- PERL_SET_THX(new_perl);
- nlm.PerlDestroy(new_perl);
- nlm.PerlFree(my_perl);
- }
- #endif
-
- PERL_SYS_TERM();
- return exitstatus;
-}
-
-
-// FUNCTION: AllocStdPerl
-//
-// DESCRIPTION:
-// Allocates a standard perl handler that other perl handlers
-// may delegate to. You should call FreeStdPerl to free this
-// instance when you are done with it.
-//
-IPerlHost* AllocStdPerl()
-{
- return (IPerlHost*) new ClsPerlHost();
-}
-
-
-// FUNCTION: FreeStdPerl
-//
-// DESCRIPTION:
-// Frees an instance of a standard perl handler allocated by
-// AllocStdPerl.
-//
-void FreeStdPerl(IPerlHost* pPerlHost)
-{
- if (pPerlHost)
- delete (ClsPerlHost*) pPerlHost;
-//// delete pPerlHost;
-}
-