*** empty log message ***
This commit is contained in:
parent
a00c29b744
commit
d330ad1734
@ -1,10 +1,10 @@
|
|||||||
== Introduction ==
|
== Introduction ==
|
||||||
SSE is a collection of scriping engines for various programming languages.
|
ASE is a collection of scriping engines for various programming languages.
|
||||||
It has been written in the hopt that it will be useful for programmers.
|
It has been written in the hopt that it will be useful for programmers.
|
||||||
|
|
||||||
== License ==
|
== License ==
|
||||||
The toolkit is distributed under the SSE general license.
|
The toolkit is distributed under the ASE general license.
|
||||||
|
|
||||||
== Author ==
|
== Author ==
|
||||||
Chung, Hyung-Hwan, the sole author of SSE, is ...
|
Chung, Hyung-Hwan, the sole author of ASE, is ...
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: jni.c,v 1.36 2006-12-04 06:04:06 bacon Exp $
|
* $Id: jni.c,v 1.37 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/jni.h>
|
#include <ase/awk/jni.h>
|
||||||
@ -669,7 +669,7 @@ static ase_ssize_t __java_open_extio (
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret != -1)
|
if (ret >= 0)
|
||||||
{
|
{
|
||||||
/* ret == -1 failed to open the stream
|
/* ret == -1 failed to open the stream
|
||||||
* ret == 0 opened the stream and reached its end
|
* ret == 0 opened the stream and reached its end
|
||||||
@ -713,7 +713,7 @@ static ase_ssize_t __java_close_extio (
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret != -1)
|
if (ret >= 0)
|
||||||
{
|
{
|
||||||
/* ret == -1 failed to close the stream
|
/* ret == -1 failed to close the stream
|
||||||
* ret == 0 closed the stream */
|
* ret == 0 closed the stream */
|
||||||
|
114
ase/awk/run.c
114
ase/awk/run.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.294 2006-12-05 02:54:22 bacon Exp $
|
* $Id: run.c,v 1.295 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk_i.h>
|
#include <ase/awk/awk_i.h>
|
||||||
@ -790,12 +790,15 @@ static int __init_run (
|
|||||||
}
|
}
|
||||||
else run->pattern_range_state = ASE_NULL;
|
else run->pattern_range_state = ASE_NULL;
|
||||||
|
|
||||||
run->extio.handler[ASE_AWK_EXTIO_PIPE] = runios->pipe;
|
if (runios != ASE_NULL)
|
||||||
run->extio.handler[ASE_AWK_EXTIO_COPROC] = runios->coproc;
|
{
|
||||||
run->extio.handler[ASE_AWK_EXTIO_FILE] = runios->file;
|
run->extio.handler[ASE_AWK_EXTIO_PIPE] = runios->pipe;
|
||||||
run->extio.handler[ASE_AWK_EXTIO_CONSOLE] = runios->console;
|
run->extio.handler[ASE_AWK_EXTIO_COPROC] = runios->coproc;
|
||||||
run->extio.custom_data = runios->custom_data;
|
run->extio.handler[ASE_AWK_EXTIO_FILE] = runios->file;
|
||||||
run->extio.chain = ASE_NULL;
|
run->extio.handler[ASE_AWK_EXTIO_CONSOLE] = runios->console;
|
||||||
|
run->extio.custom_data = runios->custom_data;
|
||||||
|
run->extio.chain = ASE_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
run->global.rs = ASE_NULL;
|
run->global.rs = ASE_NULL;
|
||||||
run->global.fs = ASE_NULL;
|
run->global.fs = ASE_NULL;
|
||||||
@ -3279,78 +3282,73 @@ static ase_awk_val_t* __eval_binop_in (
|
|||||||
static ase_awk_val_t* __eval_binop_bor (
|
static ase_awk_val_t* __eval_binop_bor (
|
||||||
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right)
|
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right)
|
||||||
{
|
{
|
||||||
if (left->type == ASE_AWK_VAL_INT &&
|
int n1, n2, n3;
|
||||||
right->type == ASE_AWK_VAL_INT)
|
ase_long_t l1, l2;
|
||||||
{
|
ase_real_t r1, r2;
|
||||||
ase_awk_val_t* res;
|
ase_awk_val_t* res;
|
||||||
ase_long_t r =
|
|
||||||
((ase_awk_val_int_t*)left)->val |
|
|
||||||
((ase_awk_val_int_t*)right)->val;
|
|
||||||
|
|
||||||
res = ase_awk_makeintval (run, r);
|
n1 = ase_awk_valtonum (run, left, &l1, &r1);
|
||||||
|
n2 = ase_awk_valtonum (run, right, &l2, &r2);
|
||||||
|
|
||||||
if (res == ASE_NULL)
|
if (n1 == -1 || n2 == -1) PANIC (run, ASE_AWK_EOPERAND);
|
||||||
{
|
|
||||||
run->errnum = ASE_AWK_ENOMEM;
|
|
||||||
return ASE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
n3 = n1 + (n2 << 1);
|
||||||
}
|
ASE_AWK_ASSERT (run->awk, n3 >= 0 && n3 <= 3);
|
||||||
|
res = (n3 == 0)? ase_awk_makeintval(run,(ase_long_t)l1|(ase_long_t)l2):
|
||||||
|
(n3 == 1)? ase_awk_makeintval(run,(ase_long_t)r1|(ase_long_t)l2):
|
||||||
|
(n3 == 2)? ase_awk_makeintval(run,(ase_long_t)l1|(ase_long_t)r2):
|
||||||
|
ase_awk_makeintval(run,(ase_long_t)r1|(ase_long_t)r2);
|
||||||
|
|
||||||
run->errnum = ASE_AWK_EOPERAND;
|
if (res == ASE_NULL) PANIC (run, ASE_AWK_ENOMEM);
|
||||||
return ASE_NULL;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_awk_val_t* __eval_binop_bxor (
|
static ase_awk_val_t* __eval_binop_bxor (
|
||||||
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right)
|
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right)
|
||||||
{
|
{
|
||||||
if (left->type == ASE_AWK_VAL_INT &&
|
int n1, n2, n3;
|
||||||
right->type == ASE_AWK_VAL_INT)
|
ase_long_t l1, l2;
|
||||||
{
|
ase_real_t r1, r2;
|
||||||
ase_awk_val_t* res;
|
ase_awk_val_t* res;
|
||||||
ase_long_t r =
|
|
||||||
((ase_awk_val_int_t*)left)->val ^
|
|
||||||
((ase_awk_val_int_t*)right)->val;
|
|
||||||
res = ase_awk_makeintval (run, r);
|
|
||||||
|
|
||||||
if (res == ASE_NULL)
|
n1 = ase_awk_valtonum (run, left, &l1, &r1);
|
||||||
{
|
n2 = ase_awk_valtonum (run, right, &l2, &r2);
|
||||||
run->errnum = ASE_AWK_ENOMEM;
|
|
||||||
return ASE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
if (n1 == -1 || n2 == -1) PANIC (run, ASE_AWK_EOPERAND);
|
||||||
}
|
|
||||||
|
|
||||||
run->errnum = ASE_AWK_EOPERAND;
|
n3 = n1 + (n2 << 1);
|
||||||
return ASE_NULL;
|
ASE_AWK_ASSERT (run->awk, n3 >= 0 && n3 <= 3);
|
||||||
|
res = (n3 == 0)? ase_awk_makeintval(run,(ase_long_t)l1^(ase_long_t)l2):
|
||||||
|
(n3 == 1)? ase_awk_makeintval(run,(ase_long_t)r1^(ase_long_t)l2):
|
||||||
|
(n3 == 2)? ase_awk_makeintval(run,(ase_long_t)l1^(ase_long_t)r2):
|
||||||
|
ase_awk_makeintval(run,(ase_long_t)r1^(ase_long_t)r2);
|
||||||
|
|
||||||
|
if (res == ASE_NULL) PANIC (run, ASE_AWK_ENOMEM);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ase_awk_val_t* __eval_binop_band (
|
static ase_awk_val_t* __eval_binop_band (
|
||||||
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right)
|
ase_awk_run_t* run, ase_awk_val_t* left, ase_awk_val_t* right)
|
||||||
{
|
{
|
||||||
if (left->type == ASE_AWK_VAL_INT &&
|
int n1, n2, n3;
|
||||||
right->type == ASE_AWK_VAL_INT)
|
ase_long_t l1, l2;
|
||||||
{
|
ase_real_t r1, r2;
|
||||||
ase_awk_val_t* res;
|
ase_awk_val_t* res;
|
||||||
|
|
||||||
ase_long_t r =
|
n1 = ase_awk_valtonum (run, left, &l1, &r1);
|
||||||
((ase_awk_val_int_t*)left)->val &
|
n2 = ase_awk_valtonum (run, right, &l2, &r2);
|
||||||
((ase_awk_val_int_t*)right)->val;
|
|
||||||
res = ase_awk_makeintval (run, r);
|
|
||||||
|
|
||||||
if (res == ASE_NULL)
|
if (n1 == -1 || n2 == -1) PANIC (run, ASE_AWK_EOPERAND);
|
||||||
{
|
|
||||||
run->errnum = ASE_AWK_ENOMEM;
|
|
||||||
return ASE_NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
n3 = n1 + (n2 << 1);
|
||||||
}
|
ASE_AWK_ASSERT (run->awk, n3 >= 0 && n3 <= 3);
|
||||||
|
res = (n3 == 0)? ase_awk_makeintval(run,(ase_long_t)l1&(ase_long_t)l2):
|
||||||
|
(n3 == 1)? ase_awk_makeintval(run,(ase_long_t)r1&(ase_long_t)l2):
|
||||||
|
(n3 == 2)? ase_awk_makeintval(run,(ase_long_t)l1&(ase_long_t)r2):
|
||||||
|
ase_awk_makeintval(run,(ase_long_t)r1&(ase_long_t)r2);
|
||||||
|
|
||||||
run->errnum = ASE_AWK_EOPERAND;
|
if (res == ASE_NULL) PANIC (run, ASE_AWK_ENOMEM);
|
||||||
return ASE_NULL;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __cmp_nil_nil (
|
static int __cmp_nil_nil (
|
||||||
|
100
ase/com/Awk.cpp
100
ase/com/Awk.cpp
@ -1,10 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.cpp,v 1.1 2006-12-09 11:50:07 bacon Exp $
|
* $Id: Awk.cpp,v 1.2 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "ase.h"
|
#include "ase.h"
|
||||||
#include "Awk.h"
|
#include "Awk.h"
|
||||||
|
#include "AwkExtio.h"
|
||||||
#include "Buffer.h"
|
#include "Buffer.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -28,7 +29,8 @@ STDMETHODIMP CAwk::InterfaceSupportsErrorInfo(REFIID riid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAwk::CAwk (): handle(NULL),
|
CAwk::CAwk (): handle(NULL),
|
||||||
read_source_buf(NULL), write_source_buf(NULL)
|
read_source_buf(NULL), write_source_buf(NULL),
|
||||||
|
write_extio_buf(NULL)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
TCHAR x[128];
|
TCHAR x[128];
|
||||||
@ -45,6 +47,11 @@ CAwk::~CAwk ()
|
|||||||
MessageBox (NULL, x, x, MB_OK);
|
MessageBox (NULL, x, x, MB_OK);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (write_extio_buf != NULL)
|
||||||
|
{
|
||||||
|
write_extio_buf->Release ();
|
||||||
|
}
|
||||||
|
|
||||||
if (write_source_buf != NULL)
|
if (write_source_buf != NULL)
|
||||||
{
|
{
|
||||||
write_source_buf->Release ();
|
write_source_buf->Release ();
|
||||||
@ -185,11 +192,11 @@ MessageBox (NULL, _T("COCREATEINSTANCE FAILED"), _T("FUCK"), MB_OK);
|
|||||||
|
|
||||||
if (awk->read_source_pos >= awk->read_source_len)
|
if (awk->read_source_pos >= awk->read_source_len)
|
||||||
{
|
{
|
||||||
LONG n = awk->Fire_ReadSource (awk->read_source_buf);
|
INT n = awk->Fire_ReadSource (awk->read_source_buf);
|
||||||
if (n <= 0) return (ase_ssize_t)n;
|
if (n <= 0) return (ase_ssize_t)n;
|
||||||
|
|
||||||
awk->read_source_buf->get_Value (&val);
|
awk->read_source_buf->get_Value (&val);
|
||||||
if (n > (LONG)val.Length()) return -1;
|
if (n > (INT)val.Length()) return -1;
|
||||||
|
|
||||||
awk->read_source_pos = 0;
|
awk->read_source_pos = 0;
|
||||||
awk->read_source_len = n;
|
awk->read_source_len = n;
|
||||||
@ -202,7 +209,7 @@ MessageBox (NULL, _T("COCREATEINSTANCE FAILED"), _T("FUCK"), MB_OK);
|
|||||||
ASE_AWK_ASSERT (awk->handle,
|
ASE_AWK_ASSERT (awk->handle,
|
||||||
awk->read_source_pos < awk->read_source_len);
|
awk->read_source_pos < awk->read_source_len);
|
||||||
|
|
||||||
LONG left = awk->read_source_len - awk->read_source_pos;
|
INT left = awk->read_source_len - awk->read_source_pos;
|
||||||
if (left > (ase_ssize_t)count)
|
if (left > (ase_ssize_t)count)
|
||||||
{
|
{
|
||||||
memcpy (data,
|
memcpy (data,
|
||||||
@ -256,15 +263,9 @@ MessageBox (NULL, _T("COCREATEINSTANCE FAILED"), _T("FUCK"), MB_OK);
|
|||||||
}
|
}
|
||||||
|
|
||||||
awk->write_source_buf->put_Value (CComBSTR(count,data));
|
awk->write_source_buf->put_Value (CComBSTR(count,data));
|
||||||
LONG n = awk->Fire_WriteSource (awk->write_source_buf);
|
INT n = awk->Fire_WriteSource (awk->write_source_buf);
|
||||||
|
|
||||||
/*
|
|
||||||
ASE_AWK_ASSERTX (
|
|
||||||
awk->handle, n <= (LONG)count,
|
|
||||||
"the source code output stream should not return more than requested");
|
|
||||||
*/
|
|
||||||
if (n > (LONG)count) return -1;
|
|
||||||
|
|
||||||
|
if (n > (INT)count) return -1;
|
||||||
return (ase_ssize_t)n;
|
return (ase_ssize_t)n;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +333,6 @@ HRESULT CAwk::Parse (int* ret)
|
|||||||
srcios.in = __read_source;
|
srcios.in = __read_source;
|
||||||
srcios.out = __write_source;
|
srcios.out = __write_source;
|
||||||
srcios.custom_data = this;
|
srcios.custom_data = this;
|
||||||
|
|
||||||
|
|
||||||
if (ase_awk_parse (handle, &srcios) == -1)
|
if (ase_awk_parse (handle, &srcios) == -1)
|
||||||
{
|
{
|
||||||
@ -352,19 +352,83 @@ static ase_ssize_t __process_extio (
|
|||||||
|
|
||||||
if (cmd == ASE_AWK_IO_OPEN)
|
if (cmd == ASE_AWK_IO_OPEN)
|
||||||
{
|
{
|
||||||
|
IAwkExtio* extio;
|
||||||
|
CAwkExtio* extio2;
|
||||||
|
|
||||||
|
HRESULT hr = CoCreateInstance (
|
||||||
|
CLSID_AwkExtio, NULL, CLSCTX_ALL,
|
||||||
|
IID_IAwkExtio, (void**)&extio);
|
||||||
|
if (FAILED(hr)) return -1; /* TODO: better error handling.. */
|
||||||
|
|
||||||
|
extio2 = (CAwkExtio*)extio;
|
||||||
|
extio2->name = epa->name;
|
||||||
|
extio2->type = epa->type & 0xFF;
|
||||||
|
extio2->mode = epa->mode;
|
||||||
|
VariantClear (&extio2->handle);
|
||||||
|
|
||||||
|
INT n = awk->Fire_OpenExtio (extio);
|
||||||
|
if (n >= 0)
|
||||||
|
{
|
||||||
|
extio->AddRef ();
|
||||||
|
epa->handle = extio;
|
||||||
|
}
|
||||||
|
|
||||||
|
extio->Release ();
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_CLOSE)
|
else if (cmd == ASE_AWK_IO_CLOSE)
|
||||||
{
|
{
|
||||||
|
IAwkExtio* extio = (IAwkExtio*)epa->handle;
|
||||||
|
ASE_AWK_ASSERT (ase_awk_getrunawk(epa->run), extio != NULL);
|
||||||
|
|
||||||
|
INT n = awk->Fire_CloseExtio (extio);
|
||||||
|
if (n >= 0)
|
||||||
|
{
|
||||||
|
extio->Release();
|
||||||
|
epa->handle = NULL;
|
||||||
|
}
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_READ)
|
else if (cmd == ASE_AWK_IO_READ)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
IAwkExtio* extio = (IAwkExtio*)epa->handle;
|
||||||
|
ASE_AWK_ASSERT (ase_awk_getrunawk(epa->run), extio != NULL);
|
||||||
|
|
||||||
|
if (awk->write_extio_buf == NULL)
|
||||||
|
{
|
||||||
|
HRESULT hr = CoCreateInstance (
|
||||||
|
CLSID_Buffer, NULL, CLSCTX_ALL,
|
||||||
|
IID_IBuffer, (void**)&awk->write_extio_buf);
|
||||||
|
if (FAILED(hr)) return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
INT n = awk->Fire_ReadExtio (extio, awk->write_extio_buf);
|
||||||
|
if (n > (INT)size) return -1;
|
||||||
|
return (ase_ssize_t)n;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_WRITE)
|
else if (cmd == ASE_AWK_IO_WRITE)
|
||||||
{
|
{
|
||||||
|
IAwkExtio* extio = (IAwkExtio*)epa->handle;
|
||||||
|
ASE_AWK_ASSERT (ase_awk_getrunawk(epa->run), extio != NULL);
|
||||||
|
|
||||||
|
if (awk->write_extio_buf == NULL)
|
||||||
|
{
|
||||||
|
HRESULT hr = CoCreateInstance (
|
||||||
|
CLSID_Buffer, NULL, CLSCTX_ALL,
|
||||||
|
IID_IBuffer, (void**)&awk->write_extio_buf);
|
||||||
|
if (FAILED(hr)) return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
awk->write_extio_buf->put_Value (CComBSTR(size,data));
|
||||||
|
INT n = awk->Fire_WriteExtio (extio, awk->write_extio_buf);
|
||||||
|
if (n > (INT)size) return -1;
|
||||||
|
return (ase_ssize_t)n;
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_FLUSH)
|
else if (cmd == ASE_AWK_IO_FLUSH)
|
||||||
{
|
{
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_NEXT)
|
else if (cmd == ASE_AWK_IO_NEXT)
|
||||||
{
|
{
|
||||||
@ -384,14 +448,16 @@ HRESULT CAwk::Run (int* ret)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ase_awk_runios_t runios;
|
ase_awk_runios_t runios;
|
||||||
runios.pipe = __process_extio;
|
runios.pipe = NULL;
|
||||||
runios.coproc = NULL;
|
runios.coproc = NULL;
|
||||||
runios.file = NULL;
|
runios.file = NULL;
|
||||||
runios.console = NULL;
|
runios.console = __process_extio;
|
||||||
runios.custom_data = this;
|
runios.custom_data = this;
|
||||||
|
|
||||||
if (ase_awk_run (handle, NULL, &runios, NULL, NULL, this) == -1)
|
if (ase_awk_run (handle, NULL, &runios, NULL, NULL, this) == -1)
|
||||||
{
|
{
|
||||||
|
int err = ase_awk_geterrnum (handle);
|
||||||
|
MessageBox (NULL, ase_awk_geterrstr(err), ase_awk_geterrstr(err), MB_OK);
|
||||||
*ret = -1;
|
*ret = -1;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Awk.h,v 1.1 2006-12-09 11:50:07 bacon Exp $
|
* $Id: Awk.h,v 1.2 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _ASE_COM_AWK_H_
|
#ifndef _ASE_COM_AWK_H_
|
||||||
@ -30,12 +30,13 @@ class CAwk :
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ase_awk_t* handle;
|
ase_awk_t* handle;
|
||||||
|
|
||||||
IBuffer* read_source_buf;
|
IBuffer* read_source_buf;
|
||||||
IBuffer* write_source_buf;
|
IBuffer* write_source_buf;
|
||||||
|
|
||||||
ase_size_t read_source_pos;
|
ase_size_t read_source_pos;
|
||||||
ase_size_t read_source_len;
|
ase_size_t read_source_len;
|
||||||
|
|
||||||
|
IBuffer* write_extio_buf;
|
||||||
public:
|
public:
|
||||||
CAwk();
|
CAwk();
|
||||||
~CAwk ();
|
~CAwk ();
|
||||||
|
@ -1,20 +1,31 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: AwkExtio.cpp,v 1.1 2006-12-09 11:50:08 bacon Exp $
|
* $Id: AwkExtio.cpp,v 1.2 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "ase.h"
|
#include "ase.h"
|
||||||
#include "AwkExtio.h"
|
#include "AwkExtio.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// CAwkExtio
|
// CAwkExtio
|
||||||
|
|
||||||
CAwkExtio::CAwkExtio ()
|
CAwkExtio::CAwkExtio ()
|
||||||
{
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TCHAR x[128];
|
||||||
|
_sntprintf (x, 128, _T("CAwkExtio::CAwkExtio %p"), this);
|
||||||
|
MessageBox (NULL, x, x, MB_OK);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CAwkExtio::~CAwkExtio ()
|
CAwkExtio::~CAwkExtio ()
|
||||||
{
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TCHAR x[128];
|
||||||
|
_sntprintf (x, 128, _T("CAwkExtio::~CAwkExtio %p"), this);
|
||||||
|
MessageBox (NULL, x, x, MB_OK);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP CAwkExtio::get_Name(BSTR *pVal)
|
STDMETHODIMP CAwkExtio::get_Name(BSTR *pVal)
|
||||||
@ -24,24 +35,12 @@ STDMETHODIMP CAwkExtio::get_Name(BSTR *pVal)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP CAwkExtio::put_Name(BSTR newVal)
|
|
||||||
{
|
|
||||||
name = newVal;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP CAwkExtio::get_Type(int *pVal)
|
STDMETHODIMP CAwkExtio::get_Type(int *pVal)
|
||||||
{
|
{
|
||||||
*pVal = type;
|
*pVal = type;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP CAwkExtio::put_Type(int newVal)
|
|
||||||
{
|
|
||||||
type = newVal;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
STDMETHODIMP CAwkExtio::get_Mode(int *pVal)
|
STDMETHODIMP CAwkExtio::get_Mode(int *pVal)
|
||||||
{
|
{
|
||||||
// TODO: Add your implementation code here
|
// TODO: Add your implementation code here
|
||||||
@ -49,9 +48,3 @@ STDMETHODIMP CAwkExtio::get_Mode(int *pVal)
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
STDMETHODIMP CAwkExtio::put_Mode(int newVal)
|
|
||||||
{
|
|
||||||
// TODO: Add your implementation code here
|
|
||||||
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: AwkExtio.h,v 1.2 2006-12-09 12:01:26 bacon Exp $
|
* $Id: AwkExtio.h,v 1.3 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _ASE_COM_AWKEXTIO_H_
|
#ifndef _ASE_COM_AWKEXTIO_H_
|
||||||
@ -18,6 +18,7 @@ public:
|
|||||||
CComBSTR name;
|
CComBSTR name;
|
||||||
int type;
|
int type;
|
||||||
int mode;
|
int mode;
|
||||||
|
CComVariant handle;
|
||||||
|
|
||||||
CAwkExtio ();
|
CAwkExtio ();
|
||||||
~CAwkExtio ();
|
~CAwkExtio ();
|
||||||
@ -34,11 +35,8 @@ END_COM_MAP()
|
|||||||
// IAwkExtio
|
// IAwkExtio
|
||||||
public:
|
public:
|
||||||
STDMETHOD(get_Mode)(/*[out, retval]*/ int *pVal);
|
STDMETHOD(get_Mode)(/*[out, retval]*/ int *pVal);
|
||||||
STDMETHOD(put_Mode)(/*[in]*/ int newVal);
|
|
||||||
STDMETHOD(get_Type)(/*[out, retval]*/ int *pVal);
|
STDMETHOD(get_Type)(/*[out, retval]*/ int *pVal);
|
||||||
STDMETHOD(put_Type)(/*[in]*/ int newVal);
|
|
||||||
STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pVal);
|
STDMETHOD(get_Name)(/*[out, retval]*/ BSTR *pVal);
|
||||||
STDMETHOD(put_Name)(/*[in]*/ BSTR newVal);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__AWKEXTIO_H_
|
#endif //__AWKEXTIO_H_
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: Buffer.cpp,v 1.1 2006-12-09 11:50:08 bacon Exp $
|
* $Id: Buffer.cpp,v 1.2 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
@ -9,7 +9,7 @@ CBuffer::CBuffer ()
|
|||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
TCHAR x[128];
|
TCHAR x[128];
|
||||||
_sntprintf (x, 128, _T("CBuffer::~CBuffer %p"), this);
|
_sntprintf (x, 128, _T("CBuffer::CBuffer %p"), this);
|
||||||
MessageBox (NULL, x, x, MB_OK);
|
MessageBox (NULL, x, x, MB_OK);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ BSC32=bscmake.exe
|
|||||||
# ADD BSC32 /nologo /o"debug/win32/vs60/ase.bsc"
|
# ADD BSC32 /nologo /o"debug/win32/vs60/ase.bsc"
|
||||||
LINK32=link.exe
|
LINK32=link.exe
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
|
||||||
# ADD LINK32 aseawk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"../debug/win32/vs60/ase.dll" /implib:"debug/win32/vs60/ase.lib" /pdbtype:sept /libpath:"$(OutDir)"
|
# ADD LINK32 aseawk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /implib:"debug/win32/vs60/ase.lib" /pdbtype:sept /libpath:"$(OutDir)"
|
||||||
# Begin Custom Build - Performing registration
|
# Begin Custom Build - Performing registration
|
||||||
IntDir=.\debug/win32/vs60
|
IntDir=.\debug/win32/vs60
|
||||||
OutDir=.\../debug/win32/vs60
|
OutDir=.\../debug/win32/vs60
|
||||||
@ -94,7 +94,7 @@ BSC32=bscmake.exe
|
|||||||
# ADD BSC32 /nologo /o"release/win32/vs60/awk.bsc"
|
# ADD BSC32 /nologo /o"release/win32/vs60/awk.bsc"
|
||||||
LINK32=link.exe
|
LINK32=link.exe
|
||||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
|
||||||
# ADD LINK32 aseawk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"../release/win32/vs60/ase.dll" /implib:"release/win32/vs60/ase.lib" /libpath:"$(OutDir)"
|
# ADD LINK32 aseawk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /implib:"release/win32/vs60/ase.lib" /libpath:"$(OutDir)"
|
||||||
# Begin Custom Build - Performing registration
|
# Begin Custom Build - Performing registration
|
||||||
IntDir=.\release/win32/vs60
|
IntDir=.\release/win32/vs60
|
||||||
OutDir=.\../release/win32/vs60
|
OutDir=.\../release/win32/vs60
|
||||||
@ -186,6 +186,10 @@ SOURCE=.\resource.h
|
|||||||
|
|
||||||
SOURCE=.\stdafx.h
|
SOURCE=.\stdafx.h
|
||||||
# End Source File
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\xxx.h
|
||||||
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Resource Files"
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: ase.idl,v 1.1 2006-12-09 11:50:08 bacon Exp $
|
* $Id: ase.idl,v 1.2 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import "oaidl.idl";
|
import "oaidl.idl";
|
||||||
@ -33,7 +33,6 @@ library ASELib
|
|||||||
importlib("stdole32.tlb");
|
importlib("stdole32.tlb");
|
||||||
importlib("stdole2.tlb");
|
importlib("stdole2.tlb");
|
||||||
|
|
||||||
|
|
||||||
/* IBuffer */
|
/* IBuffer */
|
||||||
[
|
[
|
||||||
object,
|
object,
|
||||||
@ -51,28 +50,6 @@ library ASELib
|
|||||||
HRESULT Value([in] BSTR newVal);
|
HRESULT Value([in] BSTR newVal);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* IAwkEvents */
|
|
||||||
[
|
|
||||||
uuid(1351DC8F-10AD-4C40-A2FA-9A2E89C27AC8),
|
|
||||||
helpstring("ASE Awk Events Interface")
|
|
||||||
]
|
|
||||||
dispinterface IAwkEvents
|
|
||||||
{
|
|
||||||
properties:
|
|
||||||
methods:
|
|
||||||
[id(1), helpstring("method OpenSource")]
|
|
||||||
int OpenSource([in] int mode);
|
|
||||||
|
|
||||||
[id(2), helpstring("method CloseSource")]
|
|
||||||
int CloseSource([in] int mode);
|
|
||||||
|
|
||||||
[id(3), helpstring("method ReadSource")]
|
|
||||||
int ReadSource([in] IBuffer* buf);
|
|
||||||
|
|
||||||
[id(4), helpstring("method WriteSource")]
|
|
||||||
int WriteSource([in] IBuffer* buf);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* IAwkExtio */
|
/* IAwkExtio */
|
||||||
[
|
[
|
||||||
object,
|
object,
|
||||||
@ -86,20 +63,45 @@ library ASELib
|
|||||||
[propget, id(1), helpstring("property Name")]
|
[propget, id(1), helpstring("property Name")]
|
||||||
HRESULT Name([out, retval] BSTR *pVal);
|
HRESULT Name([out, retval] BSTR *pVal);
|
||||||
|
|
||||||
/*[propput, id(1), helpstring("property Name")]
|
|
||||||
HRESULT Value([in] BSTR newVal); */
|
|
||||||
|
|
||||||
[propget, id(2), helpstring("property Type")]
|
[propget, id(2), helpstring("property Type")]
|
||||||
HRESULT Type([out, retval] int *pVal);
|
HRESULT Type([out, retval] int *pVal);
|
||||||
|
|
||||||
/*[propput, id(2), helpstring("property Type")]
|
|
||||||
HRESULT Type([in] int newVal);*/
|
|
||||||
|
|
||||||
[propget, id(3), helpstring("property Mode")]
|
[propget, id(3), helpstring("property Mode")]
|
||||||
HRESULT Mode([out, retval] int *pVal);
|
HRESULT Mode([out, retval] int *pVal);
|
||||||
|
};
|
||||||
|
|
||||||
/*[propput, id(3), helpstring("property Mode")]
|
/* IAwkEvents */
|
||||||
HRESULT Mode([in] int newVal);*/
|
[
|
||||||
|
uuid(1351DC8F-10AD-4C40-A2FA-9A2E89C27AC8),
|
||||||
|
helpstring("ASE Awk Events Interface")
|
||||||
|
]
|
||||||
|
dispinterface IAwkEvents
|
||||||
|
{
|
||||||
|
properties:
|
||||||
|
methods:
|
||||||
|
[id(1), helpstring("open the source code")]
|
||||||
|
int OpenSource([in] int mode);
|
||||||
|
|
||||||
|
[id(2), helpstring("close the source code")]
|
||||||
|
int CloseSource([in] int mode);
|
||||||
|
|
||||||
|
[id(3), helpstring("read the source code")]
|
||||||
|
int ReadSource([in] IBuffer* buf);
|
||||||
|
|
||||||
|
[id(4), helpstring("write the source code")]
|
||||||
|
int WriteSource([in] IBuffer* buf);
|
||||||
|
|
||||||
|
[id(5), helpstring("method OpenExtio")]
|
||||||
|
int OpenExtio([in] IAwkExtio* extio);
|
||||||
|
|
||||||
|
[id(6), helpstring("method CloseExtio")]
|
||||||
|
int CloseExtio([in] IAwkExtio* extio);
|
||||||
|
|
||||||
|
[id(7), helpstring("method ReadExtio")]
|
||||||
|
int ReadExtio([in] IAwkExtio* extio, [in] IBuffer* buf);
|
||||||
|
|
||||||
|
[id(8), helpstring("method WriteExtio")]
|
||||||
|
int WriteExtio([in] IAwkExtio* extio, [in] IBuffer* buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Awk */
|
/* Awk */
|
||||||
|
157
ase/com/awk_cp.h
157
ase/com/awk_cp.h
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk_cp.h,v 1.2 2006-12-09 12:09:42 bacon Exp $
|
* $Id: awk_cp.h,v 1.3 2006-12-09 17:36:27 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _AWK_CP_H_
|
#ifndef _AWK_CP_H_
|
||||||
@ -11,7 +11,7 @@ template <class T>
|
|||||||
class CProxyIAwkEvents : public IConnectionPointImpl<T, &DIID_IAwkEvents, CComDynamicUnkArray>
|
class CProxyIAwkEvents : public IConnectionPointImpl<T, &DIID_IAwkEvents, CComDynamicUnkArray>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LONG Fire_OpenSource(LONG mode)
|
INT Fire_OpenSource(INT mode)
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
int i, nconns = m_vec.GetSize();
|
int i, nconns = m_vec.GetSize();
|
||||||
@ -58,7 +58,7 @@ public:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG Fire_CloseSource(LONG mode)
|
INT Fire_CloseSource(INT mode)
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
int i, nconns = m_vec.GetSize();
|
int i, nconns = m_vec.GetSize();
|
||||||
@ -74,7 +74,6 @@ public:
|
|||||||
reinterpret_cast<IDispatch*>(sp.p);
|
reinterpret_cast<IDispatch*>(sp.p);
|
||||||
if (pDispatch == NULL) continue;
|
if (pDispatch == NULL) continue;
|
||||||
|
|
||||||
|
|
||||||
VariantClear (&ret);
|
VariantClear (&ret);
|
||||||
VariantClear (&args[0]);
|
VariantClear (&args[0]);
|
||||||
|
|
||||||
@ -106,7 +105,7 @@ public:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG Fire_ReadSource (IBuffer* buf)
|
INT Fire_ReadSource (IBuffer* buf)
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
int i, nconns = m_vec.GetSize();
|
int i, nconns = m_vec.GetSize();
|
||||||
@ -158,7 +157,7 @@ public:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LONG Fire_WriteSource (IBuffer* buf)
|
INT Fire_WriteSource (IBuffer* buf)
|
||||||
{
|
{
|
||||||
T* pT = static_cast<T*>(this);
|
T* pT = static_cast<T*>(this);
|
||||||
int i, nconns = m_vec.GetSize();
|
int i, nconns = m_vec.GetSize();
|
||||||
@ -212,6 +211,152 @@ public:
|
|||||||
buf->get_Value (&bstr);
|
buf->get_Value (&bstr);
|
||||||
return bstr.Length();
|
return bstr.Length();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT Fire_OpenExtio (IAwkExtio* extio)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
int i, nconns = m_vec.GetSize();
|
||||||
|
CComVariant args[1], ret;
|
||||||
|
|
||||||
|
for (i = 0; i < nconns; i++)
|
||||||
|
{
|
||||||
|
pT->Lock();
|
||||||
|
CComPtr<IUnknown> sp = m_vec.GetAt(i);
|
||||||
|
pT->Unlock();
|
||||||
|
|
||||||
|
IDispatch* pDispatch =
|
||||||
|
reinterpret_cast<IDispatch*>(sp.p);
|
||||||
|
if (pDispatch == NULL) continue;
|
||||||
|
|
||||||
|
VariantClear (&ret);
|
||||||
|
VariantClear (&args[0]);
|
||||||
|
|
||||||
|
args[0] = (IUnknown*)extio;
|
||||||
|
|
||||||
|
DISPPARAMS disp = { args, NULL, 1, 0 };
|
||||||
|
HRESULT hr = pDispatch->Invoke (
|
||||||
|
0x5, IID_NULL, LOCALE_USER_DEFAULT,
|
||||||
|
DISPATCH_METHOD, &disp, &ret, NULL, NULL);
|
||||||
|
if (FAILED(hr)) continue;
|
||||||
|
|
||||||
|
if (ret.vt == VT_EMPTY)
|
||||||
|
{
|
||||||
|
/* probably, the handler has not been implemeted*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = ret.ChangeType (VT_I4);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
/* TODO: set the error code properly... */
|
||||||
|
/* invalid value returned... */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret.lVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
INT Fire_CloseExtio (IAwkExtio* extio)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
int i, nconns = m_vec.GetSize();
|
||||||
|
CComVariant args[1], ret;
|
||||||
|
|
||||||
|
for (i = 0; i < nconns; i++)
|
||||||
|
{
|
||||||
|
pT->Lock();
|
||||||
|
CComPtr<IUnknown> sp = m_vec.GetAt(i);
|
||||||
|
pT->Unlock();
|
||||||
|
|
||||||
|
IDispatch* pDispatch =
|
||||||
|
reinterpret_cast<IDispatch*>(sp.p);
|
||||||
|
if (pDispatch == NULL) continue;
|
||||||
|
|
||||||
|
VariantClear (&ret);
|
||||||
|
VariantClear (&args[0]);
|
||||||
|
|
||||||
|
args[0] = (IUnknown*)extio;
|
||||||
|
|
||||||
|
DISPPARAMS disp = { args, NULL, 1, 0 };
|
||||||
|
HRESULT hr = pDispatch->Invoke (
|
||||||
|
0x6, IID_NULL, LOCALE_USER_DEFAULT,
|
||||||
|
DISPATCH_METHOD, &disp, &ret, NULL, NULL);
|
||||||
|
if (FAILED(hr)) continue;
|
||||||
|
|
||||||
|
if (ret.vt == VT_EMPTY)
|
||||||
|
{
|
||||||
|
/* probably, the handler has not been implemeted*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = ret.ChangeType (VT_I4);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
/* TODO: set the error code properly... */
|
||||||
|
/* invalid value returned... */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret.lVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
INT Fire_WriteExtio (IAwkExtio* extio, IBuffer* buf)
|
||||||
|
{
|
||||||
|
T* pT = static_cast<T*>(this);
|
||||||
|
int i, nconns = m_vec.GetSize();
|
||||||
|
CComVariant args[2], ret;
|
||||||
|
|
||||||
|
for (i = 0; i < nconns; i++)
|
||||||
|
{
|
||||||
|
pT->Lock();
|
||||||
|
CComPtr<IUnknown> sp = m_vec.GetAt(i);
|
||||||
|
pT->Unlock();
|
||||||
|
|
||||||
|
IDispatch* pDispatch =
|
||||||
|
reinterpret_cast<IDispatch*>(sp.p);
|
||||||
|
if (pDispatch == NULL) continue;
|
||||||
|
|
||||||
|
VariantClear (&ret);
|
||||||
|
VariantClear (&args[0]);
|
||||||
|
VariantClear (&args[1]);
|
||||||
|
|
||||||
|
args[1] = (IUnknown*)extio;
|
||||||
|
args[0] = (IUnknown*)buf;
|
||||||
|
|
||||||
|
DISPPARAMS disp = { args, NULL, 2, 0 };
|
||||||
|
HRESULT hr = pDispatch->Invoke (
|
||||||
|
0x8, IID_NULL, LOCALE_USER_DEFAULT,
|
||||||
|
DISPATCH_METHOD, &disp, &ret, NULL, NULL);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret.vt == VT_EMPTY)
|
||||||
|
{
|
||||||
|
/* probably, the handler has not been implemeted*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = ret.ChangeType (VT_I4);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
/* TODO: set the error code properly... */
|
||||||
|
/* invalid value returned... */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret.lVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,7 +19,7 @@ function awk_ReadSource (buf)
|
|||||||
WScript.echo ("ReadSource - buf: [" + buf.Value + "]");
|
WScript.echo ("ReadSource - buf: [" + buf.Value + "]");
|
||||||
if (first)
|
if (first)
|
||||||
{
|
{
|
||||||
buf.Value = "BEGIN {print 1; print 2; print 3 > \"x\";}"
|
buf.Value = "BEGIN {print 1; print 2;}"
|
||||||
first = false
|
first = false
|
||||||
return buf.Value.length;
|
return buf.Value.length;
|
||||||
}
|
}
|
||||||
@ -33,6 +33,24 @@ function awk_WriteSource (buf)
|
|||||||
return buf.Value.length;
|
return buf.Value.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function awk_OpenExtio (extio)
|
||||||
|
{
|
||||||
|
WScript.echo ("OpenExtio - type: " + extio.Type + " mode: " + extio.Mode + " name: [" + extio.Name + "]");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function awk_CloseExtio (extio)
|
||||||
|
{
|
||||||
|
WScript.echo ("CloseExtio");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function awk_WriteExtio (extio, buf)
|
||||||
|
{
|
||||||
|
WScript.echo (buf.Value);
|
||||||
|
return buf.Value.length;
|
||||||
|
}
|
||||||
|
|
||||||
awk = WScript.CreateObject("ASE.Awk");
|
awk = WScript.CreateObject("ASE.Awk");
|
||||||
WScript.ConnectObject (awk, "awk_");
|
WScript.ConnectObject (awk, "awk_");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user