This commit is contained in:
parent
0c923ff71c
commit
cbb37554c1
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.c 312 2008-08-02 13:40:04Z baconevi $
|
* $Id: awk.c 313 2008-08-03 14:06:43Z baconevi $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk.h>
|
#include <ase/awk/awk.h>
|
||||||
@ -32,10 +32,23 @@
|
|||||||
#include <crtdbg.h>
|
#include <crtdbg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct awk_src_io
|
struct srcio_t
|
||||||
{
|
{
|
||||||
const ase_char_t* input_file;
|
int type; /* file or string */
|
||||||
FILE* input_handle;
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ase_char_t* ptr;
|
||||||
|
ase_char_t* cur;
|
||||||
|
} str;
|
||||||
|
struct {
|
||||||
|
int count;
|
||||||
|
const ase_char_t* name[128];
|
||||||
|
FILE* handle;
|
||||||
|
} file;
|
||||||
|
} data;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
@ -61,7 +74,6 @@ static void custom_awk_dprintf (void* custom, const ase_char_t* fmt, ...)
|
|||||||
va_end (ap);
|
va_end (ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* custom memory management function */
|
/* custom memory management function */
|
||||||
static void* custom_awk_malloc (void* custom, ase_size_t n)
|
static void* custom_awk_malloc (void* custom, ase_size_t n)
|
||||||
{
|
{
|
||||||
@ -118,26 +130,28 @@ static int custom_awk_sprintf (
|
|||||||
static ase_ssize_t awk_srcio_in (
|
static ase_ssize_t awk_srcio_in (
|
||||||
int cmd, void* arg, ase_char_t* data, ase_size_t size)
|
int cmd, void* arg, ase_char_t* data, ase_size_t size)
|
||||||
{
|
{
|
||||||
struct awk_src_io* src_io = (struct awk_src_io*)arg;
|
struct srcio_t* srcio = (struct srcio_t*)arg;
|
||||||
ase_cint_t c;
|
ase_cint_t c;
|
||||||
|
|
||||||
if (cmd == ASE_AWK_IO_OPEN)
|
if (cmd == ASE_AWK_IO_OPEN)
|
||||||
{
|
{
|
||||||
if (src_io->input_file == ASE_NULL) return 0;
|
if (srcio->input_file == ASE_NULL) return 0;
|
||||||
src_io->input_handle = ase_fopen (src_io->input_file, ASE_T("r"));
|
srcio->input_handle = ase_fopen (srcio->input_file, ASE_T("r"));
|
||||||
if (src_io->input_handle == NULL) return -1;
|
if (srcio->input_handle == NULL) return -1;
|
||||||
|
|
||||||
|
ase_awk_setsinname ();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_CLOSE)
|
else if (cmd == ASE_AWK_IO_CLOSE)
|
||||||
{
|
{
|
||||||
if (src_io->input_file == ASE_NULL) return 0;
|
if (srcio->input_file == ASE_NULL) return 0;
|
||||||
fclose ((FILE*)src_io->input_handle);
|
fclose ((FILE*)srcio->input_handle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (cmd == ASE_AWK_IO_READ)
|
else if (cmd == ASE_AWK_IO_READ)
|
||||||
{
|
{
|
||||||
ase_ssize_t n = 0;
|
ase_ssize_t n = 0;
|
||||||
FILE* fp = (FILE*)src_io->input_handle;
|
FILE* fp = (FILE*)srcio->input_handle;
|
||||||
while (!ase_feof(fp) && n < size)
|
while (!ase_feof(fp) && n < size)
|
||||||
{
|
{
|
||||||
ase_cint_t c = ase_fgetc (fp);
|
ase_cint_t c = ase_fgetc (fp);
|
||||||
@ -150,6 +164,11 @@ static ase_ssize_t awk_srcio_in (
|
|||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
else if (cmd == ASE_AWK_IO_NEXT)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -157,7 +176,7 @@ static ase_ssize_t awk_srcio_in (
|
|||||||
static ase_ssize_t awk_srcio_out (
|
static ase_ssize_t awk_srcio_out (
|
||||||
int cmd, void* arg, ase_char_t* data, ase_size_t size)
|
int cmd, void* arg, ase_char_t* data, ase_size_t size)
|
||||||
{
|
{
|
||||||
/*struct awk_src_io* src_io = (struct awk_src_io*)arg;*/
|
/*struct srcio_t* srcio = (struct srcio_t*)arg;*/
|
||||||
|
|
||||||
if (cmd == ASE_AWK_IO_OPEN) return 1;
|
if (cmd == ASE_AWK_IO_OPEN) return 1;
|
||||||
else if (cmd == ASE_AWK_IO_CLOSE)
|
else if (cmd == ASE_AWK_IO_CLOSE)
|
||||||
@ -344,7 +363,6 @@ static ase_ssize_t awk_extio_file (
|
|||||||
errarg.ptr = epa->name;
|
errarg.ptr = epa->name;
|
||||||
errarg.len = ase_strlen(epa->name);
|
errarg.len = ase_strlen(epa->name);
|
||||||
|
|
||||||
|
|
||||||
ase_awk_setrunerror (epa->run, ASE_AWK_EOPEN, 0, &errarg, 1);
|
ase_awk_setrunerror (epa->run, ASE_AWK_EOPEN, 0, &errarg, 1);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -997,13 +1015,13 @@ static void handle_args (argc, argv)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src_io.input_file != NULL)
|
if (srcio.input_file != NULL)
|
||||||
{
|
{
|
||||||
print_usage (argv[0]);
|
print_usage (argv[0]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
src_io.input_file = argv[i];
|
srcio.input_file = argv[i];
|
||||||
mode = 0;
|
mode = 0;
|
||||||
}
|
}
|
||||||
else if (mode == 2) /* argument mode */
|
else if (mode == 2) /* argument mode */
|
||||||
@ -1030,7 +1048,7 @@ static void handle_args (argc, argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int handle_args (int argc, ase_char_t* argv[], struct awk_src_io* src_io)
|
static int handle_args (int argc, ase_char_t* argv[], struct srcio_t* srcio)
|
||||||
{
|
{
|
||||||
ase_cint_t c;
|
ase_cint_t c;
|
||||||
static ase_opt_lng_t lng[] =
|
static ase_opt_lng_t lng[] =
|
||||||
@ -1080,8 +1098,8 @@ static int handle_args (int argc, ase_char_t* argv[], struct awk_src_io* src_io)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case ASE_T('f'):
|
case ASE_T('f'):
|
||||||
src_io->input_file = opt.arg;
|
srcio.type = SIO_FILE;
|
||||||
ase_printf (ASE_T("[file] = %s\n"), opt.arg);
|
srcio.data.file.name = opt.arg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ASE_T('F'):
|
case ASE_T('F'):
|
||||||
@ -1116,7 +1134,7 @@ static int handle_args (int argc, ase_char_t* argv[], struct awk_src_io* src_io)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (src_io->input_file == ASE_NULL)
|
if (srcio->input_file == ASE_NULL)
|
||||||
{
|
{
|
||||||
/* the first is the source code... */
|
/* the first is the source code... */
|
||||||
}
|
}
|
||||||
@ -1142,62 +1160,26 @@ static int handle_args (int argc, ase_char_t* argv[], struct awk_src_io* src_io)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct extension_t
|
typedef struct extensrcion_t
|
||||||
{
|
{
|
||||||
ase_mmgr_t mmgr;
|
ase_mmgr_t mmgr;
|
||||||
ase_awk_prmfns_t prmfns;
|
ase_awk_prmfns_t prmfns;
|
||||||
}
|
}
|
||||||
extension_t;
|
extensrcion_t;
|
||||||
|
|
||||||
static void* fuser (void* org, void* space)
|
static void* fuser (void* org, void* space)
|
||||||
{
|
{
|
||||||
extension_t* ext = (extension_t*)space;
|
extensrcion_t* ext = (extensrcion_t*)space;
|
||||||
/* remember the memory manager into the extension */
|
/* remember the memory manager into the extensrcion */
|
||||||
ext->mmgr = *(ase_mmgr_t*)org;
|
ext->mmgr = *(ase_mmgr_t*)org;
|
||||||
return &ext->mmgr;
|
return &ext->mmgr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int awk_main (int argc, ase_char_t* argv[])
|
static ase_awk_t* open_awk (void)
|
||||||
{
|
{
|
||||||
ase_awk_t* awk;
|
ase_awk_t* awk;
|
||||||
ase_mmgr_t mmgr;
|
ase_mmgr_t mmgr;
|
||||||
extension_t* extension;
|
extensrcion_t* extensrcion;
|
||||||
|
|
||||||
ase_awk_srcios_t srcios;
|
|
||||||
struct awk_src_io src_io = { NULL, NULL };
|
|
||||||
int opt, i, file_count = 0;
|
|
||||||
#ifdef _WIN32
|
|
||||||
struct mmgr_data_t mmgr_data;
|
|
||||||
#endif
|
|
||||||
const ase_char_t* mfn = ASE_NULL;
|
|
||||||
int mode = 0;
|
|
||||||
int runarg_count = 0;
|
|
||||||
ase_awk_runarg_t runarg[128];
|
|
||||||
int deparse = 0;
|
|
||||||
|
|
||||||
opt = ASE_AWK_IMPLICIT |
|
|
||||||
ASE_AWK_EXTIO |
|
|
||||||
ASE_AWK_NEWLINE |
|
|
||||||
ASE_AWK_BASEONE |
|
|
||||||
ASE_AWK_PABLOCK;
|
|
||||||
|
|
||||||
i = handle_args (argc, argv, &src_io);
|
|
||||||
if (i == -1)
|
|
||||||
{
|
|
||||||
print_usage (argv[0]);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (i == 1) return 0;
|
|
||||||
|
|
||||||
infiles[file_count] = ASE_NULL;
|
|
||||||
runarg[runarg_count].ptr = NULL;
|
|
||||||
runarg[runarg_count].len = 0;
|
|
||||||
|
|
||||||
if (mode != 0 || src_io.input_file == NULL)
|
|
||||||
{
|
|
||||||
print_usage (argv[0]);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset (&mmgr, 0, ASE_SIZEOF(mmgr));
|
memset (&mmgr, 0, ASE_SIZEOF(mmgr));
|
||||||
mmgr.malloc = custom_awk_malloc;
|
mmgr.malloc = custom_awk_malloc;
|
||||||
@ -1216,7 +1198,7 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
mmgr.custom_data = ASE_NULL;
|
mmgr.custom_data = ASE_NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
awk = ase_awk_open (&mmgr, ASE_SIZEOF(extension_t), fuser);
|
awk = ase_awk_open (&mmgr, ASE_SIZEOF(extensrcion_t), fuser);
|
||||||
if (awk == ASE_NULL)
|
if (awk == ASE_NULL)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -1226,16 +1208,62 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
app_awk = awk;
|
|
||||||
|
|
||||||
ase_awk_setccls (awk, ASE_GETCCLS());
|
ase_awk_setccls (awk, ASE_GETCCLS());
|
||||||
|
|
||||||
extension = (extension_t*) ase_awk_getextension (awk);
|
extensrcion = (extensrcion_t*) ase_awk_getextensrcion (awk);
|
||||||
extension->prmfns.pow = custom_awk_pow;
|
extensrcion->prmfns.pow = custom_awk_pow;
|
||||||
extension->prmfns.sprintf = custom_awk_sprintf;
|
extensrcion->prmfns.sprintf = custom_awk_sprintf;
|
||||||
extension->prmfns.dprintf = custom_awk_dprintf;
|
extensrcion->prmfns.dprintf = custom_awk_dprintf;
|
||||||
extension->prmfns.custom_data = ASE_NULL;
|
extensrcion->prmfns.custom_data = ASE_NULL;
|
||||||
ase_awk_setprmfns (awk, &extension->prmfns);
|
ase_awk_setprmfns (awk, &extensrcion->prmfns);
|
||||||
|
|
||||||
|
ase_awk_setoption (awk, ASE_AWK_IMPLICIT | ASE_AWK_EXTIO | ASE_AWK_NEWLINE | ASE_AWK_BASEONE | ASE_AWK_PABLOCK);
|
||||||
|
|
||||||
|
return awk;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int awk_main (int argc, ase_char_t* argv[])
|
||||||
|
{
|
||||||
|
ase_awk_t* awk;
|
||||||
|
ase_mmgr_t mmgr;
|
||||||
|
extensrcion_t* extensrcion;
|
||||||
|
|
||||||
|
ase_awk_srcios_t srcios;
|
||||||
|
struct srcio_t srcio = { NULL, NULL };
|
||||||
|
int i, file_count = 0;
|
||||||
|
#ifdef _WIN32
|
||||||
|
struct mmgr_data_t mmgr_data;
|
||||||
|
#endif
|
||||||
|
const ase_char_t* mfn = ASE_NULL;
|
||||||
|
int mode = 0;
|
||||||
|
int runarg_count = 0;
|
||||||
|
ase_awk_runarg_t runarg[128];
|
||||||
|
int deparse = 0;
|
||||||
|
|
||||||
|
|
||||||
|
i = handle_args (argc, argv, &srcio);
|
||||||
|
if (i == -1)
|
||||||
|
{
|
||||||
|
print_usage (argv[0]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (i == 1) return 0;
|
||||||
|
|
||||||
|
infiles[file_count] = ASE_NULL;
|
||||||
|
runarg[runarg_count].ptr = NULL;
|
||||||
|
runarg[runarg_count].len = 0;
|
||||||
|
|
||||||
|
if (mode != 0 || srcio.input_file == NULL)
|
||||||
|
{
|
||||||
|
print_usage (argv[0]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
awk = open_awk ();
|
||||||
|
if (awk == ASE_NULL) return -1;
|
||||||
|
|
||||||
|
app_awk = awk;
|
||||||
|
|
||||||
if (ase_awk_addfunc (awk,
|
if (ase_awk_addfunc (awk,
|
||||||
ASE_T("sleep"), 5, 0,
|
ASE_T("sleep"), 5, 0,
|
||||||
@ -1248,7 +1276,6 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ase_awk_setoption (awk, opt);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ase_awk_seterrstr (awk, ASE_AWK_EGBLRED, ASE_T("\uC804\uC5ED\uBCC0\uC218 \'%.*s\'\uAC00 \uC7AC\uC815\uC758 \uB418\uC5C8\uC2B5\uB2C8\uB2E4"));
|
ase_awk_seterrstr (awk, ASE_AWK_EGBLRED, ASE_T("\uC804\uC5ED\uBCC0\uC218 \'%.*s\'\uAC00 \uC7AC\uC815\uC758 \uB418\uC5C8\uC2B5\uB2C8\uB2E4"));
|
||||||
@ -1257,7 +1284,7 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
|
|
||||||
srcios.in = awk_srcio_in;
|
srcios.in = awk_srcio_in;
|
||||||
srcios.out = deparse? awk_srcio_out: NULL;
|
srcios.out = deparse? awk_srcio_out: NULL;
|
||||||
srcios.custom_data = &src_io;
|
srcios.custom_data = &srcio;
|
||||||
|
|
||||||
ase_awk_setmaxdepth (
|
ase_awk_setmaxdepth (
|
||||||
awk, ASE_AWK_DEPTH_BLOCK_PARSE | ASE_AWK_DEPTH_EXPR_PARSE, 50);
|
awk, ASE_AWK_DEPTH_BLOCK_PARSE | ASE_AWK_DEPTH_EXPR_PARSE, 50);
|
||||||
@ -1349,8 +1376,6 @@ int ase_main (int argc, ase_achar_t* argv[])
|
|||||||
/*#if defined(_MSC_VER)
|
/*#if defined(_MSC_VER)
|
||||||
_CrtDumpMemoryLeaks ();
|
_CrtDumpMemoryLeaks ();
|
||||||
#endif*/
|
#endif*/
|
||||||
_tprintf (_T("Press ENTER to quit\n"));
|
|
||||||
getchar ();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.h 283 2008-07-22 13:12:56Z baconevi $
|
* $Id: awk.h 313 2008-08-03 14:06:43Z baconevi $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -602,6 +602,8 @@ ase_awk_t* ase_awk_open (
|
|||||||
ase_fuser_t mmgr_fuser
|
ase_fuser_t mmgr_fuser
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ase_awk_t* ase_awk_openstd (void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* destroy an ase_awk_instance
|
* destroy an ase_awk_instance
|
||||||
*
|
*
|
||||||
|
@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = nostdinc
|
|||||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||||
|
|
||||||
lib_LTLIBRARIES = libaseawk.la
|
lib_LTLIBRARIES = libaseawk.la
|
||||||
libaseawk_la_SOURCES = awk.c err.c tree.c tab.c parse.c run.c rec.c val.c func.c misc.c extio.c awk_i.h extio.h func.h misc.h parse.h run.h tab.h tree.h
|
libaseawk_la_SOURCES = awk.c err.c tree.c tab.c parse.c run.c rec.c val.c func.c misc.c extio.c std.c awk_i.h extio.h func.h misc.h parse.h run.h tab.h tree.h
|
||||||
libaseawk_la_LDFLAGS= -L../cmn -version-info 1:0:0
|
libaseawk_la_LDFLAGS= -L../cmn -version-info 1:0:0
|
||||||
libaseawk_la_LIBADD= -lasecmn
|
libaseawk_la_LIBADD= -lasecmn
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: getopt.c 290 2008-07-27 06:16:54Z baconevi $
|
* $Id: getopt.c 313 2008-08-03 14:06:43Z baconevi $
|
||||||
*
|
*
|
||||||
* {License}
|
* {License}
|
||||||
*/
|
*/
|
||||||
@ -140,7 +140,7 @@ ase_cint_t ase_getopt (int argc, ase_char_t* const* argv, ase_opt_t* opt)
|
|||||||
return o->val;
|
return o->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*end == ASE_T('=')) *end = ASE_T('\0');
|
/*if (*end == ASE_T('=')) *end = ASE_T('\0');*/
|
||||||
opt->lngopt = opt->cur;
|
opt->lngopt = opt->cur;
|
||||||
return BADCH;
|
return BADCH;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user