*** empty log message ***
This commit is contained in:
parent
eb98f6b2ec
commit
616e04112e
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk.c,v 1.178 2007-02-24 14:32:44 bacon Exp $
|
* $Id: awk.c,v 1.179 2007-03-01 14:40:13 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ase/awk/awk.h>
|
#include <ase/awk/awk.h>
|
||||||
@ -21,11 +21,10 @@
|
|||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#pragma warning (disable: 4996)
|
#pragma warning (disable: 4996)
|
||||||
#pragma warning (disable: 4296)
|
#pragma warning (disable: 4296)
|
||||||
#elif defined(ASE_CHAR_IS_MCHAR)
|
#endif
|
||||||
#include <locale.h>
|
|
||||||
#else
|
#if defined(__linux) && defined(_DEBUG)
|
||||||
#include <wchar.h>
|
#include <mcheck.h>
|
||||||
#include <locale.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) && defined(_MSC_VER) && defined(_DEBUG)
|
#if defined(_WIN32) && defined(_MSC_VER) && defined(_DEBUG)
|
||||||
@ -33,16 +32,19 @@
|
|||||||
#include <crtdbg.h>
|
#include <crtdbg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__linux) && defined(_DEBUG)
|
|
||||||
#include <mcheck.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct awk_src_io
|
struct awk_src_io
|
||||||
{
|
{
|
||||||
const ase_char_t* input_file;
|
const ase_char_t* input_file;
|
||||||
FILE* input_handle;
|
FILE* input_handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
struct mmgr_data_t
|
||||||
|
{
|
||||||
|
HANDLE heap;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(vms) || defined(__vms)
|
#if defined(vms) || defined(__vms)
|
||||||
/* it seems that the main function should be placed in the main object file
|
/* it seems that the main function should be placed in the main object file
|
||||||
* in OpenVMS. otherwise, the first function in the main object file seems
|
* in OpenVMS. otherwise, the first function in the main object file seems
|
||||||
@ -50,6 +52,47 @@ struct awk_src_io
|
|||||||
#include <ase/utl/main.c>
|
#include <ase/utl/main.c>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void dprintf (const ase_char_t* fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start (ap, fmt);
|
||||||
|
ase_vfprintf (stderr, fmt, ap);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* custom memory management function */
|
||||||
|
static void* custom_awk_malloc (void* custom, ase_size_t n)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
return HeapAlloc (((struct mmgr_data_t*)custom)->heap, 0, n);
|
||||||
|
#else
|
||||||
|
return malloc (n);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void* custom_awk_realloc (void* custom, void* ptr, ase_size_t n)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
/* HeapReAlloc behaves differently from realloc */
|
||||||
|
if (ptr == NULL)
|
||||||
|
return HeapAlloc (((struct mmgr_data_t*)custom)->heap, 0, n);
|
||||||
|
else
|
||||||
|
return HeapReAlloc (((struct mmgr_data_t*)custom)->heap, 0, ptr, n);
|
||||||
|
#else
|
||||||
|
return realloc (ptr, n);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void custom_awk_free (void* custom, void* ptr)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
HeapFree (((struct mmgr_data_t*)custom)->heap, 0, ptr);
|
||||||
|
#else
|
||||||
|
free (ptr);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* custom character class functions */
|
||||||
static ase_bool_t custom_awk_isupper (void* custom, ase_cint_t c)
|
static ase_bool_t custom_awk_isupper (void* custom, ase_cint_t c)
|
||||||
{
|
{
|
||||||
return ase_isupper (c);
|
return ase_isupper (c);
|
||||||
@ -115,6 +158,9 @@ static ase_cint_t custom_awk_tolower (void* custom, ase_cint_t c)
|
|||||||
return ase_tolower (c);
|
return ase_tolower (c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* custom miscellaneous functions */
|
||||||
|
|
||||||
static ase_real_t custom_awk_pow (void* custom, ase_real_t x, ase_real_t y)
|
static ase_real_t custom_awk_pow (void* custom, ase_real_t x, ase_real_t y)
|
||||||
{
|
{
|
||||||
return pow (x, y);
|
return pow (x, y);
|
||||||
@ -123,7 +169,6 @@ static ase_real_t custom_awk_pow (void* custom, ase_real_t x, ase_real_t y)
|
|||||||
static void custom_awk_abort (void* custom)
|
static void custom_awk_abort (void* custom)
|
||||||
{
|
{
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int custom_awk_sprintf (
|
static int custom_awk_sprintf (
|
||||||
@ -174,13 +219,6 @@ static void custom_awk_dprintf (void* custom, const ase_char_t* fmt, ...)
|
|||||||
va_end (ap);
|
va_end (ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dprintf (const ase_char_t* fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
va_start (ap, fmt);
|
|
||||||
ase_vfprintf (stderr, fmt, ap);
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
||||||
@ -621,7 +659,7 @@ static void on_run_start (ase_awk_run_t* run, void* custom)
|
|||||||
dprintf (ASE_T("[AWK ABOUT TO START]\n"));
|
dprintf (ASE_T("[AWK ABOUT TO START]\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __printval (ase_awk_pair_t* pair, void* arg)
|
static int print_awk_value (ase_awk_pair_t* pair, void* arg)
|
||||||
{
|
{
|
||||||
ase_awk_run_t* run = (ase_awk_run_t*)arg;
|
ase_awk_run_t* run = (ase_awk_run_t*)arg;
|
||||||
dprintf (ASE_T("%s = "), (const ase_char_t*)pair->key);
|
dprintf (ASE_T("%s = "), (const ase_char_t*)pair->key);
|
||||||
@ -640,7 +678,7 @@ static void on_run_return (
|
|||||||
dprintf (ASE_T("\n"));
|
dprintf (ASE_T("\n"));
|
||||||
|
|
||||||
dprintf (ASE_T("[NAMED VARIABLES]\n"));
|
dprintf (ASE_T("[NAMED VARIABLES]\n"));
|
||||||
ase_awk_map_walk (ase_awk_getrunnamedvarmap(run), __printval, run);
|
ase_awk_map_walk (ase_awk_getrunnamedvarmap(run), print_awk_value, run);
|
||||||
dprintf (ASE_T("[END NAMED VARIABLES]\n"));
|
dprintf (ASE_T("[END NAMED VARIABLES]\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,45 +697,6 @@ static void on_run_end (ase_awk_run_t* run, int errnum, void* custom_data)
|
|||||||
app_run = NULL;
|
app_run = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
typedef struct prmfns_data_t prmfns_data_t;
|
|
||||||
struct prmfns_data_t
|
|
||||||
{
|
|
||||||
HANDLE heap;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void* custom_awk_malloc (void* custom, ase_size_t n)
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
return HeapAlloc (((prmfns_data_t*)custom)->heap, 0, n);
|
|
||||||
#else
|
|
||||||
return malloc (n);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void* custom_awk_realloc (void* custom, void* ptr, ase_size_t n)
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
/* HeapReAlloc behaves differently from realloc */
|
|
||||||
if (ptr == NULL)
|
|
||||||
return HeapAlloc (((prmfns_data_t*)custom)->heap, 0, n);
|
|
||||||
else
|
|
||||||
return HeapReAlloc (((prmfns_data_t*)custom)->heap, 0, ptr, n);
|
|
||||||
#else
|
|
||||||
return realloc (ptr, n);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void custom_awk_free (void* custom, void* ptr)
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
HeapFree (((prmfns_data_t*)custom)->heap, 0, ptr);
|
|
||||||
#else
|
|
||||||
free (ptr);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void print_usage (const ase_char_t* argv0)
|
static void print_usage (const ase_char_t* argv0)
|
||||||
{
|
{
|
||||||
ase_printf (ASE_T("Usage: %s [-m] [-d] [-a argument]* -f source-file [data-file]*\n"), argv0);
|
ase_printf (ASE_T("Usage: %s [-m] [-d] [-a argument]* -f source-file [data-file]*\n"), argv0);
|
||||||
@ -713,7 +712,7 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
struct awk_src_io src_io = { NULL, NULL };
|
struct awk_src_io src_io = { NULL, NULL };
|
||||||
int opt, i, file_count = 0, errnum;
|
int opt, i, file_count = 0, errnum;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
prmfns_data_t prmfns_data;
|
struct mmgr_data_t mmgr_data;
|
||||||
#endif
|
#endif
|
||||||
const ase_char_t* mfn = ASE_NULL;
|
const ase_char_t* mfn = ASE_NULL;
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
@ -728,7 +727,6 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
ASE_AWK_SHADING |
|
ASE_AWK_SHADING |
|
||||||
ASE_AWK_SHIFT |
|
ASE_AWK_SHIFT |
|
||||||
ASE_AWK_EXTIO |
|
ASE_AWK_EXTIO |
|
||||||
/*ASE_AWK_COPROC |*/
|
|
||||||
ASE_AWK_BLOCKLESS |
|
ASE_AWK_BLOCKLESS |
|
||||||
ASE_AWK_STRBASEONE |
|
ASE_AWK_STRBASEONE |
|
||||||
ASE_AWK_STRIPSPACES |
|
ASE_AWK_STRIPSPACES |
|
||||||
@ -832,14 +830,14 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
prmfns.mmgr.realloc = custom_awk_realloc;
|
prmfns.mmgr.realloc = custom_awk_realloc;
|
||||||
prmfns.mmgr.free = custom_awk_free;
|
prmfns.mmgr.free = custom_awk_free;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
prmfns_data.heap = HeapCreate (0, 1000000, 1000000);
|
mmgr_data.heap = HeapCreate (0, 1000000, 1000000);
|
||||||
if (prmfns_data.heap == NULL)
|
if (mmgr_data.heap == NULL)
|
||||||
{
|
{
|
||||||
ase_printf (ASE_T("Error: cannot create an awk heap\n"));
|
ase_printf (ASE_T("Error: cannot create an awk heap\n"));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
prmfns.mmgr.custom_data = &prmfns_data;
|
prmfns.mmgr.custom_data = &mmgr_data;
|
||||||
#else
|
#else
|
||||||
prmfns.mmgr.custom_data = NULL;
|
prmfns.mmgr.custom_data = NULL;
|
||||||
#endif
|
#endif
|
||||||
@ -871,7 +869,7 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
if ((awk = ase_awk_open(&prmfns, ASE_NULL, &errnum)) == ASE_NULL)
|
if ((awk = ase_awk_open(&prmfns, ASE_NULL, &errnum)) == ASE_NULL)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HeapDestroy (prmfns_data.heap);
|
HeapDestroy (mmgr_data.heap);
|
||||||
#endif
|
#endif
|
||||||
ase_printf (
|
ase_printf (
|
||||||
ASE_T("ERROR: cannot open awk [%d] %s\n"),
|
ASE_T("ERROR: cannot open awk [%d] %s\n"),
|
||||||
@ -910,7 +908,6 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
runios.pipe = awk_extio_pipe;
|
runios.pipe = awk_extio_pipe;
|
||||||
runios.coproc = ASE_NULL;
|
|
||||||
runios.file = awk_extio_file;
|
runios.file = awk_extio_file;
|
||||||
runios.console = awk_extio_console;
|
runios.console = awk_extio_console;
|
||||||
|
|
||||||
@ -931,7 +928,7 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
|
|
||||||
ase_awk_close (awk);
|
ase_awk_close (awk);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HeapDestroy (prmfns_data.heap);
|
HeapDestroy (mmgr_data.heap);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -939,12 +936,15 @@ static int awk_main (int argc, ase_char_t* argv[])
|
|||||||
int ase_main (int argc, ase_char_t* argv[])
|
int ase_main (int argc, ase_char_t* argv[])
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
#if defined(__linux) && defined(_DEBUG)
|
#if defined(__linux) && defined(_DEBUG)
|
||||||
mtrace ();
|
mtrace ();
|
||||||
#endif
|
#endif
|
||||||
/*#if defined(_WIN32) && defined(_MSC_VER) && defined(_DEBUG)
|
/*
|
||||||
|
#if defined(_WIN32) && defined(_MSC_VER) && defined(_DEBUG)
|
||||||
_CrtSetDbgFlag (_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF);
|
_CrtSetDbgFlag (_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF);
|
||||||
#endif*/
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
n = awk_main (argc, argv);
|
n = awk_main (argc, argv);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user