summaryrefslogtreecommitdiff
path: root/sapi/activescript/php4as_scriptengine.h
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2002-05-20 01:35:29 +0000
committerWez Furlong <wez@php.net>2002-05-20 01:35:29 +0000
commite754361405395908abd687b1403215da2bd98b92 (patch)
treee695f256b31e3a721667dba65199d34869455948 /sapi/activescript/php4as_scriptengine.h
parent50f7427e69741acf9094a0f63c35503bfa4afca6 (diff)
downloadphp-git-e754361405395908abd687b1403215da2bd98b92.tar.gz
Implement ActiveScript interfaces.
This allows use of PHP in: Client-side script in Internet Explorer Windows Scripting Host ASP and ASP.NET pages It's mostly working... give it a go. You will need to regsvr32 the php4activescript.dll manually.
Diffstat (limited to 'sapi/activescript/php4as_scriptengine.h')
-rw-r--r--sapi/activescript/php4as_scriptengine.h234
1 files changed, 234 insertions, 0 deletions
diff --git a/sapi/activescript/php4as_scriptengine.h b/sapi/activescript/php4as_scriptengine.h
new file mode 100644
index 0000000000..1d2314b5e2
--- /dev/null
+++ b/sapi/activescript/php4as_scriptengine.h
@@ -0,0 +1,234 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 4 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2002 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.02 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available at through the world-wide-web at |
+ | http://www.php.net/license/2_02.txt. |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Wez Furlong <wez@thebrainroom.com> |
+ +----------------------------------------------------------------------+
+ */
+/* $Id$ */
+
+#include <activscp.h>
+#include "zend.h"
+#include <setjmp.h>
+
+/* Definitions for thread messages */
+enum {
+ PHPSE_STATE_CHANGE = WM_USER + 20,
+ PHPSE_INIT_NEW,
+ PHPSE_PARSE_SCRIPT,
+ PHPSE_ADD_SCRIPTLET,
+ PHPSE_CLOSE,
+ PHPSE_CLONE,
+ PHPSE_ENTER,
+ PHPSE_LEAVE,
+ PHPSE_TERMINATE,
+ PHPSE_PARSE_PROC,
+ PHPSE_EXEC_PROC,
+ PHPSE_ADD_NAMED_ITEM,
+ PHPSE_SET_SITE,
+ PHPSE_ADD_TYPELIB,
+ PHPSE_TRIGGER_ERROR,
+ PHPSE_GET_DISPATCH
+};
+
+struct php_active_script_get_dispatch_info {
+ LPCOLESTR pstrItemName;
+ LPSTREAM dispatch;
+};
+
+struct php_active_script_add_named_item_info {
+ LPCOLESTR pstrName;
+ DWORD dwFlags;
+ IUnknown *punk;
+ ITypeInfo *ptyp;
+ IDispatch *pdisp;
+ LPSTREAM marshal;
+};
+
+struct php_active_script_add_scriptlet_info {
+ /* [in] */ LPCOLESTR pstrDefaultName;
+ /* [in] */ LPCOLESTR pstrCode;
+ /* [in] */ LPCOLESTR pstrItemName;
+ /* [in] */ LPCOLESTR pstrSubItemName;
+ /* [in] */ LPCOLESTR pstrEventName;
+ /* [in] */ LPCOLESTR pstrDelimiter;
+ /* [in] */ DWORD dwSourceContextCookie;
+ /* [in] */ ULONG ulStartingLineNumber;
+ /* [in] */ DWORD dwFlags;
+ /* [out] */ BSTR *pbstrName;
+ /* [out] */ EXCEPINFO *pexcepinfo;
+};
+
+struct php_active_script_parse_info {
+ /* [in] */ LPCOLESTR pstrCode;
+ /* [in] */ LPCOLESTR pstrItemName;
+ /* [in] */ IUnknown *punkContext;
+ /* [in] */ LPCOLESTR pstrDelimiter;
+ /* [in] */ DWORD dwSourceContextCookie;
+ /* [in] */ ULONG ulStartingLineNumber;
+ /* [in] */ DWORD dwFlags;
+ /* [out] */ VARIANT *pvarResult;
+ /* [out] */ EXCEPINFO *pexcepinfo;
+};
+
+struct php_active_script_parse_proc_info {
+ /* [in] */ LPCOLESTR pstrCode;
+ /* [in] */ LPCOLESTR pstrFormalParams;
+ /* [in] */ LPCOLESTR pstrProcedureName;
+ /* [in] */ LPCOLESTR pstrItemName;
+ /* [in] */ IUnknown *punkContext;
+ /* [in] */ LPCOLESTR pstrDelimiter;
+ /* [in] */ DWORD dwSourceContextCookie;
+ /* [in] */ ULONG ulStartingLineNumber;
+ /* [in] */ DWORD dwFlags;
+ /* [out] */ IDispatch **ppdisp;
+};
+
+struct php_active_script_add_tlb_info {
+ /* [in] */ const GUID * rguidTypeLib;
+ /* [in] */ DWORD dwMajor;
+ /* [in] */ DWORD dwMinor;
+ /* [in] */ DWORD dwFlags;
+};
+
+class TPHPScriptingEngine:
+ public IActiveScript,
+ public IActiveScriptParse,
+ public IActiveScriptParseProcedure
+{
+public:
+ volatile LONG m_refcount;
+ IActiveScriptSite *m_pass;
+ SCRIPTSTATE m_scriptstate;
+ MUTEX_T m_mutex;
+ HashTable m_script_dispatchers;
+ HANDLE m_engine_thread_handle;
+
+ HANDLE m_sync_thread_msg;
+ HRESULT m_sync_thread_ret;
+
+ /* This is hacky, but only used when the host queries us for a script dispatch */
+ void *** m_tsrm_hack;
+
+ void add_to_global_namespace(IDispatch *disp, DWORD flags, char *name TSRMLS_DC);
+
+ THREAD_T m_enginethread, m_basethread;
+ HashTable m_frags;
+ ULONG m_lambda_count;
+ IActiveScriptSite *m_pass_eng;
+
+ jmp_buf *m_err_trap;
+ int m_in_main, m_stop_main;
+
+ HRESULT SendThreadMessage(LONG msg, WPARAM wparam, LPARAM lparam);
+
+ void engine_thread_func(void);
+ HRESULT engine_thread_handler(LONG msg, WPARAM wParam, LPARAM lParam, int *handled TSRMLS_DC);
+
+public: /* IUnknown */
+ STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject);
+ STDMETHODIMP_(DWORD) AddRef(void);
+ STDMETHODIMP_(DWORD) Release(void);
+public: /* IActiveScript */
+ STDMETHODIMP SetScriptSite(
+ /* [in] */ IActiveScriptSite *pass);
+
+ STDMETHODIMP GetScriptSite(
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ STDMETHODIMP SetScriptState(
+ /* [in] */ SCRIPTSTATE ss);
+
+ STDMETHODIMP GetScriptState(
+ /* [out] */ SCRIPTSTATE *pssState);
+
+ STDMETHODIMP Close( void);
+
+ STDMETHODIMP AddNamedItem(
+ /* [in] */ LPCOLESTR pstrName,
+ /* [in] */ DWORD dwFlags);
+
+ STDMETHODIMP AddTypeLib(
+ /* [in] */ REFGUID rguidTypeLib,
+ /* [in] */ DWORD dwMajor,
+ /* [in] */ DWORD dwMinor,
+ /* [in] */ DWORD dwFlags);
+
+ STDMETHODIMP GetScriptDispatch(
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [out] */ IDispatch **ppdisp);
+
+ STDMETHODIMP GetCurrentScriptThreadID(
+ /* [out] */ SCRIPTTHREADID *pstidThread);
+
+ STDMETHODIMP GetScriptThreadID(
+ /* [in] */ DWORD dwWin32ThreadId,
+ /* [out] */ SCRIPTTHREADID *pstidThread);
+
+ STDMETHODIMP GetScriptThreadState(
+ /* [in] */ SCRIPTTHREADID stidThread,
+ /* [out] */ SCRIPTTHREADSTATE *pstsState);
+
+ STDMETHODIMP InterruptScriptThread(
+ /* [in] */ SCRIPTTHREADID stidThread,
+ /* [in] */ const EXCEPINFO *pexcepinfo,
+ /* [in] */ DWORD dwFlags);
+
+ STDMETHODIMP Clone(
+ /* [out] */ IActiveScript **ppscript);
+
+public: /* IActiveScriptParse */
+ STDMETHODIMP InitNew( void);
+
+ STDMETHODIMP AddScriptlet(
+ /* [in] */ LPCOLESTR pstrDefaultName,
+ /* [in] */ LPCOLESTR pstrCode,
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [in] */ LPCOLESTR pstrSubItemName,
+ /* [in] */ LPCOLESTR pstrEventName,
+ /* [in] */ LPCOLESTR pstrDelimiter,
+ /* [in] */ DWORD dwSourceContextCookie,
+ /* [in] */ ULONG ulStartingLineNumber,
+ /* [in] */ DWORD dwFlags,
+ /* [out] */ BSTR *pbstrName,
+ /* [out] */ EXCEPINFO *pexcepinfo);
+
+ STDMETHODIMP ParseScriptText(
+ /* [in] */ LPCOLESTR pstrCode,
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [in] */ IUnknown *punkContext,
+ /* [in] */ LPCOLESTR pstrDelimiter,
+ /* [in] */ DWORD dwSourceContextCookie,
+ /* [in] */ ULONG ulStartingLineNumber,
+ /* [in] */ DWORD dwFlags,
+ /* [out] */ VARIANT *pvarResult,
+ /* [out] */ EXCEPINFO *pexcepinfo);
+public: /* IActiveScriptParseProcedure */
+ STDMETHODIMP ParseProcedureText(
+ /* [in] */ LPCOLESTR pstrCode,
+ /* [in] */ LPCOLESTR pstrFormalParams,
+ /* [in] */ LPCOLESTR pstrProcedureName,
+ /* [in] */ LPCOLESTR pstrItemName,
+ /* [in] */ IUnknown *punkContext,
+ /* [in] */ LPCOLESTR pstrDelimiter,
+ /* [in] */ DWORD dwSourceContextCookie,
+ /* [in] */ ULONG ulStartingLineNumber,
+ /* [in] */ DWORD dwFlags,
+ /* [out] */ IDispatch **ppdisp);
+public:
+ TPHPScriptingEngine();
+ ~TPHPScriptingEngine();
+
+};
+