*** empty log message ***
This commit is contained in:
parent
3e462dbcf1
commit
8bc6cc1d1c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: awk_i.h,v 1.67 2006-10-15 15:45:41 bacon Exp $
|
* $Id: awk_i.h,v 1.68 2006-10-17 09:36:08 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_AWK_AWKI_H_
|
#ifndef _XP_AWK_AWKI_H_
|
||||||
@ -230,6 +230,7 @@ struct xp_awk_run_t
|
|||||||
void* rs;
|
void* rs;
|
||||||
void* fs;
|
void* fs;
|
||||||
int ignorecase;
|
int ignorecase;
|
||||||
|
xp_size_t fnr;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: func.c,v 1.63 2006-10-16 08:47:59 bacon Exp $
|
* $Id: func.c,v 1.64 2006-10-17 09:36:08 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -29,24 +29,25 @@ static int __bfn_system (xp_awk_run_t* run);
|
|||||||
static xp_awk_bfn_t __sys_bfn[] =
|
static xp_awk_bfn_t __sys_bfn[] =
|
||||||
{
|
{
|
||||||
/* io functions */
|
/* io functions */
|
||||||
{ XP_T("close"), 5, XP_AWK_EXTIO, 1, 1, XP_NULL, __bfn_close },
|
{ XP_T("close"), 5, XP_AWK_EXTIO, 1, 1, XP_NULL, __bfn_close },
|
||||||
{ XP_T("fflush"), 6, XP_AWK_EXTIO, 0, 1, XP_NULL, __bfn_fflush },
|
{ XP_T("fflush"), 6, XP_AWK_EXTIO, 0, 1, XP_NULL, __bfn_fflush },
|
||||||
|
|
||||||
/* string functions */
|
/* string functions */
|
||||||
{ XP_T("index"), 5, 0, 2, 2, XP_NULL, __bfn_index },
|
{ XP_T("index"), 5, 0, 2, 2, XP_NULL, __bfn_index },
|
||||||
{ XP_T("length"), 6, 0, 1, 1, XP_NULL, __bfn_length },
|
{ XP_T("length"), 6, 0, 1, 1, XP_NULL, __bfn_length },
|
||||||
{ XP_T("substr"), 6, 0, 2, 3, XP_NULL, __bfn_substr },
|
{ XP_T("substr"), 6, 0, 2, 3, XP_NULL, __bfn_substr },
|
||||||
{ XP_T("split"), 5, 0, 2, 3, XP_T("vrv"), __bfn_split },
|
{ XP_T("split"), 5, 0, 2, 3, XP_T("vrv"), __bfn_split },
|
||||||
{ XP_T("tolower"), 7, 0, 1, 1, XP_NULL, __bfn_tolower },
|
{ XP_T("tolower"), 7, 0, 1, 1, XP_NULL, __bfn_tolower },
|
||||||
{ XP_T("toupper"), 7, 0, 1, 1, XP_NULL, __bfn_toupper },
|
{ XP_T("toupper"), 7, 0, 1, 1, XP_NULL, __bfn_toupper },
|
||||||
{ XP_T("gsub"), 4, 0, 2, 3, XP_T("xvr"), __bfn_gsub },
|
{ XP_T("gsub"), 4, 0, 2, 3, XP_T("xvr"), __bfn_gsub },
|
||||||
{ XP_T("sub"), 3, 0, 2, 3, XP_T("xvr"), __bfn_sub },
|
{ XP_T("sub"), 3, 0, 2, 3, XP_T("xvr"), __bfn_sub },
|
||||||
|
/*{ XP_T("match"), 5, 0, ... }, */
|
||||||
|
|
||||||
/* TODO: remove these two functions */
|
/* TODO: remove these two functions */
|
||||||
{ XP_T("system"), 6, 0, 1, 1, XP_NULL, __bfn_system },
|
{ XP_T("system"), 6, 0, 1, 1, XP_NULL, __bfn_system },
|
||||||
/*{ XP_T("sin"), 3, 0, 1, 1, XP_NULL, __bfn_sin },*/
|
/*{ XP_T("sin"), 3, 0, 1, 1, XP_NULL, __bfn_sin },*/
|
||||||
|
|
||||||
{ XP_NULL, 0, 0, 0, 0, XP_NULL, XP_NULL }
|
{ XP_NULL, 0, 0, 0, 0, XP_NULL, XP_NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
xp_awk_bfn_t* xp_awk_addbfn (
|
xp_awk_bfn_t* xp_awk_addbfn (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: jni.c,v 1.8 2006-10-15 15:45:41 bacon Exp $
|
* $Id: jni.c,v 1.9 2006-10-17 09:36:08 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/jni.h>
|
#include <xp/awk/jni.h>
|
||||||
@ -211,13 +211,20 @@ JNIEXPORT void JNICALL Java_xpkit_xpj_awk_Awk_run (JNIEnv* env, jobject obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_xpkit_xpj_awk_Awk_set_1extio_1handle (
|
JNIEXPORT void JNICALL Java_xpkit_xpj_awk_Awk_set_1extio (
|
||||||
JNIEnv* env, jobject obj, jlong extio, jobject handle)
|
JNIEnv* env, jobject obj, jlong extio, jobject handle)
|
||||||
{
|
{
|
||||||
xp_awk_extio_t* epa = (xp_awk_extio_t*)extio;
|
xp_awk_extio_t* epa = (xp_awk_extio_t*)extio;
|
||||||
epa->handle = (void*)handle;
|
epa->handle = (void*)handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_xpkit_xpj_awk_Awk_get_1extio (
|
||||||
|
JNIEnv* env, jobject obj, jlong extio)
|
||||||
|
{
|
||||||
|
xp_awk_extio_t* epa = (xp_awk_extio_t*)extio;
|
||||||
|
return (jobject)epa->handle;
|
||||||
|
}
|
||||||
|
|
||||||
static xp_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
|
static xp_ssize_t __call_java_open_source (JNIEnv* env, jobject obj, int mode)
|
||||||
{
|
{
|
||||||
jclass class;
|
jclass class;
|
||||||
|
@ -5,4 +5,6 @@ EXPORTS
|
|||||||
Java_xpkit_xpj_awk_Awk_close
|
Java_xpkit_xpj_awk_Awk_close
|
||||||
Java_xpkit_xpj_awk_Awk_parse
|
Java_xpkit_xpj_awk_Awk_parse
|
||||||
Java_xpkit_xpj_awk_Awk_run
|
Java_xpkit_xpj_awk_Awk_run
|
||||||
|
Java_xpkit_xpj_awk_Awk_get_1extio
|
||||||
|
Java_xpkit_xpj_awk_Awk_set_1extio
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: run.c,v 1.238 2006-10-16 14:38:43 bacon Exp $
|
* $Id: run.c,v 1.239 2006-10-17 09:36:08 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/awk/awk_i.h>
|
#include <xp/awk/awk_i.h>
|
||||||
@ -896,6 +896,29 @@ static int __build_runarg (xp_awk_run_t* run, xp_awk_runarg_t* runarg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __update_fnr (xp_awk_run_t* run, xp_size_t fnr)
|
||||||
|
{
|
||||||
|
xp_awk_val_t* tmp;
|
||||||
|
|
||||||
|
tmp = xp_awk_makeintval (run, fnr);
|
||||||
|
if (tmp == XP_NULL)
|
||||||
|
{
|
||||||
|
run->errnum = XP_AWK_ENOMEM;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
xp_awk_refupval (tmp);
|
||||||
|
if (xp_awk_setglobal (run, XP_AWK_GLOBAL_FNR, tmp) == -1)
|
||||||
|
{
|
||||||
|
xp_awk_refdownval (run, tmp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
xp_awk_refdownval (run, tmp);
|
||||||
|
run->global.fnr = fnr;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int __set_globals_to_default (xp_awk_run_t* run)
|
static int __set_globals_to_default (xp_awk_run_t* run)
|
||||||
{
|
{
|
||||||
struct __gtab_t
|
struct __gtab_t
|
||||||
@ -1015,7 +1038,8 @@ static int __run_main (xp_awk_run_t* run, xp_awk_runarg_t* runarg)
|
|||||||
|
|
||||||
run->exit_level = EXIT_NONE;
|
run->exit_level = EXIT_NONE;
|
||||||
|
|
||||||
n = __set_globals_to_default (run);
|
n = __update_fnr (run, 0);
|
||||||
|
if (n == 0) n = __set_globals_to_default (run);
|
||||||
if (n == 0 && (run->awk->option & XP_AWK_RUNMAIN))
|
if (n == 0 && (run->awk->option & XP_AWK_RUNMAIN))
|
||||||
{
|
{
|
||||||
/* TODO: should the main function be user-specifiable? */
|
/* TODO: should the main function be user-specifiable? */
|
||||||
@ -1189,6 +1213,8 @@ static int __run_pattern_blocks (xp_awk_run_t* run)
|
|||||||
need_to_close = xp_true;
|
need_to_close = xp_true;
|
||||||
if (x == 0) break; /* end of input */
|
if (x == 0) break; /* end of input */
|
||||||
|
|
||||||
|
__update_fnr (run, run->global.fnr + 1);
|
||||||
|
|
||||||
if (__run_pattern_block_chain (run, run->awk->tree.chain) == -1)
|
if (__run_pattern_block_chain (run, run->awk->tree.chain) == -1)
|
||||||
{
|
{
|
||||||
int saved = run->errnum;
|
int saved = run->errnum;
|
||||||
@ -1878,15 +1904,16 @@ static int __run_nextfile (xp_awk_run_t* run, xp_awk_nde_nextfile_t* nde)
|
|||||||
if (run->active_block == (xp_awk_nde_blk_t*)run->awk->tree.begin ||
|
if (run->active_block == (xp_awk_nde_blk_t*)run->awk->tree.begin ||
|
||||||
run->active_block == (xp_awk_nde_blk_t*)run->awk->tree.end)
|
run->active_block == (xp_awk_nde_blk_t*)run->awk->tree.end)
|
||||||
{
|
{
|
||||||
PANIC_I (run, XP_AWK_ENEXTFILECALL);
|
run->errnum = XP_AWK_ENEXTFILECALL;
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
n = xp_awk_nextextio_read (run, XP_AWK_IN_CONSOLE, XP_T(""));
|
n = xp_awk_nextextio_read (run, XP_AWK_IN_CONSOLE, XP_T(""));
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
if (run->errnum == XP_AWK_EIOHANDLER)
|
if (run->errnum == XP_AWK_EIOHANDLER)
|
||||||
PANIC_I (run, XP_AWK_ECONINNEXT);
|
run->errnum = XP_AWK_ECONINNEXT;
|
||||||
else return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
@ -1896,9 +1923,9 @@ static int __run_nextfile (xp_awk_run_t* run, xp_awk_nde_nextfile_t* nde)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: update FILENAME, ARGIND. reset FNR to 1.
|
if (__update_fnr (run, 0) == -1) return -1;
|
||||||
* some significant changes will be required to do this */
|
|
||||||
/* Consider using FILENAME_IN and FILENAME_OUT to accomplish nextfile in/out */
|
/* TODO: Consider using FILENAME_IN and FILENAME_OUT to accomplish nextfile in/out */
|
||||||
run->exit_level = EXIT_NEXT;
|
run->exit_level = EXIT_NEXT;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2561,20 +2588,13 @@ static xp_awk_val_t* __do_assignment_map (
|
|||||||
}
|
}
|
||||||
else if (var->type == XP_AWK_NDE_GLOBALIDX)
|
else if (var->type == XP_AWK_NDE_GLOBALIDX)
|
||||||
{
|
{
|
||||||
/* decrease the reference count of the previous value.
|
|
||||||
* in fact, this is not necessary as map is always
|
|
||||||
* xp_awk_val_nil here. */
|
|
||||||
/*
|
|
||||||
xp_awk_refdownval (run, (xp_awk_val_t*)map);
|
|
||||||
STACK_GLOBAL(run,var->id.idxa) = tmp;
|
|
||||||
xp_awk_refupval (tmp);
|
xp_awk_refupval (tmp);
|
||||||
*/
|
|
||||||
if (xp_awk_setglobal (run, var->id.idxa, tmp) == -1)
|
if (xp_awk_setglobal (run, var->id.idxa, tmp) == -1)
|
||||||
{
|
{
|
||||||
xp_awk_refupval (tmp);
|
|
||||||
xp_awk_refdownval (run, tmp);
|
xp_awk_refdownval (run, tmp);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
}
|
}
|
||||||
|
xp_awk_refdownval (run, tmp);
|
||||||
}
|
}
|
||||||
else if (var->type == XP_AWK_NDE_LOCALIDX)
|
else if (var->type == XP_AWK_NDE_LOCALIDX)
|
||||||
{
|
{
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
|
BEGIN {
|
||||||
|
print "0. FILENAME=", FILENAME, "FNR=", FNR;
|
||||||
|
}
|
||||||
|
|
||||||
/hello/ {
|
/hello/ {
|
||||||
print FILENAME;
|
print "1. FILENAME=", FILENAME, "FNR=", FNR;
|
||||||
print "**1**" $0;
|
print "[" $0 "]";
|
||||||
#nextfile;
|
#nextfile;
|
||||||
print "----------------";
|
print "----------------";
|
||||||
}
|
}
|
||||||
|
|
||||||
/hello/ {
|
/hello/ {
|
||||||
print FILENAME;
|
print "2. FILENAME=", FILENAME, "FNR=", FNR;
|
||||||
print "**2**" $0;
|
print "[" $0 "]";
|
||||||
nextfile;
|
nextfile;
|
||||||
print "----------------";
|
print "----------------";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user