*** empty log message ***

This commit is contained in:
hyung-hwan 2007-03-01 14:40:13 +00:00
parent eb98f6b2ec
commit 616e04112e

View File

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