added sed::str_to_str to the sed module for awk
fixed some build issues on legacy systems
This commit is contained in:
@ -48,7 +48,9 @@
|
||||
# define INCL_DOSERRORS
|
||||
# include <os2.h>
|
||||
#elif defined(__DOS__)
|
||||
# include <cwdllfnc.h>
|
||||
# if !defined(QSE_ENABLE_STATIC_MODULE)
|
||||
# include <cwdllfnc.h>
|
||||
# endif
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <ltdl.h>
|
||||
@ -1340,7 +1342,13 @@ StdAwk::flt_t StdAwk::sqrt (flt_t x)
|
||||
|
||||
void* StdAwk::modopen (const mod_spec_t* spec)
|
||||
{
|
||||
#if defined(USE_LTDL)
|
||||
#if defined(QSE_ENABLE_STATIC_MODULE)
|
||||
/* this won't be called at all when modules are linked into
|
||||
* the main library. */
|
||||
this->setError (QSE_AWK_ENOIMPL);
|
||||
return QSE_NULL;
|
||||
|
||||
#elif defined(USE_LTDL)
|
||||
|
||||
void* h;
|
||||
qse_mchar_t* modpath;
|
||||
@ -1470,7 +1478,10 @@ void* StdAwk::modopen (const mod_spec_t* spec)
|
||||
|
||||
void StdAwk::modclose (void* handle)
|
||||
{
|
||||
#if defined(USE_LTDL)
|
||||
#if defined(QSE_ENABLE_STATIC_MODULE)
|
||||
/* this won't be called at all when modules are linked into
|
||||
* the main library. */
|
||||
#elif defined(USE_LTDL)
|
||||
lt_dlclose ((lt_dlhandle)handle);
|
||||
#elif defined(_WIN32)
|
||||
FreeLibrary ((HMODULE)handle);
|
||||
@ -1499,7 +1510,11 @@ void* StdAwk::modsym (void* handle, const qse_char_t* name)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USE_LTDL)
|
||||
#if defined(QSE_ENABLE_STATIC_MODULE)
|
||||
/* this won't be called at all when modules are linked into
|
||||
* the main library. */
|
||||
s = QSE_NULL;
|
||||
#elif defined(USE_LTDL)
|
||||
s = lt_dlsym ((lt_dlhandle)handle, mname);
|
||||
#elif defined(_WIN32)
|
||||
s = (void*)GetProcAddress ((HMODULE)handle, mname);
|
||||
|
@ -18,7 +18,7 @@
|
||||
License along with QSE. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mod-str.h"
|
||||
#include "mod-sed.h"
|
||||
#include <qse/sed/stdsed.h>
|
||||
#include "../cmn/mem.h"
|
||||
|
||||
@ -51,10 +51,10 @@ static qse_char_t* errmsg[] =
|
||||
|
||||
static int fnc_errstr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
uctx_list_t* list;
|
||||
qse_awk_val_t* retv;
|
||||
qse_awk_int_t errnum;
|
||||
|
||||
/*
|
||||
list = rtx_to_list (rtx, fi);
|
||||
|
||||
if (qse_awk_rtx_getnargs (rtx) <= 0 ||
|
||||
@ -62,6 +62,11 @@ static int fnc_errstr (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
errnum = list->errnum;
|
||||
}
|
||||
*/
|
||||
|
||||
ret = qse_awk_rtx_valtoint (rtx, qse_awk_rtx_getarg (rtx, 0), &id);
|
||||
if (ret <= -1) errnum = -1;
|
||||
|
||||
|
||||
if (errnum < 0 || errnum >= QSE_COUNTOF(errmsg)) errnum = QSE_COUNTOF(errmsg) - 1;
|
||||
|
||||
@ -78,8 +83,7 @@ static int fnc_file_to_file (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
qse_sed_t* sed = QSE_NULL;
|
||||
qse_awk_val_t* retv;
|
||||
qse_awk_val_t* a[3];
|
||||
qse_char_t* str[3];
|
||||
qse_size_t len[3];
|
||||
qse_xstr_t xstr[3];
|
||||
int i = 0, ret = 0;
|
||||
|
||||
/* result = sed::file_to_file ("s/ABC/123/g", input_file, output_file [, option_string]) */
|
||||
@ -96,21 +100,21 @@ static int fnc_file_to_file (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
a[i] = qse_awk_rtx_getarg (rtx, i);
|
||||
str[i] = qse_awk_rtx_getvalstr (rtx, a[i], &len[i]);
|
||||
if (str[i] == QSE_NULL)
|
||||
xstr[i].ptr = qse_awk_rtx_getvalstr (rtx, a[i], &xstr[i].len);
|
||||
if (xstr[i].ptr == QSE_NULL)
|
||||
{
|
||||
ret = -2;
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
|
||||
if (qse_sed_compstdstrx (sed, str[0], len[0]) <= -1)
|
||||
if (qse_sed_compstdxstr (sed, &xstr[0]) <= -1)
|
||||
{
|
||||
ret = -3; /* compile error */
|
||||
goto oops;
|
||||
}
|
||||
|
||||
if (qse_sed_execstdfile (sed, str[1], str[2], QSE_NULL) <= -1)
|
||||
if (qse_sed_execstdfile (sed, xstr[1].ptr, xstr[2].ptr, QSE_NULL) <= -1)
|
||||
{
|
||||
ret = -4;
|
||||
goto oops;
|
||||
@ -123,7 +127,7 @@ oops:
|
||||
while (i > 0)
|
||||
{
|
||||
--i;
|
||||
qse_awk_rtx_freevalstr (rtx, a[i], str[i]);
|
||||
qse_awk_rtx_freevalstr (rtx, a[i], xstr[i].ptr);
|
||||
}
|
||||
|
||||
if (sed) qse_sed_close (sed);
|
||||
@ -133,7 +137,76 @@ oops:
|
||||
|
||||
static int fnc_str_to_str (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
{
|
||||
return -1;
|
||||
qse_sed_t* sed = QSE_NULL;
|
||||
qse_awk_val_t* retv;
|
||||
qse_awk_val_t* a[2], * tmp;
|
||||
qse_xstr_t xstr[2];
|
||||
qse_xstr_t outstr;
|
||||
int i = 0, ret = 0, n;
|
||||
|
||||
sed = qse_sed_openstdwithmmgr (qse_awk_rtx_getmmgr(rtx), 0);
|
||||
if (sed == QSE_NULL)
|
||||
{
|
||||
ret = -2;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
/* TODO qse_set_opt (TRAIT) using the optional parameter */
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
a[i] = qse_awk_rtx_getarg (rtx, i);
|
||||
xstr[i].ptr = qse_awk_rtx_getvalstr (rtx, a[i], &xstr[i].len);
|
||||
if (xstr[i].ptr == QSE_NULL)
|
||||
{
|
||||
ret = -2;
|
||||
goto oops;
|
||||
}
|
||||
}
|
||||
|
||||
if (qse_sed_compstdxstr (sed, &xstr[0]) <= -1)
|
||||
{
|
||||
ret = -3; /* compile error */
|
||||
goto oops;
|
||||
}
|
||||
|
||||
if (qse_sed_execstdxstr (sed, &xstr[1], &outstr, QSE_NULL) <= -1)
|
||||
{
|
||||
ret = -4;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
tmp = qse_awk_rtx_makestrvalwithxstr (rtx, &outstr);
|
||||
qse_sed_freemem (sed, outstr.ptr);
|
||||
|
||||
if (!tmp)
|
||||
{
|
||||
ret = -1;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
qse_awk_rtx_refupval (rtx, tmp);
|
||||
n = qse_awk_rtx_setrefval (rtx, qse_awk_rtx_getarg (rtx, 2), tmp);
|
||||
qse_awk_rtx_refdownval (rtx, tmp);
|
||||
if (n <= -1)
|
||||
{
|
||||
ret = -5;
|
||||
goto oops;
|
||||
}
|
||||
|
||||
oops:
|
||||
retv = qse_awk_rtx_makeintval (rtx, ret);
|
||||
if (retv == QSE_NULL) retv = qse_awk_rtx_makeintval (rtx, -1);
|
||||
|
||||
while (i > 0)
|
||||
{
|
||||
--i;
|
||||
qse_awk_rtx_freevalstr (rtx, a[i], xstr[i].ptr);
|
||||
}
|
||||
|
||||
if (sed) qse_sed_close (sed);
|
||||
qse_awk_rtx_setretval (rtx, retv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef struct fnctab_t fnctab_t;
|
||||
@ -172,7 +245,6 @@ static int query (qse_awk_mod_t* mod, qse_awk_t* awk, const qse_char_t* name, qs
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ea.ptr = name;
|
||||
ea.len = qse_strlen(name);
|
||||
qse_awk_seterror (awk, QSE_AWK_ENOENT, &ea, QSE_NULL);
|
||||
|
@ -389,7 +389,12 @@ static int fnc_sleep (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
DosSleep ((ULONG)QSE_SEC_TO_MSEC(lv));
|
||||
rx = 0;
|
||||
#elif defined(__DOS__)
|
||||
rx = sleep (lv);
|
||||
#if (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
|
||||
sleep (lv);
|
||||
rx = 0;
|
||||
#else
|
||||
rx = sleep (lv);
|
||||
#endif
|
||||
#elif defined(HAVE_NANOSLEEP)
|
||||
struct timespec req;
|
||||
req.tv_sec = lv;
|
||||
@ -409,7 +414,12 @@ static int fnc_sleep (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi)
|
||||
rx = 0;
|
||||
#elif defined(__DOS__)
|
||||
/* no high-resolution sleep() is available */
|
||||
rx = sleep ((qse_awk_int_t)fv);
|
||||
#if (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
|
||||
sleep ((qse_awk_int_t)fv);
|
||||
rx = 0;
|
||||
#else
|
||||
rx = sleep ((qse_awk_int_t)fv);
|
||||
#endif;
|
||||
#elif defined(HAVE_NANOSLEEP)
|
||||
struct timespec req;
|
||||
req.tv_sec = (qse_awk_int_t)fv;
|
||||
|
@ -52,7 +52,9 @@
|
||||
# define INCL_DOSERRORS
|
||||
# include <os2.h>
|
||||
#elif defined(__DOS__)
|
||||
# include <cwdllfnc.h>
|
||||
# if !defined(QSE_ENABLE_STATIC_MODULE)
|
||||
# include <cwdllfnc.h>
|
||||
# endif
|
||||
#else
|
||||
# include <unistd.h>
|
||||
# include <ltdl.h>
|
||||
|
@ -201,106 +201,8 @@ qse_awk_val_t* qse_awk_rtx_makefltval (qse_awk_rtx_t* rtx, qse_awk_flt_t v)
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithmbs (
|
||||
qse_awk_rtx_t* rtx, const qse_mchar_t* mbs)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
return qse_awk_rtx_makestrval (rtx, mbs, qse_mbslen(mbs));
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wxstr_t tmp;
|
||||
|
||||
tmp.ptr = qse_mbstowcsdup (mbs, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, (qse_cstr_t*)&tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithwcs (
|
||||
qse_awk_rtx_t* rtx, const qse_wchar_t* wcs)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mxstr_t tmp;
|
||||
|
||||
tmp.ptr = qse_wcstombsdup (wcs, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#else
|
||||
return qse_awk_rtx_makestrval (rtx, wcs, qse_wcslen(wcs));
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithstr (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str)
|
||||
{
|
||||
return qse_awk_rtx_makestrval (rtx, str, qse_strlen(str));
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithmcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_mcstr_t* mcstr)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, mcstr);
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wxstr_t tmp;
|
||||
qse_size_t mbslen;
|
||||
|
||||
mbslen = mcstr->len;
|
||||
tmp.ptr = qse_mbsntowcsdup (mcstr->ptr, &mbslen, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, (qse_cstr_t*)&tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithwcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_wcstr_t* wcstr)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mxstr_t tmp;
|
||||
qse_size_t wcslen;
|
||||
|
||||
wcslen = wcstr->len;
|
||||
tmp.ptr = qse_wcsntombsdup (wcstr->ptr, &wcslen, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithcstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#else
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, wcstr);
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_cstr_t* str)
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithxstr (
|
||||
qse_awk_rtx_t* rtx, const qse_xstr_t* str)
|
||||
{
|
||||
qse_awk_val_str_t* val = QSE_NULL;
|
||||
qse_size_t rlen = str->len;
|
||||
@ -347,6 +249,110 @@ init:
|
||||
return (qse_awk_val_t*)val;
|
||||
}
|
||||
|
||||
QSE_INLINE qse_awk_val_t* qse_awk_rtx_makestrvalwithcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_cstr_t* str)
|
||||
{
|
||||
return qse_awk_rtx_makestrvalwithxstr (rtx, (const qse_xstr_t*)str);
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithmbs (
|
||||
qse_awk_rtx_t* rtx, const qse_mchar_t* mbs)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
return qse_awk_rtx_makestrval (rtx, mbs, qse_mbslen(mbs));
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wxstr_t tmp;
|
||||
|
||||
tmp.ptr = qse_mbstowcsdup (mbs, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithxstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithwcs (
|
||||
qse_awk_rtx_t* rtx, const qse_wchar_t* wcs)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mxstr_t tmp;
|
||||
|
||||
tmp.ptr = qse_wcstombsdup (wcs, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithxstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#else
|
||||
return qse_awk_rtx_makestrval (rtx, wcs, qse_wcslen(wcs));
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithstr (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str)
|
||||
{
|
||||
return qse_awk_rtx_makestrval (rtx, str, qse_strlen(str));
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithmcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_mcstr_t* mcstr)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, mcstr);
|
||||
#else
|
||||
qse_awk_val_t* v;
|
||||
qse_wxstr_t tmp;
|
||||
qse_size_t mbslen;
|
||||
|
||||
mbslen = mcstr->len;
|
||||
tmp.ptr = qse_mbsntowcsdup (mcstr->ptr, &mbslen, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithxstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrvalwithwcstr (
|
||||
qse_awk_rtx_t* rtx, const qse_wcstr_t* wcstr)
|
||||
{
|
||||
#if defined(QSE_CHAR_IS_MCHAR)
|
||||
qse_awk_val_t* v;
|
||||
qse_mxstr_t tmp;
|
||||
qse_size_t wcslen;
|
||||
|
||||
wcslen = wcstr->len;
|
||||
tmp.ptr = qse_wcsntombsdup (wcstr->ptr, &wcslen, &tmp.len, rtx->awk->mmgr);
|
||||
if (tmp.ptr == QSE_NULL)
|
||||
{
|
||||
qse_awk_rtx_seterrnum (rtx, QSE_AWK_ENOMEM, QSE_NULL);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
v = qse_awk_rtx_makestrvalwithxstr (rtx, &tmp);
|
||||
QSE_AWK_FREE (rtx->awk, tmp.ptr);
|
||||
return v;
|
||||
#else
|
||||
return qse_awk_rtx_makestrvalwithcstr (rtx, wcstr);
|
||||
#endif
|
||||
}
|
||||
|
||||
qse_awk_val_t* qse_awk_rtx_makestrval (
|
||||
qse_awk_rtx_t* rtx, const qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
|
Reference in New Issue
Block a user