added sed::str_to_str to the sed module for awk

fixed some build issues on legacy systems
This commit is contained in:
2014-02-20 05:29:32 +00:00
parent a29a11e9fc
commit d49fd50ecc
26 changed files with 518 additions and 331 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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>

View File

@ -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)
{

View File

@ -73,7 +73,7 @@ typedef DWORD WINAPI (*getmappedfilename_t) (
#elif defined(__OS2__)
#if defined(__WATCOMC__) && (__WATCOMC__ <= 1100) && !defined(LONGLONG_INCLUDED)
#if defined(__WATCOMC__) && (__WATCOMC__ < 1200) && !defined(LONGLONG_INCLUDED)
typedef struct _LONGLONG {
ULONG ulLo;
LONG ulHi;

View File

@ -25,6 +25,15 @@
# include <winsock2.h>
# include <ws2tcpip.h> /* sockaddr_in6 */
# include <windows.h>
# if (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
/* the header files shipped with watcom 11 doesn't contain
* proper inet6 support. note using the compiler version
* in the contidional isn't that good idea since you
* can use newer header files with this old compiler.
* never mind it for the time being.
*/
# undef AF_INET6
# endif
#elif defined(__OS2__)
# include <types.h>
# include <sys/socket.h>

View File

@ -26,7 +26,7 @@
#if defined(_WIN32)
# include <winsock2.h>
# include <ws2tcpip.h>
# include <iphlpapi.h>
/*# include <iphlpapi.h> */
#elif defined(__OS2__)
# if defined(TCPV40HDRS)
# define BSD_SELECT

View File

@ -22,6 +22,18 @@
#include <qse/cmn/mbwc.h>
#include "mem.h"
#if !defined(QSE_HAVE_CONFIG_H)
# if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
# if (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
# undef HAVE_VA_COPY
# undef HAVE___VA_COPY
# else
# define HAVE_VA_COPY
# define HAVE___VA_COPY
# endif
# endif
#endif
#if !defined(HAVE_VA_COPY)
# if defined(HAVE___VA_COPY)
# define va_copy(dst,src) __va_copy((dst),(src))

View File

@ -25,6 +25,9 @@
#include "../cmn/mem.h"
#include <stdio.h> /* for snprintf. TODO: remove this. */
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
# define snprintf _snprintf
#endif
int qse_comparehttpversions (
const qse_http_version_t* v1,
@ -377,10 +380,6 @@ qse_mchar_t* qse_fmthttptime (
/* TODO: avoid using snprintf () */
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
# define snprintf _snprintf
#endif
snprintf (
buf, bufsz,
QSE_MT("%s, %d %s %d %02d:%02d:%02d GMT"),

View File

@ -26,6 +26,9 @@
#include <qse/cmn/path.h>
#include <stdio.h> /* TODO: remove this */
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
# define snprintf _snprintf
#endif
typedef struct task_cgi_arg_t task_cgi_arg_t;
struct task_cgi_arg_t

View File

@ -24,6 +24,9 @@
#include <qse/cmn/fmt.h>
#include <stdio.h> /* TODO: remove this */
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
# define snprintf _snprintf
#endif
typedef struct task_dir_t task_dir_t;
struct task_dir_t

View File

@ -92,6 +92,10 @@
#endif
#include <stdio.h> /* TODO: remove this */
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
# define snprintf _snprintf
#endif
#define DEFAULT_PORT 80
#define DEFAULT_SECURE_PORT 443

View File

@ -849,13 +849,12 @@ int qse_sed_compstdstr (qse_sed_t* sed, const qse_char_t* script)
return qse_sed_compstd (sed, in, QSE_NULL);
}
int qse_sed_compstdstrx (qse_sed_t* sed, const qse_char_t* script, qse_size_t script_len)
int qse_sed_compstdxstr (qse_sed_t* sed, const qse_xstr_t* script)
{
qse_sed_iostd_t in[2];
in[0].type = QSE_SED_IOSTD_STR;
in[0].u.str.ptr = (qse_char_t*)script;
in[0].u.str.len = script_len;
in[0].u.str = *script;
in[1].type = QSE_SED_IOSTD_NULL;
return qse_sed_compstd (sed, in, QSE_NULL);
@ -888,3 +887,24 @@ int qse_sed_execstdfile (
return qse_sed_execstd (sed, pin, pout);
}
int qse_sed_execstdxstr (
qse_sed_t* sed, const qse_xstr_t* instr,
qse_xstr_t* outstr, qse_cmgr_t* cmgr)
{
qse_sed_iostd_t in[2];
qse_sed_iostd_t out;
int n;
in[0].type = QSE_SED_IOSTD_STR;
in[0].u.str = *instr;
in[1].type = QSE_SED_IOSTD_NULL;
out.type = QSE_SED_IOSTD_STR;
n = qse_sed_execstd (sed, in, &out);
if (n >= 0) *outstr = out.u.str;
return n;
}