diff --git a/ase/awk/makefile.tcc b/ase/awk/makefile.tcc index 41fe2e58..fcaca4a2 100644 --- a/ase/awk/makefile.tcc +++ b/ase/awk/makefile.tcc @@ -3,14 +3,14 @@ # SRCS = awk.c err.c tree.c str.c tab.c map.c parse.c \ - run.c rec.c val.c misc.c extio.c rex.c + run.c rec.c val.c func.c misc.c extio.c rex.c OBJS = awk.obj err.obj tree.obj str.obj tab.obj map.obj parse.obj \ - run.obj rec.obj val.obj misc.obj extio.obj rex.obj + run.obj rec.obj val.obj func.obj misc.obj extio.obj rex.obj OUT = aseawk.lib CC = tcc AR = tlib -CFLAGS = -1 -O -mh -w -f87 -G -I..\.. -Ddos +CFLAGS = -1 -O -mh -w -f87 -G -g0 -I..\.. -D_DEBUG all: $(OBJS) -del $(OUT) @@ -24,6 +24,7 @@ all: $(OBJS) $(AR) $(OUT) +run.obj $(AR) $(OUT) +rec.obj $(AR) $(OUT) +val.obj + $(AR) $(OUT) +func.obj $(AR) $(OUT) +misc.obj $(AR) $(OUT) +extio.obj $(AR) $(OUT) +rex.obj diff --git a/ase/awk/rex.c b/ase/awk/rex.c index b8d78256..25aa0240 100644 --- a/ase/awk/rex.c +++ b/ase/awk/rex.c @@ -1,5 +1,5 @@ /* - * $Id: rex.c,v 1.41 2006-10-27 10:34:40 bacon Exp $ + * $Id: rex.c,v 1.42 2006-11-15 05:49:22 bacon Exp $ */ #include @@ -1696,6 +1696,8 @@ static ase_bool_t __cc_isxdigit (ase_awk_t* awk, ase_char_t c) return ASE_AWK_ISXDIGIT (awk, c); } +#ifdef DEBUG_REX + void ase_awk_printrex (void* rex) { __print_pattern (rex); @@ -1836,3 +1838,4 @@ static const ase_byte_t* __print_atom (const ase_byte_t* p) return p; } +#endif diff --git a/ase/awk/rex.h b/ase/awk/rex.h index 138f5e3c..3ba7532d 100644 --- a/ase/awk/rex.h +++ b/ase/awk/rex.h @@ -1,5 +1,5 @@ /* - * $Id: rex.h,v 1.21 2006-10-24 04:10:12 bacon Exp $ + * $Id: rex.h,v 1.22 2006-11-15 05:49:22 bacon Exp $ **/ #ifndef _ASE_AWK_REX_H_ @@ -64,7 +64,9 @@ void ase_awk_freerex (ase_awk_t* awk, void* code); ase_bool_t ase_awk_isemptyrex (ase_awk_t* awk, void* code); -void ase_awk_printrex (void* code); +#ifdef DEBUG_REX +void ase_awk_printrex (void* rex); +#endif #ifdef __cplusplus } diff --git a/ase/awk/val.c b/ase/awk/val.c index a506fd62..ec2ddf1b 100644 --- a/ase/awk/val.c +++ b/ase/awk/val.c @@ -1,5 +1,5 @@ /* - * $Id: val.c,v 1.82 2006-11-14 14:54:18 bacon Exp $ + * $Id: val.c,v 1.83 2006-11-15 05:49:22 bacon Exp $ */ #include @@ -431,8 +431,10 @@ ase_char_t* ase_awk_valtostr ( } /* TODO: process more value types */ + run->awk->syscas.dprintf ( + ASE_T("ERROR: WRONG VALUE TYPE [%d] in ase_awk_valtostr\n"), + v->type); -xp_printf (ASE_T("*** ERROR: WRONG VALUE TYPE [%d] in ase_awk_valtostr v=> %p***\n"), v->type, v); run->errnum = ASE_AWK_EVALTYPE; return ASE_NULL; } @@ -650,7 +652,10 @@ int ase_awk_valtonum ( return 0; /* long */ } -xp_printf (ASE_T("*** ERROR: WRONG VALUE TYPE [%d] in ase_awk_valtonum v=> %p***\n"), v->type, v); + run->awk->syscas.dprintf ( + ASE_T("ERROR: WRONG VALUE TYPE [%d] in ase_awk_valtonum\n"), + v->type); + run->errnum = ASE_AWK_EVALTYPE; return -1; /* error */ } diff --git a/ase/conf_dos.h b/ase/conf_dos.h index 8f317c42..4f00ee1a 100644 --- a/ase/conf_dos.h +++ b/ase/conf_dos.h @@ -1,5 +1,5 @@ /* - * $Id: conf_dos.h,v 1.7 2006-10-24 04:30:13 bacon Exp $ + * $Id: conf_dos.h,v 1.8 2006-11-15 05:49:22 bacon Exp $ */ #if !defined(__LARGE__) && !defined(__HUGE__) @@ -25,7 +25,7 @@ #define ASE_SIZEOF_FLOAT 4 #define ASE_SIZEOF_DOUBLE 8 -#define ASE_SIZEOF_LONG_DOUBLE 10 /* turbo c 2.01 */ +#define ASE_SIZEOF_LONG_DOUBLE 10 /* turbo c 2.01/turbo c++ 1.0 */ #define ASE_SIZEOF_WCHAR_T 0 #define ASE_CHAR_IS_MCHAR diff --git a/ase/test/awk/awk.c b/ase/test/awk/awk.c index 3e88e194..ae8dbc1c 100644 --- a/ase/test/awk/awk.c +++ b/ase/test/awk/awk.c @@ -1,5 +1,5 @@ /* - * $Id: awk.c,v 1.111 2006-11-13 09:11:09 bacon Exp $ + * $Id: awk.c,v 1.112 2006-11-15 05:49:22 bacon Exp $ */ #include @@ -14,7 +14,7 @@ #include #endif -#ifdef _WIN32 +#if defined(_WIN32) #include #include #include @@ -28,11 +28,25 @@ #define xp_vsprintf _vsntprintf #define xp_sprintf _sntprintf - #define xp_frintf _ftprintf + #define xp_fprintf _ftprintf #define xp_printf _tprintf #define xp_assert assert #pragma warning (disable: 4996) +#elif defined(__MSDOS__) + #include + #include + #include + #include + + #ifndef PATH_MAX + #define ASE_PATH_MAX 4096 + #else + #define ASE_PATH_MAX PATH_MAX + #endif + + #define xp_printf printf + #define xp_assert assert #else #include #include @@ -85,6 +99,25 @@ static FILE* fopen_t (const ase_char_t* path, const ase_char_t* mode) #endif } +static int __sprintf ( + ase_char_t* buf, ase_size_t len, const ase_char_t* fmt, ...) +{ + int n; + va_list ap; + + va_start (ap, fmt); +#if defined(_WIN32) + n = _sntprintf (buf, len, fmt, ap); +#elif defined(__MSDOS__) + /* TODO: check buffer overflow */ + n = vsprintf (buf, fmt, ap); +#else + n = xp_vsprintf (buf, len, fmt, ap); +#endif + va_end (ap); + return n; +} + static int __aprintf (const ase_char_t* fmt, ...) { int n; @@ -94,15 +127,16 @@ static int __aprintf (const ase_char_t* fmt, ...) #endif va_start (ap, fmt); -#ifdef _WIN32 +#if defined(_WIN32) n = _vsntprintf (buf, ase_countof(buf), fmt, ap); -#if defined(_MSC_VER) && (_MSC_VER<1400) + #if defined(_MSC_VER) && (_MSC_VER<1400) MessageBox (NULL, buf, ASE_T("Assertion Failure"), MB_OK | MB_ICONERROR); -#else + #else MessageBox (NULL, buf, ASE_T("\uB2DD\uAE30\uB9AC \uC870\uB610"), MB_OK | MB_ICONERROR); -#endif - + #endif +#elif defined(__MSDOS__) + n = vprintf (fmt, ap); #else n = xp_vprintf (fmt, ap); #endif @@ -116,8 +150,10 @@ static int __dprintf (const ase_char_t* fmt, ...) va_list ap; va_start (ap, fmt); -#ifdef _WIN32 +#if defined(_WIN32) n = _vftprintf (stderr, fmt, ap); +#elif defined(__MSDOS__) + n = vfprintf (stderr, fmt, ap); #else n = xp_vfprintf (stderr, fmt, ap); #endif @@ -133,8 +169,11 @@ static ase_real_t __awk_pow (ase_real_t x, ase_real_t y) static FILE* popen_t (const ase_char_t* cmd, const ase_char_t* mode) { -#ifdef _WIN32 +#if defined(_WIN32) return _tpopen (cmd, mode); +#elif defined(__MSDOS__) + /* TODO: support this */ + return NULL; #else #ifdef ASE_CHAR_IS_MCHAR const ase_mchar_t* cmd_mb; @@ -220,11 +259,11 @@ static ase_ssize_t dump_source ( ase_size_t i; for (i = 0; i < size; i++) { - #ifdef ASE_CHAR_IS_MCHAR + #ifdef ASE_CHAR_IS_MCHAR fputc (data[i], stdout); - #else + #else fputwc (data[i], stdout); - #endif + #endif } return size; } @@ -589,7 +628,7 @@ static void __stop_run (int sig) { signal (SIGINT, SIG_IGN); ase_awk_stop (app_awk, app_run); - //ase_awk_stoprun (awk, handle); + /*ase_awk_stoprun (awk, handle);*/ /*ase_awk_stopallruns (awk); */ signal (SIGINT, __stop_run); } @@ -654,6 +693,53 @@ static void __awk_free (void* ptr, void* custom_data) #endif } +#if defined(ASE_CHAR_IS_MCHAR) + #if (__TURBOC__<=513) /* turboc 2.01 or earlier */ + static int __awk_isupper (int c) { return isupper (c); } + static int __awk_islower (int c) { return islower (c); } + static int __awk_isalpha (int c) { return isalpha (c); } + static int __awk_isdigit (int c) { return isdigit (c); } + static int __awk_isxdigit (int c) { return isxdigit (c); } + static int __awk_isalnum (int c) { return isalnum (c); } + static int __awk_isspace (int c) { return isspace (c); } + static int __awk_isprint (int c) { return isprint (c); } + static int __awk_isgraph (int c) { return isgraph (c); } + static int __awk_iscntrl (int c) { return iscntrl (c); } + static int __awk_ispunct (int c) { return ispunct (c); } + static int __awk_toupper (int c) { return toupper (c); } + static int __awk_tolower (int c) { return tolower (c); } + #else + #define __awk_isupper isupper + #define __awk_islower islower + #define __awk_isalpha isalpha + #define __awk_isdigit isdigit + #define __awk_isxdigit isxdigit + #define __awk_isalnum isalnum + #define __awk_isspace isspace + #define __awk_isprint isprint + #define __awk_isgraph isgraph + #define __awk_iscntrl iscntrl + #define __awk_ispunct ispunct + #define __awk_toupper tolower + #define __awk_toupper toupper + #endif +#else + #define __awk_isupper iswupper + #define __awk_islower iswlower + #define __awk_isalpha iswalpha + #define __awk_isdigit iswdigit + #define __awk_isxdigit iswxdigit + #define __awk_isalnum iswalnum + #define __awk_isspace iswspace + #define __awk_isprint iswprint + #define __awk_isgraph iswgraph + #define __awk_iscntrl iswcntrl + #define __awk_ispunct iswpunct + + #define __awk_toupper towlower + #define __awk_toupper towupper +#endif + static int __main (int argc, ase_char_t* argv[]) { ase_awk_t* awk; @@ -712,39 +798,24 @@ static int __main (int argc, ase_char_t* argv[]) syscas.lock = NULL; syscas.unlock = NULL; -#ifdef ASE_CHAR_IS_MCHAR - syscas.is_upper = isupper; - syscas.is_lower = islower; - syscas.is_alpha = isalpha; - syscas.is_digit = isdigit; - syscas.is_xdigit = isxdigit; - syscas.is_alnum = isalnum; - syscas.is_space = isspace; - syscas.is_print = isprint; - syscas.is_graph = isgraph; - syscas.is_cntrl = iscntrl; - syscas.is_punct = ispunct; - syscas.to_upper = toupper; - syscas.to_lower = tolower; -#else - syscas.is_upper = iswupper; - syscas.is_lower = iswlower; - syscas.is_alpha = iswalpha; - syscas.is_digit = iswdigit; - syscas.is_xdigit = iswxdigit; - syscas.is_alnum = iswalnum; - syscas.is_space = iswspace; - syscas.is_print = iswprint; - syscas.is_graph = iswgraph; - syscas.is_cntrl = iswcntrl; - syscas.is_punct = iswpunct; - syscas.to_upper = towupper; - syscas.to_lower = towlower; -#endif + syscas.is_upper = __awk_isupper; + syscas.is_lower = __awk_islower; + syscas.is_alpha = __awk_isalpha; + syscas.is_digit = __awk_isdigit; + syscas.is_xdigit = __awk_isxdigit; + syscas.is_alnum = __awk_isalnum; + syscas.is_space = __awk_isspace; + syscas.is_print = __awk_isprint; + syscas.is_graph = __awk_isgraph; + syscas.is_cntrl = __awk_iscntrl; + syscas.is_punct = __awk_ispunct; + syscas.to_upper = __awk_toupper; + syscas.to_lower = __awk_tolower; + syscas.memcpy = memcpy; syscas.memset = memset; syscas.pow = __awk_pow; - syscas.sprintf = xp_sprintf; + syscas.sprintf = __sprintf; syscas.aprintf = __aprintf; syscas.dprintf = __dprintf; syscas.abort = abort; @@ -778,17 +849,10 @@ static int __main (int argc, ase_char_t* argv[]) if (ase_awk_parse (awk, &srcios) == -1) { int errnum = ase_awk_geterrnum(awk); -#if !defined(_WIN32) && defined(ASE_CHAR_IS_WCHAR) - wprintf ( - ASE_T("ERROR: cannot parse program - line %u [%d] %ls\n"), - (unsigned int)ase_awk_getsrcline(awk), - errnum, ase_awk_geterrstr(errnum)); -#else - _tprintf ( + xp_printf ( ASE_T("ERROR: cannot parse program - line %u [%d] %s\n"), (unsigned int)ase_awk_getsrcline(awk), errnum, ase_awk_geterrstr(errnum)); -#endif ase_awk_close (awk); return -1; } @@ -820,16 +884,9 @@ static int __main (int argc, ase_char_t* argv[]) if (ase_awk_run (awk, &runios, &runcbs, runarg) == -1) { int errnum = ase_awk_geterrnum(awk); -#if !defined(_WIN32) && defined(ASE_CHAR_IS_WCHAR) - wprintf ( - ASE_T("error: cannot run program - [%d] %ls\n"), - errnum, ase_awk_geterrstr(errnum)); -#else - _tprintf ( + xp_printf ( ASE_T("error: cannot run program - [%d] %s\n"), errnum, ase_awk_geterrstr(errnum)); -#endif - ase_awk_close (awk); return -1; } @@ -1007,6 +1064,8 @@ int /*__declspec(naked)*/ is_debugger_present2 (void) #if defined(_WIN32) int _tmain (int argc, ase_char_t* argv[]) +#elif defined(__MSDOS__) +int main (int argc, ase_char_t* argv[]) #else int xp_main (int argc, ase_char_t* argv[]) #endif diff --git a/ase/test/awk/makefile.tcc b/ase/test/awk/makefile.tcc index 6dfc120a..6eeb68cb 100644 --- a/ase/test/awk/makefile.tcc +++ b/ase/test/awk/makefile.tcc @@ -1,7 +1,7 @@ CC = tcc -CFLAGS = -1 -O -mh -w -f87 -I..\..\.. -Ddos -D__STAND_ALONE +CFLAGS = -1 -O -mh -w -f87 -I..\..\.. LDFLAGS = -L..\..\awk -LIBS = xpawk.lib +LIBS = aseawk.lib all: awk diff --git a/ase/types.h b/ase/types.h index 7154b04f..35ce9c7d 100644 --- a/ase/types.h +++ b/ase/types.h @@ -1,5 +1,5 @@ /* - * $Id: types.h,v 1.58 2006-10-24 04:30:13 bacon Exp $ + * $Id: types.h,v 1.59 2006-11-15 05:49:22 bacon Exp $ */ #ifndef _ASE_TYPES_H_ @@ -9,7 +9,7 @@ #include #elif defined(vms) || defined(__vms) #include -#elif defined(dos) || defined(__dos) +#elif defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) #include #else #include