*** empty log message ***

This commit is contained in:
hyung-hwan 2006-09-08 15:26:49 +00:00
parent c5ddc5cc9f
commit 40cdec67b4
7 changed files with 100 additions and 59 deletions

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk.h,v 1.111 2006-09-08 14:57:43 bacon Exp $ * $Id: awk.h,v 1.112 2006-09-08 15:26:49 bacon Exp $
*/ */
#ifndef _XP_AWK_AWK_H_ #ifndef _XP_AWK_AWK_H_
@ -379,29 +379,6 @@ xp_char_t* xp_awk_strxnstr (
const xp_char_t* str, xp_size_t strsz, const xp_char_t* str, xp_size_t strsz,
const xp_char_t* sub, xp_size_t subsz); const xp_char_t* sub, xp_size_t subsz);
xp_char_t* xp_awk_strtok (
xp_awk_t* awk, const xp_char_t* s,
const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strxtok (
xp_awk_t* awk, const xp_char_t* s, xp_size_t len,
const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strntok (
xp_awk_t* awk, const xp_char_t* s,
const xp_char_t* delim, xp_size_t delim_len,
xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strxntok (
xp_awk_t* awk, const xp_char_t* s, xp_size_t len,
const xp_char_t* delim, xp_size_t delim_len,
xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strxntokbyrex (
xp_awk_t* awk, const xp_char_t* s, xp_size_t len,
void* rex, xp_char_t** tok, xp_size_t* tok_len, int* errnum);
int xp_awk_printf (xp_awk_t* awk, const xp_char_t* fmt, ...); int xp_awk_printf (xp_awk_t* awk, const xp_char_t* fmt, ...);
int xp_awk_sprintf ( int xp_awk_sprintf (

View File

@ -1,5 +1,5 @@
/* /*
* $Id: awk_i.h,v 1.55 2006-09-05 04:10:23 bacon Exp $ * $Id: awk_i.h,v 1.56 2006-09-08 15:26:49 bacon Exp $
*/ */
#ifndef _XP_AWK_AWKI_H_ #ifndef _XP_AWK_AWKI_H_
@ -48,6 +48,7 @@ typedef struct xp_awk_tree_t xp_awk_tree_t;
#include <xp/awk/parse.h> #include <xp/awk/parse.h>
#include <xp/awk/run.h> #include <xp/awk/run.h>
#include <xp/awk/extio.h> #include <xp/awk/extio.h>
#include <xp/awk/misc.h>
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning (disable: 4996) #pragma warning (disable: 4996)
@ -247,6 +248,7 @@ struct xp_awk_run_t
{ {
void* rs; void* rs;
void* fs; void* fs;
int ignorecase;
} rex; } rex;
/* extio chain */ /* extio chain */

View File

@ -1,5 +1,5 @@
/* /*
* $Id: func.c,v 1.46 2006-09-05 04:10:24 bacon Exp $ * $Id: func.c,v 1.47 2006-09-08 15:26:49 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -641,12 +641,12 @@ static int __bfn_split (xp_awk_t* awk, void* run)
{ {
if (fs_len <= 1) if (fs_len <= 1)
{ {
p = xp_awk_strxntok (awk, p = xp_awk_strxntok (run,
p, str_len, fs_ptr, fs_len, &tok, &tok_len); p, str_len, fs_ptr, fs_len, &tok, &tok_len);
} }
else else
{ {
p = xp_awk_strxntokbyrex (awk, p, str_len, p = xp_awk_strxntokbyrex (run, p, str_len,
fs_rex, &tok, &tok_len, &errnum); fs_rex, &tok, &tok_len, &errnum);
if (p == XP_NULL && errnum != XP_AWK_ENOERR) if (p == XP_NULL && errnum != XP_AWK_ENOERR)
{ {

View File

@ -1,5 +1,5 @@
/* /*
* $Id: misc.c,v 1.16 2006-09-08 14:50:52 bacon Exp $ * $Id: misc.c,v 1.17 2006-09-08 15:26:49 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -478,35 +478,35 @@ xp_char_t* xp_awk_strxnstr (
} }
xp_char_t* xp_awk_strtok ( xp_char_t* xp_awk_strtok (
xp_awk_t* awk, const xp_char_t* s, xp_awk_run_t* run, const xp_char_t* s,
const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len) const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len)
{ {
return xp_awk_strxntok ( return xp_awk_strxntok (
awk, s, xp_awk_strlen(s), run, s, xp_awk_strlen(s),
delim, xp_awk_strlen(delim), tok, tok_len); delim, xp_awk_strlen(delim), tok, tok_len);
} }
xp_char_t* xp_awk_strxtok ( xp_char_t* xp_awk_strxtok (
xp_awk_t* awk, const xp_char_t* s, xp_size_t len, xp_awk_run_t* run, const xp_char_t* s, xp_size_t len,
const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len) const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len)
{ {
return xp_awk_strxntok ( return xp_awk_strxntok (
awk, s, len, run, s, len,
delim, xp_awk_strlen(delim), tok, tok_len); delim, xp_awk_strlen(delim), tok, tok_len);
} }
xp_char_t* xp_awk_strntok ( xp_char_t* xp_awk_strntok (
xp_awk_t* awk, const xp_char_t* s, xp_awk_run_t* run, const xp_char_t* s,
const xp_char_t* delim, xp_size_t delim_len, const xp_char_t* delim, xp_size_t delim_len,
xp_char_t** tok, xp_size_t* tok_len) xp_char_t** tok, xp_size_t* tok_len)
{ {
return xp_awk_strxntok ( return xp_awk_strxntok (
awk, s, xp_awk_strlen(s), run, s, xp_awk_strlen(s),
delim, delim_len, tok, tok_len); delim, delim_len, tok, tok_len);
} }
xp_char_t* xp_awk_strxntok ( xp_char_t* xp_awk_strxntok (
xp_awk_t* awk, const xp_char_t* s, xp_size_t len, xp_awk_run_t* run, const xp_char_t* s, xp_size_t len,
const xp_char_t* delim, xp_size_t delim_len, const xp_char_t* delim, xp_size_t delim_len,
xp_char_t** tok, xp_size_t* tok_len) xp_char_t** tok, xp_size_t* tok_len)
{ {
@ -517,6 +517,7 @@ xp_char_t* xp_awk_strxntok (
xp_char_t c; xp_char_t c;
int delim_mode; int delim_mode;
xp_printf (XP_T("ignorecase = %d\n"), run->rex.ignorecase);
#define __DELIM_NULL 0 #define __DELIM_NULL 0
#define __DELIM_EMPTY 1 #define __DELIM_EMPTY 1
#define __DELIM_SPACES 2 #define __DELIM_SPACES 2
@ -529,7 +530,7 @@ xp_char_t* xp_awk_strxntok (
for (d = delim; d < delim_end; d++) for (d = delim; d < delim_end; d++)
{ {
if (XP_AWK_ISSPACE(awk,*d)) if (XP_AWK_ISSPACE(run->awk,*d))
{ {
if (delim_mode == __DELIM_EMPTY) if (delim_mode == __DELIM_EMPTY)
delim_mode = __DELIM_SPACES; delim_mode = __DELIM_SPACES;
@ -558,12 +559,12 @@ xp_char_t* xp_awk_strxntok (
* leading and trailing spaces characters off the source * leading and trailing spaces characters off the source
* string "s" eventually. */ * string "s" eventually. */
while (p < end && XP_AWK_ISSPACE(awk,*p)) p++; while (p < end && XP_AWK_ISSPACE(run->awk,*p)) p++;
while (p < end) while (p < end)
{ {
c = *p; c = *p;
if (!XP_AWK_ISSPACE(awk,c)) if (!XP_AWK_ISSPACE(run->awk,c))
{ {
if (sp == XP_NULL) sp = p; if (sp == XP_NULL) sp = p;
ep = p; ep = p;
@ -586,15 +587,15 @@ xp_char_t* xp_awk_strxntok (
/* each token is delimited by space characters. all leading /* each token is delimited by space characters. all leading
* and trailing spaces are removed. */ * and trailing spaces are removed. */
while (p < end && XP_AWK_ISSPACE(awk,*p)) p++; while (p < end && XP_AWK_ISSPACE(run->awk,*p)) p++;
while (p < end) while (p < end)
{ {
c = *p; c = *p;
if (XP_AWK_ISSPACE(awk,c)) break; if (XP_AWK_ISSPACE(run->awk,c)) break;
if (sp == XP_NULL) sp = p; if (sp == XP_NULL) sp = p;
ep = p++; ep = p++;
} }
while (p < end && XP_AWK_ISSPACE(awk,*p)) p++; while (p < end && XP_AWK_ISSPACE(run->awk,*p)) p++;
} }
else if (delim_mode == __DELIM_NOSPACES) else if (delim_mode == __DELIM_NOSPACES)
{ {
@ -616,11 +617,11 @@ xp_char_t* xp_awk_strxntok (
/* each token is delimited by one of non-space charaters /* each token is delimited by one of non-space charaters
* in the delimeter set "delim". however, all space characters * in the delimeter set "delim". however, all space characters
* surrounding the token are removed */ * surrounding the token are removed */
while (p < end && XP_AWK_ISSPACE(awk,*p)) p++; while (p < end && XP_AWK_ISSPACE(run->awk,*p)) p++;
while (p < end) while (p < end)
{ {
c = *p; c = *p;
if (XP_AWK_ISSPACE(awk,c)) if (XP_AWK_ISSPACE(run->awk,c))
{ {
p++; p++;
continue; continue;
@ -654,7 +655,7 @@ exit_loop:
} }
xp_char_t* xp_awk_strxntokbyrex ( xp_char_t* xp_awk_strxntokbyrex (
xp_awk_t* awk, const xp_char_t* s, xp_size_t len, xp_awk_run_t* run, const xp_char_t* s, xp_size_t len,
void* rex, xp_char_t** tok, xp_size_t* tok_len, int* errnum) void* rex, xp_char_t** tok, xp_size_t* tok_len, int* errnum)
{ {
int n; int n;
@ -665,10 +666,12 @@ xp_char_t* xp_awk_strxntokbyrex (
const xp_char_t* str_ptr = s; const xp_char_t* str_ptr = s;
xp_size_t str_len = len; xp_size_t str_len = len;
xp_printf (XP_T("ignorecase = %d\n"), run->rex.ignorecase);
while (len > 0) while (len > 0)
{ {
n = xp_awk_matchrex ( n = xp_awk_matchrex (
awk, rex, ptr, left, &match_ptr, &match_len, errnum); run->awk, rex, ptr, left,
&match_ptr, &match_len, errnum);
if (n == -1) return XP_NULL; if (n == -1) return XP_NULL;
if (n == 0) if (n == 0)
{ {
@ -687,14 +690,14 @@ xp_char_t* xp_awk_strxntokbyrex (
ptr++; ptr++;
left--; left--;
} }
else if (awk->option & XP_AWK_STRIPSPACES) else if (run->awk->option & XP_AWK_STRIPSPACES)
{ {
/* match at the beginning of the input string */ /* match at the beginning of the input string */
if (match_ptr == s) if (match_ptr == s)
{ {
for (i = 0; i < match_len; i++) for (i = 0; i < match_len; i++)
{ {
if (!XP_AWK_ISSPACE(awk, match_ptr[i])) if (!XP_AWK_ISSPACE(run->awk, match_ptr[i]))
goto exit_loop; goto exit_loop;
} }
@ -724,7 +727,7 @@ exit_loop:
for (i = 0; i < match_len; i++) for (i = 0; i < match_len; i++)
{ {
if (!XP_AWK_ISSPACE(awk, match_ptr[i])) if (!XP_AWK_ISSPACE(run->awk, match_ptr[i]))
{ {
*errnum = XP_AWK_ENOERR; *errnum = XP_AWK_ENOERR;
return match_ptr+match_len; return match_ptr+match_len;
@ -733,7 +736,7 @@ exit_loop:
*errnum = XP_AWK_ENOERR; *errnum = XP_AWK_ENOERR;
if (awk->option & XP_AWK_STRIPSPACES) if (run->awk->option & XP_AWK_STRIPSPACES)
{ {
return (match_ptr+match_len >= s+len)? return (match_ptr+match_len >= s+len)?
XP_NULL: (match_ptr+match_len); XP_NULL: (match_ptr+match_len);

43
ase/awk/misc.h Normal file
View File

@ -0,0 +1,43 @@
/*
* $Id: misc.h,v 1.1 2006-09-08 15:26:49 bacon Exp $
*/
#ifndef _XP_AWK_MISC_H_
#define _XP_AWK_MISC_H_
#ifndef _XP_AWK_AWK_H_
#error Never include this file directly. Include <xp/awk/awk.h> instead
#endif
#ifdef __cplusplus
extern "C" {
#endif
xp_char_t* xp_awk_strtok (
xp_awk_run_t* awk, const xp_char_t* s,
const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strxtok (
xp_awk_run_t* awk, const xp_char_t* s, xp_size_t len,
const xp_char_t* delim, xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strntok (
xp_awk_run_t* awk, const xp_char_t* s,
const xp_char_t* delim, xp_size_t delim_len,
xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strxntok (
xp_awk_run_t* awk, const xp_char_t* s, xp_size_t len,
const xp_char_t* delim, xp_size_t delim_len,
xp_char_t** tok, xp_size_t* tok_len);
xp_char_t* xp_awk_strxntokbyrex (
xp_awk_run_t* awk, const xp_char_t* s, xp_size_t len,
void* rex, xp_char_t** tok, xp_size_t* tok_len, int* errnum);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.c,v 1.197 2006-09-05 04:10:24 bacon Exp $ * $Id: run.c,v 1.198 2006-09-08 15:26:49 bacon Exp $
*/ */
#include <xp/awk/awk_i.h> #include <xp/awk/awk_i.h>
@ -332,7 +332,22 @@ int xp_awk_setglobal (void* run, xp_size_t idx, xp_awk_val_t* val)
if (val->type != XP_AWK_VAL_STR) if (val->type != XP_AWK_VAL_STR)
XP_AWK_FREE (((xp_awk_run_t*)run)->awk, fs_ptr); XP_AWK_FREE (((xp_awk_run_t*)run)->awk, fs_ptr);
} }
else if (idx == XP_AWK_GLOBAL_IGNORECASE)
{
if ((val->type == XP_AWK_VAL_INT &&
((xp_awk_val_int_t*)val)->val == 0) ||
(val->type == XP_AWK_VAL_REAL &&
((xp_awk_val_real_t*)val)->val == 0.0) ||
(val->type == XP_AWK_VAL_STR &&
((xp_awk_val_str_t*)val)->len == 0))
{
((xp_awk_run_t*)run)->rex.ignorecase = 0;
}
else
{
((xp_awk_run_t*)run)->rex.ignorecase = 1;
}
}
/* TODO: if idx == XP_AWK_GLOBAL_NF recompute $0, etc */ /* TODO: if idx == XP_AWK_GLOBAL_NF recompute $0, etc */
@ -587,6 +602,7 @@ static int __init_run (
run->rex.rs = XP_NULL; run->rex.rs = XP_NULL;
run->rex.fs = XP_NULL; run->rex.fs = XP_NULL;
run->rex.ignorecase = 0;
return 0; return 0;
} }
@ -4774,12 +4790,12 @@ static int __split_record (xp_awk_run_t* run)
{ {
if (fs_len <= 1) if (fs_len <= 1)
{ {
p = xp_awk_strxntok (run->awk, p = xp_awk_strxntok (run,
p, len, fs_ptr, fs_len, &tok, &tok_len); p, len, fs_ptr, fs_len, &tok, &tok_len);
} }
else else
{ {
p = xp_awk_strxntokbyrex (run->awk, p, len, p = xp_awk_strxntokbyrex (run, p, len,
run->rex.fs, &tok, &tok_len, &errnum); run->rex.fs, &tok, &tok_len, &errnum);
if (p == XP_NULL && errnum != XP_AWK_ENOERR) if (p == XP_NULL && errnum != XP_AWK_ENOERR)
{ {
@ -4829,12 +4845,12 @@ static int __split_record (xp_awk_run_t* run)
{ {
if (fs_len <= 1) if (fs_len <= 1)
{ {
p = xp_awk_strxntok (run->awk, p = xp_awk_strxntok (
p, len, fs_ptr, fs_len, &tok, &tok_len); run, p, len, fs_ptr, fs_len, &tok, &tok_len);
} }
else else
{ {
p = xp_awk_strxntokbyrex (run->awk, p, len, p = xp_awk_strxntokbyrex (run, p, len,
run->rex.fs, &tok, &tok_len, &errnum); run->rex.fs, &tok, &tok_len, &errnum);
if (p == XP_NULL && errnum != XP_AWK_ENOERR) if (p == XP_NULL && errnum != XP_AWK_ENOERR)
{ {

View File

@ -1,5 +1,5 @@
/* /*
* $Id: run.h,v 1.16 2006-08-27 15:29:21 bacon Exp $ * $Id: run.h,v 1.17 2006-09-08 15:26:49 bacon Exp $
*/ */
#ifndef _XP_AWK_RUN_H_ #ifndef _XP_AWK_RUN_H_
@ -89,7 +89,7 @@ enum
XP_AWK_GLOBAL_FILENAME, XP_AWK_GLOBAL_FILENAME,
XP_AWK_GLOBAL_FNR, XP_AWK_GLOBAL_FNR,
XP_AWK_GLOBAL_FS, XP_AWK_GLOBAL_FS,
XP_AWK_GLOBAL_INORECASE, XP_AWK_GLOBAL_IGNORECASE,
XP_AWK_GLOBAL_NF, XP_AWK_GLOBAL_NF,
XP_AWK_GLOBAL_NR, XP_AWK_GLOBAL_NR,
XP_AWK_GLOBAL_OFMT, XP_AWK_GLOBAL_OFMT,