Recovered from cvs revision 2007-10-29 15:20:00

This commit is contained in:
2007-10-30 00:20:00 +00:00
parent 1fb4e03c11
commit 8ca13ac266
11 changed files with 382 additions and 99 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.cpp,v 1.80 2007/10/21 13:58:47 bacon Exp $
* $Id: Awk.cpp,v 1.81 2007/10/28 06:12:37 bacon Exp $
*
* {License}
*/
@ -126,6 +126,21 @@ int Awk::Console::setFileName (const char_t* name)
}
}
int Awk::Console::setFNR (long_t fnr)
{
ase_awk_val_t* tmp;
int n;
tmp = ase_awk_makeintval (extio->run, fnr);
if (tmp == ASE_NULL) return -1;
ase_awk_refupval (extio->run, tmp);
n = ase_awk_setglobal (extio->run, ASE_AWK_GLOBAL_FNR, tmp);
ase_awk_refdownval (extio->run, tmp);
return n;
}
Awk::Console::Mode Awk::Console::getMode () const
{
return (Mode)extio->mode;
@ -1677,8 +1692,7 @@ void Awk::onRunEnd (run_t* run, int errnum, void* custom)
if (errnum == ERR_NOERR && r->callbackFailed)
{
ase_awk_setrunerror (
r->run, ERR_NOMEM, 0, ASE_NULL, 0);
ase_awk_setrunerrnum (r->run, ERR_NOMEM);
}
r->awk->onRunEnd (*r);

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.hpp,v 1.79 2007/10/25 14:43:17 bacon Exp $
* $Id: Awk.hpp,v 1.80 2007/10/28 06:12:37 bacon Exp $
*
* {License}
*/
@ -273,6 +273,7 @@ public:
public:
Mode getMode () const;
int setFileName (const char_t* name);
int setFNR (long_t fnr);
protected:
char_t* filename;

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.java,v 1.29 2007/10/23 15:18:47 bacon Exp $
* $Id: Awk.java,v 1.30 2007/10/28 15:03:22 bacon Exp $
*
* {License}
*/
@ -38,7 +38,7 @@ public abstract class Awk
public static final int OPTION_EXTIO = (1 << 7);
public static final int OPTION_COPROC = (1 << 8);
public static final int OPTION_BLOCKLESS = (1 << 9);
public static final int OPTION_ASEONE = (1 << 10);
public static final int OPTION_BASEONE = (1 << 10);
public static final int OPTION_STRIPSPACES = (1 << 11);
public static final int OPTION_NEXTOFILE = (1 << 12);
public static final int OPTION_CRLF = (1 << 13);

View File

@ -1,5 +1,5 @@
/*
* $Id: awk_i.h,v 1.9 2007/10/24 09:57:45 bacon Exp $
* $Id: awk_i.h,v 1.10 2007/10/28 06:12:37 bacon Exp $
*
* {License}
*/
@ -256,7 +256,9 @@ struct ase_awk_run_t
void* rs;
void* fs;
int ignorecase;
ase_size_t fnr;
ase_long_t nr;
ase_long_t fnr;
struct
{

View File

@ -1,5 +1,5 @@
/*
* $Id: extio.c,v 1.7 2007/10/26 12:49:24 bacon Exp $
* $Id: extio.c,v 1.8 2007/10/28 06:12:37 bacon Exp $
*
* {License}
*/
@ -392,33 +392,6 @@ int ase_awk_readextio (
rs->type != ASE_AWK_VAL_STR) ASE_AWK_FREE (run->awk, rs_ptr);
ase_awk_refdownval (run, rs);
/* increment NR for console input */
if (extio_type == ASE_AWK_EXTIO_CONSOLE && ret != -1 && ret != 0)
{
ase_awk_val_t* nr;
ase_long_t lv;
ase_real_t rv;
nr = ase_awk_getglobal (run, ASE_AWK_GLOBAL_NR);
ase_awk_refupval (run, nr);
n = ase_awk_valtonum (run, nr, &lv, &rv);
ase_awk_refdownval (run, nr);
if (n == -1) ret = -1;
else
{
if (n == 1) lv = (ase_long_t)rv;
nr = ase_awk_makeintval (run, lv + 1);
if (nr == ASE_NULL) ret = -1;
else
{
if (ase_awk_setglobal (
run, ASE_AWK_GLOBAL_NR, nr) == -1) ret = -1;
}
}
}
return ret;
}

View File

@ -1,5 +1,5 @@
/*
* $Id: rec.c,v 1.4 2007/10/21 13:58:47 bacon Exp $
* $Id: rec.c,v 1.5 2007/10/28 06:12:37 bacon Exp $
*
* {License}
*/
@ -224,8 +224,14 @@ static int __split_record (ase_awk_run_t* run)
v = ase_awk_makeintval (run, (ase_long_t)nflds);
if (v == ASE_NULL) return -1;
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_NF, v) == -1) return -1;
ase_awk_refupval (run, v);
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_NF, v) == -1)
{
ase_awk_refdownval (run, v);
return -1;
}
ase_awk_refdownval (run, v);
ASE_ASSERT (nflds == run->inrec.nflds);
return 0;
}
@ -422,8 +428,13 @@ static int __recomp_record_fields (
v = ase_awk_makeintval (run, (ase_long_t)max);
if (v == ASE_NULL) return -1;
if (ase_awk_setglobal (
run, ASE_AWK_GLOBAL_NF, v) == -1) return -1;
ase_awk_refupval (run, v);
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_NF, v) == -1)
{
ase_awk_refdownval (run, v);
return -1;
}
ase_awk_refdownval (run, v);
}
return 0;

View File

@ -1,5 +1,5 @@
/*
* $Id: run.c,v 1.19 2007/10/25 14:43:17 bacon Exp $
* $Id: run.c,v 1.20 2007/10/28 06:12:37 bacon Exp $
*
* {License}
*/
@ -308,6 +308,18 @@ static int set_global (
run->global.convfmt.ptr = convfmt_ptr;
run->global.convfmt.len = convfmt_len;
}
else if (idx == ASE_AWK_GLOBAL_FNR)
{
int n;
ase_long_t lv;
ase_real_t rv;
n = ase_awk_valtonum (run, val, &lv, &rv);
if (n == -1) return -1;
if (n == 1) lv = (ase_long_t)rv;
run->global.fnr = lv;
}
else if (idx == ASE_AWK_GLOBAL_FS)
{
ase_char_t* fs_ptr;
@ -356,17 +368,17 @@ static int set_global (
else if (idx == ASE_AWK_GLOBAL_IGNORECASE)
{
if ((val->type == ASE_AWK_VAL_INT &&
((ase_awk_val_int_t*)val)->val == 0) ||
((ase_awk_val_int_t*)val)->val != 0) ||
(val->type == ASE_AWK_VAL_REAL &&
((ase_awk_val_real_t*)val)->val == 0.0) ||
((ase_awk_val_real_t*)val)->val != 0.0) ||
(val->type == ASE_AWK_VAL_STR &&
((ase_awk_val_str_t*)val)->len == 0))
((ase_awk_val_str_t*)val)->len != 0))
{
run->global.ignorecase = 0;
run->global.ignorecase = 1;
}
else
{
run->global.ignorecase = 1;
run->global.ignorecase = 0;
}
}
else if (idx == ASE_AWK_GLOBAL_NF)
@ -389,6 +401,18 @@ static int set_global (
}
}
}
else if (idx == ASE_AWK_GLOBAL_NR)
{
int n;
ase_long_t lv;
ase_real_t rv;
n = ase_awk_valtonum (run, val, &lv, &rv);
if (n == -1) return -1;
if (n == 1) lv = (ase_long_t)rv;
run->global.nr = lv;
}
else if (idx == ASE_AWK_GLOBAL_OFMT)
{
ase_char_t* ofmt_ptr;
@ -650,7 +674,7 @@ int ase_awk_run (ase_awk_t* awk,
}
else
{
ase_awk_seterror (awk, ASE_AWK_ERUNTIME, 0, ASE_NULL, 0);
ase_awk_seterrnum (awk, ASE_AWK_ERUNTIME);
}
}
@ -1043,22 +1067,45 @@ static void cleanup_globals (ase_awk_run_t* run)
}
}
static int update_fnr (ase_awk_run_t* run, ase_size_t fnr)
static int update_fnr (ase_awk_run_t* run, ase_long_t fnr, ase_long_t nr)
{
ase_awk_val_t* tmp;
ase_awk_val_t* tmp1, * tmp2;
tmp = ase_awk_makeintval (run, fnr);
if (tmp == ASE_NULL) return -1;
tmp1 = ase_awk_makeintval (run, fnr);
if (tmp1 == ASE_NULL) return -1;
ase_awk_refupval (run, tmp);
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_FNR, tmp) == -1)
ase_awk_refupval (run, tmp1);
if (nr == fnr) tmp2 = tmp1;
else
{
ase_awk_refdownval (run, tmp);
tmp2 = ase_awk_makeintval (run, nr);
if (tmp2 == ASE_NULL)
{
ase_awk_refdownval (run, tmp1);
return -1;
}
ase_awk_refupval (run, tmp2);
}
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_FNR, tmp1) == -1)
{
if (nr != fnr) ase_awk_refdownval (run, tmp2);
ase_awk_refdownval (run, tmp1);
return -1;
}
ase_awk_refdownval (run, tmp);
run->global.fnr = fnr;
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_NR, tmp2) == -1)
{
if (nr != fnr) ase_awk_refdownval (run, tmp2);
ase_awk_refdownval (run, tmp1);
return -1;
}
if (nr != fnr) ase_awk_refdownval (run, tmp2);
ase_awk_refdownval (run, tmp1);
return 0;
}
@ -1154,15 +1201,6 @@ static int run_main (
}
}
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_NR, ase_awk_val_zero) == -1)
{
/* it can simply restore the top of the stack this way
* because the values pused onto the stack so far are
* all ase_awk_val_nils */
run->stack_top = saved_stack_top;
return -1;
}
if (ase_awk_setglobal (run, ASE_AWK_GLOBAL_NF, ase_awk_val_zero) == -1)
{
/* it can simply restore the top of the stack this way
@ -1185,7 +1223,7 @@ static int run_main (
run->exit_level = EXIT_NONE;
n = update_fnr (run, 0);
n = update_fnr (run, 0, 0);
if (n == 0) n = set_globals_to_default (run);
if (n == 0 && main != ASE_NULL)
{
@ -1451,7 +1489,7 @@ static int run_pattern_blocks (ase_awk_run_t* run)
}
if (n == 0) break; /* end of input */
if (update_fnr (run, run->global.fnr+1) == -1)
if (update_fnr (run, run->global.fnr+1, run->global.nr+1) == -1)
{
ADJUST_ERROR_LINE (run);
return -1;
@ -2245,7 +2283,8 @@ static int run_nextinfile (ase_awk_run_t* run, ase_awk_nde_nextfile_t* nde)
return 0;
}
if (update_fnr (run, 0) == -1)
/* FNR resets to 0, NR remains the same */
if (update_fnr (run, 0, run->global.nr) == -1)
{
run->errlin = nde->line;
return -1;
@ -3158,6 +3197,8 @@ static ase_awk_val_t* do_assignment_scalar (
{
if (set_global (run, var->id.idxa, var, val) == -1)
{
/* adjust error line */
run->errlin = var->line;
return ASE_NULL;
}
}